]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/propform.cpp
*DO* use wxTR_EDIT_LABELS, it is neccessary
[wxWidgets.git] / src / generic / propform.cpp
index 2a115e5c57800918ec82988d53d05052fc86b48d..bfa779c272ff9a2760717de9fa775bffb9170dee 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 #pragma hdrstop
 #endif
 
+#if wxUSE_PROPSHEET
+
 #ifndef WX_PRECOMP
-#include "wx/wx.h"
 #endif
 
+#include "wx/wx.h"
+#include "wx/propform.h"
+
 #include <ctype.h>
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
 
-#if wxUSE_IOSTREAMH
-#if defined(__WXMSW__) && !defined(__GNUWIN32__)
-#include <strstrea.h>
-#else
-#include <strstream.h>
-#endif
-#else
-#include <strstream>
-#endif
-
-#include "wx/window.h"
-#include "wx/utils.h"
-#include "wx/list.h"
-#include "wx/propform.h"
 
 /*
- * Property view
- */
+* Property view
+*/
 
 IMPLEMENT_DYNAMIC_CLASS(wxPropertyFormView, wxPropertyView)
 
 BEGIN_EVENT_TABLE(wxPropertyFormView, wxPropertyView)
-       EVT_BUTTON(wxID_OK,             wxPropertyFormView::OnOk)
-       EVT_BUTTON(wxID_CANCEL,         wxPropertyFormView::OnCancel)
-       EVT_BUTTON(wxID_HELP,           wxPropertyFormView::OnHelp)
-       EVT_BUTTON(wxID_PROP_REVERT,    wxPropertyFormView::OnRevert)
-       EVT_BUTTON(wxID_PROP_UPDATE,    wxPropertyFormView::OnUpdate)
+EVT_BUTTON(wxID_OK,          wxPropertyFormView::OnOk)
+EVT_BUTTON(wxID_CANCEL,      wxPropertyFormView::OnCancel)
+EVT_BUTTON(wxID_HELP,        wxPropertyFormView::OnHelp)
+EVT_BUTTON(wxID_PROP_REVERT, wxPropertyFormView::OnRevert)
+EVT_BUTTON(wxID_PROP_UPDATE, wxPropertyFormView::OnUpdate)
 END_EVENT_TABLE()
 
 bool wxPropertyFormView::sm_dialogCancelled = FALSE;
 
 wxPropertyFormView::wxPropertyFormView(wxWindow *propPanel, long flags):wxPropertyView(flags)
 {
-  m_propertyWindow = propPanel;
-  m_managedWindow = NULL;
+    m_propertyWindow = propPanel;
+    m_managedWindow = NULL;
 
-  m_windowCloseButton = NULL;
-  m_windowCancelButton = NULL;
-  m_windowHelpButton = NULL;
+    m_windowCloseButton = NULL;
+    m_windowCancelButton = NULL;
+    m_windowHelpButton = NULL;
 
-  m_detailedEditing = FALSE;
+    m_detailedEditing = FALSE;
 }
 
 wxPropertyFormView::~wxPropertyFormView(void)
