[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: Re : [gmf-dev] Run a Edit Policy to Open a sub-diagram with pop-up menu
|
Hi,
Please use the newsgroup/forum for this kind of question.
Thanks,
Mariot
b0b_ChoK a écrit :
> Hello,
>
> After numerous tours and bends, I found approximately how to open a
> sub-diagram since a pull-down menu.
>
> But I have some concerns to open several sub-diagrams different since
> a contextual menu and since the same element.
>
> I have write a small documentation to explain how I made, see below.
> (Sorry for my low level English)
>
> In the last part of this documentation, you will see that I cheated
> and that I initialize a new diagram in every opening of a sub-diagram.
> I am conscious that this solution is not optimal and can be problematic.
> I look for a solution who shall allow to avoid the bend which I used.
> If somebody has an idea to allow how to have some sub-diagram for a
> selected element.
>
> Thank you in advance
> _____________________________________________________________________________________________________________________________
>
>
> How to open a sub-diagram from a pop-up menu in a editor generated
> with GMF?
>
>
> Problem
>
> I want to open different sub-diagrams from an action initialized with
> a pop up (or contextual) menu in a main editor.
>
> I have two objectives:
>
> - I want to open a sub-diagram with the menu,
>
> - I want to open several sub-diagrams from a selected element in the
> main diagram that show different kinds of information.
>
> I need to know how to create a pop up menu; I found this solution in
> the tutorial http://wiki.eclipse.org/GMF_Tutorial_Part_3#Custom_Actions.
>
> After implementing this tutorial, I have created a new class in my
> MainEditor.diagram Eclipse project that represent the fonction call
> when option is selected in the pop up menu. This class implements
> IObjectActionDelegate and have three method unimplemented:
>
> *public* *class* MainEditorOpenXXXDiagramAction *implements*
> IObjectActionDelegate{
>
>
>
> @Override
>
> *public* *void* setActivePart(IAction action, IWorkbenchPart
> targetPart) {
>
> }
>
>
>
> @Override
>
> *public* *void* run(IAction action) {
>
> }
>
>
>
> @Override
>
> *public* *void* selectionChanged(IAction action, ISelection
> selection) {
>
> }
>
> }
>
> The method /run/ is called when the option is selected in pop up menu.
> Now I want to open a diagram from this method.
>
> I have the class OpenXXXDiagramEditPolicy generated with the feature
> that allow to open a diagram with a double click on an element in my
> diagram (http://www.jevon.org/wiki/GMF_Diagram_Partitioning).
>
> How to access to the element selected in the editor from
> MainEditorOpenXXXDiagramAction?
>
> How to open the wished editor from this class?
>
>
> Solutions found
>
>
> Open diagram with pop up menu
>
> The selectionChanged parameter in selectionChanged method from
> MainEditorOpenXXXDiagramAction indicates the element selected in the
> editor. We need to cast this attribute in IStructuredSelection to
> access to the contained element:
>
> @Override
>
> *public* *void* selectionChanged(IAction action, ISelection selection) {
>
> IStructuredSelection select = (IStructuredSelection) selection;
>
> *if*(select.getFirstElement() *instanceof* MyElement_TypeEditPart){
>
> selectedElement = (MyElement_TypeEditPart)
> select.getFirstElement();
>
> }
>
> }
>
> With this example, we recover the element selected in an attributes
> selectedElement which. Now we need to initialize the new diagram with
> the OpenXXXDiagramEditPolicy. The method getOpenCommand allow creating
> the command that open the diagram, but the generated method have a
> Request parameter. If we look at the code, we see that the editPart
> element is extracted from the request parameter. We can overload the
> method with an editPart in replacement the Request:
>
> /**
>
> * *@generated* NOT
>
> */
>
> *public* Command getOpenCommand(EditPart request) {
>
> EditPart targetEditPart = request;
>
> *if* (*false* == targetEditPart.getModel() *instanceof* View) {
>
> *return* *null*;
>
> }
>
> View view = (View) targetEditPart.getModel();
>
> Style link = view.getStyle(NotationPackage./eINSTANCE/
>
> .getHintedDiagramLinkStyle());
>
> *if* (*false* == link *instanceof* HintedDiagramLinkStyle) {
>
> *return* *null*;
>
> }
>
> *return* *new* ICommandProxy(*new* OpenXXXDiagramCommand(
>
> (HintedDiagramLinkStyle) link));
>
> }
>
> Now in my MainEditorOpenXXXDiagramAction class, I can call the
> getOpenCommand with my selectedElement who are an EditPart:
>
> @Override
>
> *public* *void* run(IAction action) {
>
> OpenIBDiagramEditPolicy od = *new* OpenIBDiagramEditPolicy();
>
> Command cmd = od.getOpenCommand(aswcEP);
>
> *if*(cmd != *null* && cmd.canExecute())
>
> cmd.execute();
>
> }
>
> To open the diagram, we need just to execute the command.
>
>
> Open several diagram from the same selected element
>
> The OpenXXXDiagramEditPolicy class allows opening a diagram which has
> a designed element as root in the Meta model.
>
> If we try to apply the next solution to open several diagram, we saw
> that the same diagram is always open. I have a solution to bypass them.
>
> If we look at the class OpenXXXDiagramCommand (in
> OpenXXXDiagramEditPolicy), the method doExecuteWithResult test if they
> are already a sub-diagram initialized from the selected element.
> Obviously, a diagram initialized from an element is unique and I have
> not found for the moment the good solution:
>
> /**
>
> * *@generated* NOT
>
> */
>
> *protected* CommandResult doExecuteWithResult(IProgressMonitor monitor,
>
> IAdaptable info) *throws* ExecutionException {
>
> *try* {
>
> // Diagram diagram = getDiagramToOpen();
>
> // if (diagram == null) {
>
> Diagram diagram = intializeNewDiagram();
>
> // }
>
>
>
> URI uri = EcoreUtil./getURI/(diagram);
>
> String editorName = uri.lastSegment()
>
> + "#" +
> diagram.eResource().getContents().indexOf(diagram); //$NON-NLS-1$
>
> IEditorInput editorInput = *new* URIEditorInput(uri,
> editorName);
>
> IWorkbenchPage page = PlatformUI./getWorkbench/()
>
> .getActiveWorkbenchWindow().getActivePage();
>
> page.openEditor(editorInput, getEditorID());
>
> *return* CommandResult./newOKCommandResult/();
>
> } *catch* (Exception ex) {
>
> *throw* *new* ExecutionException("Can't open diagram", ex);
>
> }
>
> }
>
> In this case, I force the initialization of a new diagram to each call
> of the method. They are some disadvantage with this solution. First,
> we don't control the memory stack, and two we can save the arrangement
> of element. I looking for always...
>
>
> ______________________________________________________________________________________________________________________________
>
>
>
> DEWAS Albert
> Etudiant à l'IUP Systèmes Intelligents en Master 2
>
> Stagiaire chez Continental Toulouse -
> Albert.Dewas@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> Trésorier de l'association Kojima - www.kojima-asso.fr
> <http://www.kojima-asso.fr>
> Tél : 06 87 74 53 89
> Email : b0b_ChoK@xxxxxxxx / a.dewas@xxxxxxxxxxx
>
>
>
> ------------------------------------------------------------------------
> *De :* b0b_ChoK <b0b_chok@xxxxxxxx>
> *À :* gmf-dev@xxxxxxxxxxx
> *Envoyé le :* Ven 23 avril 2010, 9h 42min 41s
> *Objet :* [gmf-dev] Run a Edit Policy to Open a sub-diagram with
> pop-up menu
>
> Hello everybody!
>
> I work on a modelling tool based on GMF allowing to connect Software
> Component between them. I would like to open for each Software
> Component two sub-diagram representing the internal architecture and
> the temporal behavior.
>
> I realized my main editor and my two sub-editor. I can reach directly
> in one of my sub-editor in double clicking a Software Component in my
> main editor, but not to the second.
> I shall like having a pop up menu on my Software Component which
> allows me to open the sub-editor of my choice.
>
> I managed to add to the main editor new options in the pop-up menu (or
> contextual menu), but I do not know how to implement the method run
> which is executed when the entry of the pop-up menu is selected to
> open the corresponding sub-diagram.
>
> So I have my classes OpenXXXDiagramEditPolicy to open every
> sub-diagram and my classes OpenXXXDiagramAction which correspond to
> every option of the pop-up menu.
> Every class OpenXXXDiagramAction has a method run(IAction action) to
> implement, but I don't know how to use the class
> OpenXXXDiagramEditPolicy which allows to open sub-diagram.
>
> Could anybody help me by saying to me how to open by programming the
> sub-diagram defines by the policy OpenXXXDiagramEditPolicy?
>
> Thank you in advance!
>
>
> DEWAS Albert
> Etudiant à l'IUP Systèmes Intelligents en Master 2
>
> Stagiaire chez Continental Toulouse -
> Albert.Dewas@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> Trésorier de l'association Kojima - www.kojima-asso.fr
> <http://www.kojima-asso.fr>
> Tél : 06 87 74 53 89
> Email : b0b_ChoK@xxxxxxxx / a.dewas@xxxxxxxxxxx
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> gmf-dev mailing list
> gmf-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/gmf-dev
>