OSDN Git Service

Ring 1.10 以来となる開発環境の日本語ローカライズ版 (評価版) を追加 (ノートパッド、フォームデザイナー、対話型実行環境、ファイルの検索)。
[ring-lang-081/ring.git] / applications / formdesigner / source / common / moveresizecorners.ring
1 /*
2 **      Project : Form Designer 
3 **      File Purpose :  Move/Resize Corners
4 **      Date : 2017.04.29
5 **      Author :  Mahmoud Fayed <msfclipper@yahoo.com>
6 */
7
8 package formdesigner
9
10 Class MoveResizeCorners
11
12         func CreateMoveResizeCornersAttributes
13                 # Movement Event
14                         AddAttribute(self,:nX)
15                         AddAttribute(self,:nY)
16                         AddAttribute(self,:lPress)
17                         AddAttribute(self,:oFilter)
18                         AddAttribute(self,:lMoveEvent)
19                 # Resize Event
20                         AddAttribute(self,:lResize)
21                         AddAttribute(self,:nResizeMode)
22                 # Corners
23                         AddAttribute(self,:oCorners)
24                 # Default Values
25                         lPress=False
26                         lMoveEvent=False
27                         lResize=False
28                         nResizeMode=0
29                 # For Mobile Devices 
30                         AddAttribute(self,:nClockValue)
31                         AddAttribute(self,:nClocksCount)
32                         nClockValue = 0
33                         nClocksCount = clockspersecond() / 4
34
35         func CreateCorners
36                 oCorners = new ObjectCorners(self)
37
38         func CreateCornersNoInit        
39                 oCorners = new ObjectCorners
40
41         func RefreshCorners oParent
42                 oCorners.refresh(oParent)
43
44         func MousePress oDesigner
45                 lPress = True
46                 lMoveEvent=False
47                 lResize = False
48                 nResizeMode = 0
49                 nX = oFilter.getglobalx()
50                 ny = oFilter.getglobaly()
51                 setCursor(oDesigner.oGeneral.oCursorA())
52                 # To be responsive to quick clicks/movement             
53                         MouseMove(oDesigner)
54                         # Draw Corners
55                                 aObjects = oDesigner.oModel.getselectedObjects()
56                                 for item in aObjects {
57                                         oObject = item[2]
58                                         oObject.oCorners.refresh(oObject)
59                                 }
60                         # Set focus to be the current object (after drawing corners)
61                                 setfocus(0)
62
63
64         func MouseRelease oDesigner
65                 lPress = False
66                 lMoveEvent=False
67                 lResize = False
68                 nResizeMode = 0
69                 setCursor(oDesigner.oGeneral.oCursorA())
70                 if not oDesigner.oModel.IsManySelected() {
71                         DisplayProperties(oDesigner)
72                 }
73
74         func MouseMove oDesigner
75                 if not resizeEvent(oDesigner) { return }
76                 MoveEvent(oDesigner)
77
78         func ResizeEvent oDesigner
79                 # Resize Event
80                         nXPos =  oFilter.getx()
81                         nYPos = ofilter.gety()
82                         if (nResizeMode = 0 or lPress = False) and lMoveEvent=False  {
83                                 if nXPos < 5 {
84                                         if nYPos < 5 {  # Top + Left
85                                                 setCursor(oDesigner.oGeneral.oCursorF() )
86                                                 nResizeMode = 1
87                                         elseif nYPos > Height() - 5     # Left + Bottom
88                                                 setCursor(oDesigner.oGeneral.oCursorB() )
89                                                 nResizeMode = 2
90                                         else                    # Left
91                                                 setCursor(oDesigner.oGeneral.oCursorH() )
92                                                 nResizeMode = 3
93                                         }
94                                         lResize = True
95                                 elseif nYPos < 5
96                                         if nXPos > Width() - 5 {        # Top+Width
97                                                 setCursor(oDesigner.oGeneral.oCursorB() )
98                                                 nResizeMode = 4
99                                         else                                    # Top
100                                                 setCursor(oDesigner.oGeneral.oCursorV() )
101                                                 nResizeMode = 5
102                                         }
103                                         if lPress {     lResize = True }
104                                 elseif nYPos > Height() - 5
105                                         if nXPos > Width() - 5 {        # Bottom+Width
106                                                 setCursor(oDesigner.oGeneral.oCursorF() )
107                                                 nResizeMode = 6
108                                         else                                    # Bottom
109                                                 setCursor(oDesigner.oGeneral.oCursorV())
110                                                 nResizeMode = 7
111                                         }
112                                         if lPress {     lResize = True }
113                                 elseif nXPos > Width() - 5              # Left+Width
114                                         setCursor(oDesigner.oGeneral.oCursorH() )
115                                         nResizeMode = 8
116                                         if lPress {     lResize = True }
117                                 else
118                                         lResizeMode = 0
119                                         lResize = False
120                                         setCursor(oDesigner.oGeneral.oCursorA())
121                                 }
122                         }
123
124                         if lResize and lPress and lMoveEvent=False {
125                                 switch nResizeMode {
126                                         case 1  # Top+Left
127                                                 move(x()+nXPos,y()+nYPos)
128                                                 resize(width() + (-1) * nXPos , height() + (-1) * nYPos)
129                                         case 2  # Left + Bottom
130                                                 move(x()+ nXPos,y())
131                                                 resize(width() + (-1) *  nXPos , nYPos)
132                                         case 3  # Left
133                                                 move(x()+nXPos,y())
134                                                 resize(width() + (-1) * nXPos , height() )
135                                         case 4  # Top+Width
136                                                 move(x(), y() + nYPos)
137                                                 resize(   nXPos , height() + (-1) *  nYPos )
138                                         case 5  # Top
139                                                 move(x(), y() + nYPos)
140                                                 resize(width() , height() + (-1) *  nYPos )
141                                         case 6  # Bottom+Width
142                                                 move(x(), y())
143                                                 resize(nXPos , nYPos )
144                                         case 7  # Bottom
145                                                 move(x(), y() )
146                                                 resize(width() , nYPos )
147                                         case 8  # Left+Width
148                                                 move(x(), y() )
149                                                 resize(nXPos , height() )
150                                 }
151                                 oCorners.refresh(oDesigner.oModel.ActiveObject())
152                                 return false
153                         }
154                         return True
155
156         func MoveEvent oDesigner
157                 if MobileEventDelay() { return }
158                 # Move Event
159                 if lPress {
160                         lMoveEvent=True
161                         nX2 = oFilter.getglobalx()
162                         ny2 = oFilter.getglobaly()
163                         ndiffx = nX2 - nX
164                         ndiffy = nY2 - nY
165                         move(x()+ndiffx,y()+ndiffy)
166                         nX = nX2
167                         ny = nY2
168                         oCorners.refresh(oDesigner.oModel.ActiveObject())
169                         if isMobile() {
170                                 show()
171                                 oFDApp.processevents()
172                         }
173                 }
174
175         func MousePressMany oDesigner
176                 MousePress(oDesigner)
177
178         func MouseMoveMany oDesigner
179                 if MobileEventDelay() { return }
180                 if lPress {
181                         lMoveEvent=True
182                         nX2 = oFilter.getglobalx()
183                         ny2 = oFilter.getglobaly()
184                         ndiffx = nX2 - nX
185                         ndiffy = nY2 - nY
186                         nX = nX2
187                         ny = nY2
188                         # Move the objects together
189                         aObjects = oDesigner.oModel.getselectedObjects()
190                         for item in aObjects {
191                                 oObject = item[2]
192                                 oObject.move(oObject.x()+ndiffx,oObject.y()+ndiffy)
193                                 oObject.oCorners.refresh(oObject)
194                         }
195                         if isMobile() {
196                                 oFDApp.processevents()
197                         }
198                 }
199
200         func MouseReleaseMany oDesigner
201                 MouseRelease(oDesigner)
202
203
204         func MobileEventDelay
205                 if isMobile() {
206                         if nClockValue != 0 and clock() - nClockValue < nClocksCount {
207                                 return True
208                         }
209                         nClockValue = clock()
210                 }
211                 return False