@@ -78,125 +68,129 @@ wxPropertyFormView::~wxPropertyFormView(void)
 
 void wxPropertyFormView::ShowView(wxPropertySheet *ps, wxWindow *panel)
 {
-  m_propertySheet = ps;
+    m_propertySheet = ps;
 
-  AssociatePanel(panel);
-//  CreateControls();
-//  UpdatePropertyList();
+    AssociatePanel(panel);
+    //  CreateControls();
+    //  UpdatePropertyList();
 }
 
 // Update this view of the viewed object, called e.g. by
 // the object itself.
 bool wxPropertyFormView::OnUpdateView(void)
 {
-  return TRUE;
+    return TRUE;
 }
 
 bool wxPropertyFormView::Check(void)
 {
-  if (!m_propertySheet)
-    return FALSE;
-    
-  wxNode *node = m_propertySheet->GetProperties().First();
-  while (node)
-  {
-    wxProperty *prop = (wxProperty *)node->Data();
-    wxPropertyValidator *validator = FindPropertyValidator(prop);
-    if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
-    {
-      wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
-      if (!formValidator->OnCheckValue(prop, this, m_propertyWindow))
+    if (!m_propertySheet)
         return FALSE;
+
+    wxNode *node = m_propertySheet->GetProperties().First();
+    while (node)
+    {
+        wxProperty *prop = (wxProperty *)node->Data();
+        wxPropertyValidator *validator = FindPropertyValidator(prop);
+        if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+        {
+            wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
+            if (!formValidator->OnCheckValue(prop, this, m_propertyWindow))
+                return FALSE;
+        }
+        node = node->Next();
     }
-    node = node->Next();
-  }
-  return TRUE;
+    return TRUE;
 }
 
 bool wxPropertyFormView::TransferToPropertySheet(void)
 {
-  if (!m_propertySheet)
-    return FALSE;
-    
-  wxNode *node = m_propertySheet->GetProperties().First();
-  while (node)
-  {
-    wxProperty *prop = (wxProperty *)node->Data();
-    wxPropertyValidator *validator = FindPropertyValidator(prop);
-    if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+    if (!m_propertySheet)
+        return FALSE;
+
+    wxNode *node = m_propertySheet->GetProperties().First();
+    while (node)
     {
-      wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
-      formValidator->OnRetrieveValue(prop, this, m_propertyWindow);
+        wxProperty *prop = (wxProperty *)node->Data();
+        wxPropertyValidator *validator = FindPropertyValidator(prop);
+        if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+        {
+            wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
+            formValidator->OnRetrieveValue(prop, this, m_propertyWindow);
+        }
+        node = node->Next();
     }
-    node = node->Next();
-  }
-  return TRUE;
+    return TRUE;
 }
 
 bool wxPropertyFormView::TransferToDialog(void)
 {
-  if (!m_propertySheet)
-    return FALSE;
-    
-  wxNode *node = m_propertySheet->GetProperties().First();
-  while (node)
-  {
-    wxProperty *prop = (wxProperty *)node->Data();
-    wxPropertyValidator *validator = FindPropertyValidator(prop);
-    if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+    if (!m_propertySheet)
+        return FALSE;
+
+    wxNode *node = m_propertySheet->GetProperties().First();
+    while (node)
     {
-      wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
-      formValidator->OnDisplayValue(prop, this, m_propertyWindow);
+        wxProperty *prop = (wxProperty *)node->Data();
+        wxPropertyValidator *validator = FindPropertyValidator(prop);
+        if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+        {
+            wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
+            formValidator->OnDisplayValue(prop, this, m_propertyWindow);
+        }
+        node = node->Next();
     }
-    node = node->Next();
-  }
-  return TRUE;
+    return TRUE;
 }
 
 bool wxPropertyFormView::AssociateNames(void)
 {
-  if (!m_propertySheet || !m_propertyWindow)
-    return FALSE;
+    if (!m_propertySheet || !m_propertyWindow)
+        return FALSE;
 
-  wxNode *node = m_propertyWindow->GetChildren().First();
-  while (node)
-  {
-    wxWindow *win = (wxWindow *)node->Data();
-    if (win->GetName() != "")
+    wxNode *node = m_propertyWindow->GetChildren().First();
+    while (node)
     {
-      wxProperty *prop = m_propertySheet->GetProperty(win->GetName());
-      if (prop)
-        prop->SetWindow(win);
+        wxWindow *win = (wxWindow *)node->Data();
+        if (win->GetName() != wxT(""))
+        {
+            wxProperty *prop = m_propertySheet->GetProperty(win->GetName());
+            if (prop)
+                prop->SetWindow(win);
+        }
+        node = node->Next();
     }
-    node = node->Next();
-  }
-  return TRUE;
+    return TRUE;
 }
 
 
 bool wxPropertyFormView::OnClose(void)
 {
-  delete this;
-  return TRUE;
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxPropertyFormPanel)))
+    {
+        ((wxPropertyFormPanel*)m_propertyWindow)->SetView(NULL);
+    }
+    delete this;
+    return TRUE;
 }
 
 void wxPropertyFormView::OnOk(wxCommandEvent& WXUNUSED(event))
 {
-  // Retrieve the value if any
-  if (!Check())
-    return;
-  
-  sm_dialogCancelled = FALSE;
-  TransferToPropertySheet();
+    // Retrieve the value if any
+    if (!Check())
+        return;
 
-  m_managedWindow->Close(TRUE);
+    sm_dialogCancelled = FALSE;
+    TransferToPropertySheet();
+
+    m_managedWindow->Close(TRUE);
 }
 
 void wxPropertyFormView::OnCancel(wxCommandEvent& WXUNUSED(event))
 {
-  sm_dialogCancelled = TRUE;
+    sm_dialogCancelled = TRUE;
 
-  m_managedWindow->Close(TRUE);
+    m_managedWindow->Close(TRUE);
 }
 
 void wxPropertyFormView::OnHelp(wxCommandEvent& WXUNUSED(event))
