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, 15 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.