OSDN Git Service

Ring 1.10 以来となる開発環境の日本語ローカライズ版 (評価版) を追加 (ノートパッド、フォームデザイナー、対話型実行環境、ファイルの検索)。
[ring-lang-081/ring.git] / applications / formdesigner / source / mainwindow / formdesignercontroller.ring
1 /*
2 **      Project : Form Designer 
3 **      File Purpose :  Form Designer Controller
4 **      Date : 2017.04.29
5 **      Author :  Mahmoud Fayed <msfclipper@yahoo.com>
6 */
7
8 package formdesigner
9
10 class FormDesignerController from WindowsControllerParent
11
12         oView = new FormDesignerView
13         oModel = new FormDesignerModel
14         oGeneral = new FormDesignerGeneral
15         oFile = new FormDesignerFileSystem
16
17         func Start
18                 oView.SetParentObject(self)
19                 oView.CreateMainWindow(oModel)
20                 AddObjectsToCombo()
21                 AddObjectProperties()
22                 DisplayObjectProperties()
23                 oView.WindowMoveResizeEvents()
24
25         func ObjectProperties
26                 AddObjectProperties()
27                 DisplayObjectProperties()
28
29         func AddObjectsToCombo
30                 oView.oObjectsCombo.blocksignals(True)
31                 oView.oObjectsCombo.Clear()
32                 aObjects = oModel.GetObjects()
33                 for item in aObjects {
34                         oView.oObjectsCombo.AddItem(item[1],0)
35                 }
36                 oView.oObjectsCombo.setcurrentindex(len(aObjects)-1)
37                 oView.oObjectsCombo.blocksignals(False)
38
39         func AddObjectProperties
40                 oView.oPropertiesTable   {
41                         # Remove Rows
42                                 clear()
43                                 this.oView.PreparePropertiesTable(self)
44                 }
45                 oModel.ActiveObject().AddObjectProperties(self)
46
47         func DisplayObjectProperties
48                 oModel.ActiveObject().DisplayProperties(self)
49
50         func ToolBtnChangeAction
51                 if oView.oToolBtn1.isChecked() { # Select Mode
52                         oModel.FormObject().setCursor(new qCursor() { setShape(Qt_ArrowCursor) } )
53                         EnableMouseEventsForControls()
54                 else
55                         oModel.FormObject().setCursor(new qCursor() { setShape(Qt_CrossCursor) } )
56                         DisableMouseEventsForControls()
57                 }
58
59         func DisableMouseEventsForControls
60                 aObjects = oModel.GetObjects()
61                 for x = 2 to len(aObjects) {
62                         aObjects[x][2].setAttribute(Qt_WA_TransparentForMouseEvents,True)
63                 }
64
65         func EnableMouseEventsForControls
66                 aObjects = oModel.GetObjects()
67                 for x = 2 to len(aObjects) {
68                         aObjects[x][2].setAttribute(Qt_WA_TransparentForMouseEvents,False)
69                 }
70
71         func SetToolboxModeToSelectAfterDraw
72                 if not oView.oToolLock.isChecked() {
73                         SetToolboxModeToSelect()
74                 else
75                         # To include the latest created control
76                                 DisableMouseEventsForControls()
77                 }
78
79         func SetToolboxModeToSelect
80                 oView.oToolBtn1.setChecked(2)
81                 ToolBtnChangeAction()
82
83         func UpdateProperties
84                 SetToolboxModeToSelect()
85                 nRow = oView.oPropertiesTable.Currentrow()
86                 nCol = oView.oPropertiesTable.Currentcolumn()
87                 cValue = oView.oPropertiesTable.item(nRow,nCol).text()
88                 oModel.ActiveObject().UpdateProperties(self,nRow,nCol,cValue)
89
90         func ResizeWindowAction
91                 oView.oLabelSelect.Hide()
92                 SetToolboxModeToSelect()
93                 DisplayFormProperties()         
94                 oView.oFilter.seteventoutput(False)
95
96         func MoveWindowAction
97                 oView.oLabelSelect.Hide()
98                 SetToolboxModeToSelect()
99                 DisplayFormProperties()
100
101         func DisplayFormProperties
102                 if oModel.IsFormActive() {
103                         oModel.FormObject().DisplayProperties(self)
104                 }
105
106         func MousePressAction
107                 oModel.FormObject().MousePressAction(self)
108                 if oView.oToolBtn1.ischecked() {        # Select Mode
109                         oModel.RemoveCurrentParentCache()
110                         # Activate the Window Object
111                                 ChangeObjectByCode(0)
112                 }
113                 oView.oFilter.seteventoutput(False)
114
115         func MouseReleaseAction
116                 oModel.FormObject().MouseReleaseAction(self)
117                 oView.oFilter.seteventoutput(False)
118
119         func MouseMoveAction
120                 oModel.FormObject().MouseMoveAction(self)
121                 oView.oFilter.seteventoutput(False)
122
123         func DialogButtonAction nRow
124                 SetToolboxModeToSelect()
125                 oModel.ActiveObject().DialogButtonAction(self,nRow)
126
127         func ComboItemAction nRow
128                 SetToolboxModeToSelect()
129                 oModel.ActiveObject().ComboItemAction(self,nRow)
130
131         func ShowPropertiesWidget 
132                 if oModel.IsManySelected() {
133                         nWidth = oView.oPropertiesDock.width()
134                         oView.oPropertiesDock.setWidget(oView.oProperties2)
135                         oView.oPropertiesDock.setminimumwidth(nWidth)
136                 else
137                         oView.oPropertiesDock.setminimumwidth(10)
138                         oView.oPropertiesDock.setWidget(oView.oProperties)
139                 }
140
141         func SelectDrawAction aRect
142                 if oView.oToolBtn1.ischecked()  { # Select
143                         oModel.ClearSelectedObjects()
144                         SelectObjects(aRect)
145                         ShowPropertiesWidget()
146                 elseif oView.oToolBtn2.ischecked()   # Create Label
147                         HideCorners()
148                         UpdatePositionForParent(aRect)
149                         oModel.AddLabel(new FormDesigner_QLabel(oModel.CurrentParent()) {
150                                         move(aRect[1],aRect[2])
151                                         resize(aRect[3],aRect[4])
152                                         setMouseTracking(True)
153                                         setFocusPolicy(0)
154                                         cParent = this.oModel.CurrentParentName()
155                                 }
156                         )
157                         oModel.ActiveObject().setCurrentParentName(cParent)
158                         NewControlEvents("Label",oModel.LabelsCount())
159                         SetToolboxModeToSelectAfterDraw()
160                 elseif oView.oToolBtn3.ischecked()   # Create QPushButton
161                         HideCorners()
162                         UpdatePositionForParent(aRect)
163                         oModel.AddPushButton(new FormDesigner_QPushButton(oModel.CurrentParent()) {
164                                         move(aRect[1],aRect[2])
165                                         resize(aRect[3],aRect[4])
166                                         setMouseTracking(True)
167                                         setFocusPolicy(0)
168                                         cParent = this.oModel.CurrentParentName()
169                                 }
170                         )
171                         oModel.ActiveObject().setCurrentParentName(cParent)
172                         NewControlEvents("Button",oModel.PushButtonsCount())
173                         SetToolboxModeToSelectAfterDraw()
174                 elseif oView.oToolBtn4.ischecked()   # Create QLineEdit
175                         HideCorners()
176                         UpdatePositionForParent(aRect)
177                         oModel.AddLineEdit(new FormDesigner_QLineEdit(oModel.CurrentParent()) {
178                                         move(aRect[1],aRect[2])
179                                         resize(aRect[3],aRect[4])
180                                         setFocusPolicy(0)
181                                         setMouseTracking(True)
182                                         cParent = this.oModel.CurrentParentName()
183                                 }
184                         )
185                         oModel.ActiveObject().setCurrentParentName(cParent)
186                         NewControlEvents("LineEdit",oModel.LineEditsCount())
187                         oModel.ActiveObject().updatestylesheets()
188                         SetToolboxModeToSelectAfterDraw()
189                 elseif oView.oToolBtn5.ischecked()   # Create QTextEdit
190                         HideCorners()
191                         UpdatePositionForParent(aRect)
192                         oModel.AddTextEdit(new FormDesigner_QTextEdit(oModel.CurrentParent()) {
193                                         move(aRect[1],aRect[2])
194                                         resize(aRect[3],aRect[4])
195                                         setFocusPolicy(0)
196                                         setMouseTracking(True)
197                                         cParent = this.oModel.CurrentParentName()
198                                 }
199                         )
200                         oModel.ActiveObject().setCurrentParentName(cParent)
201                         NewControlEvents("TextEdit",oModel.TextEditsCount())
202                         oModel.ActiveObject().updatestylesheets()
203                         SetToolboxModeToSelectAfterDraw()
204                 elseif oView.oToolBtn6.ischecked()   # Create QListWidget
205                         HideCorners()
206                         UpdatePositionForParent(aRect)
207                         oModel.AddListWidget(new FormDesigner_QListWidget(oModel.CurrentParent()) {
208                                         move(aRect[1],aRect[2])
209                                         resize(aRect[3],aRect[4])
210                                         setFocusPolicy(0)
211                                         setMouseTracking(True)
212                                         cParent = this.oModel.CurrentParentName()
213                                 }
214                         )
215                         oModel.ActiveObject().setCurrentParentName(cParent)
216                         NewControlEvents("ListWidget",oModel.ListWidgetsCount())
217                         oModel.ActiveObject().updatestylesheets()
218                         SetToolboxModeToSelectAfterDraw()
219                 elseif oView.oToolBtn7.ischecked()   # Create QCheckBox
220                         HideCorners()
221                         UpdatePositionForParent(aRect)
222                         oModel.AddCheckBox(new FormDesigner_QCheckBox(oModel.CurrentParent()) {
223                                         move(aRect[1],aRect[2])
224                                         resize(aRect[3],aRect[4])
225                                         setFocusPolicy(0)
226                                         setMouseTracking(True)
227                                         cParent = this.oModel.CurrentParentName()
228                                 }
229                         )
230                         oModel.ActiveObject().setCurrentParentName(cParent)
231                         NewControlEvents("CheckBox",oModel.CheckBoxesCount())
232                         SetToolboxModeToSelectAfterDraw()
233                 elseif oView.oToolBtn8.ischecked()   # Create QImage
234                         HideCorners()
235                         UpdatePositionForParent(aRect)
236                         oModel.AddImage(new FormDesigner_QImage(oModel.CurrentParent()) {
237                                         move(aRect[1],aRect[2])
238                                         resize(aRect[3],aRect[4])
239                                         setFocusPolicy(0)
240                                         setMouseTracking(True)
241                                         cParent = this.oModel.CurrentParentName()
242                                 }
243                         )
244                         oModel.ActiveObject().setCurrentParentName(cParent)
245                         NewControlEvents("Image",oModel.ImagesCount())
246                         SetToolboxModeToSelectAfterDraw()
247                 elseif oView.oToolBtn9.ischecked()   # Create QSlider
248                         HideCorners()
249                         UpdatePositionForParent(aRect)
250                         oModel.AddSlider(new FormDesigner_QSlider(oModel.CurrentParent()) {
251                                         move(aRect[1],aRect[2])
252                                         resize(aRect[3],aRect[4])
253                                         setFocusPolicy(0)
254                                         setMouseTracking(True)
255                                         cParent = this.oModel.CurrentParentName()
256                                 }
257                         )
258                         oModel.ActiveObject().setCurrentParentName(cParent)
259                         NewControlEvents("Slider",oModel.SlidersCount())
260                         SetToolboxModeToSelectAfterDraw()
261                 elseif oView.oToolBtn10.ischecked()   # Create QProgressBar
262                         HideCorners()
263                         UpdatePositionForParent(aRect)
264                         oModel.AddProgressbar(new FormDesigner_QProgressbar(oModel.CurrentParent()) {
265                                         move(aRect[1],aRect[2])
266                                         resize(aRect[3],aRect[4])
267                                         setFocusPolicy(0)
268                                         setMouseTracking(True)
269                                         cParent = this.oModel.CurrentParentName()
270                                 }
271                         )
272                         oModel.ActiveObject().setCurrentParentName(cParent)
273                         NewControlEvents("Progressbar",oModel.ProgressbarsCount())
274                         SetToolboxModeToSelectAfterDraw()
275                 elseif oView.oToolBtn11.ischecked()   # Create QSpinBox
276                         HideCorners()
277                         UpdatePositionForParent(aRect)
278                         oModel.AddSpinBox(new FormDesigner_QSpinBox(oModel.CurrentParent()) {
279                                         move(aRect[1],aRect[2])
280                                         resize(aRect[3],aRect[4])
281                                         setFocusPolicy(0)
282                                         setMouseTracking(True)
283                                         cParent = this.oModel.CurrentParentName()
284                                 }
285                         )
286                         oModel.ActiveObject().setCurrentParentName(cParent)
287                         NewControlEvents("SpinBox",oModel.SpinBoxesCount())
288                         oModel.ActiveObject().updatestylesheets()
289                         SetToolboxModeToSelectAfterDraw()
290                 elseif oView.oToolBtn12.ischecked()   # Create QComboBox
291                         HideCorners()
292                         UpdatePositionForParent(aRect)
293                         oModel.AddComboBox(new FormDesigner_QComboBox(oModel.CurrentParent()) {
294                                         move(aRect[1],aRect[2])
295                                         resize(aRect[3],aRect[4])
296                                         setFocusPolicy(0)
297                                         setMouseTracking(True)
298                                         cParent = this.oModel.CurrentParentName()
299                                 }
300                         )
301                         oModel.ActiveObject().setCurrentParentName(cParent)
302                         NewControlEvents("ComboBox",oModel.ComboBoxesCount())
303                         SetToolboxModeToSelectAfterDraw()
304                 elseif oView.oToolBtn13.ischecked()   # Create QDateTimeEdit
305                         HideCorners()
306                         UpdatePositionForParent(aRect)
307                         oModel.AddDateTimeEdit(new FormDesigner_QDateTimeEdit(oModel.CurrentParent()) {
308                                         move(aRect[1],aRect[2])
309                                         resize(aRect[3],aRect[4])
310                                         setFocusPolicy(0)
311                                         setMouseTracking(True)
312                                         cParent = this.oModel.CurrentParentName()
313                                 }
314                         )
315                         oModel.ActiveObject().setCurrentParentName(cParent)
316                         NewControlEvents("DateTimeEdit",oModel.DateTimeEditsCount())
317                         oModel.ActiveObject().updatestylesheets()
318                         SetToolboxModeToSelectAfterDraw()
319                 elseif oView.oToolBtn14.ischecked()   # Create QTableWidget
320                         HideCorners()
321                         UpdatePositionForParent(aRect)
322                         oModel.AddTableWidget(new FormDesigner_QTableWidget(oModel.CurrentParent()) {
323                                         move(aRect[1],aRect[2])
324                                         resize(aRect[3],aRect[4])
325                                         setFocusPolicy(0)
326                                         setMouseTracking(True)
327                                         cParent = this.oModel.CurrentParentName()
328                                 }
329                         )
330                         oModel.ActiveObject().setCurrentParentName(cParent)
331                         NewControlEvents("TableWidget",oModel.TableWidgetsCount())
332                         SetToolboxModeToSelectAfterDraw()
333                 elseif oView.oToolBtn15.ischecked()   # Create QTreeWidget
334                         HideCorners()
335                         UpdatePositionForParent(aRect)
336                         oModel.AddTreeWidget(new FormDesigner_QTreeWidget(oModel.CurrentParent()) {
337                                         move(aRect[1],aRect[2])
338                                         resize(aRect[3],aRect[4])
339                                         setFocusPolicy(0)
340                                         setMouseTracking(True)
341                                         cParent = this.oModel.CurrentParentName()
342                                 }
343                         )
344                         oModel.ActiveObject().setCurrentParentName(cParent)
345                         NewControlEvents("TreeWidget",oModel.TreeWidgetsCount())
346                         oModel.ActiveObject().updatestylesheets()
347                         SetToolboxModeToSelectAfterDraw()
348                 elseif oView.oToolBtn16.ischecked()   # Create QRadioButton
349                         HideCorners()
350                         UpdatePositionForParent(aRect)
351                         oModel.AddRadioButton(new FormDesigner_QRadioButton(oModel.CurrentParent()) {
352                                         move(aRect[1],aRect[2])
353                                         resize(aRect[3],aRect[4])
354                                         setFocusPolicy(0)
355                                         setMouseTracking(True)
356                                         cParent = this.oModel.CurrentParentName()
357                                 }
358                         )
359                         oModel.ActiveObject().setCurrentParentName(cParent)
360                         NewControlEvents("RadioButton",oModel.RadioButtonsCount())
361                         SetToolboxModeToSelectAfterDraw()
362                 elseif oView.oToolBtn17.ischecked()   # Create QWebView
363                         HideCorners()
364                         UpdatePositionForParent(aRect)
365                         oModel.AddWebView(new FormDesigner_QWebView(oModel.CurrentParent()) {
366                                         move(aRect[1],aRect[2])
367                                         resize(aRect[3],aRect[4])
368                                         setFocusPolicy(0)
369                                         setMouseTracking(True)
370                                         cParent = this.oModel.CurrentParentName()
371                                 }
372                         )
373                         oModel.ActiveObject().setCurrentParentName(cParent)
374                         NewControlEvents("WebView",oModel.WebViewsCount())
375                         SetToolboxModeToSelectAfterDraw()
376                 elseif oView.oToolBtn18.ischecked()   # Create QDial
377                         HideCorners()
378                         UpdatePositionForParent(aRect)
379                         oModel.AddDial(new FormDesigner_QDial(oModel.CurrentParent()) {
380                                         move(aRect[1],aRect[2])
381                                         resize(aRect[3],aRect[4])
382                                         setFocusPolicy(0)
383                                         setMouseTracking(True)
384                                         cParent = this.oModel.CurrentParentName()
385                                 }
386                         )
387                         oModel.ActiveObject().setCurrentParentName(cParent)
388                         NewControlEvents("Dial",oModel.DialsCount())
389                         SetToolboxModeToSelectAfterDraw()
390                 elseif oView.oToolBtn19.ischecked()   # Create QVideoWidget
391                         HideCorners()
392                         UpdatePositionForParent(aRect)
393                         oModel.AddVideoWidget(new FormDesigner_QVideoWidget(oModel.CurrentParent()) {
394                                         move(aRect[1],aRect[2])
395                                         resize(aRect[3],aRect[4])
396                                         setFocusPolicy(0)
397                                         setMouseTracking(True)
398                                         cParent = this.oModel.CurrentParentName()
399                                 }
400                         )
401                         oModel.ActiveObject().setCurrentParentName(cParent)
402                         NewControlEvents("VideoWidget",oModel.VideoWidgetsCount())
403                         SetToolboxModeToSelectAfterDraw()
404                 elseif oView.oToolBtn20.ischecked()   # Create QFrame
405                         HideCorners()
406                         UpdatePositionForParent(aRect)
407                         oModel.AddFrame(new FormDesigner_QFrame3(oModel.CurrentParent()) {
408                                         move(aRect[1],aRect[2])
409                                         resize(aRect[3],aRect[4])
410                                         setFocusPolicy(0)
411                                         setMouseTracking(True)
412                                         cParent = this.oModel.CurrentParentName()
413                                 }
414                         )
415                         oModel.ActiveObject().setCurrentParentName(cParent)
416                         NewControlEvents("Frame",oModel.FramesCount())
417                         SetToolboxModeToSelectAfterDraw()
418                 elseif oView.oToolBtn21.ischecked()   # Create QLCDNumber
419                         HideCorners()
420                         UpdatePositionForParent(aRect)
421                         oModel.AddLCDNumber(new FormDesigner_QLCDNumber(oModel.CurrentParent()) {
422                                         move(aRect[1],aRect[2])
423                                         resize(aRect[3],aRect[4])
424                                         setFocusPolicy(0)
425                                         setMouseTracking(True)
426                                         cParent = this.oModel.CurrentParentName()
427                                 }
428                         )
429                         oModel.ActiveObject().setCurrentParentName(cParent)
430                         NewControlEvents("LCDNumber",oModel.LCDNumbersCount())
431                         SetToolboxModeToSelectAfterDraw()
432                 elseif oView.oToolBtn22.ischecked()   # Create QHyperLink
433                         HideCorners()
434                         UpdatePositionForParent(aRect)
435                         oModel.AddHyperLink(new FormDesigner_QHyperLink(oModel.CurrentParent()) {
436                                         move(aRect[1],aRect[2])
437                                         resize(aRect[3],aRect[4])
438                                         setFocusPolicy(0)
439                                         setMouseTracking(True)
440                                         cParent = this.oModel.CurrentParentName()
441                                 }
442                         )
443                         oModel.ActiveObject().setCurrentParentName(cParent)
444                         NewControlEvents("HyperLink",oModel.HyperLinksCount())
445                         SetToolboxModeToSelectAfterDraw()
446                 elseif oView.oToolBtn23.ischecked()   # Create QTimer
447                         HideCorners()
448                         UpdatePositionForParent(aRect)
449                         oModel.AddTimer(new FormDesigner_QTimer(oModel.CurrentParent()) {
450                                         move(aRect[1],aRect[2])
451                                         resize(aRect[3],aRect[4])
452                                         setFocusPolicy(0)
453                                         setMouseTracking(True)
454                                         cParent = this.oModel.CurrentParentName()
455                                 }
456                         )
457                         oModel.ActiveObject().setCurrentParentName(cParent)
458                         NewControlEvents("Timer",oModel.TimersCount())
459                         SetToolboxModeToSelectAfterDraw()
460                 elseif oView.oToolBtn24.ischecked()   # Create QAllEvents
461                         HideCorners()
462                         UpdatePositionForParent(aRect)
463                         oModel.AddAllEvents(new FormDesigner_QAllEvents(oModel.CurrentParent()) {
464                                         move(aRect[1],aRect[2])
465                                         resize(aRect[3],aRect[4])
466                                         setFocusPolicy(0)
467                                         setMouseTracking(True)
468                                         cParent = this.oModel.CurrentParentName()
469                                 }
470                         )
471                         oModel.ActiveObject().setCurrentParentName(cParent)
472                         NewControlEvents("AllEvents",oModel.AllEventsCount())
473                         SetToolboxModeToSelectAfterDraw()
474                 elseif oView.oToolBtn25.ischecked()   # Create QLayout
475                         HideCorners()
476                         UpdatePositionForParent(aRect)
477                         oModel.AddLayout(new FormDesigner_QLayout(oModel.CurrentParent()) {
478                                         move(aRect[1],aRect[2])
479                                         resize(aRect[3],aRect[4])
480                                         setFocusPolicy(0)
481                                         setMouseTracking(True)
482                                         cParent = this.oModel.CurrentParentName()
483                                 }
484                         )
485                         oModel.ActiveObject().setCurrentParentName(cParent)
486                         NewControlEvents("Layout",oModel.LayoutsCount())
487                         SetToolboxModeToSelectAfterDraw()
488                 elseif oView.oToolBtn26.ischecked()   # Create QTab
489                         HideCorners()
490                         UpdatePositionForParent(aRect)
491                         oModel.AddTab(new FormDesigner_QTabWidget(oModel.CurrentParent()) {
492                                         move(aRect[1],aRect[2])
493                                         resize(aRect[3],aRect[4])
494                                         setFocusPolicy(0)
495                                         setMouseTracking(True)
496                                         cParent = this.oModel.CurrentParentName()
497                                 }
498                         )
499                         oModel.ActiveObject().setCurrentParentName(cParent)
500                         NewControlEvents("Tab",oModel.TabsCount())
501                         SetToolboxModeToSelectAfterDraw()
502                 elseif oView.oToolBtn27.ischecked()   # Create QStatusBar
503                         HideCorners()
504                         UpdatePositionForParent(aRect)
505                         oModel.AddStatusBar(new FormDesigner_QStatusBar(oModel.CurrentParent()) {
506                                         move(aRect[1],aRect[2])
507                                         resize(aRect[3],aRect[4])
508                                         setFocusPolicy(0)
509                                         setMouseTracking(True)
510                                         cParent = this.oModel.CurrentParentName()
511                                 }
512                         )
513                         oModel.ActiveObject().setCurrentParentName(cParent)
514                         NewControlEvents("StatusBar",oModel.StatusBarsCount())
515                         SetToolboxModeToSelectAfterDraw()
516                 elseif oView.oToolBtn28.ischecked()   # Create QToolbar
517                         HideCorners()
518                         UpdatePositionForParent(aRect)
519                         oModel.AddToolBar(new FormDesigner_QToolbar(oModel.CurrentParent()) {
520                                         move(aRect[1],aRect[2])
521                                         resize(aRect[3],aRect[4])
522                                         setFocusPolicy(0)
523                                         setMouseTracking(True)
524                                         cParent = this.oModel.CurrentParentName()
525                                 }
526                         )
527                         oModel.ActiveObject().setCurrentParentName(cParent)
528                         NewControlEvents("ToolBar",oModel.ToolBarsCount())
529                         SetToolboxModeToSelectAfterDraw()
530                 }
531
532         func UpdatePositionForParent aRect
533                 if classname(oModel.ActiveObject()) = "formdesigner_qtabwidget" {
534                         aRect[1] -= oModel.ActiveObject().x()
535                         # 28 for the tab title height
536                                 aRect[2] -= oModel.ActiveObject().y() + 28
537                 elseif isObject(oModel.CurrentParentCache())
538                         aRect[1] -= oModel.CurrentParentCache().x()
539                         # 28 for the tab title height
540                                 aRect[2] -= oModel.CurrentParentCache().y() + 28
541                 }
542
543         func NewControlEvents cName,nCount
544                         CreateControlEvents(cName,nCount)
545                         oModel.ActiveObject().CreateCorners()
546                         AddObjectsToCombo()
547                         ObjectProperties()
548
549         func CreateControlEventsCornersNoInit cName,nCount
550                 CreateControlEvents(cName,nCount)
551                 oModel.ActiveObject().CreateCornersNoInit()
552
553         func CreateControlEvents cName,nCount
554                         oFilter = new qAllevents(oModel.ActiveObject()) {
555                                 /*
556                                   Here we uses This.Method() to access the
557                                   Method() method in the WindowsControllerParent class
558                                   Because we are inside braces { } to access qAllevents Methods
559                                   Using Method() without This.Method() will access
560                                   the Method() Function (Not the Method() Method)
561                                   The difference between Method() Function and Method() Method is that
562                                   the Method() Method define the event for the current object (This instance)
563                                   While Method() function define the event for the current active object 
564                                   The current active object maybe changed by using 
565                                   open_window() or open_windownoshow() functions.
566                                   This happened when we merged the Form Designer with Ring Notepad.
567                                   So to avoid defining the events for other objects, We uses This.Method() to
568                                   be sure that the event will be defined for the correct object that will be
569                                   created from this class. 
570                                 */
571                                 setmousebuttonpressevent(This.Method(:ActiveObjectMousePress+"("+this.oModel.GetCurrentID()+")"))
572                                 setMouseButtonReleaseEvent(This.Method(:ActiveObjectMouseRelease+"("+this.oModel.GetCurrentID()+")"))
573                                 setMouseMoveEvent(This.Method(:ActiveObjectMouseMove+"("+this.oModel.GetCurrentID()+")"))
574                         }
575                         oModel.ActiveObject().installeventfilter(oFilter)
576                         oModel.ActiveObject().oFilter = oFilter
577                         if find([:formdesigner_qlabel,
578                                  :formdesigner_qpushbutton,
579                                  :formdesigner_qcheckbox,
580                                  :formdesigner_qradiobutton
581                                 ],classname(oModel.ActiveObject())) {
582                                 oModel.ActiveObject().setText(cName+nCount)
583                         }
584                         oModel.ActiveObject().Show()
585                         
586
587         func SelectObjects aRect
588                 nSX = aRect[1]
589                 nSY = aRect[2]
590                 nSX2 = nSX + aRect[3]
591                 nSY2 = nSY + aRect[4]
592                 aObjects = oModel.GetObjects()
593                 for x = 2 to len(aObjects) {    # Start from 2 to avoid the Form Object
594                         item = aObjects[x]
595                         oObject = item[2]
596                         if not (oObject.CurrentParentName() = "win" or oObject.CurrentParentName() = "") {
597                                 loop
598                         }
599                         nX = oObject.x()
600                         nY = oObject.y()
601                         nX2 = nX + oObject.Width()
602                         nY2 = nY + oObject.Height()
603                         if Intersection(nX,nY,nX2,nY2,nSX,nSY,nSX2,nSY2) {
604                                 oObject.oCorners.Show()
605                                 oModel.AddSelectedObject(x)
606                         }
607                 }
608
609         func Intersection nX,nY,nX2,nY2,nSX,nSY,nSX2,nSY2
610                 if pointinbox(nX,nY,nSX,nSY,nSX2,nSY2) or
611                         pointinbox(nX,nY2,nSX,nSY,nSX2,nSY2) or
612                         pointinbox(nX2,nY,nSX,nSY,nSX2,nSY2) or
613                         pointinbox(nX2,nY2,nSX,nSY,nSX2,nSY2) or
614                         pointinbox(nSX,nSY,nX,nY,nX2,nY2) or
615                         pointinbox(nSX,nSY2,nX,nY,nX2,nY2) or
616                         pointinbox(nSX2,nSY,nX,nY,nX2,nY2) or
617                         pointinbox(nSX2,nSY2,nX,nY,nX2,nY2) or
618                         IntersectionLikePlusOperator(nX,nY,nX2,nY2,nSX,nSY,nSX2,nSY2 ) {
619                         return True
620                 }
621                 return False
622
623         func pointinbox nX,nY,nSX,nSY,nSX2,nSY2
624                 if nX >= nSX and nX <= nSX2 and nY >= nSY and nY <= nSY2 {
625                         return True
626                 }
627                 return False
628
629         func intersectionlikeplusOperator nX,nY,nX2,nY2,nSX,nSY,nSX2,nSY2
630                 if ( nY < nSY and nY2 >  nSY2 and
631                         nX > nSX and nX2 <  nSX2 ) or
632                 ( nSY < nY and nSY2 > nY2 and
633                         nSX > nX and nSX2 <  nX2 )  {
634                         return True
635                 }
636                 return False
637
638         func CancelSelectedObjects
639                 aObjects = oModel.getselectedObjects()
640                 if len(aObjects) = 0 { return }
641                 for item in aObjects {
642                         oObject = item[2]
643                         oObject.oCorners.Hide()
644                 }
645                 oModel.clearSelectedObjects()
646
647         func ChangeObjectAction
648                 if oView.oObjectsCombo.count() = 0 { return }
649                 HideCorners()
650                 nIndex = oView.oObjectsCombo.currentindex()
651                 oModel.nActiveObject = nIndex + 1
652                 ObjectProperties()
653                 ShowCorners()
654
655         func ChangeObjectByCode nIndex
656                 HideCorners()
657                 oView.oObjectsCombo.blocksignals(True)
658                 oView.oObjectsCombo.setcurrentindex(nIndex)
659                 oModel.nActiveObject = nIndex + 1
660                 ObjectProperties()
661                 oView.oObjectsCombo.blocksignals(False)
662                 ShowCorners()
663
664         func HideCorners
665                 CancelSelectedObjects()
666                 if isattribute(oModel.activeObject(),"oCorners") {
667                         oModel.activeObject().oCorners.Hide()
668                 }
669
670         func ShowCorners
671                 if isattribute(oModel.activeObject(),"oCorners") {
672                         oModel.activeObject().oCorners.Show()
673                 }
674
675         func ActiveObjectMousePress nObjectID
676                 nObjectIndex = oModel.IDToIndex(nObjectID)
677                 if oView.oToolBtn1.ischecked() {        # Select Mode
678                         if oModel.IsManySelected() {
679                                 if oModel.IsObjectSelected(nObjectID) {
680                                         if oFDApp.keyboardmodifiers() {
681                                                 oModel.RemoveSelectedObject(nObjectIndex)
682                                                 oModel.GetObjectByIndex(nObjectIndex).oCorners.Hide()
683                                         else
684                                                 if classname(oModel.GetObjectByIndex(nObjectIndex)) != "formdesigner_qwidget" {
685                                                         oModel.GetObjectByIndex(nObjectIndex).MousePressMany(self)
686                                                 }
687                                         }
688                                         ShowPropertiesWidget()
689                                         return
690                                 else
691                                         if oFDApp.keyboardmodifiers() {
692                                                 oModel.AddSelectedObject(nObjectIndex)
693                                                 oModel.GetObjectByIndex(nObjectIndex).MousePressMany(self)
694                                                 oModel.GetObjectByIndex(nObjectIndex).oCorners.Show()
695                                                 ShowPropertiesWidget()
696                                                 return
697                                         }
698                                 }
699                         else
700                                 # Here we don't have many objects selected
701                                 # Support starting multiple selection operation using the keyboard
702                                 if oFDApp.keyboardmodifiers() {
703                                         # We save the current object first
704                                                 nOldCurrentIndex = oModel.ActiveObjectIndex()
705                                         oModel.ClearSelectedObjects()
706                                         ChangeObjectByCode(nObjectIndex-1)
707                                         oModel.ActiveObject().oCorners.Show()
708                                         # Keep the old current object in selection 
709                                                 oModel.AddSelectedObject(nOldCurrentIndex)
710                                                 # Draw old current object corners 
711                                                         if classname(oModel.GetObjectByIndex(nOldCurrentIndex)) != "formdesigner_qwidget" {
712                                                                 oModel.getobjectByIndex(nOldCurrentIndex).oCorners.show()
713                                                         }
714                                         oModel.AddSelectedObject(nObjectIndex)
715                                         ShowPropertiesWidget()
716                                         return
717                                 }
718                         }
719                         ChangeObjectByCode(nObjectIndex-1)
720                         if classname(oModel.ActiveObject()) != "formdesigner_qwidget" {
721                                 oModel.ActiveObject().MousePress(self)
722                         }
723                 }
724
725         func ActiveObjectMouseRelease nObjectID
726                 nObjectIndex = oModel.IDToIndex(nObjectID)
727                 if oView.oToolBtn1.ischecked() {        # Select Mode
728                         if oModel.IsManySelected() {
729                                 if classname(oModel.GetObjectByIndex(nObjectIndex)) != "formdesigner_qwidget" {
730                                         oModel.GetObjectByIndex(nObjectIndex).MouseReleaseMany(self)
731                                 }
732                                 return
733                         }
734                         if classname(oModel.ActiveObject()) != "formdesigner_qwidget" {
735                                 oModel.ActiveObject().MouseRelease(self)
736                         }
737                 }
738
739         func ActiveObjectMouseMove nObjectID
740                 nObjectIndex = oModel.IDToIndex(nObjectID)
741                 if oView.oToolBtn1.ischecked() {        # Select Mode
742                         if oModel.IsManySelected() {
743                                 if classname(oModel.GetObjectByIndex(nObjectIndex)) != "formdesigner_qwidget" {
744                                         oModel.GetObjectByIndex(nObjectIndex).MouseMoveMany(self)
745                                 }
746                                 return
747                         }
748                         if classname(oModel.ActiveObject()) != "formdesigner_qwidget" {
749                                 oModel.ActiveObject().MouseMove(self)
750                         }
751                 }
752
753         func KeyPressAction
754                 if oModel.IsManySelected() { KeyPressManyAction() return }
755                 if oModel.IsFormActive() { return }
756                 nKey = oView.oFilter.getkeycode()
757                 nModifier = oView.oFilter.getmodifiers()
758                 switch nModifier  {
759                         case    0 # No CTRL Key is pressed
760                                 switch nkey {
761                                         case Qt_Key_Right
762                                                 oModel.ActiveObject().move( oModel.ActiveObject().x() + 10 ,
763                                                                                         oModel.ActiveObject().y() )
764                                         case Qt_Key_Left
765                                                 oModel.ActiveObject().move( oModel.ActiveObject().x() - 10 ,
766                                                                                         oModel.ActiveObject().y() )
767                                         case Qt_Key_Up
768                                                 oModel.ActiveObject().move( oModel.ActiveObject().x()  ,
769                                                                                         oModel.ActiveObject().y()  - 10)
770                                         case Qt_Key_Down
771                                                 oModel.ActiveObject().move( oModel.ActiveObject().x()  ,
772                                                                                         oModel.ActiveObject().y()  + 10)
773                                         case Qt_Key_Delete
774                                                 DeleteControl()
775                                                 return
776                                 }
777                         case 33554432   # Shift
778                                 switch nkey {
779                                         case Qt_Key_Right
780                                                 oModel.ActiveObject().resize( oModel.ActiveObject().width() + 10 ,
781                                                                                         oModel.ActiveObject().height() )
782                                         case Qt_Key_Left
783                                                 oModel.ActiveObject().resize( oModel.ActiveObject().width() - 10 ,
784                                                                                         oModel.ActiveObject().height() )
785                                         case Qt_Key_Up
786                                                 oModel.ActiveObject().resize( oModel.ActiveObject().width()  ,
787                                                                                         oModel.ActiveObject().height() - 10)
788                                         case Qt_Key_Down
789                                                 oModel.ActiveObject().resize( oModel.ActiveObject().width()  ,
790                                                                                         oModel.ActiveObject().height() + 10)
791                                 }
792                 }
793                 if ismethod(oModel.ActiveObject(),"refreshcorners") {
794                         oModel.ActiveObject().refreshCorners(oModel.ActiveObject())
795                 }
796
797         func DeleteControl
798                 if oModel.IsManySelected() {
799                         aObjects = oModel.getselectedObjects()
800                         for item in aObjects {
801                                 oObject = item[2]
802                                 oObject.oCorners.Hide()
803                                 oObject.Close()
804                         }
805                         oModel.deleteselectedObjects()
806                         AddObjectsToCombo()
807                         ShowPropertiesWidget()
808                         return 
809                 }
810                 if oModel.IsFormActive() { return }
811                 HideCorners()
812                 oModel.ActiveObject().close()
813                 oModel.deleteactiveObject()
814                 ShowCorners()
815                 AddObjectsToCombo()
816                 if ismethod(oModel.ActiveObject(),"refreshcorners") {
817                         oModel.ActiveObject().refreshCorners(oModel.ActiveObject())
818                 }
819
820         func KeyPressManyAction
821                 nKey = oView.oFilter.getkeycode()
822                 nModifier = oView.oFilter.getmodifiers()
823                 aObjects = oModel.getselectedObjects()
824                 switch nModifier  {
825                         case    0 # No CTRL Key is pressed
826                                 switch nkey {
827                                         case Qt_Key_Right
828                                                 for item in aObjects {
829                                                         oObject = item[2]
830                                                         oObject.move( oObject.x() + 10 , oObject.y() )
831                                                         oObject.oCorners.refresh(oObject)
832                                                 }
833                                         case Qt_Key_Left
834                                                 for item in aObjects {
835                                                         oObject = item[2]
836                                                         oObject.move( oObject.x() - 10 , oObject.y() )
837                                                         oObject.oCorners.refresh(oObject)
838                                                 }
839                                         case Qt_Key_Up
840                                                 for item in aObjects {
841                                                         oObject = item[2]
842                                                         oObject.move( oObject.x()  , oObject.y()  - 10)
843                                                         oObject.oCorners.refresh(oObject)
844                                                 }
845                                         case Qt_Key_Down
846                                                 for item in aObjects {
847                                                         oObject = item[2]
848                                                         oObject.move( oObject.x()  , oObject.y()  + 10)
849                                                         oObject.oCorners.refresh(oObject)
850                                                 }
851                                         case Qt_Key_Delete
852                                                 DeleteControl()
853                                 }
854                         case 33554432   # Shift
855                                 switch nkey {
856                                         case Qt_Key_Right
857                                                 for item in aObjects {
858                                                         oObject = item[2]
859                                                         oObject.resize( oObject.width() + 10 , oObject.height() )
860                                                         oObject.oCorners.refresh(oObject)
861                                                 }
862                                         case Qt_Key_Left
863                                                 for item in aObjects {
864                                                         oObject = item[2]
865                                                         oObject.resize( oObject.width() - 10 , oObject.height() )
866                                                         oObject.oCorners.refresh(oObject)
867                                                 }
868                                         case Qt_Key_Up
869                                                 for item in aObjects {
870                                                         oObject = item[2]
871                                                         oObject.resize( oObject.width()  , oObject.height() - 10)
872                                                         oObject.oCorners.refresh(oObject)
873                                                 }
874                                         case Qt_Key_Down
875                                                 for item in aObjects {
876                                                         oObject = item[2]
877                                                         oObject.resize( oObject.width()  , oObject.height() + 10)
878                                                         oObject.oCorners.refresh(oObject)
879                                                 }
880                                 }
881                 }
882
883
884         func MSAlignLeft
885                 aObjects = oModel.GetSelectedObjects()
886                 nX = 5000
887                 for item in aObjects {
888                         oObject = item[2]
889                         nX = min( nX , oObject.x() )
890                 }
891                 for item in aObjects {
892                         oObject = item[2]
893                         oObject.move( nX , oObject.y() )
894                         oObject.oCorners.Refresh(oObject)
895                 }
896
897         func MSAlignRight
898                 aObjects = oModel.GetSelectedObjects()
899                 nRight = 0
900                 for item in aObjects {
901                         oObject = item[2]
902                         nRight = max( nRight , oObject.x() + oObject.width() )
903                 }
904                 for item in aObjects {
905                         oObject = item[2]
906                         oObject.move( nRight  - oObject.width() , oObject.y() )
907                         oObject.oCorners.Refresh(oObject)
908                 }
909
910         func MSAlignTop
911                 aObjects = oModel.GetSelectedObjects()
912                 nY = 5000
913                 for item in aObjects {
914                         oObject = item[2]
915                         nY = min( nY , oObject.y() )
916                 }
917                 for item in aObjects {
918                         oObject = item[2]
919                         oObject.move( oObject.x() , nY )
920                         oObject.oCorners.Refresh(oObject)
921                 }
922
923         func MSAlignBottom
924                 aObjects = oModel.GetSelectedObjects()
925                 nBottom = 0
926                 for item in aObjects {
927                         oObject = item[2]
928                         nBottom = max( nBottom , oObject.y() + oObject.height() )
929                 }
930                 for item in aObjects {
931                         oObject = item[2]
932                         oObject.move( oObject.x() , nbottom  - oObject.height() )
933                         oObject.oCorners.Refresh(oObject)
934                 }
935
936         func MSCenterVer
937                 aObjects = oModel.GetSelectedObjects()
938                 # Get Minimum Top and Maximum Top+Height
939                 nMinTop = 5000
940                 nMaxTopHeight = 0
941                 for item in aObjects {
942                         oObject = item[2]
943                         nMinTop = min(nMinTop,oObject.y())
944                         nMaxTopHeight = max(nMaxTopHeight,oObject.y()+oObject.Height())
945                 }
946                 # Get Top Difference
947                         nDiff = nMaxTopHeight - nMinTop
948                         nTop = (oObject.ParentWidget().Height() - nDiff ) / 2
949                         nDiff = nMinTop - nTop
950                 # Apply the Top difference to all controls
951                 for item in aObjects {
952                         oObject = item[2]
953                         oObject.move(oObject.x() ,oObject.y()-nDiff)
954                         oObject.oCorners.Refresh(oObject)
955                 }
956
957         func MSCenterHor
958                 aObjects = oModel.GetSelectedObjects()
959                 # Get Minimum Left and Maximum Left+Width
960                 nMinLeft = 5000
961                 nMaxLeftWidth = 0
962                 for item in aObjects {
963                         oObject = item[2]
964                         nMinLeft = min(nMinLeft,oObject.x())
965                         nMaxLeftWidth = max(nMaxLeftWidth,oObject.x()+oObject.Width())
966                 }
967                 # Get Left Difference
968                         nDiff = nMaxLeftWidth - nMinLeft
969                         nLeft = (oObject.ParentWidget().Width() - nDiff ) / 2
970                         nDiff = nMinLeft - nLeft
971                 # Apply the Left difference to all controls
972                 for item in aObjects {
973                         oObject = item[2]
974                         oObject.move(oObject.x()-nDiff,oObject.y())
975                         oObject.oCorners.Refresh(oObject)
976                 }
977
978
979         func MSSizeToTallest
980                 aObjects = oModel.GetSelectedObjects()
981                 nHeight = 0
982                 for item in aObjects {
983                         oObject = item[2]
984                         nHeight = max( nHeight , oObject.height() )
985                 }
986                 for item in aObjects {
987                         oObject = item[2]
988                         oObject.resize( oObject.width() , nHeight )
989                         oObject.oCorners.Refresh(oObject)
990                 }
991
992         func MSSizeToShortest
993                 aObjects = oModel.GetSelectedObjects()
994                 nHeight = 5000
995                 for item in aObjects {
996                         oObject = item[2]
997                         nHeight = min( nHeight , oObject.height() )
998                 }
999                 for item in aObjects {
1000                         oObject = item[2]
1001                         oObject.resize( oObject.width() , nHeight )
1002                         oObject.oCorners.Refresh(oObject)
1003                 }
1004
1005         func MSSizeToWidest
1006                 aObjects = oModel.GetSelectedObjects()
1007                 nWidth = 0
1008                 for item in aObjects {
1009                         oObject = item[2]
1010                         nWidth = max( nWidth , oObject.width() )
1011                 }
1012                 for item in aObjects {
1013                         oObject = item[2]
1014                         oObject.resize( nWidth, oObject.Height() )
1015                         oObject.oCorners.Refresh(oObject)
1016                 }
1017
1018         func MSSizeToNarrowest
1019                 aObjects = oModel.GetSelectedObjects()
1020                 nWidth = 5000
1021                 for item in aObjects {
1022                         oObject = item[2]
1023                         nWidth = min( nWidth , oObject.width() )
1024                 }
1025                 for item in aObjects {
1026                         oObject = item[2]
1027                         oObject.resize( nWidth, oObject.Height() )
1028                         oObject.oCorners.Refresh(oObject)
1029                 }
1030
1031         func MSHorSpacingMakeEqual
1032                 aObjects = oModel.GetSelectedObjects()
1033                 nLastLeft = 0
1034                 for x = 1 to len(aObjects) {
1035                         item = aObjects[x]
1036                         oObject = item[2]
1037                         if x = 1 {
1038                                 nLastLeft = oObject.x() + oObject.Width() + 10
1039                                 loop
1040                         }
1041                         oObject.move( nLastLeft  , oObject.y() )
1042                         nLastLeft = oObject.x() + oObject.Width() + 10
1043                         oObject.oCorners.Refresh(oObject)
1044                 }
1045
1046         func MSHorSpacingIncrease
1047                 aObjects = oModel.GetSelectedObjects()
1048                 for x = 2 to len(aObjects) {
1049                         item = aObjects[x]
1050                         oObject = item[2]
1051                         oObject.move( oObject.x() + (10*(x-1)) , oObject.y() )
1052                         oObject.oCorners.Refresh(oObject)
1053                 }
1054
1055         func MSHorSpacingDecrease
1056                 aObjects = oModel.GetSelectedObjects()
1057                 for x = 2 to len(aObjects) {
1058                         item = aObjects[x]
1059                         oObject = item[2]
1060                         oObject.move( oObject.x() - (10*(x-1)) , oObject.y() )
1061                         oObject.oCorners.Refresh(oObject)
1062                 }
1063
1064         func MSVerSpacingMakeEqual
1065                 aObjects = oModel.GetSelectedObjects()
1066                 nLastTop = 0
1067                 for x = 1 to len(aObjects) {
1068                         item = aObjects[x]
1069                         oObject = item[2]
1070                         if x = 1 {
1071                                 nLastTop = oObject.y() + oObject.Height() + 10
1072                                 loop
1073                         }
1074                         oObject.move( oObject.x() , nLastTop )
1075                         nLastTop = oObject.y() + oObject.Height() + 10
1076                         oObject.oCorners.Refresh(oObject)
1077                 }
1078
1079         func MSVerSpacingIncrease
1080                 aObjects = oModel.GetSelectedObjects()
1081                 for x = 2 to len(aObjects) {
1082                         item = aObjects[x]
1083                         oObject = item[2]
1084                         oObject.move(oObject.x() , oObject.y() + (10*(x-1))  )
1085                         oObject.oCorners.Refresh(oObject)
1086                 }
1087
1088         func MSVerSpacingDecrease
1089                 aObjects = oModel.GetSelectedObjects()
1090                 for x = 2 to len(aObjects) {
1091                         item = aObjects[x]
1092                         oObject = item[2]
1093                         oObject.move(oObject.x() , oObject.y() - (10*(x-1))  )
1094                         oObject.oCorners.Refresh(oObject)
1095                 }
1096
1097         func MSTextColor
1098                 cColor = oGeneral.SelectColor()
1099                 aObjects = oModel.GetSelectedObjects()
1100                 for item in aObjects {
1101                         oObject = item[2]
1102                         oModel.GetObjectByID(item[3]).setTextColor(cColor)
1103                 }
1104
1105         func MSBackColor
1106                 cColor = oGeneral.SelectColor()
1107                 aObjects = oModel.GetSelectedObjects()
1108                 for item in aObjects {
1109                         oObject = item[2]
1110                         oModel.GetObjectByID(item[3]).setBackColor(cColor)
1111                 }
1112
1113         func MSFont
1114                 cFont = oGeneral.SelectFont()
1115                 aObjects = oModel.GetSelectedObjects()
1116                 for item in aObjects {
1117                         oObject = item[2]
1118                         oModel.GetObjectByID(item[3]).setFontProperty(cFont)
1119                 }
1120
1121         func MSMoveUp
1122                 aObjects = oModel.GetSelectedObjects()
1123                 for item in aObjects {
1124                         oObject = item[2]
1125                         oObject.move( oObject.x() , oObject.y() - 10 )
1126                         oObject.oCorners.Refresh(oObject)
1127                 }
1128
1129         func MSMoveDown
1130                 aObjects = oModel.GetSelectedObjects()
1131                 for item in aObjects {
1132                         oObject = item[2]
1133                         oObject.move( oObject.x() , oObject.y() + 10 )
1134                         oObject.oCorners.Refresh(oObject)
1135                 }
1136
1137         func MSMoveLeft
1138                 aObjects = oModel.GetSelectedObjects()
1139                 for item in aObjects {
1140                         oObject = item[2]
1141                         oObject.move( oObject.x() - 10 , oObject.y() )
1142                         oObject.oCorners.Refresh(oObject)
1143                 }
1144
1145         func MSMoveRight
1146                 aObjects = oModel.GetSelectedObjects()
1147                 for item in aObjects {
1148                         oObject = item[2]
1149                         oObject.move( oObject.x() + 10 , oObject.y() )
1150                         oObject.oCorners.Refresh(oObject)
1151                 }
1152
1153         func MSIncreaseWidth
1154                 aObjects = oModel.GetSelectedObjects()
1155                 for item in aObjects {
1156                         oObject = item[2]
1157                         oObject.resize( oObject.width() + 10 , oObject.height() )
1158                         oObject.oCorners.Refresh(oObject)
1159                 }
1160
1161         func MSDecreaseWidth
1162                 aObjects = oModel.GetSelectedObjects()
1163                 for item in aObjects {
1164                         oObject = item[2]
1165                         oObject.resize( oObject.width() - 10 , oObject.height() )
1166                         oObject.oCorners.Refresh(oObject)
1167                 }
1168
1169         func MSIncreaseHeight
1170                 aObjects = oModel.GetSelectedObjects()
1171                 for item in aObjects {
1172                         oObject = item[2]
1173                         oObject.resize( oObject.width() , oObject.height() + 10)
1174                         oObject.oCorners.Refresh(oObject)
1175                 }
1176
1177         func MSDecreaseHeight
1178                 aObjects = oModel.GetSelectedObjects()
1179                 for item in aObjects {
1180                         oObject = item[2]
1181                         oObject.resize( oObject.width() , oObject.height() - 10)
1182                         oObject.oCorners.Refresh(oObject)
1183                 }
1184
1185         func NewAction
1186                 oFile.NewAction(self)
1187
1188         func OpenAction
1189                 oFile.OpenAction(self)
1190
1191         func SaveAction
1192                 oFile.SaveAction(self)
1193
1194         func SaveAsAction
1195                 oFile.SaveAsAction(self)
1196
1197         func CloseAction
1198                 oFile.CloseAction(self)
1199
1200         func ExitAction
1201                 if HasParent() {
1202                         # The form designer is embedded in Dockable widget
1203                         oView.win.parentwidget().Hide()
1204                         return 
1205                 }
1206                 Super.CloseAction()
1207
1208         func Duplicate
1209                 # Selected objects - if we have many objects selected
1210                         oModel.RefreshSelectedObjects()
1211                         aObjects = oModel.GetSelectedObjects()
1212                 # Support duplication of one selected object
1213                         if  len(aObjects) = 0  and not oModel.IsFormActive()  {
1214                                 aObjects = oModel.ActiveObjectItemAsList()
1215                         }
1216                 # Display messagebox if not objects are selected
1217                         if len(aObjects) = 0 {
1218                                 ShowMsg("Sorry!","No objects are selected","Select objects first to be duplicated")
1219                                 return
1220                         }
1221                 # Duplication of selected objects
1222                         cCode  = oFile.Objects2String(self,aObjects)
1223                         eval(cCode)
1224                         # Update Name and Position
1225                                 nIndex = 0
1226                                 for item in aObjectsList {
1227                                         nIndex++
1228                                         # Remove Numbers from the name
1229                                                 for char in item[:name] {
1230                                                         if not isalpha(char) and isalnum(char) {
1231                                                                 char = " "
1232                                                         }
1233                                                 }
1234                                                 item[:name] = substr(item[:name]," ","")
1235                                         # Add New number to the name
1236                                                 # -1 to avoid counting the window object
1237                                                         item[:name] += "" + (oModel.ObjectsCount()+nIndex-1)
1238                                         # Update Position
1239                                                 item[:data][:x] += 10
1240                                                 item[:data][:y] += 10
1241                                 }
1242                         nCount = oModel.ObjectsCount()
1243                         oFile.CreateFormObjects(self,aObjectsList)
1244                         # Select the new objects
1245                                 aObjects = oModel.GetObjects()
1246                                 for x = nCount+1 to len(aObjects) {
1247                                         item = aObjects[x]
1248                                         oObject = item[2]
1249                                         oObject.oCorners.Show()
1250                                         if nCount+1 != len(aObjects) {
1251                                                 oModel.AddSelectedObject(x)
1252                                         }
1253                                 }
1254
1255         func ShowMsg cTitle,cText,cText2
1256                 new qmessagebox(oView.win)
1257                 {
1258                         setwindowtitle(cTitle)
1259                         settext(cText)
1260                         setInformativeText(cText2)
1261                         setstandardbuttons(QMessageBox_Ok)
1262                         exec()
1263                 }
1264
1265         func BringToFront
1266                 if CheckOneObject() {
1267                         oModel.ActiveObject().oCorners.Hide()
1268                         oModel.ActiveObject().raise()
1269                         oModel.RaiseActiveObject()
1270                         AddObjectsToCombo()
1271                 }
1272
1273         func SendToBack
1274                 if CheckOneObject() {
1275                         oModel.ActiveObject().oCorners.Hide()
1276                         oModel.ActiveObject().lower()
1277                         oModel.LowerActiveObject()
1278                         AddObjectsToCombo()
1279                 }
1280
1281         func CheckOneObject
1282                 if oModel.IsFormActive()  or oModel.IsManySelected() {
1283                         ShowMsg("Sorry!","Object selection is not correct","Select one object first!")
1284                         return False
1285                 }
1286                 return True
1287
1288         func Toolbox
1289                 if oView.oToolBoxDock.isvisible() {
1290                         oView.oToolBoxDock.hide()
1291                 else
1292                         oView.oToolBoxDock.Show()
1293                 }
1294
1295         func Properties
1296                 if oView.oPropertiesDock.isvisible() {
1297                         oView.oPropertiesDock.hide()
1298                 else
1299                         oView.oPropertiesDock.Show()
1300                 }
1301
1302         Func OpenCHMAction
1303                 new QDesktopServices {
1304                         OpenURL(new qURL("file:///"+substr(exefolder(),"\","/")+"../docs/ring.chm") )
1305                 }
1306
1307         Func OpenPDFAction
1308                 new QDesktopServices {
1309                         OpenURL(new qURL("file:///"+substr(exefolder(),"\","/")+"../docs/ring.pdf") )
1310                 }
1311
1312         Func MsgBox cTitle,cMessage
1313                 new qMessagebox(NULL) {
1314                         setwindowtitle(cTitle)
1315                         setText(cMessage)
1316                         show()
1317                 }
1318
1319         func LangAction
1320                 MsgBox("Programming Language",
1321                         "This application developed using the Ring programming language")
1322
1323         func GUIAction
1324                 MsgBox("GUI Library",
1325                         "This application uses the Qt GUI Library through RingQt")
1326
1327         func AboutAction
1328                 MsgBox("About",
1329                 "This application developed using the Ring programming language" + nl +
1330                 "Ring Version : " + version() + nl +
1331                 "2018-2019, Mahmoud Fayed <msfclipper@yahoo.com>")
1332
1333         func HasParent 
1334                 oParent = oView.win.parentwidget()
1335                 if not oParent.pObject = NULLPointer() {
1336                         return True
1337                 }
1338                 return False
1339
1340         func OpenFile cFileName 
1341                 oFile {
1342                         SetFileName(cFileName)
1343                         LoadFormFromFile(this)
1344                 }
1345
1346         func PrepareStringForFormFile  cString
1347                 # To allow writing " in properties 
1348                 if isString(cString) {
1349                         cString = SubStr(cString,'"', '"+char(34)+"')
1350                 }
1351                 return cString
1352
1353         func SaveIfOnlyFileIsOpened
1354                 oFile.SaveIfOnlyFileIsOpened(self)
1355
1356         func ObjectsOrderAction
1357                 Open_WindowAndLink(:ObjectsOrderController,self)
1358                 ObjectsOrder().loadobjects()
1359
1360         func SelectObjectsWindow 
1361                 Open_WindowAndLink(:selObjectsController,self)
1362                 SelObjects().loadobjects()
1363