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, 16 years ago

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

File size: 23.2 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]3#include "Common.h"
4
5void Rad_UndoCommand(int WndNum){
6 extern HINSTANCE hInst;
[609]7 int i;
[3]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
[624]20 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
[609]21 int WndInfoNum = GetWndInfoNum(MdiInfo[WndNum].path);
[3]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:
[624]28 ActiveBasic::PM::ChildWindowInfo *pChildInfo;
[3]29 RECT rect;
[624]30 pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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,
[624]37 pChildInfo->GetName().c_str(),pChildInfo->GetCaption().c_str(),pChildInfo->GetStyle(),pChildInfo->GetExStyle(),pChildInfo->Control,pChildInfo->image.type,pChildInfo->image.path.c_str(),0);
[3]38 break;
39 case RAD_UNDO_NAME:
40 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
[617]41 RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
[3]42
[617]43 std::string tempStr = pWindowInfo->GetName();
44 pWindowInfo->SetName( names->name );
45 names->name = tempStr;
46
[625]47 MdiInfo[WndNum].path = pWindowInfo->GetName();
[3]48 }
49 else{
[624]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 ) );
[3]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){
[624]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 ) );
[3]64 }
65 else{
[624]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 ) );
[3]70 }
71 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
72 ChangePropertyWindow(WndNum,WndInfoNum);
[609]73 DrawRadWindow(WndNum,pWindowInfo);
[3]74 break;
75 case RAD_UNDO_FONT:
76 LOGFONT *pLogFont,lf;
77 pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
[609]78 lf=pWindowInfo->LogFont;
79 pWindowInfo->LogFont=*pLogFont;
[3]80 *pLogFont=lf;
81 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
82 ChangePropertyWindow(WndNum,WndInfoNum);
[609]83 DrawRadWindow(WndNum,pWindowInfo);
[3]84 break;
85 case RAD_UNDO_BGCOLOR:
[624]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 }
[3]96 case RAD_UNDO_WINDOWMENU:
[624]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 }
[3]109 case RAD_UNDO_ICONRES:
[624]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 }
[3]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){
[624]121 dw=pWindowInfo->GetStyle();
122 pWindowInfo->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]123 pUndoState->lpdwData[pUndoState->NowPos]=dw;
124 }
125 else{
[624]126 dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetStyle();
127 pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]128 pUndoState->lpdwData[pUndoState->NowPos]=dw;
129 }
130 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
131 ChangePropertyWindow(WndNum,WndInfoNum);
[609]132 DrawRadWindow(WndNum,pWindowInfo);
[3]133 break;
134 case RAD_UNDO_EXSTYLE:
135 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
[624]136 dw=pWindowInfo->GetExStyle();
137 pWindowInfo->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]138 pUndoState->lpdwData[pUndoState->NowPos]=dw;
139 }
140 else{
[624]141 dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetExStyle();
142 pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]143 pUndoState->lpdwData[pUndoState->NowPos]=dw;
144 }
[609]145 DrawRadWindow(WndNum,pWindowInfo);
[3]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){
[609]151 PointAndSize.size=pWindowInfo->size;
152 pWindowInfo->size=pReadPointAndSize->size;
[3]153 }
154 else{
[616]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;
[3]159 }
160 *pReadPointAndSize=PointAndSize;
[609]161 DrawRadWindow(WndNum,pWindowInfo);
[3]162 SetStatusText(NULL);
163
164 //サポートダイアログの内容をセット
[612]165 SetSupportDlgData( WndNum, *pWindowInfo );
[3]166 break;
167 case RAD_UNDO_IMAGESTATE:
[624]168 {
169 ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)pUndoState->lpdwData[pUndoState->NowPos];
[3]170
[624]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;
[3]174
[624]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;
[3]178
[624]179 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
180 ChangePropertyWindow(WndNum,WndInfoNum);
181 DrawRadWindow(WndNum,pWindowInfo);
182 }
[3]183 break;
184 case RAD_UNDO_TYPE:
[625]185 dw=(DWORD)pWindowInfo->GetType();
186 pWindowInfo->SetType( (ActiveBasic::PM::WindowType::EnumType)pUndoState->lpdwData[pUndoState->NowPos] );
[3]187 pUndoState->lpdwData[pUndoState->NowPos]=dw;
[625]188
[3]189 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
190 ChangePropertyWindow(WndNum,WndInfoNum);
191 break;
192 }
193
[618]194 projectInfo.ModifyOfMaterial=1;
[3]195
196 ResetState_UndoMenu();
197}
198void Rad_RedoCommand(int WndNum){
199 extern HINSTANCE hInst;
200 DWORD dw;
201 RAD_UNDOSTATE *pUndoState;
[624]202 ActiveBasic::PM::ChildWindowInfo *pChildInfo;
[3]203 RECT rect;
204
205 pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
206 if(!pUndoState->Command[pUndoState->NowPos]){
207 MessageBeep(0);
208 return;
209 }
210
[624]211 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
[609]212 int WndInfoNum = GetWndInfoNum(MdiInfo[WndNum].path);
[3]213 switch(pUndoState->Command[pUndoState->NowPos]){
214 case RAD_UNDO_INSERTITEM:
[624]215 pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)pUndoState->lpdwData[pUndoState->NowPos];
[3]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,
[624]222 pChildInfo->GetName().c_str(),pChildInfo->GetCaption().c_str(),pChildInfo->GetStyle(),pChildInfo->GetExStyle(),pChildInfo->Control,pChildInfo->image.type,pChildInfo->image.path.c_str(),0);
[3]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){
[617]230 RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
[3]231
[617]232 std::string tempStr = pWindowInfo->GetName();
233 pWindowInfo->SetName( names->name );
234 names->name = tempStr;
235
[625]236 MdiInfo[WndNum].path = pWindowInfo->GetName();
[3]237 }
238 else{
[624]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 ) );
[3]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){
[624]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 ) );
[3]253 }
254 else{
[624]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 ) );
[3]259 }
260 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
261 ChangePropertyWindow(WndNum,WndInfoNum);
[609]262 DrawRadWindow(WndNum,pWindowInfo);
[3]263 break;
264 case RAD_UNDO_FONT:
265 LOGFONT *pLogFont,lf;
266 pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
[609]267 lf=pWindowInfo->LogFont;
268 pWindowInfo->LogFont=*pLogFont;
[3]269 *pLogFont=lf;
270 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
271 ChangePropertyWindow(WndNum,WndInfoNum);
[609]272 DrawRadWindow(WndNum,pWindowInfo);
[3]273 break;
274 case RAD_UNDO_BGCOLOR:
[624]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 }
[3]280 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
281 ChangePropertyWindow(WndNum,WndInfoNum);
[609]282 DrawRadWindow(WndNum,pWindowInfo);
[3]283 break;
284 case RAD_UNDO_WINDOWMENU:
[624]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 }
[3]297 case RAD_UNDO_ICONRES:
[624]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 }
[3]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){
[624]309 dw=pWindowInfo->GetStyle();
310 pWindowInfo->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]311 pUndoState->lpdwData[pUndoState->NowPos]=dw;
312 }
313 else{
[624]314 dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetStyle();
315 pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]316 pUndoState->lpdwData[pUndoState->NowPos]=dw;
317 }
318 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
319 ChangePropertyWindow(WndNum,WndInfoNum);
[609]320 DrawRadWindow(WndNum,pWindowInfo);
[3]321 break;
322 case RAD_UNDO_EXSTYLE:
323 if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
[624]324 dw=pWindowInfo->GetExStyle();
325 pWindowInfo->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]326 pUndoState->lpdwData[pUndoState->NowPos]=dw;
327 }
328 else{
[624]329 dw=pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->GetExStyle();
330 pWindowInfo->childWindowInfos[pUndoState->SelectItemNum[pUndoState->NowPos]]->SetExStyle( pUndoState->lpdwData[pUndoState->NowPos] );
[3]331 pUndoState->lpdwData[pUndoState->NowPos]=dw;
332 }
[609]333 DrawRadWindow(WndNum,pWindowInfo);
[3]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){
[609]339 PointAndSize.size=pWindowInfo->size;
340 pWindowInfo->size=pReadPointAndSize->size;
[3]341 }
342 else{
[616]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;
[3]347 }
348 *pReadPointAndSize=PointAndSize;
[609]349 DrawRadWindow(WndNum,pWindowInfo);
[3]350 SetStatusText(NULL);
351
352 //サポートダイアログの内容をセット
[612]353 SetSupportDlgData( WndNum, *pWindowInfo );
[3]354 break;
355 case RAD_UNDO_IMAGESTATE:
[624]356 {
357 ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)pUndoState->lpdwData[pUndoState->NowPos];
[3]358
[624]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;
[3]362
[624]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;
[3]366
[624]367 if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
368 ChangePropertyWindow(WndNum,WndInfoNum);
369 DrawRadWindow(WndNum,pWindowInfo);
370 break;
371 }
[3]372 case RAD_UNDO_TYPE:
[625]373 dw=(DWORD)pWindowInfo->GetType();
374 pWindowInfo->SetType( (ActiveBasic::PM::WindowType::EnumType)pUndoState->lpdwData[pUndoState->NowPos] );
[3]375 pUndoState->lpdwData[pUndoState->NowPos]=dw;
[625]376
[3]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
[618]385 projectInfo.ModifyOfMaterial=1;
[3]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:
[624]397 ActiveBasic::PM::ChildWindowInfo *pChildInfo;
398 pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)pUndoState->lpdwData[pos];
399 delete pChildInfo;
[3]400 break;
401 case RAD_UNDO_NAME:
402 if(pUndoState->SelectItemNum[pos]==SELECT_WINDOW){
[617]403 RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pos];
404 delete names;
[3]405 }
[624]406 else
407 {
408 std::string *pTempStr = (std::string *)pUndoState->lpdwData[pos];
409 delete pTempStr;
410 }
[3]411 break;
412 case RAD_UNDO_CAPTION:
[624]413 {
414 std::string *pTempStr = (std::string *)pUndoState->lpdwData[pos];
415 delete pTempStr;
416 }
[3]417 break;
418 case RAD_UNDO_FONT:
419 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
420 break;
421 case RAD_UNDO_WINDOWMENU:
[624]422 {
423 std::string *pTempMenuId = (std::string *)pUndoState->lpdwData[pos];
424 delete pTempMenuId;
425 }
[3]426 break;
427 case RAD_UNDO_ICONRES:
[624]428 {
429 std::string *pTempStr = (std::string *)pUndoState->lpdwData[pos];
430 delete pTempStr;
431 }
[3]432 break;
433 case RAD_UNDO_POSITION:
434 HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
435 break;
436 case RAD_UNDO_IMAGESTATE:
[624]437 {
438 ActiveBasic::PM::ImageControlInfo *pImageCtrlInfo = (ActiveBasic::PM::ImageControlInfo *)pUndoState->lpdwData[pUndoState->NowPos];
439
440 delete pImageCtrlInfo;
441
442 break;
443 }
[3]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:
[624]466 ActiveBasic::PM::ChildWindowInfo *pChildInfo,*pSaveChildInfo;
467 pChildInfo=(ActiveBasic::PM::ChildWindowInfo *)dwData;
468 pSaveChildInfo = new ActiveBasic::PM::ChildWindowInfo();
469 pSaveChildInfo->SetName( pChildInfo->GetName() );
[3]470 pSaveChildInfo->pos=pChildInfo->pos;
471 pSaveChildInfo->size=pChildInfo->size;
[624]472 pSaveChildInfo->SetCaption( pChildInfo->GetCaption() );
473 pSaveChildInfo->SetStyle( pChildInfo->GetStyle() );
474 pSaveChildInfo->SetExStyle( pChildInfo->GetExStyle() );
[3]475 pSaveChildInfo->Control=pChildInfo->Control;
476 if(pChildInfo->Control==CT_IMAGEBOX){
477 //イメージ ボックスの場合
[624]478 pSaveChildInfo->image = pChildInfo->image;
[3]479 }
480 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveChildInfo;
481 break;
482 case RAD_UNDO_NAME:
483 if(SelectItemNum==SELECT_WINDOW){
[617]484 RAD_UNDOSTATE_NAME *names = (RAD_UNDOSTATE_NAME *)dwData;
485 RAD_UNDOSTATE_NAME *SaveNames = new RAD_UNDOSTATE_NAME();
486 SaveNames->name = names->name;
[3]487 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)SaveNames;
488 }
489 else{
[624]490 std::string *pTempStr = new std::string( *(std::string *)dwData );
491 pUndoState->lpdwData[pUndoState->NowPos] = (DWORD)pTempStr;
[3]492 }
493 break;
494 case RAD_UNDO_CAPTION:
[624]495 {
496 std::string *pTempStr = new std::string( *(std::string *)dwData );
497 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pTempStr;
498 }
[3]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:
[624]511 {
512 std::string *pTempStr = new std::string( *(std::string *)dwData );
513 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pTempStr;
514 }
515 break;
[3]516 case RAD_UNDO_ICONRES:
[624]517 {
518 std::string *pTempStr = new std::string( *(std::string *)dwData );
519 pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pTempStr;
[3]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:
[624]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 }
[3]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
[618]553 projectInfo.ModifyOfMaterial=1;
[3]554
555 ResetState_UndoMenu();
556}
Note: See TracBrowser for help on using the repository browser.