OSDN Git Service

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