]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/valgen.cpp
more fixes to radio menu items: fixed Check() for them; allow separators inside the...
[wxWidgets.git] / src / common / valgen.cpp
index c230dddb21ba7e39a78ea401cf24e378c55152fd..706dfe892e7ed6d0f2f1ba2d0e7eafe4b01eeb06 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     Jan 22 1999
 // RCS-ID:
 // Copyright:   (c) 1999 Kevin Smith
-// Licence:    wxWindows licence
+// Licence:           wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
   #include "wx/textctrl.h"
   #include "wx/button.h"
   #include "wx/listbox.h"
+  #include "wx/slider.h"
 #endif
 
-#ifndef __WIN16__
+#if wxUSE_SPINCTRL && !defined(__WIN16__)
+  #include "wx/spinctrl.h"
+#endif
+#if wxUSE_SPINBTN && !defined(__WIN16__)
   #include "wx/spinbutt.h"
+#endif
+#if wxUSE_CHECKLISTBOX && !defined(__WIN16__)
   #include "wx/checklst.h"
 #endif
 
@@ -81,14 +87,14 @@ wxGenericValidator::wxGenericValidator(const wxGenericValidator& val)
 
 bool wxGenericValidator::Copy(const wxGenericValidator& val)
 {
-  wxValidator::Copy(val);
+    wxValidator::Copy(val);
 
-  m_pBool = val.m_pBool;
-  m_pInt = val.m_pInt;
-  m_pString = val.m_pString;
-  m_pArrayInt = val.m_pArrayInt;
+    m_pBool = val.m_pBool;
+    m_pInt = val.m_pInt;
+    m_pString = val.m_pString;
+    m_pArrayInt = val.m_pArrayInt;
 
-  return TRUE;
+    return TRUE;
 }
 
 wxGenericValidator::~wxGenericValidator()
@@ -98,181 +104,227 @@ wxGenericValidator::~wxGenericValidator()
 // Called to transfer data to the window
 bool wxGenericValidator::TransferToWindow(void)
 {
-  if ( !m_validatorWindow )
-    return FALSE;
+    if ( !m_validatorWindow )
+        return FALSE;
 
-  // bool controls
+    // bool controls
 #if wxUSE_CHECKBOX
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox)) )
-  {
-    wxCheckBox* pControl = (wxCheckBox*) m_validatorWindow;
-       if (m_pBool)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox)) )
     {
-      pControl->SetValue(*m_pBool) ;
-      return TRUE;
-    }
-  } else
+        wxCheckBox* pControl = (wxCheckBox*) m_validatorWindow;
+        if (m_pBool)
+        {
+            pControl->SetValue(*m_pBool);
+            return TRUE;
+        }
+    } else
 #endif
 #if wxUSE_RADIOBTN
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)) )
-  {
-    wxRadioButton* pControl = (wxRadioButton*) m_validatorWindow;
-       if (m_pBool)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)) )
     {
-      pControl->SetValue(*m_pBool) ;
-      return TRUE;
-    }
-  } else
+        wxRadioButton* pControl = (wxRadioButton*) m_validatorWindow;
+        if (m_pBool)
+        {
+            pControl->SetValue(*m_pBool) ;
+            return TRUE;
+        }
+    } else
 #endif
-  // int controls
+
+    // int controls
 #if wxUSE_GAUGE
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxGauge)) )
-  {
-    wxGauge* pControl = (wxGauge*) m_validatorWindow;
-       if (m_pInt)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxGauge)) )
     {
-      pControl->SetValue(*m_pInt) ;
-      return TRUE;
-    }
-  }
-  else
+        wxGauge* pControl = (wxGauge*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetValue(*m_pInt);
+            return TRUE;
+        }
+    } else
 #endif
 #if wxUSE_RADIOBOX
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioBox)) )
-  {
-    wxRadioBox* pControl = (wxRadioBox*) m_validatorWindow;
-       if (m_pInt)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioBox)) )
     {
-      pControl->SetSelection(*m_pInt) ;
-      return TRUE;
-    }
-  }
-  else
+        wxRadioBox* pControl = (wxRadioBox*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetSelection(*m_pInt) ;
+            return TRUE;
+        }
+    } else
 #endif
 #if wxUSE_SCROLLBAR
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxScrollBar)) )
-  {
-    wxScrollBar* pControl = (wxScrollBar*) m_validatorWindow;
-       if (m_pInt)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxScrollBar)) )
     {
-      pControl->SetThumbPosition(*m_pInt) ;
-      return TRUE;
-    }
-  } else
+        wxScrollBar* pControl = (wxScrollBar*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetThumbPosition(*m_pInt) ;
+            return TRUE;
+        }
+    } else
 #endif
