X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9e4acc5197ac49259b9a39468c5931b4459d87f..eebb8902d970787df1e70b83e011ce051ebead21:/include/wx/bmpbuttn.h?ds=sidebyside diff --git a/include/wx/bmpbuttn.h b/include/wx/bmpbuttn.h index 91ff9dcec0..f34ae50935 100644 --- a/include/wx/bmpbuttn.h +++ b/include/wx/bmpbuttn.h @@ -12,70 +12,106 @@ #ifndef _WX_BMPBUTTON_H_BASE_ #define _WX_BMPBUTTON_H_BASE_ +#include "wx/defs.h" + #if wxUSE_BMPBUTTON -#include "wx/bitmap.h" #include "wx/button.h" -WXDLLEXPORT_DATA(extern const wxChar*) wxButtonNameStr; +// FIXME: right now only wxMSW, wxGTK and wxOSX implement bitmap support in wxButton +// itself, this shouldn't be used for the other platforms neither +// when all of them do it +#if (defined(__WXMSW__) || defined(__WXGTK20__) || defined(__WXOSX__)) && !defined(__WXUNIVERSAL__) + #define wxHAS_BUTTON_BITMAP +#endif // ---------------------------------------------------------------------------- // wxBitmapButton: a button which shows bitmaps instead of the usual string. // It has different bitmaps for different states (focused/disabled/pressed) // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxBitmapButtonBase : public wxButton +class WXDLLIMPEXP_CORE wxBitmapButtonBase : public wxButton { public: wxBitmapButtonBase() - : m_bmpNormal(), m_bmpSelected(), m_bmpFocus(), m_bmpDisabled() - , m_marginX(0), m_marginY(0) - { } - - // set the bitmaps - void SetBitmapLabel(const wxBitmap& bitmap) - { m_bmpNormal = bitmap; OnSetBitmap(); } - void SetBitmapSelected(const wxBitmap& sel) - { m_bmpSelected = sel; OnSetBitmap(); }; - void SetBitmapFocus(const wxBitmap& focus) - { m_bmpFocus = focus; OnSetBitmap(); }; - void SetBitmapDisabled(const wxBitmap& disabled) - { m_bmpDisabled = disabled; OnSetBitmap(); }; - void SetLabel(const wxBitmap& bitmap) - { SetBitmapLabel(bitmap); } - - // retrieve the bitmaps - const wxBitmap& GetBitmapLabel() const { return m_bmpNormal; } - const wxBitmap& GetBitmapSelected() const { return m_bmpSelected; } - const wxBitmap& GetBitmapFocus() const { return m_bmpFocus; } - const wxBitmap& GetBitmapDisabled() const { return m_bmpDisabled; } - wxBitmap& GetBitmapLabel() { return m_bmpNormal; } - wxBitmap& GetBitmapSelected() { return m_bmpSelected; } - wxBitmap& GetBitmapFocus() { return m_bmpFocus; } - wxBitmap& GetBitmapDisabled() { return m_bmpDisabled; } + { +#ifndef wxHAS_BUTTON_BITMAP + m_marginX = + m_marginY = 0; +#endif // wxHAS_BUTTON_BITMAP + } + + bool Create(wxWindow *parent, + wxWindowID winid, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) + { + // We use wxBU_NOTEXT to let the base class Create() know that we are + // not going to show the label: this is a hack needed for wxGTK where + // we can show both label and bitmap only with GTK 2.6+ but we always + // can show just one of them and this style allows us to choose which + // one we need. + // + // And we also use wxBU_EXACTFIT to avoid being resized up to the + // standard button size as this doesn't make sense for bitmap buttons + // which are not standard anyhow and should fit their bitmap size. + return wxButton::Create(parent, winid, "", + pos, size, + style | wxBU_NOTEXT | wxBU_EXACTFIT, + validator, name); + } // set/get the margins around the button - virtual void SetMargins(int x, int y) { m_marginX = x; m_marginY = y; } - int GetMarginX() const { return m_marginX; } - int GetMarginY() const { return m_marginY; } + virtual void SetMargins(int x, int y) + { + DoSetBitmapMargins(x, y); + } + + int GetMarginX() const { return DoGetBitmapMargins().x; } + int GetMarginY() const { return DoGetBitmapMargins().y; } + + // deprecated synonym for SetBitmapLabel() +#if WXWIN_COMPATIBILITY_2_6 + wxDEPRECATED_INLINE( void SetLabel(const wxBitmap& bitmap), + SetBitmapLabel(bitmap); ) + + // prevent virtual function hiding + virtual void SetLabel(const wxString& label) + { wxWindow::SetLabel(label); } +#endif // WXWIN_COMPATIBILITY_2_6 protected: +#ifndef wxHAS_BUTTON_BITMAP // function called when any of the bitmaps changes - virtual void OnSetBitmap() { } + virtual void OnSetBitmap() { InvalidateBestSize(); Refresh(); } + + virtual wxBitmap DoGetBitmap(State which) const { return m_bitmaps[which]; } + virtual void DoSetBitmap(const wxBitmap& bitmap, State which) + { m_bitmaps[which] = bitmap; OnSetBitmap(); } + + virtual wxSize DoGetBitmapMargins() const + { + return wxSize(m_marginX, m_marginY); + } + + virtual void DoSetBitmapMargins(int x, int y) + { + m_marginX = x; + m_marginY = y; + } // the bitmaps for various states - wxBitmap m_bmpNormal, - m_bmpSelected, - m_bmpFocus, - m_bmpDisabled; + wxBitmap m_bitmaps[State_Max]; // the margins around the bitmap int m_marginX, m_marginY; -private: - // Prevent Virtual function hiding warnings - void SetLabel(const wxString& rsLabel) - { wxWindowBase::SetLabel(rsLabel); } +#endif // !wxHAS_BUTTON_BITMAP + + wxDECLARE_NO_COPY_CLASS(wxBitmapButtonBase); }; #if defined(__WXUNIVERSAL__) @@ -84,12 +120,18 @@ private: #include "wx/msw/bmpbuttn.h" #elif defined(__WXMOTIF__) #include "wx/motif/bmpbuttn.h" -#elif defined(__WXGTK__) +#elif defined(__WXGTK20__) #include "wx/gtk/bmpbuttn.h" +#elif defined(__WXGTK__) + #include "wx/gtk1/bmpbuttn.h" #elif defined(__WXMAC__) - #include "wx/mac/bmpbuttn.h" + #include "wx/osx/bmpbuttn.h" +#elif defined(__WXCOCOA__) + #include "wx/cocoa/bmpbuttn.h" #elif defined(__WXPM__) #include "wx/os2/bmpbuttn.h" +#elif defined(__WXPALMOS__) + #include "wx/palmos/bmpbuttn.h" #endif #endif // wxUSE_BMPBUTTON