//---------------------------------------------------------------------------- // ObjectWindows - (C) Copyright 1991, 1993 by Borland International //---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include class TDiagEnable; class TSizableDialog; class TSetupDialog; class TSetupItem; class TSysItem; class TUsrItem; class TBaseSetupWindow; class TSysWindow; class TUsrWindow; class TGroup; class TSysGroup; class TUsrGroup; class TGroupScroll; #define SYS_INI "owl.ini" #define SYS_CLS "Diagnostics" #define SYS_DSC "Diagnostics Descriptions" #define USR_INI "owl.ini" #define USR_CLS "Diagnostics" #define USR_DSC "Users Diagnostics Descriptions" class TDiagEnable : public TCheckBox { public: TDiagEnable(TWindow* parent, int id, TWindow* w0, TWindow* w1) : W0(w0), W1(w1), S0(0), S1(0), TCheckBox(parent, id) {} TDiagEnable(TWindow* parent, int id, TGroup* s0, TGroup* s1) : W0(0), W1(0), S0(s0), S1(s1), TCheckBox(parent, id) {} void BNClicked(); BOOL EnableWindow(BOOL enable); protected: TGroup* S0; TGroup* S1; TWindow* W0; TWindow* W1; DECLARE_RESPONSE_TABLE(TDiagEnable); }; class TUsrEnable : public TDiagEnable { public: TUsrEnable(TWindow *w, int nID, TWindow *w0, TWindow *w1, TWindow *B) : Ntf(B), TDiagEnable(w, nID, w0, w1) {} void EvSetFocus(HWND h) { if (Ntf && !Ntf->IsWindowEnabled()) Ntf->EnableWindow(TRUE); TDiagEnable::EvSetFocus(h); } void EvKillFocus(HWND h) { if (Ntf && Ntf->IsWindowEnabled()) Ntf->EnableWindow(FALSE); TDiagEnable::EvKillFocus(h); } private: TWindow* Ntf; DECLARE_RESPONSE_TABLE(TUsrEnable); }; class TMainEnable : public TDiagEnable { public: TMainEnable(TWindow* parent, int id, TGroup* g0, TGroup* g1); void Load(); void Save(); private: static char* Class; }; class TSetupItem { public: TSetupItem(char *Class, char *Descr); virtual ~TSetupItem() { delete Enable; } virtual char* GetIniFile() = 0; virtual char* GetSection() = 0; virtual char* GetSectionDesc() = 0; const char* GetDescr() { return Descr.c_str(); } const char* GetClass() { return Class.c_str(); } void SetClass(char* c) { Class = c; } void SetDescr(char* d) { Descr = d; } virtual void operator =(TBaseSetupWindow& w); virtual void Load(); virtual void Save(); BOOL GetEnable() { return bEnable; } int GetLevel() { return level; } void SetEnable(BOOL bS) { bEnable = bS; } void SetLevel(int n) { level = n; } protected: TDiagEnable* Enable; string Class, Descr; private: BOOL bEnable; int level; }; class TSysItem : public TSetupItem { public: TSysItem(char* Class, char* Descr = 0) : TSetupItem(Class, Descr) {} virtual char* GetIniFile() { return SYS_INI; } virtual char* GetSection() { return SYS_CLS; } virtual char* GetSectionDesc() { return SYS_DSC; } }; class TUsrItem : public TSetupItem { public: TUsrItem(char* Class, char* Descr = 0) : TSetupItem(Class, Descr) {} virtual char* GetIniFile() { return USR_INI; } virtual char* GetSection() { return USR_CLS; } virtual char* GetSectionDesc() { return USR_DSC; } }; class TBaseSetupWindow { public: TBaseSetupWindow() : Enable(0) {} virtual BOOL GetEnable() { CHECK(Enable!=0); return Enable->GetCheck(); } virtual void SetEnable(BOOL bE) { CHECK(Enable!=0); Enable->SetCheck(bE); } virtual void EnableWindow(BOOL bE) = 0; virtual int GetLevel() = 0; virtual void SetLevel(int level) = 0; virtual void operator = (TSetupItem &it) = 0; virtual void operator = (int) = 0; protected: TDiagEnable* Enable; }; template class TSetupWindow : public TBaseSetupWindow { public: virtual int GetLevel() = 0; virtual void SetLevel(int level) = 0; virtual void EnableWindow(BOOL e) { Enable->EnableWindow(e); if (e) e = Enable->GetCheck(); Child1->EnableWindow(e); Child2->EnableWindow(e); } virtual void operator = (TSetupItem &it) { SetEnable(it.GetEnable()); SetLevel(it.GetLevel()); Enable->SetWindowText(it.GetDescr()); Enable->ShowWindow(SW_SHOW); Child1->ShowWindow(SW_SHOW); Child2->ShowWindow(SW_SHOW); } virtual void operator = (int) { Enable->ShowWindow(SW_HIDE); Child1->ShowWindow(SW_HIDE); Child2->ShowWindow(SW_HIDE); } protected: C1* Child1; C2* Child2; }; class TSysWindow : public TSetupWindow { public: TSysWindow(TWindow* w, int i) { Child1 = new TRadioButton(w, i + 1, 0); Child1->Create(); Child2 = new TRadioButton(w, i + 2, 0); Child2->Create(); Enable = new TDiagEnable(w, i, Child1, Child2); Enable->Create(); } virtual int GetLevel() { return Child1->GetCheck() ? 1 : 0; } virtual void SetLevel(int level) { if (level) Child1->SetCheck(1); else Child2->SetCheck(1); } }; class TUsrWindow : public TSetupWindow { public: TUsrWindow(TWindow* w, int i) { Child1 = new TStatic(w, i + 1, 20); Child1->Create(); Child2 = new TEdit(w, i + 2); Child2->Create(); Enable = new TDiagEnable(w, i, Child1, Child2); Enable->Create(); } virtual int GetLevel() { char b[6]; Child2->GetWindowText(b, sizeof(b)); return atoi(b); } virtual void SetLevel(int level) { char b[6]; wsprintf(b, "%d", level); Child2->SetWindowText(b); } }; class TItemsArray : public TArrayAsVector { public: TItemsArray() : TArrayAsVector(10, 0, 4) {} }; class TWindowArray : public TArrayAsVector { public: TWindowArray() : TArrayAsVector(10, 0, 4) {} }; class TGroup { public: enum { MapToTop = 0, MapToBottom = 0x7fff, MapAsBefore = 0x7ffe }; TWindowArray Windows; TItemsArray Items; virtual void SetMainSwitch(TCheckBox* c) { Switch = c; } virtual BOOL IsEnable() { return Switch ? Switch->GetCheck() : 1; } virtual void EnableWindow(BOOL enable); virtual void Load(); virtual void Save(); virtual void Cleanup() = 0; virtual int Map(int x); virtual int UnMap(); virtual ~TGroup() { Windows.Flush(); Items.Flush(); } private: int scrollPos; TCheckBox* Switch; }; class TSysGroup : public TGroup { public: TSysGroup(TWindow* dialog, int firstID); void Cleanup(); }; class TUsrGroup : public TGroup { public: TUsrGroup(TWindow* dialog, int firstID); void Cleanup(); }; class TSizableDialog : public TDialog { public: TSizableDialog(TWindow* parent, int dlgID, int boxID) : nBoxID(boxID), TDialog(parent, dlgID) {} enum { t_minmax, t_min, t_max }; virtual void Toggle(int type = t_minmax); BOOL IsMaximized() { return bMaximized; } protected: virtual void SetupWindow(); virtual void EnableControls(); void Center(); void AdjustPos(); private: int nBoxID; TSize small; TSize large; BOOL bMaximized; int tSize; }; class TSetupDialog : public TSizableDialog { public: TSetupDialog(TWindow* p):TSizableDialog(p, DG_OPTIONS, ID_BOX) {} void SetupWindow(); void CleanupWindow(); void UpdateButtons(); void CmOk(); void CmAddUsr(); void CmDelUsr(); void CmEdtUsr(); void CmZoom(); private: TSysGroup* SysGroup; TUsrGroup* UsrGroup; TMainEnable* MainEnable; TGroupScroll* SysScroll; TGroupScroll* UsrScroll; TButton* pDel; TButton* pEdt; DECLARE_RESPONSE_TABLE(TSetupDialog); }; class TGroupScroll : public TScrollBar { public: TGroupScroll(TWindow *W, int id, TGroup *group); void Initialize(int pos); void EvVScroll(UINT code, UINT pos, HWND hCtl); void SetPosition(int pos); void EndScroll(); private: int x; int min; int max; TGroup* group; DECLARE_RESPONSE_TABLE(TGroupScroll); }; // // class TAddUsrDialog // class TAddUsrDialog : public TDialog { public: char Class[80], Descr[80]; TAddUsrDialog(TWindow* p): TDialog(p, DG_ADD_CUSTOM) {} void CmOk(); DECLARE_RESPONSE_TABLE(TAddUsrDialog); }; // // class TItemsDialog // class TItemsDialog : public TDialog { public: TItemsDialog(TWindow* p, int id, TItemsArray* it): items(it), TDialog(p, id) {} ~TItemsDialog(); virtual BOOL IsValid() { return TRUE; } virtual void SetupWindow(); virtual void CmOk() { if (IsValid()) TDialog::CmOk(); } virtual void LBDblClk() {} virtual void LBSelChange() {} TItemsArray* items; int nSel; protected: TListBox* pList; DECLARE_RESPONSE_TABLE(TItemsDialog); }; // // class TDelUsrDialog // class TDelUsrDialog : public TItemsDialog { public: TDelUsrDialog(TWindow* p, TItemsArray* it): TItemsDialog(p, DG_DEL_CUSTOM, it) {} virtual void CmOk(); virtual void LBDblClk() { CmOk(); } }; // // class TEdtUsrDialog // class TEdtUsrDialog : public TItemsDialog { public: TEdtUsrDialog(TWindow* p, TItemsArray* it) : nPrevSel(LB_ERR), TItemsDialog(p, DG_EDT_CUSTOM, it) {} virtual void LBSelChange(); virtual void CmOk(); private: int nPrevSel; static char* Template; DECLARE_RESPONSE_TABLE(TEdtUsrDialog); };