-#if wxUSE_SPINBTN
-#ifndef __WIN16__
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
-  {
-    wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
-    if (m_pInt)
+#if wxUSE_SPINCTRL && !defined(__WIN16__) && !defined(__WXMOTIF__)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
     {
-      pControl->SetValue(*m_pInt) ;
-      return TRUE;
-    }
-  } else
+        wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetValue(*m_pInt);
+            return TRUE;
+        }
+    } else
 #endif
+#if wxUSE_SPINBTN && !defined(__WIN16__)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
+    {
+        wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetValue(*m_pInt) ;
+            return TRUE;
+        }
+    } else
 #endif
-  // string controls
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
-  {
-    wxButton* pControl = (wxButton*) m_validatorWindow;
-       if (m_pString)
+#if wxUSE_SLIDER
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxSlider)) )
     {
-      pControl->SetLabel(*m_pString) ;
-      return TRUE;
-    }
-  } else
+        wxSlider* pControl = (wxSlider*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetValue(*m_pInt) ;
+            return TRUE;
+        }
+    } else
+#endif
+
+    // string controls
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
+    {
+        wxButton* pControl = (wxButton*) m_validatorWindow;
+        if (m_pString)
+        {
+            pControl->SetLabel(*m_pString) ;
+            return TRUE;
+        }
+    } else
 #if wxUSE_COMBOBOX
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
-  {
-    wxComboBox* pControl = (wxComboBox*) m_validatorWindow;
-       if (m_pString)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
     {
-      pControl->SetValue(*m_pString) ;
-      return TRUE;
-    }
-  } else
+        wxComboBox* pControl = (wxComboBox*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetSelection(*m_pInt) ;
+            return TRUE;
+        }
+        else if (m_pString)
+        {
+            if (pControl->FindString(* m_pString) > -1)
+            {
+                pControl->SetStringSelection(* m_pString);
+            }
+            return TRUE;
+        }
+    } else
 #endif
 #if wxUSE_CHOICE
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxChoice)) )
-  {
-    wxChoice* pControl = (wxChoice*) m_validatorWindow;
-       if (m_pInt)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxChoice)) )
     {
-      pControl->SetSelection(*m_pInt) ;
-      return TRUE;
-    }
-  } else
+        wxChoice* pControl = (wxChoice*) m_validatorWindow;
+        if (m_pInt)
+        {
+            pControl->SetSelection(*m_pInt) ;
+            return TRUE;
+        }
+        else if (m_pString)
+        {
+            if (pControl->FindString(* m_pString) > -1)
+            {
+                pControl->SetStringSelection(* m_pString);
+            }
+            return TRUE;
+        }
+    } else
 #endif
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxStaticText)) )
-  {
-    wxStaticText* pControl = (wxStaticText*) m_validatorWindow;
-       if (m_pString)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxStaticText)) )
     {
-      pControl->SetLabel(*m_pString) ;
-      return TRUE;
-    }
-  }
-  else if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
-  {
-    wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
-       if (m_pString)
+        wxStaticText* pControl = (wxStaticText*) m_validatorWindow;
+        if (m_pString)
+        {
+            pControl->SetLabel(*m_pString) ;
+            return TRUE;
+        }
+    } else
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
     {
-      pControl->SetValue(*m_pString) ;
-      return TRUE;
-    }
-  } else
-#if wxUSE_CHECKLISTBOX
-#ifndef __WIN16__
-  // array controls
-  // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox
-  // MUST come first:
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
-  {
-    wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
-       if (m_pArrayInt)
-    {
-      // clear all selections
-      int i;
-      for (i = 0 ; i < pControl->Number(); ++i)
-        pControl->Check(i, FALSE);
-      // select each item in our array
-      unsigned u;
-      for (u = 0; u < m_pArrayInt->Count(); ++u)
-        pControl->Check(m_pArrayInt->Item(u));
-      return TRUE;
-    }
-       else
-               return FALSE;
-  } else
-#endif
+        wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
+        if (m_pString)
+        {
+            pControl->SetValue(*m_pString) ;
+            return TRUE;
+        }
+        else if (m_pInt)
+        {
+            wxString str;
+            str.Printf(wxT("%d"), *m_pInt);
+            pControl->SetValue(str);
+            return TRUE;
+        }
+    } else
+    // array controls
+#if wxUSE_CHECKLISTBOX && !defined(__WIN16__)
+    // NOTE: wxCheckListBox is a wxListBox, so wxCheckListBox MUST come first:
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
+    {
+        wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
+        if (m_pArrayInt)
+        {
+            // clear all selections
+            size_t i,
+                   count = pControl->GetCount();
+            for ( i = 0 ; i < count; i++ )
+                pControl->Check(i, FALSE);
+
+            // select each item in our array
+            count = m_pArrayInt->GetCount();
+            for ( i = 0 ; i < count; i++ )
+                pControl->Check(m_pArrayInt->Item(i));
+
+            return TRUE;
+        }
+        else
+            return FALSE;
+    } else
 #endif
 #if wxUSE_LISTBOX
