]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/valgen.cpp
Fixed old FIXME about unsigned result of sunstraction + a few changes to be able...
[wxWidgets.git] / src / common / valgen.cpp
index 5f687dd7ea5d57ca24b069314bbad412a3ba31ef..7119e95c4a864bb8c7b215639d6c5caeb4cc1d70 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:           wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:           wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "valgen.h"
 #endif
 
 #pragma implementation "valgen.h"
 #endif
 
   #include "wx/slider.h"
 #endif
 
   #include "wx/slider.h"
 #endif
 
-#if wxUSE_SPINCTRL && !defined(__WIN16__)
+
   #include "wx/spinctrl.h"
   #include "wx/spinctrl.h"
-#endif
-#if wxUSE_SPINBTN && !defined(__WIN16__)
+
+#if wxUSE_SPINBTN
   #include "wx/spinbutt.h"
 #endif
   #include "wx/spinbutt.h"
 #endif
-#if wxUSE_CHECKLISTBOX && !defined(__WIN16__)
+#if wxUSE_CHECKLISTBOX
   #include "wx/checklst.h"
 #endif
 
 #include "wx/valgen.h"
 
   #include "wx/checklst.h"
 #endif
 
 #include "wx/valgen.h"
 
+IMPLEMENT_CLASS(wxGenericValidator, wxValidator)
+
 wxGenericValidator::wxGenericValidator(bool *val)
 {
     Initialize();
 wxGenericValidator::wxGenericValidator(bool *val)
 {
     Initialize();
@@ -81,6 +83,7 @@ wxGenericValidator::wxGenericValidator(wxArrayInt *val)
 }
 
 wxGenericValidator::wxGenericValidator(const wxGenericValidator& val)
 }
 
 wxGenericValidator::wxGenericValidator(const wxGenericValidator& val)
+    : wxValidator()
 {
     Copy(val);
 }
 {
     Copy(val);
 }
@@ -94,18 +97,14 @@ bool wxGenericValidator::Copy(const wxGenericValidator& val)
     m_pString = val.m_pString;
     m_pArrayInt = val.m_pArrayInt;
 
     m_pString = val.m_pString;
     m_pArrayInt = val.m_pArrayInt;
 
-    return TRUE;
-}
-
-wxGenericValidator::~wxGenericValidator()
-{
+    return true;
 }
 
 // Called to transfer data to the window
 bool wxGenericValidator::TransferToWindow(void)
 {
     if ( !m_validatorWindow )
 }
 
 // Called to transfer data to the window
 bool wxGenericValidator::TransferToWindow(void)
 {
     if ( !m_validatorWindow )
-        return FALSE;
+        return false;
 
     // bool controls
 #if wxUSE_CHECKBOX
 
     // bool controls
 #if wxUSE_CHECKBOX
@@ -115,7 +114,7 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pBool)
         {
             pControl->SetValue(*m_pBool);
         if (m_pBool)
         {
             pControl->SetValue(*m_pBool);
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -126,7 +125,7 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pBool)
         {
             pControl->SetValue(*m_pBool) ;
         if (m_pBool)
         {
             pControl->SetValue(*m_pBool) ;
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -139,7 +138,7 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt);
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt);
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -150,7 +149,7 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pInt)
         {
             pControl->SetSelection(*m_pInt) ;
         if (m_pInt)
         {
             pControl->SetSelection(*m_pInt) ;
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -161,29 +160,29 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pInt)
         {
             pControl->SetThumbPosition(*m_pInt) ;
         if (m_pInt)
         {
             pControl->SetThumbPosition(*m_pInt) ;
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
-#if wxUSE_SPINCTRL && !defined(__WIN16__) && !defined(__WXMOTIF__)
+#if wxUSE_SPINCTRL && !defined(__WXMOTIF__)
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
     {
         wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt);
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
     {
         wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt);
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
-#if wxUSE_SPINBTN && !defined(__WIN16__)
+#if wxUSE_SPINBTN
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
     {
         wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt) ;
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
     {
         wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt) ;
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -194,21 +193,23 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt) ;
         if (m_pInt)
         {
             pControl->SetValue(*m_pInt) ;
-            return TRUE;
+            return true;
         }
     } else
 #endif
 
     // string controls
         }
     } else
 #endif
 
     // string controls