@@ -211,541 +205,556 @@ void wxPropertyFormView::OnUpdate(wxCommandEvent& WXUNUSED(event))
 
 void wxPropertyFormView::OnRevert(wxCommandEvent& WXUNUSED(event))
 {
-  TransferToDialog();
+    TransferToDialog();
 }
 
 void wxPropertyFormView::OnCommand(wxWindow& win, wxCommandEvent& event)
 {
-  if (!m_propertySheet)
-    return;
-    
-  if (win.GetName() == "")
-    return;
-
-  if (wxStrcmp(win.GetName(), _T("ok")) == 0)
-    OnOk(event);
-  else if (wxStrcmp(win.GetName(), _T("cancel")) == 0)
-    OnCancel(event);
-  else if (wxStrcmp(win.GetName(), _T("help")) == 0)
-    OnHelp(event);
-  else if (wxStrcmp(win.GetName(), _T("update")) == 0)
-    OnUpdate(event);
-  else if (wxStrcmp(win.GetName(), _T("revert")) == 0)
-    OnRevert(event);
-  else
-  {
-    // Find a validator to route the command to.
-    wxNode *node = m_propertySheet->GetProperties().First();
-    while (node)
+    if (!m_propertySheet)
+        return;
+
+    if (win.GetName() == wxT(""))
+        return;
+
+    if (wxStrcmp(win.GetName(), wxT("ok")) == 0)
+        OnOk(event);
+    else if (wxStrcmp(win.GetName(), wxT("cancel")) == 0)
+        OnCancel(event);
+    else if (wxStrcmp(win.GetName(), wxT("help")) == 0)
+        OnHelp(event);
+    else if (wxStrcmp(win.GetName(), wxT("update")) == 0)
+        OnUpdate(event);
+    else if (wxStrcmp(win.GetName(), wxT("revert")) == 0)
+        OnRevert(event);
+    else
     {
-      wxProperty *prop = (wxProperty *)node->Data();
-      if (prop->GetWindow() && (prop->GetWindow() == &win))
-      {
-        wxPropertyValidator *validator = FindPropertyValidator(prop);
-        if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+        // Find a validator to route the command to.
+        wxNode *node = m_propertySheet->GetProperties().First();
+        while (node)
         {
-          wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
-          formValidator->OnCommand(prop, this, m_propertyWindow, event);
-          return;
+            wxProperty *prop = (wxProperty *)node->Data();
+            if (prop->GetWindow() && (prop->GetWindow() == &win))
+            {
+                wxPropertyValidator *validator = FindPropertyValidator(prop);
+                if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+                {
+                    wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
+                    formValidator->OnCommand(prop, this, m_propertyWindow, event);
+                    return;
+                }
+            }
+            node = node->Next();
         }
-      }
-      node = node->Next();
     }
-  }
 }
 
-void wxPropertyFormView::OnDoubleClick(wxControl *item)
+// Extend event processing to call OnCommand
+bool wxPropertyFormView::ProcessEvent(wxEvent& event)
 {
-  if (!m_propertySheet)
-    return;
-    
-  // Find a validator to route the command to.
-  wxNode *node = m_propertySheet->GetProperties().First();
-  while (node)
-  {
-    wxProperty *prop = (wxProperty *)node->Data();
-    if (prop->GetWindow() && ((wxControl *)prop->GetWindow() == item))
+    if (wxEvtHandler::ProcessEvent(event))
+        return TRUE;
+    else if (event.IsCommandEvent() && !event.IsKindOf(CLASSINFO(wxUpdateUIEvent)) && event.GetEventObject())
     {
-      wxPropertyValidator *validator = FindPropertyValidator(prop);
-      if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
-      {
-        wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
-        formValidator->OnDoubleClick(prop, this, m_propertyWindow);
+        OnCommand(* ((wxWindow*) event.GetEventObject()), (wxCommandEvent&) event);
+        return TRUE;
+    }
+    else
+        return FALSE;
+}
+
+void wxPropertyFormView::OnDoubleClick(wxControl *item)
+{
+    if (!m_propertySheet)
         return;
-      }
+
+    // Find a validator to route the command to.
+    wxNode *node = m_propertySheet->GetProperties().First();
+    while (node)
+    {
+        wxProperty *prop = (wxProperty *)node->Data();
+        if (prop->GetWindow() && ((wxControl *)prop->GetWindow() == item))
+        {
+            wxPropertyValidator *validator = FindPropertyValidator(prop);
+            if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
+            {
+                wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
+                formValidator->OnDoubleClick(prop, this, m_propertyWindow);
+                return;
+            }
+        }
+        node = node->Next();
     }
-    node = node->Next();
-  }
 }
 
 /*
- * Property form dialog box
- */
-IMPLEMENT_CLASS(wxPropertyFormDialog, wxDialog)
+* Property form dialog box
+*/
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyFormDialog, wxDialog)
 
 BEGIN_EVENT_TABLE(wxPropertyFormDialog, wxDialog)