-  if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
-  {
-    wxListBox* pControl = (wxListBox*) m_validatorWindow;
-       if (m_pArrayInt)
-    {
-      // clear all selections
-      int i;
-      for (i = 0 ; i < pControl->Number(); ++i)
-        pControl->Deselect(i);
-      // select each item in our array
-      unsigned u;
-      for (u = 0; u < m_pArrayInt->Count(); ++u)
-        pControl->SetSelection(m_pArrayInt->Item(u));
-      return TRUE;
-    }
-  } else
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
+    {
+        wxListBox* pControl = (wxListBox*) m_validatorWindow;
+        if (m_pArrayInt)
+        {
+            // clear all selections
+            size_t i,
+                   count = pControl->GetCount();
+            for ( i = 0 ; i < count; i++ )
+                pControl->Deselect(i);
+
+            // select each item in our array
+            count = m_pArrayInt->GetCount();
+            for ( i = 0 ; i < count; i++ )
+                pControl->SetSelection(m_pArrayInt->Item(i));
+
+            return TRUE;
+        }
+    } else
 #endif
+        ;   // to match the last 'else' above
 
   // unrecognized control, or bad pointer
-    return FALSE;
   return FALSE;
 }
 
-// Called to transfer data to the window
+// Called to transfer data from the window
 bool wxGenericValidator::TransferFromWindow(void)
 {
   if ( !m_validatorWindow )
@@ -283,7 +335,7 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckBox)) )
   {
     wxCheckBox* pControl = (wxCheckBox*) m_validatorWindow;
-       if (m_pBool)
+        if (m_pBool)
     {
       *m_pBool = pControl->GetValue() ;
       return TRUE;
@@ -294,7 +346,7 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)) )
   {
     wxRadioButton* pControl = (wxRadioButton*) m_validatorWindow;
-       if (m_pBool)
+        if (m_pBool)
     {
       *m_pBool = pControl->GetValue() ;
       return TRUE;
@@ -306,7 +358,7 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxGauge)) )
   {
     wxGauge* pControl = (wxGauge*) m_validatorWindow;
-       if (m_pInt)
+        if (m_pInt)
     {
       *m_pInt = pControl->GetValue() ;
       return TRUE;
@@ -317,7 +369,7 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxRadioBox)) )
   {
     wxRadioBox* pControl = (wxRadioBox*) m_validatorWindow;
-       if (m_pInt)
+        if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
       return TRUE;
@@ -328,31 +380,51 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxScrollBar)) )
   {
     wxScrollBar* pControl = (wxScrollBar*) m_validatorWindow;
-       if (m_pInt)
+        if (m_pInt)
     {
       *m_pInt = pControl->GetThumbPosition() ;
       return TRUE;
     }
   } else
 #endif
