// 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__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "univtoolbar.h"
#endif
-#include "wx/window.h"
+#include "wx/button.h" // for wxStdButtonInputHandler
+
+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();
long style = 0,
const wxString& name = wxToolBarNameStr );
-#ifdef __DARWIN__
- virtual ~wxToolBar() { }
-#endif
+ virtual ~wxToolBar();
virtual bool Realize();
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); }
+
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);
+
+ // implement wxUniversal methods
+ virtual bool PerformAction(const wxControlAction& action,
+ long numArg = -1,
+ const wxString& strArg = wxEmptyString);
+ 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:
- wxToolBarTool *m_captured;
-
+ // 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:
- void OnMouse( wxMouseEvent &event );
- void RefreshTool( wxToolBarTool *tool );
- void DrawToolBarTool( wxToolBarTool *tool, wxDC &dc, bool down );
- void OnPaint( wxPaintEvent &event );
+ DECLARE_DYNAMIC_CLASS(wxToolBar)
+};
+// ----------------------------------------------------------------------------
+// wxStdToolbarInputHandler: translates SPACE and ENTER keys and the left mouse
+// click into button press/release actions
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxStdToolbarInputHandler : public wxStdInputHandler
+{
+public:
+ wxStdToolbarInputHandler(wxInputHandler *inphand);
+
+ virtual bool HandleKey(wxInputConsumer *consumer,
+ const wxKeyEvent& event,
+ bool pressed);
+ virtual bool HandleMouse(wxInputConsumer *consumer,
+ const wxMouseEvent& event);
+ virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event);
+ virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event);
+ virtual bool HandleActivation(wxInputConsumer *consumer, bool activated);
+
private:
- DECLARE_EVENT_TABLE()
+ wxWindow *m_winCapture;
+ wxToolBarToolBase *m_toolCapture;
+ wxToolBarToolBase *m_toolLast;
};
#endif // _WX_UNIV_TOOLBAR_H_