]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/spinctrl.h
Ensure that the overall table border doesn't get overdrawn by cell borders with a...
[wxWidgets.git] / interface / wx / spinctrl.h
index e135d0cad2c371f917a5ce66d6d077ffcefa69b7..404451ab11b8ec3447da52caf5f6814ec64bebe5 100644 (file)
@@ -2,8 +2,7 @@
 // Name:        spinctrl.h
 // Purpose:     interface of wxSpinCtrl
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
     @style{wxSP_WRAP}
         The value wraps at the minimum and maximum.
     @style{wxTE_PROCESS_ENTER}
-        Indicates that the control should generate wxEVT_COMMAND_TEXT_ENTER
+        Indicates that the control should generate @c wxEVT_TEXT_ENTER
         events. Using this style will prevent the user from using the Enter key
         for dialog navigation (e.g. activating the default button in the
         dialog) under MSW.
     @style{wxALIGN_LEFT}
         Same as wxTE_LEFT for wxTextCtrl: the text is left aligned.
-    @style{wxALIGN_CENTRE}
+    @style{wxALIGN_CENTRE_HORIZONTAL}
         Same as wxTE_CENTRE for wxTextCtrl: the text is centered.
     @style{wxALIGN_RIGHT}
         Same as wxTE_RIGHT for wxTextCtrl: the text is right aligned (this is
@@ -33,7 +32,8 @@
 
     @beginEventEmissionTable{wxSpinEvent}
     @event{EVT_SPINCTRL(id, func)}
-        Generated whenever the numeric value of the spinctrl is updated
+        Process a wxEVT_SPINCTRL event, which is generated
+        whenever the numeric value of the spin control is updated.
     @endEventTable
 
     You may also use the wxSpinButton event macros, however the corresponding events
@@ -46,7 +46,7 @@
 
     @library{wxcore}
     @category{ctrl}
-    @appearance{spinctrl.png}
+    @appearance{spinctrl}
 
     @see wxSpinButton, wxSpinCtrlDouble, wxControl
 */
@@ -61,6 +61,14 @@ public:
     /**
         Constructor, creating and showing a spin control.
 
+        If @a value is non-empty, it will be shown in the text entry part of
+        the control and if it has numeric value, the initial numeric value of
+        the control, as returned by GetValue() will also be determined by it
+        instead of by @a initial. Hence, it only makes sense to specify @a
+        initial if @a value is an empty string or is not convertible to a
+        number, otherwise @a initial is simply ignored and the number specified
+        by @a value is used.
+
         @param parent
             Parent window. Must not be @NULL.
         @param value
@@ -105,6 +113,15 @@ public:
                 long style = wxSP_ARROW_KEYS, int min = 0, int max = 100,
                 int initial = 0, const wxString& name = "wxSpinCtrl");
 
+    /**
+        Returns the numerical base being currently used, 10 by default.
+
+        @see SetBase()
+
+        @since 2.9.5
+     */
+    int GetBase() const;
+
     /**
         Gets maximal allowable value.
     */
@@ -120,8 +137,34 @@ public:
     */
     int GetValue() const;
 
+    /**
+        Sets the base to use for the numbers in this control.
+
+        Currently the only supported values are 10 (which is the default) and
+        16.
+
+        Changing the base allows the user to enter the numbers in the specified
+        base, e.g. with "0x" prefix for hexadecimal numbers, and also displays
+        the numbers in the specified base when they are changed using the spin
+        control arrows.
+
+        @param base
+            Numeric base, currently only 10 and 16 are supported.
+        @return
+            @true if the base was successfully changed or @false if it failed,
+            usually meaning that either the base is not 10 or 16.
+
+        @since 2.9.5
+     */
+    bool SetBase(int base);
+
     /**
         Sets range of allowable values.
+
+        Notice that calling this method may change the value of the control if
+        it's not inside the new valid range, e.g. it will become @a minVal if
+        it is less than it now. However no @c wxEVT_SPINCTRL
+        event is generated, even if it the value does change.
     */
     void SetRange(int minVal, int maxVal);
 
@@ -136,12 +179,20 @@ public:
     virtual void SetSelection(long from, long to);
 
     /**
-        Sets the value of the spin control. Use the variant using int instead.
+        Sets the value of the spin control.
+
+        It is recommended to use the overload taking an integer value instead.
+
+        Notice that, unlike wxTextCtrl::SetValue(), but like most of the other
+        setter methods in wxWidgets, calling this method does not generate any
+        events as events are only generated for the user actions.
     */
     virtual void SetValue(const wxString& text);
 
     /**
         Sets the value of the spin control.
+
+        Calling this method doesn't generate any @c wxEVT_SPINCTRL events.
     */
     void SetValue(int value);
 };
