git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2199 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			341 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			341 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        prop.h
 | 
						|
// Purpose:     Property sheet classes
 | 
						|
// Author:      Julian Smart
 | 
						|
// Modified by:
 | 
						|
// Created:     04/01/98
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Copyright:   (c) Julian Smart
 | 
						|
// Licence:   	wxWindows licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_PROP_H_
 | 
						|
#define _WX_PROP_H_
 | 
						|
 | 
						|
#ifdef __GNUG__
 | 
						|
#pragma interface "prop.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#include "wx/defs.h"
 | 
						|
#include "wx/string.h"
 | 
						|
#include "wx/hash.h"
 | 
						|
#include "wx/dialog.h"
 | 
						|
#include "wx/frame.h"
 | 
						|
#include "wx/button.h"
 | 
						|
#include "wx/listbox.h"
 | 
						|
#include "wx/textctrl.h"
 | 
						|
#include "wx/gdicmn.h"
 | 
						|
#include "wx/layout.h"
 | 
						|
 | 
						|
class wxWindow;
 | 
						|
class wxProperty;
 | 
						|
class wxPropertyValue;
 | 
						|
class wxPropertySheet;
 | 
						|
class wxPropertyView;
 | 
						|
class wxPropertyValidator;
 | 
						|
class wxPropertyValidatorRegistry;
 | 
						|
 | 
						|
#define wxPROPERTY_VERSION 2.0
 | 
						|
 | 
						|
// A storable sheet of values
 | 
						|