-    EVT_CLOSE(wxPropertyFormDialog::OnCloseWindow)
+EVT_CLOSE(wxPropertyFormDialog::OnCloseWindow)
 END_EVENT_TABLE()
 
 wxPropertyFormDialog::wxPropertyFormDialog(wxPropertyFormView *v, wxWindow *parent, const wxString& title,
-       const wxPoint& pos, const wxSize& size, long style, const wxString& name):
-     wxDialog(parent, -1, title, pos, size, style, name)
+                                           const wxPoint& pos, const wxSize& size, long style, const wxString& name):
+wxDialog(parent, -1, title, pos, size, style, name)
 {
-  m_view = v;
-  m_view->AssociatePanel(this);
-  m_view->SetManagedWindow(this);
-//  SetAutoLayout(TRUE);
+    m_view = v;
+    m_view->AssociatePanel(this);
+    m_view->SetManagedWindow(this);
+    //  SetAutoLayout(TRUE);
 }
 
 void wxPropertyFormDialog::OnCloseWindow(wxCloseEvent& event)
 {
-  if (m_view)
-  {
-    m_view->OnClose();
-       m_view = NULL;
-       this->Destroy();
-  }
-  else
-    event.Veto();
+    if (m_view)
+    {
+        m_view->OnClose();
+        m_view = NULL;
+        this->Destroy();
+    }
+    else
+        event.Veto();
 }
 
 void wxPropertyFormDialog::OnDefaultAction(wxControl *item)
 {
-  m_view->OnDoubleClick(item);
+    m_view->OnDoubleClick(item);
 }
 
 void wxPropertyFormDialog::OnCommand(wxWindow& win, wxCommandEvent& event)
 {
-  if ( m_view )
-       m_view->OnCommand(win, event);
+    if ( m_view )
+        m_view->OnCommand(win, event);
 }
 
 // Extend event processing to search the view's event table
 bool wxPropertyFormDialog::ProcessEvent(wxEvent& event)
 {
-       if ( !m_view || ! m_view->ProcessEvent(event) )
-               return wxEvtHandler::ProcessEvent(event);
-       else
-               return TRUE;
+    if ( !m_view || ! m_view->ProcessEvent(event) )
+        return wxEvtHandler::ProcessEvent(event);
+    else
+        return TRUE;
 }
 
 
 /*
- * Property form panel
- */
-IMPLEMENT_CLASS(wxPropertyFormPanel, wxPanel)
+* Property form panel
+*/
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyFormPanel, wxPanel)
 
 void wxPropertyFormPanel::OnDefaultAction(wxControl *item)
 {
-  m_view->OnDoubleClick(item);
+    m_view->OnDoubleClick(item);
 }
 
 void wxPropertyFormPanel::OnCommand(wxWindow& win, wxCommandEvent& event)
 {
-  m_view->OnCommand(win, event);
+    m_view->OnCommand(win, event);
 }
 
 // Extend event processing to search the view's event table
 bool wxPropertyFormPanel::ProcessEvent(wxEvent& event)
 {
-       if ( !m_view || ! m_view->ProcessEvent(event) )
-               return wxEvtHandler::ProcessEvent(event);
-       else
-               return TRUE;
+    if ( !m_view || ! m_view->ProcessEvent(event) )
+        return wxEvtHandler::ProcessEvent(event);
+    else
+        return TRUE;
 }
 
 /*
- * Property frame
- */
-IMPLEMENT_CLASS(wxPropertyFormFrame, wxFrame)
+* Property frame
+*/
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyFormFrame, wxFrame)
 
 BEGIN_EVENT_TABLE(wxPropertyFormFrame, wxFrame)