-#if wxUSE_SPINBTN
-#ifndef __WIN16__
+#if wxUSE_SPINCTRL && !defined(__WIN16__) && !defined(__WXMOTIF__)
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
+    {
+        wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
+        if (m_pInt)
+        {
+            *m_pInt=pControl->GetValue();
+            return TRUE;
+        }
+    } else
+#endif
+#if wxUSE_SPINBTN && !defined(__WIN16__)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
   {
     wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
-       if (m_pInt)
+        if (m_pInt)
     {
       *m_pInt = pControl->GetValue() ;
       return TRUE;
     }
   } else
 #endif
+#if wxUSE_SLIDER
+  if (m_validatorWindow->IsKindOf(CLASSINFO(wxSlider)) )
+  {
+    wxSlider* pControl = (wxSlider*) m_validatorWindow;
+    if (m_pInt)
+    {
+      *m_pInt = pControl->GetValue() ;
+      return TRUE;
+    }
+  } else
 #endif
   // string controls
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
   {
     wxButton* pControl = (wxButton*) m_validatorWindow;
-       if (m_pString)
+        if (m_pString)
     {
       *m_pString = pControl->GetLabel() ;
       return TRUE;
@@ -363,28 +435,38 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
   {
     wxComboBox* pControl = (wxComboBox*) m_validatorWindow;
-       if (m_pString)
+    if (m_pInt)
     {
-      *m_pString = pControl->GetValue() ;
+      *m_pInt = pControl->GetSelection() ;
       return TRUE;
     }
+    else if (m_pString)
+    {
+        *m_pString = pControl->GetValue();
+        return TRUE;
+    }
   } else
 #endif
 #if wxUSE_CHOICE
  if (m_validatorWindow->IsKindOf(CLASSINFO(wxChoice)) )
   {
     wxChoice* pControl = (wxChoice*) m_validatorWindow;
-       if (m_pInt)
+        if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
       return TRUE;
     }
+    else if (m_pString)
+    {
+        *m_pString = pControl->GetStringSelection();
+        return TRUE;
+    }
   } else
 #endif
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxStaticText)) )
   {
     wxStaticText* pControl = (wxStaticText*) m_validatorWindow;
-       if (m_pString)
+        if (m_pString)
     {
       *m_pString = pControl->GetLabel() ;
       return TRUE;
@@ -393,33 +475,42 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
   {
     wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
-       if (m_pString)
+        if (m_pString)
     {
       *m_pString = pControl->GetValue() ;
       return TRUE;
     }
+    else if (m_pInt)
+    {
+        *m_pInt = wxAtoi(pControl->GetValue());
+        return TRUE;
+    }
   } else
-#if wxUSE_LISTBOX
-#ifndef __WIN16__
   // array controls
-  // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox
-  // MUST come first:
+#if wxUSE_CHECKLISTBOX
+#ifndef __WIN16__
+  // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox MUST come first:
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
   {
     wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
-       if (m_pArrayInt)
+    if (m_pArrayInt)
     {
       // clear our array
       m_pArrayInt->Clear();
+
       // add each selected item to our array
-      int i;
-      for (i = 0 ; i < pControl->Number(); ++i)
+      size_t i,
+             count = pControl->GetCount();
+      for ( i = 0; i < count; i++ )
+      {
         if (pControl->IsChecked(i))
           m_pArrayInt->Add(i);
+      }
+
       return TRUE;
     }
-       else
-         return FALSE;
+    else
+      return FALSE;
   } else
 #endif
 #endif
@@ -427,15 +518,20 @@ bool wxGenericValidator::TransferFromWindow(void)
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
   {
     wxListBox* pControl = (wxListBox*) m_validatorWindow;
-       if (m_pArrayInt)
+    if (m_pArrayInt)
     {
       // clear our array
       m_pArrayInt->Clear();
+
       // add each selected item to our array
-      int i;
-      for (i = 0 ; i < pControl->Number(); ++i)
+      size_t i,
+             count = pControl->GetCount();
+      for ( i = 0; i < count; i++ )
+      {
         if (pControl->Selected(i))
           m_pArrayInt->Add(i);
+      }
+
       return TRUE;
     }
   } else