class WXDLLEXPORT wxPropertySheet: public wxObject
 | 
						|
{
 | 
						|
 DECLARE_DYNAMIC_CLASS(wxPropertySheet)
 | 
						|
 public:
 | 
						|
  wxPropertySheet(const wxString& name = "");
 | 
						|
  ~wxPropertySheet(void);
 | 
						|
 | 
						|
  // Set the name of the sheet
 | 
						|
  inline virtual void SetName(const wxString& name) { m_name=name; }
 | 
						|
  inline virtual wxString GetName() const { return m_name; }
 | 
						|
  // Does this sheet contain a property with this name
 | 
						|
  virtual bool HasProperty(const wxString& name) const;
 | 
						|
 | 
						|
  // Set property name to value
 | 
						|
  virtual bool SetProperty(const wxString& name, const wxPropertyValue& value);
 | 
						|
 | 
						|
  // Remove property from sheet by name, deleting it
 | 
						|
  virtual void RemoveProperty(const wxString& name);
 | 
						|
 | 
						|
  // Get the name of the sheet
 | 
						|
  // Add a property
 | 
						|
  virtual void AddProperty(wxProperty *property);
 | 
						|
 | 
						|
  // Get property by name
 | 
						|
  virtual wxProperty *GetProperty(const wxString& name) const;
 | 
						|
 | 
						|
  // Clear all properties
 | 
						|
  virtual void Clear(void);
 | 
						|
 | 
						|
  virtual bool Save(ostream& str);
 | 
						|
  virtual bool Load(ostream& str);
 | 
						|
 | 
						|
  virtual void UpdateAllViews(wxPropertyView *thisView = NULL);
 | 
						|
  inline virtual wxList& GetProperties(void) const { return (wxList&) m_properties; }
 | 
						|
  
 | 
						|
  // Sets/clears the modified flag for each property value
 | 
						|
  virtual void SetAllModified(bool flag = TRUE);
 | 
						|
 | 
						|
 protected:
 | 
						|
  wxObject*         m_viewedObject;
 | 
						|
  wxList            m_properties;
 | 
						|
  wxPropertyView*   m_propertyView;
 | 
						|
  wxString			m_name;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
// Base class for property sheet views. There are currently two directly derived
 | 
						|
// classes: wxPropertyListView, and wxPropertyFormView.
 | 
						|
class WXDLLEXPORT wxPropertyView: public wxEvtHandler
 | 
						|
{
 | 
						|
 DECLARE_DYNAMIC_CLASS(wxPropertyView)
 | 
						|
 public:
 | 
						|
  wxPropertyView(long flags = 0);
 | 
						|
  ~wxPropertyView(void);
 | 
						|
 | 
						|
  // Associates and shows the view
 | 
						|
  virtual void ShowView(wxPropertySheet *WXUNUSED(propertySheet), wxWindow *WXUNUSED(panel)) {}
 | 
						|
 | 
						|
  // Update this view of the viewed object, called e.g. by
 | 
						|
  // the object itself.
 | 
						|
  virtual bool OnUpdateView(void) {return FALSE;};
 | 
						|
 | 
						|
  // Override this to do something as soon as the property changed,
 | 
						|
  // if the view and validators support it.
 | 
						|
  virtual void OnPropertyChanged(wxProperty *WXUNUSED(property)) {}
 | 
						|
 | 
						|
  virtual void AddRegistry(wxPropertyValidatorRegistry *registry);
 | 
						|
  inline virtual wxList& GetRegistryList(void) const
 | 
						|
   { return (wxList&) m_validatorRegistryList; }
 | 
						|
 | 
						|
  virtual wxPropertyValidator *FindPropertyValidator(wxProperty *property);
 | 
						|
  inline virtual void SetPropertySheet(wxPropertySheet *sheet) { m_propertySheet = sheet; }
 | 
						|
  inline virtual wxPropertySheet *GetPropertySheet(void) const { return m_propertySheet; }
 | 
						|
 | 
						|
/*
 | 
						|
  virtual void OnOk(void) {};
 | 
						|
  virtual void OnCancel(void) {};
 | 
						|
  virtual void OnHelp(void) {};
 | 
						|
*/
 | 
						|
 | 
						|
  inline virtual bool OnClose(void) { return FALSE; }
 | 
						|
  inline long GetFlags(void) { return m_buttonFlags; }
 | 
						|
 | 
						|
 protected:
 | 
						|
  long                  m_buttonFlags;
 | 
						|
  wxPropertySheet*      m_propertySheet;
 | 
						|
  wxProperty*           m_currentProperty;
 | 
						|
  wxList                m_validatorRegistryList;
 | 
						|
  wxPropertyValidator*  m_currentValidator;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
class WXDLLEXPORT wxPropertyValidator: public wxEvtHandler
 | 
						|
{
 | 
						|
  DECLARE_DYNAMIC_CLASS(wxPropertyValidator)
 | 
						|
 public:
 | 
						|
  wxPropertyValidator(long flags = 0);
 | 
						|
  ~wxPropertyValidator(void);
 | 
						|
 | 
						|
  inline long GetFlags(void) const { return m_validatorFlags; }
 | 
						|
  inline void SetValidatorProperty(wxProperty *prop) { m_validatorProperty = prop; }
 | 
						|
  inline wxProperty *GetValidatorProperty(void) const { return m_validatorProperty; }
 | 
						|
 | 
						|
  virtual bool StringToFloat (wxChar *s, float *number);
 | 
						|
  virtual bool StringToDouble (wxChar *s, double *number);
 | 
						|
  virtual bool StringToInt (wxChar *s, int *number);
 | 
						|
  virtual bool StringToLong (wxChar *s, long *number);
 | 
						|
  virtual wxChar *FloatToString (float number);
 | 
						|
  virtual wxChar *DoubleToString (double number);
 | 
						|
  virtual wxChar *IntToString (int number);
 | 
						|
  virtual wxChar *LongToString (long number);
 | 
						|
 | 
						|
 protected:
 | 
						|
  long          m_validatorFlags;
 | 
						|
  wxProperty*   m_validatorProperty;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
// extern wxPropertyValidator *wxDefaultPropertyValidator;
 | 
						|
 | 
						|
class WXDLLEXPORT wxPropertyValidatorRegistry: public wxHashTable
 | 
						|
{
 | 
						|
  DECLARE_DYNAMIC_CLASS(wxPropertyValidatorRegistry)
 | 
						|
 public:
 | 
						|
  wxPropertyValidatorRegistry(void);
 | 
						|
  ~wxPropertyValidatorRegistry(void);
 | 
						|
 | 
						|
  virtual void RegisterValidator(const wxString& roleName, wxPropertyValidator *validator);
 | 
						|
  virtual wxPropertyValidator *GetValidator(const wxString& roleName);
 | 
						|
  void ClearRegistry(void);
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * Property value class
 | 
						|
 */
 | 
						|
 | 
						|
typedef enum {
 | 
						|
    wxPropertyValueNull,
 | 
						|
    wxPropertyValueInteger,
 | 
						|
    wxPropertyValueReal,
 | 
						|
    wxPropertyValuebool,
 | 
						|
    wxPropertyValueString,
 | 
						|
    wxPropertyValueList,
 | 
						|
    wxPropertyValueIntegerPtr,
 | 
						|
    wxPropertyValueRealPtr,
 | 
						|
    wxPropertyValueboolPtr,
 | 
						|
    wxPropertyValueStringPtr
 | 
						|
} wxPropertyValueType;
 | 
						|
 | 
						|
class WXDLLEXPORT wxPropertyValue: public wxObject
 | 
						|
{
 | 
						|
  DECLARE_DYNAMIC_CLASS(wxPropertyValue)
 | 
						|
 | 
						|
  wxPropertyValue(void);                       // Unknown type
 | 
						|
  wxPropertyValue(const wxPropertyValue& copyFrom);  // Copy constructor
 | 
						|
  wxPropertyValue(const wxChar *val);
 | 
						|
  wxPropertyValue(const wxString& val);
 | 
						|
  wxPropertyValue(long val);
 | 
						|
  wxPropertyValue(bool val);
 | 
						|
  wxPropertyValue(float val);
 | 
						|
  wxPropertyValue(double the_real);
 | 
						|
  wxPropertyValue(wxList *val);
 | 
						|
  wxPropertyValue(wxStringList *val);
 | 
						|
  // Pointer versions
 | 
						|
  wxPropertyValue(wxChar **val);
 | 
						|
  wxPropertyValue(long *val);
 | 
						|
  wxPropertyValue(bool *val);
 | 
						|
  wxPropertyValue(float *val);
 | 
						|
 | 
						|
  ~wxPropertyValue(void);
 | 
						|
 | 
						|
  virtual inline wxPropertyValueType Type(void) const { return m_type; }
 | 
						|
  virtual inline void SetType(wxPropertyValueType typ) { m_type = typ; }
 | 
						|
  virtual long IntegerValue(void) const;
 | 
						|
  virtual float RealValue(void) const;
 | 
						|
  virtual bool BoolValue(void) const;
 | 
						|
  virtual wxChar *StringValue(void) const;
 | 
						|
  virtual long *IntegerValuePtr(void) const;
 | 
						|
  virtual float *RealValuePtr(void) const;
 | 
						|
  virtual bool *BoolValuePtr(void) const;
 | 
						|
  virtual wxChar **StringValuePtr(void) const;
 | 
						|
 | 
						|
  // Get nth arg of clause (starting from 1)
 | 
						|
  virtual wxPropertyValue *Arg(wxPropertyValueType type, int arg) const;
 | 
						|
 | 
						|
  // Return nth argument of a list expression (starting from zero)
 | 
						|
  virtual wxPropertyValue *Nth(int arg) const;
 | 
						|
  // Returns the number of elements in a list expression
 | 
						|
  virtual int Number(void) const;
 | 
						|
 | 
						|
  virtual wxPropertyValue *NewCopy(void) const;
 | 
						|
  virtual void Copy(wxPropertyValue& copyFrom);
 | 
						|
 | 
						|
  virtual void WritePropertyClause(ostream& stream);  // Write this expression as a top-level clause
 | 
						|
  virtual void WritePropertyType(ostream& stream);    // Write as any other subexpression
 | 
						|
 | 
						|
  // Append an expression to a list
 | 
						|
  virtual void Append(wxPropertyValue *expr);
 | 
						|
  // Insert at beginning of list
 | 
						|
  virtual void Insert(wxPropertyValue *expr);
 | 
						|
 | 
						|
  // Get first expr in list
 | 
						|
  virtual inline wxPropertyValue *GetFirst(void) const
 | 
						|
    { return ((m_type == wxPropertyValueList) ? m_value.first : (wxPropertyValue*)NULL); }
 | 
						|
 | 
						|
  // Get next expr if this is a node in a list
 | 
						|
  virtual inline wxPropertyValue *GetNext(void) const
 | 
						|
    { return m_next; }
 | 
						|
 | 
						|
  // Get last expr in list
 | 
						|
  virtual inline wxPropertyValue *GetLast(void) const
 | 
						|
    { return ((m_type == wxPropertyValueList) ? m_last : (wxPropertyValue*)NULL); }
 | 
						|
  
 | 
						|
  // Delete this node from the list
 | 
						|
  virtual void Delete(wxPropertyValue *node);
 | 
						|
 | 
						|
  // Clear list
 | 
						|
  virtual void ClearList(void);
 | 
						|
 | 
						|
  virtual inline void SetClientData(wxObject *data) { m_clientData = data; }
 | 
						|
  virtual inline wxObject *GetClientData(void) { return m_clientData; }
 | 
						|
 | 
						|
  virtual wxString GetStringRepresentation(void);
 | 
						|
  
 | 
						|
  inline void SetModified(bool flag = TRUE) { m_modifiedFlag = flag; }
 | 
						|
  inline bool GetModified(void) { return m_modifiedFlag; }
 | 
						|
 | 
						|
  // Operators
 | 
						|
  void operator=(const wxPropertyValue& val);
 | 
						|
//  void operator=(const char *val);
 | 
						|
  void operator=(const wxString& val);
 | 
						|
  void operator=(const long val);
 | 
						|
  void operator=(const bool val);
 | 
						|
  void operator=(const float val);
 | 
						|
  void operator=(const wxChar **val);
 | 
						|
  void operator=(const long *val);
 | 
						|
  void operator=(const bool *val);
 | 
						|
  void operator=(const float *val);
 | 
						|
 | 
						|
 public:
 | 
						|
  wxObject*             m_clientData;
 | 
						|
  wxPropertyValueType   m_type;
 | 
						|
  bool                  m_modifiedFlag;
 | 
						|
 | 
						|
  union {
 | 
						|
    long integer; // Also doubles as bool
 | 
						|
    wxChar *string;
 | 
						|
    float real;
 | 
						|
    long *integerPtr;
 | 
						|
    bool *boolPtr;
 | 
						|
    wxChar **stringPtr;
 | 
						|
    float *realPtr;
 | 
						|
    wxPropertyValue *first;  // If is a list expr, points to the first node
 | 
						|
    } m_value;
 | 
						|
 | 
						|
  wxPropertyValue*      m_next;     // If this is a node in a list, points to the next node
 | 
						|
  wxPropertyValue*      m_last;     // If is a list expr, points to the last node
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * Property class: contains a name and a value.
 | 
						|
 */
 | 
						|
 | 
						|
class WXDLLEXPORT wxProperty: public wxObject
 | 
						|
{
 | 
						|
  DECLARE_DYNAMIC_CLASS(wxProperty)
 | 
						|
 protected:
 | 
						|
  bool                  m_enabled;
 | 
						|
 public:
 | 
						|
  wxPropertyValue       m_value;
 | 
						|
  wxString              m_name;
 | 
						|
  wxString              m_propertyRole;
 | 
						|
  wxPropertyValidator*  m_propertyValidator;
 | 
						|
  wxWindow*             m_propertyWindow; // Usually a panel item, if anything
 | 
						|
 | 
						|
  wxProperty(void);
 | 
						|
  wxProperty(wxProperty& copyFrom);
 | 
						|
  wxProperty(wxString name, wxString role, wxPropertyValidator *ed = NULL);
 | 
						|
  wxProperty(wxString name, const wxPropertyValue& val, wxString role, wxPropertyValidator *ed = NULL);
 | 
						|
  ~wxProperty(void);
 | 
						|
 | 
						|
  virtual wxPropertyValue& GetValue(void) const;
 | 
						|
  virtual wxPropertyValidator *GetValidator(void) const;
 | 
						|
  virtual wxString& GetName(void) const;
 | 
						|
  virtual wxString& GetRole(void) const;
 | 
						|
  virtual void SetValue(const wxPropertyValue& val);
 | 
						|
  virtual void SetValidator(wxPropertyValidator *v);
 | 
						|
  virtual void SetName(wxString& nm);
 | 
						|
  virtual void SetRole(wxString& role);
 | 
						|
  void operator=(const wxPropertyValue& val);
 | 
						|
  virtual inline void SetWindow(wxWindow *win) { m_propertyWindow = win; }
 | 
						|
  virtual inline wxWindow *GetWindow(void) const { return m_propertyWindow; }
 | 
						|
  
 | 
						|
  inline void Enable(bool en) { m_enabled = en; }
 | 
						|
  inline bool IsEnabled(void) const { return m_enabled; }
 | 
						|
};
 | 
						|
 | 
						|
#endif
 | 
						|
  // _WX_PROP_H_
 |