-    EVT_CLOSE(wxPropertyFormFrame::OnCloseWindow)
+EVT_CLOSE(wxPropertyFormFrame::OnCloseWindow)
 END_EVENT_TABLE()
 
 void wxPropertyFormFrame::OnCloseWindow(wxCloseEvent& event)
 {
-  if (m_view && m_view->OnClose())
-    this->Destroy();
-  else
-    event.Veto();
+    if (m_view && m_view->OnClose())
+        this->Destroy();
+    else
+        event.Veto();
 }
 
 wxPanel *wxPropertyFormFrame::OnCreatePanel(wxFrame *parent, wxPropertyFormView *v)
 {
-  return new wxPropertyFormPanel(v, parent);
+    return new wxPropertyFormPanel(v, parent);
 }
 
 bool wxPropertyFormFrame::Initialize(void)
 {
-  m_propertyPanel = OnCreatePanel(this, m_view);
-  if (m_propertyPanel)
-  {
-    m_view->AssociatePanel(m_propertyPanel);
-    m_view->SetManagedWindow(this);
-    return TRUE;
-  }
-  else
-    return FALSE;
+    m_propertyPanel = OnCreatePanel(this, m_view);
+    if (m_propertyPanel)
+    {
+        m_view->AssociatePanel(m_propertyPanel);
+        m_view->SetManagedWindow(this);
+        return TRUE;
+    }
+    else
+        return FALSE;
 }
 
- /*
-  * Property form specific validator
-  */
-  
+/*
+* Property form specific validator
+*/
+
 IMPLEMENT_ABSTRACT_CLASS(wxPropertyFormValidator, wxPropertyValidator)
 
 
 /*
- * Default validators
- */
+* Default validators
+*/
 
 IMPLEMENT_DYNAMIC_CLASS(wxRealFormValidator, wxPropertyFormValidator)
 
 ///
 /// Real number form validator
-/// 
-bool wxRealFormValidator::OnCheckValue( wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *parentWindow)
+///
+bool wxRealFormValidator::OnCheckValue( wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                       wxWindow *parentWindow)
 {
-  if (m_realMin == 0.0 && m_realMax == 0.0)
+    if (m_realMin == 0.0 && m_realMax == 0.0)
+        return TRUE;
+
+    // The item used for viewing the real number: should be a text item.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+        return FALSE;
+
+    wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
+
+    float val = 0.0;
+    if (!StringToFloat(WXSTRINGCAST value, &val))
+    {
+        wxChar buf[200];
+        wxSprintf(buf, wxT("Value %s is not a valid real number!"), (const wxChar *)value);
+        wxMessageBox(buf, wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
+        return FALSE;
+    }
+
+    if (val < m_realMin || val > m_realMax)
+    {
+        wxChar buf[200];
+        wxSprintf(buf, wxT("Value must be a real number between %.2f and %.2f!"), m_realMin, m_realMax);
+        wxMessageBox(buf, wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
+        return FALSE;
+    }
+    return TRUE;
+}
+
+bool wxRealFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                          wxWindow *WXUNUSED(parentWindow) )
+{
+    // The item used for viewing the real number: should be a text item.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+        return FALSE;
+
+    wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
+
+    if (value.Length() == 0)
+        return FALSE;
+
+    float f = (float)wxAtof((const wxChar *)value);
+    property->GetValue() = f;
+    return TRUE;
+}
+
+bool wxRealFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                         wxWindow *WXUNUSED(parentWindow) )
+{
+    // The item used for viewing the real number: should be a text item.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+        return FALSE;
+
+    wxTextCtrl *textItem = (wxTextCtrl *)m_propertyWindow;
+    textItem->SetValue(FloatToString(property->GetValue().RealValue()));
     return TRUE;
-    
-  // The item used for viewing the real number: should be a text item.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-    return FALSE;
-
-  wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
-
-  float val = 0.0;
-  if (!StringToFloat(WXSTRINGCAST value, &val))
-  {
-    wxChar buf[200];
-    wxSprintf(buf, _T("Value %s is not a valid real number!"), (const wxChar *)value);
-    wxMessageBox(buf, _T("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
-    return FALSE;
-  }
-  
-  if (val < m_realMin || val > m_realMax)
-  {
-    wxChar buf[200];
-    wxSprintf(buf, _T("Value must be a real number between %.2f and %.2f!"), m_realMin, m_realMax);
-    wxMessageBox(buf, _T("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-bool wxRealFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow) )
-{
-  // The item used for viewing the real number: should be a text item.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-    return FALSE;
-
-  wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
-
-  if (value.Length() == 0)
-    return FALSE;
-    
-  float f = (float)wxAtof((const wxChar *)value);
-  property->GetValue() = f;
-  return TRUE;
-}
-
-bool wxRealFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow) )
-{
-  // The item used for viewing the real number: should be a text item.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-    return FALSE;
-
-  wxTextCtrl *textItem = (wxTextCtrl *)m_propertyWindow;
-  textItem->SetValue(FloatToString(property->GetValue().RealValue()));
-  return TRUE;
 }
 
 ///
 /// Integer validator
-/// 
+///
 IMPLEMENT_DYNAMIC_CLASS(wxIntegerFormValidator, wxPropertyFormValidator)
 
-bool wxIntegerFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *parentWindow)
+bool wxIntegerFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                          wxWindow *parentWindow)
 {
-  if (m_integerMin == 0.0 && m_integerMax == 0.0)
+    if (m_integerMin == 0.0 && m_integerMax == 0.0)
+        return TRUE;
+
+    // The item used for viewing the real number: should be a text item or a slider
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow)
+        return FALSE;
+
+    long val = 0;
+
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+    {
+        wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
+
+        if (!StringToLong(WXSTRINGCAST value, &val))
+        {
+            wxChar buf[200];
+            wxSprintf(buf, wxT("Value %s is not a valid integer!"), (const wxChar *)value);
+            wxMessageBox(buf, wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
+            return FALSE;
+        }
+    }
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
+    {
+        val = (long)((wxSlider *)m_propertyWindow)->GetValue();
+    }
+    else
+        return FALSE;
+
+    if (val < m_integerMin || val > m_integerMax)
+    {
+        char buf[200];
+        sprintf(buf, "Value must be an integer between %ld and %ld!", m_integerMin, m_integerMax);
+        wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
+        return FALSE;
+    }
     return TRUE;
-    
-  // The item used for viewing the real number: should be a text item or a slider
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow)
-    return FALSE;
+}
 
-  long val = 0;
+bool wxIntegerFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                             wxWindow *WXUNUSED(parentWindow))
+{
+    // The item used for viewing the real number: should be a text item or a slider
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow)
+        return FALSE;
 
