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

Last change on this file since 617 was 617, checked in by dai_9181, 15 years ago

WindowInfoクラスをリファクタリング。

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    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 = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
44
45                std::string tempStr = pWindowInfo->GetName();
46                pWindowInfo->SetName( names->name );
47                names->name = tempStr;
48
49                GlobalFree(MdiInfo[WndNum].path);
50                MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,pWindowInfo->GetName().size()+1);
51                lstrcpy(MdiInfo[WndNum].path,pWindowInfo->GetName().c_str());
52
53                tempStr = pWindowInfo->GetHandleName();
54                pWindowInfo->SetHandleName( names->HandleName );
55                names->HandleName = tempStr;
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 = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
228
229                std::string tempStr = pWindowInfo->GetName();
230                pWindowInfo->SetName( names->name );
231                names->name = tempStr;
232
233                GlobalFree(MdiInfo[WndNum].path);
234                MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,pWindowInfo->GetName().size()+1);
235                lstrcpy(MdiInfo[WndNum].path,pWindowInfo->GetName().c_str());
236
237                tempStr = pWindowInfo->GetHandleName();
238                pWindowInfo->SetHandleName( names->HandleName );
239                names->HandleName = tempStr;
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 = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pos];
402                HeapDefaultFree(names->CallBackName);
403                delete names;
404            }
405            else HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
406            break;
407        case RAD_UNDO_CAPTION:
408            HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
409            break;
410        case RAD_UNDO_FONT:
411            HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
412            break;
413        case RAD_UNDO_WINDOWMENU:
414            if(pUndoState->lpdwData[pos])
415                HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
416            break;
417        case RAD_UNDO_ICONRES:
418            if(pUndoState->lpdwData[pos])
419                HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
420            break;
421        case RAD_UNDO_POSITION:
422            HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
423            break;
424        case RAD_UNDO_IMAGESTATE:
425            IMAGECTRLINFO *pImageCtrlInfo;
426            pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pos];
427            HeapDefaultFree(pImageCtrlInfo->path);
428            HeapDefaultFree(pImageCtrlInfo);
429            break;
430    }
431    pUndoState->Command[pos]=0;
432}
433void Rad_NoticeChanging(int WndNum,int Command,int SelectItemNum,DWORD dwData){
434    extern HANDLE hHeap;
435    extern MDIINFO MdiInfo[MAX_WNDNUM];
436    int i;
437    char *temporary,*temp2;
438    RAD_UNDOSTATE *pUndoState;
439
440    pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
441
442    //Redoされた場合の不要なデータを削除する
443    for(i=pUndoState->NowPos;;i++){
444        if(i==MAX_UNDONUM) i=0;
445        if(pUndoState->Command[i]==0) break;
446        Rad_DeleteUndoData(WndNum,i);
447    }
448
449    pUndoState->Command[pUndoState->NowPos]=Command;
450    pUndoState->SelectItemNum[pUndoState->NowPos]=SelectItemNum;
451    switch(Command){
452        case RAD_UNDO_INSERTITEM:
453        case RAD_UNDO_DELETEITEM:
454            CHILDINFO *pChildInfo,*pSaveChildInfo;
455            pChildInfo=(CHILDINFO *)dwData;
456            pSaveChildInfo=(CHILDINFO *)HeapAlloc(hHeap,0,sizeof(CHILDINFO));
457            pSaveChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->IdName)+1);
458            lstrcpy(pSaveChildInfo->IdName,pChildInfo->IdName);
459            pSaveChildInfo->pos=pChildInfo->pos;
460            pSaveChildInfo->size=pChildInfo->size;
461            pSaveChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->caption)+1);
462            lstrcpy(pSaveChildInfo->caption,pChildInfo->caption);
463            pSaveChildInfo->style=pChildInfo->style;
464            pSaveChildInfo->ExStyle=pChildInfo->ExStyle;
465            pSaveChildInfo->Control=pChildInfo->Control;
466            if(pChildInfo->Control==CT_IMAGEBOX){
467                //イメージ ボックスの場合
468                pSaveChildInfo->ImageCtrlInfo.type=pChildInfo->ImageCtrlInfo.type;
469                pSaveChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->ImageCtrlInfo.path)+1);
470                lstrcpy(pSaveChildInfo->ImageCtrlInfo.path,pChildInfo->ImageCtrlInfo.path);
471            }
472            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveChildInfo;
473            break;
474        case RAD_UNDO_NAME:
475            if(SelectItemNum==SELECT_WINDOW){
476                RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)dwData;
477                RAD_UNDOSTATE_NAME *SaveNames = new RAD_UNDOSTATE_NAME();
478                SaveNames->name = names->name;
479                SaveNames->HandleName = names->HandleName;
480                SaveNames->CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(names->CallBackName)+1);
481                lstrcpy(SaveNames->CallBackName,names->CallBackName);
482                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)SaveNames;
483            }
484            else{
485                temporary=(char *)dwData;
486                temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
487                lstrcpy(temp2,temporary);
488                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
489            }
490            break;
491        case RAD_UNDO_CAPTION:
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            break;
497        case RAD_UNDO_FONT:
498            LOGFONT *pLogFont,*pSaveLogFont;
499            pLogFont=(LOGFONT *)dwData;
500            pSaveLogFont=(LOGFONT *)HeapAlloc(hHeap,0,sizeof(LOGFONT));
501            *pSaveLogFont=*pLogFont;
502            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveLogFont;
503            break;
504        case RAD_UNDO_BGCOLOR:
505            pUndoState->lpdwData[pUndoState->NowPos]=dwData;
506            break;
507        case RAD_UNDO_WINDOWMENU:
508        case RAD_UNDO_ICONRES:
509            if(!dwData) pUndoState->lpdwData[pUndoState->NowPos]=0;
510            else{
511                temporary=(char *)dwData;
512                temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
513                lstrcpy(temp2,temporary);
514                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
515            }
516            break;
517        case RAD_UNDO_STYLE:
518        case RAD_UNDO_EXSTYLE:
519            pUndoState->lpdwData[pUndoState->NowPos]=dwData;
520            break;
521        case RAD_UNDO_POSITION:
522            POINTANDSIZE *pPointAndSize,*pSavePointAndSize;
523            pPointAndSize=(POINTANDSIZE *)dwData;
524            pSavePointAndSize=(POINTANDSIZE *)HeapAlloc(hHeap,0,sizeof(POINTANDSIZE));
525            pSavePointAndSize->pos=pPointAndSize->pos;
526            pSavePointAndSize->size=pPointAndSize->size;
527            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSavePointAndSize;
528            break;
529        case RAD_UNDO_IMAGESTATE:
530            IMAGECTRLINFO *pImageCtrlInfo,*pSaveImageCtrlInfo;
531            pImageCtrlInfo=(IMAGECTRLINFO *)dwData;
532            pSaveImageCtrlInfo=(IMAGECTRLINFO *)HeapAlloc(hHeap,0,sizeof(IMAGECTRLINFO));
533            pSaveImageCtrlInfo->type=pImageCtrlInfo->type;
534            pSaveImageCtrlInfo->path=(char *)HeapAlloc(hHeap,0,lstrlen(pImageCtrlInfo->path)+1);
535            lstrcpy(pSaveImageCtrlInfo->path,pImageCtrlInfo->path);
536            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveImageCtrlInfo;
537            break;
538        case RAD_UNDO_TYPE:
539            pUndoState->lpdwData[pUndoState->NowPos]=dwData;
540            break;
541    }
542
543    pUndoState->NowPos++;
544    if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
545    if(pUndoState->Command[pUndoState->NowPos]){
546        //一番古い情報を切り捨てる
547        Rad_DeleteUndoData(WndNum,pUndoState->NowPos);
548    }
549
550    ProjectInfo.ModifyOfMaterial=1;
551
552    ResetState_UndoMenu();
553}
Note: See TracBrowser for help on using the repository browser.