1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// Windows/Control/Dialog.h
2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef __WINDOWS_CONTROL_DIALOG_H
4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define __WINDOWS_CONTROL_DIALOG_H
5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../Window.h"
7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NWindows {
9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NControl {
10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CDialog: public CWindow
12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CDialog(HWND wnd = NULL): CWindow(wnd){};
15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual ~CDialog() {};
16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  HWND GetItem(int itemID) const
18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return GetDlgItem(_window, itemID); }
19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool EnableItem(int itemID, bool enable) const
21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(::EnableWindow(GetItem(itemID), BoolToBOOL(enable))); }
22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool ShowItem(int itemID, int cmdShow) const
24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(::ShowWindow(GetItem(itemID), cmdShow)); }
25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool ShowItem_Bool(int itemID, bool show) const
27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return ShowItem(itemID, show ? SW_SHOW: SW_HIDE); }
28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool HideItem(int itemID) const { return ShowItem(itemID, SW_HIDE); }
30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool SetItemText(int itemID, LPCTSTR s)
32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(SetDlgItemText(_window, itemID, s)); }
33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #ifndef _UNICODE
35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool SetItemText(int itemID, LPCWSTR s)
36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    CWindow window(GetItem(itemID));
38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return window.SetText(s);
39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #endif
41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  UINT GetItemText(int itemID, LPTSTR string, int maxCount)
43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return GetDlgItemText(_window, itemID, string, maxCount); }
44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #ifndef _UNICODE
45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  /*
46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool GetItemText(int itemID, LPWSTR string, int maxCount)
47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    CWindow window(GetItem(itemID));
49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return window.GetText(string, maxCount);
50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  */
52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #endif
53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool SetItemInt(int itemID, UINT value, bool isSigned)
55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(SetDlgItemInt(_window, itemID, value, BoolToBOOL(isSigned))); }
56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool GetItemInt(int itemID, bool isSigned, UINT &value)
57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    BOOL result;
59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    value = GetDlgItemInt(_window, itemID, &result, BoolToBOOL(isSigned));
60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return BOOLToBool(result);
61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  HWND GetNextGroupItem(HWND control, bool previous)
64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return GetNextDlgGroupItem(_window, control, BoolToBOOL(previous)); }
65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  HWND GetNextTabItem(HWND control, bool previous)
66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return GetNextDlgTabItem(_window, control, BoolToBOOL(previous)); }
67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool MapRect(LPRECT rect)
69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(MapDialogRect(_window, rect)); }
70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool IsMessage(LPMSG message)
72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(IsDialogMessage(_window, message)); }
73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  LRESULT SendItemMessage(int itemID, UINT message, WPARAM wParam, LPARAM lParam)
75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return SendDlgItemMessage(_window, itemID, message, wParam, lParam); }
76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool CheckButton(int buttonID, UINT checkState)
78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(CheckDlgButton(_window, buttonID, checkState)); }
79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool CheckButton(int buttonID, bool checkState)
80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED)); }
81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  UINT IsButtonChecked(int buttonID) const
83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return IsDlgButtonChecked(_window, buttonID); }
84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool IsButtonCheckedBool(int buttonID) const
85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return (IsButtonChecked(buttonID) == BST_CHECKED); }
86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool CheckRadioButton(int firstButtonID, int lastButtonID, int checkButtonID)
88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return BOOLToBool(::CheckRadioButton(_window, firstButtonID, lastButtonID, checkButtonID)); }
89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnInit() { return true; }
92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnCommand(WPARAM wParam, LPARAM lParam);
93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnCommand(int code, int itemID, LPARAM lParam);
94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; }
95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  /*
97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #ifdef UNDER_CE
98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnHelp(void *) { OnHelp(); };
99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #else
100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnHelp(LPHELPINFO) { OnHelp(); };
101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #endif
102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  */
103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnHelp() {};
104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnOK() {};
107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnCancel() {};
108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */) { return false; }
109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; }
110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  LONG_PTR SetMsgResult(LONG_PTR newLongPtr )
112cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return SetLongPtr(DWLP_MSGRESULT, newLongPtr); }
113cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  LONG_PTR GetMsgResult() const
114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    { return GetLongPtr(DWLP_MSGRESULT); }
115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool GetMargins(int margin, int &x, int &y);
117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int Units_To_Pixels_X(int units);
118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool GetItemSizes(int id, int &x, int &y);
119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void GetClientRectOfItem(int id, RECT &rect);
120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool MoveItem(int id, int x, int y, int width, int height, bool repaint = true);
121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void NormalizeSize(bool fullNormalize = false);
123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void NormalizePosition();
124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CModelessDialog: public CDialog
127cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
128cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
129cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool Create(LPCTSTR templateName, HWND parentWindow);
130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); }
131cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #ifndef _UNICODE
132cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool Create(LPCWSTR templateName, HWND parentWindow);
133cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #endif
134cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnOK() { Destroy(); }
135cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnCancel() { Destroy(); }
136cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
137cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
138cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CModalDialog: public CDialog
139cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
140cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
141cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  INT_PTR Create(LPCTSTR templateName, HWND parentWindow);
142cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  INT_PTR Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); }
143cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #ifndef _UNICODE
144cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  INT_PTR Create(LPCWSTR templateName, HWND parentWindow);
145cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #endif
146cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
147cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool End(INT_PTR result) { return BOOLToBool(::EndDialog(_window, result)); }
148cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnOK() { End(IDOK); }
149cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual void OnCancel() { End(IDCANCEL); }
150cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
151cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
152cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CDialogChildControl: public NWindows::CWindow
153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int m_ID;
155cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
156cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Init(const NWindows::NControl::CDialog &parentDialog, int id)
157cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
158cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    m_ID = id;
159cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    Attach(parentDialog.GetItem(id));
160cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
161cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
162cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
163cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool IsDialogSizeOK(int xSize, int ySize);
164cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
165cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}}
166cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
168