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
RevLine 
[475]1#include "stdafx.h"
2
[3]3#include "Common.h"
4
5void Rad_UndoCommand(int WndNum){
6 extern HINSTANCE hInst;
7 extern MDIINFO MdiInfo[MAX_WNDNUM];
8 extern PROJECTINFO ProjectInfo;
[609]9 int i;
[3]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
[609]23 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
24 int WndInfoNum = GetWndInfoNum(MdiInfo[WndNum].path);
[3]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
[609]47 temporary=pWindowInfo->name;
48 pWindowInfo->name=names->name;
[3]49 names->name=temporary;
50 GlobalFree(MdiInfo[WndNum].path);
[609]51 MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pWindowInfo->name)+1);
52 lstrcpy(MdiInfo[WndNum].path,pWindowInfo->name);
[3]53
[609]54 temporary=pWindowInfo->HandleName;
55 pWindowInfo->HandleName=names->HandleName;
[3]56 names->HandleName=temporary;
57
[609]58 temporary=pWindowInfo->CallBackName;
59 pWindowInfo->CallBackName=names->CallBackName;
[3]60 names->CallBackName=temporary;
61 }
62 else{
[609]63 temporary=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName;
64 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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){
[609]72 temporary=pWindowInfo->caption;
73 pWindowInfo->caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]74 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
75 }
76 else{
[609]77 temporary=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption;
78 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]79 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
80 }
81 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
82 ChangePropertyWindow(WndNum,WndInfoNum);
[609]83 DrawRadWindow(WndNum,pWindowInfo);
[3]84 break;
85 case RAD_UNDO_FONT:
86 LOGFONT *pLogFont,lf;
87 pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
[609]88 lf=pWindowInfo->LogFont;
89 pWindowInfo->LogFont=*pLogFont;
[3]90 *pLogFont=lf;
91 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
92 ChangePropertyWindow(WndNum,WndInfoNum);
[609]93 DrawRadWindow(WndNum,pWindowInfo);
[3]94 break;
95 case RAD_UNDO_BGCOLOR:
[609]96 dw=pWindowInfo->bgColor;
97 pWindowInfo->bgColor=pUndoState->lpdwData[pUndoState->NowPos];
[3]98 pUndoState->lpdwData[pUndoState->NowPos]=dw;
99 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
100 ChangePropertyWindow(WndNum,WndInfoNum);
[609]101 DrawRadWindow(WndNum,pWindowInfo);
[3]102 break;
103 case RAD_UNDO_WINDOWMENU:
[609]104 temporary=pWindowInfo->MenuID;
105 pWindowInfo->MenuID=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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:
[609]111 temporary=pWindowInfo->IconResName;
112 pWindowInfo->IconResName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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){
[609]119 dw=pWindowInfo->style;
120 pWindowInfo->style=pUndoState->lpdwData[pUndoState->NowPos];
[3]121 pUndoState->lpdwData[pUndoState->NowPos]=dw;
122 }
123 else{
[609]124 dw=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style;
125 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style=pUndoState->lpdwData[pUndoState->NowPos];
[3]126 pUndoState->lpdwData[pUndoState->NowPos]=dw;
127 }
128 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
129 ChangePropertyWindow(WndNum,WndInfoNum);
[609]130 DrawRadWindow(WndNum,pWindowInfo);
[3]131 break;
132 case RAD_UNDO_EXSTYLE:
133 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
[609]134 dw=pWindowInfo->ExStyle;
135 pWindowInfo->ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
[3]136 pUndoState->lpdwData[pUndoState->NowPos]=dw;
137 }
138 else{
[609]139 dw=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle;
140 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
[3]141 pUndoState->lpdwData[pUndoState->NowPos]=dw;
142 }
[609]143 DrawRadWindow(WndNum,pWindowInfo);
[3]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){
[609]149 PointAndSize.size=pWindowInfo->size;
150 pWindowInfo->size=pReadPointAndSize->size;
[3]151 }
152 else{
[609]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;
[3]157 }
158 *pReadPointAndSize=PointAndSize;
[609]159 DrawRadWindow(WndNum,pWindowInfo);
[3]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
[609]169 dw=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type;
170 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type=pImageCtrlInfo->type;
[3]171 pImageCtrlInfo->type=dw;
172
[609]173 dw=(DWORD)pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path;
174 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path=pImageCtrlInfo->path;
[3]175 pImageCtrlInfo->path=(char *)dw;
176
177 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
178 ChangePropertyWindow(WndNum,WndInfoNum);
[609]179 DrawRadWindow(WndNum,pWindowInfo);
[3]180 break;
181 case RAD_UNDO_TYPE:
[609]182 dw=pWindowInfo->type;
183 pWindowInfo->type=pUndoState->lpdwData[pUndoState->NowPos];
[3]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
[609]210 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
211 int WndInfoNum = GetWndInfoNum(MdiInfo[WndNum].path);
[3]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
[609]232 temporary=pWindowInfo->name;
233 pWindowInfo->name=names->name;
[3]234 names->name=temporary;
235 GlobalFree(MdiInfo[WndNum].path);
[609]236 MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pWindowInfo->name)+1);
237 lstrcpy(MdiInfo[WndNum].path,pWindowInfo->name);
[3]238
[609]239 temporary=pWindowInfo->HandleName;
240 pWindowInfo->HandleName=names->HandleName;
[3]241 names->HandleName=temporary;
242
[609]243 temporary=pWindowInfo->CallBackName;
244 pWindowInfo->CallBackName=names->CallBackName;
[3]245 names->CallBackName=temporary;
246 }
247 else{
[609]248 temporary=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName;
249 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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){
[609]257 temporary=pWindowInfo->caption;
258 pWindowInfo->caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]259 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
260 }
261 else{
[609]262 temporary=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption;
263 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]264 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
265 }
266 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
267 ChangePropertyWindow(WndNum,WndInfoNum);
[609]268 DrawRadWindow(WndNum,pWindowInfo);
[3]269 break;
270 case RAD_UNDO_FONT:
271 LOGFONT *pLogFont,lf;
272 pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
[609]273 lf=pWindowInfo->LogFont;
274 pWindowInfo->LogFont=*pLogFont;
[3]275 *pLogFont=lf;
276 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
277 ChangePropertyWindow(WndNum,WndInfoNum);
[609]278 DrawRadWindow(WndNum,pWindowInfo);
[3]279 break;
280 case RAD_UNDO_BGCOLOR:
[609]281 dw=pWindowInfo->bgColor;
282 pWindowInfo->bgColor=pUndoState->lpdwData[pUndoState->NowPos];
[3]283 pUndoState->lpdwData[pUndoState->NowPos]=dw;
284 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
285 ChangePropertyWindow(WndNum,WndInfoNum);
[609]286 DrawRadWindow(WndNum,pWindowInfo);
[3]287 break;
288 case RAD_UNDO_WINDOWMENU:
[609]289 temporary=pWindowInfo->MenuID;
290 pWindowInfo->MenuID=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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:
[609]296 temporary=pWindowInfo->IconResName;
297 pWindowInfo->IconResName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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){
[609]304 dw=pWindowInfo->style;
305 pWindowInfo->style=pUndoState->lpdwData[pUndoState->NowPos];
[3]306 pUndoState->lpdwData[pUndoState->NowPos]=dw;
307 }
308 else{
[609]309 dw=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style;
310 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style=pUndoState->lpdwData[pUndoState->NowPos];
[3]311 pUndoState->lpdwData[pUndoState->NowPos]=dw;
312 }
313 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
314 ChangePropertyWindow(WndNum,WndInfoNum);
[609]315 DrawRadWindow(WndNum,pWindowInfo);
[3]316 break;
317 case RAD_UNDO_EXSTYLE:
318 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
[609]319 dw=pWindowInfo->ExStyle;
320 pWindowInfo->ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
[3]321 pUndoState->lpdwData[pUndoState->NowPos]=dw;
322 }
323 else{
[609]324 dw=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle;
325 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
[3]326 pUndoState->lpdwData[pUndoState->NowPos]=dw;
327 }
[609]328 DrawRadWindow(WndNum,pWindowInfo);
[3]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){
[609]334 PointAndSize.size=pWindowInfo->size;
335 pWindowInfo->size=pReadPointAndSize->size;
[3]336 }
337 else{
[609]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;
[3]342 }
343 *pReadPointAndSize=PointAndSize;
[609]344 DrawRadWindow(WndNum,pWindowInfo);
[3]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
[609]354 dw=pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type;
355 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type=pImageCtrlInfo->type;
[3]356 pImageCtrlInfo->type=dw;
357
[609]358 dw=(DWORD)pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path;
359 pWindowInfo->pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path=pImageCtrlInfo->path;
[3]360 pImageCtrlInfo->path=(char *)dw;
361
362 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
363 ChangePropertyWindow(WndNum,WndInfoNum);
[609]364 DrawRadWindow(WndNum,pWindowInfo);
[3]365 break;
366 case RAD_UNDO_TYPE:
[609]367 dw=pWindowInfo->type;
368 pWindowInfo->type=pUndoState->lpdwData[pUndoState->NowPos];
[3]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.