OSDN Git Service

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