source: dev/trunk/ab5.0/abdev/ProjectEditor/Rad_UndoRedo.cpp@ 475

Last change on this file since 475 was 475, checked in by dai_9181, 16 years ago

構成管理を変更中・・・(いったんコミット)

File size: 25.0 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5void Rad_UndoCommand(int WndNum){
6 extern HINSTANCE hInst;
7 extern MDIINFO MdiInfo[MAX_WNDNUM];
8 extern PROJECTINFO ProjectInfo;
9 int i,WndInfoNum;
10 DWORD dw;
11 char *temporary;
12 RAD_UNDOSTATE *pUndoState;
13
14 pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
15 i=pUndoState->NowPos-1;
16 if(i==-1) i=MAX_UNDONUM-1;
17 if(!pUndoState->Command[i]){
18 MessageBeep(0);
19 return;
20 }
21 pUndoState->NowPos=i;
22
23 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
24 switch(pUndoState->Command[pUndoState->NowPos]){
25 case RAD_UNDO_INSERTITEM:
26 DeleteDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],0);
27 MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=-1;
28 break;
29 case RAD_UNDO_DELETEITEM:
30 CHILDINFO *pChildInfo;
31 RECT rect;
32 pChildInfo=(CHILDINFO *)pUndoState->lpdwData[pUndoState->NowPos];
33 rect.left=pChildInfo->pos.x;
34 rect.top=pChildInfo->pos.y;
35 rect.right=pChildInfo->pos.x+pChildInfo->size.cx;
36 rect.bottom=pChildInfo->pos.y+pChildInfo->size.cy;
37 InsertDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],
38 &pChildInfo->pos,&pChildInfo->size,
39 pChildInfo->IdName,pChildInfo->caption,pChildInfo->style,pChildInfo->ExStyle,pChildInfo->Control,pChildInfo->ImageCtrlInfo.type,pChildInfo->ImageCtrlInfo.path,0);
40 break;
41 case RAD_UNDO_NAME:
42 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
43 RAD_UNDOSTATE_NAME *names;
44 names=(RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
45
46 temporary=ProjectInfo.pWindowInfo[WndInfoNum].name;
47 ProjectInfo.pWindowInfo[WndInfoNum].name=names->name;
48 names->name=temporary;
49 GlobalFree(MdiInfo[WndNum].path);
50 MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].name)+1);
51 lstrcpy(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[WndInfoNum].name);
52
53 temporary=ProjectInfo.pWindowInfo[WndInfoNum].HandleName;
54 ProjectInfo.pWindowInfo[WndInfoNum].HandleName=names->HandleName;
55 names->HandleName=temporary;
56
57 temporary=ProjectInfo.pWindowInfo[WndInfoNum].CallBackName;
58 ProjectInfo.pWindowInfo[WndInfoNum].CallBackName=names->CallBackName;
59 names->CallBackName=temporary;
60 }
61 else{
62 temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName;
63 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
64 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
65 }
66 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
67 ChangePropertyWindow(WndNum,WndInfoNum);
68 break;
69 case RAD_UNDO_CAPTION:
70 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
71 temporary=ProjectInfo.pWindowInfo[WndInfoNum].caption;
72 ProjectInfo.pWindowInfo[WndInfoNum].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
73 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
74 }
75 else{
76 temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption;
77 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
78 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
79 }
80 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
81 ChangePropertyWindow(WndNum,WndInfoNum);
82 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
83 break;
84 case RAD_UNDO_FONT:
85 LOGFONT *pLogFont,lf;
86 pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
87 lf=ProjectInfo.pWindowInfo[WndInfoNum].LogFont;
88 ProjectInfo.pWindowInfo[WndInfoNum].LogFont=*pLogFont;
89 *pLogFont=lf;
90 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
91 ChangePropertyWindow(WndNum,WndInfoNum);
92 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
93 break;
94 case RAD_UNDO_BGCOLOR:
95 dw=ProjectInfo.pWindowInfo[WndInfoNum].bgColor;
96 ProjectInfo.pWindowInfo[WndInfoNum].bgColor=pUndoState->lpdwData[pUndoState->NowPos];
97 pUndoState->lpdwData[pUndoState->NowPos]=dw;
98 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
99 ChangePropertyWindow(WndNum,WndInfoNum);
100 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
101 break;
102 case RAD_UNDO_WINDOWMENU:
103 temporary=ProjectInfo.pWindowInfo[WndInfoNum].MenuID;
104 ProjectInfo.pWindowInfo[WndInfoNum].MenuID=(char *)pUndoState->lpdwData[pUndoState->NowPos];
105 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
106 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
107 ChangePropertyWindow(WndNum,WndInfoNum);
108 break;
109 case RAD_UNDO_ICONRES:
110 temporary=ProjectInfo.pWindowInfo[WndInfoNum].IconResName;
111 ProjectInfo.pWindowInfo[WndInfoNum].IconResName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
112 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
113 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
114 ChangePropertyWindow(WndNum,WndInfoNum);
115 break;
116 case RAD_UNDO_STYLE:
117 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
118 dw=ProjectInfo.pWindowInfo[WndInfoNum].style;
119 ProjectInfo.pWindowInfo[WndInfoNum].style=pUndoState->lpdwData[pUndoState->NowPos];
120 pUndoState->lpdwData[pUndoState->NowPos]=dw;
121 }
122 else{
123 dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style;
124 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style=pUndoState->lpdwData[pUndoState->NowPos];
125 pUndoState->lpdwData[pUndoState->NowPos]=dw;
126 }
127 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
128 ChangePropertyWindow(WndNum,WndInfoNum);
129 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
130 break;
131 case RAD_UNDO_EXSTYLE:
132 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
133 dw=ProjectInfo.pWindowInfo[WndInfoNum].ExStyle;
134 ProjectInfo.pWindowInfo[WndInfoNum].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
135 pUndoState->lpdwData[pUndoState->NowPos]=dw;
136 }
137 else{
138 dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle;
139 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
140 pUndoState->lpdwData[pUndoState->NowPos]=dw;
141 }
142 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
143 break;
144 case RAD_UNDO_POSITION:
145 POINTANDSIZE PointAndSize,*pReadPointAndSize;
146 pReadPointAndSize=(POINTANDSIZE *)pUndoState->lpdwData[pUndoState->NowPos];
147 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
148 PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].size;
149 ProjectInfo.pWindowInfo[WndInfoNum].size=pReadPointAndSize->size;
150 }
151 else{
152 PointAndSize.pos=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos;
153 PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size;
154 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos=pReadPointAndSize->pos;
155 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size=pReadPointAndSize->size;
156 }
157 *pReadPointAndSize=PointAndSize;
158 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
159 SetStatusText(NULL);
160
161 //サポートダイアログの内容をセット
162 SetSupportDlgData(WndNum,WndInfoNum);
163 break;
164 case RAD_UNDO_IMAGESTATE:
165 IMAGECTRLINFO *pImageCtrlInfo;
166 pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pUndoState->NowPos];
167
168 dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type;
169 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type=pImageCtrlInfo->type;
170 pImageCtrlInfo->type=dw;
171
172 dw=(DWORD)ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path;
173 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path=pImageCtrlInfo->path;
174 pImageCtrlInfo->path=(char *)dw;
175
176 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
177 ChangePropertyWindow(WndNum,WndInfoNum);
178 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
179 break;
180 case RAD_UNDO_TYPE:
181 dw=ProjectInfo.pWindowInfo[WndInfoNum].type;
182 ProjectInfo.pWindowInfo[WndInfoNum].type=pUndoState->lpdwData[pUndoState->NowPos];
183 pUndoState->lpdwData[pUndoState->NowPos]=dw;
184 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
185 ChangePropertyWindow(WndNum,WndInfoNum);
186 break;
187 }
188
189 ProjectInfo.ModifyOfMaterial=1;
190
191 ResetState_UndoMenu();
192}
193void Rad_RedoCommand(int WndNum){
194 extern HINSTANCE hInst;
195 extern MDIINFO MdiInfo[MAX_WNDNUM];
196 extern PROJECTINFO ProjectInfo;
197 int WndInfoNum;
198 DWORD dw;
199 char *temporary;
200 RAD_UNDOSTATE *pUndoState;
201 CHILDINFO *pChildInfo;
202 RECT rect;
203
204 pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
205 if(!pUndoState->Command[pUndoState->NowPos]){
206 MessageBeep(0);
207 return;
208 }
209
210 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
211 switch(pUndoState->Command[pUndoState->NowPos]){
212 case RAD_UNDO_INSERTITEM:
213 pChildInfo=(CHILDINFO *)pUndoState->lpdwData[pUndoState->NowPos];
214 rect.left=pChildInfo->pos.x;
215 rect.top=pChildInfo->pos.y;
216 rect.right=pChildInfo->pos.x+pChildInfo->size.cx;
217 rect.bottom=pChildInfo->pos.y+pChildInfo->size.cy;
218 InsertDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],
219 &pChildInfo->pos,&pChildInfo->size,
220 pChildInfo->IdName,pChildInfo->caption,pChildInfo->style,pChildInfo->ExStyle,pChildInfo->Control,pChildInfo->ImageCtrlInfo.type,pChildInfo->ImageCtrlInfo.path,0);
221 break;
222 case RAD_UNDO_DELETEITEM:
223 DeleteDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],0);
224 MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=-1;
225 break;
226 case RAD_UNDO_NAME:
227 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
228 RAD_UNDOSTATE_NAME *names;
229 names=(RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
230
231 temporary=ProjectInfo.pWindowInfo[WndInfoNum].name;
232 ProjectInfo.pWindowInfo[WndInfoNum].name=names->name;
233 names->name=temporary;
234 GlobalFree(MdiInfo[WndNum].path);
235 MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].name)+1);
236 lstrcpy(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[WndInfoNum].name);
237
238 temporary=ProjectInfo.pWindowInfo[WndInfoNum].HandleName;
239 ProjectInfo.pWindowInfo[WndInfoNum].HandleName=names->HandleName;
240 names->HandleName=temporary;
241
242 temporary=ProjectInfo.pWindowInfo[WndInfoNum].CallBackName;
243 ProjectInfo.pWindowInfo[WndInfoNum].CallBackName=names->CallBackName;
244 names->CallBackName=temporary;
245 }
246 else{
247 temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName;
248 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
249 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
250 }
251 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
252 ChangePropertyWindow(WndNum,WndInfoNum);
253 break;
254 case RAD_UNDO_CAPTION:
255 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
256 temporary=ProjectInfo.pWindowInfo[WndInfoNum].caption;
257 ProjectInfo.pWindowInfo[WndInfoNum].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
258 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
259 }
260 else{
261 temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption;
262 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
263 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
264 }
265 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
266 ChangePropertyWindow(WndNum,WndInfoNum);
267 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
268 break;
269 case RAD_UNDO_FONT:
270 LOGFONT *pLogFont,lf;
271 pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
272 lf=ProjectInfo.pWindowInfo[WndInfoNum].LogFont;
273 ProjectInfo.pWindowInfo[WndInfoNum].LogFont=*pLogFont;
274 *pLogFont=lf;
275 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
276 ChangePropertyWindow(WndNum,WndInfoNum);
277 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
278 break;
279 case RAD_UNDO_BGCOLOR:
280 dw=ProjectInfo.pWindowInfo[WndInfoNum].bgColor;
281 ProjectInfo.pWindowInfo[WndInfoNum].bgColor=pUndoState->lpdwData[pUndoState->NowPos];
282 pUndoState->lpdwData[pUndoState->NowPos]=dw;
283 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
284 ChangePropertyWindow(WndNum,WndInfoNum);
285 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
286 break;
287 case RAD_UNDO_WINDOWMENU:
288 temporary=ProjectInfo.pWindowInfo[WndInfoNum].MenuID;
289 ProjectInfo.pWindowInfo[WndInfoNum].MenuID=(char *)pUndoState->lpdwData[pUndoState->NowPos];
290 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
291 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
292 ChangePropertyWindow(WndNum,WndInfoNum);
293 break;
294 case RAD_UNDO_ICONRES:
295 temporary=ProjectInfo.pWindowInfo[WndInfoNum].IconResName;
296 ProjectInfo.pWindowInfo[WndInfoNum].IconResName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
297 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
298 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
299 ChangePropertyWindow(WndNum,WndInfoNum);
300 break;
301 case RAD_UNDO_STYLE:
302 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
303 dw=ProjectInfo.pWindowInfo[WndInfoNum].style;
304 ProjectInfo.pWindowInfo[WndInfoNum].style=pUndoState->lpdwData[pUndoState->NowPos];
305 pUndoState->lpdwData[pUndoState->NowPos]=dw;
306 }
307 else{
308 dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style;
309 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style=pUndoState->lpdwData[pUndoState->NowPos];
310 pUndoState->lpdwData[pUndoState->NowPos]=dw;
311 }
312 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
313 ChangePropertyWindow(WndNum,WndInfoNum);
314 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
315 break;
316 case RAD_UNDO_EXSTYLE:
317 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
318 dw=ProjectInfo.pWindowInfo[WndInfoNum].ExStyle;
319 ProjectInfo.pWindowInfo[WndInfoNum].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
320 pUndoState->lpdwData[pUndoState->NowPos]=dw;
321 }
322 else{
323 dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle;
324 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
325 pUndoState->lpdwData[pUndoState->NowPos]=dw;
326 }
327 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
328 break;
329 case RAD_UNDO_POSITION:
330 POINTANDSIZE PointAndSize,*pReadPointAndSize;
331 pReadPointAndSize=(POINTANDSIZE *)pUndoState->lpdwData[pUndoState->NowPos];
332 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
333 PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].size;
334 ProjectInfo.pWindowInfo[WndInfoNum].size=pReadPointAndSize->size;
335 }
336 else{
337 PointAndSize.pos=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos;
338 PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size;
339 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos=pReadPointAndSize->pos;
340 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size=pReadPointAndSize->size;
341 }
342 *pReadPointAndSize=PointAndSize;
343 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
344 SetStatusText(NULL);
345
346 //サポートダイアログの内容をセット
347 SetSupportDlgData(WndNum,WndInfoNum);
348 break;
349 case RAD_UNDO_IMAGESTATE:
350 IMAGECTRLINFO *pImageCtrlInfo;
351 pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pUndoState->NowPos];
352
353 dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type;
354 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type=pImageCtrlInfo->type;
355 pImageCtrlInfo->type=dw;
356
357 dw=(DWORD)ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path;
358 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path=pImageCtrlInfo->path;
359 pImageCtrlInfo->path=(char *)dw;
360
361 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
362 ChangePropertyWindow(WndNum,WndInfoNum);
363 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
364 break;
365 case RAD_UNDO_TYPE:
366 dw=ProjectInfo.pWindowInfo[WndInfoNum].type;
367 ProjectInfo.pWindowInfo[WndInfoNum].type=pUndoState->lpdwData[pUndoState->NowPos];
368 pUndoState->lpdwData[pUndoState->NowPos]=dw;
369 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
370 ChangePropertyWindow(WndNum,WndInfoNum);
371 break;
372 }
373
374 pUndoState->NowPos++;
375 if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
376
377 ProjectInfo.ModifyOfMaterial=1;
378
379 ResetState_UndoMenu();
380}
381void Rad_DeleteUndoData(int WndNum,int pos){
382 extern HANDLE hHeap;
383 extern MDIINFO MdiInfo[MAX_WNDNUM];
384 RAD_UNDOSTATE *pUndoState;
385
386 pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
387 switch(pUndoState->Command[pos]){
388 case RAD_UNDO_INSERTITEM:
389 case RAD_UNDO_DELETEITEM:
390 CHILDINFO *pChildInfo;
391 pChildInfo=(CHILDINFO *)pUndoState->lpdwData[pos];
392 HeapDefaultFree(pChildInfo->IdName);
393 HeapDefaultFree(pChildInfo->caption);
394 if(pChildInfo->Control==CT_IMAGEBOX){
395 //イメージ ボックスの場合
396 HeapDefaultFree(pChildInfo->ImageCtrlInfo.path);
397 }
398 HeapDefaultFree(pChildInfo);
399 break;
400 case RAD_UNDO_NAME:
401 if(pUndoState->SelectItemNum[pos]==SELECT_WINDOW){
402 RAD_UNDOSTATE_NAME *names;
403 names=(RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pos];
404 HeapDefaultFree(names->name);
405 HeapDefaultFree(names->HandleName);
406 HeapDefaultFree(names->CallBackName);
407 HeapDefaultFree(names);
408 }
409 else HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
410 break;
411 case RAD_UNDO_CAPTION:
412 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
413 break;
414 case RAD_UNDO_FONT:
415 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
416 break;
417 case RAD_UNDO_WINDOWMENU:
418 if(pUndoState->lpdwData[pos])
419 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
420 break;
421 case RAD_UNDO_ICONRES:
422 if(pUndoState->lpdwData[pos])
423 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
424 break;
425 case RAD_UNDO_POSITION:
426 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
427 break;
428 case RAD_UNDO_IMAGESTATE:
429 IMAGECTRLINFO *pImageCtrlInfo;
430 pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pos];
431 HeapDefaultFree(pImageCtrlInfo->path);
432 HeapDefaultFree(pImageCtrlInfo);
433 break;
434 }
435 pUndoState->Command[pos]=0;
436}
437void Rad_NoticeChanging(int WndNum,int Command,int SelectItemNum,DWORD dwData){
438 extern HANDLE hHeap;
439 extern MDIINFO MdiInfo[MAX_WNDNUM];
440 int i;
441 char *temporary,*temp2;
442 RAD_UNDOSTATE *pUndoState;
443
444 pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
445
446 //Redoされた場合の不要なデータを削除する
447 for(i=pUndoState->NowPos;;i++){
448 if(i==MAX_UNDONUM) i=0;
449 if(pUndoState->Command[i]==0) break;
450 Rad_DeleteUndoData(WndNum,i);
451 }
452
453 pUndoState->Command[pUndoState->NowPos]=Command;
454 pUndoState->SelectItemNum[pUndoState->NowPos]=SelectItemNum;
455 switch(Command){
456 case RAD_UNDO_INSERTITEM:
457 case RAD_UNDO_DELETEITEM:
458 CHILDINFO *pChildInfo,*pSaveChildInfo;
459 pChildInfo=(CHILDINFO *)dwData;
460 pSaveChildInfo=(CHILDINFO *)HeapAlloc(hHeap,0,sizeof(CHILDINFO));
461 pSaveChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->IdName)+1);
462 lstrcpy(pSaveChildInfo->IdName,pChildInfo->IdName);
463 pSaveChildInfo->pos=pChildInfo->pos;
464 pSaveChildInfo->size=pChildInfo->size;
465 pSaveChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->caption)+1);
466 lstrcpy(pSaveChildInfo->caption,pChildInfo->caption);
467 pSaveChildInfo->style=pChildInfo->style;
468 pSaveChildInfo->ExStyle=pChildInfo->ExStyle;
469 pSaveChildInfo->Control=pChildInfo->Control;
470 if(pChildInfo->Control==CT_IMAGEBOX){
471 //イメージ ボックスの場合
472 pSaveChildInfo->ImageCtrlInfo.type=pChildInfo->ImageCtrlInfo.type;
473 pSaveChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->ImageCtrlInfo.path)+1);
474 lstrcpy(pSaveChildInfo->ImageCtrlInfo.path,pChildInfo->ImageCtrlInfo.path);
475 }
476 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveChildInfo;
477 break;
478 case RAD_UNDO_NAME:
479 if(SelectItemNum==SELECT_WINDOW){
480 RAD_UNDOSTATE_NAME *names,*SaveNames;
481 names=(RAD_UNDOSTATE_NAME *)dwData;
482 SaveNames=(RAD_UNDOSTATE_NAME *)HeapAlloc(hHeap,0,sizeof(RAD_UNDOSTATE_NAME));
483 SaveNames->name=(char *)HeapAlloc(hHeap,0,lstrlen(names->name)+1);
484 lstrcpy(SaveNames->name,names->name);
485 SaveNames->HandleName=(char *)HeapAlloc(hHeap,0,lstrlen(names->HandleName)+1);
486 lstrcpy(SaveNames->HandleName,names->HandleName);
487 SaveNames->CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(names->CallBackName)+1);
488 lstrcpy(SaveNames->CallBackName,names->CallBackName);
489 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)SaveNames;
490 }
491 else{
492 temporary=(char *)dwData;
493 temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
494 lstrcpy(temp2,temporary);
495 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
496 }
497 break;
498 case RAD_UNDO_CAPTION:
499 temporary=(char *)dwData;
500 temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
501 lstrcpy(temp2,temporary);
502 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
503 break;
504 case RAD_UNDO_FONT:
505 LOGFONT *pLogFont,*pSaveLogFont;
506 pLogFont=(LOGFONT *)dwData;
507 pSaveLogFont=(LOGFONT *)HeapAlloc(hHeap,0,sizeof(LOGFONT));
508 *pSaveLogFont=*pLogFont;
509 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveLogFont;
510 break;
511 case RAD_UNDO_BGCOLOR:
512 pUndoState->lpdwData[pUndoState->NowPos]=dwData;
513 break;
514 case RAD_UNDO_WINDOWMENU:
515 case RAD_UNDO_ICONRES:
516 if(!dwData) pUndoState->lpdwData[pUndoState->NowPos]=0;
517 else{
518 temporary=(char *)dwData;
519 temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
520 lstrcpy(temp2,temporary);
521 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
522 }
523 break;
524 case RAD_UNDO_STYLE:
525 case RAD_UNDO_EXSTYLE:
526 pUndoState->lpdwData[pUndoState->NowPos]=dwData;
527 break;
528 case RAD_UNDO_POSITION:
529 POINTANDSIZE *pPointAndSize,*pSavePointAndSize;
530 pPointAndSize=(POINTANDSIZE *)dwData;
531 pSavePointAndSize=(POINTANDSIZE *)HeapAlloc(hHeap,0,sizeof(POINTANDSIZE));
532 pSavePointAndSize->pos=pPointAndSize->pos;
533 pSavePointAndSize->size=pPointAndSize->size;
534 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSavePointAndSize;
535 break;
536 case RAD_UNDO_IMAGESTATE:
537 IMAGECTRLINFO *pImageCtrlInfo,*pSaveImageCtrlInfo;
538 pImageCtrlInfo=(IMAGECTRLINFO *)dwData;
539 pSaveImageCtrlInfo=(IMAGECTRLINFO *)HeapAlloc(hHeap,0,sizeof(IMAGECTRLINFO));
540 pSaveImageCtrlInfo->type=pImageCtrlInfo->type;
541 pSaveImageCtrlInfo->path=(char *)HeapAlloc(hHeap,0,lstrlen(pImageCtrlInfo->path)+1);
542 lstrcpy(pSaveImageCtrlInfo->path,pImageCtrlInfo->path);
543 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveImageCtrlInfo;
544 break;
545 case RAD_UNDO_TYPE:
546 pUndoState->lpdwData[pUndoState->NowPos]=dwData;
547 break;
548 }
549
550 pUndoState->NowPos++;
551 if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
552 if(pUndoState->Command[pUndoState->NowPos]){
553 //一番古い情報を切り捨てる
554 Rad_DeleteUndoData(WndNum,pUndoState->NowPos);
555 }
556
557 extern PROJECTINFO ProjectInfo;
558 ProjectInfo.ModifyOfMaterial=1;
559
560 ResetState_UndoMenu();
561}
Note: See TracBrowser for help on using the repository browser.