tagging release
[dasher.git] / Src / Win32 / Widgets / Prefs.cpp
blob811daeba6e56716c7544cafd1fe11cdca0db7cc6
1 // Prefs.cpp
2 //
3 /////////////////////////////////////////////////////////////////////////////
4 //
5 // Copyright (c) 2002 Iain Murray, Inference Group, Cavendish, Cambridge.
6 //
7 /////////////////////////////////////////////////////////////////////////////
9 #include "WinCommon.h"
10 #include "Prsht.h"
12 #include "Prefs.h"
13 #include "../../DasherCore/Parameters.h"
15 #include "../resource.h"
16 #include <utility> // for std::pair
17 #include "../Dasher.h"
19 using namespace Dasher;
20 using namespace std;
23 CPrefs::CPrefs(HWND hParent, CDasher *pDasher, CAppSettings *pAppSettings)
24 :m_pDasher(pDasher), m_pAppSettings(pAppSettings) {
25 m_hwnd = 0;
27 // FIXME - is hParent still needed here?
29 m_pAlphabetBox = new CAlphabetBox(hParent, pDasher);
30 m_pControlPage = new CControlPage(hParent, pDasher, pAppSettings);
31 m_pViewPage = new CViewPage(hParent, pDasher, pAppSettings);
32 m_pAdvancedPage = new CAdvancedPage(hParent, pDasher, pAppSettings);
33 m_pLMPage = new CLMPage(hParent, pDasher, pAppSettings);
35 // Set up the property sheets which go into the preferences
36 // dialogue.
38 PROPSHEETPAGE psp[5];
39 PROPSHEETHEADER psh;
41 psp[0].dwSize = sizeof(PROPSHEETPAGE);
42 psp[0].dwFlags = PSP_USEICONID | PSP_USETITLE | PSP_PREMATURE;
43 psp[0].hInstance = WinHelper::hInstApp;
44 psp[0].pszTemplate = MAKEINTRESOURCE(IDD_ALPHABETPAGE);
45 psp[0].pszIcon = NULL;
46 psp[0].pfnDlgProc = (DLGPROC) WinWrapMap::PSWndProc;
47 psp[0].pszTitle = MAKEINTRESOURCE(IDS_PREFS_ALPHABET);
48 psp[0].lParam = (LPARAM) m_pAlphabetBox;
49 psp[0].pfnCallback = NULL;
51 psp[1].dwSize = sizeof(PROPSHEETPAGE);
52 psp[1].dwFlags = PSP_USEICONID | PSP_USETITLE | PSP_PREMATURE;
53 psp[1].hInstance = WinHelper::hInstApp;
54 psp[1].pszTemplate = MAKEINTRESOURCE(IDD_CONTROLPAGE);
55 psp[1].pszIcon = NULL;
56 psp[1].pfnDlgProc = (DLGPROC) WinWrapMap::PSWndProc;
57 psp[1].pszTitle = MAKEINTRESOURCE(IDS_PREFS_CONTROL);
58 psp[1].lParam = (LPARAM) m_pControlPage;
59 psp[1].pfnCallback = NULL;
61 psp[2].dwSize = sizeof(PROPSHEETPAGE);
62 psp[2].dwFlags = PSP_USEICONID | PSP_USETITLE | PSP_PREMATURE;
63 psp[2].hInstance = WinHelper::hInstApp;
64 psp[2].pszTemplate = MAKEINTRESOURCE(IDD_VIEWPAGE);
65 psp[2].pszIcon = NULL;
66 psp[2].pfnDlgProc = (DLGPROC) WinWrapMap::PSWndProc;
67 psp[2].pszTitle = MAKEINTRESOURCE(IDS_PREFS_VIEW);
68 psp[2].lParam = (LPARAM) m_pViewPage;
69 psp[2].pfnCallback = NULL;
71 psp[3].dwSize = sizeof(PROPSHEETPAGE);
72 psp[3].dwFlags = PSP_USEICONID | PSP_USETITLE | PSP_PREMATURE;
73 psp[3].hInstance = WinHelper::hInstApp;
74 psp[3].pszTemplate = MAKEINTRESOURCE(IDD_LMPAGE);
75 psp[3].pszIcon = NULL;
76 psp[3].pfnDlgProc = (DLGPROC) WinWrapMap::PSWndProc;
77 psp[3].pszTitle = MAKEINTRESOURCE(IDS_PREFS_LM);
78 psp[3].lParam = (LPARAM) m_pLMPage;
79 psp[3].pfnCallback = NULL;
81 psp[4].dwSize = sizeof(PROPSHEETPAGE);
82 psp[4].dwFlags = PSP_USEICONID | PSP_USETITLE | PSP_PREMATURE;
83 psp[4].hInstance = WinHelper::hInstApp;
84 psp[4].pszTemplate = MAKEINTRESOURCE(IDD_MISCPAGE);
85 psp[4].pszIcon = NULL;
86 psp[4].pfnDlgProc = (DLGPROC) WinWrapMap::PSWndProc;
87 psp[4].pszTitle = MAKEINTRESOURCE(IDS_PREFS_ADVANCED);
88 psp[4].lParam = (LPARAM) m_pAdvancedPage;
89 psp[4].pfnCallback = NULL;
91 psh.dwSize = sizeof(PROPSHEETHEADER);
92 psh.dwFlags = PSH_USEICONID | PSH_PROPSHEETPAGE;
93 psh.hwndParent = hParent;
94 psh.hInstance = WinHelper::hInstApp;
95 psh.pszIcon = NULL;
96 psh.pszCaption = MAKEINTRESOURCE(IDS_PREFS_TITLE);
97 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
98 psh.nStartPage = 0;
99 psh.ppsp = (LPCPROPSHEETPAGE) &psp;
100 psh.pfnCallback = NULL;
101 PropertySheet(&psh);
103 PopulateWidgets();
106 CPrefs::~CPrefs()
108 delete m_pAlphabetBox;
109 m_pAlphabetBox = NULL;
111 delete m_pControlPage;
112 m_pControlPage = NULL;
114 delete m_pViewPage;
115 m_pViewPage = NULL;
117 delete m_pAdvancedPage;
118 m_pAdvancedPage = NULL;
120 delete m_pLMPage;
121 m_pLMPage = NULL;
126 void CPrefs::PopulateWidgets() {
130 LRESULT CPrefs::WndProc(HWND Window, UINT message, WPARAM wParam, LPARAM lParam) {
131 // TODO: How much of this actually does something?
133 switch (message) {
134 case WM_INITDIALOG:
136 if(!m_hwnd) { // If this is the initial dialog for the first time
137 m_hwnd = Window;
138 PopulateWidgets();
140 return TRUE;
141 break;
143 case WM_COMMAND:
144 switch (LOWORD(wParam)) {
145 case (IDC_DISPLAY):
146 if(HIWORD(wParam) == EN_CHANGE) {
147 HWND Control = GetDlgItem(Window, IDC_DISPLAY);
148 LRESULT BufferLength = SendMessage(Control, WM_GETTEXTLENGTH, 0, 0) + 1; // +1 to allow for terminator
149 TCHAR *Buffer = new TCHAR[BufferLength];
150 SendMessage(Control, WM_GETTEXT, BufferLength, (LPARAM) Buffer);
151 string ItemName;
152 SendMessage(GetDlgItem(Window, IDC_TEXT), WM_SETTEXT, 0, (LPARAM) Buffer);
153 delete[]Buffer;
155 break;
156 case (IDOK):
157 // for(int ii = 0; ii<sizeof(menutable)/sizeof(menuentry); ii++)
158 // {
159 // if(SendMessage(GetDlgItem(Window, menutable[ii].idcNum), BM_GETCHECK, 0, 0) == BST_CHECKED) {
160 // m_pDasher->SetBoolParameter(menutable[ii].paramNum, true);
161 // }
162 // else {
163 // m_pDasher->SetBoolParameter(menutable[ii].paramNum, false);
164 // }
165 // }
166 EndDialog(Window, LOWORD(wParam));
167 return TRUE;
168 break;
169 case (IDCANCEL):
171 EndDialog(Window, LOWORD(wParam));
172 return TRUE;
174 case ID_CANCEL_KEYCONT:
175 EndDialog(Window, LOWORD(wParam));
176 return TRUE;
177 break;
179 default:
180 return FALSE;