-  if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-  {
-    wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+    {
+        wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
+
+        if (value.Length() == 0)
+            return FALSE;
 
-    if (!StringToLong(WXSTRINGCAST value, &val))
+        long i = wxAtol((const wxChar *)value);
+        property->GetValue() = i;
+    }
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
     {
-      wxChar buf[200];
-      wxSprintf(buf, _T("Value %s is not a valid integer!"), (const wxChar *)value);
-      wxMessageBox(buf, _T("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
-      return FALSE;
+        property->GetValue() = (long)((wxSlider *)m_propertyWindow)->GetValue();
     }
-  }
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
-  {
-    val = (long)((wxSlider *)m_propertyWindow)->GetValue();
-  }
-  else
-    return FALSE;
-    
-  if (val < m_integerMin || val > m_integerMax)
-  {
-    char buf[200];
-    sprintf(buf, "Value must be an integer between %ld and %ld!", m_integerMin, m_integerMax);
-    wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-bool wxIntegerFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow))
-{
-  // The item used for viewing the real number: should be a text item or a slider
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow)
-    return FALSE;
-
-  if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-  {
-    wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
+    else
+        return FALSE;
 
-    if (value.Length() == 0)
-      return FALSE;
-    
-    long i = wxAtol((const wxChar *)value);
-    property->GetValue() = i;
-  }
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
-  {
-    property->GetValue() = (long)((wxSlider *)m_propertyWindow)->GetValue();
-  }
-  else
-    return FALSE;
-    
-  return TRUE;
-}
-
-bool wxIntegerFormValidator::OnDisplayValue( wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow))
-{
-  // The item used for viewing the real number: should be a text item or a slider
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow)
-    return FALSE;
-
-  if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-  {
-    wxTextCtrl *textItem = (wxTextCtrl *)m_propertyWindow;
-    textItem->SetValue(LongToString(property->GetValue().IntegerValue()));
-  }
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
-  {
-    ((wxSlider *)m_propertyWindow)->SetValue((int)property->GetValue().IntegerValue());
-  }
-  else
-    return FALSE;
-  return TRUE;
+    return TRUE;
+}
+
+bool wxIntegerFormValidator::OnDisplayValue( wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                            wxWindow *WXUNUSED(parentWindow))
+{
+    // The item used for viewing the real number: should be a text item or a slider
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow)
+        return FALSE;
+
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+    {
+        wxTextCtrl *textItem = (wxTextCtrl *)m_propertyWindow;
+        textItem->SetValue(LongToString(property->GetValue().IntegerValue()));
+    }
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
+    {
+        ((wxSlider *)m_propertyWindow)->SetValue((int)property->GetValue().IntegerValue());
+    }
+    else
+        return FALSE;
+    return TRUE;
 }
 
 ///
 /// Boolean validator
