http://www.myexception.cn/open-source/414042.html
默认情况下,GEF中要创建一个新的结点都是通点在Palette上选择一个结点,然后在Editor区域单击实现的。
也有一些是通过拖放Palette中的一个对象到Editor区域来实现的。
要实现一个拖放支持也是很容易的。GEF中默认实现了一组drag-drop
listener用来支持拖放实现:
1.TemplateTransferDropTargetListener
因为是要从palette上拖到Editor中,所以此监听事件显示是应该安放在Editor上,在GEF中就是GraphicalViewer,可以在initializeGraphicalViewer()方法中加上:
getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(getGraphicalViewer()));
2.TemplateTransferDragSourceListener
显示此事件需要加在palette上,也就是PaletteViewer上,可以在initializePaletteViewer()方法中加上:
getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));
回头再看一下我们对Palette上的Item的声明:
CombinedTemplateCreationEntry(String label, String shortDesc,
CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)
需要注意CombinedTemplateCreationEntry构造方法的选用。认为上述构造方法为默认选择,而CreationFactory类为SimpleFactory。
如果选择另一个构造方法:
CombinedTemplateCreationEntry(String label, String shortDesc, Object template,
CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)
则我们需要注意:如果template和factory都是SimpleFactory则没有问题,因为默认的template就是SimpleFactory。
ToolEntry tool = new CombinedTemplateCreationEntry("Node", "Create a new Node", Node.class, new SimpleFactory(Node.class), null, null);
否则我们需要根据自己的template值(比如Node.class)来得到对应的model,也就是要实现自己的CreationFactory。
我们的调色板里需要有三种工具:选择工具、节点工具和连接工具。在GEF里,调色板里可以有抽屉(PaletteDrawer)把各种工具归类放置,每个工具都是一个ToolEntry,选择工具(SelectionToolEntry)和连接工具(ConnectionCreationToolEntry)是预先定义好的几种工具中的两个,
所以可以直接使用。对于节点工具,要使用CombinedTemplateCreationEntry。
比如:
CombinedTemplateCreationEntry elementCreationEntry = new CombinedTemplateCreationEntry(
"Element"(显示名), "Element type"(简单描述),ModelCreationFactory.ELEMENT_TYPE,new ModelCreationFactory(ModelCreationFactory.ELEMENT_TYPE), Activator.getImageDescriptor("icons/element.png"), Activator.getImageDescriptor("icons/element.png"));
CombinedTemplateCreationEntry attributeCreationEntry = new CombinedTemplateCreationEntry(
"Attribute", "Attribute type",ModelCreationFactory.ATTRIBUTE_TYPE, new ModelCreationFactory(ModelCreationFactory.ATTRIBUTE_TYPE), Activator
.getImageDescriptor("icons/attribute.png"), Activator
.getImageDescriptor("icons/attribute.png"));
1 public class ModelCreationFactory implements CreationFactory {
2
3 private int objectType;
4
5 public static final int ELEMENT_TYPE = 0x01;
6 public static final int ATTRIBUTE_TYPE = 0x02;
7 public static final int ROOT_TYPE = 0x04;
8
9 public ModelCreationFactory(int objectType) {
10 super();
11 this.objectType = objectType;
12 }
13
14 public Object getNewObject() {
15 switch (objectType) {
16 case ELEMENT_TYPE:
17 return new ElementType();
18 case ATTRIBUTE_TYPE:
19 return new AttributeType();
20 case ROOT_TYPE:
21 return new RootType();
22 default:
23 break;
24 }
25 return null;
26 }
27
28 public Object getObjectType() {
29 return objectType;
30 }
31
32 }
getGraphicalViewer().addDropTargetListener(new CustomTemplateTransferDropTargetListener(
getGraphicalViewer()));
1 public class CustomTemplateTransferDropTargetListener extends
2 TemplateTransferDropTargetListener {
3
4 public CustomTemplateTransferDropTargetListener(EditPartViewer viewer) {
5 super(viewer);
6 }
7
8 @Override
9 protected CreationFactory getFactory(Object template) {
10 return new ModelCreationFactory(((Integer)template).intValue());
11 }
12
13 }
我的程序中是这样的:
ps:Palette是一个树形结构,在这个结构中有四种主要的节点类型:PaletteRoot、PaletteGroup、PaletteDrawer、ToolEntry,其中,PaletteRoot、PaletteGroup、PaletteDrawer都继承自PaletteContainer,PaletteContainer和ToolEntry则都继承自PaletteEntry,这是Palette树结构的基类。getPaletteRoot就是要向系统返回PaletteRoot对象。
1 class EditorDropListener extends TemplateTransferDropTargetListener {
2 public EditorDropListener() {
3 this(getGraphicalViewer());
4 }
5
6 public EditorDropListener(EditPartViewer viewer) {
7 super(viewer);
8 // TODO Auto-generated constructor stub
9 }
10 //GraphicalViewer和EditPartViewer的区别??用了两个构造函数。查资料说GraphicalViewer 是 EditPartViewer 的子接口,可是为何要两个?????
11 @Override
12 protected CreationFactory getFactory(Object template) {
13 if (template instanceof CreationFactory) {
14 return ((CreationFactory) template);
15 }
16 return null;
17 }
18
19 };
1 public class TestCasePalette {
2 //首先创建PaletteRoot。
3 public static PaletteRoot createPalette() {
4 PaletteRoot palette = new PaletteRoot();
5 palette.addAll(createCategories(palette));
6
7 return palette;
8 }
9
//根据PaletteRoot创建categories,在里面创建Drawer(放自己的工具)和Group(连接和选择工具)
10 public static List<PaletteContainer> createCategories(PaletteRoot root){
11 List<PaletteContainer> categories = new ArrayList<PaletteContainer>();
12
13 categories.add(createControlGroup(root));14 categories.add(createStatementDrawer());
15 categories.add(createTimerDrawer());
16 categories.add(createConditionDrawer());
17 categories.add(createMessageDrawer());
18 categories.add(createInlineDrawer());
19 categories.add(createInstanceDrawer());
20 categories.add(createCommentDrawer());
21
22 return categories;
23 }
24 //在Group里创建entry。SelectionToolEntry用于创建选择工具,MarqueeToolEntry则用于创建区域选择工具。
25 public static PaletteGroup createControlGroup(PaletteRoot root){
26 PaletteGroup toolGroup = new PaletteGroup("tool");
27
28 ToolEntry tool = new SelectionToolEntry();
29 toolGroup.add(tool);
30 root.setDefaultEntry(tool);
31 tool = new MarqueeToolEntry();
32 toolGroup.add(tool);
33
34 return toolGroup;
35 }
36 在Drawer里创建entry
37 public static PaletteDrawer createCommentDrawer(){
38 PaletteDrawer commentDrawer = new PaletteDrawer("Comment");
39 CombinedTemplateCreationEntry creationTool;
40 ImageDescriptor image;
41
42 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_EVENTCOMMENT);暂时未深究
43 creationTool = new CombinedTemplateCreationEntry(
44 "Event Comment","Event Comment",
45 new SimpleFactory(EventCommentModel.class),
46 image,image);
47 commentDrawer.add(creationTool);
48
49 return commentDrawer;
50 }
51
52 public static PaletteDrawer createTimerDrawer(){
53 PaletteDrawer timerDrawer = new PaletteDrawer("Timer");
54 CombinedTemplateCreationEntry creationTool;
55 ImageDescriptor image;
56
57 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_STARTTIMER);
58 creationTool = new CombinedTemplateCreationEntry(
59 "Start Timer","Start Timer",
60 new SimpleFactory(StartTimerModel.class),
61 image,image);
62 timerDrawer.add(creationTool);
63
64 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_STOPTIMER);
65 creationTool = new CombinedTemplateCreationEntry(
66 "Stop Timer","Stop Timer",
67 new SimpleFactory(StopTimerModel.class),
68 image,image);
69 timerDrawer.add(creationTool);
70
71 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_TIMEOUTTIMER);
72 creationTool = new CombinedTemplateCreationEntry(
73 "Time out Timer","Time out Timer",
74 new SimpleFactory(TimeoutTimerModel.class),
75 image,image);
76 timerDrawer.add(creationTool);
77
78 return timerDrawer;
79 }
80
81 public static PaletteDrawer createInstanceDrawer(){
82 PaletteDrawer instanceDrawer = new PaletteDrawer("Instance");
83 CombinedTemplateCreationEntry creationTool;
84 ImageDescriptor image;
85
86 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_STOPCOMPONENT);
87 creationTool = new CombinedTemplateCreationEntry(
88 "Stop Component","Stop Component",
89 new SimpleFactory(StopComponentModel.class),
90 image,image);
91 instanceDrawer.add(creationTool);
92
93 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_LABEL);
94 creationTool = new CombinedTemplateCreationEntry(
95 "Label","Label",
96 new SimpleFactory(LabelModel.class),
97 image,image);
98 instanceDrawer.add(creationTool);
99
100 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_PORT);
101 creationTool = new CombinedTemplateCreationEntry(
102 "Port Instance","Port Instance",
103 new SimpleFactory(PortInstanceModel.class),
104 image,image);
105 instanceDrawer.add(creationTool);
106
107 return instanceDrawer;
108 }
109
110 public static PaletteDrawer createStatementDrawer(){
111 PaletteDrawer statementDrawer = new PaletteDrawer("Statement");
112 CombinedTemplateCreationEntry creationTool;
113 ImageDescriptor image;
114
115 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_ACTION);
116 creationTool = new CombinedTemplateCreationEntry(
117 "Action","Action",
118 new SimpleFactory(ActionModel.class),
119 image,image);
120 statementDrawer.add(creationTool);
121
122 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_CREATE);
123 creationTool = new CombinedTemplateCreationEntry(
124 "Create","Create",
125 new SimpleFactory(CreateModel.class),
126 image,image);
127 statementDrawer.add(creationTool);
128
129 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_DEFAULT);
130 creationTool = new CombinedTemplateCreationEntry(
131 "Default","Default",
132 new SimpleFactory(DefaultModel.class),
133 image,image);
134 statementDrawer.add(creationTool);
135
136 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_EXECUTE);
137 creationTool = new CombinedTemplateCreationEntry(
138 "Execute","Execute",
139 new SimpleFactory(ExecuteModel.class),
140 image,image);
141 statementDrawer.add(creationTool);
142
143 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_REFERENCE);
144 creationTool = new CombinedTemplateCreationEntry(
145 "Reference","Reference",
146 new SimpleFactory(ReferenceModel.class),
147 image,image);
148 statementDrawer.add(creationTool);
149
150 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_START);
151 creationTool = new CombinedTemplateCreationEntry(
152 "Start","Start",
153 new SimpleFactory(StartModel.class),
154 image,image);
155 statementDrawer.add(creationTool);
156
157 return statementDrawer;
158 }
159
160 public static PaletteDrawer createConditionDrawer(){
161 PaletteDrawer conditionDrawer = new PaletteDrawer("Condition");
162 CombinedTemplateCreationEntry creationTool;
163 ImageDescriptor image;
164
165 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_VERDICTCONDITION);
166 creationTool = new CombinedTemplateCreationEntry(
167 "Setverdict","Setverdict",
168 new SimpleFactory(ConditionModel.class),
169 image,image);
170 conditionDrawer.add(creationTool);
171
172 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_DONECONDITION);
173 creationTool = new CombinedTemplateCreationEntry(
174 "Done Condition","Done Condition",
175 new SimpleFactory(DoneConditionModel.class),
176 image,image);
177 conditionDrawer.add(creationTool);
178
179 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_BOOLEANCONDITION);
180 creationTool = new CombinedTemplateCreationEntry(
181 "Boolean Condition","Boolean Condition",
182 new SimpleFactory(BooleanConditionModel.class),
183 image,image);
184 conditionDrawer.add(creationTool);
185
186 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_PORTOPERATION);
187 creationTool = new CombinedTemplateCreationEntry(
188 "Port Operation","Port Operation",
189 new SimpleFactory(PortOperationModel.class),
190 image,image);
191 conditionDrawer.add(creationTool);
192
193 return conditionDrawer;
194 }
195
196 public static PaletteDrawer createMessageDrawer(){
197 PaletteDrawer messageDrawer = new PaletteDrawer("Message");
198 CombinedTemplateCreationEntry creationTool;
199 ImageDescriptor image;
200
201 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_MESSAGETO);
202 creationTool = new CombinedTemplateCreationEntry(
203 "Message To","Message To",
204 new SimpleFactory(MessageToModel.class),
205 image,image);
206 messageDrawer.add(creationTool);
207
208 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_MESSAGEFROM);
209 creationTool = new CombinedTemplateCreationEntry(
210 "Message From","Message From",
211 new SimpleFactory(MessageFromModel.class),
212 image,image);
213 messageDrawer.add(creationTool);
214
215 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_MESSAGECHECK);
216 creationTool = new CombinedTemplateCreationEntry(
217 "Check Message","Check Message",
218 new SimpleFactory(MessageCheckModel.class),
219 image,image);
220 messageDrawer.add(creationTool);
221
222 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_FOUND);
223 creationTool = new CombinedTemplateCreationEntry(
224 "Found","Found",
225 new SimpleFactory(FoundModel.class),
226 image,image);
227 messageDrawer.add(creationTool);
228
229 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_FOUNDCHECK);
230 creationTool = new CombinedTemplateCreationEntry(
231 "Check Found","Check Found",
232 new SimpleFactory(FoundCheckModel.class),
233 image,image);
234 messageDrawer.add(creationTool);
235
236 return messageDrawer;
237 }
238
239 public static PaletteDrawer createInlineDrawer(){
240 PaletteDrawer inlineDrawer = new PaletteDrawer("Inline");
241 CombinedTemplateCreationEntry creationTool;
242 ImageDescriptor image;
243
244 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_ALT);
245 creationTool = new CombinedTemplateCreationEntry(
246 "Alt","Alt",
247 DiagramFactory.getAlternativeModelFactory(),
248 image,image);
249 inlineDrawer.add(creationTool);
250
251 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_CALL);
252 creationTool = new CombinedTemplateCreationEntry(
253 "Call","Call",
254 DiagramFactory.getCallReplyModelFactory(),
255 image,image);
256 inlineDrawer.add(creationTool);
257
258 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_INTERLEAVE);
259 creationTool = new CombinedTemplateCreationEntry(
260 "Interleave","Interleave",
261 DiagramFactory.getInterleaveModelFactory(),
262 image,image);
263 inlineDrawer.add(creationTool);
264
265 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_IF);
266 creationTool = new CombinedTemplateCreationEntry(
267 "If","If",
268 DiagramFactory.getIfModelFactory(),
269 image,image);
270 inlineDrawer.add(creationTool);
271
272 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_WHILE);
273 creationTool = new CombinedTemplateCreationEntry(
274 "While","While",
275 DiagramFactory.getWhileLoopModelFactory(),
276 image,image);
277 inlineDrawer.add(creationTool);
278
279 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_FOR);
280 creationTool = new CombinedTemplateCreationEntry(
281 "For","For",
282 DiagramFactory.getForLoopModelFactory(),
283 image,image);
284 inlineDrawer.add(creationTool);
285
286 return inlineDrawer;
287 }
288 }
1 public class ControlPalette {
2
3 public static PaletteRoot createPalette() {
4 PaletteRoot palette = new PaletteRoot();
5 palette.addAll(createCategories(palette));
6
7 return palette;
8 }
9
10 public static List<PaletteContainer> createCategories(PaletteRoot root){
11 List<PaletteContainer> categories = new ArrayList<PaletteContainer>();
12
13 categories.add(createControlGroup(root));
14 categories.add(createStatementDrawer());
15 categories.add(createTimerDrawer());
16 categories.add(createInlineDrawer());
17 categories.add(createCommentDrawer());
18
19 return categories;
20 }
21
22 public static PaletteGroup createControlGroup(PaletteRoot root){
23 PaletteGroup toolGroup = new PaletteGroup("tool");
24
25 ToolEntry tool = new SelectionToolEntry();
26 toolGroup.add(tool);
27 root.setDefaultEntry(tool);
28 tool = new MarqueeToolEntry();
29 toolGroup.add(tool);
30
31 return toolGroup;
32 }
33
34 public static PaletteDrawer createCommentDrawer(){
35 PaletteDrawer commentDrawer = new PaletteDrawer("Comment");
36 CombinedTemplateCreationEntry creationTool;
37 ImageDescriptor image;
38
39 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_EVENTCOMMENT);
40 creationTool = new CombinedTemplateCreationEntry(
41 "Event Comment","Event Comment",
42 new SimpleFactory(EventCommentModel.class),
43 image,image);
44 commentDrawer.add(creationTool);
45
46 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_TEXT);
47 creationTool = new CombinedTemplateCreationEntry(
48 "Text","Text",
49 new SimpleFactory(TextModel.class),
50 image,image);
51 commentDrawer.add(creationTool);
52
53 return commentDrawer;
54 }
55
56 public static PaletteDrawer createTimerDrawer(){
57 PaletteDrawer timerDrawer = new PaletteDrawer("Timer");
58 CombinedTemplateCreationEntry creationTool;
59 ImageDescriptor image;
60
61 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_STARTTIMER);
62 creationTool = new CombinedTemplateCreationEntry(
63 "Start Timer","Start Timer",
64 new SimpleFactory(StartTimerModel.class),
65 image,image);
66 timerDrawer.add(creationTool);
67
68 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_STOPTIMER);
69 creationTool = new CombinedTemplateCreationEntry(
70 "Stop Timer","Stop Timer",
71 new SimpleFactory(StopTimerModel.class),
72 image,image);
73 timerDrawer.add(creationTool);
74
75 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_TIMEOUTTIMER);
76 creationTool = new CombinedTemplateCreationEntry(
77 "Time out Timer","Time out Timer",
78 new SimpleFactory(TimeoutTimerModel.class),
79 image,image);
80 timerDrawer.add(creationTool);
81
82 return timerDrawer;
83 }
84
85 public static PaletteDrawer createStatementDrawer(){
86 PaletteDrawer statementDrawer = new PaletteDrawer("Statement");
87 CombinedTemplateCreationEntry creationTool;
88 ImageDescriptor image;
89
90 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_ACTION);
91 creationTool = new CombinedTemplateCreationEntry(
92 "Action","Action",
93 new SimpleFactory(ActionModel.class),
94 image,image);
95 statementDrawer.add(creationTool);
96
97 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_EXECUTE);
98 creationTool = new CombinedTemplateCreationEntry(
99 "Execute","Execute",
100 new SimpleFactory(ExecuteModel.class),
101 image,image);
102 statementDrawer.add(creationTool);
103
104 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_REFERENCE);
105 creationTool = new CombinedTemplateCreationEntry(
106 "Reference","Reference",
107 new SimpleFactory(ReferenceModel.class),
108 image,image);
109 statementDrawer.add(creationTool);
110
111 return statementDrawer;
112 }
113
114 public static PaletteDrawer createInlineDrawer(){
115 PaletteDrawer inlineDrawer = new PaletteDrawer("Inline");
116 CombinedTemplateCreationEntry creationTool;
117 ImageDescriptor image;
118
119 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_ALT);
120 creationTool = new CombinedTemplateCreationEntry(
121 "Alt","Alt",
122 DiagramFactory.getAlternativeModelFactory(),
123 image,image);
124 inlineDrawer.add(creationTool);
125
126 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_INTERLEAVE);
127 creationTool = new CombinedTemplateCreationEntry(
128 "Interleave","Interleave",
129 DiagramFactory.getInterleaveModelFactory(),
130 image,image);
131 inlineDrawer.add(creationTool);
132
133 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_IF);
134 creationTool = new CombinedTemplateCreationEntry(
135 "If","If",
136 DiagramFactory.getIfModelFactory(),
137 image,image);
138 inlineDrawer.add(creationTool);
139
140 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_WHILE);
141 creationTool = new CombinedTemplateCreationEntry(
142 "While","While",
143 DiagramFactory.getWhileLoopModelFactory(),
144 image,image);
145 inlineDrawer.add(creationTool);
146
147 image = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKey.IIMAGE_FOR);
148 creationTool = new CombinedTemplateCreationEntry(
149 "For","For",
150 DiagramFactory.getForLoopModelFactory(),
151 image,image);
152 inlineDrawer.add(creationTool);
153
154 return inlineDrawer;
155 }
156 }
1 public class FunctionPalette {
2
3 public static PaletteRoot createPalette() {
4 return TestCasePalette.createPalette();
5 }
6
7 }
public class AltstepPalette {public static PaletteRoot createPalette() {
return TestCasePalette.createPalette();
}}
1 public class DiagramFactory {
2
3 public static CreationFactory getAlternativeModelFactory() {
4 return new CreationFactory(){
5 public Object getNewObject(){
//将模型对应到一个int上。
6 AlternativeModel alt = new AlternativeModel();
7 ContainerSeperatorModel seperator;
8 int cell = alt.getPreferredCell(); cell=3
9
10 for(int i=1;i<cell;i++){
11 seperator = new ContainerSeperatorModel();
12 alt.addChild(-1, seperator); ???
13 }
14 return alt;
15 }
16 public Object getObjectType(){
17 return "AlternativeModel.class";
18 }
19 };
20 }
21
22 public static CreationFactory getCallReplyModelFactory() {
23 return new CreationFactory(){
24 public Object getNewObject(){
25 CallReplyModel callreply = new CallReplyModel();
26 ContainerSeperatorModel seperator;
27 SuspensionRegionModel suspension;
28 int cell = callreply.getPreferredCell();
29
30 MessageToModel call = new MessageToModel();
31 callreply.addChild(-1, call);
32 callreply.setCall(call);
33 suspension = new SuspensionRegionModel();
34 callreply.addChild(-1, suspension);
35 suspension.setCall(call);
36 suspension.setHeadSuspension(true);
37 call.setSuspension(suspension);
38
39 for(int i=1;i<cell;i++){
40 seperator = new ContainerSeperatorModel();
41 callreply.addChild(-1, seperator);
42
43 suspension = new SuspensionRegionModel();
44 callreply.addChild(-1, suspension);
45 }
46 return callreply;
47 }
48 public Object getObjectType(){
49 return "CallReplyModel.class";
50 }
51 };
52 }
53
54 public static CreationFactory getIfModelFactory() {
55 return new CreationFactory(){
56 public Object getNewObject(){
57 IfModel ifm = new IfModel();
58 ContainerSeperatorModel seperator;
59 int cell = ifm.getPreferredCell();
60
61 for(int i=1;i<cell;i++){
62 seperator = new ContainerSeperatorModel();
63 ifm.addChild(-1, seperator);
64 }
65 return ifm;
66 }
67 public Object getObjectType(){
68 return "IfModel.class";
69 }
70 };
71 }
72
73 public static CreationFactory getWhileLoopModelFactory() {
74 return new CreationFactory(){
75 public Object getNewObject(){
76 WhileLoopModel loop = new WhileLoopModel();
77 ContainerSeperatorModel seperator;
78 int cell = loop.getPreferredCell();
79
80 for(int i=1;i<cell;i++){
81 seperator = new ContainerSeperatorModel();
82 loop.addChild(-1, seperator);
83 }
84 return loop;
85 }
86 public Object getObjectType(){
87 return "WhileLoopModel.class";
88 }
89 };
90 }
91
92 public static CreationFactory getForLoopModelFactory(){
93 return new CreationFactory(){
94 public Object getNewObject(){
95 ForLoopModel loop = new ForLoopModel();
96 ContainerSeperatorModel seperator;
97 int cell = loop.getPreferredCell();
98
99 for(int i=1;i<cell;i++){
100 seperator = new ContainerSeperatorModel();
101 loop.addChild(-1, seperator);
102 }
103 return loop;
104 }
105 public Object getObjectType(){
106 return "ForLoopModel.class";
107 }
108 };
109 }
110
111 public static CreationFactory getInterleaveModelFactory() {
112 return new CreationFactory(){
113 public Object getNewObject(){
114 InterleaveModel interleave = new InterleaveModel();
115 ContainerSeperatorModel seperator;
116 int cell = interleave.getPreferredCell();
117
118 for(int i=1;i<cell;i++){
119 seperator = new ContainerSeperatorModel();
120 interleave.addChild(-1, seperator);
121 }
122 return interleave ;
123 }
124 public Object getObjectType(){
125 return "InterleaveModel.class";
126 }
127 };
128 }
129
130
131
132 }
protected void initializeGraphicalViewer() {
// TODO Auto-generated method stubviewer.setContents(diagram);
resourceChangeListener = new ResourceChangeListener(this);
ResourcesPlugin.getWorkspace().addResourceChangeListener(
resourceChangeListener);editorListener = new EditorPartListener(this);
getSite().getWorkbenchWindow().getPartService().addPartListener(
editorListener);viewer.addDropTargetListener(new EditorDropListener());
}
最后的成果是:
图片对应的是ControlPalette。
问题:
DiagramFactory那里没看懂。还有什么时候需要用到这个?simpleFactory是啥。