172 lines
4.2 KiB
C++
172 lines
4.2 KiB
C++
// Windows/Control/Dialog.h
|
|
|
|
#ifndef __WINDOWS_CONTROL_DIALOG_H
|
|
#define __WINDOWS_CONTROL_DIALOG_H
|
|
|
|
#include "Windows/Window.h"
|
|
|
|
#ifndef _WIN32
|
|
|
|
#define WM_SETTEXT (6000) // wxID_HIGHEST + 1
|
|
#define WM_USER (6999) // wxID_HIGHEST + 1000
|
|
#define WM_APP (26999) // wxID_HIGHEST + 22000
|
|
|
|
#endif
|
|
|
|
#ifndef _WIN32
|
|
#define CBN_SELCHANGE 1
|
|
#endif
|
|
|
|
#define BST_CHECKED 1
|
|
#define BST_UNCHECKED 0
|
|
// #define BST_INDETERMINATE 0x0002
|
|
|
|
// FIXME #define wsprintf(a,b,c,d,e) swprintf(a,9999,b,c,d,e) // FIXME
|
|
|
|
namespace NWindows {
|
|
namespace NControl {
|
|
|
|
class CModalDialogImpl;
|
|
|
|
class CDialog
|
|
{
|
|
protected:
|
|
CModalDialogImpl * _window;
|
|
public:
|
|
operator HWND() const { return HWND(_window); }
|
|
|
|
bool OnInit(CModalDialogImpl * window) {
|
|
_window = window;
|
|
return OnInit();
|
|
}
|
|
virtual bool OnInit() { return false; }
|
|
virtual void OnOK() {}
|
|
virtual void OnCancel() {}
|
|
virtual void OnHelp() {}
|
|
virtual bool OnButtonClicked(int buttonID, wxWindow * buttonHWND) { return false; }
|
|
virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) { return false; }
|
|
virtual bool OnCommand(int code, int itemID, LPARAM lParam) { return false; }
|
|
virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; }
|
|
|
|
void NormalizeSize(bool fullNormalize = false) { /* FIXME */ }
|
|
void NormalizePosition() { /* FIXME */ }
|
|
};
|
|
|
|
class CModalDialog : public CDialog
|
|
{
|
|
public:
|
|
|
|
|
|
////////////////// COMPATIBILITY
|
|
|
|
bool CheckRadioButton(int firstButtonID, int lastButtonID, int checkButtonID)
|
|
{
|
|
/*
|
|
for(int id = firstButtonID; id <= lastButtonID; id++)
|
|
{
|
|
CheckButton(id,id == checkButtonID);
|
|
}
|
|
*/
|
|
this->CheckButton(checkButtonID,true);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
bool CheckButton(int buttonID, UINT checkState);
|
|
bool CheckButton(int buttonID, bool checkState)
|
|
{
|
|
return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED));
|
|
}
|
|
|
|
|
|
UINT IsButtonChecked(int buttonID) const;
|
|
|
|
bool IsButtonCheckedBool(long buttonID) const
|
|
{ return (IsButtonChecked(buttonID) == BST_CHECKED); }
|
|
|
|
void EnableItem(int id, bool state);
|
|
|
|
void SetItemText(int id, const TCHAR *txt);
|
|
|
|
wxWindow * GetItem(long id) const ;
|
|
|
|
void ShowItem(int itemID, int cmdShow) const;
|
|
|
|
void ShowItem_Bool(int itemID, bool show) const { ShowItem(itemID, show ? SW_SHOW: SW_HIDE); }
|
|
|
|
|
|
void HideItem(int itemID) const { ShowItem(itemID, SW_HIDE); }
|
|
|
|
void End(int result);
|
|
|
|
void SetText(const TCHAR *_title); // { _dialog->SetTitle(_title); }
|
|
|
|
bool GetText(CSysString &s);
|
|
|
|
INT_PTR Create(int id , HWND parentWindow);
|
|
|
|
void PostMsg(UINT message);
|
|
|
|
virtual void OnHelp() {}
|
|
|
|
UINT_PTR SetTimer(UINT_PTR idEvent , unsigned milliseconds);
|
|
|
|
void KillTimer(UINT_PTR idEvent);
|
|
|
|
virtual void OnOK() { End(IDOK); }
|
|
virtual void OnCancel() { End(IDCANCEL); }
|
|
};
|
|
|
|
class CDialogChildControl : public NWindows::CWindow
|
|
{
|
|
public:
|
|
CDialogChildControl() {}
|
|
|
|
int m_ID;
|
|
void Init(const NWindows::NControl::CModalDialog &parentDialog, int id)
|
|
{
|
|
m_ID = id;
|
|
this->Attach(parentDialog.GetItem(id));
|
|
}
|
|
virtual void SetText(LPCWSTR s);
|
|
virtual bool GetText(CSysString &s);
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
struct CStringTable
|
|
{
|
|
unsigned int id;
|
|
const wchar_t *str;
|
|
};
|
|
|
|
struct CDialogInfo
|
|
{
|
|
int id;
|
|
NWindows::NControl::CModalDialogImpl * (*createDialog)(NWindows::NControl::CModalDialog * dialog, HWND parentWindow);
|
|
CStringTable * stringTable;
|
|
};
|
|
|
|
void RegisterDialog(const CDialogInfo *dialogInfo);
|
|
|
|
#define REGISTER_DIALOG_NAME(x) CRegister ## x
|
|
|
|
#define REGISTER_DIALOG(id,x,stringTable) \
|
|
static NWindows::NControl::CModalDialogImpl * myCreate##x(NWindows::NControl::CModalDialog * dialog,HWND parentWindow) \
|
|
{ return new x##Impl(dialog,parentWindow,id); } \
|
|
static struct CDialogInfo g_DialogInfo = { id , myCreate##x, stringTable }; \
|
|
struct REGISTER_DIALOG_NAME(x) { \
|
|
REGISTER_DIALOG_NAME(x)() { RegisterDialog(&g_DialogInfo); }}; \
|
|
static REGISTER_DIALOG_NAME(x) g_RegisterDialog;
|
|
|
|
#define REGISTER_STRINGTABLE(stringTable) \
|
|
static struct CDialogInfo g_DialogInfo = { -1 , 0 , stringTable }; \
|
|
struct REGISTER_DIALOG_NAME(x) { \
|
|
REGISTER_DIALOG_NAME(x)() { RegisterDialog(&g_DialogInfo); }}; \
|
|
static REGISTER_DIALOG_NAME(x) g_RegisterDialog;
|
|
|
|
#endif
|
|
|