#define _WX_TOOLBAR_H_
#if wxUSE_TOOLBAR
+#include "wx/timer.h"
#include "wx/tbarbase.h"
-WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr;
+#define ID_TOOLTIMER 100
+#define ID_TOOLEXPTIMER 101
-class WXDLLEXPORT wxToolBar: public wxToolBarBase
+class WXDLLIMPEXP_CORE wxToolBar: public wxToolBarBase
{
public:
/*
* Public interface
*/
- wxToolBar() { Init(); }
+ wxToolBar()
+ : m_vToolTimer(this, ID_TOOLTIMER)
+ , m_vToolExpTimer(this, ID_TOOLEXPTIMER)
+ { Init(); }
inline wxToolBar( wxWindow* pParent
,wxWindowID vId
,const wxPoint& rPos = wxDefaultPosition
,const wxSize& rSize = wxDefaultSize
- ,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL
+ ,long lStyle = wxNO_BORDER | wxTB_HORIZONTAL
,const wxString& rName = wxToolBarNameStr
- )
+ ) : m_vToolTimer(this, ID_TOOLTIMER)
+ , m_vToolExpTimer(this, ID_TOOLEXPTIMER)
{
+ Init();
Create( pParent
,vId
,rPos
,rName
);
}
+ virtual ~wxToolBar();
+
bool Create( wxWindow* pParent
,wxWindowID vId
,const wxPoint& rPos = wxDefaultPosition
,const wxSize& rSize = wxDefaultSize
- ,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL
+ ,long lStyle = wxNO_BORDER | wxTB_HORIZONTAL
,const wxString& rName = wxToolBarNameStr
);
- virtual ~wxToolBar();
- // override/implement base class virtuals
- virtual wxToolBarToolBase* FindToolForPosition( wxCoord x
- ,wxCoord y
+ //
+ // Override/implement base class virtuals
+ //
+ virtual wxToolBarToolBase* FindToolForPosition( wxCoord vX
+ ,wxCoord vY
) const;
+ virtual bool Realize(void);
+ virtual void SetRows(int nRows);
+
+ //
+ // Special overrides for OS/2
+ //
+ virtual wxToolBarToolBase* InsertControl( size_t nPos
+ ,wxControl* pControl
+ );
+ virtual wxToolBarToolBase* InsertSeparator(size_t nPos);
+ virtual wxToolBarToolBase* InsertTool( size_t nPos
+ ,int nId
+ ,const wxString& rsLabel
+ ,const wxBitmap& rBitmap
+ ,const wxBitmap& rBmpDisabled = wxNullBitmap
+ ,wxItemKind eKind = wxITEM_NORMAL
+ ,const wxString& rsShortHelp = wxEmptyString
+ ,const wxString& rsLongHelp = wxEmptyString
+ ,wxObject* pClientData = NULL
+ );
+ wxToolBarToolBase* InsertTool( size_t nPos
+ ,int nId
+ ,const wxBitmap& rBitmap
+ ,const wxBitmap& rBmpDisabled = wxNullBitmap
+ ,bool bToggle = FALSE
+ ,wxObject* pClientData = NULL
+ ,const wxString& rsShortHelp = wxEmptyString
+ ,const wxString& rsLongHelp = wxEmptyString
+ )
+ {
+ return InsertTool( nPos
+ ,nId
+ ,wxEmptyString
+ ,rBitmap
+ ,rBmpDisabled
+ ,bToggle ? wxITEM_CHECK : wxITEM_NORMAL
+ ,rsShortHelp
+ ,rsLongHelp
+ ,pClientData
+ );
+ }
+ virtual bool DeleteTool(int nId);
+ virtual bool DeleteToolByPos(size_t nPos);
- // The post-tool-addition call
- virtual bool Realize(void);
-
- virtual void SetToolBitmapSize(const wxSize& rSize);
- virtual wxSize GetToolSize(void) const;
-
- virtual void SetRows(int nRows);
-
- // IMPLEMENTATION
- virtual bool OS2Command( WXUINT uParam
- ,WXWORD wId
- );
- virtual bool OS2OnNotify( int nCtrl
- ,WXLPARAM lParam
- ,WXLPARAM* pResult
- );
- void OnMouseEvent(wxMouseEvent& rEvent);
- void OnSysColourChanged(wxSysColourChangedEvent& rEvent);
+ //
+ // Event handlers
+ //
+ void OnPaint(wxPaintEvent& event);
+ void OnSize(wxSizeEvent& event);
+ void OnMouseEvent(wxMouseEvent& event);
+ void OnKillFocus(wxFocusEvent& event);
protected:
- void Init(void);
- // implement base class pure virtuals
- virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
- virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
-
- virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable);
- virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle);
- virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
+ //
+ // Common part of all ctors
+ //
+ void Init();
+
+ //
+ // Implement base class pure virtuals
+ //
+ virtual wxToolBarToolBase* DoAddTool( int id
+ ,const wxString& label
+ ,const wxBitmap& bitmap
+ ,const wxBitmap& bmpDisabled
+ ,wxItemKind kind
+ ,const wxString& shortHelp = wxEmptyString
+ ,const wxString& longHelp = wxEmptyString
+ ,wxObject *clientData = NULL
+ ,wxCoord xPos = -1
+ ,wxCoord yPos = -1
+ );
+
+ virtual bool DoInsertTool( size_t nPos
+ ,wxToolBarToolBase* pTool
+ );
+ virtual bool DoDeleteTool( size_t nPos
+ , wxToolBarToolBase* pTool
+ );
+
+ virtual void DoEnableTool( wxToolBarToolBase* pTool
+ ,bool bEnable
+ );
+ virtual void DoToggleTool( wxToolBarToolBase* pTool
+ ,bool bToggle
+ );
+ virtual void DoSetToggle( wxToolBarToolBase* pTool
+ ,bool bToggle
+ );
virtual wxToolBarToolBase* CreateTool( int vId
- ,const wxBitmap& rBitmap1
- ,const wxBitmap& rBitmap2
- ,bool bToggle
+ ,const wxString& rsLabel
+ ,const wxBitmap& rBmpNormal
+ ,const wxBitmap& rBmpDisabled
+ ,wxItemKind eKind
,wxObject* pClientData
- ,const wxString& rShortHelpString
- ,const wxString& rLongHelpString
+ ,const wxString& rsShortHelp
+ ,const wxString& rsLongHelp
);
- virtual wxToolBarToolBase* CreateTool(wxControl* pControl);
-
- // should be called whenever the toolbar size changes
- void UpdateSize(void);
-
- // override WndProc to process WM_SIZE
- virtual MRESULT OS2WindowProc( WXUINT ulMsg
- ,WXWPARAM wParam
- ,WXLPARAM lParam
- );
-
- // the big bitmap containing all bitmaps of the toolbar buttons
- WXHBITMAP m_hBitmap;
-
- // the total number of toolbar elements
- size_t m_nButtons;
+ virtual wxToolBarToolBase* CreateTool(wxControl* pControl,
+ const wxString& label);
+
+ //
+ // Helpers
+ //
+ void DrawTool(wxToolBarToolBase *tool);
+ virtual void DrawTool( wxDC& rDC
+ ,wxToolBarToolBase* pTool
+ );
+ virtual void SpringUpButton(int nIndex);
+
+ int m_nCurrentRowsOrColumns;
+ int m_nPressedTool;
+ int m_nCurrentTool;
+ wxCoord m_vLastX;
+ wxCoord m_vLastY;
+ wxCoord m_vMaxWidth;
+ wxCoord m_vMaxHeight;
+ wxCoord m_vXPos;
+ wxCoord m_vYPos;
+ wxCoord m_vTextX;
+ wxCoord m_vTextY;
private:
+ void LowerTool( wxToolBarToolBase* pTool
+ ,bool bLower = TRUE
+ );
+ void RaiseTool( wxToolBarToolBase* pTool
+ ,bool bRaise = TRUE
+ );
+ void OnTimer(wxTimerEvent& rEvent);
+
+ static bool m_bInitialized;
+
+ wxTimer m_vToolTimer;
+ wxTimer m_vToolExpTimer;
+ wxToolTip* m_pToolTip;
+ wxCoord m_vXMouse;
+ wxCoord m_vYMouse;
+
+ //
+ // Virtual function hiding supression
+ virtual wxToolBarToolBase *InsertTool (size_t nPos, wxToolBarToolBase* pTool)
+ {
+ return( wxToolBarBase::InsertTool( nPos
+ ,pTool
+ ));
+ }
+
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxToolBar)
};