| <html> |
| |
| <head> |
| <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> |
| <meta name=Generator content="Microsoft Word 12 (filtered)"> |
| <title>Providing layout functionality</title> |
| <link rel=Stylesheet type="text/css" media=all href="../book.css"> |
| <style> |
| <!-- |
| /* Font Definitions */ |
| @font-face |
| {font-family:"Cambria Math"; |
| panose-1:2 4 5 3 5 4 6 3 2 4;} |
| @font-face |
| {font-family:Cambria; |
| panose-1:2 4 5 3 5 4 6 3 2 4;} |
| @font-face |
| {font-family:Tahoma; |
| panose-1:2 11 6 4 3 5 4 4 2 4;} |
| @font-face |
| {font-family:Consolas; |
| panose-1:2 11 6 9 2 2 4 3 2 4;} |
| /* Style Definitions */ |
| p.MsoNormal, li.MsoNormal, div.MsoNormal |
| {margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| h1 |
| {mso-style-link:"Überschrift 1 Zchn"; |
| margin-top:12.0pt; |
| margin-right:0cm; |
| margin-bottom:3.0pt; |
| margin-left:0cm; |
| page-break-after:avoid; |
| font-size:16.0pt; |
| font-family:"Times New Roman","serif"; |
| font-weight:bold;} |
| h2 |
| {mso-style-link:"Überschrift 2 Zchn"; |
| margin-top:12.0pt; |
| margin-right:0cm; |
| margin-bottom:3.0pt; |
| margin-left:0cm; |
| page-break-after:avoid; |
| font-size:14.0pt; |
| font-family:"Times New Roman","serif"; |
| font-weight:bold; |
| font-style:italic;} |
| h3 |
| {mso-style-link:"Überschrift 3 Zchn"; |
| margin-top:12.0pt; |
| margin-right:0cm; |
| margin-bottom:3.0pt; |
| margin-left:0cm; |
| page-break-after:avoid; |
| font-size:13.0pt; |
| font-family:"Times New Roman","serif"; |
| font-weight:bold;} |
| h4 |
| {mso-style-link:"Überschrift 4 Zchn"; |
| margin-top:11.25pt; |
| margin-right:0cm; |
| margin-bottom:1.7pt; |
| margin-left:0cm; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif"; |
| font-weight:bold; |
| font-style:italic;} |
| h5 |
| {mso-style-link:"Überschrift 5 Zchn"; |
| margin-right:0cm; |
| margin-left:0cm; |
| font-size:10.0pt; |
| font-family:"Times New Roman","serif"; |
| font-weight:bold;} |
| a:link, span.MsoHyperlink |
| {color:blue; |
| text-decoration:underline;} |
| a:visited, span.MsoHyperlinkFollowed |
| {color:purple; |
| text-decoration:underline;} |
| p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap |
| {mso-style-link:"Dokumentstruktur Zchn"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:8.0pt; |
| font-family:"Tahoma","sans-serif";} |
| p |
| {margin-top:5.65pt; |
| margin-right:0cm; |
| margin-bottom:5.65pt; |
| margin-left:0cm; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| pre |
| {mso-style-link:"HTML Vorformatiert Zchn"; |
| margin-top:0cm; |
| margin-right:0cm; |
| margin-bottom:0cm; |
| margin-left:3.4pt; |
| margin-bottom:.0001pt; |
| font-size:11.0pt; |
| font-family:"Courier New";} |
| p.MsoAcetate, li.MsoAcetate, div.MsoAcetate |
| {mso-style-link:"Sprechblasentext Zchn"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:8.0pt; |
| font-family:"Tahoma","sans-serif";} |
| span.berschrift1Zchn |
| {mso-style-name:"Überschrift 1 Zchn"; |
| mso-style-link:"Überschrift 1"; |
| font-family:"Cambria","serif"; |
| color:#365F91; |
| font-weight:bold;} |
| span.berschrift2Zchn |
| {mso-style-name:"Überschrift 2 Zchn"; |
| mso-style-link:"Überschrift 2"; |
| font-family:"Cambria","serif"; |
| color:#4F81BD; |
| font-weight:bold;} |
| span.berschrift3Zchn |
| {mso-style-name:"Überschrift 3 Zchn"; |
| mso-style-link:"Überschrift 3"; |
| font-family:"Cambria","serif"; |
| color:#4F81BD; |
| font-weight:bold;} |
| span.berschrift4Zchn |
| {mso-style-name:"Überschrift 4 Zchn"; |
| mso-style-link:"Überschrift 4"; |
| font-family:"Cambria","serif"; |
| color:#4F81BD; |
| font-weight:bold; |
| font-style:italic;} |
| span.berschrift5Zchn |
| {mso-style-name:"Überschrift 5 Zchn"; |
| mso-style-link:"Überschrift 5"; |
| font-family:"Cambria","serif"; |
| color:#243F60;} |
| span.HTMLVorformatiertZchn |
| {mso-style-name:"HTML Vorformatiert Zchn"; |
| mso-style-link:"HTML Vorformatiert"; |
| font-family:Consolas;} |
| span.DokumentstrukturZchn |
| {mso-style-name:"Dokumentstruktur Zchn"; |
| mso-style-link:Dokumentstruktur; |
| font-family:"Tahoma","sans-serif";} |
| span.SprechblasentextZchn |
| {mso-style-name:"Sprechblasentext Zchn"; |
| mso-style-link:Sprechblasentext; |
| font-family:"Tahoma","sans-serif";} |
| p.code, li.code, div.code |
| {mso-style-name:code; |
| margin-top:0cm; |
| margin-right:0cm; |
| margin-bottom:0cm; |
| margin-left:15.0pt; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| p.note, li.note, div.note |
| {mso-style-name:note; |
| margin-top:19.5pt; |
| margin-right:0cm; |
| margin-bottom:19.5pt; |
| margin-left:30.0pt; |
| font-size:13.0pt; |
| font-family:"Times New Roman","serif"; |
| font-style:italic;} |
| p.msochpdefault, li.msochpdefault, div.msochpdefault |
| {mso-style-name:msochpdefault; |
| margin-top:5.65pt; |
| margin-right:0cm; |
| margin-bottom:5.65pt; |
| margin-left:0cm; |
| font-size:10.0pt; |
| font-family:"Times New Roman","serif";} |
| span.Heading1Char |
| {mso-style-name:"Heading 1 Char"; |
| mso-style-link:"Heading 1"; |
| font-family:"Cambria","serif"; |
| color:#365F91; |
| font-weight:bold;} |
| p.Heading1, li.Heading1, div.Heading1 |
| {mso-style-name:"Heading 1"; |
| mso-style-link:"Heading 1 Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.Heading2Char |
| {mso-style-name:"Heading 2 Char"; |
| mso-style-link:"Heading 2"; |
| font-family:"Cambria","serif"; |
| color:#4F81BD; |
| font-weight:bold;} |
| p.Heading2, li.Heading2, div.Heading2 |
| {mso-style-name:"Heading 2"; |
| mso-style-link:"Heading 2 Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.Heading3Char |
| {mso-style-name:"Heading 3 Char"; |
| mso-style-link:"Heading 3"; |
| font-family:"Cambria","serif"; |
| color:#4F81BD; |
| font-weight:bold;} |
| p.Heading3, li.Heading3, div.Heading3 |
| {mso-style-name:"Heading 3"; |
| mso-style-link:"Heading 3 Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.Heading4Char |
| {mso-style-name:"Heading 4 Char"; |
| mso-style-link:"Heading 4"; |
| font-family:"Cambria","serif"; |
| color:#4F81BD; |
| font-weight:bold; |
| font-style:italic;} |
| p.Heading4, li.Heading4, div.Heading4 |
| {mso-style-name:"Heading 4"; |
| mso-style-link:"Heading 4 Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.Heading5Char |
| {mso-style-name:"Heading 5 Char"; |
| mso-style-link:"Heading 5"; |
| font-family:"Cambria","serif"; |
| color:#243F60;} |
| p.Heading5, li.Heading5, div.Heading5 |
| {mso-style-name:"Heading 5"; |
| mso-style-link:"Heading 5 Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.HTMLPreformattedChar |
| {mso-style-name:"HTML Preformatted Char"; |
| mso-style-link:"HTML Preformatted"; |
| font-family:Consolas;} |
| p.HTMLPreformatted, li.HTMLPreformatted, div.HTMLPreformatted |
| {mso-style-name:"HTML Preformatted"; |
| mso-style-link:"HTML Preformatted Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.BalloonTextChar |
| {mso-style-name:"Balloon Text Char"; |
| mso-style-link:"Balloon Text"; |
| font-family:"Tahoma","sans-serif";} |
| p.BalloonText, li.BalloonText, div.BalloonText |
| {mso-style-name:"Balloon Text"; |
| mso-style-link:"Balloon Text Char"; |
| margin:0cm; |
| margin-bottom:.0001pt; |
| font-size:12.0pt; |
| font-family:"Times New Roman","serif";} |
| span.code1 |
| {mso-style-name:code1; |
| font-style:italic;} |
| .MsoChpDefault |
| {font-size:10.0pt;} |
| @page Section1 |
| {size:595.45pt 841.7pt; |
| margin:72.0pt 89.85pt 72.0pt 89.85pt;} |
| div.Section1 |
| {page:Section1;} |
| --> |
| </style> |
| |
| </head> |
| |
| <body bgcolor=white lang=DE link=blue vlink=purple style='margin-bottom:12.0pt'> |
| |
| <div class=Section1> |
| |
| <h1><span lang=EN-GB>Providing Layout Functionality</span></h1> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span><span |
| lang=EN-GB> </span></p> |
| |
| <h2><span lang=EN-GB>Create a Layout Feature</span></h2> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB>If you already enlarged a EClass in the |
| diagram, you may have observed that the shapes inside the rectangle kept their |
| size (EClass name is not longer in the centre and the line separator is too short). |
| Graphiti<span style='color:black'> provides the concept of layout features, |
| which mainly supports the recalculation of positions and sizes inside the |
| pictogram model. </span></span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>Theoretical such |
| functionality could also be implemented by <a href="resize-feature.htm">providing |
| resize functionality</a>, but using a layout feature for this is the |
| recommended solution.</span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>A layout feature has to |
| implement the interface </span><span class=code1><span lang=EN-US |
| style='color:black'><a |
| href="../../../javadoc/org/eclipse/graphiti/features/ILayoutFeature.html"><span |
| style='font-style:normal'>ILayoutFeature</span></a>.</span></span><span |
| lang=EN-US style='color:black'> </span><span lang=EN-GB style='color:black'>Instead |
| of implementing it directly you should extend one of the available base |
| classes. In this example we extend the base class<span class=code1> </span></span><span |
| class=code1><span lang=EN-US style='color:black'><a |
| href="../../../javadoc/org/eclipse/graphiti/features/impl/AbstractLayoutFeature.html"><span |
| style='font-style:normal'>AbstractLayoutFeature</span></a></span></span><span |
| lang=EN-GB style='color:black'>.</span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>In this case we have to |
| implement/overwrite two methods:</span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>The method <a |
| href="../../../javadoc/org/eclipse/graphiti/func/ILayout.html#canLayout(org.eclipse.graphiti.features.context.ILayoutContext)">c<span |
| lang=EN-US>anLayout</span></a> has to check whether the pictogram element of |
| the given context can be layouted. </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>The method </span><span |
| class=code1><span lang=EN-US style='color:black'><a |
| href="../../../javadoc/org/eclipse/graphiti/func/ILayout.html#layout(org.eclipse.graphiti.features.context.ILayoutContext)"><span |
| style='font-style:normal'>layout</span></a></span></span><span lang=EN-GB |
| style='color:black'> has to recalculate and modify everything needed to layout |
| the pictogram element given with the context. </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>You can see the |
| complete implementation of the move feature here:</span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=851 |
| style='width:18.0cm;border-collapse:collapse'> |
| <tr> |
| <td width=851 valign=top style='width:18.0cm;border:solid windowtext 1.0pt; |
| padding:0cm 5.4pt 0cm 5.4pt'> |
| <p class=MsoNormal style='text-autospace:none'><b><span lang=EN-GB |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'> </span></b></p> |
| <p class=MsoNormal style='text-autospace:none'><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>package</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| org.eclipse.graphiti.examples.tutorial.features;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>public</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>class</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| TutorialLayoutEClassFeature </span><b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#7F0055'>extends</span></b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| AbstractLayoutFeature {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>private</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> </span><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>static</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>final</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>int</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#0000C0'>MIN_HEIGHT</span></i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> = |
| 30;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>private</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> </span><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>static</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>final</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>int</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#0000C0'>MIN_WIDTH</span></i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> = |
| 50;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>public</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> |
| TutorialLayoutEClassFeature(IFeatureProvider fp) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>super</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'>(fp);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>public</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> </span><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>boolean</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| canLayout(ILayoutContext context) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#3F7F5F'>// |
| return true, if pictogram element is linked to an EClass</span></p> |
| <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'> |
| PictogramElement pe = context.getPictogramElement();</span></p> |
| <p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family: |
| "Courier New";color:#7F0055'> if</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'> (!(pe <b><span |
| style='color:#7F0055'>instanceof</span></b> ContainerShape))</span></p> |
| <p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family: |
| "Courier New";color:#7F0055'> |
| return</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'> |
| <b><span style='color:#7F0055'>false</span></b>;</span></p> |
| <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'> |
| EList<EObject> businessObjects = pe.getLink().getBusinessObjects();</span></p> |
| <p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family: |
| "Courier New";color:#7F0055'> return</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'> |
| businessObjects.size() == 1 <br> |
| |
| && businessObjects.get(0) <b><span style='color:#7F0055'>instanceof</span></b> |
| EClass;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>public</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> </span><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>boolean</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| layout(ILayoutContext context) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>boolean</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> anythingChanged = </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>false</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| ContainerShape containerShape =</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| (ContainerShape) context.getPictogramElement();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| GraphicsAlgorithm containerGa = containerShape.getGraphicsAlgorithm();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#3F7F5F'>// height</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>if</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> (containerGa.getHeight() < </span><i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#0000C0'>MIN_HEIGHT</span></i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| containerGa.setHeight(</span><i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#0000C0'>MIN_HEIGHT</span></i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| anythingChanged = </span><b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#7F0055'>true</span></b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'>;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#3F7F5F'>// width</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>if</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> (containerGa.getWidth() < </span><i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#0000C0'>MIN_WIDTH</span></i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| containerGa.setWidth(</span><i><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#0000C0'>MIN_WIDTH</span></i><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| anythingChanged = </span><b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#7F0055'>true</span></b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'>;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>int</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> containerWidth = |
| containerGa.getWidth();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Iterator<Shape> iter = containerShape.getChildren().iterator();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>while</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> (iter.hasNext()) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Shape shape = (Shape) iter.next();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| GraphicsAlgorithm graphicsAlgorithm = shape.getGraphicsAlgorithm();</span><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'><br> |
| IGaService |
| gaService = Graphiti.getGaService();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| IDimension size = <br> |
| |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>gaService<span |
| style='color:black'>.calculateSize(graphicsAlgorithm);</span></span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>if</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> (containerWidth != size.getWidth()) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>if</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> (graphicsAlgorithm </span><b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>instanceof</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Polyline) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Polyline |
| polyline = (Polyline) graphicsAlgorithm;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Point secondPoint = polyline.getPoints().get(1);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Point newSecondPoint =</span></p> |
| <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>gaService<span |
| style='color:black'>.createPoint(containerWidth,</span> secondPoint.getY());</span><span |
| lang=EN-US> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| polyline.getPoints().set(1, newSecondPoint);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| anythingChanged = </span><b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#7F0055'>true</span></b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'>;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| } </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>else</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>gaService<span |
| style='color:black'>.setWidth(graphicsAlgorithm,</span></span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| containerWidth);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| anythingChanged = </span><b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#7F0055'>true</span></b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'>;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| }</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>return</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> anythingChanged;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span style='font-size:10.0pt;font-family:"Courier New";color:black'>}</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; |
| font-family:"Courier New";color:black'>}</span></p> |
| <p class=MsoNormal><span lang=EN-GB style='font-size:10.0pt;font-family:"Courier New"; |
| color:black'> </span></p> |
| </td> |
| </tr> |
| </table> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>Additionally the |
| feature provider has to deliver our newly created feature (overwrite the method |
| </span><span class=code1><span lang=EN-US style='color:black;font-style:normal'><a |
| href="../../../javadoc/org/eclipse/graphiti/features/IFeatureProvider.html#getLayoutFeature(org.eclipse.graphiti.features.context.ILayoutContext)">getLayoutFeature</a>)</span></span><i><span |
| lang=EN-GB style='color:black'>.</span></i><span lang=EN-GB style='color:black'> |
| </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>This implementation can |
| be seen here:</span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=851 |
| style='width:18.0cm;border-collapse:collapse'> |
| <tr> |
| <td width=851 valign=top style='width:18.0cm;border:solid windowtext 1.0pt; |
| padding:0cm 5.4pt 0cm 5.4pt'> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-GB |
| style='font-size:10.0pt;font-family:"Courier New";color:#3F7F5F'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#646464'>@Override</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>public</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> ILayoutFeature |
| getLayoutFeature(ILayoutContext context) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| PictogramElement pictogramElement = context.getPictogramElement();</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| Object bo = getBusinessObjectForPictogramElement(pictogramElement);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>if</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> (bo </span><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>instanceof</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| EClass) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>return</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> </span><b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>new</span></b><span |
| lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| TutorialLayoutEClassFeature(</span><b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:#7F0055'>this</span></b><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'>);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span style='font-size:10.0pt;font-family:"Courier New";color:black'>}</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> |
| </span><b><span style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>return</span></b><span |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><b><span |
| style='font-size:10.0pt;font-family:"Courier New";color:#7F0055'>super</span></b><span |
| style='font-size:10.0pt;font-family:"Courier New";color:black'>.getLayoutFeature(context);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> }</span></p> |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| </td> |
| </tr> |
| </table> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>Finally we have to call |
| the layout feature at the end of the add method of the </span><span |
| class=code1><span lang=EN-US style='color:black'>TutorialAddEClassFeature</span></span><span |
| class=code1><span lang=EN-US style='color:black;font-style:normal'>, as shown in |
| the following code snippet.</span></span></p> |
| |
| <p class=MsoNormal><span class=code1><span lang=EN-US style='color:black; |
| font-style:normal'>This causes that the layout (especially the layout |
| restrictions like minimum size) are applied after adding a EClass.</span></span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=851 |
| style='width:18.0cm;border-collapse:collapse'> |
| <tr> |
| <td width=851 valign=top style='width:18.0cm;border:solid windowtext 1.0pt; |
| padding:0cm 5.4pt 0cm 5.4pt'> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-GB |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>public</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> PictogramElement add(IAddContext |
| context) {</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#3F7F5F'>// ... EXiSTING CODING ...</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#3F7F5F'>// call the layout feature</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| layoutPictogramElement(containerShape);</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New"'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><b><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"; |
| color:#7F0055'>return</span></b><span lang=EN-US style='font-size:10.0pt; |
| font-family:"Courier New";color:black'> containerShape;</span></p> |
| <p class=MsoNormal style='text-autospace:none'><span lang=EN-US |
| style='font-size:10.0pt;font-family:"Courier New";color:black'> |
| </span><span style='font-size:10.0pt;font-family:"Courier New";color:black'>}</span><span |
| lang=EN-GB style='font-size:10.0pt;font-family:"Courier New";color:black'> </span></p> |
| <p class=MsoNormal style='text-autospace:none'> </p> |
| </td> |
| </tr> |
| </table> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal> </p> |
| |
| <h2><span lang=EN-GB>Test: Layout EClass after Resize</span></h2> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'> </span></p> |
| |
| <p class=MsoNormal><span lang=EN-GB style='color:black'>Now start the editor again |
| and test it: Try to resize a EClass. You see that the class name stays in the |
| centre and the line separator will be automatically extended.</span></p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=3 width="100%" align=center> |
| |
| </div> |
| |
| <p class=MsoNormal><a href="http://www.eclipse.org/legal/epl-v10.html" |
| shape=rect>Copyright (c) SAP AG 2005, 2010.</a> </p> |
| |
| </div> |
| |
| </body> |
| |
| </html> |