+#if wxUSE_BUTTON
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
     {
         wxButton* pControl = (wxButton*) m_validatorWindow;
         if (m_pString)
         {
             pControl->SetLabel(*m_pString) ;
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
     {
         wxButton* pControl = (wxButton*) m_validatorWindow;
         if (m_pString)
         {
             pControl->SetLabel(*m_pString) ;
-            return TRUE;
+            return true;
         }
     } else
         }
     } else
+#endif
 #if wxUSE_COMBOBOX
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
     {
 #if wxUSE_COMBOBOX
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
     {
@@ -216,15 +217,19 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pInt)
         {
             pControl->SetSelection(*m_pInt) ;
         if (m_pInt)
         {
             pControl->SetSelection(*m_pInt) ;
-            return TRUE;
+            return true;
         }
         else if (m_pString)
         {
         }
         else if (m_pString)
         {
-            if (pControl->FindString(* m_pString) > -1)
+            if (pControl->FindString(* m_pString) != wxNOT_FOUND)
             {
                 pControl->SetStringSelection(* m_pString);
             }
             {
                 pControl->SetStringSelection(* m_pString);
             }
-            return TRUE;
+            if ((m_validatorWindow->GetWindowStyle() & wxCB_READONLY) == 0)
+            {
+                pControl->SetValue(* m_pString);
+            }
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -235,15 +240,15 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pInt)
         {
             pControl->SetSelection(*m_pInt) ;
         if (m_pInt)
         {
             pControl->SetSelection(*m_pInt) ;
-            return TRUE;
+            return true;
         }
         else if (m_pString)
         {
         }
         else if (m_pString)
         {
-            if (pControl->FindString(* m_pString) > -1)
+            if (pControl->FindString(* m_pString) != wxNOT_FOUND)
             {
                 pControl->SetStringSelection(* m_pString);
             }
             {
                 pControl->SetStringSelection(* m_pString);
             }
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
@@ -253,47 +258,51 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pString)
         {
             pControl->SetLabel(*m_pString) ;
         if (m_pString)
         {
             pControl->SetLabel(*m_pString) ;
-            return TRUE;
+            return true;
         }
     } else
         }
     } else
+#if wxUSE_TEXTCTRL
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
     {
         wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
         if (m_pString)
         {
             pControl->SetValue(*m_pString) ;
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
     {
         wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
         if (m_pString)
         {
             pControl->SetValue(*m_pString) ;
-            return TRUE;
+            return true;
         }
         else if (m_pInt)
         {
             wxString str;
             str.Printf(wxT("%d"), *m_pInt);
             pControl->SetValue(str);
         }
         else if (m_pInt)
         {
             wxString str;
             str.Printf(wxT("%d"), *m_pInt);
             pControl->SetValue(str);
-            return TRUE;
+            return true;
         }
     } else
         }
     } else
-#if wxUSE_CHECKLISTBOX && !defined(__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)
+#endif
+    // array controls
+#if wxUSE_CHECKLISTBOX
+    // NOTE: wxCheckListBox is a wxListBox, so wxCheckListBox MUST come first:
+    if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
     {
     {
-      // 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;
-    }
+        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
         else
-                return FALSE;
-  } else
+            return false;
+    } else
 #endif
 #if wxUSE_LISTBOX
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
 #endif
 #if wxUSE_LISTBOX
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
@@ -302,28 +311,31 @@ bool wxGenericValidator::TransferToWindow(void)
         if (m_pArrayInt)
         {
             // clear all selections
         if (m_pArrayInt)
         {
             // clear all selections
-            int i;
-            for (i = 0 ; i < pControl->Number(); ++i)
+            size_t i,
+                   count = pControl->GetCount();
+            for ( i = 0 ; i < count; i++ )
                 pControl->Deselect(i);
                 pControl->Deselect(i);
+
             // select each item in our array
             // select each item in our array
-            unsigned u;
-            for (u = 0; u < m_pArrayInt->Count(); ++u)
-                pControl->SetSelection(m_pArrayInt->Item(u));
-            return TRUE;
+            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
         }
     } else
 #endif
         ;   // to match the last 'else' above
 
   // unrecognized control, or bad pointer
