]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/spinbutt.cpp
Second part of #15224 fix: AddRows, AddColumns (dghart)
[wxWidgets.git] / src / univ / spinbutt.cpp
index 9721e5062c46fd1595a4beadee98eb68e35ac56a..f354520b5991f9f6a393b8ea3bf98654802c4e8e 100644 (file)
@@ -1,10 +1,9 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        univ/spinbutt.cpp
+// Name:        src/univ/spinbutt.cpp
 // Purpose:     implementation of the universal version of wxSpinButton
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     21.01.01
-// RCS-ID:      $Id$
 // Copyright:   (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
-    #pragma implementation "spinbutbase.h"
-    #pragma implementation "univspinbutt.h"
-#endif
-
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
@@ -43,9 +37,6 @@
 // implementation of wxSpinButton
 // ============================================================================
 
-IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxNotifyEvent)
-IMPLEMENT_DYNAMIC_CLASS(wxSpinButton, wxControl)
-
 // ----------------------------------------------------------------------------
 // creation
 // ----------------------------------------------------------------------------
@@ -101,13 +92,13 @@ bool wxSpinButton::Create(wxWindow *parent,
 
     if ( !wxSpinButtonBase::Create(parent, id, pos, size, style,
                                    wxDefaultValidator, name) )
-        return FALSE;
+        return false;
 
-    SetBestSize(size);
+    SetInitialSize(size);
 
     CreateInputHandler(wxINP_HANDLER_SPINBTN);
 
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -144,14 +135,14 @@ int wxSpinButton::NormalizeValue(int value) const
     if ( value > m_max )
     {
         if ( GetWindowStyleFlag() & wxSP_WRAP )
-            value = m_min + (value - m_max) % (m_max - m_min);
+            value = m_min + (value - m_max - 1) % (m_max - m_min + 1);
         else
             value = m_max;
     }
     else if ( value < m_min )
     {
         if ( GetWindowStyleFlag() & wxSP_WRAP )
-            value = m_max - (m_min - value) % (m_max - m_min);
+            value = m_max - (m_min - value - 1) % (m_max - m_min + 1);
         else
             value = m_min;
     }
@@ -167,7 +158,7 @@ bool wxSpinButton::ChangeValue(int inc)
     {
         // nothing changed - most likely because we are already at min/max
         // value
-        return FALSE;
+        return false;
     }
 
     wxSpinEvent event(inc > 0 ? wxEVT_SCROLL_LINEUP : wxEVT_SCROLL_LINEDOWN,
@@ -178,7 +169,7 @@ bool wxSpinButton::ChangeValue(int inc)
     if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() )
     {
         // programm has vetoed the event
-        return FALSE;
+        return false;
     }
 
     m_value = valueNew;
@@ -187,7 +178,7 @@ bool wxSpinButton::ChangeValue(int inc)
     event.SetEventType(wxEVT_SCROLL_THUMBTRACK);
     (void)GetEventHandler()->ProcessEvent(event);
 
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -329,14 +320,14 @@ void wxSpinButton::CalcArrowRects(wxRect *rect1, wxRect *rect2) const
     }
 }
 
-wxScrollArrows::Arrow wxSpinButton::HitTest(const wxPoint& pt) const
+wxScrollArrows::Arrow wxSpinButton::HitTestArrow(const wxPoint& pt) const
 {
     wxRect rectArrow1, rectArrow2;
     CalcArrowRects(&rectArrow1, &rectArrow2);
 
-    if ( rectArrow1.Inside(pt) )
+    if ( rectArrow1.Contains(pt) )
         return wxScrollArrows::Arrow_First;
-    else if ( rectArrow2.Inside(pt) )
+    else if ( rectArrow2.Contains(pt) )
         return wxScrollArrows::Arrow_Second;
     else
         return wxScrollArrows::Arrow_None;
@@ -357,7 +348,15 @@ bool wxSpinButton::PerformAction(const wxControlAction& action,
     else
         return wxControl::PerformAction(action, numArg, strArg);
 
-    return TRUE;
+    return true;
+}
+
+/* static */
+wxInputHandler *wxSpinButton::GetStdInputHandler(wxInputHandler *handlerDef)
+{
+    static wxStdSpinButtonInputHandler s_handler(handlerDef);
+
+    return &s_handler;
 }
 
 // ----------------------------------------------------------------------------
@@ -370,7 +369,7 @@ wxStdSpinButtonInputHandler(wxInputHandler *inphand)
 {
 }
 
-bool wxStdSpinButtonInputHandler::HandleKey(wxControl *control,
+bool wxStdSpinButtonInputHandler::HandleKey(wxInputConsumer *consumer,
                                             const wxKeyEvent& event,
                                             bool pressed)
 {
@@ -390,43 +389,43 @@ bool wxStdSpinButtonInputHandler::HandleKey(wxControl *control,
                 break;
         }
 
-        if ( !!action )
+        if ( !action.IsEmpty() )
         {
-            control->PerformAction(action);
+            consumer->PerformAction(action);
 
-            return TRUE;
+            return true;
         }
     }
 
-    return wxStdInputHandler::HandleKey(control, event, pressed);
+    return wxStdInputHandler::HandleKey(consumer, event, pressed);
 }
 
-bool wxStdSpinButtonInputHandler::HandleMouse(wxControl *control,
+bool wxStdSpinButtonInputHandler::HandleMouse(wxInputConsumer *consumer,
                                               const wxMouseEvent& event)
 {
-    wxSpinButton *spinbtn = wxStaticCast(control, wxSpinButton);
+    wxSpinButton *spinbtn = wxStaticCast(consumer->GetInputWindow(), wxSpinButton);
 
     if ( spinbtn->GetArrows().HandleMouse(event) )
     {
         // don't refresh, everything is already done
-        return FALSE;
+        return false;
     }
 
-    return wxStdInputHandler::HandleMouse(control, event);
+    return wxStdInputHandler::HandleMouse(consumer, event);
 }
 
-bool wxStdSpinButtonInputHandler::HandleMouseMove(wxControl *control,
+bool wxStdSpinButtonInputHandler::HandleMouseMove(wxInputConsumer *consumer,
                                                   const wxMouseEvent& event)
 {
-    wxSpinButton *spinbtn = wxStaticCast(control, wxSpinButton);
+    wxSpinButton *spinbtn = wxStaticCast(consumer->GetInputWindow(), wxSpinButton);
 
     if ( spinbtn->GetArrows().HandleMouseMove(event) )
     {
         // processed by the arrows
-        return FALSE;
+        return false;
     }
 
-    return wxStdInputHandler::HandleMouseMove(control, event);
+    return wxStdInputHandler::HandleMouseMove(consumer, event);
 }