3 class Designer : DesignerBase
7 if(GetActiveDesigner() == this)
9 SetActiveDesigner(null);
15 // *** DesignerBase Implementation ***
19 codeEditor.ModifyCode();
22 void UpdateProperties()
24 codeEditor.DesignerModifiedObject();
27 void CodeAddObject(Instance instance, ObjectInfo * object)
29 codeEditor.AddObject(instance, object);
32 void SheetAddObject(ObjectInfo object)
34 codeEditor.sheet.AddObject(object, object.name, typeData, true); //className, true);
37 void AddToolBoxClass(Class _class)
39 ((IDEWorkSpace)master).toolBox.AddControl(_class);
42 void AddDefaultMethod(Instance instance, Instance classInstance)
44 Class _class = instance._class;
45 Method defaultMethod = null;
47 for( ; _class; _class = _class.base)
51 for(method = (Method)_class.methods.first; method; method = (Method)((BTNode)method).next)
53 if(method.type == virtualMethod)
56 method.dataType = ProcessTypeString(method.dataTypeString, false);
57 if(method.vid < minID && (instance == classInstance || (method.dataType.thisClass && eClass_IsDerived(classInstance._class, method.dataType.thisClass.registered))))
59 defaultMethod = method;
67 codeEditor.AddMethod(defaultMethod);
70 bool ObjectContainsCode(ObjectInfo object)
72 // Confirmation if control contains code
76 if(object.instCode.members)
78 for(members = object.instCode.members->first; members; members = members.next)
80 if(members.type == methodMembersInit)
82 //if(!Code_IsFunctionEmpty(members.function))
93 void DeleteObject(ObjectInfo object)
96 codeEditor.DeleteObject(object);
99 void RenameObject(ObjectInfo object, const char * name)
101 if(object && (name || !object.classDefinition))
102 codeEditor.RenameObject(object, name);
105 bool FindObject(Instance * object, const char * string)
107 ObjectInfo classObject;
108 for(classObject = codeEditor.classes.first; classObject; classObject = classObject.next)
111 if(classObject.name && !strcmp(string, classObject.name))
113 *object = classObject.instance;
116 for(check = classObject.instances.first; check; check = check.next)
118 if(check.name && !strcmp(string, check.name))
120 *object = check.instance;
130 void SelectObjectFromDesigner(ObjectInfo object)
132 codeEditor.SelectObjectFromDesigner(object);
135 borderStyle = sizable;
136 isActiveClient = true;
137 hasVertScroll = true;
138 hasHorzScroll = true;
144 anchor = Anchor { left = 300, right = 150, top = 0, bottom = 0 };
147 CodeEditor codeEditor;
149 Menu fileMenu { menu, $"File", f };
150 MenuItem fileSaveItem
152 fileMenu, $"Save", s, ctrlS;
153 bool NotifySelect(MenuItem selection, Modifiers mods)
155 return codeEditor.MenuFileSave(selection, mods);
158 MenuItem fileSaveAsItem
160 fileMenu, $"Save As...", a;
161 bool NotifySelect(MenuItem selection, Modifiers mods)
163 return codeEditor.MenuFileSaveAs(selection, mods);
168 bool OnClose(bool parentClosing)
172 if(codeEditor && codeEditor.inUseDebug && !debugClosing)
176 if(CloseConfirmation(false))
180 OnFileModified({ modified = true }, null);
182 debugClosing = false;
185 if(codeEditor && !codeEditor.closing && !debugClosing)
187 if(!codeEditor.visible)
189 if(!codeEditor.Destroy(0))
204 bool OnActivate(bool active, Window previous, bool * goOnWithActivation, bool direct)
208 codeEditor.EnsureUpToDate();
209 codeEditor.fixCaret = true;
212 classDesigner.Activate();
218 bool OnKeyHit(Key key, unichar ch)
220 return codeEditor.sheet.OnKeyHit(key, ch);
223 watch(modifiedDocument)
225 fileSaveItem.disabled = !modifiedDocument && codeEditor.fileName;
228 // *** METHODS ACCESSED FROM PROPERTY SHEET/TOOLBOX/CODE EDITOR ***
233 classDesigner.Reset();
234 classDesigner.SelectObject(null, null);
235 classDesigner.Destroy(0);
236 delete classDesigner;
242 if(this && classDesigner)
243 classDesigner.ListToolBoxClasses(this);
246 void SelectObject(ObjectInfo object, Instance instance)
248 ClassDesignerBase classDesigner = this.classDesigner;
250 if(instance && instance._class.module.application != codeEditor.privateModule)
251 printf("warning: SelectObject: instance._class.module.application != codeEditor.privateModule\n");
253 if(!classDesigner || !instance || classDesigner._class != (Class)eInstance_GetDesigner(instance))
257 classDesigner.SelectObject(null, null);
258 classDesigner.Destroy(0);
259 classDesigner = null;
260 delete this.classDesigner;
264 this.classDesigner = classDesigner = eInstance_New(eInstance_GetDesigner(instance));
265 incref classDesigner;
266 //if(!classDesigner.parent)
268 classDesigner.parent = this;
269 classDesigner.anchor = Anchor { left = 0, right = 0, top = 0, bottom = 0 };
271 classDesigner.Create();
274 // Call class editor SelectObject
276 classDesigner.SelectObject(object, instance);
281 // Call class editor AddObject
283 classDesigner.AddObject();
287 codeEditor.Activate();
290 void CreateObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass)
292 subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
294 // Call class editor CreateObject
296 designerClass.CreateObject(this, instance, object, isClass, iclass);
299 void ::PostCreateObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass)
301 subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
303 // Call class editor PostCreateObject
305 designerClass.PostCreateObject(instance, object, isClass, iclass);
308 void ::DroppedObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass)
310 subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
312 // Call class editor PostCreateObject
314 designerClass.DroppedObject(instance, object, isClass, iclass);
317 void PrepareTestObject(Instance instance)
319 subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
321 designerClass.PrepareTestObject(this, instance);
324 void ::DestroyObject(Instance instance)
326 subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
328 designerClass.DestroyObject(instance);
331 void ::FixProperty(Property prop, Instance instance)
333 subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
335 designerClass.FixProperty(prop, instance);