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 9324 - (hide annotations) (download) (as text)
Tue Jun 29 15:20:20 2021 UTC (2 years, 9 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 10113 byte(s)
layer for unicode 向けのコードを削除
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    
41     struct DrapDropDlgParam {
42 doda 8445 const wchar_t *TargetFilename;
43 zmatsuo 7377 enum drop_type DropType;
44     unsigned char DropTypePaste;
45     bool ScpEnable;
46     char *ScpSendDirPtr;
47     int ScpSendDirSize;
48     bool SendfileEnable;
49     bool PasteNewlineEnable;
50     int RemaingFileCount;
51     bool DoSameProcess;
52     bool DoSameProcessNextDrop;
53     bool DoNotShowDialogEnable;
54     bool DoNotShowDialog;
55     const char *UILanguageFile;
56     };
57    
58     struct DrapDropDlgData {
59     DrapDropDlgParam *Param;
60     };
61    
62     static LRESULT CALLBACK OnDragDropDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp)
63     {
64     static const DlgTextInfo TextInfos[] = {
65     { 0, "DLG_DANDD_TITLE" },
66     { IDC_DAD_STATIC, "DLG_DANDD_TEXT" },
67     { IDC_SCP_RADIO, "DLG_DANDD_SCP_RADIO" },
68     { IDC_SENDFILE_RADIO, "DLG_DANDD_SENDFILE_RADIO" },
69     { IDC_PASTE_RADIO, "DLG_DANDD_PASTE_RADIO" },
70     { IDC_SCP_PATH_LABEL, "DLG_DANDD_SCP_DEST_LABEL" },
71     { IDC_SCP_PATH_NOTE, "DLG_DANDD_SCP_DEST_NOTE" },
72     { IDC_BINARY_CHECK, "DLG_DANDD_SEND_BINARY_CHECK" },
73     { IDC_ESCAPE_CHECK, "DLG_DANDD_PASTE_ESCAPE_CHECK" },
74     { IDC_SPACE_RADIO, "DLG_DANDD_PASTE_SPACE_RADIO" },
75     { IDC_NEWLINE_RADIO, "DLG_DANDD_PASTE_NEWLINE_RADIO" },
76     { IDC_SAME_PROCESS_CHECK, "DLG_DANDD_NEXTFILES" },
77     { IDC_SAME_PROCESS_NEXTDROP_CHECK, "DLG_DANDD_SAME_NEEXTDROP" },
78     { IDC_DONTSHOW_CHECK, "DLG_DANDD_DONTSHOW_NEEXTDROP" },
79     { IDC_DAD_NOTE, "DLG_DANDD_NOTE" },
80     { IDOK, "BTN_OK" },
81     { IDCANCEL, "BTN_CANCEL" },
82     };
83     DrapDropDlgData *DlgData = (DrapDropDlgData *)GetWindowLongPtr(hDlgWnd, DWLP_USER);
84    
85     switch (msg) {
86     case WM_INITDIALOG:
87     {
88     DlgData = (DrapDropDlgData *)malloc(sizeof(DrapDropDlgData));
89     SetWindowLongPtr(hDlgWnd, DWLP_USER, (LONG_PTR)DlgData);
90     DrapDropDlgParam *Param = (DrapDropDlgParam *)lp;
91     DlgData->Param = Param;
92     SetDlgTexts(hDlgWnd, TextInfos, _countof(TextInfos), Param->UILanguageFile);
93    
94     // target file
95 zmatsuo 9324 SetDlgItemTextW(hDlgWnd, IDC_FILENAME_EDIT, Param->TargetFilename);
96 zmatsuo 7377
97     // checkbox
98     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO,
99     (Param->DropType == DROP_TYPE_SEND_FILE ||
100     Param->DropType == DROP_TYPE_SEND_FILE_BINARY) ? IDC_SENDFILE_RADIO :
101     Param->DropType == DROP_TYPE_PASTE_FILENAME ? IDC_PASTE_RADIO :
102     IDC_SCP_RADIO);
103    
104     // SCP
105 zmatsuo 7512 SetDlgItemTextA(hDlgWnd, IDC_SCP_PATH, Param->ScpSendDirPtr);
106 zmatsuo 7377 if (!Param->ScpEnable) {
107     // ������
108     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_RADIO), FALSE);
109     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH_LABEL), FALSE);
110     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH), FALSE);
111     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH_NOTE), FALSE);
112     }
113 zmatsuo 9035 SetEditboxEmacsKeybind(hDlgWnd, IDC_SCP_PATH);
114 zmatsuo 7377
115     // Send File
116     if (Param->DropType == DROP_TYPE_SEND_FILE_BINARY) {
117     SendMessage(GetDlgItem(hDlgWnd, IDC_BINARY_CHECK), BM_SETCHECK, BST_CHECKED, 0);
118     }
119     if (!Param->SendfileEnable) {
120     // ������
121     EnableWindow(GetDlgItem(hDlgWnd, IDC_SENDFILE_RADIO), FALSE);
122     EnableWindow(GetDlgItem(hDlgWnd, IDC_BINARY_CHECK), FALSE);
123     }
124    
125     // Paste Filename
126     if (Param->DropTypePaste & DROP_TYPE_PASTE_ESCAPE) {
127     SendMessage(GetDlgItem(hDlgWnd, IDC_ESCAPE_CHECK), BM_SETCHECK, BST_CHECKED, 0);
128     }
129     CheckRadioButton(hDlgWnd, IDC_SPACE_RADIO, IDC_NEWLINE_RADIO,
130     Param->DropTypePaste & DROP_TYPE_PASTE_NEWLINE?
131     IDC_NEWLINE_RADIO : IDC_SPACE_RADIO);
132     if (Param->RemaingFileCount < 2) {
133     EnableWindow(GetDlgItem(hDlgWnd, IDC_SPACE_RADIO), FALSE);
134     EnableWindow(GetDlgItem(hDlgWnd, IDC_NEWLINE_RADIO), FALSE);
135     }
136    
137     // Do this for the next %d files
138     char orgmsg[MAX_UIMSG];
139 zmatsuo 7512 GetDlgItemTextA(hDlgWnd, IDC_SAME_PROCESS_CHECK, orgmsg, sizeof(orgmsg));
140 zmatsuo 7377 char uimsg[MAX_UIMSG];
141     _snprintf_s(uimsg, sizeof(uimsg), _TRUNCATE, orgmsg, Param->RemaingFileCount - 1);
142 zmatsuo 7512 SetDlgItemTextA(hDlgWnd, IDC_SAME_PROCESS_CHECK, uimsg);
143 zmatsuo 7377 if (Param->RemaingFileCount < 2) {
144     EnableWindow(GetDlgItem(hDlgWnd, IDC_SAME_PROCESS_CHECK), FALSE);
145     }
146    
147     // Dont Show Dialog
148     if (Param->DoNotShowDialog) {
149     SendMessage(GetDlgItem(hDlgWnd, IDC_DONTSHOW_CHECK), BM_SETCHECK, BST_CHECKED, 0);
150     }
151     if (!Param->DoNotShowDialogEnable) {
152     EnableWindow(GetDlgItem(hDlgWnd, IDC_DONTSHOW_CHECK), FALSE);
153     EnableWindow(GetDlgItem(hDlgWnd, IDC_DAD_NOTE), FALSE);
154     }
155    
156     // focus to "SCP dest textbox" or "Cancel"
157 zmatsuo 7512 {
158     int focus_id;
159     if (Param->ScpEnable) {
160     focus_id = IDC_SCP_PATH;
161     } else {
162     focus_id = IDCANCEL;
163     }
164     PostMessage(hDlgWnd, WM_NEXTDLGCTL,
165     (WPARAM)GetDlgItem(hDlgWnd, focus_id), TRUE);
166 zmatsuo 7377 }
167    
168 zmatsuo 7592 CenterWindow(hDlgWnd, GetParent(hDlgWnd));
169 zmatsuo 7377 // TRUE���������{�^�����t�H�[�J�X�������������B
170     return FALSE;
171     }
172    
173     case WM_COMMAND:
174     {
175     WORD wID = GET_WM_COMMAND_ID(wp, lp);
176     const WORD wCMD = GET_WM_COMMAND_CMD(wp, lp);
177     if (wCMD == BN_DBLCLK &&
178     (wID == IDC_SCP_RADIO || wID == IDC_SENDFILE_RADIO || wID == IDC_PASTE_RADIO))
179     { // radio buttons double click
180     wID = IDOK;
181     }
182     if (wCMD == EN_SETFOCUS && wID == IDC_SCP_PATH) {
183     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_SCP_RADIO);
184     }
185     if (wID == IDC_BINARY_CHECK) {
186     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_SENDFILE_RADIO);
187     }
188     if (wID == IDC_ESCAPE_CHECK ||
189     wID == IDC_SPACE_RADIO || wID == IDC_NEWLINE_RADIO)
190     {
191     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_PASTE_RADIO);
192     }
193     if (wID == IDOK) {
194     if (IsDlgButtonChecked(hDlgWnd, IDC_SCP_RADIO) == BST_CHECKED) {
195     // SCP
196     DlgData->Param->DropType = DROP_TYPE_SCP;
197 zmatsuo 7512 GetDlgItemTextA(hDlgWnd, IDC_SCP_PATH,
198     DlgData->Param->ScpSendDirPtr, DlgData->Param->ScpSendDirSize);
199 zmatsuo 7377 } else if (IsDlgButtonChecked(hDlgWnd, IDC_SENDFILE_RADIO) == BST_CHECKED) {
200     // Send File
201     DlgData->Param->DropType =
202     (IsDlgButtonChecked(hDlgWnd, IDC_BINARY_CHECK) == BST_CHECKED) ?
203     DROP_TYPE_SEND_FILE_BINARY : DROP_TYPE_SEND_FILE;
204     } else /* if (IsDlgButtonChecked(hDlgWnd, IDC_PASTE_RADIO) == BST_CHECKED) */ {
205     // Paste Filename
206     DlgData->Param->DropType = DROP_TYPE_PASTE_FILENAME;
207     DlgData->Param->DropTypePaste = 0;
208     DlgData->Param->DropTypePaste |=
209     (IsDlgButtonChecked(hDlgWnd, IDC_ESCAPE_CHECK) == BST_CHECKED) ?
210     DROP_TYPE_PASTE_ESCAPE : 0;
211     DlgData->Param->DropTypePaste |=
212     (IsDlgButtonChecked(hDlgWnd, IDC_NEWLINE_RADIO) == BST_CHECKED) ?
213     DROP_TYPE_PASTE_NEWLINE : 0;
214     }
215     DlgData->Param->DoSameProcess =
216     (IsDlgButtonChecked(hDlgWnd, IDC_SAME_PROCESS_CHECK) == BST_CHECKED) ?
217     true : false;
218     DlgData->Param->DoSameProcessNextDrop =
219     (IsDlgButtonChecked(hDlgWnd, IDC_SAME_PROCESS_NEXTDROP_CHECK) == BST_CHECKED) ?
220     true : false;
221     DlgData->Param->DoNotShowDialog =
222     (IsDlgButtonChecked(hDlgWnd, IDC_DONTSHOW_CHECK) == BST_CHECKED) ?
223     true : false;
224     }
225     if (wID == IDCANCEL) {
226     DlgData->Param->DropType = DROP_TYPE_CANCEL;
227     }
228     if (wID == IDOK || wID == IDCANCEL) {
229 zmatsuo 7512 TTEndDialog(hDlgWnd, wID);
230 zmatsuo 7377 break;
231     }
232     return FALSE;
233     }
234     case WM_NCDESTROY:
235     free(DlgData);
236     break;
237    
238     default:
239     return FALSE;
240     }
241     return TRUE;
242     }
243    
244     enum drop_type ShowDropDialogBox(
245     HINSTANCE hInstance, HWND hWndParent,
246 doda 8445 const wchar_t *TargetFilename,
247 zmatsuo 7377 enum drop_type DefaultDropType,
248     int RemaingFileCount,
249     bool EnableSCP,
250     bool EnableSendFile,
251     TTTSet *pts,
252     unsigned char *DropTypePaste,
253     bool *DoSameProcess,
254     bool *DoSameProcessNextDrop,
255     bool *DoNotShowDialog)
256     {
257     DrapDropDlgParam Param;
258     Param.TargetFilename = TargetFilename;
259     Param.DropType = DefaultDropType;
260     Param.DropTypePaste = *DropTypePaste;
261     Param.ScpEnable = EnableSCP;
262     Param.SendfileEnable = EnableSendFile;
263     Param.PasteNewlineEnable = true;
264     Param.RemaingFileCount = RemaingFileCount;
265     Param.DoNotShowDialog = *DoNotShowDialog;
266     Param.DoNotShowDialogEnable = pts->ConfirmFileDragAndDrop ? false : true,
267     Param.ScpSendDirPtr = pts->ScpSendDir;
268     Param.ScpSendDirSize = _countof(pts->ScpSendDir);
269     Param.UILanguageFile = pts->UILanguageFile;
270    
271 doda 8445 INT_PTR ret = TTDialogBoxParam(
272 zmatsuo 7377 hInstance, MAKEINTRESOURCE(IDD_DAD_DIALOG),
273     hWndParent, (DLGPROC)OnDragDropDlgProc,
274     (LPARAM)&Param);
275     if (ret != IDOK) {
276     return DROP_TYPE_CANCEL;
277     }
278     *DropTypePaste = Param.DropTypePaste;
279     *DoSameProcess = Param.DoSameProcess;
280     *DoSameProcessNextDrop = Param.DoSameProcessNextDrop;
281     *DoNotShowDialog = Param.DoNotShowDialog;
282     return Param.DropType;
283     }

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