Поскольку мы сделали все возможное, чтобы механика работы с объектами приложений Synergy была близка к работе с обычными файлами и папками, то дополнительно реализовали новый функционал - возможность перемещения объектов, причем как между папками одного приложения, так и между разными приложениями. Однако подход к перемещению для этих вариантов отличается.
Перемещение внутри приложения доступно для всех объектов приложения, кроме самого приложения и некоторых дочерних сущностей: нод скриптов и дочерних групп.
У всех остальных объектов в контекстном меню есть пункт «Переместить - В текущем приложении». При этом откроется диалог выбора папки приложения, в которую будет перемещен объект:
В качестве целевой папки нельзя выбирать папку, в которой изначально находится перемещаемый объект, и его дочернюю папку.
Кроме того, при перемещении папок выполняется проверка уникальности имени: нельзя переместить папку туда, где уже есть папка с таким же названием.
В результате перемещения объект меняет свое расположение, что видно в навигаторе. Свойства и связи объекта при этом сохраняются.
Особенность перемещения объектов между приложениями - необходимость сохранять все их связи, поскольку приложения должны быть изолированными друг от друга.
Перемещение недоступно для папок приложения и для дочерних нод объектов. У всех остальных объектов в контекстном меню есть пункт «Переместить - В приложение…». Далее в меню расположен список приложений, на которые у текущего пользователя есть право «Изменение». Если таких приложений нет, пункт «В приложение» заблокирован.
После выбора приложения, куда нужно переместить выбранный объект, открывается диалоговое окно «Перемещение объектов»:
В этом окне содержится таблица объектов приложения, причем в ней включены флаги всех объектов, связанных с изначально выбранным.
При перемещении между приложениями учитываются все зависимости объекта:
зависимости «вниз»: все объекты, на которые ссылается или которые использует выбранный объект. Примером зависимости «вниз» является зависимость реестра от формы и зависимость формы от пользовательских компонентов, которые на ней размещены.
зависимости «вверх»: все объекты, которые ссылаются на выбранные объект. Например, зависимостью «вверх» считается зависимость шаблона номера от журнала, в котором используется этот номер, и зависимость этого шаблона от формы, в которой располагается компонент «Номер», ссылающийся на этот шаблон.
Примечание: для приложений с большим количеством объектов вычисление зависимостей может выполняться достаточно долго.
На этапе отображения дерева перемещаемых объектов можно дополнительно выбрать другие объекты, требующие перемещения. При необходимости можно снять выбор с автоматически выделенных объектов, но при этом также будет снято выделение со всех объектов, связанных с ним.
Для больших приложений часто сложно ответить на вопрос, как связан исходный перемещаемый объект с тем, который автоматически выделен в дереве. Для того, чтобы ответить на этот вопрос, можно использовать функцию отображения связей любого выделенного объекта с исходным. Панель, содержащая связи объектов, отображается с помощью кнопки :
При наличии нескольких путей, связывающих эти объекты, будет отображен один из путей, выбранный произвольным образом.
Если все нужные объекты выбраны, то нужно перейти к следующему шагу перемещения, нажав на кнопку «Далее». Откроется дерево папок целевого приложения, в котором необходимо выбрать папку, куда будут добавлены все перемещаемые объекты:
То есть даже в том случае, если в исходном приложении перемещаемые объекты располагались в разных папках, после перемещения все они будут добавлены в одну выбранную папку. После перемещения между приложениями их можно будет распределить по папкам с помощью перемещения внутри приложения.
Выбранные объекты будут перемещены в целевое приложение после нажатия на кнопку «Переместить».