-  return FALSE;
+  return false;
 }
 
 // Called to transfer data from the window
 bool wxGenericValidator::TransferFromWindow(void)
 {
   if ( !m_validatorWindow )
 }
 
 // Called to transfer data from the window
 bool wxGenericValidator::TransferFromWindow(void)
 {
   if ( !m_validatorWindow )
-    return FALSE;
+    return false;
 
   // bool controls
 #if wxUSE_CHECKBOX
 
   // bool controls
 #if wxUSE_CHECKBOX
@@ -333,7 +345,7 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pBool)
     {
       *m_pBool = pControl->GetValue() ;
         if (m_pBool)
     {
       *m_pBool = pControl->GetValue() ;
-      return TRUE;
+      return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -344,7 +356,7 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pBool)
     {
       *m_pBool = pControl->GetValue() ;
         if (m_pBool)
     {
       *m_pBool = pControl->GetValue() ;
-      return TRUE;
+      return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -356,7 +368,7 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pInt)
     {
       *m_pInt = pControl->GetValue() ;
         if (m_pInt)
     {
       *m_pInt = pControl->GetValue() ;
-      return TRUE;
+      return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -367,7 +379,7 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
         if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
-      return TRUE;
+      return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -378,29 +390,29 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pInt)
     {
       *m_pInt = pControl->GetThumbPosition() ;
         if (m_pInt)
     {
       *m_pInt = pControl->GetThumbPosition() ;
-      return TRUE;
+      return true;
     }
   } else
 #endif
     }
   } else
 #endif
-#if wxUSE_SPINCTRL && !defined(__WIN16__) && !defined(__WXMOTIF__)
+#if wxUSE_SPINCTRL && !defined(__WXMOTIF__)
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
     {
         wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
         if (m_pInt)
         {
             *m_pInt=pControl->GetValue();
     if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinCtrl)) )
     {
         wxSpinCtrl* pControl = (wxSpinCtrl*) m_validatorWindow;
         if (m_pInt)
         {
             *m_pInt=pControl->GetValue();
-            return TRUE;
+            return true;
         }
     } else
 #endif
         }
     } else
 #endif
-#if wxUSE_SPINBTN && !defined(__WIN16__)
+#if wxUSE_SPINBTN
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
   {
     wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
         if (m_pInt)
     {
       *m_pInt = pControl->GetValue() ;
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxSpinButton)) )
   {
     wxSpinButton* pControl = (wxSpinButton*) m_validatorWindow;
         if (m_pInt)
     {
       *m_pInt = pControl->GetValue() ;
-      return TRUE;
+      return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -410,22 +422,23 @@ bool wxGenericValidator::TransferFromWindow(void)
     wxSlider* pControl = (wxSlider*) m_validatorWindow;
     if (m_pInt)
     {
     wxSlider* pControl = (wxSlider*) m_validatorWindow;
     if (m_pInt)
     {
-      pControl->SetValue(*m_pInt) ;
-      return TRUE;
+      *m_pInt = pControl->GetValue() ;
+      return true;
     }
   } else
 #endif
   // string controls
     }
   } else
 #endif
   // string controls
+#if wxUSE_BUTTON
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
   {
     wxButton* pControl = (wxButton*) m_validatorWindow;
         if (m_pString)
     {
       *m_pString = pControl->GetLabel() ;
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxButton)) )
   {
     wxButton* pControl = (wxButton*) m_validatorWindow;
         if (m_pString)
     {
       *m_pString = pControl->GetLabel() ;
-      return TRUE;
+      return true;
     }
     }
