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 7377 - (hide annotations) (download) (as text)
Fri Dec 28 14:57:41 2018 UTC (5 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 11100 byte(s)
ソースの文字コードを揃えた UTF8(BOM) -> Shift_JIS
1 zmatsuo 7377 /*
2     * (C) 2005-2018 TeraTerm Project
3     * 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     const char *TargetFilename;
43     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     HFONT hNewFont;
60     DrapDropDlgParam *Param;
61     };
62    
63     static LRESULT CALLBACK OnDragDropDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp)
64     {
65     static const int FontIDs[] = {
66     IDC_FILENAME_EDIT,
67     IDC_DAD_STATIC,
68     IDC_SCP_RADIO, IDC_SENDFILE_RADIO, IDC_PASTE_RADIO,
69     IDC_SCP_PATH_LABEL, IDC_SCP_PATH, IDC_SCP_PATH_NOTE,
70     IDC_BINARY_CHECK,
71     IDC_ESCAPE_CHECK, IDC_NEWLINE_RADIO, IDC_SPACE_RADIO,
72     IDC_SAME_PROCESS_CHECK, IDC_SAME_PROCESS_NEXTDROP_CHECK, IDC_DONTSHOW_CHECK,
73     IDC_DAD_NOTE,
74     IDOK, IDCANCEL,
75     };
76     static const DlgTextInfo TextInfos[] = {
77     { 0, "DLG_DANDD_TITLE" },
78     { IDC_DAD_STATIC, "DLG_DANDD_TEXT" },
79     { IDC_SCP_RADIO, "DLG_DANDD_SCP_RADIO" },
80     { IDC_SENDFILE_RADIO, "DLG_DANDD_SENDFILE_RADIO" },
81     { IDC_PASTE_RADIO, "DLG_DANDD_PASTE_RADIO" },
82     { IDC_SCP_PATH_LABEL, "DLG_DANDD_SCP_DEST_LABEL" },
83     { IDC_SCP_PATH_NOTE, "DLG_DANDD_SCP_DEST_NOTE" },
84     { IDC_BINARY_CHECK, "DLG_DANDD_SEND_BINARY_CHECK" },
85     { IDC_ESCAPE_CHECK, "DLG_DANDD_PASTE_ESCAPE_CHECK" },
86     { IDC_SPACE_RADIO, "DLG_DANDD_PASTE_SPACE_RADIO" },
87     { IDC_NEWLINE_RADIO, "DLG_DANDD_PASTE_NEWLINE_RADIO" },
88     { IDC_SAME_PROCESS_CHECK, "DLG_DANDD_NEXTFILES" },
89     { IDC_SAME_PROCESS_NEXTDROP_CHECK, "DLG_DANDD_SAME_NEEXTDROP" },
90     { IDC_DONTSHOW_CHECK, "DLG_DANDD_DONTSHOW_NEEXTDROP" },
91     { IDC_DAD_NOTE, "DLG_DANDD_NOTE" },
92     { IDOK, "BTN_OK" },
93     { IDCANCEL, "BTN_CANCEL" },
94     };
95     DrapDropDlgData *DlgData = (DrapDropDlgData *)GetWindowLongPtr(hDlgWnd, DWLP_USER);
96    
97     switch (msg) {
98     case WM_INITDIALOG:
99     {
100     DlgData = (DrapDropDlgData *)malloc(sizeof(DrapDropDlgData));
101     SetWindowLongPtr(hDlgWnd, DWLP_USER, (LONG_PTR)DlgData);
102     DrapDropDlgParam *Param = (DrapDropDlgParam *)lp;
103     DlgData->Param = Param;
104     DlgData->hNewFont = SetDlgFonts(hDlgWnd, FontIDs, _countof(FontIDs), Param->UILanguageFile, NULL);
105     SetDlgTexts(hDlgWnd, TextInfos, _countof(TextInfos), Param->UILanguageFile);
106    
107     // target file
108     SetDlgItemText(hDlgWnd, IDC_FILENAME_EDIT, Param->TargetFilename);
109    
110     // checkbox
111     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO,
112     (Param->DropType == DROP_TYPE_SEND_FILE ||
113     Param->DropType == DROP_TYPE_SEND_FILE_BINARY) ? IDC_SENDFILE_RADIO :
114     Param->DropType == DROP_TYPE_PASTE_FILENAME ? IDC_PASTE_RADIO :
115     IDC_SCP_RADIO);
116    
117     // SCP
118     SendMessage(GetDlgItem(hDlgWnd, IDC_SCP_PATH), WM_SETTEXT, 0, (LPARAM)Param->ScpSendDirPtr);
119     if (!Param->ScpEnable) {
120     // ������
121     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_RADIO), FALSE);
122     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH_LABEL), FALSE);
123     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH), FALSE);
124     EnableWindow(GetDlgItem(hDlgWnd, IDC_SCP_PATH_NOTE), FALSE);
125     }
126     SetEditboxSubclass(hDlgWnd, IDC_SCP_PATH, FALSE);
127    
128     // Send File
129     if (Param->DropType == DROP_TYPE_SEND_FILE_BINARY) {
130     SendMessage(GetDlgItem(hDlgWnd, IDC_BINARY_CHECK), BM_SETCHECK, BST_CHECKED, 0);
131     }
132     if (!Param->SendfileEnable) {
133     // ������
134     EnableWindow(GetDlgItem(hDlgWnd, IDC_SENDFILE_RADIO), FALSE);
135     EnableWindow(GetDlgItem(hDlgWnd, IDC_BINARY_CHECK), FALSE);
136     }
137    
138     // Paste Filename
139     if (Param->DropTypePaste & DROP_TYPE_PASTE_ESCAPE) {
140     SendMessage(GetDlgItem(hDlgWnd, IDC_ESCAPE_CHECK), BM_SETCHECK, BST_CHECKED, 0);
141     }
142     CheckRadioButton(hDlgWnd, IDC_SPACE_RADIO, IDC_NEWLINE_RADIO,
143     Param->DropTypePaste & DROP_TYPE_PASTE_NEWLINE?
144     IDC_NEWLINE_RADIO : IDC_SPACE_RADIO);
145     if (Param->RemaingFileCount < 2) {
146     EnableWindow(GetDlgItem(hDlgWnd, IDC_SPACE_RADIO), FALSE);
147     EnableWindow(GetDlgItem(hDlgWnd, IDC_NEWLINE_RADIO), FALSE);
148     }
149    
150     // Do this for the next %d files
151     char orgmsg[MAX_UIMSG];
152     GetDlgItemText(hDlgWnd, IDC_SAME_PROCESS_CHECK, orgmsg, sizeof(orgmsg));
153     char uimsg[MAX_UIMSG];
154     _snprintf_s(uimsg, sizeof(uimsg), _TRUNCATE, orgmsg, Param->RemaingFileCount - 1);
155     SetDlgItemText(hDlgWnd, IDC_SAME_PROCESS_CHECK, uimsg);
156     if (Param->RemaingFileCount < 2) {
157     EnableWindow(GetDlgItem(hDlgWnd, IDC_SAME_PROCESS_CHECK), FALSE);
158     }
159    
160     // Dont Show Dialog
161     if (Param->DoNotShowDialog) {
162     SendMessage(GetDlgItem(hDlgWnd, IDC_DONTSHOW_CHECK), BM_SETCHECK, BST_CHECKED, 0);
163     }
164     if (!Param->DoNotShowDialogEnable) {
165     EnableWindow(GetDlgItem(hDlgWnd, IDC_DONTSHOW_CHECK), FALSE);
166     EnableWindow(GetDlgItem(hDlgWnd, IDC_DAD_NOTE), FALSE);
167     }
168    
169     // focus to "SCP dest textbox" or "Cancel"
170     if (Param->ScpEnable) {
171     // "SCP" �L������ Cancel ���t�H�[�J�X�������A���I�I�� SCP PATH ���t�H�[�J�X��
172     // �����������������B
173     SetFocus(GetDlgItem(hDlgWnd, IDC_SCP_RADIO));
174     } else {
175     // �t�H�[�J�X������������ Cancel ���������A�������_���� IDOK ��
176     // �t�H�[�J�X���������B���� WM_NEXTDLGCTL ���t�H�[�J�X�������{�^���������B
177     SetFocus(GetDlgItem(hDlgWnd, IDOK));
178     }
179     // �t�H�[�J�X�������{�^��������
180     // SetFocus() �������t�H�[�J�X�����������^�u�L�[�����������������o�������A
181     // �������b�Z�[�W�����p����
182     PostMessage(hDlgWnd, WM_NEXTDLGCTL, 0, 0L);
183    
184     // TRUE���������{�^�����t�H�[�J�X�������������B
185     return FALSE;
186     }
187    
188     case WM_COMMAND:
189     {
190     WORD wID = GET_WM_COMMAND_ID(wp, lp);
191     const WORD wCMD = GET_WM_COMMAND_CMD(wp, lp);
192     if (wCMD == BN_DBLCLK &&
193     (wID == IDC_SCP_RADIO || wID == IDC_SENDFILE_RADIO || wID == IDC_PASTE_RADIO))
194     { // radio buttons double click
195     wID = IDOK;
196     }
197     if (wCMD == EN_SETFOCUS && wID == IDC_SCP_PATH) {
198     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_SCP_RADIO);
199     }
200     if (wID == IDC_BINARY_CHECK) {
201     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_SENDFILE_RADIO);
202     }
203     if (wID == IDC_ESCAPE_CHECK ||
204     wID == IDC_SPACE_RADIO || wID == IDC_NEWLINE_RADIO)
205     {
206     CheckRadioButton(hDlgWnd, IDC_SCP_RADIO, IDC_PASTE_RADIO, IDC_PASTE_RADIO);
207     }
208     if (wID == IDOK) {
209     if (IsDlgButtonChecked(hDlgWnd, IDC_SCP_RADIO) == BST_CHECKED) {
210     // SCP
211     DlgData->Param->DropType = DROP_TYPE_SCP;
212     SendMessage(GetDlgItem(hDlgWnd, IDC_SCP_PATH), WM_GETTEXT,
213     (WPARAM)DlgData->Param->ScpSendDirSize,
214     (LPARAM)DlgData->Param->ScpSendDirPtr);
215     } else if (IsDlgButtonChecked(hDlgWnd, IDC_SENDFILE_RADIO) == BST_CHECKED) {
216     // Send File
217     DlgData->Param->DropType =
218     (IsDlgButtonChecked(hDlgWnd, IDC_BINARY_CHECK) == BST_CHECKED) ?
219     DROP_TYPE_SEND_FILE_BINARY : DROP_TYPE_SEND_FILE;
220     } else /* if (IsDlgButtonChecked(hDlgWnd, IDC_PASTE_RADIO) == BST_CHECKED) */ {
221     // Paste Filename
222     DlgData->Param->DropType = DROP_TYPE_PASTE_FILENAME;
223     DlgData->Param->DropTypePaste = 0;
224     DlgData->Param->DropTypePaste |=
225     (IsDlgButtonChecked(hDlgWnd, IDC_ESCAPE_CHECK) == BST_CHECKED) ?
226     DROP_TYPE_PASTE_ESCAPE : 0;
227     DlgData->Param->DropTypePaste |=
228     (IsDlgButtonChecked(hDlgWnd, IDC_NEWLINE_RADIO) == BST_CHECKED) ?
229     DROP_TYPE_PASTE_NEWLINE : 0;
230     }
231     DlgData->Param->DoSameProcess =
232     (IsDlgButtonChecked(hDlgWnd, IDC_SAME_PROCESS_CHECK) == BST_CHECKED) ?
233     true : false;
234     DlgData->Param->DoSameProcessNextDrop =
235     (IsDlgButtonChecked(hDlgWnd, IDC_SAME_PROCESS_NEXTDROP_CHECK) == BST_CHECKED) ?
236     true : false;
237     DlgData->Param->DoNotShowDialog =
238     (IsDlgButtonChecked(hDlgWnd, IDC_DONTSHOW_CHECK) == BST_CHECKED) ?
239     true : false;
240     }
241     if (wID == IDCANCEL) {
242     DlgData->Param->DropType = DROP_TYPE_CANCEL;
243     }
244     if (wID == IDOK || wID == IDCANCEL) {
245     EndDialog(hDlgWnd, wID);
246     break;
247     }
248     return FALSE;
249     }
250     case WM_NCDESTROY:
251     if (DlgData->hNewFont != NULL) {
252     DeleteObject(DlgData->hNewFont);
253     DlgData->hNewFont = NULL;
254     }
255     free(DlgData);
256     break;
257    
258     default:
259     return FALSE;
260     }
261     return TRUE;
262     }
263    
264     enum drop_type ShowDropDialogBox(
265     HINSTANCE hInstance, HWND hWndParent,
266     const char *TargetFilename,
267     enum drop_type DefaultDropType,
268     int RemaingFileCount,
269     bool EnableSCP,
270     bool EnableSendFile,
271     TTTSet *pts,
272     unsigned char *DropTypePaste,
273     bool *DoSameProcess,
274     bool *DoSameProcessNextDrop,
275     bool *DoNotShowDialog)
276     {
277     DrapDropDlgParam Param;
278     Param.TargetFilename = TargetFilename;
279     Param.DropType = DefaultDropType;
280     Param.DropTypePaste = *DropTypePaste;
281     Param.ScpEnable = EnableSCP;
282     Param.SendfileEnable = EnableSendFile;
283     Param.PasteNewlineEnable = true;
284     Param.RemaingFileCount = RemaingFileCount;
285     Param.DoNotShowDialog = *DoNotShowDialog;
286     Param.DoNotShowDialogEnable = pts->ConfirmFileDragAndDrop ? false : true,
287     Param.ScpSendDirPtr = pts->ScpSendDir;
288     Param.ScpSendDirSize = _countof(pts->ScpSendDir);
289     Param.UILanguageFile = pts->UILanguageFile;
290    
291     int ret = DialogBoxParam(
292     hInstance, MAKEINTRESOURCE(IDD_DAD_DIALOG),
293     hWndParent, (DLGPROC)OnDragDropDlgProc,
294     (LPARAM)&Param);
295     if (ret != IDOK) {
296     return DROP_TYPE_CANCEL;
297     }
298     *DropTypePaste = Param.DropTypePaste;
299     *DoSameProcess = Param.DoSameProcess;
300     *DoSameProcessNextDrop = Param.DoSameProcessNextDrop;
301     *DoNotShowDialog = Param.DoNotShowDialog;
302     return Param.DropType;
303     }

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