GMF - Программное расширение/свертывание отсека

У меня есть класс EntitiesContainer, который содержит несколько отсеков.

То, что я сделал, это в основном, когда вы щелкаете правой кнопкой мыши по отделению или отделениюName, чтобы прослушать это событие с помощью прослушивателя двойного щелчка, который применяется как к отделениюXEditpart, так и к отделениюXNameEditpart.

Теперь я хотел бы добиться чего-то вроде расширения или свертывания этого отсека на основе двойного щелчка, но я не нашел способа сделать это. Как я могу подойти к нему через EditPart этого отсека?

Также можно ли закрыть все остальные отсеки при открытии одного, и если да, то это нужно сделать с помощью AddSemanticListeners-listenerFilters?

Любые подсказки будут оценены.


person nmargaritis    schedule 23.10.2014    source источник


Ответы (1)


Чтобы развернуть/свернуть отсек, вам нужно создать ChangePropertyValueRequest, получить команду для этого запроса из вашей части редактирования отсека, а затем выполнить эту команду в стеке команд (expand — логическое значение):

    ChangePropertyValueRequest request = new ChangePropertyValueRequest(
    DiagramUIMessages.PropertyDescriptorFactory_CollapseCompartment,
    Properties.ID_COLLAPSED, expand);
        getDomain().getCommandStack().execute(command);

Да, вы также можете открыть/закрыть другие отсеки, создав тот же запрос и создав дополнительные команды (точно так, как показано выше) для частей редактирования родственного отсека. Единственная сложность заключается в том, что вам нужно будет найти эти родственные разделы EditoArts в дереве editparts. Кроме того, если у вас есть несколько этих команд, оберните их в CompoundCommand GEF или CompositeCommand GMF, чтобы несколько команд выполнялись как одна команда, а действия отмены/повторения обрабатывали этот случай правильно. (Посмотрите на org.eclipse.gmf.runtime.diagram.ui.internal.tools.CompartmentCollapseTracker)

person aboyko    schedule 24.10.2014
comment
спасибо за ответ, где должен быть создан changePropertyValueRequest? Мой слушатель находится в части редактирования. Также это команда, на которую вы ссылаетесь? final Command cmd = myEditPart.getCommand(req); cmd.execute(); - person nmargaritis; 25.10.2014
comment
Вы можете создать запрос практически в любом месте, которое вы считаете нужным - никаких ограничений на это. Я полагаю, что несколько сложной частью будет найти правильную часть редактирования для получения команды. Вы можете выполнить команду через cmd.execute(), но тогда она вряд ли будет выполнена в транзакции EMF. Я бы рекомендовал получить ссылку на CommandStack и выполнить команду из него. - person aboyko; 26.10.2014
comment
Спасибо, мне удалось сделать это, вызвав из моих xxxEditPart и xxxNameEditPart (внутри прослушивателей двойного щелчка) метод xxxCompartmentEditPart, который я создал, с именем collapCompartment, который принимает логическое значение. Сам по себе метод public void collapseCompartment(booelan collapse) { ChangePropertyValueRequest request = new ChangePropertyValueRequest( DiagramUIMessages.PropertyDescriptorFactory_CollapseCompartment, Properties.ID_COLLAPSED, collapse); getEditDomain().getCommandStack().execute(getCommand(request)); } я принимаю ваш ответ как решение. - person nmargaritis; 27.10.2014