-/// 
+///
 IMPLEMENT_DYNAMIC_CLASS(wxBoolFormValidator, wxPropertyFormValidator)
 
-bool wxBoolFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow))
+bool wxBoolFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                       wxWindow *WXUNUSED(parentWindow))
 {
-  // The item used for viewing the boolean: should be a checkbox
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
-    return FALSE;
+    // The item used for viewing the boolean: should be a checkbox
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
+        return FALSE;
 
-  return TRUE;
+    return TRUE;
 }
 
-bool wxBoolFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow) )
+bool wxBoolFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                          wxWindow *WXUNUSED(parentWindow) )
 {
-  // The item used for viewing the boolean: should be a checkbox.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
-    return FALSE;
+    // The item used for viewing the boolean: should be a checkbox.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
+        return FALSE;
 
-  wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
+    wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
 
-  property->GetValue() = (bool)checkBox->GetValue();
-  return TRUE;
+    property->GetValue() = (bool)checkBox->GetValue();
+    return TRUE;
 }
 
-bool wxBoolFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow))
+bool wxBoolFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                         wxWindow *WXUNUSED(parentWindow))
 {
-  // The item used for viewing the boolean: should be a checkbox.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
-    return FALSE;
+    // The item used for viewing the boolean: should be a checkbox.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
+        return FALSE;
 
-  wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
-  checkBox->SetValue((bool)property->GetValue().BoolValue());
-  return TRUE;
+    wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
+    checkBox->SetValue((bool)property->GetValue().BoolValue());
+    return TRUE;
 }
 
 ///
 /// String validator
-/// 
+///
 IMPLEMENT_DYNAMIC_CLASS(wxStringFormValidator, wxPropertyFormValidator)
 
 wxStringFormValidator::wxStringFormValidator(wxStringList *list, long flags):
-  wxPropertyFormValidator(flags)
+wxPropertyFormValidator(flags)
 {
-  m_strings = list;
+    m_strings = list;
 }
 
-bool wxStringFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *parentWindow )
+bool wxStringFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                         wxWindow *parentWindow )
 {
-  if (!m_strings)
+    if (!m_strings)
+        return TRUE;
+
+    // The item used for viewing the string: should be a text item, choice item or listbox.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow)
+        return FALSE;
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+    {
+        wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
+        if (!m_strings->Member(text->GetValue()))
+        {
+            wxString s("Value ");
+            s += text->GetValue();
+            s += " is not valid.";
+            wxMessageBox(s, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
+            return FALSE;
+        }
+    }
+    else
+    {
+        // Any other item constrains the string value,
+        // so we don't have to check it.
+    }
     return TRUE;
+}
 
-  // The item used for viewing the string: should be a text item, choice item or listbox.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow)
-    return FALSE;
-  if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-  {
-    wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
-    if (!m_strings->Member(text->GetValue()))
+bool wxStringFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                            wxWindow *WXUNUSED(parentWindow) )
+{
+    // The item used for viewing the string: should be a text item, choice item or listbox.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow)
+        return FALSE;
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
     {
-      wxString s("Value ");
-      s += text->GetValue();
-      s += " is not valid.";
-      wxMessageBox(s, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
-      return FALSE;
+        wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
+        property->GetValue() = text->GetValue();
     }
-  }
-  else
-  {
-    // Any other item constrains the string value,
-    // so we don't have to check it.
-  }
-  return TRUE;
-}
-
-bool wxStringFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow) )
-{
-  // The item used for viewing the string: should be a text item, choice item or listbox.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow)
-    return FALSE;
-  if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-  {
-    wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
-    property->GetValue() = text->GetValue();
-  }
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxListBox)))
-  {
-    wxListBox *lbox = (wxListBox *)m_propertyWindow;
-    if (lbox->GetSelection() > -1)
-      property->GetValue() = lbox->GetStringSelection();
-  }
-/*
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxRadioBox)))
-  {
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxListBox)))
+    {
+        wxListBox *lbox = (wxListBox *)m_propertyWindow;
+        if (lbox->GetSelection() > -1)
+            property->GetValue() = lbox->GetStringSelection();
+    }
+    /*
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxRadioBox)))
+    {
     wxRadioBox *rbox = (wxRadioBox *)m_propertyWindow;
     int n = 0;
     if ((n = rbox->GetSelection()) > -1)
-      property->GetValue() = rbox->GetString(n);
-  }
-*/
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxChoice)))
-  {
-    wxChoice *choice = (wxChoice *)m_propertyWindow;
-    if (choice->GetSelection() > -1)
-      property->GetValue() = choice->GetStringSelection();
-  }
-  else
-    return FALSE;
-  return TRUE;
-}
-
-bool wxStringFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view), 
-  wxWindow *WXUNUSED(parentWindow) )
-{
-  // The item used for viewing the string: should be a text item, choice item or listbox.
-  wxWindow *m_propertyWindow = property->GetWindow();
-  if (!m_propertyWindow)
-    return FALSE;
-  if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
-  {
-    wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
-    text->SetValue(property->GetValue().StringValue());
-  }
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxListBox)))
-  {
-    wxListBox *lbox = (wxListBox *)m_propertyWindow;
-    if (lbox->Number() == 0 && m_strings)
+    property->GetValue() = rbox->GetString(n);
+    }
+    */
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxChoice)))
     {
-      // Try to initialize the listbox from 'strings'
-      wxNode *node = m_strings->First();
-      while (node)
-      {
-        char *s = (char *)node->Data();
-        lbox->Append(s);
-        node = node->Next();
-      }
+        wxChoice *choice = (wxChoice *)m_propertyWindow;
+        if (choice->GetSelection() > -1)
+            property->GetValue() = choice->GetStringSelection();
     }
