Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/dnddlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10628 - (hide annotations) (download) (as text)
Mon Mar 6 13:30:37 2023 UTC (13 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 10181 byte(s)
Drag and Drop dialog の表示をUnicode文字列に修正した

- 「同じ処理を次の %d 個のファイルに適用(&D)」
- 文字列を動的に確保するようにした
  - MAX_UIMSG を使わないようにした
1 zmatsuo 7377 /*
2 nmaya 9048 * (C) 2005- TeraTerm Project
3 zmatsuo 7377 * All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without
6     * modification, are permitted provided that the following conditions
7     * are met:
8     *
9     * 1. Redistributions of source code must retain the above copyright
10     * notice, this list of conditions and the following disclaimer.
11     * 2. Redistributions in binary form must reproduce the above copyright
12     * notice, this list of conditions and the following disclaimer in the
13     * documentation and/or other materials provided with the distribution.
14     * 3. The name of the author may not be used to endorse or promote products
15     * derived from this software without specific prior written permission.
16     *
17     * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
18     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27     */
28    
29     /* TERATERM.EXE, drag and drop dialog */
30     #include "dnddlg.h"
31    
32     #include <windowsx.h>
33     #include <stdio.h> // for _snprintf_s
34    
35     #include "tt_res.h"
36    
37     #include "i18n.h"
38     #include "ttlib.h"
39     #include "dlglib.h"
40 zmatsuo 10628 #include "asprintf.h"
41     #include "win32helper.h"
42 zmatsuo 7377
43     struct DrapDropDlgParam {
44 doda 8445 const wchar_t *TargetFilename;
45 zmatsuo 7377 enum drop_type DropType;
46     unsigned char DropTypePaste;
47     bool ScpEnable;
48     char *ScpSendDirPtr;
49     int ScpSendDirSize;
50     bool SendfileEnable;
51 nmaya 10093 bool SendfileBinary;
52 zmatsuo 7377 int RemaingFileCount;
53     bool DoSameProcess;
54     bool DoSameProcessNextDrop;
55     bool DoNotShowDialogEnable;
56     bool DoNotShowDialog;
57 zmatsuo 10614 const wchar_t *UILanguageFile;
58 zmatsuo 7377 };
59    
60     struct DrapDropDlgData {
61     DrapDropDlgParam *Param;
62     };
63    
64     static LRESULT CALLBACK OnDragDropDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp)
65     {
66     static const DlgTextInfo TextInfos[] = {
67     { 0, "DLG_DANDD_TITLE" },
68     { IDC_DAD_STATIC, "DLG_DANDD_TEXT" },
69     { IDC_SCP_RADIO, "DLG_DANDD_SCP_RADIO" },
70     { IDC_SENDFILE_RADIO, "DLG_DANDD_SENDFILE_RADIO" },
71     { IDC_PASTE_RADIO, "DLG_DANDD_PASTE_RADIO" },
72     { IDC_SCP_PATH_LABEL, "DLG_DANDD_SCP_DEST_LABEL" },
73     { IDC_SCP_PATH_NOTE, "DLG_DANDD_SCP_DEST_NOTE" },
74     { IDC_BINARY_CHECK, "DLG_DANDD_SEND_BINARY_CHECK" },
75     { IDC_ESCAPE_CHECK, "DLG_DANDD_PASTE_ESCAPE_CHECK" },
76     { IDC_SPACE_RADIO, "DLG_DANDD_PASTE_SPACE_RADIO" },
77     { IDC_NEWLINE_RADIO, "DLG_DANDD_PASTE_NEWLINE_RADIO" },
78     { IDC_SAME_PROCESS_CHECK, "DLG_DANDD_NEXTFILES" },
79     { IDC_SAME_PROCESS_NEXTDROP_CHECK, "DLG_DANDD_SAME_NEEXTDROP" },
80     { IDC_DONTSHOW_CHECK, "DLG_DANDD_DONTSHOW_NEEXTDROP" },
81     { IDC_DAD_NOTE, "DLG_DANDD_NOTE" },
82     { IDOK, "BTN_OK" },
83     { IDCANCEL, "BTN_CANCEL" },
84     };
85     DrapDropDlgData *DlgData = (DrapDropDlgData *)GetWindowLongPtr(hDlgWnd, DWLP_USER);
86    
87     switch (msg) {
88     case WM_INITDIALOG:
89     {
90     DlgData = (DrapDropDlgData *)malloc(sizeof(DrapDropDlgData));
91     SetWindowLongPtr(hDlgWnd, DWLP_USER, (LONG_PTR)DlgData);
92     DrapDropDlgParam *Param = (DrapDropDlgParam *)lp;
93     DlgData->Param = Param;
94 zmatsuo 10614 SetDlgTextsW(hDlgWnd, TextInfos, _countof(TextInfos), Param->UILanguageFile);
95 zmatsuo 7377
96     // target file
97 zmatsuo 9324 SetDlgItemTextW(hDlgWnd, IDC_FILENAME_EDIT, Param->TargetFilename);
98 zmatsuo 7377
99 nmaya 10093 // drop type
100 zmatsuo 7377 CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO,
101 nmaya 10093 Param->DropType == DROP_TYPE_SEND_FILE ? IDC_SENDFILE_RADIO :
102     Param->DropType == DROP_TYPE_PASTE_FILENAME ? IDC_PASTE_RADIO :
103 zmatsuo 7377 IDC_SCP_RADIO);
104    
105     // SCP
106 zmatsuo 7512 SetDlgItemTextA(hDlgWnd, IDC_SCP_PATH, Param->ScpSendDirPtr);
107 zmatsuo 7377 if (!Param->ScpEnable) {
108     // ������
109     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_RADIO), FALSE);
110     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH_LABEL), FALSE);
111     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH), FALSE);
112     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH_NOTE), FALSE);
113     }
114 zmatsuo 9035 SetEditboxEmacsKeybind(hDlgWnd, IDC_SCP_PATH);
115 zmatsuo 7377
116     // Send File
117 nmaya 10093 if (Param->SendfileBinary) {
118 zmatsuo 7377 SendMessage(GetDlgItem(hDlgWnd, IDC_BINARY_CHECK), BM_SETCHECK, BST_CHECKED, 0);
119     }
120     if (!Param->SendfileEnable) {
121     // ������
122     EnableWindow(GetDlgItem(hDlgWnd, IDC_SENDFILE_RADIO), FALSE);
123     EnableWindow(GetDlgItem(hDlgWnd, IDC_BINARY_CHECK), FALSE);
124     }
125    
126     // Paste Filename
127     if (Param->DropTypePaste & DROP_TYPE_PASTE_ESCAPE) {
128     SendMessage(GetDlgItem(hDlgWnd, IDC_ESCAPE_CHECK), BM_SETCHECK, BST_CHECKED, 0);
129     }
130     CheckRadioButton(hDlgWnd, IDC_SPACE_RADIO, IDC_NEWLINE_RADIO,
131     Param->DropTypePaste & DROP_TYPE_PASTE_NEWLINE?
132     IDC_NEWLINE_RADIO : IDC_SPACE_RADIO);
133     if (Param->RemaingFileCount < 2) {
134     EnableWindow(GetDlgItem(hDlgWnd, IDC_SPACE_RADIO), FALSE);
135     EnableWindow(GetDlgItem(hDlgWnd, IDC_NEWLINE_RADIO), FALSE);
136     }
137    
138     // Do this for the next %d files
139 zmatsuo 10628 wchar_t *format;
140     hGetDlgItemTextW(hDlgWnd, IDC_SAME_PROCESS_CHECK, &format);
141     wchar_t *formated;
142     aswprintf(&formated, format, Param->RemaingFileCount - 1);
143     SetDlgItemTextW(hDlgWnd, IDC_SAME_PROCESS_CHECK, formated);
144     free(format);
145     free(formated);
146 zmatsuo 7377 if (Param->RemaingFileCount < 2) {
147     EnableWindow(GetDlgItem(hDlgWnd, IDC_SAME_PROCESS_CHECK), FALSE);
148     }
149    
150     // Dont Show Dialog
151     if (Param->DoNotShowDialog) {
152     SendMessage(GetDlgItem(hDlgWnd, IDC_DONTSHOW_CHECK), BM_SETCHECK, BST_CHECKED, 0);
153     }
154     if (!Param->DoNotShowDialogEnable) {
155     EnableWindow(GetDlgItem(hDlgWnd, IDC_DONTSHOW_CHECK), FALSE);
156     EnableWindow(GetDlgItem(hDlgWnd, IDC_DAD_NOTE), FALSE);
157     }
158    
159     // focus to "SCP dest textbox" or "Cancel"
160 zmatsuo 7512 {
161     int focus_id;
162 nmaya 10093 if (Param->DropType == DROP_TYPE_SCP) {
163 zmatsuo 7512 focus_id = IDC_SCP_PATH;
164     } else {
165     focus_id = IDCANCEL;
166     }
167     PostMessage(hDlgWnd, WM_NEXTDLGCTL,
168     (WPARAM)GetDlgItem(hDlgWnd, focus_id), TRUE);
169 zmatsuo 7377 }
170    
171 zmatsuo 7592 CenterWindow(hDlgWnd, GetParent(hDlgWnd));
172 zmatsuo 7377 // TRUE���������{�^�����t�H�[�J�X�������������B
173     return FALSE;
174     }
175    
176     case WM_COMMAND:
177     {
178     WORD wID = GET_WM_COMMAND_ID(wp, lp);
179     const WORD wCMD = GET_WM_COMMAND_CMD(wp, lp);
180     if (wCMD == BN_DBLCLK &&
181     (wID == IDC_SCP_RADIO || wID == IDC_SENDFILE_RADIO || wID == IDC_PASTE_RADIO))
182     { // radio buttons double click
183     wID = IDOK;
184     }
185     if (wCMD == EN_SETFOCUS && wID == IDC_SCP_PATH) {
186     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_SCP_RADIO);
187     }
188     if (wID == IDC_BINARY_CHECK) {
189     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_SENDFILE_RADIO);
190     }
191     if (wID == IDC_ESCAPE_CHECK ||
192     wID == IDC_SPACE_RADIO || wID == IDC_NEWLINE_RADIO)
193     {
194     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_PASTE_RADIO);
195     }
196     if (wID == IDOK) {
197     if (IsDlgButtonChecked(hDlgWnd, IDC_SCP_RADIO) == BST_CHECKED) {
198     // SCP
199     DlgData->Param->DropType = DROP_TYPE_SCP;
200 zmatsuo 7512 GetDlgItemTextA(hDlgWnd, IDC_SCP_PATH,
201     DlgData->Param->ScpSendDirPtr, DlgData->Param->ScpSendDirSize);
202 zmatsuo 7377 } else if (IsDlgButtonChecked(hDlgWnd, IDC_SENDFILE_RADIO) == BST_CHECKED) {
203     // Send File
204 nmaya 10093 DlgData->Param->DropType = DROP_TYPE_SEND_FILE;
205     DlgData->Param->SendfileBinary =
206 zmatsuo 7377 (IsDlgButtonChecked(hDlgWnd, IDC_BINARY_CHECK) == BST_CHECKED) ?
207 nmaya 10093 true : false;
208 zmatsuo 7377 } else /* if (IsDlgButtonChecked(hDlgWnd, IDC_PASTE_RADIO) == BST_CHECKED) */ {
209     // Paste Filename
210     DlgData->Param->DropType = DROP_TYPE_PASTE_FILENAME;
211     DlgData->Param->DropTypePaste = 0;
212     DlgData->Param->DropTypePaste |=
213     (IsDlgButtonChecked(hDlgWnd, IDC_ESCAPE_CHECK) == BST_CHECKED) ?
214     DROP_TYPE_PASTE_ESCAPE : 0;
215     DlgData->Param->DropTypePaste |=
216     (IsDlgButtonChecked(hDlgWnd, IDC_NEWLINE_RADIO) == BST_CHECKED) ?
217     DROP_TYPE_PASTE_NEWLINE : 0;
218     }
219     DlgData->Param->DoSameProcess =
220     (IsDlgButtonChecked(hDlgWnd, IDC_SAME_PROCESS_CHECK) == BST_CHECKED) ?
221     true : false;
222     DlgData->Param->DoSameProcessNextDrop =
223     (IsDlgButtonChecked(hDlgWnd, IDC_SAME_PROCESS_NEXTDROP_CHECK) == BST_CHECKED) ?
224     true : false;
225     DlgData->Param->DoNotShowDialog =
226     (IsDlgButtonChecked(hDlgWnd, IDC_DONTSHOW_CHECK) == BST_CHECKED) ?
227     true : false;
228     }
229     if (wID == IDCANCEL) {
230     DlgData->Param->DropType = DROP_TYPE_CANCEL;
231     }
232     if (wID == IDOK || wID == IDCANCEL) {
233 zmatsuo 7512 TTEndDialog(hDlgWnd, wID);
234 zmatsuo 7377 break;
235     }
236     return FALSE;
237     }
238     case WM_NCDESTROY:
239     free(DlgData);
240     break;
241    
242     default:
243     return FALSE;
244     }
245     return TRUE;
246     }
247    
248     enum drop_type ShowDropDialogBox(
249     HINSTANCE hInstance, HWND hWndParent,
250 doda 8445 const wchar_t *TargetFilename,
251 zmatsuo 7377 enum drop_type DefaultDropType,
252     int RemaingFileCount,
253     bool EnableSCP,
254     bool EnableSendFile,
255 nmaya 10093 bool *SendfileBinary,
256 zmatsuo 7377 TTTSet *pts,
257     unsigned char *DropTypePaste,
258     bool *DoSameProcess,
259     bool *DoSameProcessNextDrop,
260     bool *DoNotShowDialog)
261     {
262     DrapDropDlgParam Param;
263     Param.TargetFilename = TargetFilename;
264     Param.DropType = DefaultDropType;
265     Param.DropTypePaste = *DropTypePaste;
266     Param.ScpEnable = EnableSCP;
267     Param.SendfileEnable = EnableSendFile;
268 nmaya 10093 Param.SendfileBinary = *SendfileBinary;
269 zmatsuo 7377 Param.RemaingFileCount = RemaingFileCount;
270     Param.DoNotShowDialog = *DoNotShowDialog;
271     Param.DoNotShowDialogEnable = pts->ConfirmFileDragAndDrop ? false : true,
272     Param.ScpSendDirPtr = pts->ScpSendDir;
273     Param.ScpSendDirSize = _countof(pts->ScpSendDir);
274 zmatsuo 10614 Param.UILanguageFile = pts->UILanguageFileW;
275 zmatsuo 7377
276 doda 8445 INT_PTR ret = TTDialogBoxParam(
277 zmatsuo 7377 hInstance, MAKEINTRESOURCE(IDD_DAD_DIALOG),
278     hWndParent, (DLGPROC)OnDragDropDlgProc,
279     (LPARAM)&Param);
280     if (ret != IDOK) {
281     return DROP_TYPE_CANCEL;
282     }
283     *DropTypePaste = Param.DropTypePaste;
284     *DoSameProcess = Param.DoSameProcess;
285     *DoSameProcessNextDrop = Param.DoSameProcessNextDrop;
286     *DoNotShowDialog = Param.DoNotShowDialog;
287 nmaya 10093 *SendfileBinary = Param.SendfileBinary;
288 zmatsuo 7377 return Param.DropType;
289     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26