// Created: 10.09.00
// RCS-ID: $Id$
// Copyright: (c) Robert Roebling
-// Licence: wxWindows license
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_UNIV_TOOLBAR_H_
#define _WX_UNIV_TOOLBAR_H_
-#ifdef __GNUG__
- #pragma interface "univtoolbar.h"
-#endif
+#include "wx/button.h" // for wxStdButtonInputHandler
-#include "wx/window.h"
+class WXDLLEXPORT wxToolBarTool;
// ----------------------------------------------------------------------------
-// wxToolbar
+// the actions supported by this control
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxToolBarTool : public wxToolBarToolBase
-{
-public:
- wxToolBarTool( wxToolBarBase *tbar = (wxToolBarBase *)NULL,
- int id = wxID_SEPARATOR,
- const wxBitmap& bitmap1 = wxNullBitmap,
- const wxBitmap& bitmap2 = wxNullBitmap,
- bool toggle = FALSE,
- wxObject *clientData = (wxObject *) NULL,
- const wxString& shortHelpString = wxEmptyString,
- const wxString& longHelpString = wxEmptyString ) :
- wxToolBarToolBase( tbar, id, bitmap1, bitmap2, toggle, clientData,
- shortHelpString, longHelpString )
- {
- m_isDown = FALSE;
- m_x = -1;
- m_y = -1;
- }
+#define wxACTION_TOOLBAR_TOGGLE wxACTION_BUTTON_TOGGLE
+#define wxACTION_TOOLBAR_PRESS wxACTION_BUTTON_PRESS
+#define wxACTION_TOOLBAR_RELEASE wxACTION_BUTTON_RELEASE
+#define wxACTION_TOOLBAR_CLICK wxACTION_BUTTON_CLICK
+#define wxACTION_TOOLBAR_ENTER _T("enter") // highlight the tool
+#define wxACTION_TOOLBAR_LEAVE _T("leave") // unhighlight the tool
-public:
- bool m_isDown;
- int m_x;
- int m_y;
-};
+// ----------------------------------------------------------------------------
+// wxToolBar
+// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxToolBar: public wxToolBarBase
-{
+class WXDLLEXPORT wxToolBar : public wxToolBarBase
+{
public:
// construction/destruction
wxToolBar() { Init(); }
- wxToolBar( wxWindow *parent,
- wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString& name = wxToolBarNameStr )
+ wxToolBar(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxToolBarNameStr)
{
Init();
const wxSize& size = wxDefaultSize,
long style = 0,
const wxString& name = wxToolBarNameStr );
-
-#ifdef __DARWIN__
- virtual ~wxToolBar() { }
-#endif
+
+ virtual ~wxToolBar();
virtual bool Realize();
+ virtual void SetWindowStyleFlag( long style );
+
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
virtual void SetToolShortHelp(int id, const wxString& helpString);
+ virtual void SetMargins(int x, int y);
+ void SetMargins(const wxSize& size)
+ { SetMargins((int) size.x, (int) size.y); }
+
+ virtual bool PerformAction(const wxControlAction& action,
+ long numArg = -1,
+ const wxString& strArg = wxEmptyString);
+ static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef);
+ virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef)
+ {
+ return GetStdInputHandler(handlerDef);
+ }
+
protected:
// common part of all ctors
void Init();
virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
virtual wxToolBarToolBase *CreateTool(int id,
- const wxBitmap& bitmap1,
- const wxBitmap& bitmap2,
- bool toggle,
+ const wxString& label,
+ const wxBitmap& bmpNormal,
+ const wxBitmap& bmpDisabled,
+ wxItemKind kind,
wxObject *clientData,
- const wxString& shortHelpString,
- const wxString& longHelpString);
+ const wxString& shortHelp,
+ const wxString& longHelp);
virtual wxToolBarToolBase *CreateTool(wxControl *control);
-
-private:
- wxToolBarTool *m_captured;
-
+
+ virtual wxSize DoGetBestClientSize() const;
+ virtual void DoSetSize(int x, int y,
+ int width, int height,
+ int sizeFlags = wxSIZE_AUTO);
+ virtual void DoDraw(wxControlRenderer *renderer);
+
+ // get the bounding rect for the given tool
+ wxRect GetToolRect(wxToolBarToolBase *tool) const;
+
+ // redraw the given tool
+ void RefreshTool(wxToolBarToolBase *tool);
+
+ // (re)calculate the tool positions, should only be called if it is
+ // necessary to do it, i.e. m_needsLayout == true
+ void DoLayout();
+
+ // get the rect limits depending on the orientation: top/bottom for a
+ // vertical toolbar, left/right for a horizontal one
+ void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const;
+
private:
- void OnMouse( wxMouseEvent &event );
- void RefreshTool( wxToolBarTool *tool );
- void DrawToolBarTool( wxToolBarTool *tool, wxDC &dc, bool down );
- void OnPaint( wxPaintEvent &event );
+ // have we calculated the positions of our tools?
+ bool m_needsLayout;
+
+ // the width of a separator
+ wxCoord m_widthSeparator;
+
+ // the total size of all toolbar elements
+ wxCoord m_maxWidth,
+ m_maxHeight;
private:
- DECLARE_EVENT_TABLE()
+ DECLARE_DYNAMIC_CLASS(wxToolBar)
};
#endif // _WX_UNIV_TOOLBAR_H_