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

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

・WindowInfoクラスをリファクタリング
・MdiInfoを単純配列からvectorに変更した。

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