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

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

CHILDINFOの管理方法をstd::vectorに変更。

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