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

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

ProjectInfo構造体のpWindowInfoメンバをwindowInfosメンバに置き換えた。

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