3.3.8. Перенос объектов в приложении и между приложениями

Поскольку мы сделали все возможное, чтобы механика работы с объектами приложений Synergy была близка к работе с обычными файлами и папками, то дополнительно реализовали новый функционал - возможность перемещения объектов, причем как между папками одного приложения, так и между разными приложениями. Однако подход к перемещению для этих вариантов отличается.

3.3.8.1. Перемещение внутри приложения

Перемещение внутри приложения доступно для всех объектов приложения, кроме самого приложения и некоторых дочерних сущностей: нод скриптов и дочерних групп.

У всех остальных объектов в контекстном меню есть пункт «Переместить - В текущем приложении». При этом откроется диалог выбора папки приложения, в которую будет перемещен объект:

Рисунок 3.94. Выбор целевой папки для перемещения

Выбор целевой папки для перемещения

В качестве целевой папки нельзя выбирать папку, в которой изначально находится перемещаемый объект, и его дочернюю папку.

Кроме того, при перемещении папок выполняется проверка уникальности имени: нельзя переместить папку туда, где уже есть папка с таким же названием.

В результате перемещения объект меняет свое расположение, что видно в навигаторе. Свойства и связи объекта при этом сохраняются.

3.3.8.2. Перемещение между приложениями

Особенность перемещения объектов между приложениями - необходимость сохранять все их связи, поскольку приложения должны быть изолированными друг от друга.

Перемещение недоступно для папок приложения и для дочерних нод объектов. У всех остальных объектов в контекстном меню есть пункт «Переместить - В приложение…». Далее в меню расположен список приложений, на которые у текущего пользователя есть право «Изменение». Если таких приложений нет, пункт «В приложение» заблокирован.

После выбора приложения, куда нужно переместить выбранный объект, открывается диалоговое окно «Перемещение объектов»:

Рисунок 3.95. Перемещение объектов

Перемещение объектов

В этом окне содержится таблица объектов приложения, причем в ней включены флаги всех объектов, связанных с изначально выбранным.

При перемещении между приложениями учитываются все зависимости объекта:

  • зависимости «вниз»: все объекты, на которые ссылается или которые использует выбранный объект. Примером зависимости «вниз» является зависимость реестра от формы и зависимость формы от пользовательских компонентов, которые на ней размещены.

  • зависимости «вверх»: все объекты, которые ссылаются на выбранные объект. Например, зависимостью «вверх» считается зависимость шаблона номера от журнала, в котором используется этот номер, и зависимость этого шаблона от формы, в которой располагается компонент «Номер», ссылающийся на этот шаблон.

Примечание: для приложений с большим количеством объектов вычисление зависимостей может выполняться достаточно долго.

На этапе отображения дерева перемещаемых объектов можно дополнительно выбрать другие объекты, требующие перемещения. При необходимости можно снять выбор с автоматически выделенных объектов, но при этом также будет снято выделение со всех объектов, связанных с ним.

Для больших приложений часто сложно ответить на вопрос, как связан исходный перемещаемый объект с тем, который автоматически выделен в дереве. Для того, чтобы ответить на этот вопрос, можно использовать функцию отображения связей любого выделенного объекта с исходным. Панель, содержащая связи объектов, отображается с помощью кнопки :

Рисунок 3.96. Отображение связей исходного объекта с выделенным в дереве

Отображение связей исходного объекта с выделенным в дереве

При наличии нескольких путей, связывающих эти объекты, будет отображен один из путей, выбранный произвольным образом.

Если все нужные объекты выбраны, то нужно перейти к следующему шагу перемещения, нажав на кнопку «Далее». Откроется дерево папок целевого приложения, в котором необходимо выбрать папку, куда будут добавлены все перемещаемые объекты:

Рисунок 3.97. Выбор целевой папки

Выбор целевой папки

То есть даже в том случае, если в исходном приложении перемещаемые объекты располагались в разных папках, после перемещения все они будут добавлены в одну выбранную папку. После перемещения между приложениями их можно будет распределить по папкам с помощью перемещения внутри приложения.

Выбранные объекты будут перемещены в целевое приложение после нажатия на кнопку «Переместить».