[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.gmf] Re: Programmatically drag and drop

I think all container elements are cononical, because they are generated by 
GMF. I've put a break point in the shouldHandleNotificationEvent method, but 
it seems that it always returns true. I also tried to refresh the diagram 
elements manually, but it also doesn't work. Are you sure that the 
MoveRequest is the right request? AFAIU "REQ_MOVE" means moving children in 
the same parent container, but I want to "deparent" them and add them to an 
other parent. On the other hand, the underlying data structure gets 
correctly updated, so MoveRequest could be right.

I have to admit I am a little frustrated at the moment. I would really 
appriciate more hints to a solution. Thanks.

Cheers,
 Jörg



"Vlad Ciubotariu" <vcciubot@xxxxxxxxxxxx> wrote in message 
news:pan.2007.01.16.16.05.17.340180@xxxxxxxxxxxxxxx
> Are the containers you are moving canonical? Meaning, do the compartments
> have canonical edit policies installed? If so you can put a break point in
> CanonicalEditPolicy#shouldHandleNotificationEvent to see whether it
> returns true after your command gets executed.
>
> In my case I override it like this:
>
> protected boolean shouldHandleNotificationEvent(Notification event) {
> Object element = event.getNotifier();
>
> if (element instanceof EObject && !(element instanceof View)
> && NotificationUtil.isSlotModified(event))
> return true;
>
> return super.shouldHandleNotificationEvent(event);
>
> }
>
> This might trigger the update in your case too. I don't remember why I
> added this code, but I think I was having a similar problem.
>
> -vlad
>
>
> On Tue, 16 Jan 2007 14:16:04 +0100, Jörg Weinmann wrote:
>
>> I modified my action like you advised, but the result is the same like
>> before: the underlying data model is correctly changed, but the visual
>> representation is not correctly updated.
>>
>>
>>  MoveRequest moveRequest = new
>> MoveRequest(selectedElement.getEditingDomain(), createdModelElement,
>> listOfContainedElements);
>>  MoveElementsCommand moveCommand = new MoveElementsCommand(moveRequest);
>>
>>   IOperationHistory history = 
>> OperationHistoryFactory.getOperationHistory();
>>   try {
>>    history.execute(moveCommand, new NullProgressMonitor(), null);
>>   } catch (ExecutionException e) {
>>    // TODO Auto-generated catch block
>>    e.printStackTrace();
>>   }
>>
>> Cheers,
>>  Jörg
>>
>>
>>
>> "Jörg Weinmann" <joerg.weinmann@xxxxxxxxxxxxxxxxxx> wrote in message
>> news:eoibgm$3q6$1@xxxxxxxxxxxxxxxxxxxx
>>> Thanks,
>>>
>>> I think what you described already exitsts:
>>> org.eclipse.gmf.runtime.emf.type.core.commands.MoveElementsCommand
>>>
>>> My code looks like this:
>>> MoveRequest moveRequest = new
>>> MoveRequest(selectedElement.getEditingDomain(), createdModelElement,
>>> listOfContainedElements);
>>>
>>> MoveElementsCommand moveCommand = new MoveElementsCommand(moveRequest);
>>>
>>>
>>> selectedElement.getDiagramEditDomain().getDiagramCommandStack().execute(new
>>> ICommandProxy(moveCommand));
>>>
>>>
>>> But the visuals don't get updated. I have to close and reopen the 
>>> diagram
>>> to see the changes. Is there a way to force a refresh on the whole
>>> diagram?
>>>
>>> Cheers,
>>> Jörg
>>>
>>>
>>> "Vlad Ciubotariu" <vcciubot@xxxxxxxxxxxx> wrote in message
>>> news:pan.2007.01.15.17.29.52.516113@xxxxxxxxxxxxxxx
>>>> The easiest way would be to create your abstract transactional command
>>>> that adds one component to a different container. This is equivalent of 
>>>> a
>>>> move since EMF will remove it from its previous container.
>>>>
>>>> Execute that command on the operation history.
>>>>
>>>> -vlad
>>>>
>>>> On Mon, 15 Jan 2007 18:16:51 +0100, Jörg Weinmann wrote:
>>>>
>>>>> Hi everybody,
>>>>>
>>>>> I need some help with the various Request subclasses of GMF-runtime.
>>>>> In my EMF model the class "Component" has a reference "contains" to
>>>>> itself,
>>>>> so that a Component can contain several other "Components". I already
>>>>> have a
>>>>> GMF-generated editor for my model.
>>>>>
>>>>> So for example, let C_A be a Component which contains Components C_A1
>>>>> and
>>>>> C_A2. And let C_B be an other Component.
>>>>> What I want to do is programmatically move C_A1 and C_A2 to C_B, so 
>>>>> that
>>>>> C_B
>>>>> contains C_A1 and C_A2 and C_A is "empty".
>>>>>
>>>>> I already tried SetRequest&DestroyRequest and MoveRequest, but it is 
>>>>> not
>>>>> working like I exepected it. So basically all I want to do is simulate 
>>>>> a
>>>>> d&d
>>>>> programmtically.
>>>>>
>>>>>
>>>>> My underlying gmf model loks like this:
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <ecore:EPackage xmi:version="2.0"
>>>>>     xmlns:xmi="http://www.omg.org/XMI";
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore";
>>>>> name="ConnectorComponent"
>>>>>     nsURI="www.iese.fraunhofer.de/ConnectorComponent" 
>>>>> nsPrefix="cmpnt">
>>>>>   <eClassifiers xsi:type="ecore:EClass" name="AbstractComponent"
>>>>> abstract="true" eSuperTypes="#//ArchitecturalElements">
>>>>>     <eStructuralFeatures xsi:type="ecore:EReference" name="contains"
>>>>> upperBound="-1"
>>>>>         eType="#//AbstractComponent" containment="true"/>
>>>>>     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"
>>>>> eType="ecore:EDataType
>>>>> http://www.eclipse.org/emf/2002/Ecore#//EString"/>
>>>>>   </eClassifiers>
>>>>>   <eClassifiers xsi:type="ecore:EClass" name="AbstractConnector"
>>>>> abstract="true" eSuperTypes="#//ArchitecturalElements">
>>>>>     <eStructuralFeatures xsi:type="ecore:EReference" name="source"
>>>>> lowerBound="1"
>>>>>         eType="#//AbstractComponent"/>
>>>>>     <eStructuralFeatures xsi:type="ecore:EReference" name="target"
>>>>> lowerBound="1"
>>>>>         eType="#//AbstractComponent"/>
>>>>>     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name"
>>>>> eType="ecore:EDataType
>>>>> http://www.eclipse.org/emf/2002/Ecore#//EString"/>
>>>>>   </eClassifiers>
>>>>>   <eClassifiers xsi:type="ecore:EClass" 
>>>>> name="ArchitecturalDescription">
>>>>>     <eStructuralFeatures xsi:type="ecore:EReference" name="has"
>>>>> upperBound="-1" eType="#//ArchitecturalElements"
>>>>>         containment="true"/>
>>>>>   </eClassifiers>
>>>>>   <eClassifiers xsi:type="ecore:EClass" name="ArchitecturalElements"
>>>>> abstract="true"/>
>>>>>   <eClassifiers xsi:type="ecore:EClass" name="Connector"
>>>>> eSuperTypes="#//AbstractConnector"/>
>>>>>   <eClassifiers xsi:type="ecore:EClass" name="Component"
>>>>> eSuperTypes="#//AbstractComponent"/>
>>>>> </ecore:EPackage>
>>>>>
>>>>> Input:
>>>>
>>>
>>>
>