-  }
-  else
+  } else
+#endif
 #if wxUSE_COMBOBOX
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
   {
 #if wxUSE_COMBOBOX
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)) )
   {
@@ -433,12 +446,15 @@ bool wxGenericValidator::TransferFromWindow(void)
     if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
     if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
-      return TRUE;
+      return true;
     }
     else if (m_pString)
     {
     }
     else if (m_pString)
     {
-        *m_pString = pControl->GetStringSelection();
-        return TRUE;
+        if (m_validatorWindow->GetWindowStyle() & wxCB_READONLY)
+            *m_pString = pControl->GetStringSelection();
+        else
+            *m_pString = pControl->GetValue();
+        return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -449,12 +465,12 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
         if (m_pInt)
     {
       *m_pInt = pControl->GetSelection() ;
-      return TRUE;
+      return true;
     }
     else if (m_pString)
     {
         *m_pString = pControl->GetStringSelection();
     }
     else if (m_pString)
     {
         *m_pString = pControl->GetStringSelection();
-        return TRUE;
+        return true;
     }
   } else
 #endif
     }
   } else
 #endif
@@ -464,47 +480,51 @@ bool wxGenericValidator::TransferFromWindow(void)
         if (m_pString)
     {
       *m_pString = pControl->GetLabel() ;
         if (m_pString)
     {
       *m_pString = pControl->GetLabel() ;
-      return TRUE;
+      return true;
     }
   } else
     }
   } else
+#if wxUSE_TEXTCTRL
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
   {
     wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
         if (m_pString)
     {
       *m_pString = pControl->GetValue() ;
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
   {
     wxTextCtrl* pControl = (wxTextCtrl*) m_validatorWindow;
         if (m_pString)
     {
       *m_pString = pControl->GetValue() ;
-      return TRUE;
+      return true;
     }
     else if (m_pInt)
     {
         *m_pInt = wxAtoi(pControl->GetValue());
     }
     else if (m_pInt)
     {
         *m_pInt = wxAtoi(pControl->GetValue());
-        return TRUE;
+        return true;
     }
   } else
     }
   } else
-#if wxUSE_CHECKLISTBOX
-#ifndef __WIN16__
+#endif
   // array controls
   // array controls
-  // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox
-  // MUST come first:
+#if wxUSE_CHECKLISTBOX
+  // NOTE: wxCheckListBox isa wxListBox, so wxCheckListBox MUST come first:
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
   {
     wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxCheckListBox)) )
   {
     wxCheckListBox* pControl = (wxCheckListBox*) m_validatorWindow;
-        if (m_pArrayInt)
+    if (m_pArrayInt)
     {
       // clear our array
       m_pArrayInt->Clear();
     {
       // clear our array
       m_pArrayInt->Clear();
+
       // add each selected item to our array
       // 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);
         if (pControl->IsChecked(i))
           m_pArrayInt->Add(i);
-      return TRUE;
+      }
+
+      return true;
     }
     }
-        else
-          return FALSE;
+    else
+      return false;
   } else
 #endif
   } else
 #endif
-#endif
 #if wxUSE_LISTBOX
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
   {
 #if wxUSE_LISTBOX
   if (m_validatorWindow->IsKindOf(CLASSINFO(wxListBox)) )
   {
@@ -513,19 +533,24 @@ bool wxGenericValidator::TransferFromWindow(void)
     {
       // clear our array
       m_pArrayInt->Clear();
     {
       // clear our array
       m_pArrayInt->Clear();
+
       // add each selected item to our array
       // 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);
         if (pControl->Selected(i))
           m_pArrayInt->Add(i);
-      return TRUE;
+      }
+
+      return true;
     }
   } else
 #endif
 
   // unrecognized control, or bad pointer
     }
   } else
 #endif
 
   // unrecognized control, or bad pointer
-    return FALSE;
-  return FALSE;
+    return false;
+  return false;
 }
 
 /*
 }
 
 /*