OSDN Git Service

Update to f8475368ad26b783d2c8d1605e1223107c50f874 about documents, tools and small...
[ffftp/ffftp.git] / toolmenu.c
1 /*=============================================================================\r
2 *\r
3 *                                                               ツールバーとメニュー\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define  STRICT\r
31 #include <windows.h>\r
32 #include <stdio.h>\r
33 #include <stdlib.h>\r
34 #include <string.h>\r
35 #include <mbstring.h>\r
36 #include <malloc.h>\r
37 #include <windowsx.h>\r
38 #include <commctrl.h>\r
39 #include <stdarg.h>\r
40 #include <winsock.h>\r
41 \r
42 #include "common.h"\r
43 #include "resource.h"\r
44 \r
45 \r
46 /*===== プロトタイプ =====*/\r
47 \r
48 static void AddOpenMenu(HMENU hMenu, UINT Flg);\r
49 static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
50 \r
51 /* 2007/09/21 sunasunamix  ここから *********************/\r
52 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
53 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
54 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
55 /********************************************* ここまで */\r
56 \r
57 \r
58 /*===== 外部参照 =====*/\r
59 \r
60 extern int SepaWidth;\r
61 extern int RemoteWidth;\r
62 \r
63 extern int CancelFlg;\r
64 \r
65 /* 設定値 */\r
66 extern int DotFile;\r
67 extern char AsciiExt[ASCII_EXT_LEN+1];\r
68 extern int TransMode;\r
69 extern int ListType;\r
70 extern int LocalWidth;\r
71 extern char ViewerName[VIEWERS][FMAX_PATH+1];\r
72 extern int TransMode;\r
73 extern int SortSave;\r
74 \r
75 /*===== ローカルなワーク =====*/\r
76 \r
77 static HWND hWndTbarMain = NULL;\r
78 static HWND hWndTbarLocal = NULL;\r
79 static HWND hWndTbarRemote = NULL;\r
80 static HWND hWndDirLocal = NULL;\r
81 static HWND hWndDirRemote = NULL;\r
82 static HWND hWndDirLocalEdit = NULL;\r
83 static HWND hWndDirRemoteEdit = NULL;\r
84 \r
85 static WNDPROC HistEditBoxProcPtr;\r
86 \r
87 static HFONT DlgFont = NULL;\r
88 \r
89 static int TmpTransMode;\r
90 static int TmpHostKanjiCode;\r
91 static int TmpHostKanaCnv;\r
92 \r
93 // TODO: ローカルの漢字コードをShift_JIS以外にも対応\r
94 static int TmpLocalKanjiCode;\r
95 \r
96 static int TmpLocalFileSort;\r
97 static int TmpLocalDirSort;\r
98 static int TmpRemoteFileSort;\r
99 static int TmpRemoteDirSort;\r
100 \r
101 static int SyncMove = NO;\r
102 \r
103 static int HideUI = NO;\r
104 \r
105 \r
106 /* 2007/09/21 sunasunamix  ここから *********************/\r
107 static WNDPROC pOldTbarMainProc   = NULL;\r
108 static WNDPROC pOldTbarLocalProc  = NULL;\r
109 static WNDPROC pOldTbarRemoteProc = NULL;\r
110 /********************************************* ここまで */\r
111 \r
112 \r
113 /* 以前、コンボボックスにカレントフォルダを憶えさせていた流れで */\r
114 /* このファイルでカレントフォルダを憶えさせる */\r
115 static char LocalCurDir[FMAX_PATH+1];\r
116 static char RemoteCurDir[FMAX_PATH+1];\r
117 \r
118 \r
119 /* メインのツールバー */\r
120 static TBBUTTON TbarDataMain[] = {\r
121         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
122         { 0,  MENU_CONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
123         { 16, MENU_QUICK, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
124         { 1,  MENU_DISCONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
125         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
126         { 2,  MENU_DOWNLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
127         { 3,  MENU_UPLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
128         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
129         { 24, MENU_MIRROR_UPLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
130         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
131         { 4,  MENU_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
132         { 5,  MENU_RENAME, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
133         { 6,  MENU_MKDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
134         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
135         { 7,  MENU_TEXT, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
136         { 8,  MENU_BINARY, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
137         { 17, MENU_AUTO, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
138         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
139         { 27, MENU_L_KNJ_SJIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
140         { 20, MENU_L_KNJ_EUC, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
141         { 21, MENU_L_KNJ_JIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
142         { 28, MENU_L_KNJ_UTF8N, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
143         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
144         { 27, MENU_KNJ_SJIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
145         { 20, MENU_KNJ_EUC, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
146         { 21, MENU_KNJ_JIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
147         { 28, MENU_KNJ_UTF8N, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
148         { 22, MENU_KNJ_NONE, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
149         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
150         { 23, MENU_KANACNV, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0 },\r
151         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
152         { 15, MENU_REFRESH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
153         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
154         { 18, MENU_LIST, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
155         { 19, MENU_REPORT, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
156         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
157         { 25, MENU_SYNC, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0 },\r
158         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
159         { 26, MENU_ABORT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }\r
160 };\r
161 \r
162 /* ローカル側のツールバー */\r
163 static TBBUTTON TbarDataLocal[] = {\r
164         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
165         { 0, MENU_LOCAL_UPDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
166         { 1, MENU_LOCAL_CHDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
167         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 }\r
168 };\r
169 \r
170 /* ホスト側のツールバー */\r
171 static TBBUTTON TbarDataRemote[] = {\r
172         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
173         { 0, MENU_REMOTE_UPDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
174         { 1, MENU_REMOTE_CHDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
175         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 }\r
176 };\r
177 \r
178 /* 全ボタン/メニュー項目 */\r
179 static const int HideMenus[] = {\r
180         MENU_CONNECT,           MENU_QUICK,                     MENU_DISCONNECT,\r
181         MENU_SET_CONNECT,       MENU_IMPORT_WS,         MENU_EXIT,\r
182         MENU_DOWNLOAD,          MENU_UPLOAD,            MENU_DOWNLOAD_AS,       MENU_MIRROR_UPLOAD,\r
183         MENU_UPLOAD_AS,         MENU_DOWNLOAD_NAME,     MENU_MIRROR_UPLOAD,\r
184         MENU_FILESIZE,          MENU_DELETE,            MENU_RENAME,\r
185         MENU_CHMOD,                     MENU_MKDIR,                     MENU_SOMECMD,\r
186         MENU_SYNC,\r
187         MENU_BMARK_ADD,         MENU_BMARK_ADD_LOCAL, MENU_BMARK_ADD_BOTH,\r
188         MENU_BMARK_EDIT,\r
189         MENU_FILTER,            MENU_FIND,                      MENU_FINDNEXT,          MENU_SELECT,\r
190         MENU_SELECT_ALL,        MENU_LIST,                      MENU_REPORT,\r
191         MENU_SORT,                      MENU_DOTFILE,\r
192         MENU_DIRINFO,           MENU_TASKINFO,          MENU_REFRESH,\r
193         MENU_OPTION,\r
194         MENU_OTPCALC,\r
195         MENU_HELP,                      MENU_HELP_TROUBLE,      MENU_ABOUT,\r
196         MENU_REGINIT,\r
197         MENU_TEXT,                      MENU_BINARY,            MENU_AUTO,\r
198         MENU_KNJ_SJIS,          MENU_KNJ_EUC,           MENU_KNJ_JIS,           MENU_KNJ_UTF8N,         MENU_KNJ_NONE,\r
199         MENU_L_KNJ_SJIS,        MENU_L_KNJ_EUC,         MENU_L_KNJ_JIS,         MENU_L_KNJ_UTF8N,\r
200         MENU_KANACNV,\r
201         MENU_LOCAL_UPDIR,       MENU_LOCAL_CHDIR,\r
202         MENU_REMOTE_UPDIR,      MENU_REMOTE_CHDIR,\r
203         MENU_HIST_1,            MENU_HIST_2,            MENU_HIST_3,            MENU_HIST_4,\r
204         MENU_HIST_5,            MENU_HIST_6,            MENU_HIST_7,            MENU_HIST_8,\r
205         MENU_HIST_9,            MENU_HIST_10,           MENU_HIST_11,           MENU_HIST_12,\r
206         MENU_HIST_13,           MENU_HIST_14,           MENU_HIST_15,           MENU_HIST_16,\r
207         MENU_HIST_17,           MENU_HIST_18,           MENU_HIST_19,           MENU_HIST_20\r
208 };\r
209 \r
210 \r
211 \r
212 /*----- ツールバーを作成する --------------------------------------------------\r
213 *\r
214 *       Parameter\r
215 *               HWND hWnd : 親ウインドウのウインドウハンドル\r
216 *               HINSTANCE hInst : インスタンスハンドル\r
217 *\r
218 *       Return Value\r
219 *               int ステータス\r
220 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
221 *----------------------------------------------------------------------------*/\r
222 \r
223 int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)\r
224 {\r
225         int Sts;\r
226         RECT Rect1;\r
227         char Tmp[FMAX_PATH+1];\r
228         char *Pos;\r
229         int Tmp2;\r
230         DWORD NoDrives;\r
231 \r
232         /*===== メインのツールバー =====*/\r
233 \r
234         hWndTbarMain = CreateToolbarEx(\r
235                                 hWnd,\r
236                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_TOP,\r
237                                 1,\r
238                                 27,\r
239                                 hInst,\r
240                                 main_toolbar_bmp,\r
241                                 TbarDataMain,\r
242                                 sizeof(TbarDataMain)/sizeof(TBBUTTON),\r
243                                 16,16,\r
244                                 16,16,\r
245                                 sizeof(TBBUTTON));\r
246 \r
247         if(hWndTbarMain != NULL)\r
248         {\r
249                 /* 2007/09/21 sunasunamix  ここから *********************/\r
250                 pOldTbarMainProc = (WNDPROC)SetWindowLong(hWndTbarMain, GWL_WNDPROC, (DWORD)CountermeasureTbarMainProc);\r
251                 /********************************************* ここまで */\r
252 \r
253                 GetClientRect(hWnd, &Rect1);\r
254                 MoveWindow(hWndTbarMain, 0, 0, Rect1.right, TOOLWIN_HEIGHT, FALSE);\r
255         }\r
256 \r
257         /*===== ローカルのツールバー =====*/\r
258 \r
259         hWndTbarLocal = CreateToolbarEx(\r
260                                 hWnd,\r
261                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE,\r
262                                 2,\r
263                                 2,\r
264                                 hInst,\r
265                                 remote_toolbar_bmp,\r
266                                 TbarDataLocal,\r
267                                 sizeof(TbarDataLocal)/sizeof(TBBUTTON),\r
268                                 16,16,\r
269                                 16,16,\r
270                                 sizeof(TBBUTTON));\r
271 \r
272         if(hWndTbarLocal != NULL)\r
273         {\r
274                 /* 2007/09/21 sunasunamix  ここから *********************/\r
275                 pOldTbarLocalProc = (WNDPROC)SetWindowLong(hWndTbarLocal, GWL_WNDPROC, (DWORD)CountermeasureTbarLocalProc);\r
276                 /********************************************* ここまで */\r
277 \r
278                 MoveWindow(hWndTbarLocal, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, FALSE);\r
279 \r
280                 /*===== ローカルのディレクトリ名ウインドウ =====*/\r
281 \r
282                 SendMessage(hWndTbarLocal, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
283 #ifndef ENGLISH\r
284                 DlgFont = CreateFont(Rect1.bottom-Rect1.top-8, 0, 0, 0, 0, FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
285 #else\r
286                 DlgFont = CreateFont(Rect1.bottom-Rect1.top-8, 0, 0, 0, 0, FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
287 #endif\r
288 \r
289                 hWndDirLocal = CreateWindowEx(WS_EX_CLIENTEDGE,\r
290                                         "COMBOBOX", "",\r
291                                         WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL,\r
292                                         Rect1.right, Rect1.top, LocalWidth - Rect1.right, 200,\r
293                                         hWndTbarLocal, (HMENU)COMBO_LOCAL, hInst, NULL);\r
294 \r
295                 if(hWndDirLocal != NULL)\r
296                 {\r
297                         /* エディットコントロールを探す */\r
298                         hWndDirLocalEdit = GetWindow(hWndDirLocal, GW_CHILD);\r
299                         if(hWndDirLocalEdit != NULL)\r
300                                 HistEditBoxProcPtr = (WNDPROC)SetWindowLong(hWndDirLocalEdit, GWL_WNDPROC, (LONG)HistEditBoxWndProc);\r
301 \r
302                         SendMessage(hWndDirLocal, WM_SETFONT, (WPARAM)DlgFont, MAKELPARAM(TRUE, 0));\r
303                         SendMessage(hWndDirLocal, CB_LIMITTEXT, FMAX_PATH, 0);\r
304 \r
305                         /* ドライブ名をセットしておく */\r
306                         GetLogicalDriveStrings(FMAX_PATH, Tmp);\r
307                         NoDrives = LoadHideDriveListRegistory();\r
308                         Pos = Tmp;\r
309                         while(*Pos != NUL)\r
310                         {\r
311                                 Tmp2 = toupper(*Pos) - 'A';\r
312                                 if((NoDrives & (0x00000001 << Tmp2)) == 0)\r
313                                         SetLocalDirHist(Pos);\r
314                                 Pos = strchr(Pos, NUL) + 1;\r
315                         }\r
316                         SendMessage(hWndDirLocal, CB_SETCURSEL, 0, 0);\r
317                 }\r
318         }\r
319 \r
320         /*===== ホストのツールバー =====*/\r
321 \r
322         hWndTbarRemote = CreateToolbarEx(\r
323                                 hWnd,\r
324                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE,\r
325                                 3,\r
326                                 2,\r
327                                 hInst,\r
328                                 remote_toolbar_bmp,\r
329                                 TbarDataRemote,\r
330                                 sizeof(TbarDataRemote)/sizeof(TBBUTTON),\r
331                                 16,16,\r
332                                 16,16,\r
333                                 sizeof(TBBUTTON));\r
334 \r
335         if(hWndTbarRemote != NULL)\r
336         {\r
337                 /* 2007/09/21 sunasunamix  ここから *********************/\r
338                 pOldTbarRemoteProc = (WNDPROC)SetWindowLong(hWndTbarRemote, GWL_WNDPROC, (DWORD)CountermeasureTbarRemoteProc);\r
339                 /********************************************* ここまで */\r
340 \r
341                 MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, FALSE);\r
342 \r
343                 /*===== ホストのディレクトリ名ウインドウ =====*/\r
344 \r
345                 SendMessage(hWndTbarRemote, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
346                 hWndDirRemote = CreateWindowEx(WS_EX_CLIENTEDGE,\r
347                                         "COMBOBOX", "",\r
348                                         WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL,\r
349                                         Rect1.right, Rect1.top, RemoteWidth - Rect1.right, 200,\r
350                                         hWndTbarRemote, (HMENU)COMBO_REMOTE, hInst, NULL);\r
351 \r
352                 if(hWndDirRemote != NULL)\r
353                 {\r
354                         /* エディットコントロールを探す */\r
355                         hWndDirRemoteEdit = GetWindow(hWndDirRemote, GW_CHILD);\r
356                         if(hWndDirRemoteEdit != NULL)\r
357                                 HistEditBoxProcPtr = (WNDPROC)SetWindowLong(hWndDirRemoteEdit, GWL_WNDPROC, (LONG)HistEditBoxWndProc);\r
358 \r
359                         SendMessage(hWndDirRemote, WM_SETFONT, (WPARAM)DlgFont, MAKELPARAM(TRUE, 0));\r
360                         SendMessage(hWndDirRemote, CB_LIMITTEXT, FMAX_PATH, 0);\r
361                         SendMessage(hWndDirRemote, CB_SETCURSEL, 0, 0);\r
362                 }\r
363         }\r
364 \r
365         Sts = FFFTP_SUCCESS;\r
366         if((hWndTbarMain == NULL) ||\r
367            (hWndTbarLocal == NULL) ||\r
368            (hWndTbarRemote == NULL) ||\r
369            (hWndDirLocal == NULL) ||\r
370            (hWndDirRemote == NULL))\r
371         {\r
372                 Sts = FFFTP_FAIL;\r
373         }\r
374         return(Sts);\r
375 }\r
376 \r
377 \r
378 \r
379 \r
380 \r
381 static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
382 {\r
383         char Tmp[FMAX_PATH+1];\r
384 \r
385         switch (message)\r
386         {\r
387                 case WM_CHAR :\r
388                         if(wParam == 0x0D)              /* リターンキーが押された */\r
389                         {\r
390                                 if(hWnd == hWndDirLocalEdit)\r
391                                 {\r
392                                         SendMessage(hWndDirLocalEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
393                                         DoLocalCWD(Tmp);\r
394                                         GetLocalDirForWnd();\r
395                                 }\r
396                                 else\r
397                                 {\r
398                                         SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
399                                         if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
400                                         {\r
401                                                 if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY)\r
402                                                         GetRemoteDirForWnd(CACHE_NORMAL, &CancelFlg);\r
403                                         }\r
404                                 }\r
405                         }\r
406                         else if(wParam == 0x09)         /* TABキーが押された */\r
407                         {\r
408                                 if(hWnd == hWndDirLocalEdit)\r
409                                 {\r
410                                         SetFocus(GetLocalHwnd());\r
411                                 }\r
412                                 else\r
413                                 {\r
414                                         SetFocus(GetRemoteHwnd());\r
415                                 }\r
416                         }\r
417                         else\r
418                                 return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
419                         break;\r
420 \r
421                 default :\r
422                         return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
423         }\r
424     return(0L);\r
425 }\r
426 \r
427 \r
428 \r
429 \r
430 /*----- ツールバーを削除 ------------------------------------------------------\r
431 *\r
432 *       Parameter\r
433 *               なし\r
434 *\r
435 *       Return Value\r
436 *               なし\r
437 *----------------------------------------------------------------------------*/\r
438 \r
439 void DeleteToolBarWindow(void)\r
440 {\r
441 //      if(DlgFont != NULL)\r
442 //              DeleteObject(DlgFont);\r
443 \r
444         if(hWndTbarMain != NULL)\r
445                 DestroyWindow(hWndTbarMain);\r
446         if(hWndTbarLocal != NULL)\r
447                 DestroyWindow(hWndTbarLocal);\r
448         if(hWndTbarRemote != NULL)\r
449                 DestroyWindow(hWndTbarRemote);\r
450         if(hWndDirLocal != NULL)\r
451                 DestroyWindow(hWndDirLocal);\r
452         if(hWndDirRemote != NULL)\r
453                 DestroyWindow(hWndDirRemote);\r
454         return;\r
455 }\r
456 \r
457 \r
458 /*----- メインのツールバーのウインドウハンドルを返す --------------------------\r
459 *\r
460 *       Parameter\r
461 *               なし\r
462 *\r
463 *       Return Value\r
464 *               HWND ウインドウハンドル\r
465 *----------------------------------------------------------------------------*/\r
466 \r
467 HWND GetMainTbarWnd(void)\r
468 {\r
469         return(hWndTbarMain);\r
470 }\r
471 \r
472 \r
473 /*----- ローカル側のヒストリウインドウのウインドウハンドルを返す --------------\r
474 *\r
475 *       Parameter\r
476 *               なし\r
477 *\r
478 *       Return Value\r
479 *               HWND ウインドウハンドル\r
480 *----------------------------------------------------------------------------*/\r
481 \r
482 HWND GetLocalHistHwnd(void)\r
483 {\r
484         return(hWndDirLocal);\r
485 }\r
486 \r
487 \r
488 /*----- ホスト側のヒストリウインドウのウインドウハンドルを返す ----------------\r
489 *\r
490 *       Parameter\r
491 *               なし\r
492 *\r
493 *       Return Value\r
494 *               HWND ウインドウハンドル\r
495 *----------------------------------------------------------------------------*/\r
496 \r
497 HWND GetRemoteHistHwnd(void)\r
498 {\r
499         return(hWndDirRemote);\r
500 }\r
501 \r
502 \r
503 /*----- ローカル側のヒストリエディットのウインドウハンドルを返す --------------\r
504 *\r
505 *       Parameter\r
506 *               なし\r
507 *\r
508 *       Return Value\r
509 *               HWND ウインドウハンドル\r
510 *----------------------------------------------------------------------------*/\r
511 \r
512 HWND GetLocalHistEditHwnd(void)\r
513 {\r
514         return(hWndDirLocalEdit);\r
515 }\r
516 \r
517 \r
518 /*----- ホスト側のヒストリエディットのウインドウハンドルを返す ----------------\r
519 *\r
520 *       Parameter\r
521 *               なし\r
522 *\r
523 *       Return Value\r
524 *               HWND ウインドウハンドル\r
525 *----------------------------------------------------------------------------*/\r
526 \r
527 HWND GetRemoteHistEditHwnd(void)\r
528 {\r
529         return(hWndDirRemoteEdit);\r
530 }\r
531 \r
532 \r
533 /*----- ローカル側のツールバーのウインドウハンドルを返す ----------------------\r
534 *\r
535 *       Parameter\r
536 *               なし\r
537 *\r
538 *       Return Value\r
539 *               HWND ウインドウハンドル\r
540 *----------------------------------------------------------------------------*/\r
541 \r
542 HWND GetLocalTbarWnd(void)\r
543 {\r
544         return(hWndTbarLocal);\r
545 }\r
546 \r
547 \r
548 /*----- ホスト側のツールバーのウインドウハンドルを返す ------------------------\r
549 *\r
550 *       Parameter\r
551 *               なし\r
552 *\r
553 *       Return Value\r
554 *               HWND ウインドウハンドル\r
555 *----------------------------------------------------------------------------*/\r
556 \r
557 HWND GetRemoteTbarWnd(void)\r
558 {\r
559         return(hWndTbarRemote);\r
560 }\r
561 \r
562 \r
563 /*----- HideUI の状態を返す ---------------------------------------------------\r
564 *\r
565 *       Parameter\r
566 *               なし\r
567 *\r
568 *       Return Value\r
569 *               int HideUI の状態\r
570 *----------------------------------------------------------------------------*/\r
571 \r
572 int GetHideUI(void)\r
573 {\r
574         return(HideUI);\r
575 }\r
576 \r
577 \r
578 /*----- ツールボタン/メニューのハイド処理 ------------------------------------\r
579 *\r
580 *       Parameter\r
581 *               なし\r
582 *\r
583 *       Return Value\r
584 *               なし\r
585 *----------------------------------------------------------------------------*/\r
586 \r
587 void MakeButtonsFocus(void)\r
588 {\r
589         HWND hWndFocus;\r
590         HWND hWndMain;\r
591         int Count;\r
592         int Win;\r
593 \r
594         if(HideUI == NO)\r
595         {\r
596                 hWndMain = GetMainHwnd();\r
597                 hWndFocus = GetFocus();\r
598                 Win = WIN_LOCAL;\r
599                 if(hWndFocus == GetRemoteHwnd())\r
600                         Win = WIN_REMOTE;\r
601 \r
602                 Count = GetSelectedCount(Win);\r
603 \r
604                 if(AskConnecting() == YES)\r
605                 {\r
606                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_ENABLED);\r
607                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_ENABLED);\r
608                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_ENABLED);\r
609                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_ENABLED);\r
610                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_ENABLED);\r
611                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_ENABLED);\r
612                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_ENABLED);\r
613                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_ENABLED);\r
614                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(TRUE, 0));\r
615                 }\r
616                 else\r
617                 {\r
618                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_GRAYED);\r
619                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_GRAYED);\r
620                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_GRAYED);\r
621                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_GRAYED);\r
622                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_GRAYED);\r
623                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_GRAYED);\r
624                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_GRAYED);\r
625                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_GRAYED);\r
626                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(FALSE, 0));\r
627                 }\r
628 \r
629                 if(hWndFocus == GetLocalHwnd())\r
630                 {\r
631                         if((AskConnecting() == YES) && (Count > 0))\r
632                         {\r
633                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(TRUE, 0));\r
634                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_ENABLED);\r
635                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_ENABLED);\r
636                         }\r
637                         else\r
638                         {\r
639                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
640                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
641                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
642                         }\r
643                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
644                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
645                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
646                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
647                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
648                 }\r
649 \r
650                 if(hWndFocus == GetRemoteHwnd())\r
651                 {\r
652                         if(AskConnecting() == YES)\r
653                         {\r
654                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_ENABLED);\r
655                         }\r
656                         else\r
657                         {\r
658                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
659                         }\r
660 \r
661                         if((AskConnecting() == YES) && (Count > 0))\r
662                         {\r
663                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(TRUE, 0));\r
664                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_ENABLED);\r
665                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_ENABLED);\r
666                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_ENABLED);\r
667                         }\r
668                         else\r
669                         {\r
670                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
671                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
672                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
673                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
674                         }\r
675                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
676                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
677                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
678                 }\r
679 \r
680                 if((hWndFocus == GetLocalHwnd()) || (hWndFocus == GetRemoteHwnd()))\r
681                 {\r
682                         if(Count > 0)\r
683                         {\r
684                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(TRUE, 0));\r
685                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_ENABLED);\r
686                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(TRUE, 0));\r
687                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_ENABLED);\r
688 \r
689                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_ENABLED);\r
690 \r
691                         }\r
692                         else\r
693                         {\r
694                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
695                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
696                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
697                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
698 \r
699                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
700                         }\r
701 \r
702                         if((hWndFocus == GetLocalHwnd()) || (AskConnecting() == YES))\r
703                         {\r
704                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(TRUE, 0));\r
705                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_ENABLED);\r
706                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_ENABLED);\r
707                         }\r
708                         else\r
709                         {\r
710                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
711                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
712                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
713                         }\r
714                 }\r
715                 else\r
716                 {\r
717                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
718                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
719                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
720                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
721                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
722                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
723                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
724                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
725                         EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
726                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
727                         EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
728                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
729                         EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
730                         EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
731                         EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
732                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
733                 }\r
734         }\r
735         return;\r
736 }\r
737 \r
738 \r
739 /*----- ユーザの操作を禁止する ------------------------------------------------\r
740 *\r
741 *       Parameter\r
742 *               なし\r
743 *\r
744 *       Return Value\r
745 *               なし\r
746 *----------------------------------------------------------------------------*/\r
747 \r
748 void DisableUserOpe(void)\r
749 {\r
750         int i;\r
751 \r
752         HideUI = YES;\r
753 \r
754         for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
755         {\r
756                 EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_GRAYED);\r
757                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
758                 SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
759                 SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
760         }\r
761 \r
762         EnableWindow(hWndDirLocal, FALSE);\r
763         EnableWindow(hWndDirRemote, FALSE);\r
764 \r
765         return;\r
766 }\r
767 \r
768 \r
769 /*----- ユーザの操作を許可する ------------------------------------------------\r
770 *\r
771 *       Parameter\r
772 *               なし\r
773 *\r
774 *       Return Value\r
775 *               なし\r
776 *----------------------------------------------------------------------------*/\r
777 \r
778 void EnableUserOpe(void)\r
779 {\r
780         int i;\r
781 \r
782         if(HideUI == YES)\r
783         {\r
784                 for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
785                 {\r
786                         EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_ENABLED);\r
787                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
788                         SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
789                         SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
790                 }\r
791                 EnableWindow(hWndDirLocal, TRUE);\r
792                 EnableWindow(hWndDirRemote, TRUE);\r
793 \r
794                 // 選択不可な漢字コードのボタンが表示されるバグを修正\r
795                 HideHostKanjiButton();\r
796                 HideLocalKanjiButton();\r
797 \r
798                 HideUI = NO;\r
799 \r
800                 MakeButtonsFocus();\r
801         }\r
802         return;\r
803 }\r
804 \r
805 \r
806 /*----- ユーザの操作が禁止されているかどうかを返す ----------------------------\r
807 *\r
808 *       Parameter\r
809 *               なし\r
810 *\r
811 *       Return Value\r
812 *               int ステータス\r
813 *                       YES=禁止されている/NO\r
814 *----------------------------------------------------------------------------*/\r
815 \r
816 int AskUserOpeDisabled(void)\r
817 {\r
818         return(HideUI);\r
819 }\r
820 \r
821 \r
822 /*===================================================\r
823 *                       転送モード\r
824 *===================================================*/\r
825 \r
826 /*----- 転送モードを設定する --------------------------------------------------\r
827 *\r
828 *       Parameter\r
829 *               int Mode : 転送モード (TYPE_xx)\r
830 *\r
831 *       Return Value\r
832 *               なし\r
833 *----------------------------------------------------------------------------*/\r
834 \r
835 void SetTransferTypeImm(int Mode)\r
836 {\r
837         TmpTransMode = Mode;\r
838         HideHostKanjiButton();\r
839         HideLocalKanjiButton();\r
840         return;\r
841 }\r
842 \r
843 \r
844 /*----- メニューにより転送モードを設定する ------------------------------------\r
845 *\r
846 *       Parameter\r
847 *               int Type : 転送モード (MENU_xxxx)\r
848 *\r
849 *       Return Value\r
850 *               なし\r
851 *----------------------------------------------------------------------------*/\r
852 \r
853 void SetTransferType(int Type)\r
854 {\r
855         switch(Type)\r
856         {\r
857                 case MENU_TEXT :\r
858                         TmpTransMode = TYPE_A;\r
859                         break;\r
860 \r
861                 case MENU_BINARY :\r
862                         TmpTransMode = TYPE_I;\r
863                         break;\r
864 \r
865                 default :\r
866                         TmpTransMode = TYPE_X;\r
867                         break;\r
868         }\r
869         HideHostKanjiButton();\r
870         HideLocalKanjiButton();\r
871         return;\r
872 }\r
873 \r
874 \r
875 /*----- 転送モードにしたがってボタンを表示する --------------------------------\r
876 *\r
877 *       Parameter\r
878 *               なし\r
879 *\r
880 *       Return Value\r
881 *               なし\r
882 *----------------------------------------------------------------------------*/\r
883 \r
884 void DispTransferType(void)\r
885 {\r
886         switch(TmpTransMode)\r
887         {\r
888                 case TYPE_A :\r
889                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_TEXT, MAKELONG(TRUE, 0));\r
890                         break;\r
891 \r
892                 case TYPE_I :\r
893                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_BINARY, MAKELONG(TRUE, 0));\r
894                         break;\r
895 \r
896                 default :\r
897                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_AUTO, MAKELONG(TRUE, 0));\r
898                         break;\r
899         }\r
900         return;\r
901 }\r
902 \r
903 \r
904 /*----- 設定上の転送モードを返す ----------------------------------------------\r
905 *\r
906 *       Parameter\r
907 *               なし\r
908 *\r
909 *       Return Value\r
910 *               int 転送モード (TYPE_xx)\r
911 *----------------------------------------------------------------------------*/\r
912 \r
913 int AskTransferType(void)\r
914 {\r
915         return(TmpTransMode);\r
916 }\r
917 \r
918 \r
919 /*----- 実際の転送モードを返す ------------------------------------------------\r
920 *\r
921 *       Parameter\r
922 *               char Fname : ファイル名\r
923 *               int Type : 設定上の転送モード (TYPE_xx)\r
924 *\r
925 *       Return Value\r
926 *               int 転送モード (TYPE_xx)\r
927 *----------------------------------------------------------------------------*/\r
928 \r
929 int AskTransferTypeAssoc(char *Fname, int Type)\r
930 {\r
931         int Ret;\r
932         char *Pos;\r
933         char *Name;\r
934 \r
935         Ret = Type;\r
936         if(Ret == TYPE_X)\r
937         {\r
938                 Ret = TYPE_I;\r
939                 if(StrMultiLen(AsciiExt) > 0)\r
940                 {\r
941                         Name = GetFileName(Fname);\r
942                         Pos = AsciiExt;\r
943                         while(*Pos != NUL)\r
944                         {\r
945                                 if(CheckFname(Name, Pos) == FFFTP_SUCCESS)\r
946                                 {\r
947                                         Ret = TYPE_A;\r
948                                         break;\r
949                                 }\r
950                                 Pos += strlen(Pos) + 1;\r
951                         }\r
952                 }\r
953         }\r
954         return(Ret);\r
955 }\r
956 \r
957 \r
958 /*----- 転送モードを保存する --------------------------------------------------\r
959 *\r
960 *       Parameter\r
961 *               なし\r
962 *\r
963 *       Return Value\r
964 *               なし\r
965 *\r
966 *       Note\r
967 *               現在の転送モードがレジストリに保存される\r
968 *----------------------------------------------------------------------------*/\r
969 \r
970 void SaveTransferType(void)\r
971 {\r
972         TransMode = TmpTransMode;\r
973         return;\r
974 }\r
975 \r
976 \r
977 /*===================================================\r
978 *                       漢字モード\r
979 *===================================================*/\r
980 \r
981 /*----- ホストの漢字モードをセットする ----------------------------------------\r
982 *\r
983 *       Parameter\r
984 *               int Mode : 漢字モード (KANJI_xxxx)\r
985 *\r
986 *       Return Value\r
987 *               なし\r
988 *----------------------------------------------------------------------------*/\r
989 \r
990 void SetHostKanjiCodeImm(int Mode)\r
991 {\r
992         TmpHostKanjiCode = Mode;\r
993         DispHostKanjiCode();\r
994         HideHostKanjiButton();\r
995         return;\r
996 }\r
997 \r
998 \r
999 /*----- メニューによりホストの漢字モードを設定する -----------------------------\r
1000 *\r
1001 *       Parameter\r
1002 *               int Type : 漢字モード (MENU_xxxx)\r
1003 *\r
1004 *       Return Value\r
1005 *               なし\r
1006 *----------------------------------------------------------------------------*/\r
1007 \r
1008 void SetHostKanjiCode(int Type)\r
1009 {\r
1010         switch(Type)\r
1011         {\r
1012                 // UTF-8対応\r
1013                 case MENU_KNJ_SJIS :\r
1014                         TmpHostKanjiCode = KANJI_SJIS;\r
1015                         break;\r
1016 \r
1017                 case MENU_KNJ_EUC :\r
1018                         TmpHostKanjiCode = KANJI_EUC;\r
1019                         break;\r
1020 \r
1021                 case MENU_KNJ_JIS :\r
1022                         TmpHostKanjiCode = KANJI_JIS;\r
1023                         break;\r
1024 \r
1025                 case MENU_KNJ_UTF8N :\r
1026                         TmpHostKanjiCode = KANJI_UTF8N;\r
1027                         break;\r
1028 \r
1029                 default :\r
1030                         TmpHostKanjiCode = KANJI_NOCNV;\r
1031                         break;\r
1032         }\r
1033         DispHostKanjiCode();\r
1034         HideHostKanjiButton();\r
1035         return;\r
1036 }\r
1037 \r
1038 \r
1039 /*----- ホストの漢字モードにしたがってボタンを表示する ------------------------\r
1040 *\r
1041 *       Parameter\r
1042 *               なし\r
1043 *\r
1044 *       Return Value\r
1045 *               なし\r
1046 *----------------------------------------------------------------------------*/\r
1047 \r
1048 void DispHostKanjiCode(void)\r
1049 {\r
1050         switch(TmpHostKanjiCode)\r
1051         {\r
1052                 // UTF-8対応\r
1053                 case KANJI_SJIS :\r
1054                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1055                         break;\r
1056 \r
1057                 case KANJI_EUC :\r
1058                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1059                         break;\r
1060 \r
1061                 case KANJI_JIS :\r
1062                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1063                         break;\r
1064 \r
1065                 case KANJI_UTF8N :\r
1066                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1067                         break;\r
1068 \r
1069                 default :\r
1070                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1071                         break;\r
1072         }\r
1073         return;\r
1074 }\r
1075 \r
1076 \r
1077 /*----- ホストの漢字モードを返す ----------------------------------------------\r
1078 *\r
1079 *       Parameter\r
1080 *               なし\r
1081 *\r
1082 *       Return Value\r
1083 *               int 漢字モード (KANJI_xxxx)\r
1084 *----------------------------------------------------------------------------*/\r
1085 \r
1086 int AskHostKanjiCode(void)\r
1087 {\r
1088         return(TmpHostKanjiCode);\r
1089 }\r
1090 \r
1091 \r
1092 /*----- 漢字モードボタンのハイド処理を行う ------------------------------------\r
1093 *\r
1094 *       Parameter\r
1095 *               なし\r
1096 *\r
1097 *       Return Value\r
1098 *               なし\r
1099 *----------------------------------------------------------------------------*/\r
1100 \r
1101 void HideHostKanjiButton(void)\r
1102 {\r
1103         switch(TmpTransMode)\r
1104         {\r
1105                 // UTF-8対応\r
1106                 case TYPE_I : \r
1107                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1108                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(FALSE, 0));\r
1109                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(FALSE, 0));\r
1110                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1111                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(FALSE, 0));\r
1112                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1113                         break;\r
1114 \r
1115                 default :\r
1116                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1117                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1118                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1119                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1120                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1121 //                      if(TmpHostKanjiCode != KANJI_NOCNV)\r
1122 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1123 //                      else\r
1124 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1125 //                      break;\r
1126                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1127                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1128                         switch(TmpHostKanjiCode)\r
1129                         {\r
1130                         case KANJI_SJIS:\r
1131                         case KANJI_JIS:\r
1132                         case KANJI_EUC:\r
1133                                 switch(TmpLocalKanjiCode)\r
1134                                 {\r
1135                                 case KANJI_SJIS:\r
1136                                 case KANJI_JIS:\r
1137                                 case KANJI_EUC:\r
1138                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1139                                         break;\r
1140                                 }\r
1141                                 break;\r
1142                         }\r
1143         }\r
1144         return;\r
1145 }\r
1146 \r
1147 \r
1148 // ローカルの漢字コード\r
1149 // テキストモード転送時に使用\r
1150 // ホスト側が無変換の時はローカルも無変換\r
1151 \r
1152 void SetLocalKanjiCodeImm(int Mode)\r
1153 {\r
1154         TmpLocalKanjiCode = Mode;\r
1155         DispLocalKanjiCode();\r
1156         HideLocalKanjiButton();\r
1157         return;\r
1158 }\r
1159 \r
1160 void SetLocalKanjiCode(int Type)\r
1161 {\r
1162         switch(Type)\r
1163         {\r
1164                 // UTF-8対応\r
1165                 case MENU_L_KNJ_SJIS :\r
1166                         TmpLocalKanjiCode = KANJI_SJIS;\r
1167                         break;\r
1168 \r
1169                 case MENU_L_KNJ_EUC :\r
1170                         TmpLocalKanjiCode = KANJI_EUC;\r
1171                         break;\r
1172 \r
1173                 case MENU_L_KNJ_JIS :\r
1174                         TmpLocalKanjiCode = KANJI_JIS;\r
1175                         break;\r
1176 \r
1177                 case MENU_L_KNJ_UTF8N :\r
1178                         TmpLocalKanjiCode = KANJI_UTF8N;\r
1179                         break;\r
1180         }\r
1181         DispLocalKanjiCode();\r
1182         HideLocalKanjiButton();\r
1183         return;\r
1184 }\r
1185 \r
1186 void DispLocalKanjiCode(void)\r
1187 {\r
1188         switch(TmpLocalKanjiCode)\r
1189         {\r
1190                 // UTF-8対応\r
1191                 case KANJI_SJIS :\r
1192                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1193                         break;\r
1194 \r
1195                 case KANJI_EUC :\r
1196                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1197                         break;\r
1198 \r
1199                 case KANJI_JIS :\r
1200                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1201                         break;\r
1202 \r
1203                 case KANJI_UTF8N :\r
1204                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1205                         break;\r
1206         }\r
1207         return;\r
1208 }\r
1209 \r
1210 int AskLocalKanjiCode(void)\r
1211 {\r
1212         return(TmpLocalKanjiCode);\r
1213 }\r
1214 \r
1215 void HideLocalKanjiButton(void)\r
1216 {\r
1217         switch(TmpTransMode)\r
1218         {\r
1219                 // UTF-8対応\r
1220                 case TYPE_I : \r
1221                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1222                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(FALSE, 0));\r
1223                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(FALSE, 0));\r
1224                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1225                         break;\r
1226 \r
1227                 default :\r
1228                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1229                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1230                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1231                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1232                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1233                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1234                         switch(TmpHostKanjiCode)\r
1235                         {\r
1236                         case KANJI_SJIS:\r
1237                         case KANJI_JIS:\r
1238                         case KANJI_EUC:\r
1239                                 switch(TmpLocalKanjiCode)\r
1240                                 {\r
1241                                 case KANJI_SJIS:\r
1242                                 case KANJI_JIS:\r
1243                                 case KANJI_EUC:\r
1244                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1245                                         break;\r
1246                                 }\r
1247                                 break;\r
1248                         }\r
1249                         break;\r
1250         }\r
1251         return;\r
1252 }\r
1253 \r
1254 \r
1255 /*===================================================\r
1256 *                       半角変換モード\r
1257 *===================================================*/\r
1258 \r
1259 /*----- ホストの半角変換モードを設定する --------------------------------------\r
1260 *\r
1261 *       Parameter\r
1262 *               int Mode : 半角変換モード(YES/NO)\r
1263 *\r
1264 *       Return Value\r
1265 *               なし\r
1266 *----------------------------------------------------------------------------*/\r
1267 \r
1268 void SetHostKanaCnvImm(int Mode)\r
1269 {\r
1270         TmpHostKanaCnv = Mode;\r
1271         DispHostKanaCnv();\r
1272         return;\r
1273 }\r
1274 \r
1275 \r
1276 /*----- ホストの半角変換モードを反転する --------------------------------------\r
1277 *\r
1278 *       Parameter\r
1279 *               なし\r
1280 *\r
1281 *       Return Value\r
1282 *               なし\r
1283 *----------------------------------------------------------------------------*/\r
1284 \r
1285 void SetHostKanaCnv(void)\r
1286 {\r
1287         TmpHostKanaCnv ^= 1;\r
1288         DispHostKanaCnv();\r
1289         return;\r
1290 }\r
1291 \r
1292 \r
1293 /*----- ホストの半角変換モードにしたがってボタンを表示する --------------------\r
1294 *\r
1295 *       Parameter\r
1296 *               なし\r
1297 *\r
1298 *       Return Value\r
1299 *               なし\r
1300 *----------------------------------------------------------------------------*/\r
1301 \r
1302 void DispHostKanaCnv(void)\r
1303 {\r
1304         if(TmpHostKanaCnv != 0)\r
1305                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1306         else\r
1307                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1308         return;\r
1309 }\r
1310 \r
1311 \r
1312 /*----- ホストの半角変換モードを返す ------------------------------------------\r
1313 *\r
1314 *       Parameter\r
1315 *               なし\r
1316 *\r
1317 *       Return Value\r
1318 *               int 半角変換モード\r
1319 *----------------------------------------------------------------------------*/\r
1320 \r
1321 int AskHostKanaCnv(void)\r
1322 {\r
1323         return(TmpHostKanaCnv);\r
1324 }\r
1325 \r
1326 \r
1327 /*===================================================\r
1328 *                       ソート方法\r
1329 *===================================================*/\r
1330 \r
1331 /*----- ソート方法をセットする ------------------------------------------------\r
1332 *\r
1333 *       Parameter\r
1334 *               int LFsort : ローカル側のファイルのソート方法 (SORT_xxx)\r
1335 *               int LDsort : ローカル側のディレクトリのソート方法 (SORT_xxx)\r
1336 *               int RFsort : ホスト側のファイルのソート方法 (SORT_xxx)\r
1337 *               int RDsort : ホスト側のディレクトリのソート方法 (SORT_xxx)\r
1338 *\r
1339 *       Return Value\r
1340 *               なし\r
1341 *----------------------------------------------------------------------------*/\r
1342 \r
1343 void SetSortTypeImm(int LFsort, int LDsort, int RFsort, int RDsort)\r
1344 {\r
1345         TmpLocalFileSort = LFsort;\r
1346         TmpLocalDirSort = LDsort;\r
1347         TmpRemoteFileSort = RFsort;\r
1348         TmpRemoteDirSort = RDsort;\r
1349         return;\r
1350 }\r
1351 \r
1352 \r
1353 /*----- リストビューのタブクリックによるソート方法のセット --------------------\r
1354 *\r
1355 *       Parameter\r
1356 *               int Win : ウインドウ番号\r
1357 *               int Tab : カラム番号\r
1358 *\r
1359 *       Return Value\r
1360 *               int ソート方法 (SORT_xxx)\r
1361 *----------------------------------------------------------------------------*/\r
1362 \r
1363 void SetSortTypeByColumn(int Win, int Tab)\r
1364 {\r
1365         if(Win == WIN_LOCAL)\r
1366         {\r
1367                 if((TmpLocalFileSort & SORT_MASK_ORD) == Tab)\r
1368                         TmpLocalFileSort ^= SORT_GET_ORD;\r
1369                 else\r
1370                         TmpLocalFileSort = Tab;\r
1371 \r
1372                 if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1373                         TmpLocalDirSort = TmpLocalFileSort;\r
1374                 else\r
1375                         TmpLocalDirSort = SORT_NAME;\r
1376         }\r
1377         else\r
1378         {\r
1379                 if(Tab != 4)\r
1380                 {\r
1381                         if((TmpRemoteFileSort & SORT_MASK_ORD) == Tab)\r
1382                                 TmpRemoteFileSort ^= SORT_GET_ORD;\r
1383                         else\r
1384                                 TmpRemoteFileSort = Tab;\r
1385 \r
1386                         if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1387                                 TmpRemoteDirSort = TmpRemoteFileSort;\r
1388                         else\r
1389                                 TmpRemoteDirSort = SORT_NAME;\r
1390                 }\r
1391         }\r
1392         return;\r
1393 }\r
1394 \r
1395 \r
1396 /*----- ソート方法を返す ------------------------------------------------------\r
1397 *\r
1398 *       Parameter\r
1399 *               int Name : どの部分か (ITEM_xxx)\r
1400 *\r
1401 *       Return Value\r
1402 *               int ソート方法 (SORT_xxx)\r
1403 *----------------------------------------------------------------------------*/\r
1404 \r
1405 int AskSortType(int Name)\r
1406 {\r
1407         int Ret;\r
1408 \r
1409         switch(Name)\r
1410         {\r
1411                 case ITEM_LFILE :\r
1412                         Ret = TmpLocalFileSort;\r
1413                         break;\r
1414 \r
1415                 case ITEM_LDIR :\r
1416                         Ret = TmpLocalDirSort;\r
1417                         break;\r
1418 \r
1419                 case ITEM_RFILE :\r
1420                         Ret = TmpRemoteFileSort;\r
1421                         break;\r
1422 \r
1423                 case ITEM_RDIR :\r
1424                         Ret = TmpRemoteDirSort;\r
1425                         break;\r
1426         }\r
1427         return(Ret);\r
1428 }\r
1429 \r
1430 \r
1431 /*----- ホストごとにソートを保存するかどうかをセットする-----------------------\r
1432 *\r
1433 *       Parameter\r
1434 *               int Sw : スイッチ (YES/NO)\r
1435 *\r
1436 *       Return Value\r
1437 *               なし\r
1438 *----------------------------------------------------------------------------*/\r
1439 \r
1440 void SetSaveSortToHost(int Sw)\r
1441 {\r
1442         SortSave = Sw;\r
1443         return;\r
1444 }\r
1445 \r
1446 \r
1447 /*----- ホストごとにソートを保存するかどうかを返す ----------------------------\r
1448 *\r
1449 *       Parameter\r
1450 *               なし\r
1451 *\r
1452 *       Return Value\r
1453 *               int スイッチ (YES/NO)\r
1454 *----------------------------------------------------------------------------*/\r
1455 \r
1456 int AskSaveSortToHost(void)\r
1457 {\r
1458         return(SortSave);\r
1459 }\r
1460 \r
1461 \r
1462 \r
1463 /*===================================================\r
1464 *                       リストモード\r
1465 *===================================================*/\r
1466 \r
1467 /*----- リストモードにしたがってボタンを表示する ------------------------------\r
1468 *\r
1469 *       Parameter\r
1470 *               なし\r
1471 *\r
1472 *       Return Value\r
1473 *               なし\r
1474 *----------------------------------------------------------------------------*/\r
1475 \r
1476 void DispListType(void)\r
1477 {\r
1478         HWND hWndMain;\r
1479 \r
1480         hWndMain = GetMainHwnd();\r
1481         switch(ListType)\r
1482         {\r
1483                 case LVS_LIST :\r
1484                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_LIST, MAKELONG(TRUE, 0));\r
1485                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_CHECKED);\r
1486                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_UNCHECKED);\r
1487                         break;\r
1488 \r
1489                 default :\r
1490                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_REPORT, MAKELONG(TRUE, 0));\r
1491                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_CHECKED);\r
1492                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_UNCHECKED);\r
1493                         break;\r
1494         }\r
1495         return;\r
1496 }\r
1497 \r
1498 \r
1499 /*===================================================\r
1500 *                       フォルダ同時移動モード\r
1501 *===================================================*/\r
1502 \r
1503 /*----- 転送モードを設定する --------------------------------------------------\r
1504 *\r
1505 *       Parameter\r
1506 *               int Mode : 転送モード (TYPE_xx)\r
1507 *\r
1508 *       Return Value\r
1509 *               なし\r
1510 *----------------------------------------------------------------------------*/\r
1511 \r
1512 void SetSyncMoveMode(int Mode)\r
1513 {\r
1514         SyncMove = Mode;\r
1515         DispSyncMoveMode();\r
1516         return;\r
1517 }\r
1518 \r
1519 \r
1520 /*----- フォルダ同時移動モードを切り替える ------------------------------------\r
1521 *\r
1522 *       Parameter\r
1523 *               なし\r
1524 *\r
1525 *       Return Value\r
1526 *               なし\r
1527 *----------------------------------------------------------------------------*/\r
1528 \r
1529 void ToggleSyncMoveMode(void)\r
1530 {\r
1531         SyncMove ^= 1;\r
1532         DispSyncMoveMode();\r
1533         return;\r
1534 }\r
1535 \r
1536 \r
1537 /*----- フォルダ同時移動を行うかどうかをによってメニュー/ボタンを表示 --------\r
1538 *\r
1539 *       Parameter\r
1540 *               なし\r
1541 *\r
1542 *       Return Value\r
1543 *               なし\r
1544 *----------------------------------------------------------------------------*/\r
1545 \r
1546 void DispSyncMoveMode(void)\r
1547 {\r
1548         if(SyncMove != 0)\r
1549         {\r
1550                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(TRUE, 0));\r
1551                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_CHECKED);\r
1552         }\r
1553         else\r
1554         {\r
1555                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(FALSE, 0));\r
1556                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_UNCHECKED);\r
1557         }\r
1558         return;\r
1559 }\r
1560 \r
1561 \r
1562 /*----- フォルダ同時移動モードを返す ------------------------------------------\r
1563 *\r
1564 *       Parameter\r
1565 *               なし\r
1566 *\r
1567 *       Return Value\r
1568 *               int 半角変換モード\r
1569 *----------------------------------------------------------------------------*/\r
1570 \r
1571 int AskSyncMoveMode(void)\r
1572 {\r
1573         return(SyncMove);\r
1574 }\r
1575 \r
1576 \r
1577 /*===================================================\r
1578 *                       ディレクトリヒストリ\r
1579 *===================================================*/\r
1580 \r
1581 /*----- ホスト側のヒストリ一覧ウインドウに登録 --------------------------------\r
1582 *\r
1583 *       Parameter\r
1584 *               char *Path : パス\r
1585 *\r
1586 *       Return Value\r
1587 *               なし\r
1588 *----------------------------------------------------------------------------*/\r
1589 \r
1590 void SetRemoteDirHist(char *Path)\r
1591 {\r
1592         int i;\r
1593 \r
1594         if((i = SendMessage(hWndDirRemote, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) != CB_ERR)\r
1595                 SendMessage(hWndDirRemote, CB_DELETESTRING, i, 0);\r
1596 \r
1597         SendMessage(hWndDirRemote, CB_ADDSTRING, 0, (LPARAM)Path);\r
1598         i = SendMessage(hWndDirRemote, CB_GETCOUNT, 0, 0);\r
1599         SendMessage(hWndDirRemote, CB_SETCURSEL, i-1, 0);\r
1600 \r
1601         strcpy(RemoteCurDir, Path);\r
1602         return;\r
1603 }\r
1604 \r
1605 \r
1606 /*----- ローカル側のヒストリ一覧ウインドウに登録 -------------------------------\r
1607 *\r
1608 *       Parameter\r
1609 *               char *Path : パス\r
1610 *\r
1611 *       Return Value\r
1612 *               なし\r
1613 *----------------------------------------------------------------------------*/\r
1614 \r
1615 void SetLocalDirHist(char *Path)\r
1616 {\r
1617         int i;\r
1618 \r
1619         if((i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) == CB_ERR)\r
1620                 SendMessage(hWndDirLocal, CB_ADDSTRING, 0, (LPARAM)Path);\r
1621         i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path);\r
1622         SendMessage(hWndDirLocal, CB_SETCURSEL, i, 0);\r
1623 \r
1624         strcpy(LocalCurDir, Path);\r
1625         return;\r
1626 }\r
1627 \r
1628 \r
1629 /*----- ローカルのカレントディレクトリを返す ----------------------------------\r
1630 *\r
1631 *       Parameter\r
1632 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1633 *               int Max : バッファのサイズ\r
1634 *\r
1635 *       Return Value\r
1636 *               なし\r
1637 *----------------------------------------------------------------------------*/\r
1638 \r
1639 void AskLocalCurDir(char *Buf, int Max)\r
1640 {\r
1641         memset(Buf, 0, Max);\r
1642         strncpy(Buf, LocalCurDir, Max-1);\r
1643         return;\r
1644 }\r
1645 \r
1646 \r
1647 /*----- ホストのカレントディレクトリを返す ------------------------------------\r
1648 *\r
1649 *       Parameter\r
1650 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1651 *               int Max : バッファのサイズ\r
1652 *\r
1653 *       Return Value\r
1654 *               なし\r
1655 *----------------------------------------------------------------------------*/\r
1656 \r
1657 void AskRemoteCurDir(char *Buf, int Max)\r
1658 {\r
1659         memset(Buf, 0, Max);\r
1660         strncpy(Buf, RemoteCurDir, Max-1);\r
1661         return;\r
1662 }\r
1663 \r
1664 \r
1665 /*----- カレントディレクトリを設定する ----------------------------------------\r
1666 *\r
1667 *       Parameter\r
1668 *               なし\r
1669 *\r
1670 *       Return Value\r
1671 *               なし\r
1672 *----------------------------------------------------------------------------*/\r
1673 \r
1674 void SetCurrentDirAsDirHist(void)\r
1675 {\r
1676         SetCurrentDirectory(LocalCurDir);\r
1677         return;\r
1678 }\r
1679 \r
1680 \r
1681 /*===================================================\r
1682 *                       メニュー\r
1683 *===================================================*/\r
1684 \r
1685 /*----- ドットファイルを表示するかどうかをメニューに表示する ------------------\r
1686 *\r
1687 *       Parameter\r
1688 *               なし\r
1689 *\r
1690 *       Return Value\r
1691 *               なし\r
1692 *----------------------------------------------------------------------------*/\r
1693 \r
1694 void DispDotFileMode(void)\r
1695 {\r
1696         CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_UNCHECKED);\r
1697         if(DotFile == YES)\r
1698                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_CHECKED);\r
1699         return;\r
1700 }\r
1701 \r
1702 \r
1703 /*----- ローカル側の右ボタンメニューを表示 ------------------------------------------------\r
1704 *\r
1705 *       Parameter\r
1706 *               int Pos : メニューの位置\r
1707 *                                       0=マウスカーソルの位置\r
1708 *                                       1=ウインドウの左上\r
1709 *\r
1710 *       Return Value\r
1711 *               なし\r
1712 *----------------------------------------------------------------------------*/\r
1713 \r
1714 void LocalRbuttonMenu(int Pos)\r
1715 {\r
1716         HMENU hMenu;\r
1717         POINT point;\r
1718         RECT Rect;\r
1719         UINT Flg1;\r
1720         UINT Flg2;\r
1721         UINT Flg3;\r
1722         int Count;\r
1723 \r
1724         if(HideUI == NO)\r
1725         {\r
1726                 Flg1 = 0;\r
1727                 if(AskConnecting() == NO)\r
1728                         Flg1 = MF_GRAYED;\r
1729 \r
1730                 Count = GetSelectedCount(WIN_LOCAL);\r
1731                 Flg2 = 0;\r
1732                 if(Count == 0)\r
1733                         Flg2 = MF_GRAYED;\r
1734 \r
1735                 Flg3 = 0;\r
1736                 if(Count != 1)\r
1737                         Flg3 = MF_GRAYED;\r
1738 \r
1739                 hMenu = CreatePopupMenu();\r
1740                 AddOpenMenu(hMenu, Flg3);\r
1741                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD, MSGJPN255);\r
1742                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD_AS, MSGJPN256);\r
1743                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_UPLOAD_ALL, MSGJPN257);\r
1744                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_DELETE, MSGJPN258);\r
1745                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_RENAME, MSGJPN259);\r
1746                 AppendMenu(hMenu, MF_STRING , MENU_MKDIR, MSGJPN260);\r
1747                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1748                 AppendMenu(hMenu, MF_STRING , MENU_FILESIZE, MSGJPN261);\r
1749                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1750                 AppendMenu(hMenu, MF_STRING, REFRESH_LOCAL, MSGJPN262);\r
1751 \r
1752                 if(Pos == 0)\r
1753                         GetCursorPos(&point);\r
1754                 else\r
1755                 {\r
1756                         GetWindowRect(GetLocalHwnd(), &Rect);\r
1757                         point.x = Rect.left + 20;\r
1758                         point.y = Rect.top + 20;\r
1759                 }\r
1760                 TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL);\r
1761 \r
1762                 DestroyMenu(hMenu);\r
1763         }\r
1764         return;\r
1765 }\r
1766 \r
1767 \r
1768 /*----- ホスト側の右ボタンメニューを表示 --------------------------------------\r
1769 *\r
1770 *       Parameter\r
1771 *               int Pos : メニューの位置\r
1772 *                                       0=マウスカーソルの位置\r
1773 *                                       1=ウインドウの左上\r
1774 *\r
1775 *       Return Value\r
1776 *               なし\r
1777 *----------------------------------------------------------------------------*/\r
1778 \r
1779 void RemoteRbuttonMenu(int Pos)\r
1780 {\r
1781         HMENU hMenu;\r
1782         POINT point;\r
1783         RECT Rect;\r
1784         UINT Flg1;\r
1785         UINT Flg2;\r
1786         UINT Flg3;\r
1787         int Count;\r
1788 \r
1789         if(HideUI == NO)\r
1790         {\r
1791                 Flg1 = 0;\r
1792                 if(AskConnecting() == NO)\r
1793                         Flg1 = MF_GRAYED;\r
1794 \r
1795                 Count = GetSelectedCount(WIN_REMOTE);\r
1796                 Flg2 = 0;\r
1797                 if(Count == 0)\r
1798                         Flg2 = MF_GRAYED;\r
1799 \r
1800                 Flg3 = 0;\r
1801                 if(Count != 1)\r
1802                         Flg3 = MF_GRAYED;\r
1803 \r
1804                 hMenu = CreatePopupMenu();\r
1805                 AddOpenMenu(hMenu, Flg1 | Flg3);\r
1806                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD, MSGJPN263);\r
1807                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS, MSGJPN264);\r
1808                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS_FILE, MSGJPN265);\r
1809                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_DOWNLOAD_ALL, MSGJPN266);\r
1810                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DELETE, MSGJPN267);\r
1811                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_RENAME, MSGJPN268);\r
1812                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_CHMOD, MSGJPN269);\r
1813                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_MKDIR, MSGJPN270);\r
1814                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_URL_COPY, MSGJPN271);\r
1815                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1816                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_FILESIZE, MSGJPN272);\r
1817                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1818                 AppendMenu(hMenu, MF_STRING | Flg1, REFRESH_REMOTE, MSGJPN273);\r
1819 \r
1820                 if(Pos == 0)\r
1821                         GetCursorPos(&point);\r
1822                 else\r
1823                 {\r
1824                         GetWindowRect(GetRemoteHwnd(), &Rect);\r
1825                         point.x = Rect.left + 20;\r
1826                         point.y = Rect.top + 20;\r
1827                 }\r
1828                 if(TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL) == 0)\r
1829                         Count = GetLastError();\r
1830 \r
1831                 DestroyMenu(hMenu);\r
1832         }\r
1833         return;\r
1834 }\r
1835 \r
1836 \r
1837 /*----- 右ボタンメニューに「開く」を追加  -------------------------------------\r
1838 *\r
1839 *       Parameter\r
1840 *               HMENU hMenu : メニューハンドル\r
1841 *               UINT Flg : フラグ\r
1842 *\r
1843 *       Return Value\r
1844 *               なし\r
1845 *----------------------------------------------------------------------------*/\r
1846 \r
1847 static void AddOpenMenu(HMENU hMenu, UINT Flg)\r
1848 {\r
1849         static const UINT MenuID[VIEWERS] = { MENU_OPEN1, MENU_OPEN2, MENU_OPEN3 };\r
1850         char Tmp[FMAX_PATH+1];\r
1851         int i;\r
1852 \r
1853         AppendMenu(hMenu, MF_STRING | Flg, MENU_DCLICK, MSGJPN274);\r
1854         for(i = 0; i < VIEWERS; i++)\r
1855         {\r
1856                 if(strlen(ViewerName[i]) != 0)\r
1857                 {\r
1858                         sprintf(Tmp, MSGJPN275, GetToolName(ViewerName[i]), i+1);\r
1859                         AppendMenu(hMenu, MF_STRING | Flg, MenuID[i], Tmp);\r
1860                 }\r
1861         }\r
1862         AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1863         return;\r
1864 }\r
1865 \r
1866 /* 2007/09/21 sunasunamix  ここから *********************/\r
1867 \r
1868 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarMain用) -----------\r
1869 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1870 *----------------------------------------------------------------------------*/\r
1871 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1872 {\r
1873         switch (uMessage) {\r
1874         case WM_DESTROY :\r
1875                 SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarMainProc);\r
1876                 break;\r
1877         case WM_RBUTTONDBLCLK :\r
1878         case WM_RBUTTONDOWN :\r
1879         case WM_RBUTTONUP :\r
1880                 return TRUE;\r
1881         }\r
1882         return CallWindowProc(pOldTbarMainProc, hWnd, uMessage, wParam, lParam);\r
1883 }\r
1884 \r
1885 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarLocal用) ----------\r
1886 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1887 *----------------------------------------------------------------------------*/\r
1888 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1889 {\r
1890         switch (uMessage) {\r
1891         case WM_DESTROY :\r
1892                 SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarLocalProc);\r
1893                 break;\r
1894         case WM_RBUTTONDBLCLK :\r
1895         case WM_RBUTTONDOWN :\r
1896         case WM_RBUTTONUP :\r
1897                 return TRUE;\r
1898         }\r
1899         return CallWindowProc(pOldTbarLocalProc, hWnd, uMessage, wParam, lParam);\r
1900 }\r
1901 \r
1902 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarRemote用) ---------\r
1903 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1904 *----------------------------------------------------------------------------*/\r
1905 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1906 {\r
1907         switch (uMessage) {\r
1908         case WM_DESTROY :\r
1909                 SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarRemoteProc);\r
1910                 break;\r
1911         case WM_RBUTTONDBLCLK :\r
1912         case WM_RBUTTONDOWN :\r
1913         case WM_RBUTTONUP :\r
1914                 return TRUE;\r
1915         }\r
1916         return CallWindowProc(pOldTbarRemoteProc, hWnd, uMessage, wParam, lParam);\r
1917 }\r
1918 /********************************************* ここまで */\r