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

Thanks for your help Vlad and Cherie,



as it seems my problem lies deeper. I wanted to trigger a move which was ok 
in the domain model but was not specified in the gmfmap model. After the 
execution of my command the view was corrupted. I think I will have to 
modify my gmfmap model.



Cheers,

 Jörg




"Cherie Revells" <crevells@xxxxxxxxxx> wrote in message 
news:eols34$mbo$1@xxxxxxxxxxxxxxxxxxxx
> Jörg,
>
> This seems to work fine in the Taipan Example -- you can move small and 
> large items from one ship to another.  I would suggest looking to see how 
> it is accomplished here.
>
> Regards,
> Cherie
>
> Jörg Weinmann wrote:
>> 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:
>>>>>
>>