xref: /aosp_15_r20/external/lzma/CPP/Windows/Control/Dialog.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Windows/Control/Dialog.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_CONTROL_DIALOG_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_CONTROL_DIALOG_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../Window.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker namespace NWindows {
9*f6dc9357SAndroid Build Coastguard Worker namespace NControl {
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #ifndef IDCONTINUE
12*f6dc9357SAndroid Build Coastguard Worker #define IDCONTINUE 11
13*f6dc9357SAndroid Build Coastguard Worker #endif
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker class CDialog: public CWindow
16*f6dc9357SAndroid Build Coastguard Worker {
17*f6dc9357SAndroid Build Coastguard Worker   // Z7_CLASS_NO_COPY(CDialog)
18*f6dc9357SAndroid Build Coastguard Worker public:
CWindow(wnd)19*f6dc9357SAndroid Build Coastguard Worker   CDialog(HWND wnd = NULL): CWindow(wnd) {}
~CDialog()20*f6dc9357SAndroid Build Coastguard Worker   virtual ~CDialog() {}
21*f6dc9357SAndroid Build Coastguard Worker 
GetItem(unsigned itemID)22*f6dc9357SAndroid Build Coastguard Worker   HWND GetItem(unsigned itemID) const
23*f6dc9357SAndroid Build Coastguard Worker     { return GetDlgItem(_window, (int)itemID); }
24*f6dc9357SAndroid Build Coastguard Worker 
EnableItem(unsigned itemID,bool enable)25*f6dc9357SAndroid Build Coastguard Worker   bool EnableItem(unsigned itemID, bool enable) const
26*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(::EnableWindow(GetItem(itemID), BoolToBOOL(enable))); }
27*f6dc9357SAndroid Build Coastguard Worker 
ShowItem(unsigned itemID,int cmdShow)28*f6dc9357SAndroid Build Coastguard Worker   bool ShowItem(unsigned itemID, int cmdShow) const
29*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(::ShowWindow(GetItem(itemID), cmdShow)); }
30*f6dc9357SAndroid Build Coastguard Worker 
ShowItem_Bool(unsigned itemID,bool show)31*f6dc9357SAndroid Build Coastguard Worker   bool ShowItem_Bool(unsigned itemID, bool show) const
32*f6dc9357SAndroid Build Coastguard Worker     { return ShowItem(itemID, show ? SW_SHOW: SW_HIDE); }
33*f6dc9357SAndroid Build Coastguard Worker 
HideItem(unsigned itemID)34*f6dc9357SAndroid Build Coastguard Worker   bool HideItem(unsigned itemID) const { return ShowItem(itemID, SW_HIDE); }
35*f6dc9357SAndroid Build Coastguard Worker 
SetItemText(unsigned itemID,LPCTSTR s)36*f6dc9357SAndroid Build Coastguard Worker   bool SetItemText(unsigned itemID, LPCTSTR s)
37*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(SetDlgItemText(_window, (int)itemID, s)); }
38*f6dc9357SAndroid Build Coastguard Worker 
SetItemTextA(unsigned itemID,LPCSTR s)39*f6dc9357SAndroid Build Coastguard Worker   bool SetItemTextA(unsigned itemID, LPCSTR s)
40*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(SetDlgItemTextA(_window, (int)itemID, s)); }
41*f6dc9357SAndroid Build Coastguard Worker 
SetItemText_Empty(unsigned itemID)42*f6dc9357SAndroid Build Coastguard Worker   bool SetItemText_Empty(unsigned itemID)
43*f6dc9357SAndroid Build Coastguard Worker     { return SetItemText(itemID, TEXT("")); }
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker   #ifndef _UNICODE
SetItemText(unsigned itemID,LPCWSTR s)46*f6dc9357SAndroid Build Coastguard Worker   bool SetItemText(unsigned itemID, LPCWSTR s)
47*f6dc9357SAndroid Build Coastguard Worker   {
48*f6dc9357SAndroid Build Coastguard Worker     CWindow window(GetItem(itemID));
49*f6dc9357SAndroid Build Coastguard Worker     return window.SetText(s);
50*f6dc9357SAndroid Build Coastguard Worker   }
51*f6dc9357SAndroid Build Coastguard Worker   #endif
52*f6dc9357SAndroid Build Coastguard Worker 
GetItemText(unsigned itemID,LPTSTR string,unsigned maxCount)53*f6dc9357SAndroid Build Coastguard Worker   UINT GetItemText(unsigned itemID, LPTSTR string, unsigned maxCount)
54*f6dc9357SAndroid Build Coastguard Worker     { return GetDlgItemText(_window, (int)itemID, string, (int)maxCount); }
55*f6dc9357SAndroid Build Coastguard Worker   #ifndef _UNICODE
56*f6dc9357SAndroid Build Coastguard Worker   /*
57*f6dc9357SAndroid Build Coastguard Worker   bool GetItemText(unsigned itemID, LPWSTR string, int maxCount)
58*f6dc9357SAndroid Build Coastguard Worker   {
59*f6dc9357SAndroid Build Coastguard Worker     CWindow window(GetItem(unsigned));
60*f6dc9357SAndroid Build Coastguard Worker     return window.GetText(string, maxCount);
61*f6dc9357SAndroid Build Coastguard Worker   }
62*f6dc9357SAndroid Build Coastguard Worker   */
63*f6dc9357SAndroid Build Coastguard Worker   #endif
64*f6dc9357SAndroid Build Coastguard Worker 
GetItemText(unsigned itemID,UString & s)65*f6dc9357SAndroid Build Coastguard Worker   bool GetItemText(unsigned itemID, UString &s)
66*f6dc9357SAndroid Build Coastguard Worker   {
67*f6dc9357SAndroid Build Coastguard Worker     CWindow window(GetItem(itemID));
68*f6dc9357SAndroid Build Coastguard Worker     return window.GetText(s);
69*f6dc9357SAndroid Build Coastguard Worker   }
70*f6dc9357SAndroid Build Coastguard Worker 
71*f6dc9357SAndroid Build Coastguard Worker /*
72*f6dc9357SAndroid Build Coastguard Worker   bool SetItemInt(unsigned itemID, UINT value, bool isSigned)
73*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(SetDlgItemInt(_window, (int)itemID, value, BoolToBOOL(isSigned))); }
74*f6dc9357SAndroid Build Coastguard Worker */
SetItemUInt(unsigned itemID,UINT value)75*f6dc9357SAndroid Build Coastguard Worker   bool SetItemUInt(unsigned itemID, UINT value)
76*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(SetDlgItemInt(_window, (int)itemID, value, FALSE)); }
77*f6dc9357SAndroid Build Coastguard Worker /*
78*f6dc9357SAndroid Build Coastguard Worker   bool GetItemInt(unsigned itemID, bool isSigned, UINT &value)
79*f6dc9357SAndroid Build Coastguard Worker   {
80*f6dc9357SAndroid Build Coastguard Worker     BOOL result;
81*f6dc9357SAndroid Build Coastguard Worker     value = GetDlgItemInt(_window, (int)itemID, &result, BoolToBOOL(isSigned));
82*f6dc9357SAndroid Build Coastguard Worker     return BOOLToBool(result);
83*f6dc9357SAndroid Build Coastguard Worker   }
84*f6dc9357SAndroid Build Coastguard Worker */
GetItemUInt(unsigned itemID,UINT & value)85*f6dc9357SAndroid Build Coastguard Worker   bool GetItemUInt(unsigned itemID, UINT &value)
86*f6dc9357SAndroid Build Coastguard Worker   {
87*f6dc9357SAndroid Build Coastguard Worker     BOOL result;
88*f6dc9357SAndroid Build Coastguard Worker     value = GetDlgItemInt(_window, (int)itemID, &result, FALSE);
89*f6dc9357SAndroid Build Coastguard Worker     return BOOLToBool(result);
90*f6dc9357SAndroid Build Coastguard Worker   }
91*f6dc9357SAndroid Build Coastguard Worker 
GetNextGroupItem(HWND control,bool previous)92*f6dc9357SAndroid Build Coastguard Worker   HWND GetNextGroupItem(HWND control, bool previous)
93*f6dc9357SAndroid Build Coastguard Worker     { return GetNextDlgGroupItem(_window, control, BoolToBOOL(previous)); }
GetNextTabItem(HWND control,bool previous)94*f6dc9357SAndroid Build Coastguard Worker   HWND GetNextTabItem(HWND control, bool previous)
95*f6dc9357SAndroid Build Coastguard Worker     { return GetNextDlgTabItem(_window, control, BoolToBOOL(previous)); }
96*f6dc9357SAndroid Build Coastguard Worker 
SendMsg_NextDlgCtl(WPARAM wParam,LPARAM lParam)97*f6dc9357SAndroid Build Coastguard Worker   LRESULT SendMsg_NextDlgCtl(WPARAM wParam, LPARAM lParam)
98*f6dc9357SAndroid Build Coastguard Worker     { return SendMsg(WM_NEXTDLGCTL, wParam, lParam); }
SendMsg_NextDlgCtl_HWND(HWND hwnd)99*f6dc9357SAndroid Build Coastguard Worker   LRESULT SendMsg_NextDlgCtl_HWND(HWND hwnd) { return SendMsg_NextDlgCtl((WPARAM)hwnd, TRUE); }
SendMsg_NextDlgCtl_CtlId(unsigned id)100*f6dc9357SAndroid Build Coastguard Worker   LRESULT SendMsg_NextDlgCtl_CtlId(unsigned id)   { return SendMsg_NextDlgCtl_HWND(GetItem(id)); }
SendMsg_NextDlgCtl_Next()101*f6dc9357SAndroid Build Coastguard Worker   LRESULT SendMsg_NextDlgCtl_Next()          { return SendMsg_NextDlgCtl(0, FALSE); }
SendMsg_NextDlgCtl_Prev()102*f6dc9357SAndroid Build Coastguard Worker   LRESULT SendMsg_NextDlgCtl_Prev()          { return SendMsg_NextDlgCtl(1, FALSE); }
103*f6dc9357SAndroid Build Coastguard Worker 
MapRect(LPRECT rect)104*f6dc9357SAndroid Build Coastguard Worker   bool MapRect(LPRECT rect)
105*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(MapDialogRect(_window, rect)); }
106*f6dc9357SAndroid Build Coastguard Worker 
IsMessage(LPMSG message)107*f6dc9357SAndroid Build Coastguard Worker   bool IsMessage(LPMSG message)
108*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(IsDialogMessage(_window, message)); }
109*f6dc9357SAndroid Build Coastguard Worker 
SendItemMessage(unsigned itemID,UINT message,WPARAM wParam,LPARAM lParam)110*f6dc9357SAndroid Build Coastguard Worker   LRESULT SendItemMessage(unsigned itemID, UINT message, WPARAM wParam, LPARAM lParam)
111*f6dc9357SAndroid Build Coastguard Worker     { return SendDlgItemMessage(_window, (int)itemID, message, wParam, lParam); }
112*f6dc9357SAndroid Build Coastguard Worker 
CheckButton(unsigned buttonID,UINT checkState)113*f6dc9357SAndroid Build Coastguard Worker   bool CheckButton(unsigned buttonID, UINT checkState)
114*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(CheckDlgButton(_window, (int)buttonID, checkState)); }
CheckButton(unsigned buttonID,bool checkState)115*f6dc9357SAndroid Build Coastguard Worker   bool CheckButton(unsigned buttonID, bool checkState)
116*f6dc9357SAndroid Build Coastguard Worker     { return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED)); }
117*f6dc9357SAndroid Build Coastguard Worker 
IsButtonChecked_BST(unsigned buttonID)118*f6dc9357SAndroid Build Coastguard Worker   UINT IsButtonChecked_BST(unsigned buttonID) const
119*f6dc9357SAndroid Build Coastguard Worker     { return IsDlgButtonChecked(_window, (int)buttonID); }
IsButtonCheckedBool(unsigned buttonID)120*f6dc9357SAndroid Build Coastguard Worker   bool IsButtonCheckedBool(unsigned buttonID) const
121*f6dc9357SAndroid Build Coastguard Worker     { return (IsButtonChecked_BST(buttonID) == BST_CHECKED); }
122*f6dc9357SAndroid Build Coastguard Worker 
CheckRadioButton(unsigned firstButtonID,unsigned lastButtonID,unsigned checkButtonID)123*f6dc9357SAndroid Build Coastguard Worker   bool CheckRadioButton(unsigned firstButtonID, unsigned lastButtonID, unsigned checkButtonID)
124*f6dc9357SAndroid Build Coastguard Worker     { return BOOLToBool(::CheckRadioButton(_window,
125*f6dc9357SAndroid Build Coastguard Worker         (int)firstButtonID, (int)lastButtonID, (int)checkButtonID)); }
126*f6dc9357SAndroid Build Coastguard Worker 
127*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
OnInit()128*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnInit() { return true; }
129*f6dc9357SAndroid Build Coastguard Worker   // virtual bool OnCommand2(WPARAM wParam, LPARAM lParam);
130*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam);
OnSize(WPARAM,int,int)131*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; }
OnDestroy()132*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnDestroy() { return false; }
133*f6dc9357SAndroid Build Coastguard Worker 
134*f6dc9357SAndroid Build Coastguard Worker   /*
135*f6dc9357SAndroid Build Coastguard Worker   #ifdef UNDER_CE
136*f6dc9357SAndroid Build Coastguard Worker   virtual void OnHelp(void *) { OnHelp(); }
137*f6dc9357SAndroid Build Coastguard Worker   #else
138*f6dc9357SAndroid Build Coastguard Worker   virtual void OnHelp(LPHELPINFO) { OnHelp(); }
139*f6dc9357SAndroid Build Coastguard Worker   #endif
140*f6dc9357SAndroid Build Coastguard Worker   */
OnHelp()141*f6dc9357SAndroid Build Coastguard Worker   virtual void OnHelp() {}
142*f6dc9357SAndroid Build Coastguard Worker 
143*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND);
OnOK()144*f6dc9357SAndroid Build Coastguard Worker   virtual void OnOK() {}
OnContinue()145*f6dc9357SAndroid Build Coastguard Worker   virtual void OnContinue() {}
OnCancel()146*f6dc9357SAndroid Build Coastguard Worker   virtual void OnCancel() {}
OnClose()147*f6dc9357SAndroid Build Coastguard Worker   virtual void OnClose() {}
OnNotify(UINT,LPNMHDR)148*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */) { return false; }
OnTimer(WPARAM,LPARAM)149*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; }
150*f6dc9357SAndroid Build Coastguard Worker 
SetMsgResult(LONG_PTR newLongPtr)151*f6dc9357SAndroid Build Coastguard Worker   LONG_PTR SetMsgResult(LONG_PTR newLongPtr )
152*f6dc9357SAndroid Build Coastguard Worker     { return SetLongPtr(DWLP_MSGRESULT, newLongPtr); }
GetMsgResult()153*f6dc9357SAndroid Build Coastguard Worker   LONG_PTR GetMsgResult() const
154*f6dc9357SAndroid Build Coastguard Worker     { return GetLongPtr(DWLP_MSGRESULT); }
155*f6dc9357SAndroid Build Coastguard Worker 
156*f6dc9357SAndroid Build Coastguard Worker   bool GetMargins(int margin, int &x, int &y);
157*f6dc9357SAndroid Build Coastguard Worker   int Units_To_Pixels_X(int units);
158*f6dc9357SAndroid Build Coastguard Worker   bool GetItemSizes(unsigned id, int &x, int &y);
159*f6dc9357SAndroid Build Coastguard Worker   void GetClientRectOfItem(unsigned id, RECT &rect);
160*f6dc9357SAndroid Build Coastguard Worker   bool MoveItem(unsigned id, int x, int y, int width, int height, bool repaint = true);
161*f6dc9357SAndroid Build Coastguard Worker   bool MoveItem_RECT(unsigned id, const RECT &r, bool repaint = true)
162*f6dc9357SAndroid Build Coastguard Worker     { return MoveItem(id, r.left, r.top, RECT_SIZE_X(r), RECT_SIZE_Y(r), repaint); }
163*f6dc9357SAndroid Build Coastguard Worker 
164*f6dc9357SAndroid Build Coastguard Worker   void NormalizeSize(bool fullNormalize = false);
165*f6dc9357SAndroid Build Coastguard Worker   void NormalizePosition();
166*f6dc9357SAndroid Build Coastguard Worker };
167*f6dc9357SAndroid Build Coastguard Worker 
168*f6dc9357SAndroid Build Coastguard Worker class CModelessDialog: public CDialog
169*f6dc9357SAndroid Build Coastguard Worker {
170*f6dc9357SAndroid Build Coastguard Worker public:
171*f6dc9357SAndroid Build Coastguard Worker   bool Create(LPCTSTR templateName, HWND parentWindow);
Create(UINT resID,HWND parentWindow)172*f6dc9357SAndroid Build Coastguard Worker   bool Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); }
173*f6dc9357SAndroid Build Coastguard Worker   #ifndef _UNICODE
174*f6dc9357SAndroid Build Coastguard Worker   bool Create(LPCWSTR templateName, HWND parentWindow);
175*f6dc9357SAndroid Build Coastguard Worker   #endif
OnOK()176*f6dc9357SAndroid Build Coastguard Worker   virtual void OnOK() Z7_override { Destroy(); }
OnContinue()177*f6dc9357SAndroid Build Coastguard Worker   virtual void OnContinue() Z7_override { Destroy(); }
OnCancel()178*f6dc9357SAndroid Build Coastguard Worker   virtual void OnCancel() Z7_override { Destroy(); }
OnClose()179*f6dc9357SAndroid Build Coastguard Worker   virtual void OnClose() Z7_override { Destroy(); }
180*f6dc9357SAndroid Build Coastguard Worker };
181*f6dc9357SAndroid Build Coastguard Worker 
182*f6dc9357SAndroid Build Coastguard Worker class CModalDialog: public CDialog
183*f6dc9357SAndroid Build Coastguard Worker {
184*f6dc9357SAndroid Build Coastguard Worker public:
185*f6dc9357SAndroid Build Coastguard Worker   INT_PTR Create(LPCTSTR templateName, HWND parentWindow);
Create(UINT resID,HWND parentWindow)186*f6dc9357SAndroid Build Coastguard Worker   INT_PTR Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); }
187*f6dc9357SAndroid Build Coastguard Worker   #ifndef _UNICODE
188*f6dc9357SAndroid Build Coastguard Worker   INT_PTR Create(LPCWSTR templateName, HWND parentWindow);
189*f6dc9357SAndroid Build Coastguard Worker   #endif
190*f6dc9357SAndroid Build Coastguard Worker 
End(INT_PTR result)191*f6dc9357SAndroid Build Coastguard Worker   bool End(INT_PTR result) { return BOOLToBool(::EndDialog(_window, result)); }
OnOK()192*f6dc9357SAndroid Build Coastguard Worker   virtual void OnOK() Z7_override { End(IDOK); }
OnContinue()193*f6dc9357SAndroid Build Coastguard Worker   virtual void OnContinue() Z7_override { End(IDCONTINUE); }
OnCancel()194*f6dc9357SAndroid Build Coastguard Worker   virtual void OnCancel() Z7_override { End(IDCANCEL); }
OnClose()195*f6dc9357SAndroid Build Coastguard Worker   virtual void OnClose() Z7_override { End(IDCLOSE); }
196*f6dc9357SAndroid Build Coastguard Worker };
197*f6dc9357SAndroid Build Coastguard Worker 
198*f6dc9357SAndroid Build Coastguard Worker class CDialogChildControl: public NWindows::CWindow
199*f6dc9357SAndroid Build Coastguard Worker {
200*f6dc9357SAndroid Build Coastguard Worker   // unsigned m_ID;
201*f6dc9357SAndroid Build Coastguard Worker public:
Init(const NWindows::NControl::CDialog & parentDialog,unsigned id)202*f6dc9357SAndroid Build Coastguard Worker   void Init(const NWindows::NControl::CDialog &parentDialog, unsigned id)
203*f6dc9357SAndroid Build Coastguard Worker   {
204*f6dc9357SAndroid Build Coastguard Worker     // m_ID = id;
205*f6dc9357SAndroid Build Coastguard Worker     Attach(parentDialog.GetItem(id));
206*f6dc9357SAndroid Build Coastguard Worker   }
207*f6dc9357SAndroid Build Coastguard Worker };
208*f6dc9357SAndroid Build Coastguard Worker 
209*f6dc9357SAndroid Build Coastguard Worker bool IsDialogSizeOK(int xSize, int ySize, HWND hwnd = NULL);
210*f6dc9357SAndroid Build Coastguard Worker 
211*f6dc9357SAndroid Build Coastguard Worker }}
212*f6dc9357SAndroid Build Coastguard Worker 
213*f6dc9357SAndroid Build Coastguard Worker #endif
214