Создание узлов программно в Eclipse GMF

Я разрабатываю редактор для разработки пользовательских интерфейсов на основе eclipse GMF.

До сих пор я разработал редактор с палитрой. Пользователь может перетаскивать элементы пользовательского интерфейса из палитры и создавать пользовательский интерфейс на холсте. Мне нужно реализовать средство для группировки этих элементов пользовательского интерфейса.

ПРИМЕР: Сначала пользователь создает пользовательский интерфейс, перетаскивая элементы на холст. Затем он выбирает набор элементов пользовательского интерфейса (скажем, метку и текстовое поле) и нажимает кнопку «группировать». Он автоматически поместит элементы в прямоугольник пунктирной линии.

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

Но я не знаю, с чего начать.

Итак, я хочу знать, как программно создавать/удалять узлы в GMF.

Если вы знаете соответствующие коды, поделитесь ими и укажите мне на некоторые полезные ресурсы.


person pavithraCS    schedule 28.08.2011    source источник


Ответы (2)


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

CreateUnspecifiedTypeRequest request = new
    CreateUnspecifiedTypeRequest(
        Collections.singletonList(EcoreElementTypes.EClass_1001),
        diagramEditPart.getDiagramPreferencesHint());

Command command = diagramEditPart.getCommand(request);
command.execute();

Object newObject = request.getNewObject(); // these are the newly created objects
person guido    schedule 11.01.2013

Добавление дополнительных элементов при перетаскивании чего-либо из палитры также возможно с помощью, например. отложенные команды. Эти команды создаются при создании запроса элемента палитры, но окончательная позиция и вид еще не известны (только во время перетаскивания). Соответствующее представление разрешается позже.

существующий класс команд, который использует этот механизм: DeferredCreateConnectionViewAndElementCommand или DeferredSetValueCommand

Чтобы использовать эти классы, вы должны найти правильное место в процессе создания вашего запроса, где представления создаются с помощью CreateViewRequest. Этот запрос содержит необходимую информацию (request.getNewObject()), которая получает представление, как только объект из палитры куда-то перетаскивается.

См. этот пример для получения дополнительной информации: http://wiki.eclipse.org/GMF_Tutorial_Part_3

person guido    schedule 29.04.2013