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

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

構成管理を変更中・・・(いったんコミット)

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