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

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

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

File size: 24.3 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    ActiveBasic::PM::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            ActiveBasic::PM::ChildWindowInfo *pChildInfo;
31            RECT rect;
32            pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)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->GetName().c_str(),pChildInfo->GetCaption().c_str(),pChildInfo->GetStyle(),pChildInfo->GetExStyle(),pChildInfo->Control,pChildInfo->image.type,pChildInfo->image.path.c_str(),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                std::string tempStr = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetName();
63                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetName( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
64                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
65                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
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                std::string tempStr = pWindowInfo->GetCaption();
73                pWindowInfo->SetCaption( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
74                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
75                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
76            }
77            else{
78                std::string tempStr = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetCaption();
79                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetCaption( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
80                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
81                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
82            }
83            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
84                ChangePropertyWindow(WndNum,WndInfoNum);
85            DrawRadWindow(WndNum,pWindowInfo);
86            break;
87        case RAD_UNDO_FONT:
88            LOGFONT *pLogFont,lf;
89            pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
90            lf=pWindowInfo->LogFont;
91            pWindowInfo->LogFont=*pLogFont;
92            *pLogFont=lf;
93            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
94                ChangePropertyWindow(WndNum,WndInfoNum);
95            DrawRadWindow(WndNum,pWindowInfo);
96            break;
97        case RAD_UNDO_BGCOLOR:
98            {
99                int tempBgColor = pWindowInfo->GetBackgroundColor();
100                pWindowInfo->SetBackgroundColor( static_cast<int>(pUndoState->lpdwData[pUndoState->NowPos]) );
101                pUndoState->lpdwData[pUndoState->NowPos] = static_cast<DWORD>(tempBgColor);
102
103                if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
104                    ChangePropertyWindow(WndNum,WndInfoNum);
105                DrawRadWindow(WndNum,pWindowInfo);
106                break;
107            }
108        case RAD_UNDO_WINDOWMENU:
109            {
110                std::string tempMenuIdName = pWindowInfo->GetMenuIdName();
111                pWindowInfo->SetMenuIdName( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
112                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
113                pUndoState->lpdwData[pUndoState->NowPos] = (DWORD)( new std::string( tempMenuIdName ) );
114                if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
115                {
116                    ChangePropertyWindow(WndNum,WndInfoNum);
117                }
118                DrawRadWindow(WndNum,pWindowInfo);
119                break;
120            }
121        case RAD_UNDO_ICONRES:
122            {
123                std::string tempStr = pWindowInfo->GetIconResourceName();
124                pWindowInfo->SetIconResourceName( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
125                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
126                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
127            }
128            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
129                ChangePropertyWindow(WndNum,WndInfoNum);
130            break;
131        case RAD_UNDO_STYLE:
132            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
133                dw=pWindowInfo->GetStyle();
134                pWindowInfo->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
135                pUndoState->lpdwData[pUndoState->NowPos]=dw;
136            }
137            else{
138                dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetStyle();
139                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
140                pUndoState->lpdwData[pUndoState->NowPos]=dw;
141            }
142            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
143                ChangePropertyWindow(WndNum,WndInfoNum);
144            DrawRadWindow(WndNum,pWindowInfo);
145            break;
146        case RAD_UNDO_EXSTYLE:
147            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
148                dw=pWindowInfo->GetExStyle();
149                pWindowInfo->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
150                pUndoState->lpdwData[pUndoState->NowPos]=dw;
151            }
152            else{
153                dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetExStyle();
154                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
155                pUndoState->lpdwData[pUndoState->NowPos]=dw;
156            }
157            DrawRadWindow(WndNum,pWindowInfo);
158            break;
159        case RAD_UNDO_POSITION:
160            POINTANDSIZE PointAndSize,*pReadPointAndSize;
161            pReadPointAndSize=(POINTANDSIZE *)pUndoState->lpdwData[pUndoState->NowPos];
162            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
163                PointAndSize.size=pWindowInfo->size;
164                pWindowInfo->size=pReadPointAndSize->size;
165            }
166            else{
167                PointAndSize.pos=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->pos;
168                PointAndSize.size=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->size;
169                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->pos=pReadPointAndSize->pos;
170                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->size=pReadPointAndSize->size;
171            }
172            *pReadPointAndSize=PointAndSize;
173            DrawRadWindow(WndNum,pWindowInfo);
174            SetStatusText(NULL);
175
176            //サポートダイアログの内容をセット
177            SetSupportDlgData( WndNum, *pWindowInfo );
178            break;
179        case RAD_UNDO_IMAGESTATE:
180            {
181                ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)pUndoState->lpdwData[pUndoState->NowPos];
182
183                ActiveBasic::PM::ImageReferenceType::EnumType tempType = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.type;
184                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.type = pImageCtrlInfo->type;
185                pImageCtrlInfo->type = tempType;
186
187                std::string tempPath = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.path;
188                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.path = pImageCtrlInfo->path;
189                pImageCtrlInfo->path = tempPath;
190
191                if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
192                    ChangePropertyWindow(WndNum,WndInfoNum);
193                DrawRadWindow(WndNum,pWindowInfo);
194            }
195            break;
196        case RAD_UNDO_TYPE:
197            dw=pWindowInfo->type;
198            pWindowInfo->type=pUndoState->lpdwData[pUndoState->NowPos];
199            pUndoState->lpdwData[pUndoState->NowPos]=dw;
200            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
201                ChangePropertyWindow(WndNum,WndInfoNum);
202            break;
203    }
204
205    projectInfo.ModifyOfMaterial=1;
206
207    ResetState_UndoMenu();
208}
209void Rad_RedoCommand(int WndNum){
210    extern HINSTANCE hInst;
211    extern MDIINFO MdiInfo[MAX_WNDNUM];
212    DWORD dw;
213    char *temporary;
214    RAD_UNDOSTATE *pUndoState;
215    ActiveBasic::PM::ChildWindowInfo *pChildInfo;
216    RECT rect;
217
218    pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
219    if(!pUndoState->Command[pUndoState->NowPos]){
220        MessageBeep(0);
221        return;
222    }
223
224    ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
225    int WndInfoNum = GetWndInfoNum(MdiInfo[WndNum].path);
226    switch(pUndoState->Command[pUndoState->NowPos]){
227        case RAD_UNDO_INSERTITEM:
228            pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)pUndoState->lpdwData[pUndoState->NowPos];
229            rect.left=pChildInfo->pos.x;
230            rect.top=pChildInfo->pos.y;
231            rect.right=pChildInfo->pos.x+pChildInfo->size.cx;
232            rect.bottom=pChildInfo->pos.y+pChildInfo->size.cy;
233            InsertDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],
234                &pChildInfo->pos,&pChildInfo->size,
235                pChildInfo->GetName().c_str(),pChildInfo->GetCaption().c_str(),pChildInfo->GetStyle(),pChildInfo->GetExStyle(),pChildInfo->Control,pChildInfo->image.type,pChildInfo->image.path.c_str(),0);
236            break;
237        case RAD_UNDO_DELETEITEM:
238            DeleteDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],0);
239            MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=-1;
240            break;
241        case RAD_UNDO_NAME:
242            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
243                RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
244
245                std::string tempStr = pWindowInfo->GetName();
246                pWindowInfo->SetName( names->name );
247                names->name = tempStr;
248
249                GlobalFree(MdiInfo[WndNum].path);
250                MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,pWindowInfo->GetName().size()+1);
251                lstrcpy(MdiInfo[WndNum].path,pWindowInfo->GetName().c_str());
252
253                tempStr = pWindowInfo->GetHandleName();
254                pWindowInfo->SetHandleName( names->HandleName );
255                names->HandleName = tempStr;
256
257                temporary=pWindowInfo->CallBackName;
258                pWindowInfo->CallBackName=names->CallBackName;
259                names->CallBackName=temporary;
260            }
261            else{
262                std::string tempStr = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetName();
263                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetName( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
264                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
265                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
266            }
267            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
268                ChangePropertyWindow(WndNum,WndInfoNum);
269            break;
270        case RAD_UNDO_CAPTION:
271            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
272                std::string tempStr = pWindowInfo->GetCaption();
273                pWindowInfo->SetCaption( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
274                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
275                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
276            }
277            else{
278                std::string tempStr = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetCaption();
279                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetCaption( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
280                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
281                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
282            }
283            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
284                ChangePropertyWindow(WndNum,WndInfoNum);
285            DrawRadWindow(WndNum,pWindowInfo);
286            break;
287        case RAD_UNDO_FONT:
288            LOGFONT *pLogFont,lf;
289            pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
290            lf=pWindowInfo->LogFont;
291            pWindowInfo->LogFont=*pLogFont;
292            *pLogFont=lf;
293            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
294                ChangePropertyWindow(WndNum,WndInfoNum);
295            DrawRadWindow(WndNum,pWindowInfo);
296            break;
297        case RAD_UNDO_BGCOLOR:
298            {
299                int tempBgColor = pWindowInfo->GetBackgroundColor();
300                pWindowInfo->SetBackgroundColor( static_cast<int>(pUndoState->lpdwData[pUndoState->NowPos]) );
301                pUndoState->lpdwData[pUndoState->NowPos] = static_cast<DWORD>(tempBgColor);
302            }
303            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
304                ChangePropertyWindow(WndNum,WndInfoNum);
305            DrawRadWindow(WndNum,pWindowInfo);
306            break;
307        case RAD_UNDO_WINDOWMENU:
308            {
309                std::string tempMenuIdName = pWindowInfo->GetMenuIdName();
310                pWindowInfo->SetMenuIdName( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
311                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
312                pUndoState->lpdwData[pUndoState->NowPos] = (DWORD)( new std::string( tempMenuIdName ) );
313                if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
314                {
315                    ChangePropertyWindow(WndNum,WndInfoNum);
316                }
317                DrawRadWindow(WndNum,pWindowInfo);
318                break;
319            }
320        case RAD_UNDO_ICONRES:
321            {
322                std::string tempStr = pWindowInfo->GetIconResourceName();
323                pWindowInfo->SetIconResourceName( *(std::string *)pUndoState->lpdwData[pUndoState->NowPos] );
324                delete (std::string *)pUndoState->lpdwData[pUndoState->NowPos];
325                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)( new std::string( tempStr ) );
326            }
327            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
328                ChangePropertyWindow(WndNum,WndInfoNum);
329            break;
330        case RAD_UNDO_STYLE:
331            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
332                dw=pWindowInfo->GetStyle();
333                pWindowInfo->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
334                pUndoState->lpdwData[pUndoState->NowPos]=dw;
335            }
336            else{
337                dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetStyle();
338                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
339                pUndoState->lpdwData[pUndoState->NowPos]=dw;
340            }
341            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
342                ChangePropertyWindow(WndNum,WndInfoNum);
343            DrawRadWindow(WndNum,pWindowInfo);
344            break;
345        case RAD_UNDO_EXSTYLE:
346            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
347                dw=pWindowInfo->GetExStyle();
348                pWindowInfo->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
349                pUndoState->lpdwData[pUndoState->NowPos]=dw;
350            }
351            else{
352                dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetExStyle();
353                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
354                pUndoState->lpdwData[pUndoState->NowPos]=dw;
355            }
356            DrawRadWindow(WndNum,pWindowInfo);
357            break;
358        case RAD_UNDO_POSITION:
359            POINTANDSIZE PointAndSize,*pReadPointAndSize;
360            pReadPointAndSize=(POINTANDSIZE *)pUndoState->lpdwData[pUndoState->NowPos];
361            if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
362                PointAndSize.size=pWindowInfo->size;
363                pWindowInfo->size=pReadPointAndSize->size;
364            }
365            else{
366                PointAndSize.pos=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->pos;
367                PointAndSize.size=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->size;
368                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->pos=pReadPointAndSize->pos;
369                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->size=pReadPointAndSize->size;
370            }
371            *pReadPointAndSize=PointAndSize;
372            DrawRadWindow(WndNum,pWindowInfo);
373            SetStatusText(NULL);
374
375            //サポートダイアログの内容をセット
376            SetSupportDlgData( WndNum, *pWindowInfo );
377            break;
378        case RAD_UNDO_IMAGESTATE:
379            {
380                ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)pUndoState->lpdwData[pUndoState->NowPos];
381
382                ActiveBasic::PM::ImageReferenceType::EnumType tempType = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.type;
383                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.type = pImageCtrlInfo->type;
384                pImageCtrlInfo->type = tempType;
385
386                std::string tempPath = pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.path;
387                pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->image.path = pImageCtrlInfo->path;
388                pImageCtrlInfo->path = tempPath;
389
390                if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
391                    ChangePropertyWindow(WndNum,WndInfoNum);
392                DrawRadWindow(WndNum,pWindowInfo);
393                break;
394            }
395        case RAD_UNDO_TYPE:
396            dw=pWindowInfo->type;
397            pWindowInfo->type=pUndoState->lpdwData[pUndoState->NowPos];
398            pUndoState->lpdwData[pUndoState->NowPos]=dw;
399            if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
400                ChangePropertyWindow(WndNum,WndInfoNum);
401            break;
402    }
403
404    pUndoState->NowPos++;
405    if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
406
407    projectInfo.ModifyOfMaterial=1;
408
409    ResetState_UndoMenu();
410}
411void Rad_DeleteUndoData(int WndNum,int pos){
412    extern HANDLE hHeap;
413    extern MDIINFO MdiInfo[MAX_WNDNUM];
414    RAD_UNDOSTATE *pUndoState;
415
416    pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
417    switch(pUndoState->Command[pos]){
418        case RAD_UNDO_INSERTITEM:
419        case RAD_UNDO_DELETEITEM:
420            ActiveBasic::PM::ChildWindowInfo *pChildInfo;
421            pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)pUndoState->lpdwData[pos];
422            delete pChildInfo;
423            break;
424        case RAD_UNDO_NAME:
425            if(pUndoState->SelectItemNum[pos]==SELECT_WINDOW){
426                RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pos];
427                HeapDefaultFree(names->CallBackName);
428                delete names;
429            }
430            else
431            {
432                std::string *pTempStr = (std::string *)pUndoState->lpdwData[pos];
433                delete pTempStr;
434            }
435            break;
436        case RAD_UNDO_CAPTION:
437            {
438                std::string *pTempStr = (std::string *)pUndoState->lpdwData[pos];
439                delete pTempStr;
440            }
441            break;
442        case RAD_UNDO_FONT:
443            HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
444            break;
445        case RAD_UNDO_WINDOWMENU:
446            {
447                std::string *pTempMenuId = (std::string *)pUndoState->lpdwData[pos];
448                delete pTempMenuId;
449            }
450            break;
451        case RAD_UNDO_ICONRES:
452            {
453                std::string *pTempStr = (std::string *)pUndoState->lpdwData[pos];
454                delete pTempStr;
455            }
456            break;
457        case RAD_UNDO_POSITION:
458            HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
459            break;
460        case RAD_UNDO_IMAGESTATE:
461            {
462                ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)pUndoState->lpdwData[pUndoState->NowPos];
463
464                delete pImageCtrlInfo;
465
466                break;
467            }
468    }
469    pUndoState->Command[pos]=0;
470}
471void Rad_NoticeChanging(int WndNum,int Command,int SelectItemNum,DWORD dwData){
472    extern HANDLE hHeap;
473    extern MDIINFO MdiInfo[MAX_WNDNUM];
474    int i;
475    RAD_UNDOSTATE *pUndoState;
476
477    pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
478
479    //Redoされた場合の不要なデータを削除する
480    for(i=pUndoState->NowPos;;i++){
481        if(i==MAX_UNDONUM) i=0;
482        if(pUndoState->Command[i]==0) break;
483        Rad_DeleteUndoData(WndNum,i);
484    }
485
486    pUndoState->Command[pUndoState->NowPos]=Command;
487    pUndoState->SelectItemNum[pUndoState->NowPos]=SelectItemNum;
488    switch(Command){
489        case RAD_UNDO_INSERTITEM:
490        case RAD_UNDO_DELETEITEM:
491            ActiveBasic::PM::ChildWindowInfo *pChildInfo,*pSaveChildInfo;
492            pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)dwData;
493            pSaveChildInfo = new ActiveBasic::PM::ChildWindowInfo();
494            pSaveChildInfo->SetName( pChildInfo->GetName() );
495            pSaveChildInfo->pos=pChildInfo->pos;
496            pSaveChildInfo->size=pChildInfo->size;
497            pSaveChildInfo->SetCaption( pChildInfo->GetCaption() );
498            pSaveChildInfo->SetStyle( pChildInfo->GetStyle() );
499            pSaveChildInfo->SetExStyle( pChildInfo->GetExStyle() );
500            pSaveChildInfo->Control=pChildInfo->Control;
501            if(pChildInfo->Control==CT_IMAGEBOX){
502                //イメージ ボックスの場合
503                pSaveChildInfo->image = pChildInfo->image;
504            }
505            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveChildInfo;
506            break;
507        case RAD_UNDO_NAME:
508            if(SelectItemNum==SELECT_WINDOW){
509                RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)dwData;
510                RAD_UNDOSTATE_NAME *SaveNames = new RAD_UNDOSTATE_NAME();
511                SaveNames->name = names->name;
512                SaveNames->HandleName = names->HandleName;
513                SaveNames->CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(names->CallBackName)+1);
514                lstrcpy(SaveNames->CallBackName,names->CallBackName);
515                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)SaveNames;
516            }
517            else{
518                std::string *pTempStr = new std::string( *(std::string *)dwData );
519                pUndoState->lpdwData[pUndoState->NowPos] = (DWORD)pTempStr;
520            }
521            break;
522        case RAD_UNDO_CAPTION:
523            {
524                std::string *pTempStr = new std::string( *(std::string *)dwData );
525                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pTempStr;
526            }
527            break;
528        case RAD_UNDO_FONT:
529            LOGFONT *pLogFont,*pSaveLogFont;
530            pLogFont=(LOGFONT *)dwData;
531            pSaveLogFont=(LOGFONT *)HeapAlloc(hHeap,0,sizeof(LOGFONT));
532            *pSaveLogFont=*pLogFont;
533            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveLogFont;
534            break;
535        case RAD_UNDO_BGCOLOR:
536            pUndoState->lpdwData[pUndoState->NowPos]=dwData;
537            break;
538        case RAD_UNDO_WINDOWMENU:
539            {
540                std::string *pTempStr = new std::string( *(std::string *)dwData );
541                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pTempStr;
542            }
543            break;
544        case RAD_UNDO_ICONRES:
545            {
546                std::string *pTempStr = new std::string( *(std::string *)dwData );
547                pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pTempStr;
548            }
549            break;
550        case RAD_UNDO_STYLE:
551        case RAD_UNDO_EXSTYLE:
552            pUndoState->lpdwData[pUndoState->NowPos]=dwData;
553            break;
554        case RAD_UNDO_POSITION:
555            POINTANDSIZE *pPointAndSize,*pSavePointAndSize;
556            pPointAndSize=(POINTANDSIZE *)dwData;
557            pSavePointAndSize=(POINTANDSIZE *)HeapAlloc(hHeap,0,sizeof(POINTANDSIZE));
558            pSavePointAndSize->pos=pPointAndSize->pos;
559            pSavePointAndSize->size=pPointAndSize->size;
560            pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSavePointAndSize;
561            break;
562        case RAD_UNDO_IMAGESTATE:
563            {
564                ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)dwData;
565                ActiveBasic::PM::ImageControlInfo *pSaveImageCtrlInfo = new ActiveBasic::PM::ImageControlInfo( *pImageCtrlInfo );
566                pUndoState->lpdwData[pUndoState->NowPos] = (DWORD)( new ActiveBasic::PM::ImageControlInfo( *pImageCtrlInfo ) );
567                break;
568            }
569        case RAD_UNDO_TYPE:
570            pUndoState->lpdwData[pUndoState->NowPos]=dwData;
571            break;
572    }
573
574    pUndoState->NowPos++;
575    if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
576    if(pUndoState->Command[pUndoState->NowPos]){
577        //一番古い情報を切り捨てる
578        Rad_DeleteUndoData(WndNum,pUndoState->NowPos);
579    }
580
581    projectInfo.ModifyOfMaterial=1;
582
583    ResetState_UndoMenu();
584}
Note: See TracBrowser for help on using the repository browser.