OSDN Git Service

Enhanced routine for simultaneous connection and canceling or aborting.
[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 | TBSTYLE_FLAT,\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 | TBSTYLE_FLAT,\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 | TBSTYLE_FLAT,\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                                         // 同時接続対応\r
399                                         CancelFlg = NO;\r
400                                         SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
401                                         if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
402                                         {\r
403                                                 if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY)\r
404                                                         GetRemoteDirForWnd(CACHE_NORMAL, &CancelFlg);\r
405                                         }\r
406                                 }\r
407                         }\r
408                         else if(wParam == 0x09)         /* TABキーが押された */\r
409                         {\r
410                                 if(hWnd == hWndDirLocalEdit)\r
411                                 {\r
412                                         SetFocus(GetLocalHwnd());\r
413                                 }\r
414                                 else\r
415                                 {\r
416                                         SetFocus(GetRemoteHwnd());\r
417                                 }\r
418                         }\r
419                         else\r
420                                 return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
421                         break;\r
422 \r
423                 default :\r
424                         return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
425         }\r
426     return(0L);\r
427 }\r
428 \r
429 \r
430 \r
431 \r
432 /*----- ツールバーを削除 ------------------------------------------------------\r
433 *\r
434 *       Parameter\r
435 *               なし\r
436 *\r
437 *       Return Value\r
438 *               なし\r
439 *----------------------------------------------------------------------------*/\r
440 \r
441 void DeleteToolBarWindow(void)\r
442 {\r
443 //      if(DlgFont != NULL)\r
444 //              DeleteObject(DlgFont);\r
445 \r
446         if(hWndTbarMain != NULL)\r
447                 DestroyWindow(hWndTbarMain);\r
448         if(hWndTbarLocal != NULL)\r
449                 DestroyWindow(hWndTbarLocal);\r
450         if(hWndTbarRemote != NULL)\r
451                 DestroyWindow(hWndTbarRemote);\r
452         if(hWndDirLocal != NULL)\r
453                 DestroyWindow(hWndDirLocal);\r
454         if(hWndDirRemote != NULL)\r
455                 DestroyWindow(hWndDirRemote);\r
456         return;\r
457 }\r
458 \r
459 \r
460 /*----- メインのツールバーのウインドウハンドルを返す --------------------------\r
461 *\r
462 *       Parameter\r
463 *               なし\r
464 *\r
465 *       Return Value\r
466 *               HWND ウインドウハンドル\r
467 *----------------------------------------------------------------------------*/\r
468 \r
469 HWND GetMainTbarWnd(void)\r
470 {\r
471         return(hWndTbarMain);\r
472 }\r
473 \r
474 \r
475 /*----- ローカル側のヒストリウインドウのウインドウハンドルを返す --------------\r
476 *\r
477 *       Parameter\r
478 *               なし\r
479 *\r
480 *       Return Value\r
481 *               HWND ウインドウハンドル\r
482 *----------------------------------------------------------------------------*/\r
483 \r
484 HWND GetLocalHistHwnd(void)\r
485 {\r
486         return(hWndDirLocal);\r
487 }\r
488 \r
489 \r
490 /*----- ホスト側のヒストリウインドウのウインドウハンドルを返す ----------------\r
491 *\r
492 *       Parameter\r
493 *               なし\r
494 *\r
495 *       Return Value\r
496 *               HWND ウインドウハンドル\r
497 *----------------------------------------------------------------------------*/\r
498 \r
499 HWND GetRemoteHistHwnd(void)\r
500 {\r
501         return(hWndDirRemote);\r
502 }\r
503 \r
504 \r
505 /*----- ローカル側のヒストリエディットのウインドウハンドルを返す --------------\r
506 *\r
507 *       Parameter\r
508 *               なし\r
509 *\r
510 *       Return Value\r
511 *               HWND ウインドウハンドル\r
512 *----------------------------------------------------------------------------*/\r
513 \r
514 HWND GetLocalHistEditHwnd(void)\r
515 {\r
516         return(hWndDirLocalEdit);\r
517 }\r
518 \r
519 \r
520 /*----- ホスト側のヒストリエディットのウインドウハンドルを返す ----------------\r
521 *\r
522 *       Parameter\r
523 *               なし\r
524 *\r
525 *       Return Value\r
526 *               HWND ウインドウハンドル\r
527 *----------------------------------------------------------------------------*/\r
528 \r
529 HWND GetRemoteHistEditHwnd(void)\r
530 {\r
531         return(hWndDirRemoteEdit);\r
532 }\r
533 \r
534 \r
535 /*----- ローカル側のツールバーのウインドウハンドルを返す ----------------------\r
536 *\r
537 *       Parameter\r
538 *               なし\r
539 *\r
540 *       Return Value\r
541 *               HWND ウインドウハンドル\r
542 *----------------------------------------------------------------------------*/\r
543 \r
544 HWND GetLocalTbarWnd(void)\r
545 {\r
546         return(hWndTbarLocal);\r
547 }\r
548 \r
549 \r
550 /*----- ホスト側のツールバーのウインドウハンドルを返す ------------------------\r
551 *\r
552 *       Parameter\r
553 *               なし\r
554 *\r
555 *       Return Value\r
556 *               HWND ウインドウハンドル\r
557 *----------------------------------------------------------------------------*/\r
558 \r
559 HWND GetRemoteTbarWnd(void)\r
560 {\r
561         return(hWndTbarRemote);\r
562 }\r
563 \r
564 \r
565 /*----- HideUI の状態を返す ---------------------------------------------------\r
566 *\r
567 *       Parameter\r
568 *               なし\r
569 *\r
570 *       Return Value\r
571 *               int HideUI の状態\r
572 *----------------------------------------------------------------------------*/\r
573 \r
574 int GetHideUI(void)\r
575 {\r
576         return(HideUI);\r
577 }\r
578 \r
579 \r
580 /*----- ツールボタン/メニューのハイド処理 ------------------------------------\r
581 *\r
582 *       Parameter\r
583 *               なし\r
584 *\r
585 *       Return Value\r
586 *               なし\r
587 *----------------------------------------------------------------------------*/\r
588 \r
589 void MakeButtonsFocus(void)\r
590 {\r
591         HWND hWndFocus;\r
592         HWND hWndMain;\r
593         int Count;\r
594         int Win;\r
595 \r
596         if(HideUI == NO)\r
597         {\r
598                 hWndMain = GetMainHwnd();\r
599                 hWndFocus = GetFocus();\r
600                 Win = WIN_LOCAL;\r
601                 if(hWndFocus == GetRemoteHwnd())\r
602                         Win = WIN_REMOTE;\r
603 \r
604                 Count = GetSelectedCount(Win);\r
605 \r
606                 if(AskConnecting() == YES)\r
607                 {\r
608                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_ENABLED);\r
609                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_ENABLED);\r
610                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_ENABLED);\r
611                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_ENABLED);\r
612                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_ENABLED);\r
613                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_ENABLED);\r
614                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_ENABLED);\r
615                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_ENABLED);\r
616                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(TRUE, 0));\r
617                 }\r
618                 else\r
619                 {\r
620                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_GRAYED);\r
621                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_GRAYED);\r
622                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_GRAYED);\r
623                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_GRAYED);\r
624                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_GRAYED);\r
625                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_GRAYED);\r
626                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_GRAYED);\r
627                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_GRAYED);\r
628                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(FALSE, 0));\r
629                 }\r
630 \r
631                 if(hWndFocus == GetLocalHwnd())\r
632                 {\r
633                         if((AskConnecting() == YES) && (Count > 0))\r
634                         {\r
635                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(TRUE, 0));\r
636                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_ENABLED);\r
637                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_ENABLED);\r
638                         }\r
639                         else\r
640                         {\r
641                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
642                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
643                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
644                         }\r
645                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
646                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
647                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
648                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
649                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
650                 }\r
651 \r
652                 if(hWndFocus == GetRemoteHwnd())\r
653                 {\r
654                         if(AskConnecting() == YES)\r
655                         {\r
656                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_ENABLED);\r
657                         }\r
658                         else\r
659                         {\r
660                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
661                         }\r
662 \r
663                         if((AskConnecting() == YES) && (Count > 0))\r
664                         {\r
665                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(TRUE, 0));\r
666                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_ENABLED);\r
667                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_ENABLED);\r
668                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_ENABLED);\r
669                         }\r
670                         else\r
671                         {\r
672                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
673                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
674                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
675                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
676                         }\r
677                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
678                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
679                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
680                 }\r
681 \r
682                 if((hWndFocus == GetLocalHwnd()) || (hWndFocus == GetRemoteHwnd()))\r
683                 {\r
684                         if(Count > 0)\r
685                         {\r
686                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(TRUE, 0));\r
687                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_ENABLED);\r
688                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(TRUE, 0));\r
689                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_ENABLED);\r
690 \r
691                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_ENABLED);\r
692 \r
693                         }\r
694                         else\r
695                         {\r
696                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
697                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
698                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
699                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
700 \r
701                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
702                         }\r
703 \r
704                         if((hWndFocus == GetLocalHwnd()) || (AskConnecting() == YES))\r
705                         {\r
706                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(TRUE, 0));\r
707                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_ENABLED);\r
708                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_ENABLED);\r
709                         }\r
710                         else\r
711                         {\r
712                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
713                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
714                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
715                         }\r
716                 }\r
717                 else\r
718                 {\r
719                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
720                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
721                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
722                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
723                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
724                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
725                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
726                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
727                         EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
728                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
729                         EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
730                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
731                         EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
732                         EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
733                         EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
734                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
735                 }\r
736         }\r
737         return;\r
738 }\r
739 \r
740 \r
741 /*----- ユーザの操作を禁止する ------------------------------------------------\r
742 *\r
743 *       Parameter\r
744 *               なし\r
745 *\r
746 *       Return Value\r
747 *               なし\r
748 *----------------------------------------------------------------------------*/\r
749 \r
750 void DisableUserOpe(void)\r
751 {\r
752         int i;\r
753 \r
754         HideUI = YES;\r
755 \r
756         for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
757         {\r
758                 EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_GRAYED);\r
759                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
760                 SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
761                 SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
762         }\r
763 \r
764         EnableWindow(hWndDirLocal, FALSE);\r
765         EnableWindow(hWndDirRemote, FALSE);\r
766 \r
767         return;\r
768 }\r
769 \r
770 \r
771 /*----- ユーザの操作を許可する ------------------------------------------------\r
772 *\r
773 *       Parameter\r
774 *               なし\r
775 *\r
776 *       Return Value\r
777 *               なし\r
778 *----------------------------------------------------------------------------*/\r
779 \r
780 void EnableUserOpe(void)\r
781 {\r
782         int i;\r
783 \r
784         if(HideUI == YES)\r
785         {\r
786                 for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
787                 {\r
788                         EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_ENABLED);\r
789                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
790                         SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
791                         SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
792                 }\r
793                 EnableWindow(hWndDirLocal, TRUE);\r
794                 EnableWindow(hWndDirRemote, TRUE);\r
795 \r
796                 // 選択不可な漢字コードのボタンが表示されるバグを修正\r
797                 HideHostKanjiButton();\r
798                 HideLocalKanjiButton();\r
799 \r
800                 HideUI = NO;\r
801 \r
802                 MakeButtonsFocus();\r
803         }\r
804         return;\r
805 }\r
806 \r
807 \r
808 /*----- ユーザの操作が禁止されているかどうかを返す ----------------------------\r
809 *\r
810 *       Parameter\r
811 *               なし\r
812 *\r
813 *       Return Value\r
814 *               int ステータス\r
815 *                       YES=禁止されている/NO\r
816 *----------------------------------------------------------------------------*/\r
817 \r
818 int AskUserOpeDisabled(void)\r
819 {\r
820         return(HideUI);\r
821 }\r
822 \r
823 \r
824 /*===================================================\r
825 *                       転送モード\r
826 *===================================================*/\r
827 \r
828 /*----- 転送モードを設定する --------------------------------------------------\r
829 *\r
830 *       Parameter\r
831 *               int Mode : 転送モード (TYPE_xx)\r
832 *\r
833 *       Return Value\r
834 *               なし\r
835 *----------------------------------------------------------------------------*/\r
836 \r
837 void SetTransferTypeImm(int Mode)\r
838 {\r
839         TmpTransMode = Mode;\r
840         HideHostKanjiButton();\r
841         HideLocalKanjiButton();\r
842         return;\r
843 }\r
844 \r
845 \r
846 /*----- メニューにより転送モードを設定する ------------------------------------\r
847 *\r
848 *       Parameter\r
849 *               int Type : 転送モード (MENU_xxxx)\r
850 *\r
851 *       Return Value\r
852 *               なし\r
853 *----------------------------------------------------------------------------*/\r
854 \r
855 void SetTransferType(int Type)\r
856 {\r
857         switch(Type)\r
858         {\r
859                 case MENU_TEXT :\r
860                         TmpTransMode = TYPE_A;\r
861                         break;\r
862 \r
863                 case MENU_BINARY :\r
864                         TmpTransMode = TYPE_I;\r
865                         break;\r
866 \r
867                 default :\r
868                         TmpTransMode = TYPE_X;\r
869                         break;\r
870         }\r
871         HideHostKanjiButton();\r
872         HideLocalKanjiButton();\r
873         return;\r
874 }\r
875 \r
876 \r
877 /*----- 転送モードにしたがってボタンを表示する --------------------------------\r
878 *\r
879 *       Parameter\r
880 *               なし\r
881 *\r
882 *       Return Value\r
883 *               なし\r
884 *----------------------------------------------------------------------------*/\r
885 \r
886 void DispTransferType(void)\r
887 {\r
888         switch(TmpTransMode)\r
889         {\r
890                 case TYPE_A :\r
891                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_TEXT, MAKELONG(TRUE, 0));\r
892                         break;\r
893 \r
894                 case TYPE_I :\r
895                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_BINARY, MAKELONG(TRUE, 0));\r
896                         break;\r
897 \r
898                 default :\r
899                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_AUTO, MAKELONG(TRUE, 0));\r
900                         break;\r
901         }\r
902         return;\r
903 }\r
904 \r
905 \r
906 /*----- 設定上の転送モードを返す ----------------------------------------------\r
907 *\r
908 *       Parameter\r
909 *               なし\r
910 *\r
911 *       Return Value\r
912 *               int 転送モード (TYPE_xx)\r
913 *----------------------------------------------------------------------------*/\r
914 \r
915 int AskTransferType(void)\r
916 {\r
917         return(TmpTransMode);\r
918 }\r
919 \r
920 \r
921 /*----- 実際の転送モードを返す ------------------------------------------------\r
922 *\r
923 *       Parameter\r
924 *               char Fname : ファイル名\r
925 *               int Type : 設定上の転送モード (TYPE_xx)\r
926 *\r
927 *       Return Value\r
928 *               int 転送モード (TYPE_xx)\r
929 *----------------------------------------------------------------------------*/\r
930 \r
931 int AskTransferTypeAssoc(char *Fname, int Type)\r
932 {\r
933         int Ret;\r
934         char *Pos;\r
935         char *Name;\r
936 \r
937         Ret = Type;\r
938         if(Ret == TYPE_X)\r
939         {\r
940                 Ret = TYPE_I;\r
941                 if(StrMultiLen(AsciiExt) > 0)\r
942                 {\r
943                         Name = GetFileName(Fname);\r
944                         Pos = AsciiExt;\r
945                         while(*Pos != NUL)\r
946                         {\r
947                                 if(CheckFname(Name, Pos) == FFFTP_SUCCESS)\r
948                                 {\r
949                                         Ret = TYPE_A;\r
950                                         break;\r
951                                 }\r
952                                 Pos += strlen(Pos) + 1;\r
953                         }\r
954                 }\r
955         }\r
956         return(Ret);\r
957 }\r
958 \r
959 \r
960 /*----- 転送モードを保存する --------------------------------------------------\r
961 *\r
962 *       Parameter\r
963 *               なし\r
964 *\r
965 *       Return Value\r
966 *               なし\r
967 *\r
968 *       Note\r
969 *               現在の転送モードがレジストリに保存される\r
970 *----------------------------------------------------------------------------*/\r
971 \r
972 void SaveTransferType(void)\r
973 {\r
974         TransMode = TmpTransMode;\r
975         return;\r
976 }\r
977 \r
978 \r
979 /*===================================================\r
980 *                       漢字モード\r
981 *===================================================*/\r
982 \r
983 /*----- ホストの漢字モードをセットする ----------------------------------------\r
984 *\r
985 *       Parameter\r
986 *               int Mode : 漢字モード (KANJI_xxxx)\r
987 *\r
988 *       Return Value\r
989 *               なし\r
990 *----------------------------------------------------------------------------*/\r
991 \r
992 void SetHostKanjiCodeImm(int Mode)\r
993 {\r
994         TmpHostKanjiCode = Mode;\r
995         DispHostKanjiCode();\r
996         HideHostKanjiButton();\r
997         return;\r
998 }\r
999 \r
1000 \r
1001 /*----- メニューによりホストの漢字モードを設定する -----------------------------\r
1002 *\r
1003 *       Parameter\r
1004 *               int Type : 漢字モード (MENU_xxxx)\r
1005 *\r
1006 *       Return Value\r
1007 *               なし\r
1008 *----------------------------------------------------------------------------*/\r
1009 \r
1010 void SetHostKanjiCode(int Type)\r
1011 {\r
1012         switch(Type)\r
1013         {\r
1014                 // UTF-8対応\r
1015                 case MENU_KNJ_SJIS :\r
1016                         TmpHostKanjiCode = KANJI_SJIS;\r
1017                         break;\r
1018 \r
1019                 case MENU_KNJ_EUC :\r
1020                         TmpHostKanjiCode = KANJI_EUC;\r
1021                         break;\r
1022 \r
1023                 case MENU_KNJ_JIS :\r
1024                         TmpHostKanjiCode = KANJI_JIS;\r
1025                         break;\r
1026 \r
1027                 case MENU_KNJ_UTF8N :\r
1028                         TmpHostKanjiCode = KANJI_UTF8N;\r
1029                         break;\r
1030 \r
1031                 default :\r
1032                         TmpHostKanjiCode = KANJI_NOCNV;\r
1033                         break;\r
1034         }\r
1035         DispHostKanjiCode();\r
1036         HideHostKanjiButton();\r
1037         return;\r
1038 }\r
1039 \r
1040 \r
1041 /*----- ホストの漢字モードにしたがってボタンを表示する ------------------------\r
1042 *\r
1043 *       Parameter\r
1044 *               なし\r
1045 *\r
1046 *       Return Value\r
1047 *               なし\r
1048 *----------------------------------------------------------------------------*/\r
1049 \r
1050 void DispHostKanjiCode(void)\r
1051 {\r
1052         switch(TmpHostKanjiCode)\r
1053         {\r
1054                 // UTF-8対応\r
1055                 case KANJI_SJIS :\r
1056                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1057                         break;\r
1058 \r
1059                 case KANJI_EUC :\r
1060                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1061                         break;\r
1062 \r
1063                 case KANJI_JIS :\r
1064                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1065                         break;\r
1066 \r
1067                 case KANJI_UTF8N :\r
1068                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1069                         break;\r
1070 \r
1071                 default :\r
1072                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1073                         break;\r
1074         }\r
1075         return;\r
1076 }\r
1077 \r
1078 \r
1079 /*----- ホストの漢字モードを返す ----------------------------------------------\r
1080 *\r
1081 *       Parameter\r
1082 *               なし\r
1083 *\r
1084 *       Return Value\r
1085 *               int 漢字モード (KANJI_xxxx)\r
1086 *----------------------------------------------------------------------------*/\r
1087 \r
1088 int AskHostKanjiCode(void)\r
1089 {\r
1090         return(TmpHostKanjiCode);\r
1091 }\r
1092 \r
1093 \r
1094 /*----- 漢字モードボタンのハイド処理を行う ------------------------------------\r
1095 *\r
1096 *       Parameter\r
1097 *               なし\r
1098 *\r
1099 *       Return Value\r
1100 *               なし\r
1101 *----------------------------------------------------------------------------*/\r
1102 \r
1103 void HideHostKanjiButton(void)\r
1104 {\r
1105         switch(TmpTransMode)\r
1106         {\r
1107                 // UTF-8対応\r
1108                 case TYPE_I : \r
1109                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1110                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(FALSE, 0));\r
1111                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(FALSE, 0));\r
1112                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1113                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(FALSE, 0));\r
1114                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1115                         break;\r
1116 \r
1117                 default :\r
1118                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1119                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1120                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1121                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1122                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1123 //                      if(TmpHostKanjiCode != KANJI_NOCNV)\r
1124 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1125 //                      else\r
1126 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1127 //                      break;\r
1128                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1129                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1130                         switch(TmpHostKanjiCode)\r
1131                         {\r
1132                         case KANJI_SJIS:\r
1133                         case KANJI_JIS:\r
1134                         case KANJI_EUC:\r
1135                                 switch(TmpLocalKanjiCode)\r
1136                                 {\r
1137                                 case KANJI_SJIS:\r
1138                                 case KANJI_JIS:\r
1139                                 case KANJI_EUC:\r
1140                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1141                                         break;\r
1142                                 }\r
1143                                 break;\r
1144                         }\r
1145         }\r
1146         return;\r
1147 }\r
1148 \r
1149 \r
1150 // ローカルの漢字コード\r
1151 // テキストモード転送時に使用\r
1152 // ホスト側が無変換の時はローカルも無変換\r
1153 \r
1154 void SetLocalKanjiCodeImm(int Mode)\r
1155 {\r
1156         TmpLocalKanjiCode = Mode;\r
1157         DispLocalKanjiCode();\r
1158         HideLocalKanjiButton();\r
1159         return;\r
1160 }\r
1161 \r
1162 void SetLocalKanjiCode(int Type)\r
1163 {\r
1164         switch(Type)\r
1165         {\r
1166                 // UTF-8対応\r
1167                 case MENU_L_KNJ_SJIS :\r
1168                         TmpLocalKanjiCode = KANJI_SJIS;\r
1169                         break;\r
1170 \r
1171                 case MENU_L_KNJ_EUC :\r
1172                         TmpLocalKanjiCode = KANJI_EUC;\r
1173                         break;\r
1174 \r
1175                 case MENU_L_KNJ_JIS :\r
1176                         TmpLocalKanjiCode = KANJI_JIS;\r
1177                         break;\r
1178 \r
1179                 case MENU_L_KNJ_UTF8N :\r
1180                         TmpLocalKanjiCode = KANJI_UTF8N;\r
1181                         break;\r
1182         }\r
1183         DispLocalKanjiCode();\r
1184         HideLocalKanjiButton();\r
1185         return;\r
1186 }\r
1187 \r
1188 void DispLocalKanjiCode(void)\r
1189 {\r
1190         switch(TmpLocalKanjiCode)\r
1191         {\r
1192                 // UTF-8対応\r
1193                 case KANJI_SJIS :\r
1194                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1195                         break;\r
1196 \r
1197                 case KANJI_EUC :\r
1198                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1199                         break;\r
1200 \r
1201                 case KANJI_JIS :\r
1202                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1203                         break;\r
1204 \r
1205                 case KANJI_UTF8N :\r
1206                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1207                         break;\r
1208         }\r
1209         return;\r
1210 }\r
1211 \r
1212 int AskLocalKanjiCode(void)\r
1213 {\r
1214         return(TmpLocalKanjiCode);\r
1215 }\r
1216 \r
1217 void HideLocalKanjiButton(void)\r
1218 {\r
1219         switch(TmpTransMode)\r
1220         {\r
1221                 // UTF-8対応\r
1222                 case TYPE_I : \r
1223                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1224                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(FALSE, 0));\r
1225                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(FALSE, 0));\r
1226                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1227                         break;\r
1228 \r
1229                 default :\r
1230                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1231                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1232                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1233                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1234                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1235                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1236                         switch(TmpHostKanjiCode)\r
1237                         {\r
1238                         case KANJI_SJIS:\r
1239                         case KANJI_JIS:\r
1240                         case KANJI_EUC:\r
1241                                 switch(TmpLocalKanjiCode)\r
1242                                 {\r
1243                                 case KANJI_SJIS:\r
1244                                 case KANJI_JIS:\r
1245                                 case KANJI_EUC:\r
1246                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1247                                         break;\r
1248                                 }\r
1249                                 break;\r
1250                         }\r
1251                         break;\r
1252         }\r
1253         return;\r
1254 }\r
1255 \r
1256 \r
1257 /*===================================================\r
1258 *                       半角変換モード\r
1259 *===================================================*/\r
1260 \r
1261 /*----- ホストの半角変換モードを設定する --------------------------------------\r
1262 *\r
1263 *       Parameter\r
1264 *               int Mode : 半角変換モード(YES/NO)\r
1265 *\r
1266 *       Return Value\r
1267 *               なし\r
1268 *----------------------------------------------------------------------------*/\r
1269 \r
1270 void SetHostKanaCnvImm(int Mode)\r
1271 {\r
1272         TmpHostKanaCnv = Mode;\r
1273         DispHostKanaCnv();\r
1274         return;\r
1275 }\r
1276 \r
1277 \r
1278 /*----- ホストの半角変換モードを反転する --------------------------------------\r
1279 *\r
1280 *       Parameter\r
1281 *               なし\r
1282 *\r
1283 *       Return Value\r
1284 *               なし\r
1285 *----------------------------------------------------------------------------*/\r
1286 \r
1287 void SetHostKanaCnv(void)\r
1288 {\r
1289         TmpHostKanaCnv ^= 1;\r
1290         DispHostKanaCnv();\r
1291         return;\r
1292 }\r
1293 \r
1294 \r
1295 /*----- ホストの半角変換モードにしたがってボタンを表示する --------------------\r
1296 *\r
1297 *       Parameter\r
1298 *               なし\r
1299 *\r
1300 *       Return Value\r
1301 *               なし\r
1302 *----------------------------------------------------------------------------*/\r
1303 \r
1304 void DispHostKanaCnv(void)\r
1305 {\r
1306         if(TmpHostKanaCnv != 0)\r
1307                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1308         else\r
1309                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1310         return;\r
1311 }\r
1312 \r
1313 \r
1314 /*----- ホストの半角変換モードを返す ------------------------------------------\r
1315 *\r
1316 *       Parameter\r
1317 *               なし\r
1318 *\r
1319 *       Return Value\r
1320 *               int 半角変換モード\r
1321 *----------------------------------------------------------------------------*/\r
1322 \r
1323 int AskHostKanaCnv(void)\r
1324 {\r
1325         return(TmpHostKanaCnv);\r
1326 }\r
1327 \r
1328 \r
1329 /*===================================================\r
1330 *                       ソート方法\r
1331 *===================================================*/\r
1332 \r
1333 /*----- ソート方法をセットする ------------------------------------------------\r
1334 *\r
1335 *       Parameter\r
1336 *               int LFsort : ローカル側のファイルのソート方法 (SORT_xxx)\r
1337 *               int LDsort : ローカル側のディレクトリのソート方法 (SORT_xxx)\r
1338 *               int RFsort : ホスト側のファイルのソート方法 (SORT_xxx)\r
1339 *               int RDsort : ホスト側のディレクトリのソート方法 (SORT_xxx)\r
1340 *\r
1341 *       Return Value\r
1342 *               なし\r
1343 *----------------------------------------------------------------------------*/\r
1344 \r
1345 void SetSortTypeImm(int LFsort, int LDsort, int RFsort, int RDsort)\r
1346 {\r
1347         TmpLocalFileSort = LFsort;\r
1348         TmpLocalDirSort = LDsort;\r
1349         TmpRemoteFileSort = RFsort;\r
1350         TmpRemoteDirSort = RDsort;\r
1351         return;\r
1352 }\r
1353 \r
1354 \r
1355 /*----- リストビューのタブクリックによるソート方法のセット --------------------\r
1356 *\r
1357 *       Parameter\r
1358 *               int Win : ウインドウ番号\r
1359 *               int Tab : カラム番号\r
1360 *\r
1361 *       Return Value\r
1362 *               int ソート方法 (SORT_xxx)\r
1363 *----------------------------------------------------------------------------*/\r
1364 \r
1365 void SetSortTypeByColumn(int Win, int Tab)\r
1366 {\r
1367         if(Win == WIN_LOCAL)\r
1368         {\r
1369                 if((TmpLocalFileSort & SORT_MASK_ORD) == Tab)\r
1370                         TmpLocalFileSort ^= SORT_GET_ORD;\r
1371                 else\r
1372                         TmpLocalFileSort = Tab;\r
1373 \r
1374                 if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1375                         TmpLocalDirSort = TmpLocalFileSort;\r
1376                 else\r
1377                         TmpLocalDirSort = SORT_NAME;\r
1378         }\r
1379         else\r
1380         {\r
1381                 if(Tab != 4)\r
1382                 {\r
1383                         if((TmpRemoteFileSort & SORT_MASK_ORD) == Tab)\r
1384                                 TmpRemoteFileSort ^= SORT_GET_ORD;\r
1385                         else\r
1386                                 TmpRemoteFileSort = Tab;\r
1387 \r
1388                         if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1389                                 TmpRemoteDirSort = TmpRemoteFileSort;\r
1390                         else\r
1391                                 TmpRemoteDirSort = SORT_NAME;\r
1392                 }\r
1393         }\r
1394         return;\r
1395 }\r
1396 \r
1397 \r
1398 /*----- ソート方法を返す ------------------------------------------------------\r
1399 *\r
1400 *       Parameter\r
1401 *               int Name : どの部分か (ITEM_xxx)\r
1402 *\r
1403 *       Return Value\r
1404 *               int ソート方法 (SORT_xxx)\r
1405 *----------------------------------------------------------------------------*/\r
1406 \r
1407 int AskSortType(int Name)\r
1408 {\r
1409         int Ret;\r
1410 \r
1411         switch(Name)\r
1412         {\r
1413                 case ITEM_LFILE :\r
1414                         Ret = TmpLocalFileSort;\r
1415                         break;\r
1416 \r
1417                 case ITEM_LDIR :\r
1418                         Ret = TmpLocalDirSort;\r
1419                         break;\r
1420 \r
1421                 case ITEM_RFILE :\r
1422                         Ret = TmpRemoteFileSort;\r
1423                         break;\r
1424 \r
1425                 case ITEM_RDIR :\r
1426                         Ret = TmpRemoteDirSort;\r
1427                         break;\r
1428         }\r
1429         return(Ret);\r
1430 }\r
1431 \r
1432 \r
1433 /*----- ホストごとにソートを保存するかどうかをセットする-----------------------\r
1434 *\r
1435 *       Parameter\r
1436 *               int Sw : スイッチ (YES/NO)\r
1437 *\r
1438 *       Return Value\r
1439 *               なし\r
1440 *----------------------------------------------------------------------------*/\r
1441 \r
1442 void SetSaveSortToHost(int Sw)\r
1443 {\r
1444         SortSave = Sw;\r
1445         return;\r
1446 }\r
1447 \r
1448 \r
1449 /*----- ホストごとにソートを保存するかどうかを返す ----------------------------\r
1450 *\r
1451 *       Parameter\r
1452 *               なし\r
1453 *\r
1454 *       Return Value\r
1455 *               int スイッチ (YES/NO)\r
1456 *----------------------------------------------------------------------------*/\r
1457 \r
1458 int AskSaveSortToHost(void)\r
1459 {\r
1460         return(SortSave);\r
1461 }\r
1462 \r
1463 \r
1464 \r
1465 /*===================================================\r
1466 *                       リストモード\r
1467 *===================================================*/\r
1468 \r
1469 /*----- リストモードにしたがってボタンを表示する ------------------------------\r
1470 *\r
1471 *       Parameter\r
1472 *               なし\r
1473 *\r
1474 *       Return Value\r
1475 *               なし\r
1476 *----------------------------------------------------------------------------*/\r
1477 \r
1478 void DispListType(void)\r
1479 {\r
1480         HWND hWndMain;\r
1481 \r
1482         hWndMain = GetMainHwnd();\r
1483         switch(ListType)\r
1484         {\r
1485                 case LVS_LIST :\r
1486                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_LIST, MAKELONG(TRUE, 0));\r
1487                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_CHECKED);\r
1488                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_UNCHECKED);\r
1489                         break;\r
1490 \r
1491                 default :\r
1492                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_REPORT, MAKELONG(TRUE, 0));\r
1493                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_CHECKED);\r
1494                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_UNCHECKED);\r
1495                         break;\r
1496         }\r
1497         return;\r
1498 }\r
1499 \r
1500 \r
1501 /*===================================================\r
1502 *                       フォルダ同時移動モード\r
1503 *===================================================*/\r
1504 \r
1505 /*----- 転送モードを設定する --------------------------------------------------\r
1506 *\r
1507 *       Parameter\r
1508 *               int Mode : 転送モード (TYPE_xx)\r
1509 *\r
1510 *       Return Value\r
1511 *               なし\r
1512 *----------------------------------------------------------------------------*/\r
1513 \r
1514 void SetSyncMoveMode(int Mode)\r
1515 {\r
1516         SyncMove = Mode;\r
1517         DispSyncMoveMode();\r
1518         return;\r
1519 }\r
1520 \r
1521 \r
1522 /*----- フォルダ同時移動モードを切り替える ------------------------------------\r
1523 *\r
1524 *       Parameter\r
1525 *               なし\r
1526 *\r
1527 *       Return Value\r
1528 *               なし\r
1529 *----------------------------------------------------------------------------*/\r
1530 \r
1531 void ToggleSyncMoveMode(void)\r
1532 {\r
1533         SyncMove ^= 1;\r
1534         DispSyncMoveMode();\r
1535         return;\r
1536 }\r
1537 \r
1538 \r
1539 /*----- フォルダ同時移動を行うかどうかをによってメニュー/ボタンを表示 --------\r
1540 *\r
1541 *       Parameter\r
1542 *               なし\r
1543 *\r
1544 *       Return Value\r
1545 *               なし\r
1546 *----------------------------------------------------------------------------*/\r
1547 \r
1548 void DispSyncMoveMode(void)\r
1549 {\r
1550         if(SyncMove != 0)\r
1551         {\r
1552                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(TRUE, 0));\r
1553                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_CHECKED);\r
1554         }\r
1555         else\r
1556         {\r
1557                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(FALSE, 0));\r
1558                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_UNCHECKED);\r
1559         }\r
1560         return;\r
1561 }\r
1562 \r
1563 \r
1564 /*----- フォルダ同時移動モードを返す ------------------------------------------\r
1565 *\r
1566 *       Parameter\r
1567 *               なし\r
1568 *\r
1569 *       Return Value\r
1570 *               int 半角変換モード\r
1571 *----------------------------------------------------------------------------*/\r
1572 \r
1573 int AskSyncMoveMode(void)\r
1574 {\r
1575         return(SyncMove);\r
1576 }\r
1577 \r
1578 \r
1579 /*===================================================\r
1580 *                       ディレクトリヒストリ\r
1581 *===================================================*/\r
1582 \r
1583 /*----- ホスト側のヒストリ一覧ウインドウに登録 --------------------------------\r
1584 *\r
1585 *       Parameter\r
1586 *               char *Path : パス\r
1587 *\r
1588 *       Return Value\r
1589 *               なし\r
1590 *----------------------------------------------------------------------------*/\r
1591 \r
1592 void SetRemoteDirHist(char *Path)\r
1593 {\r
1594         int i;\r
1595 \r
1596         if((i = SendMessage(hWndDirRemote, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) != CB_ERR)\r
1597                 SendMessage(hWndDirRemote, CB_DELETESTRING, i, 0);\r
1598 \r
1599         SendMessage(hWndDirRemote, CB_ADDSTRING, 0, (LPARAM)Path);\r
1600         i = SendMessage(hWndDirRemote, CB_GETCOUNT, 0, 0);\r
1601         SendMessage(hWndDirRemote, CB_SETCURSEL, i-1, 0);\r
1602 \r
1603         strcpy(RemoteCurDir, Path);\r
1604         return;\r
1605 }\r
1606 \r
1607 \r
1608 /*----- ローカル側のヒストリ一覧ウインドウに登録 -------------------------------\r
1609 *\r
1610 *       Parameter\r
1611 *               char *Path : パス\r
1612 *\r
1613 *       Return Value\r
1614 *               なし\r
1615 *----------------------------------------------------------------------------*/\r
1616 \r
1617 void SetLocalDirHist(char *Path)\r
1618 {\r
1619         int i;\r
1620 \r
1621         if((i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) == CB_ERR)\r
1622                 SendMessage(hWndDirLocal, CB_ADDSTRING, 0, (LPARAM)Path);\r
1623         i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path);\r
1624         SendMessage(hWndDirLocal, CB_SETCURSEL, i, 0);\r
1625 \r
1626         strcpy(LocalCurDir, Path);\r
1627         return;\r
1628 }\r
1629 \r
1630 \r
1631 /*----- ローカルのカレントディレクトリを返す ----------------------------------\r
1632 *\r
1633 *       Parameter\r
1634 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1635 *               int Max : バッファのサイズ\r
1636 *\r
1637 *       Return Value\r
1638 *               なし\r
1639 *----------------------------------------------------------------------------*/\r
1640 \r
1641 void AskLocalCurDir(char *Buf, int Max)\r
1642 {\r
1643         memset(Buf, 0, Max);\r
1644         strncpy(Buf, LocalCurDir, Max-1);\r
1645         return;\r
1646 }\r
1647 \r
1648 \r
1649 /*----- ホストのカレントディレクトリを返す ------------------------------------\r
1650 *\r
1651 *       Parameter\r
1652 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1653 *               int Max : バッファのサイズ\r
1654 *\r
1655 *       Return Value\r
1656 *               なし\r
1657 *----------------------------------------------------------------------------*/\r
1658 \r
1659 void AskRemoteCurDir(char *Buf, int Max)\r
1660 {\r
1661         memset(Buf, 0, Max);\r
1662         strncpy(Buf, RemoteCurDir, Max-1);\r
1663         return;\r
1664 }\r
1665 \r
1666 \r
1667 /*----- カレントディレクトリを設定する ----------------------------------------\r
1668 *\r
1669 *       Parameter\r
1670 *               なし\r
1671 *\r
1672 *       Return Value\r
1673 *               なし\r
1674 *----------------------------------------------------------------------------*/\r
1675 \r
1676 void SetCurrentDirAsDirHist(void)\r
1677 {\r
1678         SetCurrentDirectory(LocalCurDir);\r
1679         return;\r
1680 }\r
1681 \r
1682 \r
1683 /*===================================================\r
1684 *                       メニュー\r
1685 *===================================================*/\r
1686 \r
1687 /*----- ドットファイルを表示するかどうかをメニューに表示する ------------------\r
1688 *\r
1689 *       Parameter\r
1690 *               なし\r
1691 *\r
1692 *       Return Value\r
1693 *               なし\r
1694 *----------------------------------------------------------------------------*/\r
1695 \r
1696 void DispDotFileMode(void)\r
1697 {\r
1698         CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_UNCHECKED);\r
1699         if(DotFile == YES)\r
1700                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_CHECKED);\r
1701         return;\r
1702 }\r
1703 \r
1704 \r
1705 /*----- ローカル側の右ボタンメニューを表示 ------------------------------------------------\r
1706 *\r
1707 *       Parameter\r
1708 *               int Pos : メニューの位置\r
1709 *                                       0=マウスカーソルの位置\r
1710 *                                       1=ウインドウの左上\r
1711 *\r
1712 *       Return Value\r
1713 *               なし\r
1714 *----------------------------------------------------------------------------*/\r
1715 \r
1716 void LocalRbuttonMenu(int Pos)\r
1717 {\r
1718         HMENU hMenu;\r
1719         POINT point;\r
1720         RECT Rect;\r
1721         UINT Flg1;\r
1722         UINT Flg2;\r
1723         UINT Flg3;\r
1724         int Count;\r
1725 \r
1726         if(HideUI == NO)\r
1727         {\r
1728                 Flg1 = 0;\r
1729                 if(AskConnecting() == NO)\r
1730                         Flg1 = MF_GRAYED;\r
1731 \r
1732                 Count = GetSelectedCount(WIN_LOCAL);\r
1733                 Flg2 = 0;\r
1734                 if(Count == 0)\r
1735                         Flg2 = MF_GRAYED;\r
1736 \r
1737                 Flg3 = 0;\r
1738                 if(Count != 1)\r
1739                         Flg3 = MF_GRAYED;\r
1740 \r
1741                 hMenu = CreatePopupMenu();\r
1742                 AddOpenMenu(hMenu, Flg3);\r
1743                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD, MSGJPN255);\r
1744                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD_AS, MSGJPN256);\r
1745                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_UPLOAD_ALL, MSGJPN257);\r
1746                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_DELETE, MSGJPN258);\r
1747                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_RENAME, MSGJPN259);\r
1748                 AppendMenu(hMenu, MF_STRING , MENU_MKDIR, MSGJPN260);\r
1749                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1750                 AppendMenu(hMenu, MF_STRING , MENU_FILESIZE, MSGJPN261);\r
1751                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1752                 AppendMenu(hMenu, MF_STRING, REFRESH_LOCAL, MSGJPN262);\r
1753 \r
1754                 if(Pos == 0)\r
1755                         GetCursorPos(&point);\r
1756                 else\r
1757                 {\r
1758                         GetWindowRect(GetLocalHwnd(), &Rect);\r
1759                         point.x = Rect.left + 20;\r
1760                         point.y = Rect.top + 20;\r
1761                 }\r
1762                 TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL);\r
1763 \r
1764                 DestroyMenu(hMenu);\r
1765         }\r
1766         return;\r
1767 }\r
1768 \r
1769 \r
1770 /*----- ホスト側の右ボタンメニューを表示 --------------------------------------\r
1771 *\r
1772 *       Parameter\r
1773 *               int Pos : メニューの位置\r
1774 *                                       0=マウスカーソルの位置\r
1775 *                                       1=ウインドウの左上\r
1776 *\r
1777 *       Return Value\r
1778 *               なし\r
1779 *----------------------------------------------------------------------------*/\r
1780 \r
1781 void RemoteRbuttonMenu(int Pos)\r
1782 {\r
1783         HMENU hMenu;\r
1784         POINT point;\r
1785         RECT Rect;\r
1786         UINT Flg1;\r
1787         UINT Flg2;\r
1788         UINT Flg3;\r
1789         int Count;\r
1790 \r
1791         if(HideUI == NO)\r
1792         {\r
1793                 Flg1 = 0;\r
1794                 if(AskConnecting() == NO)\r
1795                         Flg1 = MF_GRAYED;\r
1796 \r
1797                 Count = GetSelectedCount(WIN_REMOTE);\r
1798                 Flg2 = 0;\r
1799                 if(Count == 0)\r
1800                         Flg2 = MF_GRAYED;\r
1801 \r
1802                 Flg3 = 0;\r
1803                 if(Count != 1)\r
1804                         Flg3 = MF_GRAYED;\r
1805 \r
1806                 hMenu = CreatePopupMenu();\r
1807                 AddOpenMenu(hMenu, Flg1 | Flg3);\r
1808                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD, MSGJPN263);\r
1809                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS, MSGJPN264);\r
1810                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS_FILE, MSGJPN265);\r
1811                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_DOWNLOAD_ALL, MSGJPN266);\r
1812                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DELETE, MSGJPN267);\r
1813                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_RENAME, MSGJPN268);\r
1814                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_CHMOD, MSGJPN269);\r
1815                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_MKDIR, MSGJPN270);\r
1816                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_URL_COPY, MSGJPN271);\r
1817                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1818                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_FILESIZE, MSGJPN272);\r
1819                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1820                 AppendMenu(hMenu, MF_STRING | Flg1, REFRESH_REMOTE, MSGJPN273);\r
1821 \r
1822                 if(Pos == 0)\r
1823                         GetCursorPos(&point);\r
1824                 else\r
1825                 {\r
1826                         GetWindowRect(GetRemoteHwnd(), &Rect);\r
1827                         point.x = Rect.left + 20;\r
1828                         point.y = Rect.top + 20;\r
1829                 }\r
1830                 if(TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL) == 0)\r
1831                         Count = GetLastError();\r
1832 \r
1833                 DestroyMenu(hMenu);\r
1834         }\r
1835         return;\r
1836 }\r
1837 \r
1838 \r
1839 /*----- 右ボタンメニューに「開く」を追加  -------------------------------------\r
1840 *\r
1841 *       Parameter\r
1842 *               HMENU hMenu : メニューハンドル\r
1843 *               UINT Flg : フラグ\r
1844 *\r
1845 *       Return Value\r
1846 *               なし\r
1847 *----------------------------------------------------------------------------*/\r
1848 \r
1849 static void AddOpenMenu(HMENU hMenu, UINT Flg)\r
1850 {\r
1851         static const UINT MenuID[VIEWERS] = { MENU_OPEN1, MENU_OPEN2, MENU_OPEN3 };\r
1852         char Tmp[FMAX_PATH+1];\r
1853         int i;\r
1854 \r
1855         AppendMenu(hMenu, MF_STRING | Flg, MENU_DCLICK, MSGJPN274);\r
1856         for(i = 0; i < VIEWERS; i++)\r
1857         {\r
1858                 if(strlen(ViewerName[i]) != 0)\r
1859                 {\r
1860                         sprintf(Tmp, MSGJPN275, GetToolName(ViewerName[i]), i+1);\r
1861                         AppendMenu(hMenu, MF_STRING | Flg, MenuID[i], Tmp);\r
1862                 }\r
1863         }\r
1864         AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1865         return;\r
1866 }\r
1867 \r
1868 /* 2007/09/21 sunasunamix  ここから *********************/\r
1869 \r
1870 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarMain用) -----------\r
1871 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1872 *----------------------------------------------------------------------------*/\r
1873 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1874 {\r
1875         switch (uMessage) {\r
1876         case WM_DESTROY :\r
1877                 SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarMainProc);\r
1878                 break;\r
1879         case WM_RBUTTONDBLCLK :\r
1880         case WM_RBUTTONDOWN :\r
1881         case WM_RBUTTONUP :\r
1882                 return TRUE;\r
1883         }\r
1884         return CallWindowProc(pOldTbarMainProc, hWnd, uMessage, wParam, lParam);\r
1885 }\r
1886 \r
1887 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarLocal用) ----------\r
1888 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1889 *----------------------------------------------------------------------------*/\r
1890 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1891 {\r
1892         switch (uMessage) {\r
1893         case WM_DESTROY :\r
1894                 SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarLocalProc);\r
1895                 break;\r
1896         case WM_RBUTTONDBLCLK :\r
1897         case WM_RBUTTONDOWN :\r
1898         case WM_RBUTTONUP :\r
1899                 return TRUE;\r
1900         }\r
1901         return CallWindowProc(pOldTbarLocalProc, hWnd, uMessage, wParam, lParam);\r
1902 }\r
1903 \r
1904 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarRemote用) ---------\r
1905 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1906 *----------------------------------------------------------------------------*/\r
1907 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1908 {\r
1909         switch (uMessage) {\r
1910         case WM_DESTROY :\r
1911                 SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarRemoteProc);\r
1912                 break;\r
1913         case WM_RBUTTONDBLCLK :\r
1914         case WM_RBUTTONDOWN :\r
1915         case WM_RBUTTONUP :\r
1916                 return TRUE;\r
1917         }\r
1918         return CallWindowProc(pOldTbarRemoteProc, hWnd, uMessage, wParam, lParam);\r
1919 }\r
1920 /********************************************* ここまで */\r