source: dev/trunk/ab5.0/abdev/abdev/src/MainFrame.cpp@ 619

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

Projectクラスをリファクタリング中。

File size: 41.1 KB
Line 
1#include "stdafx.h"
2
3using namespace ActiveBasic::IDE;
4using namespace ActiveBasic::IDE::WindowComponents;
5
6LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
7void SetupWindow(HWND hwnd);
8void ResetTextEditFont(HWND hwnd);
9
10void MainFrame::OpenWebBrowser( const std::string &url )
11{
12 ShellExecute(m_hWnd,"open",url.c_str(),"",NULL,SW_SHOWNORMAL);
13}
14
15void MainFrame::OpenExplorer( const std::string &path )
16{
17 ShellExecute(m_hWnd,"explore",path.c_str(),NULL,NULL,SW_SHOWNORMAL);
18}
19
20::LRESULT MainFrame::OnCreate( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
21{
22 // ウィンドウエリアマネージャに親ウィンドウを登録
23 wam.SetParentWnd( m_hWnd );
24
25 RECT rect;
26 GetClientRect( &rect );
27
28 // MDIベースを作成
29 mdiWindow = new MdiWindow();
30 mdiWindow->Create(
31 m_hWnd,
32 rect,
33 NULL,
34 WS_CHILD
35 );
36 wam.AddMdiWindow( mdiWindow );
37
38
39
40
41
42 extern HWND hOwner;
43 hOwner = m_hWnd;
44 extern WNDPROC oldMainFrameWndProc;
45 oldMainFrameWndProc = (WNDPROC)::GetWindowLong( hOwner, GWL_WNDPROC );
46 ::SetWindowLong( hOwner, GWL_WNDPROC, (LONG)WindowFunc );
47
48 SetupWindow(hOwner);
49
50 //テキストエディタフォント設定
51 ResetTextEditFont(hOwner);
52
53
54
55 return 0;
56}
57
58void MainFrame::OnSize(UINT nType, CSize size)
59{
60 //mdiWindow->MoveWindow( 0, 0, size.cx, size.cy );
61}
62
63BOOL MainFrame::OnQueryEndSession(UINT nSource, UINT uLogOff)
64{
65 OnClose();
66
67 return TRUE;
68}
69
70void MainFrame::OnClose()
71{
72 extern BOOL bSearchingClasses;
73 if(bSearchingClasses){
74 pobj_ClassTreeView->bCloseSwitch=1;
75 return;
76 }
77
78 //コンパイラビューを閉じる
79 extern HWND hCompileView;
80 if( hCompileView && ::IsWindow( hCompileView ) )
81 {
82 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
83 }
84
85 //次回起動時にMDIウィンドウを最大化させるかを判定
86 HWND hChild=::GetWindow(hClient,GW_CHILD);
87 pobj_nv->bMDIZoomed=::IsZoomed(hChild);
88
89 //プロジェクトを閉じる
90 if( projectInfo.IsOpened() ){
91 if(!projectInfo.Close()) return;
92 }
93
94 //MDIウィンドウの保存確認
95 hChild=::GetWindow(hClient,GW_CHILD);
96 while(hChild){
97 if(!DocumentModifyCheck(hChild)) return;
98 hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
99 }
100
101
102 KillTimer(ID_TIMER_BACKUP);
103
104
105 //ProjectViewの位置を保存、ProjectViewを破棄
106 extern HWND hProjectView;
107 extern HWND hProjectView_ToolWindow;
108 ::GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
109 ::DestroyWindow(hProjectView);
110 ::DestroyWindow(hProjectView_ToolWindow);
111
112 //Rebarの位置を保存、Rebarを破棄
113 delete pobj_Rebar;
114 pobj_Rebar=0;
115
116 //タブコントロールを破棄
117 delete pobj_MainTab;
118 pobj_MainTab=0;
119
120 //SideWebを破棄
121 delete pobj_SideWeb;
122 pobj_SideWeb=0;
123
124 //メインウィンドウの最大化有無、座標を保存
125 if(IsZoomed()) pobj_nv->bWindowMax=1;
126 else if(!IsIconic()){
127 pobj_nv->bWindowMax=0;
128 GetWindowRect(&pobj_nv->StartupWindowRect);
129 }
130
131 hChild=::GetWindow(hClient,GW_CHILD);
132 while(hChild){
133 CloseDocWindow(GetWndNum(hChild));
134 ::DestroyWindow(hChild);
135 hChild=::GetWindow(hClient,GW_CHILD);
136 }
137
138 EndProjectEditor(); //ProjectEditorの情報を保存
139
140 //エディタ用フォントを破棄
141 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
142 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
143 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
144
145 DestroyWindow();
146}
147void MainFrame::OnDestroy()
148{
149 mdiWindow->DestroyWindow();
150 delete mdiWindow;
151
152 ::PostQuitMessage( 0 );
153}
154
155void backup(void *dummy);
156void MainFrame::OnTimer( UINT_PTR id )
157{
158 switch( id )
159 {
160 case ID_TIMER_BACKUP:
161 _beginthread( backup, 0, 0 );
162 break;
163
164#ifndef THETEXT
165 case ID_DEBUGSAFTY:
166 {
167 //BasicCompiler.exeが強制終了しているかどうかを検証
168 extern CDebugger *pobj_Debugger;
169 pobj_Debugger->SaftyCheck();
170 break;
171 }
172#endif
173 }
174}
175
176void ResetState_EditMenu(void);
177void MainFrame::OnDrawClipboard()
178{
179 ResetState_EditMenu();
180}
181
182void MenuAdvice(WPARAM msg);
183void MainFrame::OnMenuSelect( UINT nItemID, UINT nFlags, HMENU menu )
184{
185 MenuAdvice( nItemID );
186}
187
188void MainFrame::OnInitMenu( HMENU menu )
189{
190 extern CNonVolatile *pobj_nv;
191 extern CSubMenuEx *pobj_FileHistoryMenu;
192 pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
193#ifndef THETEXT
194 extern CSubMenuEx *pobj_ProjectHistoryMenu;
195 pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
196#endif
197}
198
199void MainFrame::OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMI )
200{
201 if(lpMI->CtlType==ODT_MENU){
202 SIZE size;
203 CMenuItemData *pobj_MenuItemData;
204 pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
205 if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
206 //メインメニューの親アイテム
207 pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
208 lpMI->itemWidth = size.cx;
209 lpMI->itemHeight = size.cy;
210 }
211 else{
212 //メインメニューにぶらさがるサブメニュー
213 pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
214 lpMI->itemWidth = size.cx;
215 lpMI->itemHeight = size.cy;
216 }
217 }
218}
219
220void MainFrame::OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )
221{
222 if(lpDrawItemStruct->CtlType==ODT_MENU){
223 if(!pobj_MainMenu) return;
224
225 CMenuItemData *pobj_MenuItemData;
226 pobj_MenuItemData=(CMenuItemData *)lpDrawItemStruct->itemData;
227 if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
228 //メインメニューの親アイテム
229 pobj_MainMenu->OwnerDrawMenu(lpDrawItemStruct->hDC,
230 &lpDrawItemStruct->rcItem,
231 (lpDrawItemStruct->itemState&ODS_SELECTED)!=0,
232 pobj_MenuItemData->item_index);
233 }
234 else{
235 //メインメニューにぶらさがるサブメニュー
236 pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
237 lpDrawItemStruct->hDC,
238 &lpDrawItemStruct->rcItem,
239 (lpDrawItemStruct->itemState&ODS_SELECTED)!=0,
240 pobj_MenuItemData->item_index);
241 }
242 }
243}
244
245LRESULT MainFrame::OnNotify( int idCtrl, LPNMHDR pnmh )
246{
247 NMPGCALCSIZE *lpCalcSize;
248 NMPGSCROLL *lpScroll;
249
250 if(!pnmh) return 0;
251 LPTOOLTIPTEXT TipText=(LPTOOLTIPTEXT)pnmh;
252 if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
253
254 extern HWND hStandardToolbarPager;
255 extern HWND hDebuggerToolbarPager;
256 if(pobj_Rebar){
257 //レバーオブジェクトが存在するとき
258 if(pnmh->hwndFrom==pobj_Rebar->hRebar&&pnmh->code==RBN_HEIGHTCHANGE){
259 ResizeOwnerWnd();
260 return 0;
261 }
262 }
263 if(pnmh->hwndFrom==hStandardToolbarPager){
264 if(pnmh->code==PGN_CALCSIZE){
265 lpCalcSize=(LPNMPGCALCSIZE)pnmh;
266 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
267 lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
268 }
269 else if(pnmh->code==PGN_SCROLL){
270 lpScroll=(LPNMPGSCROLL)pnmh;
271 lpScroll->iScroll=20;
272 }
273 }
274 else if(pnmh->hwndFrom==hDebuggerToolbarPager){
275 if(pnmh->code==PGN_CALCSIZE){
276 lpCalcSize=(LPNMPGCALCSIZE)pnmh;
277 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
278 lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
279 }
280 else if(pnmh->code==PGN_SCROLL){
281 lpScroll=(LPNMPGSCROLL)pnmh;
282 lpScroll->iScroll=20;
283 }
284 }
285
286 if(pobj_MainTab){
287 if(pnmh->hwndFrom==pobj_MainTab->hTab){
288 if(pnmh->code==TCN_SELCHANGE)
289 pobj_MainTab->SelChangeEvent();
290
291 if(pnmh->code==NM_RCLICK){
292
293 TCHITTESTINFO tcHitTest;
294 GetCursorPos(&tcHitTest.pt);
295 ::ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
296 int index = TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
297 if( index == -1 ) return 0;
298
299 TabCtrl_SetCurSel(pobj_MainTab->hTab,index);
300
301 pobj_MainTab->SelChangeEvent();
302
303
304 /////////////////////
305 // メニューを表示
306 /////////////////////
307
308 HWND hChild=::GetWindow(hClient,GW_CHILD);
309 int WndNum=GetWndNum(hChild);
310
311 //保存コマンドの文字列をセット
312 char temporary[1024], temp2[1024];
313 MENUITEMINFO mii;
314 mii.cbSize=sizeof(MENUITEMINFO);
315 mii.fMask=MIIM_TYPE;
316 mii.dwTypeData=temporary;
317 mii.fType=MFT_STRING;
318 if(MdiInfo[WndNum].path[0]){
319 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
320 lstrcat(temporary,temp2);
321 lstrcat(temporary," を保存(&S)");
322 }
323 else{
324 lstrcpy(temporary,"保存(&S)");
325 }
326 extern HMENU hTabMenu;
327 SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
328
329 /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
330 コマンドを場合によって無効化にする */
331 if(MdiInfo[WndNum].path[0]){
332 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
333 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
334 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
335 }
336 else{
337 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
338 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
339 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
340 }
341
342 POINT MousePos;
343 GetCursorPos(&MousePos);
344 TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
345 }
346 }
347 }
348 if(pobj_SideWeb){
349 if(pnmh->hwndFrom==pobj_SideWeb->hTab&&pnmh->code==TCN_SELCHANGE){
350 pobj_SideWeb->SelChangeEvent();
351 }
352 }
353
354 return 0;
355}
356
357void MainFrame::OnDropFiles( HDROP hDropInfo )
358{
359 int max = DragQueryFile(hDropInfo,-1,0,0);
360 for(int i=0;i<max;i++){
361 char temporary[1024];
362 DragQueryFile(hDropInfo,i,temporary,MAX_PATH);
363 OpenFileWithExtension(temporary);
364 }
365 DragFinish(hDropInfo);
366}
367
368::LRESULT MainFrame::OnShowSourceLine( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
369{
370 char temporary[1024];
371
372 //エラー部分を反転表示
373 DWORD AccBytes;
374 HANDLE fh;
375 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
376 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
377 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
378 CloseHandle(fh);
379 temporary[AccBytes]=0;
380 HWND hChild=::GetWindow(hClient,GW_CHILD);
381 int WndNum = -1;
382 while(hChild){
383 WndNum=GetWndNum(hChild);
384 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
385 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
386 }
387 hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
388 }
389 if(!hChild){
390 hChild=OpenFileWithExtension(temporary);
391 WndNum=GetWndNum(hChild);
392 }
393
394 if(WndNum==-1) return 0;
395
396 //ウィンドウを最前面に表示
397 ::BringWindowToTop(hChild);
398 ::UpdateWindow(hChild);
399
400 char *pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
401
402 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
403 int i,i2;
404 for(i=0,i2=0;;i++){
405 if(i2>=(int)wParam) break;
406 if(pTemp[i]=='\0') break;
407 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
408 i++;
409 i2++;
410 }
411 }
412 POINT pos;
413 pos.x=i;
414
415 //行の終端インデックスを取得
416 for(;;i++){
417 if(pTemp[i]=='\0') break;
418 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
419 }
420 pos.y=i;
421
422 //行を選択する
423 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
424
425 return 0;
426}
427
428void MainFrame::OnCmdNew( UINT uNotifyCode, int nID, CWindow wndCtl )
429{
430
431#ifdef THETEXT
432 NewTextEditWindow(NULL,WNDTYPE_TEXT);
433 return;
434#else
435 int FileType;
436 BOOL bAddToProject;
437 char temporary[MAX_PATH];
438
439 FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,(DLGPROC)DlgNewFile);
440 if(FileType==-1) return;
441
442 if(FileType&0x00008000){
443 bAddToProject=1;
444 FileType&=0x0FFF;
445 extern char NewFileName[MAX_PATH];
446 lstrcpy(temporary,NewFileName);
447 if(!strstr(temporary,".")) lstrcat(temporary,".ab");
448 GetFullPath(temporary,projectInfo.dir);
449 }
450 else bAddToProject=0;
451
452 switch(FileType){
453 case FT_BASICPROGRAM: //Basicプログラム
454 case FT_SUBPROGRAM:
455 if(bAddToProject){
456 WriteBuffer(temporary,0,0);
457 NewTextEditWindow(temporary,WNDTYPE_BASIC);
458 Project_File_Insert(temporary);
459 }
460 else NewTextEditWindow(NULL,WNDTYPE_BASIC);
461 break;
462
463 case FT_PROJECT:
464 DlgNewProjectWizard(hOwner);
465 break;
466
467 case FT_TEXT:
468 NewTextEditWindow(NULL,WNDTYPE_TEXT);
469 break;
470
471 case FT_HTML:
472 NewTextEditWindow(NULL,WNDTYPE_HTML);
473 break;
474
475 case FT_ICON:
476 NewIconEditWindow(NULL);
477 break;
478 }
479#endif
480}
481
482void MainFrame::OnCmdOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
483{
484 //"ファイルを指定してください"
485 extern LPSTR DefFileFilter;
486 char temporary[1024];
487 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return;
488
489 OpenFileWithExtension( temporary );
490}
491
492void MainFrame::OnCmdClose( UINT uNotifyCode, int nID, CWindow wndCtl )
493{
494 HWND hChild=::GetWindow(hClient,GW_CHILD);
495 if(::IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
496}
497
498void MainFrame::OnCmdProjectOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
499{
500 //"プロジェクト ファイルを指定して下さい"
501 extern LPSTR ProjectFileFilter;
502 char temporary[1024];
503 if(!GetFilePathDialog(m_hWnd,temporary,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE))
504 {
505 return;
506 }
507
508 projectInfo.Open(temporary);
509}
510
511void MainFrame::OnCmdProjectSave( UINT uNotifyCode, int nID, CWindow wndCtl )
512{
513 SaveProject();
514}
515
516void MainFrame::OnCmdProjectClose( UINT uNotifyCode, int nID, CWindow wndCtl )
517{
518 projectInfo.Close();
519}
520
521void MainFrame::OnCmdProjectFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
522{
523 ShellExecute(m_hWnd,"explore",projectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
524}
525
526void MainFrame::OnCmdSave( UINT uNotifyCode, int nID, CWindow wndCtl )
527{
528 SaveDocument(::GetWindow(hClient,GW_CHILD),NULL);
529}
530
531void MainFrame::OnCmdNewSave( UINT uNotifyCode, int nID, CWindow wndCtl )
532{
533 //"保存先のファイルを指定してください"
534 extern LPSTR DefFileFilter;
535 char temporary[1024];
536 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return;
537
538 SaveDocument(::GetWindow(hClient,GW_CHILD),temporary);
539}
540
541void MainFrame::OnCmdCodeSave( UINT uNotifyCode, int nID, CWindow wndCtl )
542{
543 //文字コードを指定して保存
544 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),m_hWnd,(DLGPROC)nkfDlgCodeSave);
545}
546
547void MainFrame::OnCmdAllSave( UINT uNotifyCode, int nID, CWindow wndCtl )
548{
549 for( int i=0;i<MAX_WNDNUM;i++){
550 if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
551 }
552 if( projectInfo.IsOpened() ) SaveProject();
553}
554
555void MainFrame::OnCmdPageSet( UINT uNotifyCode, int nID, CWindow wndCtl )
556{
557 //ページ設定
558 obj_Page.SetupDlg();
559}
560
561void MainFrame::OnCmdPreview( UINT uNotifyCode, int nID, CWindow wndCtl )
562{
563 //プレビュー(Pro版のみ)
564 Preview();
565}
566
567void MainFrame::OnCmdPrintOut( UINT uNotifyCode, int nID, CWindow wndCtl )
568{
569 //印刷
570 Printout();
571}
572
573void MainFrame::OnCmdExit( UINT uNotifyCode, int nID, CWindow wndCtl )
574{
575 SendMessage(WM_CLOSE);
576}
577
578void MainFrame::OnCmdUndo( UINT uNotifyCode, int nID, CWindow wndCtl )
579{
580 HWND hChild=::GetWindow(hClient,GW_CHILD);
581 if(!hChild) return;
582 int WndNum=GetWndNum(hChild);
583 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
584 TextEdit_UndoCommand(WndNum);
585 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
586 Rad_UndoCommand(WndNum);
587 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
588 IconEdit_UndoCommand(WndNum);
589}
590
591void MainFrame::OnCmdRedo( UINT uNotifyCode, int nID, CWindow wndCtl )
592{
593 HWND hChild=::GetWindow(hClient,GW_CHILD);
594 if(!hChild) return;
595 int WndNum=GetWndNum(hChild);
596 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
597 TextEdit_RedoCommand(WndNum);
598 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
599 Rad_RedoCommand(WndNum);
600 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
601 IconEdit_RedoCommand(WndNum);
602}
603
604void MainFrame::OnCmdCut( UINT uNotifyCode, int nID, CWindow wndCtl )
605{
606 HWND hChild=::GetWindow(hClient,GW_CHILD);
607 int WndNum=GetWndNum(hChild);
608 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
609 HWND hEdit=::GetWindow(hChild,GW_CHILD);
610
611 CHARRANGE CharRange;
612 TextEdit_GetSel(WndNum,&CharRange);
613
614 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
615 char *pTemp=(char *)GlobalLock(hGlobal);
616 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
617 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
618 GlobalUnlock(hGlobal);
619
620 //クリップボードに保存
621 OpenClipboard();
622 EmptyClipboard();
623 SetClipboardData(CF_TEXT,hGlobal);
624 CloseClipboard();
625
626 //選択文字列を消去
627 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
628 }
629 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
630 WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
631 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
632
633 //クリップボードに格納するためのデータを用意する
634 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.x-=17;
635 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.y-=10;
636 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
637 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.x+=17;
638 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.y+=10;
639
640 OpenClipboard();
641 EmptyClipboard();
642 extern DWORD dwRadClipboardID;
643 SetClipboardData(dwRadClipboardID,hGlobal);
644 CloseClipboard();
645
646 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
647 }
648 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
649 //クリップボードに格納するためのデータを用意する
650 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
651 if(hGlobal==0) return;
652
653 OpenClipboard();
654 EmptyClipboard();
655 SetClipboardData(CF_BITMAP,hGlobal);
656 CloseClipboard();
657
658 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
659 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
660
661 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
662 }
663}
664
665void MainFrame::OnCmdCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
666{
667 HWND hChild=::GetWindow(hClient,GW_CHILD);
668 int WndNum=GetWndNum(hChild);
669 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
670 HWND hEdit = ::GetWindow(hChild,GW_CHILD);
671
672 CHARRANGE CharRange;
673 TextEdit_GetSel(WndNum,&CharRange);
674
675 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
676 char *pTemp=(char *)GlobalLock(hGlobal);
677 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
678 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
679 GlobalUnlock(hGlobal);
680
681 //クリップボードに保存
682 OpenClipboard();
683 EmptyClipboard();
684 SetClipboardData(CF_TEXT,hGlobal);
685 CloseClipboard();
686 }
687 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
688 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
689
690 //クリップボードに格納するためのデータを用意する
691 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
692
693 OpenClipboard();
694 EmptyClipboard();
695 extern DWORD dwRadClipboardID;
696 SetClipboardData(dwRadClipboardID,hGlobal);
697 CloseClipboard();
698 }
699 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
700 //クリップボードに格納するためのデータを用意する
701 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
702
703 OpenClipboard();
704 EmptyClipboard();
705 SetClipboardData(CF_BITMAP,hGlobal);
706 CloseClipboard();
707 }
708}
709
710void MainFrame::OnCmdPaste( UINT uNotifyCode, int nID, CWindow wndCtl )
711{
712 HWND hChild=::GetWindow(hClient,GW_CHILD);
713 int WndNum=GetWndNum(hChild);
714 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
715 HWND hEdit=::GetWindow(hChild,GW_CHILD);
716
717 //クリップボードを開く
718 OpenClipboard();
719 HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
720 if(!hGlobal){
721 CloseClipboard();
722 return;
723 }
724
725
726 char *pTemp;
727 if(pobj_nv->bPasteIndent){
728 //インデント整形
729 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
730 GlobalUnlock(hGlobal);
731 }
732 else pTemp=(char *)GlobalLock(hGlobal);
733
734
735 //テキストエディタの文字列をリプレイス
736 TextEdit_ReplaceUpdateUndoData(WndNum,
737 pTemp,
738 1,
739 1);
740
741 if(pobj_nv->bPasteIndent)
742 HeapDefaultFree(pTemp);
743 else
744 GlobalUnlock(hGlobal);
745
746 //クリップボードを閉じる
747 CloseClipboard();
748
749
750 //キャレット位置までスクロールする
751 TextEdit_ScrollCaret(WndNum,0);
752 ResetCaretPos(WndNum);
753 }
754 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
755 OpenClipboard();
756 extern DWORD dwRadClipboardID;
757 HGLOBAL hGlobal=GetClipboardData(dwRadClipboardID);
758 if(!hGlobal){
759 CloseClipboard();
760 return;
761 }
762 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
763 CloseClipboard();
764 }
765 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
766 OpenClipboard();
767 HGLOBAL hGlobal=GetClipboardData(CF_BITMAP);
768 if(!hGlobal){
769 CloseClipboard();
770 return;
771 }
772 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
773 CloseClipboard();
774 }
775}
776
777void MainFrame::OnCmdDelete( UINT uNotifyCode, int nID, CWindow wndCtl )
778{
779 HWND hChild=::GetWindow(hClient,GW_CHILD);
780 int WndNum=GetWndNum(hChild);
781 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
782 HWND hEdit=::GetWindow(hChild,GW_CHILD);
783 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
784 }
785 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
786 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
787}
788
789void MainFrame::OnCmdAllSelect( UINT uNotifyCode, int nID, CWindow wndCtl )
790{
791 HWND hChild=::GetWindow(hClient,GW_CHILD);
792 int WndNum=GetWndNum(hChild);
793 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
794 HWND hEdit=::GetWindow(hChild,GW_CHILD);
795
796 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
797 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
798
799 GetCaretPosFromBufferIndex(
800 MdiInfo[WndNum].pMdiTextEdit->buffer,
801 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
802 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
803
804 ::InvalidateRect(hEdit,NULL,0);
805
806 ResetState_EditMenu();
807 }
808 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
809 WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
810 for(int i3=0;i3<pWindowInfo->childWindowInfos.size();i3++){
811 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
812 }
813 DrawRadWindow(WndNum,pWindowInfo);
814 }
815}
816
817void MainFrame::OnCmdFind( UINT uNotifyCode, int nID, CWindow wndCtl )
818{
819 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),m_hWnd,(DLGPROC)DlgFind);
820}
821
822void MainFrame::OnCmdPermutation( UINT uNotifyCode, int nID, CWindow wndCtl )
823{
824 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),m_hWnd,(DLGPROC)DlgPermutation);
825}
826
827void MainFrame::OnCmdConvertX( UINT uNotifyCode, int nID, CWindow wndCtl )
828{
829 TextEdit_Convert( nID );
830}
831
832#ifdef THETEXT
833void MainFrame::OnCmdStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
834{
835 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,0);
836}
837
838void MainFrame::OnCmdSelStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
839{
840 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,1);
841}
842#endif
843
844void MainFrame::OnCmdProjectView( UINT uNotifyCode, int nID, CWindow wndCtl )
845{
846 extern HWND hProjectView;
847 bool isCheck = false;
848 if(pobj_nv->bClipProjectView){
849 if(::IsWindowVisible(hProjectView)){
850 ::ShowWindow(hProjectView,SW_HIDE);
851 }
852 else{
853 ::ShowWindow(hProjectView,SW_SHOW);
854 isCheck = true;
855 }
856 }
857 else{
858 extern HWND hProjectView_ToolWindow;
859 if(::IsWindowVisible(hProjectView_ToolWindow)){
860 ::ShowWindow(hProjectView_ToolWindow,SW_HIDE);
861 }
862 else{
863 ::ShowWindow(hProjectView_ToolWindow,SW_SHOW);
864 ::ShowWindow(hProjectView,SW_SHOW);
865 isCheck = true;
866 }
867 }
868 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,isCheck);
869
870 //再配置
871 ResizeOwnerWnd();
872
873 ::ShowWindow(hClient,SW_SHOW);
874}
875
876void MainFrame::OnCmdProjectOption( UINT uNotifyCode, int nID, CWindow wndCtl )
877{
878 DlgProjectOptionSetting( m_hWnd );
879}
880
881void MainFrame::OnCmdTopMost( UINT uNotifyCode, int nID, CWindow wndCtl )
882{
883 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
884 SetWindowPos( HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
885 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
886 }
887 else{
888 SetWindowPos( HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
889 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
890 }
891}
892
893void ResetState_ViewMenu(void);
894void MainFrame::OnCmdRightTurn( UINT uNotifyCode, int nID, CWindow wndCtl )
895{
896 pobj_nv->bRightTurn^=1;
897 ResetState_ViewMenu();
898
899 //トップのウィンドウを再描画
900 RedrawAllWindow();
901}
902
903void MainFrame::OnCmdSet( UINT uNotifyCode, int nID, CWindow wndCtl )
904{
905 DlgOptionSetting( m_hWnd );
906}
907
908void CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)
909{
910 std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;
911 STARTUPINFO si;
912 PROCESS_INFORMATION pi;
913 memset(&si,0,sizeof(STARTUPINFO));
914 si.cb=sizeof(STARTUPINFO);
915 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
916 si.wShowWindow = SW_HIDE;
917 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
918 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
919 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
920
921 char args[8192];
922 lstrcpy( args, argsStr.c_str() );
923
924 CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
925}
926
927#ifndef THETEXT
928void MainFrame::OnCmdDebug( UINT uNotifyCode, int nID, CWindow wndCtl )
929{
930 char temporary[1024], temp2[1024], temp3[1024];
931 if(pobj_Debugger->IsDebugging()){
932 pobj_Debugger->DebugContinue();
933 return;
934 }
935
936 HWND hChild = ::GetWindow(hClient,GW_CHILD);
937 if( projectInfo.IsOpened() ){
938 //プロジェクトが開かれている場合
939 if(!SetProjectToRun()) return;
940
941 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
942 sprintf(temporary,"%s\r\n%s",projectInfo.szExePath,projectInfo.szCmdLine);
943 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
944 HANDLE hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
945 DWORD dwAccessBytes;
946 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
947 CloseHandle(hFile);
948
949 //ソースファイル名をtemp2へ
950 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
951
952 //出力ファイル名をtemp3へ
953 lstrcpy(temp3,projectInfo.lpszOutput_Debug);
954 GetFullPath(temp3,projectInfo.dir);
955
956 if(IsNeedCompileForProject(1))
957 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,m_hWnd);
958 else
959 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,m_hWnd);
960
961 // DLLオプション
962 if( projectInfo.GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll )
963 {
964 lstrcat(temporary," /dll");
965 }
966
967 // SLLオプション
968 if( projectInfo.GetModuleType() == ActiveBasic::Common::TargetModuleType::Sll )
969 {
970 lstrcat(temporary," /static_library");
971 }
972
973 //Unicodeオプション
974 if(projectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
975
976 //ブレークポイントをセーブ
977 projectInfo.pobj_DBBreakPoint->SaveToTempFile();
978 }
979 else{
980 //単独ソースコード
981 if(!SetRunning(hChild)) return;
982 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
983 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
984 else
985 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
986
987 //ブレークポイントをセーブ
988 extern CDBBreakPoint *pobj_DBBreakPoint;
989 pobj_DBBreakPoint->SaveToTempFile();
990 }
991
992 //コンパイルビューをクリップするかどうか
993 extern BOOL bClipCompileView;
994 if(bClipCompileView){
995 lstrcat(temporary," /clip_compile_view");
996
997 //コンパイラビューを閉じる
998 extern HWND hCompileView;
999 if(hCompileView==(HWND)-1) return;
1000 if(hCompileView){
1001 hChild=hCompileView;
1002 hCompileView=(HWND)-1;
1003 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1004 }
1005
1006 //重複起動防止のため
1007 hCompileView=(HWND)-1;
1008 }
1009
1010 //インクルードディレクトリ
1011 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1012 lstrcat(temporary,temp2);
1013
1014 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1015 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1016}
1017
1018void MainFrame::OnCmdDebugCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1019{
1020 char temporary[1024], temp2[1024], temp3[1024];
1021
1022 HWND hChild=::GetWindow(hClient,GW_CHILD);
1023 if( projectInfo.IsOpened() ){
1024 //プロジェクトが開かれている場合
1025 if(!SetProjectToRun()) return;
1026
1027 //ソースファイル名をtemp2へ
1028 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1029
1030 //出力ファイル名をtemp3へ
1031 lstrcpy(temp3,projectInfo.lpszOutput_Debug);
1032 GetFullPath(temp3,projectInfo.dir);
1033
1034 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,m_hWnd);
1035
1036 //DLLオプション
1037 if( projectInfo.GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll )
1038 {
1039 lstrcat(temporary," /dll");
1040 }
1041
1042 //Unicodeオプション
1043 if(projectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1044 }
1045 else{
1046 //単独ソースコード
1047 if(!SetRunning(hChild)) return;
1048 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1049 }
1050
1051 //コンパイルビューをクリップするかどうか
1052 extern BOOL bClipCompileView;
1053 if(bClipCompileView){
1054 lstrcat(temporary," /clip_compile_view");
1055
1056 //コンパイラビューを閉じる
1057 extern HWND hCompileView;
1058 if(hCompileView==(HWND)-1) return;
1059 if(hCompileView){
1060 hChild=hCompileView;
1061 hCompileView=(HWND)-1;
1062 if( ::IsWindow( hChild ) )
1063 {
1064 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1065 }
1066 }
1067
1068 //重複起動防止のため
1069 hCompileView=(HWND)-1;
1070 }
1071
1072 //インクルードディレクトリ
1073 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1074 lstrcat(temporary,temp2);
1075
1076 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1077 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1078
1079}
1080
1081void MainFrame::OnCmdAttach( UINT uNotifyCode, int nID, CWindow wndCtl )
1082{
1083 char temporary[1024], temp2[1024];
1084
1085 int idProcess;
1086 DWORD dwPlatform;
1087 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),m_hWnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1088 if(idProcess==0) return;
1089
1090 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,m_hWnd);
1091
1092 //コンパイルビューをクリップするかどうか
1093 extern BOOL bClipCompileView;
1094 if(bClipCompileView){
1095 lstrcat(temporary," /clip_compile_view");
1096
1097 //コンパイラビューを閉じる
1098 extern HWND hCompileView;
1099 if(hCompileView==(HWND)-1) return;
1100 if(hCompileView){
1101 HWND hChild=hCompileView;
1102 hCompileView=(HWND)-1;
1103 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1104 }
1105
1106 //重複起動防止のため
1107 hCompileView=(HWND)-1;
1108 }
1109
1110 //インクルードディレクトリ
1111 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1112 lstrcat(temporary,temp2);
1113
1114 ActiveBasic::Common::Platform::EnumType platform;
1115 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1116 {
1117 platform = ActiveBasic::Common::Platform::X86;
1118 }
1119 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1120 {
1121 platform = ActiveBasic::Common::Platform::X64;
1122 }
1123 else
1124 {
1125 throw;
1126 }
1127
1128 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1129 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1130}
1131
1132void MainFrame::OnCmdReleaseCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1133{
1134 char temporary[1024], temp2[1024], temp3[1024];
1135
1136 HWND hChild=::GetWindow(hClient,GW_CHILD);
1137 if( projectInfo.IsOpened() ){
1138 //プロジェクトが開かれている場合
1139 if(!SetProjectToRun()) return;
1140
1141 //ソースファイル名をtemp2へ
1142 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1143
1144 //出力ファイル名をtemp3へ
1145 lstrcpy(temp3,projectInfo.lpszOutput_Release);
1146 GetFullPath(temp3,projectInfo.dir);
1147
1148 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,m_hWnd);
1149
1150 //DLLオプション
1151 if( projectInfo.GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll )
1152 {
1153 lstrcat(temporary," /dll");
1154 }
1155
1156 //Unicodeオプション
1157 if(projectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1158 }
1159 else{
1160 //単独ソースコード
1161 if(!SetRunning(hChild)) return;
1162 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1163 }
1164
1165 //コンパイルビューをクリップするかどうか
1166 extern BOOL bClipCompileView;
1167 if(bClipCompileView){
1168 lstrcat(temporary," /clip_compile_view");
1169
1170 //コンパイラビューを閉じる
1171 extern HWND hCompileView;
1172 if(hCompileView==(HWND)-1) return;
1173 if(hCompileView){
1174 hChild=hCompileView;
1175 hCompileView=(HWND)-1;
1176 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1177 }
1178
1179 //重複起動防止のため
1180 hCompileView=(HWND)-1;
1181 }
1182
1183 //インクルードディレクトリ
1184 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1185 lstrcat(temporary,temp2);
1186
1187 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1188 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1189}
1190
1191void MainFrame::OnCmdReleaseRun( UINT uNotifyCode, int nID, CWindow wndCtl )
1192{
1193 char temporary[1024], temp2[1024], temp3[1024];
1194
1195 HWND hChild=::GetWindow(hClient,GW_CHILD);
1196 if( projectInfo.IsOpened() ){
1197/* //プロジェクトが開かれている場合
1198 if(!SetProjectToRun()) return;
1199
1200 //必要であればリリースコンパイル
1201 if(IsNeedCompileForProject(0))
1202 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1203
1204 if( projectInfo.GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll )
1205 {
1206 lstrcpy(temporary,projectInfo.szExePath);
1207 }
1208 else{
1209 lstrcpy(temporary,projectInfo.lpszOutput_Debug);
1210 GetFullPath(temporary,projectInfo.dir);
1211 }
1212 }
1213 else{
1214/* //必要であればリリースコンパイル
1215 if(!SetRunning(hChild)) return;
1216
1217 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1218 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1219
1220 //単独ソースコード
1221 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1222 lstrcat(temporary,temp2);
1223 lstrcat(temporary,temp3);
1224 lstrcat(temporary,".exe");
1225 }
1226
1227 //インクルードディレクトリ
1228 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1229 lstrcat(temporary,temp2);
1230
1231 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1232}
1233
1234void MainFrame::OnCmdStepIn( UINT uNotifyCode, int nID, CWindow wndCtl )
1235{
1236 pobj_Debugger->StepIn();
1237}
1238
1239void MainFrame::OnCmdStepOver( UINT uNotifyCode, int nID, CWindow wndCtl )
1240{
1241 pobj_Debugger->StepOver();
1242}
1243
1244void MainFrame::OnCmdStepCursor( UINT uNotifyCode, int nID, CWindow wndCtl )
1245{
1246 pobj_Debugger->StepToCursor();
1247}
1248
1249void MainFrame::OnCmdBreakPoint( UINT uNotifyCode, int nID, CWindow wndCtl )
1250{
1251 if( projectInfo.IsOpened() ){
1252 projectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1253 }
1254 else{
1255 extern CDBBreakPoint *pobj_DBBreakPoint;
1256 pobj_DBBreakPoint->Event_BreakPoint();
1257 }
1258}
1259
1260void MainFrame::OnCmdDebugStop( UINT uNotifyCode, int nID, CWindow wndCtl )
1261{
1262 pobj_Debugger->DebugStop();
1263}
1264
1265void MainFrame::OnCmdDebugPause( UINT uNotifyCode, int nID, CWindow wndCtl )
1266{
1267 pobj_Debugger->DebugPause();
1268}
1269
1270#endif // not THETEXT
1271
1272void MainFrame::OnCmdWebLink( UINT uNotifyCode, int nID, CWindow wndCtl )
1273{
1274 switch( nID )
1275 {
1276#ifndef THETEXT
1277 case IDM_COMMUNITY:
1278 OpenWebBrowser( "http://www.activebasic.com/forum/" );
1279 break;
1280 case IDM_COMMU_SEARCH:
1281 OpenWebBrowser( "http://www.activebasic.com/forum/search.php" );
1282 break;
1283 case IDM_COMMU_PM:
1284 OpenWebBrowser( "http://www.activebasic.com/forum/privmsg.php?folder=inbox" );
1285 break;
1286 case ID_COMMU_FORUM1:
1287 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=1" );
1288 break;
1289 case ID_COMMU_FORUM2:
1290 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=2" );
1291 break;
1292 case ID_COMMU_FORUM3:
1293 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=5" );
1294 break;
1295 case ID_COMMU_FORUM4:
1296 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=3" );
1297 break;
1298 case ID_COMMU_FORUM5:
1299 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=6" );
1300 break;
1301 case ID_COMMU_FORUM6:
1302 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=8" );
1303 break;
1304 case ID_COMMU_FORUM7:
1305 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=4" );
1306 break;
1307 case ID_COMMU_FORUM8:
1308 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=7" );
1309 break;
1310 case IDM_AB_WEBSITE:
1311 OpenWebBrowser( "http://www.activebasic.com/" );
1312 break;
1313 case IDM_ACTBDL:
1314 OpenWebBrowser( "http://www.activebasic.com/activebasic5/download.htm" );
1315 break;
1316#else
1317 case IDM_DSHOMEPAGE:
1318 OpenWebBrowser( "http://www.discoversoft.net/" );
1319 break;
1320#endif // not THETEXT
1321 default:
1322 throw;
1323 }
1324}
1325
1326void MainFrame::OnCmdTopics( UINT uNotifyCode, int nID, CWindow wndCtl )
1327{
1328 char temporary[1024];
1329#ifdef THETEXT
1330 sprintf(temporary,"%sTopics\\index.html",pj_editor_Dir);
1331 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1332#else
1333 sprintf(temporary,"%sBasicHelp.chm",pj_editor_Dir);
1334 HtmlHelp(NULL,temporary,HH_DISPLAY_TOPIC,0);
1335#endif
1336}
1337
1338void MainFrame::OnCmdAbout( UINT uNotifyCode, int nID, CWindow wndCtl )
1339{
1340 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),m_hWnd,(DLGPROC)DialogAbout);
1341}
1342
1343void MainFrame::OnCmdDocSelectBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1344{
1345 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1346}
1347
1348void MainFrame::OnCmdStandardBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1349{
1350 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1351}
1352
1353void MainFrame::OnCmdReleaseBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1354{
1355 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1356}
1357
1358void MainFrame::OnCmdDebugBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1359{
1360 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1361}
1362
1363void MainFrame::OnCmdSelectCompilerBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1364{
1365 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1366}
1367
1368void MainFrame::OnCmdNoGripper( UINT uNotifyCode, int nID, CWindow wndCtl )
1369{
1370 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1371 else pobj_nv->bNoGripper=1;
1372
1373 //レバーコントロールを再生成
1374 pobj_Rebar->ResetRebar();
1375
1376 //メニュー状態を設定
1377 ResetState_DocMenu();
1378}
1379
1380void MainFrame::OnCmdResetRebar( UINT uNotifyCode, int nID, CWindow wndCtl )
1381{
1382 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1383 if( MessageBox(STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION) == IDCANCEL )
1384 {
1385 return;
1386 }
1387
1388 //レバーコントロールを再生成
1389 pobj_Rebar->ResetInitRebar();
1390
1391 //メニュー状態を設定
1392 ResetState_DocMenu();
1393}
1394
1395void MainFrame::OnCmdAllCloseOmitMyself( UINT uNotifyCode, int nID, CWindow wndCtl )
1396{
1397 //このウィンドウ以外をすべて閉じる(&A)
1398 HWND hChild=::GetWindow(hClient,GW_CHILD);
1399 int WndNum=GetWndNum(hChild);
1400 for(int i=0;i<MAX_WNDNUM;i++){
1401 if(i==WndNum) continue;
1402 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1403 }
1404}
1405
1406void MainFrame::OnCmdPathCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
1407{
1408 HWND hChild=::GetWindow(hClient,GW_CHILD);
1409 int WndNum=GetWndNum(hChild);
1410
1411 //絶対パスをコピー
1412 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1413 char *pTemp=(char *)GlobalLock(hGlobal);
1414 lstrcpy(pTemp,MdiInfo[WndNum].path);
1415 GlobalUnlock(hGlobal);
1416
1417 //クリップボードに保存
1418 OpenClipboard();
1419 EmptyClipboard();
1420 SetClipboardData(CF_TEXT,hGlobal);
1421 CloseClipboard();
1422}
1423
1424void MainFrame::OnCmdFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
1425{
1426 HWND hChild=::GetWindow(hClient,GW_CHILD);
1427 int WndNum=GetWndNum(hChild);
1428
1429 char temporary[1024], temp2[1024];
1430 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1431 lstrcat(temporary,temp2);
1432
1433 OpenExplorer( temporary );
1434}
1435
1436void MainFrame::OnCmdDeleteFile( UINT uNotifyCode, int nID, CWindow wndCtl )
1437{
1438 HWND hChild=::GetWindow(hClient,GW_CHILD);
1439 int WndNum=GetWndNum(hChild);
1440
1441 char temporary[1024], temp2[1024];
1442 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1443 lstrcat(temporary,temp2);
1444
1445 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1446 if(MessageBox(temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return;
1447
1448 //ゴミ箱へ
1449 SHFILEOPSTRUCT fo;
1450 fo.hwnd=m_hWnd;
1451 fo.wFunc=FO_DELETE;
1452 fo.pFrom =MdiInfo[WndNum].path;
1453 fo.pTo="\0";
1454 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1455 SHFileOperation(&fo);
1456
1457 //閉じる
1458 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1459 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1460}
1461
1462void MainFrame::OnCmdColor( UINT uNotifyCode, int nID, CWindow wndCtl )
1463{
1464 static COLORREF colorUser=RGB(255,255,255);
1465
1466 switch( nID )
1467 {
1468 case IDM_USER_COLOR:
1469 {
1470 CHOOSECOLOR cc;
1471 COLORREF CusColors[16]={
1472 RGB(255,255,255),
1473 RGB(0,0,0),
1474 RGB(128,128,128),
1475 RGB(192,192,192),
1476 RGB(128,0,0),
1477 RGB(255,0,0),
1478 RGB(128,128,0),
1479 RGB(255,255,0),
1480 RGB(0,128,0),
1481 RGB(0,255,0),
1482 RGB(0,128,128),
1483 RGB(0,255,255),
1484 RGB(0,0,128),
1485 RGB(0,0,255),
1486 RGB(128,0,128),
1487 RGB(255,0,255)};
1488 cc.lStructSize=sizeof(CHOOSECOLOR);
1489 cc.hwndOwner=m_hWnd;
1490 cc.rgbResult=colorUser;
1491 cc.lpCustColors=CusColors;
1492 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1493 if(!ChooseColor(&cc)){
1494 return;
1495 }
1496 colorUser=cc.rgbResult;
1497 }
1498 case IDM_GRAY:
1499 case IDM_WHITE:
1500 case IDM_RED:
1501 case IDM_GREEN:
1502 case IDM_BLUE:
1503 case IDM_YELLOW:
1504 {
1505 HWND hChild=::GetWindow(hClient,GW_CHILD);
1506 int WndNum=GetWndNum(hChild);
1507
1508 TC_ITEM tcItem;
1509 tcItem.mask=TCIF_PARAM;
1510 if(nID==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1511 if(nID==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1512 if(nID==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1513 if(nID==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1514 if(nID==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1515 if(nID==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1516 if(nID==IDM_USER_COLOR) tcItem.lParam=colorUser;
1517 TabCtrl_SetItem(pobj_MainTab->hTab,
1518 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1519 &tcItem);
1520 ::InvalidateRect(pobj_MainTab->hTab,NULL,0);
1521 break;
1522 }
1523 default:
1524 throw;
1525 }
1526}
Note: See TracBrowser for help on using the repository browser.