X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f39f922082998efebf8ae831a8458f4beca390dc..bd73863347c81c1b41b3a7684f0219d44d1c53d2:/include/wx/tbarbase.h diff --git a/include/wx/tbarbase.h b/include/wx/tbarbase.h index f28173944d..08ce5dbe1e 100644 --- a/include/wx/tbarbase.h +++ b/include/wx/tbarbase.h @@ -1,258 +1,357 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: tbarbase.h +// Name: wx/tbarbase.h // Purpose: Base class for toolbar classes // Author: Julian Smart // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_TBARBASE_H_ #define _WX_TBARBASE_H_ +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + #ifdef __GNUG__ -#pragma interface "tbarbase.h" + #pragma interface "tbarbase.h" #endif -#include "wx/setup.h" #include "wx/defs.h" #include "wx/bitmap.h" #include "wx/list.h" #include "wx/control.h" +class WXDLLEXPORT wxToolBar; + +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr; WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize; WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition; -#define wxTOOL_STYLE_BUTTON 1 -#define wxTOOL_STYLE_SEPARATOR 2 +enum +{ + wxTOOL_STYLE_BUTTON = 1, + wxTOOL_STYLE_SEPARATOR = 2, + wxTOOL_STYLE_CONTROL +}; -#ifdef __WXGTK__ -class WXDLLEXPORT wxToolBar; -#endif +// ---------------------------------------------------------------------------- +// wxToolBarTool is one button/separator/whatever in the toolbar +// ---------------------------------------------------------------------------- -class WXDLLEXPORT wxToolBarTool: public wxObject +class WXDLLEXPORT wxToolBarTool : public wxObject { - DECLARE_DYNAMIC_CLASS(wxToolBarTool) - public: - wxToolBarTool() {} +public: + // ctors & dtor + // ------------ + + wxToolBarTool() { } + #ifdef __WXGTK__ - wxToolBarTool(wxToolBar *owner, - int theIndex = 0, const wxBitmap& bitmap1 = wxNullBitmap, const wxBitmap& bitmap2 = wxNullBitmap, - bool toggle = FALSE, wxObject *clientData = (wxObject *) NULL, - const wxString& shortHelpString = "", const wxString& longHelpString = "", - GtkWidget *item = (GtkWidget *) NULL ); -#else - wxToolBarTool(int theIndex, const wxBitmap& bitmap1 = wxNullBitmap, const wxBitmap& bitmap2 = wxNullBitmap, - bool toggle = FALSE, long xPos = -1, long yPos = -1, - const wxString& shortHelpString = wxEmptyString, const wxString& longHelpString = wxEmptyString); -#endif - ~wxToolBarTool (); - inline void SetSize( long w, long h ) { m_width = w; m_height = h; } - inline long GetWidth () const { return m_width; } - inline long GetHeight () const { return m_height; } + wxToolBarTool(wxToolBar *owner, + int theIndex = 0, + const wxBitmap& bitmap1 = wxNullBitmap, + const wxBitmap& bitmap2 = wxNullBitmap, + bool toggle = FALSE, + wxObject *clientData = (wxObject *) NULL, + const wxString& shortHelpString = wxEmptyString, + const wxString& longHelpString = wxEmptyString, + GtkWidget *pixmap = (GtkWidget *) NULL ); +#else // !GTK + wxToolBarTool(int theIndex, + const wxBitmap& bitmap1 = wxNullBitmap, + const wxBitmap& bitmap2 = wxNullBitmap, + bool toggle = FALSE, + long xPos = -1, + long yPos = -1, + const wxString& shortHelpString = wxEmptyString, + const wxString& longHelpString = wxEmptyString); +#endif // GTK/!GTK + + wxToolBarTool(wxControl *control); + + ~wxToolBarTool(); + + // accessors + // --------- + + void SetSize( long w, long h ) { m_width = w; m_height = h; } + long GetWidth() const { return m_width; } + long GetHeight() const { return m_height; } + + wxControl *GetControl() const + { + wxASSERT_MSG( m_toolStyle == wxTOOL_STYLE_CONTROL, + _T("this toolbar tool is not a control") ); + + return m_control; + } public: - int m_toolStyle; - wxObject * m_clientData; - int m_index; - long m_x; - long m_y; - long m_width; - long m_height; - bool m_toggleState; - bool m_isToggle; - bool m_deleteSecondBitmap; - bool m_enabled; - wxBitmap m_bitmap1; - wxBitmap m_bitmap2; - bool m_isMenuCommand; - wxString m_shortHelpString; - wxString m_longHelpString; + int m_toolStyle; + int m_index; + + // as controls have their own client data, no need to waste memory + union + { + wxObject *m_clientData; + wxControl *m_control; + }; + + wxCoord m_x; + wxCoord m_y; + wxCoord m_width; + wxCoord m_height; + + bool m_toggleState; + bool m_isToggle; + bool m_enabled; + bool m_isMenuCommand; + + bool m_deleteSecondBitmap; + wxBitmap m_bitmap1; + wxBitmap m_bitmap2; + + wxString m_shortHelpString; + wxString m_longHelpString; + #ifdef __WXGTK__ - wxToolBar *m_owner; - GtkWidget *m_item; -#endif + wxToolBar *m_owner; + GtkWidget *m_item; + GtkWidget *m_pixmap; +#endif // GTK + +private: + DECLARE_DYNAMIC_CLASS(wxToolBarTool) }; +// ---------------------------------------------------------------------------- +// the base class for all toolbars +// ---------------------------------------------------------------------------- + class WXDLLEXPORT wxToolBarBase : public wxControl { - DECLARE_ABSTRACT_CLASS(wxToolBarBase) - public: - - wxToolBarBase(void); - ~wxToolBarBase(void); - - // Handle wxToolBar events - - // Only allow toggle if returns TRUE. Call when left button up. - virtual bool OnLeftClick(int toolIndex, bool toggleDown); - - // Call when right button down. - virtual void OnRightClick(int toolIndex, long x, long y); - - // Called when the mouse cursor enters a tool bitmap. - // Argument is -1 if mouse is exiting the toolbar. - virtual void OnMouseEnter(int toolIndex); - - // If pushedBitmap is NULL, a reversed version of bitmap is - // created and used as the pushed/toggled image. - // If toggle is TRUE, the button toggles between the two states. - virtual wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap, - bool toggle = FALSE, long xPos = -1, long yPos = -1, wxObject *clientData = NULL, - const wxString& helpString1 = wxEmptyString, const wxString& helpString2 = wxEmptyString); - virtual void AddSeparator(void); - virtual void ClearTools(void); - - virtual void EnableTool(int toolIndex, bool enable); - virtual void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on - virtual void SetToggle(int toolIndex, bool toggle); // Set this to be togglable (or not) - virtual wxObject *GetToolClientData(int index) const; - inline wxList& GetTools(void) const { return (wxList&) m_tools; } - - // After the toolbar has initialized, this is the size the tools take up -#if WXWXIN_COMPATIBILITY - inline void GetMaxSize ( long * width, long * height ) const - { wxSize maxSize(GetMaxSize()); *width = maxSize.x; *height = maxSize.y; } -#endif - virtual wxSize GetMaxSize ( void ) const; +public: + wxToolBarBase(); + ~wxToolBarBase(); - virtual bool GetToolState(int toolIndex) const; - virtual bool GetToolEnabled(int toolIndex) const; - virtual wxToolBarTool *FindToolForPosition(long x, long y) const; + // toolbar construction + // -------------------- - virtual void SetToolShortHelp(int toolIndex, const wxString& helpString); - virtual wxString GetToolShortHelp(int toolIndex) const; - virtual void SetToolLongHelp(int toolIndex, const wxString& helpString); - virtual wxString GetToolLongHelp(int toolIndex) const; + // If pushedBitmap is NULL, a reversed version of bitmap is created and + // used as the pushed/toggled image. If toggle is TRUE, the button toggles + // between the two states. + virtual wxToolBarTool *AddTool(int toolIndex, + const wxBitmap& bitmap, + const wxBitmap& pushedBitmap = wxNullBitmap, + bool toggle = FALSE, + wxCoord xPos = -1, + wxCoord yPos = -1, + wxObject *clientData = NULL, + const wxString& helpString1 = wxEmptyString, + const wxString& helpString2 = wxEmptyString); - virtual void SetMargins(int x, int y); - inline void SetMargins(const wxSize& size) { SetMargins((int) size.x, (int) size.y); } - virtual void SetToolPacking(int packing); - virtual void SetToolSeparation(int separation); + // add an arbitrary control to the toolbar at given index, return TRUE if + // ok (notice that the control will be deleted by the toolbar and that it + // will also adjust its position/size) + // + // NB: the control should have toolbar as its parent + virtual bool AddControl(wxControl * WXUNUSED(control)) { return FALSE; } - inline virtual wxSize GetToolMargins(void) { return wxSize(m_xMargin, m_yMargin); } - inline virtual int GetToolPacking(void) { return m_toolPacking; } - inline virtual int GetToolSeparation(void) { return m_toolSeparation; } + virtual void AddSeparator(); + virtual void ClearTools(); - virtual void SetToolBitmapSize(const wxSize& size) { m_defaultWidth = size.x; m_defaultHeight = size.y; }; - virtual wxSize GetToolBitmapSize(void) const { return wxSize(m_defaultWidth, m_defaultHeight); } + // must be called after all buttons have been created to finish toolbar + // initialisation + virtual bool Realize() = 0; - // The button size (in some implementations) is bigger than the bitmap size: this returns - // the total button size. - virtual wxSize GetToolSize(void) const { return wxSize(m_defaultWidth, m_defaultHeight); } ; + // tools state + // ----------- - // Compatibility -#if WXWIN_COMPATIBILITY - inline void SetDefaultSize(int w, int h) { SetDefaultSize(wxSize(w, h)); } - inline long GetDefaultWidth(void) const { return m_defaultWidth; } - inline long GetDefaultHeight(void) const { return m_defaultHeight; } - inline int GetDefaultButtonWidth(void) const { return (int) GetDefaultButtonSize().x; }; - inline int GetDefaultButtonHeight(void) const { return (int) GetDefaultButtonSize().y; }; - virtual void SetDefaultSize(const wxSize& size) { SetToolBitmapSize(size); } - virtual wxSize GetDefaultSize(void) const { return GetToolBitmapSize(); } - virtual wxSize GetDefaultButtonSize(void) const { return GetToolSize(); } -#endif + virtual void EnableTool(int toolIndex, bool enable); - // Lay the tools out - virtual void Layout(void); - - // Add all the buttons: required for Win95. - virtual bool CreateTools(void) { return TRUE; } + // toggle is TRUE if toggled on + virtual void ToggleTool(int toolIndex, bool toggle); - // Calls the appropriate function after tools have been created. - // E.g. Layout, or CreateTools. - virtual bool Realize() = 0; + // Set this to be togglable (or not) + virtual void SetToggle(int toolIndex, bool toggle); + virtual wxObject *GetToolClientData(int index) const; - void Command(wxCommandEvent& event); + virtual bool GetToolState(int toolIndex) const; + virtual bool GetToolEnabled(int toolIndex) const; + virtual wxToolBarTool *FindToolForPosition(long x, long y) const; - // SCROLLING: this has to be copied from wxScrolledWindow since wxToolBarBase - // inherits from wxControl. This could have been put into wxToolBarSimple, - // but we might want any derived toolbar class to be scrollable. + virtual void SetToolShortHelp(int toolIndex, const wxString& helpString); + virtual wxString GetToolShortHelp(int toolIndex) const; + virtual void SetToolLongHelp(int toolIndex, const wxString& helpString); + virtual wxString GetToolLongHelp(int toolIndex) const; - // Number of pixels per user unit (0 or -1 for no scrollbar) - // Length of virtual canvas in user units - virtual void SetScrollbars(int horizontal, int vertical, - int x_length, int y_length, - int x_pos = 0, int y_pos = 0); + // margins/packing/separation + // -------------------------- - // Physically scroll the window - virtual void Scroll(int x_pos, int y_pos); - virtual void GetScrollPixelsPerUnit(int *x_unit, int *y_unit) const; - virtual void EnableScrolling(bool x_scrolling, bool y_scrolling); - virtual void AdjustScrollbars(void); + virtual void SetMargins(int x, int y); + void SetMargins(const wxSize& size) + { SetMargins((int) size.x, (int) size.y); } + virtual void SetToolPacking(int packing); + virtual void SetToolSeparation(int separation); - // Prepare the DC by translating it according to the current scroll position - virtual void PrepareDC(wxDC& dc); + virtual wxSize GetToolMargins() { return wxSize(m_xMargin, m_yMargin); } + virtual int GetToolPacking() { return m_toolPacking; } + virtual int GetToolSeparation() { return m_toolSeparation; } - int GetScrollPageSize(int orient) const ; - void SetScrollPageSize(int orient, int pageSize); + void SetMaxRowsCols(int rows, int cols) + { m_maxRows = rows; m_maxCols = cols; } + int GetMaxRows() const { return m_maxRows; } + int GetMaxCols() const { return m_maxCols; } - // Get the view start - virtual void ViewStart(int *x, int *y) const; + // tool(bar) size + // ------------- - // Actual size in pixels when scrolling is taken into account - virtual void GetVirtualSize(int *x, int *y) const; + virtual void SetToolBitmapSize(const wxSize& size) + { m_defaultWidth = size.x; m_defaultHeight = size.y; }; + virtual wxSize GetToolBitmapSize() const + { return wxSize(m_defaultWidth, m_defaultHeight); } - // Do the toolbar button updates (check for EVT_UPDATE_UI handlers) - virtual void DoToolbarUpdates(void); + // After the toolbar has initialized, this is the size the tools take up + virtual wxSize GetMaxSize() const; - inline void SetMaxRowsCols(int rows, int cols) { m_maxRows = rows; m_maxCols = cols; } - inline int GetMaxRows() const { return m_maxRows; } - inline int GetMaxCols() const { return m_maxCols; } + // The button size (in some implementations) is bigger than the bitmap size: this returns + // the total button size. + virtual wxSize GetToolSize() const + { return wxSize(m_defaultWidth, m_defaultHeight); } ; - void OnScroll(wxScrollEvent& event); - void OnSize(wxSizeEvent& event); - void OnIdle(wxIdleEvent& event); + // Handle wxToolBar events + // ----------------------- - // Required to force normal cursor-setting behaviour in Windows -#ifdef __WXMSW__ - virtual void MSWOnMouseMove(int x, int y, WXUINT flags); -#endif + // NB: these functions are deprecated, use EVT_TOOL_XXX() instead! - protected: - wxList m_tools; -// int m_tilingDirection; -// int m_rowsOrColumns; - int m_maxRows; - int m_maxCols; - long m_maxWidth, m_maxHeight; - int m_currentTool; // Tool where mouse currently is - int m_pressedTool; // Tool where mouse pressed - int m_xMargin; - int m_yMargin; - int m_toolPacking; - int m_toolSeparation; - long m_defaultWidth; - long m_defaultHeight; + // Only allow toggle if returns TRUE. Call when left button up. + virtual bool OnLeftClick(int toolIndex, bool toggleDown); + + // Call when right button down. + virtual void OnRightClick(int toolIndex, long x, long y); + + // Called when the mouse cursor enters a tool bitmap. + // Argument is -1 if mouse is exiting the toolbar. + virtual void OnMouseEnter(int toolIndex); + + // more deprecated functions + // ------------------------- + +#if WXWIN_COMPATIBILITY + void SetDefaultSize(int w, int h) { SetDefaultSize(wxSize(w, h)); } + long GetDefaultWidth() const { return m_defaultWidth; } + long GetDefaultHeight() const { return m_defaultHeight; } + int GetDefaultButtonWidth() const { return (int) GetDefaultButtonSize().x; }; + int GetDefaultButtonHeight() const { return (int) GetDefaultButtonSize().y; }; + virtual void SetDefaultSize(const wxSize& size) { SetToolBitmapSize(size); } + virtual wxSize GetDefaultSize() const { return GetToolBitmapSize(); } + virtual wxSize GetDefaultButtonSize() const { return GetToolSize(); } + void GetMaxSize ( long * width, long * height ) const + { wxSize maxSize(GetMaxSize()); *width = maxSize.x; *height = maxSize.y; } +#endif // WXWIN_COMPATIBILITY + + // implementation only from now on + // ------------------------------- + + wxList& GetTools() const { return (wxList&) m_tools; } + + // Lay the tools out + virtual void LayoutTools(); + + // Add all the buttons: required for Win95. + virtual bool CreateTools() { return TRUE; } + + void Command(wxCommandEvent& event); + + // SCROLLING: this has to be copied from wxScrolledWindow since wxToolBarBase + // inherits from wxControl. This could have been put into wxToolBarSimple, + // but we might want any derived toolbar class to be scrollable. + + // Number of pixels per user unit (0 or -1 for no scrollbar) + // Length of virtual canvas in user units + virtual void SetScrollbars(int horizontal, int vertical, + int x_length, int y_length, + int x_pos = 0, int y_pos = 0); + + // Physically scroll the window + virtual void Scroll(int x_pos, int y_pos); + virtual void GetScrollPixelsPerUnit(int *x_unit, int *y_unit) const; + virtual void EnableScrolling(bool x_scrolling, bool y_scrolling); + virtual void AdjustScrollbars(); + + // Prepare the DC by translating it according to the current scroll position + virtual void PrepareDC(wxDC& dc); + + int GetScrollPageSize(int orient) const ; + void SetScrollPageSize(int orient, int pageSize); + + // Get the view start + virtual void ViewStart(int *x, int *y) const; + + // Actual size in pixels when scrolling is taken into account + virtual void GetVirtualSize(int *x, int *y) const; + + // Do the toolbar button updates (check for EVT_UPDATE_UI handlers) + virtual void DoToolbarUpdates(); + + // event handlers + void OnScroll(wxScrollEvent& event); + void OnSize(wxSizeEvent& event); + void OnIdle(wxIdleEvent& event); -public: - //////////////////////////////////////////////////////////////////////// - //// IMPLEMENTATION - - // Calculate scroll increment - virtual int CalcScrollInc(wxScrollEvent& event); - - //////////////////////////////////////////////////////////////////////// - //// PROTECTED DATA protected: - int m_xScrollPixelsPerLine; - int m_yScrollPixelsPerLine; - bool m_xScrollingEnabled; - bool m_yScrollingEnabled; - int m_xScrollPosition; - int m_yScrollPosition; - bool m_calcScrolledOffset; // If TRUE, wxCanvasDC uses scrolled offsets - int m_xScrollLines; - int m_yScrollLines; - int m_xScrollLinesPerPage; - int m_yScrollLinesPerPage; + wxList m_tools; + + int m_maxRows; + int m_maxCols; + long m_maxWidth, + m_maxHeight; + + int m_currentTool; // Tool where mouse currently is + int m_pressedTool; // Tool where mouse pressed + + int m_xMargin; + int m_yMargin; + int m_toolPacking; + int m_toolSeparation; + + wxCoord m_defaultWidth; + wxCoord m_defaultHeight; public: + //////////////////////////////////////////////////////////////////////// + //// IMPLEMENTATION + + // Calculate scroll increment + virtual int CalcScrollInc(wxScrollEvent& event); + + //////////////////////////////////////////////////////////////////////// + //// PROTECTED DATA +protected: + int m_xScrollPixelsPerLine; + int m_yScrollPixelsPerLine; + bool m_xScrollingEnabled; + bool m_yScrollingEnabled; + int m_xScrollPosition; + int m_yScrollPosition; + bool m_calcScrolledOffset; // If TRUE, wxCanvasDC uses scrolled offsets + int m_xScrollLines; + int m_yScrollLines; + int m_xScrollLinesPerPage; + int m_yScrollLinesPerPage; + +private: DECLARE_EVENT_TABLE() + DECLARE_ABSTRACT_CLASS(wxToolBarBase) }; #endif