home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / propform.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  12KB  |  334 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        propform.h
  3. // Purpose:     Property form classes
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: propform.h,v 1.9 2002/08/31 11:29:11 GD Exp $
  8. // Copyright:   (c) Julian Smart
  9. // Licence:       wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef _WX_PROPFORM_H_
  13. #define _WX_PROPFORM_H_
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16. #pragma interface "propform.h"
  17. #endif
  18.  
  19. #if wxUSE_PROPSHEET
  20.  
  21. #include "wx/prop.h"
  22.  
  23. ////
  24. //// Property form classes: for using an existing dialog or panel
  25. ////
  26.  
  27. #define wxID_PROP_REVERT        3100
  28. #define wxID_PROP_UPDATE        3101
  29.  
  30. // Mediates between a physical panel and the property sheet
  31. class WXDLLEXPORT wxPropertyFormView: public wxPropertyView
  32. {
  33.  DECLARE_DYNAMIC_CLASS(wxPropertyFormView)
  34.  public:
  35.   wxPropertyFormView(wxWindow *propPanel = NULL, long flags = 0);
  36.   ~wxPropertyFormView(void);
  37.  
  38.   // Associates and shows the view
  39.   virtual void ShowView(wxPropertySheet *propertySheet, wxWindow *panel);
  40.  
  41.   // Update this view of the viewed object, called e.g. by
  42.   // the object itself.
  43.   virtual bool OnUpdateView(void);
  44.  
  45.   // Transfer values from property sheet to dialog
  46.   virtual bool TransferToDialog(void);
  47.  
  48.   // Transfer values from dialog to property sheet
  49.   virtual bool TransferToPropertySheet(void);
  50.  
  51.   // Check that all the values are valid
  52.   virtual bool Check(void);
  53.  
  54.   // Give each property in the sheet a panel item, by matching
  55.   // the name of the property to the name of the panel item.
  56.   // The user doesn't always want to call this; sometimes, it
  57.   // will have been done explicitly (e.g., no matching names).
  58.   virtual bool AssociateNames(void);
  59.  
  60.   void OnOk(wxCommandEvent& event);
  61.   void OnCancel(wxCommandEvent& event);
  62.   void OnHelp(wxCommandEvent& event);
  63.   void OnUpdate(wxCommandEvent& event);
  64.   void OnRevert(wxCommandEvent& event);
  65.  
  66.   virtual bool OnClose();
  67.   virtual void OnDoubleClick(wxControl *item);
  68.  
  69.   // TODO: does OnCommand still get called...??? No,
  70.   // make ProcessEvent do it.
  71.   virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
  72.  
  73.   // Extend event processing to process OnCommand
  74.   virtual bool ProcessEvent(wxEvent& event);
  75.  
  76.   inline virtual void AssociatePanel(wxWindow *win) { m_propertyWindow = win; }
  77.   inline virtual wxWindow *GetPanel(void) const { return m_propertyWindow; }
  78.  
  79.   inline virtual void SetManagedWindow(wxWindow *win) { m_managedWindow = win; }
  80.   inline virtual wxWindow *GetManagedWindow(void) const { return m_managedWindow; }
  81.  
  82.   inline virtual wxButton *GetWindowCloseButton() const { return m_windowCloseButton; }
  83.   inline virtual wxButton *GetWindowCancelButton() const { return m_windowCancelButton; }
  84.   inline virtual wxButton *GetHelpButton() const { return m_windowHelpButton; }
  85.  
  86. public:
  87.   static bool sm_dialogCancelled;
  88.  
  89.  protected:
  90.   bool              m_detailedEditing;     // E.g. using listbox for choices
  91.  
  92.   wxWindow*         m_propertyWindow; // Panel that the controls will appear on
  93.   wxWindow*         m_managedWindow; // Frame or dialog
  94.  
  95.   wxButton*         m_windowCloseButton; // Or OK
  96.   wxButton*         m_windowCancelButton;
  97.   wxButton*         m_windowHelpButton;
  98.  
  99. DECLARE_EVENT_TABLE()
  100.  
  101. };
  102.  
  103. /*
  104.  * The type of validator used for forms (wxForm style but using an existing panel
  105.  * or dialog box).
  106.  * Classes derived from this know how to map from whatever widget they
  107.  * find themselves paired with, to the wxProperty and vice versa.
  108.  * Should the widget pointer be stored with the validator, or
  109.  * the wxProperty? If with the property, we don't have to supply
  110.  * a validator for every property. Otherwise, there ALWAYS needs
  111.  * to be a validator. On the other hand, not storing a wxWindow pointer
  112.  * in the wxProperty is more elegant. Perhaps.
  113.  * I think on balance, should put wxWindow pointer into wxProperty.
  114.  * After all, wxProperty will often be used to represent the data
  115.  * assocated with a window. It's that kinda thing.
  116.  */
  117.  
  118. class WXDLLEXPORT wxPropertyFormValidator: public wxPropertyValidator
  119. {
  120.   DECLARE_DYNAMIC_CLASS(wxPropertyFormValidator)
  121.  protected:
  122.  public:
  123.   wxPropertyFormValidator(long flags = 0): wxPropertyValidator(flags) { }
  124.   ~wxPropertyFormValidator(void) {}
  125.  
  126.    // Called to check value is OK (e.g. when OK is pressed)
  127.    // Return FALSE if value didn't check out; signal to restore old value.
  128.    virtual bool OnCheckValue( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
  129.      wxWindow *WXUNUSED(parentWindow) ) { return TRUE; }
  130.  
  131.    // Does the transferance from the property editing area to the property itself.
  132.    // Called by the view, e.g. when closing the window.
  133.    virtual bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow) = 0;
  134.  
  135.    // Called by the view to transfer the property to the window.
  136.    virtual bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow) = 0;
  137.  
  138.   virtual void OnDoubleClick( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
  139.      wxWindow *WXUNUSED(parentWindow) ) { }
  140.   virtual void OnSetFocus( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
  141.      wxWindow *WXUNUSED(parentWindow) ) { }
  142.   virtual void OnKillFocus( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
  143.      wxWindow *WXUNUSED(parentWindow) ) { }
  144.   virtual void OnCommand( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
  145.      wxWindow *WXUNUSED(parentWindow), wxCommandEvent& WXUNUSED(event) ) {}
  146. private:
  147. // Virtual function hiding suppression
  148. #if WXWIN_COMPATIBILITY_2
  149.     virtual void OnCommand(wxWindow& win,
  150.                            wxCommandEvent& event)
  151.     { wxEvtHandler::OnCommand(win, event); }
  152. #endif
  153. };
  154.  
  155. /*
  156.  * Some default validators
  157.  */
  158.  
  159. class WXDLLEXPORT wxRealFormValidator: public wxPropertyFormValidator
  160. {
  161.   DECLARE_DYNAMIC_CLASS(wxRealFormValidator)
  162.  public:
  163.    // 0.0, 0.0 means no range
  164.    wxRealFormValidator(float min = 0.0, float max = 0.0, long flags = 0):wxPropertyFormValidator(flags)
  165.    {
  166.      m_realMin = min; m_realMax = max;
  167.    }
  168.    ~wxRealFormValidator(void) {}
  169.  
  170.    bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  171.    bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  172.    // Called by the view to transfer the property to the window.
  173.    bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  174.  
  175.  protected:
  176.   float         m_realMin;
  177.   float         m_realMax;
  178. };
  179.  
  180. class WXDLLEXPORT wxIntegerFormValidator: public wxPropertyFormValidator
  181. {
  182.   DECLARE_DYNAMIC_CLASS(wxIntegerFormValidator)
  183.  public:
  184.    // 0, 0 means no range
  185.    wxIntegerFormValidator(long min = 0, long max = 0, long flags = 0):wxPropertyFormValidator(flags)
  186.    {
  187.      m_integerMin = min; m_integerMax = max;
  188.    }
  189.    ~wxIntegerFormValidator(void) {}
  190.  
  191.    bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  192.    bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  193.    bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  194.  
  195.  protected:
  196.   long          m_integerMin;
  197.   long          m_integerMax;
  198. };
  199.  
  200. class WXDLLEXPORT wxBoolFormValidator: public wxPropertyFormValidator
  201. {
  202.   DECLARE_DYNAMIC_CLASS(wxBoolFormValidator)
  203.  protected:
  204.  public:
  205.    wxBoolFormValidator(long flags = 0):wxPropertyFormValidator(flags)
  206.    {
  207.    }
  208.    ~wxBoolFormValidator(void) {}
  209.  
  210.    bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  211.    bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  212.    bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  213. };
  214.  
  215. class WXDLLEXPORT wxStringFormValidator: public wxPropertyFormValidator
  216. {
  217.   DECLARE_DYNAMIC_CLASS(wxStringFormValidator)
  218.  public:
  219.    wxStringFormValidator(wxStringList *list = NULL, long flags = 0);
  220.  
  221.    ~wxStringFormValidator(void)
  222.    {
  223.      if (m_strings)
  224.        delete m_strings;
  225.    }
  226.  
  227.    bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  228.    bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  229.    bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
  230.  
  231.  protected:
  232.   wxStringList*     m_strings;
  233. };
  234.  
  235. /*
  236.  * A default dialog box class to use.
  237.  */
  238.  
  239. class WXDLLEXPORT wxPropertyFormDialog: public wxDialog
  240. {
  241. public:
  242.     wxPropertyFormDialog(wxPropertyFormView *v = NULL,
  243.                          wxWindow *parent = NULL,
  244.                          const wxString& title = wxEmptyString,
  245.                          const wxPoint& pos = wxDefaultPosition,
  246.                          const wxSize& size = wxDefaultSize,
  247.                          long style = wxDEFAULT_DIALOG_STYLE,
  248.                          const wxString& name = _T("dialogBox"));
  249.  
  250.     void OnCloseWindow(wxCloseEvent& event);
  251.     void OnDefaultAction(wxControl *item);
  252.     void OnCommand(wxWindow& win, wxCommandEvent& event);
  253.  
  254.     // Extend event processing to search the view's event table
  255.     virtual bool ProcessEvent(wxEvent& event);
  256.  
  257. private:
  258.     wxPropertyFormView*       m_view;
  259.  
  260.     DECLARE_EVENT_TABLE()
  261.     DECLARE_CLASS(wxPropertyFormDialog)
  262. };
  263.  
  264. /*
  265.  * A default panel class to use.
  266.  */
  267.  
  268. class WXDLLEXPORT wxPropertyFormPanel: public wxPanel
  269. {
  270. public:
  271.     wxPropertyFormPanel(wxPropertyFormView *v = NULL,
  272.                         wxWindow *parent = NULL,
  273.                         const wxPoint& pos = wxDefaultPosition,
  274.                         const wxSize& size = wxDefaultSize,
  275.                         long style = 0,
  276.                         const wxString& name = _T("panel"))
  277.         : wxPanel(parent, -1, pos, size, style, name)
  278.         {
  279.             m_view = v;
  280.         }
  281.     void OnDefaultAction(wxControl *item);
  282.     void OnCommand(wxWindow& win, wxCommandEvent& event);
  283.  
  284.     // Extend event processing to search the view's event table
  285.     virtual bool ProcessEvent(wxEvent& event);
  286.     void SetView(wxPropertyFormView* view) { m_view = view; }
  287.     wxPropertyFormView* GetView() const { return m_view; }
  288.  
  289. private:
  290.     wxPropertyFormView*       m_view;
  291.  
  292.     DECLARE_CLASS(wxPropertyFormPanel)
  293. };
  294.  
  295. /*
  296.  * A default frame class to use.
  297.  */
  298.  
  299. class WXDLLEXPORT wxPropertyFormFrame: public wxFrame
  300. {
  301. public:
  302.     wxPropertyFormFrame(wxPropertyFormView *v = NULL,
  303.                         wxFrame *parent = NULL,
  304.                         const wxString& title = wxEmptyString,
  305.                         const wxPoint& pos = wxDefaultPosition,
  306.                         const wxSize& size = wxDefaultSize,
  307.                         long style = wxDEFAULT_FRAME_STYLE,
  308.                         const wxString& name = _T("frame"))
  309.         : wxFrame(parent, -1, title, pos, size, style, name)
  310.         {
  311.             m_view = v;
  312.             m_propertyPanel = NULL;
  313.         }
  314.     void OnCloseWindow(wxCloseEvent& event);
  315.  
  316.     // Must call this to create panel and associate view
  317.     virtual bool Initialize(void);
  318.     virtual wxPanel *OnCreatePanel(wxFrame *parent, wxPropertyFormView *v);
  319.     inline virtual wxPanel *GetPropertyPanel(void) const { return m_propertyPanel; }
  320.  
  321. private:
  322.     wxPropertyFormView*       m_view;
  323.     wxPanel*                  m_propertyPanel;
  324.  
  325.     DECLARE_EVENT_TABLE()
  326.     DECLARE_CLASS(wxPropertyFormFrame)
  327. };
  328.  
  329. #endif
  330.   // wxUSE_PROPSHEET
  331.  
  332. #endif
  333.   // _WX_PROPFORM_H_
  334.