source: dev/trunk/ab5.0/abdev/abdev/DocumentAdvice.cpp @ 681

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

MDIINFO構造体をリファクタリング。

File size: 11.5 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5void MenuAdvice(WPARAM msg){
6    /////////////////////////////////////////////////////
7    // コマンド解説(ステータスバーに表示されるテキスト)
8    /////////////////////////////////////////////////////
9    extern char CmdMsg[255];
10
11#if defined(JPN)
12    //日本語
13    if(LOWORD(msg)==IDM_NEW) SetStatusText("新規にプロジェクトまたはドキュメントを作成します");
14    else if(LOWORD(msg)==IDM_OPEN) SetStatusText("既存のドキュメントを開きます");
15    else if(LOWORD(msg)==IDM_CLOSE) SetStatusText("作業中のファイルを閉じます");
16    else if(LOWORD(msg)==IDM_SAVE) SetStatusText("作業中のファイルを保存します");
17    else if(LOWORD(msg)==IDM_NEWSAVE) SetStatusText("作業中のファイルを新しい名前を付けて保存します");
18    else if(LOWORD(msg)==IDM_ALLSAVE) SetStatusText("開いているファイルをすべて保存します");
19    else if(LOWORD(msg)==IDM_PROJECT_OPEN) SetStatusText("既存のプロジェクトを開きます");
20    else if(LOWORD(msg)==IDM_PROJECT_SAVE) SetStatusText("作業中のプロジェクトを保存します");
21    else if(LOWORD(msg)==IDM_PROJECT_CLOSE) SetStatusText("作業中のプロジェクトを閉じます");
22    else if(LOWORD(msg)==IDM_EXIT) SetStatusText("アプリケーションの終了と内容の保存確認をします");
23    else if(LOWORD(msg)==IDM_UNDO) SetStatusText("直前の操作を元にもどします");
24    else if(LOWORD(msg)==IDM_REDO) SetStatusText("前の未完了操作を繰り返します");
25    else if(LOWORD(msg)==IDM_CUT) SetStatusText("選択範囲を切り取り、クリップボードへコピーします");
26    else if(LOWORD(msg)==IDM_COPY) SetStatusText("選択範囲をクリップボードへコピーします");
27    else if(LOWORD(msg)==IDM_PASTE) SetStatusText("挿入位置にクリップボードの内容を挿入します");
28    else if(LOWORD(msg)==IDM_DELETE) SetStatusText("選択範囲を削除します");
29    else if(LOWORD(msg)==IDM_ALLSELECT) SetStatusText("ファイル全体を選択します");
30    else if(LOWORD(msg)==IDM_FIND) SetStatusText("作業中のドキュメント内を検索します");
31    else if(LOWORD(msg)==IDM_PERMUTATION) SetStatusText("指定した文字列を他の文字列で置換します");
32
33#ifdef THETEXT
34    else if(LOWORD(msg)==IDM_STRING_COUNT) SetStatusText("作業中ドキュメントの文字数をカウントします");
35#endif
36
37    else if(LOWORD(msg)==IDM_PROJECTVIEW) SetStatusText("プロジェクトビューの表示/非表示を切り替えます");
38    else if(LOWORD(msg)==IDM_PROJECT_OPTION) SetStatusText("プロジェクトオプションの設定を行います");
39    else if(LOWORD(msg)==IDM_TOPMOST) SetStatusText("エディタの最前面表示ON/OFFを切り替えます");
40    else if(LOWORD(msg)==IDM_SET) SetStatusText("エディタオプションの設定を行います");
41    else if(LOWORD(msg)==IDM_DEBUG) SetStatusText("プログラムをデバッグ用にコンパイルし、デバッグ実行します");
42    else if(LOWORD(msg)==IDM_DEBUGCOMPILE) SetStatusText("プログラムをデバッグ用にコンパイルします");
43    else if(LOWORD(msg)==IDM_RELEASECOMPILE) SetStatusText("プログラムをリリース用にコンパイルします");
44    else if(LOWORD(msg)==IDM_TOPIC) SetStatusText("ヘルプファイルを開きます");
45    else if(LOWORD(msg)==IDM_ABOUT) SetStatusText("ActiveBasicのバージョン情報を表示します");
46    else SetStatusText(CmdMsg);
47#else
48    //英語
49    if(LOWORD(msg)==IDM_NEW) SetStatusText("Create a new document");
50    else if(LOWORD(msg)==IDM_OPEN) SetStatusText("Open an existing document");
51    else if(LOWORD(msg)==IDM_CLOSE) SetStatusText("Close the active document");
52    else if(LOWORD(msg)==IDM_SAVE) SetStatusText("Save the active document");
53    else if(LOWORD(msg)==IDM_NEWSAVE) SetStatusText("Save the active document with a new name");
54    else if(LOWORD(msg)==IDM_ALLSAVE) SetStatusText("Save all the modified documents");
55    else if(LOWORD(msg)==IDM_PROJECT_OPEN) SetStatusText("Open an existing project");
56    else if(LOWORD(msg)==IDM_PROJECT_SAVE) SetStatusText("Save the active project");
57    else if(LOWORD(msg)==IDM_PROJECT_CLOSE) SetStatusText("Close the active project");
58    else if(LOWORD(msg)==IDM_EXIT) SetStatusText("Quit the application, prompts you to save modified documents");
59    else if(LOWORD(msg)==IDM_UNDO) SetStatusText("Undo the last action");
60    else if(LOWORD(msg)==IDM_REDO) SetStatusText("Redo the previously undone action");
61    else if(LOWORD(msg)==IDM_CUT) SetStatusText("Cut the selection and puts it on the Clipboard");
62    else if(LOWORD(msg)==IDM_COPY) SetStatusText("Copy the selection and puts it on the Clipboard");
63    else if(LOWORD(msg)==IDM_PASTE) SetStatusText("Insert Clipboard contents");
64    else if(LOWORD(msg)==IDM_DELETE) SetStatusText("Erase the selection");
65    else if(LOWORD(msg)==IDM_ALLSELECT) SetStatusText("Select the entire document");
66    else if(LOWORD(msg)==IDM_FIND) SetStatusText("Search for text in the active document");
67    else if(LOWORD(msg)==IDM_PERMUTATION) SetStatusText("Replace occurrences of search std::string");
68    else if(LOWORD(msg)==IDM_PROJECTVIEW) SetStatusText("Show or hide ProjectView");
69    else if(LOWORD(msg)==IDM_PROJECT_OPTION) SetStatusText("Set project options");
70    else if(LOWORD(msg)==IDM_TOPMOST) SetStatusText("Mark ProjectEditor stay on top of the other applications");
71    else if(LOWORD(msg)==IDM_SET) SetStatusText("Set editor options");
72    else if(LOWORD(msg)==IDM_DEBUG) SetStatusText("Debug the program");
73    else if(LOWORD(msg)==IDM_DEBUGCOMPILE) SetStatusText("Compile the program for debugging");
74    else if(LOWORD(msg)==IDM_RELEASECOMPILE) SetStatusText("Compile the program for release");
75    else if(LOWORD(msg)==IDM_TOPIC) SetStatusText("Open the Help topics");
76    else if(LOWORD(msg)==IDM_ABOUT) SetStatusText("Display information about ActiveBasic");
77    else SetStatusText(CmdMsg);
78#endif
79}
80
81void ShowToolTipText(LPTOOLTIPTEXT TipText){
82    ////////////////////////////////////////////////////////////////////////////
83    // ツールチップ(ツールバーにポイントしたときにポップアップされるテキスト)
84    ////////////////////////////////////////////////////////////////////////////
85
86#if defined(JPN)
87    //日本語
88    if(TipText->hdr.idFrom==IDM_NEW) TipText->lpszText="新規作成 (Ctrl+N)";
89    else if(TipText->hdr.idFrom==IDM_OPEN) TipText->lpszText="開く (Ctrl+O)";
90    else if(TipText->hdr.idFrom==IDM_SAVE) TipText->lpszText="保存 (Ctrl+S)";
91    else if(TipText->hdr.idFrom==IDM_ALLSAVE) TipText->lpszText="すべて保存";
92    else if(TipText->hdr.idFrom==IDM_CUT) TipText->lpszText="切り取り (Ctrl+X)";
93    else if(TipText->hdr.idFrom==IDM_COPY) TipText->lpszText="コピー (Ctrl+C)";
94    else if(TipText->hdr.idFrom==IDM_PASTE) TipText->lpszText="貼り付け (Ctrl+V)";
95    else if(TipText->hdr.idFrom==IDM_UNDO) TipText->lpszText="元に戻す (Ctrl+Z)";
96    else if(TipText->hdr.idFrom==IDM_REDO) TipText->lpszText="やり直し (Ctrl+Y)";
97    else if(TipText->hdr.idFrom==IDM_FIND) TipText->lpszText="検索 (Ctrl+F)";
98    else if(TipText->hdr.idFrom==IDM_DEBUG) TipText->lpszText="デバッグ実行 (F5)";
99    else if(TipText->hdr.idFrom==IDM_DEBUGCOMPILE) TipText->lpszText="デバッグ ビルド (F7)";
100    else if(TipText->hdr.idFrom==IDM_RELEASECOMPILE) TipText->lpszText="リリース ビルド (F6)";
101#else
102    //英語
103    if(TipText->hdr.idFrom==IDM_NEW) TipText->lpszText="New Document (Ctrl+N)";
104    else if(TipText->hdr.idFrom==IDM_OPEN) TipText->lpszText="Open Document (Ctrl+O)";
105    else if(TipText->hdr.idFrom==IDM_SAVE) TipText->lpszText="Save Document (Ctrl+S)";
106    else if(TipText->hdr.idFrom==IDM_ALLSAVE) TipText->lpszText="Save All Document";
107    else if(TipText->hdr.idFrom==IDM_CUT) TipText->lpszText="Cut (Ctrl+X)";
108    else if(TipText->hdr.idFrom==IDM_COPY) TipText->lpszText="Copy (Ctrl+C)";
109    else if(TipText->hdr.idFrom==IDM_PASTE) TipText->lpszText="Paste (Ctrl+V)";
110    else if(TipText->hdr.idFrom==IDM_UNDO) TipText->lpszText="Undo (Ctrl+Z)";
111    else if(TipText->hdr.idFrom==IDM_REDO) TipText->lpszText="Redo (Ctrl+Y)";
112    else if(TipText->hdr.idFrom==IDM_FIND) TipText->lpszText="Find (Ctrl+F)";
113    else if(TipText->hdr.idFrom==IDM_DEBUG) TipText->lpszText="Run for Debugging (F2)";
114    else if(TipText->hdr.idFrom==IDM_DEBUGCOMPILE) TipText->lpszText="Compile for Debugging (F4)";
115    else if(TipText->hdr.idFrom==IDM_RELEASECOMPILE) TipText->lpszText="Compile for Release (F7)";
116#endif
117    MenuAdvice(TipText->hdr.idFrom);
118}
119
120char *reflexive_Include(char *buffer,char ***pppFilePath,int *pFileNum,const char *pDefaultDir){
121    extern HANDLE hHeap;
122    int i,i2,i3,i4,sw1,sw2,FileSize;
123    char temporary[MAX_PATH],temp2[MAX_PATH+255],*temp3;
124    DWORD AccBytes;
125
126    //重複チェック用
127    char **ppFilePath;
128    int FileNum;
129    ppFilePath=*pppFilePath;
130    FileNum=*pFileNum;
131
132    for(i=0;;i++){
133        if( ( memcmp(buffer+i,"#include",8)==0 || memcmp(buffer+i,"#require",8)==0 )&&(!IsVariableChar(buffer[i+8]))){
134            i2=i+8;
135            while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
136            sw1=0;
137            if(buffer[i2]=='\"') i2++;
138            else if(buffer[i2]=='<'){
139                i2++;
140                sw1=1;
141            }
142            for(i3=0;;i2++,i3++){
143                if((buffer[i2]=='\"'&&sw1==0)||(buffer[i2]=='>'&&sw1==1)||(buffer[i2]=='\r'&&buffer[i2+1]=='\n')||buffer[i2]=='\0'){
144                    temporary[i3]=0;
145                    break;
146                }
147                temporary[i3]=buffer[i2];
148            }
149            while((!(buffer[i2]=='\r'&&buffer[i2+1]=='\n'))&&buffer[i2]!='\0') i2++;
150
151            if(sw1){
152                sprintf(temp2,"%sInclude\\%s",pj_editor_Dir,temporary);
153                lstrcpy(temporary,temp2);
154            }
155            else{
156                GetFullPath(temporary,pDefaultDir);
157            }
158
159
160            //////////////////
161            // 重複チェック
162            //////////////////
163            for(i3=0,sw2=0;i3<FileNum;i3++){
164                if(lstrcmpi(ppFilePath[i3],temporary)==0){
165                    //重複したとき
166                    sw2=1;
167                    break;
168                }
169            }
170            if(sw2){
171                //重複したときは無視する
172                i=i2;
173                continue;
174            }
175            ppFilePath=(char **)HeapReAlloc(hHeap,0,ppFilePath,(FileNum+1)*sizeof(char *));
176            ppFilePath[FileNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
177            lstrcpy(ppFilePath[FileNum],temporary);
178            FileNum++;
179
180#define MEM_SPACE 1024 //強制終了を防ぐためのゆとりスペース
181            for(i3=0;i3<MdiInfo.size();i3++){
182                if(MdiInfo[i3]->hwnd){
183                    if(lstrcmpi(temporary,MdiInfo[i3]->path.c_str())==0) break;
184                }
185            }
186            if(i3==MdiInfo.size()){
187                //ファイルから開く
188                HANDLE fh;
189                fh=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
190                if(fh==INVALID_HANDLE_VALUE){
191                    goto finish;
192                }
193
194                FileSize=GetFileSize(fh,NULL);
195
196                temp3=(char *)HeapAlloc(hHeap,0,FileSize+MEM_SPACE);
197                ReadFile(fh,temp3,FileSize,&AccBytes,NULL);
198                temp3[FileSize]=0;
199
200                CloseHandle(fh);
201            }
202            else{
203                //エディタから読み取る
204                FileSize=lstrlen(MdiInfo[i3]->pMdiTextEdit->buffer);
205
206                temp3=(char *)HeapAlloc(hHeap,0,FileSize+MEM_SPACE);
207                memcpy(temp3,MdiInfo[i3]->pMdiTextEdit->buffer,FileSize);
208                temp3[FileSize]=0;
209            }
210
211            //新しい参照ディレクトリを取得
212            char DefaultDir[MAX_PATH+1024];
213            _splitpath(temporary,DefaultDir,temp2,0,0);
214            lstrcat(DefaultDir,temp2);
215
216            //インクルードの再帰呼び出し
217            temp3=reflexive_Include(temp3,&ppFilePath,&FileNum,DefaultDir);
218            FileSize=lstrlen(temp3);
219
220            i4=lstrlen(buffer)+FileSize-(i2-i);
221            if(FileSize>(i2-i)) buffer=(char *)HeapReAlloc(hHeap,0,buffer,i4+1+MEM_SPACE);
222            SlideString(buffer+i2,FileSize-(i2-i));
223
224            memcpy(buffer+i,temp3,FileSize);
225
226            HeapDefaultFree(temp3);
227
228            i--;
229            continue;
230        }
231
232        for(;;i++){
233            if(buffer[i]=='\0') break;
234            if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
235                i++;
236                break;
237            }
238        }
239        if(buffer[i]=='\0') break;
240    }
241
242finish:
243
244    //重複チェック用
245    *pppFilePath=ppFilePath;
246    *pFileNum=FileNum;
247
248    return buffer;
249}
250
251char *IncludeFiles(char *buffer){
252    extern HANDLE hHeap;
253    int i;
254
255    //参照ディレクトリ
256    const char *pDefaultDir;
257    if( projectInfo.IsOpened() )
258        pDefaultDir=projectInfo.GetWorkDir().GetPath().c_str();
259    else pDefaultDir=pj_editor_Dir;
260
261    //重複チェック用
262    char **ppFilePath;
263    int FileNum;
264    ppFilePath=(char **)HeapAlloc(hHeap,0,1);
265    FileNum=0;
266
267    buffer=reflexive_Include(buffer,&ppFilePath,&FileNum,pDefaultDir);
268
269    for(i=0;i<FileNum;i++){
270        HeapDefaultFree(ppFilePath[i]);
271    }
272    HeapDefaultFree(ppFilePath);
273    return buffer;
274}
Note: See TracBrowser for help on using the repository browser.