-    lbox->SetStringSelection(property->GetValue().StringValue());
-  }
-/*
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxRadioBox)))
-  {
+    else
+        return FALSE;
+    return TRUE;
+}
+
+bool wxStringFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
+                                           wxWindow *WXUNUSED(parentWindow) )
+{
+    // The item used for viewing the string: should be a text item, choice item or listbox.
+    wxWindow *m_propertyWindow = property->GetWindow();
+    if (!m_propertyWindow)
+        return FALSE;
+    if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
+    {
+        wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
+        text->SetValue(property->GetValue().StringValue());
+    }
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxListBox)))
+    {
+        wxListBox *lbox = (wxListBox *)m_propertyWindow;
+        if (lbox->GetCount() == 0 && m_strings)
+        {
+            // Try to initialize the listbox from 'strings'
+            wxNode *node = m_strings->First();
+            while (node)
+            {
+                char *s = (char *)node->Data();
+                lbox->Append(s);
+                node = node->Next();
+            }
+        }
+        lbox->SetStringSelection(property->GetValue().StringValue());
+    }
+    /*
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxRadioBox)))
+    {
     wxRadioBox *rbox = (wxRadioBox *)m_propertyWindow;
     rbox->SetStringSelection(property->GetValue().StringValue());
-  }
-*/
-  else if (m_propertyWindow->IsKindOf(CLASSINFO(wxChoice)))
-  {
-    wxChoice *choice = (wxChoice *)m_propertyWindow;
-#ifndef __XVIEW__
-    if (choice->Number() == 0 && m_strings)
-    {
-      // Try to initialize the choice item from 'strings'
-      // XView doesn't allow this kind of thing.
-      wxNode *node = m_strings->First();
-      while (node)
-      {
-        char *s = (char *)node->Data();
-        choice->Append(s);
-        node = node->Next();
-      }
     }
+    */
+    else if (m_propertyWindow->IsKindOf(CLASSINFO(wxChoice)))
+    {
+        wxChoice *choice = (wxChoice *)m_propertyWindow;
+#ifndef __XVIEW__
+        if (choice->GetCount() == 0 && m_strings)
+        {
+            // Try to initialize the choice item from 'strings'
+            // XView doesn't allow this kind of thing.
+            wxNode *node = m_strings->First();
+            while (node)
+            {
+                char *s = (char *)node->Data();
+                choice->Append(s);
+                node = node->Next();
+            }
+        }
 #endif
-    choice->SetStringSelection(property->GetValue().StringValue());
-  }
-  else
-    return FALSE;
-  return TRUE;
+        choice->SetStringSelection(property->GetValue().StringValue());
+    }
+    else
+        return FALSE;
+    return TRUE;
 }
 
+#endif // wxUSE_PROPSHEET