]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/button.h
Correct wxImage::Size() again; add unit tests for it.
[wxWidgets.git] / include / wx / button.h
index 9feabd6e1cda3a3fab136a17ce52903cc4894cf0..dfcf6610daf1f9a5bd259dee506498dad5703d97 100644 (file)
 // small as possible
 #define wxBU_EXACTFIT        0x0001
 
+// this flag can be used to disable using the text label in the button: it is
+// mostly useful when creating buttons showing bitmap and having stock id as
+// without it both the standard label corresponding to the stock id and the
+// bitmap would be shown
+#define wxBU_NOTEXT          0x0002
+
+
 #include "wx/bitmap.h"
 #include "wx/control.h"
 
@@ -99,7 +106,7 @@ public:
 
     // set the image position relative to the text, i.e. wxLEFT means that the
     // image is to the left of the text (this is the default)
-    virtual void SetBitmapPosition(wxDirection WXUNUSED(dir)) { }
+    void SetBitmapPosition(wxDirection dir);
 
 
     // make this button the default button in its top level window
@@ -130,28 +137,54 @@ public:
     void SetBitmapSelected(const wxBitmap& bitmap) { SetBitmapPressed(bitmap); }
     void SetBitmapHover(const wxBitmap& bitmap) { SetBitmapCurrent(bitmap); }
 
-protected:
-    // choose the default border for this window
-    virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
 
+    // this enum is not part of wx public API, it is public because it is used
+    // in non wxButton-derived classes internally
+    //
+    // also notice that MSW code relies on the values of the enum elements, do
+    // not change them without revising src/msw/button.cpp
     enum State
     {
         State_Normal,
-        State_Pressed,    // a.k.a. "selected" in public API for some reason
         State_Current,    // a.k.a. hot or "hovering"
+        State_Pressed,    // a.k.a. "selected" in public API for some reason
         State_Disabled,
         State_Focused,
         State_Max
     };
 
+    // return true if this button shouldn't show the text label, either because
+    // it doesn't have it or because it was explicitly disabled with wxBU_NOTEXT
+    bool DontShowLabel() const
+    {
+        return HasFlag(wxBU_NOTEXT) || GetLabel().empty();
+    }
+
+    // return true if we do show the label
+    bool ShowsLabel() const
+    {
+        return !DontShowLabel();
+    }
+
+protected:
+    // choose the default border for this window
+    virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
+
     virtual wxBitmap DoGetBitmap(State WXUNUSED(which)) const
         { return wxBitmap(); }
     virtual void DoSetBitmap(const wxBitmap& WXUNUSED(bitmap),
                              State WXUNUSED(which))
         { }
+
+    virtual wxSize DoGetBitmapMargins() const
+        { return wxSize(0, 0); }
+
     virtual void DoSetBitmapMargins(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y))
         { }
 
+    virtual void DoSetBitmapPosition(wxDirection WXUNUSED(dir))
+        { }
+
 
     wxDECLARE_NO_COPY_CLASS(wxButtonBase);
 };