1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/univ/toolbar.h
3// Purpose:     wxToolBar declaration
4// Author:      Robert Roebling
5// Modified by:
6// Created:     10.09.00
7// RCS-ID:      $Id: toolbar.h 61872 2009-09-09 22:37:05Z VZ $
8// Copyright:   (c) Robert Roebling
9// Licence:     wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_UNIV_TOOLBAR_H_
13#define _WX_UNIV_TOOLBAR_H_
14
15#include "wx/button.h"      // for wxStdButtonInputHandler
16
17class WXDLLEXPORT wxToolBarTool;
18
19// ----------------------------------------------------------------------------
20// the actions supported by this control
21// ----------------------------------------------------------------------------
22
23#define wxACTION_TOOLBAR_TOGGLE  wxACTION_BUTTON_TOGGLE
24#define wxACTION_TOOLBAR_PRESS   wxACTION_BUTTON_PRESS
25#define wxACTION_TOOLBAR_RELEASE wxACTION_BUTTON_RELEASE
26#define wxACTION_TOOLBAR_CLICK   wxACTION_BUTTON_CLICK
27#define wxACTION_TOOLBAR_ENTER   wxT("enter")     // highlight the tool
28#define wxACTION_TOOLBAR_LEAVE   wxT("leave")     // unhighlight the tool
29
30// ----------------------------------------------------------------------------
31// wxToolBar
32// ----------------------------------------------------------------------------
33
34class WXDLLEXPORT wxToolBar : public wxToolBarBase
35{
36public:
37    // construction/destruction
38    wxToolBar() { Init(); }
39    wxToolBar(wxWindow *parent,
40              wxWindowID id,
41              const wxPoint& pos = wxDefaultPosition,
42              const wxSize& size = wxDefaultSize,
43              long style = 0,
44              const wxString& name = wxToolBarNameStr)
45    {
46        Init();
47
48        Create(parent, id, pos, size, style, name);
49    }
50
51    bool Create( wxWindow *parent,
52                 wxWindowID id,
53                 const wxPoint& pos = wxDefaultPosition,
54                 const wxSize& size = wxDefaultSize,
55                 long style = 0,
56                 const wxString& name = wxToolBarNameStr );
57
58    virtual ~wxToolBar();
59
60    virtual bool Realize();
61
62    virtual void SetWindowStyleFlag( long style );
63
64    virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
65
66    virtual void SetToolShortHelp(int id, const wxString& helpString);
67
68    virtual void SetMargins(int x, int y);
69    void SetMargins(const wxSize& size)
70        { SetMargins((int) size.x, (int) size.y); }
71
72    virtual bool PerformAction(const wxControlAction& action,
73                               long numArg = -1,
74                               const wxString& strArg = wxEmptyString);
75    static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef);
76    virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef)
77    {
78        return GetStdInputHandler(handlerDef);
79    }
80
81protected:
82    // common part of all ctors
83    void Init();
84
85    // implement base class pure virtuals
86    virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
87    virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
88
89    virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable);
90    virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle);
91    virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
92
93    virtual wxToolBarToolBase *CreateTool(int id,
94                                          const wxString& label,
95                                          const wxBitmap& bmpNormal,
96                                          const wxBitmap& bmpDisabled,
97                                          wxItemKind kind,
98                                          wxObject *clientData,
99                                          const wxString& shortHelp,
100                                          const wxString& longHelp);
101    virtual wxToolBarToolBase *CreateTool(wxControl *control);
102
103    virtual wxSize DoGetBestClientSize() const;
104    virtual void DoSetSize(int x, int y,
105                           int width, int height,
106                           int sizeFlags = wxSIZE_AUTO);
107    virtual void DoDraw(wxControlRenderer *renderer);
108
109    // get the bounding rect for the given tool
110    wxRect GetToolRect(wxToolBarToolBase *tool) const;
111
112    // redraw the given tool
113    void RefreshTool(wxToolBarToolBase *tool);
114
115    // (re)calculate the tool positions, should only be called if it is
116    // necessary to do it, i.e. m_needsLayout == true
117    void DoLayout();
118
119    // get the rect limits depending on the orientation: top/bottom for a
120    // vertical toolbar, left/right for a horizontal one
121    void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const;
122
123private:
124    // have we calculated the positions of our tools?
125    bool m_needsLayout;
126
127    // the width of a separator
128    wxCoord m_widthSeparator;
129
130    // the total size of all toolbar elements
131    wxCoord m_maxWidth,
132            m_maxHeight;
133
134private:
135    DECLARE_DYNAMIC_CLASS(wxToolBar)
136};
137
138#endif // _WX_UNIV_TOOLBAR_H_
139