///////////////////////////////////////////////////////////////////////////// // Name: winprop.h // Purpose: Window properties // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifndef _WINPROP_H_ #define _WINPROP_H_ #if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "winprop.h" #endif #include "reseditr.h" class wxPropertyInfo; class wxDialogEditorPropertyListFrame: public wxPropertyListFrame { friend class wxPropertyInfo; public: wxDialogEditorPropertyListFrame(wxPropertyListView *v, wxFrame *parent, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame"); ~wxDialogEditorPropertyListFrame(); wxPropertyInfo* GetInfo() const { return m_propInfo; } private: wxPropertySheet* m_propSheet; wxPropertyValidatorRegistry m_registry; wxPropertyInfo* m_propInfo; }; // A kind of property list view that intercepts OnPropertyChanged // feedback. class wxResourcePropertyListView: public wxPropertyListView { public: wxResourcePropertyListView(wxPropertyInfo *info, wxPanel *propPanel = NULL, long flags = wxPROP_BUTTON_DEFAULT): wxPropertyListView(propPanel, flags) { m_propertyInfo = info; } void OnPropertyChanged(wxProperty *property); bool OnClose(void); wxPropertyInfo* m_propertyInfo; }; // Generic class for relating an object to a collection of properties. // Instead of defining new functions like wxButton::GetProperty, wxButton::SetProperty, // we take these functions out into of the wxWindows library and associate // them with separate classes. class wxPropertyInfo: public wxObject { friend class wxDialogEditorPropertyListFrame; protected: static wxWindow *sm_propertyWindow; wxPropertyInfo(void) { } ~wxPropertyInfo(void) { } public: virtual wxProperty *GetProperty(wxString& propName) = 0; virtual bool SetProperty(wxString& propName, wxProperty *property) = 0; virtual void GetPropertyNames(wxStringList& names) = 0; virtual bool Edit(wxWindow *parent, const wxString& title); static void CloseWindow(); // Close the current window if open. }; // For all windows class wxWindowPropertyInfo: public wxPropertyInfo { public: wxWindowPropertyInfo(wxWindow *win, wxItemResource *res = NULL); ~wxWindowPropertyInfo(void); wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); inline void SetPropertyWindow(wxWindow *win) { m_propertyWindow = win; } inline void SetResource(wxItemResource *res) { m_propertyResource = res; } // Helper functions for font properties wxProperty *GetFontProperty(wxString& name, wxFont *font); wxFont *SetFontProperty(wxString& name, wxProperty *property, wxFont *oldFont); // Fill in the wxItemResource members to mirror the current window settings virtual bool InstantiateResource(wxItemResource *resource); // Set the window style void SetWindowStyle(wxWindow* win, long style, bool set); wxWindow* GetWindow() const { return m_propertyWindow; } wxItemResource* GetResource() const { return m_propertyResource; } protected: wxWindow* m_propertyWindow; wxItemResource* m_propertyResource; }; // For panel items class wxItemPropertyInfo: public wxWindowPropertyInfo { protected: public: wxItemPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxWindowPropertyInfo(win, res) {} ~wxItemPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For buttons class wxButtonPropertyInfo: public wxItemPropertyInfo { protected: public: wxButtonPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) { } ~wxButtonPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For bitmap buttons class wxBitmapButtonPropertyInfo: public wxButtonPropertyInfo { protected: public: wxBitmapButtonPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxButtonPropertyInfo(win, res) { } ~wxBitmapButtonPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For static text controls class wxStaticTextPropertyInfo: public wxItemPropertyInfo { protected: public: wxStaticTextPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) { } ~wxStaticTextPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For static bitmap controls class wxStaticBitmapPropertyInfo: public wxItemPropertyInfo { protected: public: wxStaticBitmapPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) { } ~wxStaticBitmapPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For text/multitext items class wxTextPropertyInfo: public wxItemPropertyInfo { protected: public: wxTextPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxTextPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For list boxes class wxListBoxPropertyInfo: public wxItemPropertyInfo { protected: public: wxListBoxPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxListBoxPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For choice items class wxChoicePropertyInfo: public wxItemPropertyInfo { protected: public: wxChoicePropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxChoicePropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For choice items class wxComboBoxPropertyInfo: public wxChoicePropertyInfo { protected: public: wxComboBoxPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxChoicePropertyInfo(win, res) {} ~wxComboBoxPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For radiobox items class wxRadioBoxPropertyInfo: public wxItemPropertyInfo { protected: public: wxRadioBoxPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxRadioBoxPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For groupbox items class wxGroupBoxPropertyInfo: public wxItemPropertyInfo { protected: public: wxGroupBoxPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxGroupBoxPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For checkbox items class wxCheckBoxPropertyInfo: public wxItemPropertyInfo { protected: public: wxCheckBoxPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxCheckBoxPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For radiobutton items class wxRadioButtonPropertyInfo: public wxItemPropertyInfo { protected: public: wxRadioButtonPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxRadioButtonPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For gauge items class wxGaugePropertyInfo: public wxItemPropertyInfo { protected: public: wxGaugePropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxGaugePropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For scrollbar items class wxScrollBarPropertyInfo: public wxItemPropertyInfo { protected: public: wxScrollBarPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxScrollBarPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For slider items class wxSliderPropertyInfo: public wxItemPropertyInfo { protected: public: wxSliderPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxItemPropertyInfo(win, res) {} ~wxSliderPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); }; // For panels class wxPanelPropertyInfo: public wxWindowPropertyInfo { protected: public: wxPanelPropertyInfo(wxWindow *win, wxItemResource *res = NULL): wxWindowPropertyInfo(win, res) {} ~wxPanelPropertyInfo(void) {} wxProperty *GetProperty(wxString& name); bool SetProperty(wxString& name, wxProperty *property); void GetPropertyNames(wxStringList& names); bool InstantiateResource(wxItemResource *resource); // Convert this dialog, and its children, to or from dialog units void ConvertDialogUnits(bool toDialogUnits); }; int wxStringToFontWeight(wxString& val); int wxStringToFontStyle(wxString& val); int wxStringToFontFamily(wxString& val); /* * A validator to allow editing symbol/id pairs */ class wxResourceSymbolValidator: public wxPropertyListValidator { DECLARE_DYNAMIC_CLASS(wxResourceSymbolValidator) protected: public: wxResourceSymbolValidator(long flags = 0); ~wxResourceSymbolValidator(void); // Called when TICK is pressed or focus is lost. // Return FALSE if value didn't check out; signal to restore old value. bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow); // Called when TICK is pressed or focus is lost or view wants to update // the property list. // Does the transferance from the property editing area to the property itself bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow); bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow); bool OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow); bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow); // Called when the edit (...) button is pressed. void OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow); }; /* * A dialog for editing symbol/id pairs */ class wxResourceSymbolDialog: public wxDialog { public: wxResourceSymbolDialog(wxWindow* parent, const wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL); void Init(); inline void SetSymbol(const wxString& symbol) { m_symbolName = symbol; } inline void SetId(long id) { m_symbolId = id; } inline wxString GetSymbol() const { return m_symbolName; } inline long GetId() const { return m_symbolId; } bool CheckValues(); void OnOK(wxCommandEvent& event); void OnComboBoxSelect(wxCommandEvent& event); void OnSymbolNameUpdate(wxCommandEvent& event); protected: wxString m_symbolName; long m_symbolId; wxComboBox* m_nameCtrl; wxTextCtrl* m_idCtrl; DECLARE_EVENT_TABLE() }; #define ID_SYMBOLNAME_COMBOBOX 100 #define ID_SYMBOLID_TEXTCTRL 101 #endif // _WINPROP_H_