@@ -159,9 +210,17 @@ public:
            The value wraps at the minimum and maximum.
     @endStyleTable
 
+    @beginEventEmissionTable{wxSpinDoubleEvent}
+    @event{EVT_SPINCTRLDOUBLE(id, func)}
+        Generated whenever the numeric value of the spin control is changed,
+        that is, when the up/down spin button is clicked, when ENTER is pressed,
+        or the control loses focus and the new value is different from the last.
+        See wxSpinDoubleEvent.
+    @endEventTable
+
     @library{wxcore}
     @category{ctrl}
-    @appearance{spinctrldouble.png}
+    @appearance{spinctrldouble}
 
     @see wxSpinButton, wxSpinCtrl, wxControl
 */
@@ -256,6 +315,8 @@ public:
 
     /**
         Sets the increment value.
+        @note You may also need to increase the number of visible digits
+        using SetDigits
     */
     void SetIncrement(double inc);
 
@@ -265,12 +326,67 @@ public:
     void SetRange(double minVal, double maxVal);
 
     /**
-        Sets the value of the spin control. Use the variant using double instead.
+        Sets the value of the spin control.
+
+        It is recommended to use the overload taking a double value instead.
+
+        Notice that, unlike wxTextCtrl::SetValue(), but like most of the other
+        setter methods in wxWidgets, calling this method does not generate any
+        events as events are only generated for the user actions.
     */
     virtual void SetValue(const wxString& text);
 
     /**
         Sets the value of the spin control.
+
+        Calling this method doesn't generate any @c wxEVT_SPINCTRLDOUBLE events.
+    */
+    void SetValue(double value);
+};
+
+/**
+    @class wxSpinDoubleEvent
+
+    This event class is used for the events generated by wxSpinCtrlDouble.
+
+    @beginEventTable{wxSpinDoubleEvent}
+    @event{EVT_SPINCTRLDOUBLE(id, func)}
+        Generated whenever the numeric value of the spin control is changed,
+        that is, when the up/down spin button is clicked, when ENTER is pressed,
+        or the control loses focus and the new value is different from the last.
+        See wxSpinDoubleEvent.
+    @endEventTable
+
+    @library{wxcore}
+    @category{events}
+
+    @see wxSpinCtrlDouble
+*/
+class wxSpinDoubleEvent : public wxNotifyEvent
+{
+public:
+    /**
+        The constructor. Not normally used by the user code.
+    */
+    wxSpinDoubleEvent(wxEventType commandType = wxEVT_NULL, int winid = 0,
+                      double value = 0);
+
+    /**
+        The copy constructor.
+    */
+    wxSpinDoubleEvent(const wxSpinDoubleEvent& event);
+
+    /**
+        Returns the value associated with this spin control event.
+    */
+    double GetValue() const;
+
+    /**
+        Set the value associated with the event.
+        (Not normally used by user code.)
     */
     void SetValue(double value);
 };
+
+wxEventType wxEVT_SPINCTRL;
+wxEventType wxEVT_SPINCTRLDOUBLE;