source: trunk/src/HaliteListViewDlg.hpp @ 493

Revision 493, 4.6 KB checked in by Eoin, 12 years ago (diff)

Freedom from automatic ATL and/or WTL namespaces.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2008.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#pragma once
8
9
10#define HAL_ADJUST_DLG                                  30100
11
12#define HAL_ADJUST_DLG_BEGIN                    30101
13#define IDC_ADDT_MOVETO_FOLDER                  HAL_ADJUST_DLG_BEGIN + 1
14#define IDC_ADDT_MOVETO_BROWSE                  HAL_ADJUST_DLG_BEGIN + 2
15#define IDC_ADDT_MOVETO_CHECK                   HAL_ADJUST_DLG_BEGIN + 3
16#define IDC_ADDT_DEFFLD_TEXT                    HAL_ADJUST_DLG_BEGIN + 4
17#define IDC_ADDT_NOTE_TEXT                              HAL_ADJUST_DLG_BEGIN + 5
18#define HAL_ADDT_TITLE                                  HAL_ADJUST_DLG_BEGIN + 6
19
20#ifndef RC_INVOKED
21
22#include "GenericAddDialog.hpp"
23
24class HaliteSaveAndMoveToDlg :
25        public ATL::CDialogImpl<HaliteSaveAndMoveToDlg>,
26        public ATL::CAutoSizeWindow<HaliteSaveAndMoveToDlg, true>,
27        public CWinDataExchangeEx<HaliteSaveAndMoveToDlg>
28{
29public:
30        typedef HaliteSaveAndMoveToDlg thisClass;
31        typedef ATL::CAutoSizeWindow<thisClass, true> autosizeClass;
32       
33public:
34        HaliteSaveAndMoveToDlg(wstring& s, wstring& m, bool& u, bool d = false) :
35                saveDirectory_(s),
36                moveToDirectory_(m),
37                useMove_(u),
38                disableSaveDir_(d)
39        {}
40
41        enum { IDD = HAL_ADJUST_DLG };
42
43    BEGIN_MSG_MAP_EX(thisClass)
44                MSG_WM_INITDIALOG(onInitDialog)
45                COMMAND_ID_HANDLER_EX(IDC_ADDT_MOVETO_CHECK, OnMoveTo)
46                COMMAND_ID_HANDLER_EX(IDC_BC_SAVEBROWSE, OnBrowse)
47                COMMAND_ID_HANDLER_EX(IDC_ADDT_MOVETO_BROWSE, OnMoveBrowse)
48
49        CHAIN_MSG_MAP(autosizeClass)
50    END_MSG_MAP()
51
52    BEGIN_DDX_MAP(thisClass)
53        DDX_CHECK(IDC_ADDT_MOVETO_CHECK, useMove_)
54                DDX_EX_STDWSTRING(IDC_BC_SAVEFOLDER, saveDirectory_)
55                DDX_EX_STDWSTRING(IDC_ADDT_MOVETO_FOLDER, moveToDirectory_)
56    END_DDX_MAP()       
57
58#define ADD_FOLDERS_LAYOUT \
59        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COL(_auto)), \
60                WMB_ROW(_auto,  IDC_ADDT_DEFFLD_TEXT, _r), \
61                WMB_ROW(_auto,  IDC_BC_SAVEFOLDER, IDC_BC_SAVEBROWSE), \
62                WMB_ROW(_auto,  IDC_ADDT_MOVETO_CHECK, _r), \
63                WMB_ROW(_auto,  IDC_ADDT_MOVETO_FOLDER, IDC_ADDT_MOVETO_BROWSE), \
64        WMB_END()
65
66        BEGIN_WINDOW_MAP(thisClass, 0, 0, 3, 3)
67                WMB_HEAD(WMB_COLNOMAX(_exp)),
68                        WMB_ROW(_auto,  ADD_FOLDERS_LAYOUT),
69                WMB_END()
70        END_WINDOW_MAP()       
71
72        LRESULT onInitDialog(HWND, LPARAM)
73        {
74                BOOL retval = DoDataExchange(false);
75
76                if (disableSaveDir_)
77                {
78                        ::EnableWindow(GetDlgItem(IDC_BC_SAVEFOLDER), false);
79                        ::EnableWindow(GetDlgItem(IDC_BC_SAVEBROWSE), false);
80                }
81
82                OnMoveTo(0, 0, GetDlgItem(IDC_ADDT_MOVETO_CHECK));
83
84                SetMsgHandled(false);
85                return 0;
86        }
87       
88        void OnMoveTo(UINT, int, HWND hWnd)
89        {
90                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
91
92                if (result == BST_CHECKED)
93                {
94                        ::EnableWindow(GetDlgItem(IDC_ADDT_MOVETO_FOLDER), true);
95                        ::EnableWindow(GetDlgItem(IDC_ADDT_MOVETO_BROWSE), true);
96                }
97                else
98                {
99                        ::EnableWindow(GetDlgItem(IDC_ADDT_MOVETO_FOLDER), false);
100                        ::EnableWindow(GetDlgItem(IDC_ADDT_MOVETO_BROWSE), false);
101                }
102        }
103       
104        void OnBrowse(UINT, int, HWND hWnd)
105        {
106                std::wstring save_prompt = hal::app().res_wstr(IDS_SAVEPROMPT);         
107                WTL::CFolderDialog fldDlg(NULL, save_prompt.c_str(),
108                        BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE);
109               
110                wstring defaultSaveFolder = saveDirectory_;
111                fldDlg.SetInitialFolder(defaultSaveFolder.c_str());
112         
113                if (IDOK == fldDlg.DoModal())
114                {
115                        saveDirectory_ = wstring(fldDlg.m_szFolderPath);
116                        DoDataExchange(false);
117                }
118        }
119       
120        void OnMoveBrowse(UINT, int, HWND hWnd)
121        {
122                std::wstring save_prompt = hal::app().res_wstr(IDS_SAVEPROMPT);         
123                WTL::CFolderDialog fldDlg(NULL, save_prompt.c_str(),
124                        BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE);
125               
126                wstring defaultMoveFolder = moveToDirectory_;
127                fldDlg.SetInitialFolder(defaultMoveFolder.c_str());
128         
129                if (IDOK == fldDlg.DoModal())
130                {
131                        moveToDirectory_ = wstring(fldDlg.m_szFolderPath);
132                        DoDataExchange(false);
133                }
134        }               
135
136private:
137        wstring& saveDirectory_;
138        wstring& moveToDirectory_;
139        bool& useMove_;
140        bool disableSaveDir_;
141};
142
143class HaliteListViewAdjustDlg :
144        public WTLx::GenericAddContainerDialog<HaliteListViewAdjustDlg, HaliteSaveAndMoveToDlg, HAL_ADJUST_DLG>
145{
146public:
147        typedef HaliteListViewAdjustDlg thisClass;
148        typedef WTLx::GenericAddContainerDialog<thisClass, HaliteSaveAndMoveToDlg, HAL_ADJUST_DLG> genericBaseClass;
149       
150public:
151        HaliteListViewAdjustDlg(wstring title, wstring& s, wstring& m, bool& u, bool d=false) :
152                genericBaseClass(title, "genericAddDlgs/HaliteListViewAdjustDlg", "HaliteListViewAdjustDlg", dlg_),
153                dlg_(s, m, u, d)
154        {}
155
156        BOOL DoDataExchange(bool direction)
157        {
158                return dlg_.DoDataExchange(direction);
159        }
160
161private:       
162        HaliteSaveAndMoveToDlg dlg_;
163};
164
165#endif
Note: See TracBrowser for help on using the repository browser.