1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/msw/tbar95.h
3// Purpose:     wxToolBar (Windows 95 toolbar) class
4// Author:      Julian Smart
5// Modified by:
6// Created:     01/02/97
7// RCS-ID:      $Id: tbar95.h 58446 2009-01-26 23:32:16Z VS $
8// Copyright:   (c) Julian Smart
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_MSW_TBAR95_H_
13#define _WX_MSW_TBAR95_H_
14
15#if wxUSE_TOOLBAR
16
17#include "wx/dynarray.h"
18#include "wx/imaglist.h"
19
20class WXDLLEXPORT wxToolBar : public wxToolBarBase
21{
22public:
23    // ctors and dtor
24    wxToolBar() { Init(); }
25
26    wxToolBar(wxWindow *parent,
27                wxWindowID id,
28                const wxPoint& pos = wxDefaultPosition,
29                const wxSize& size = wxDefaultSize,
30                long style = wxNO_BORDER | wxTB_HORIZONTAL,
31                const wxString& name = wxToolBarNameStr)
32    {
33        Init();
34
35        Create(parent, id, pos, size, style, name);
36    }
37
38    bool Create(wxWindow *parent,
39                wxWindowID id,
40                const wxPoint& pos = wxDefaultPosition,
41                const wxSize& size = wxDefaultSize,
42                long style = wxNO_BORDER | wxTB_HORIZONTAL,
43                const wxString& name = wxToolBarNameStr);
44
45    virtual ~wxToolBar();
46
47    // override/implement base class virtuals
48    virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
49
50    virtual bool Realize();
51
52    virtual void SetToolBitmapSize(const wxSize& size);
53    virtual wxSize GetToolSize() const;
54
55    virtual void SetRows(int nRows);
56
57#if wxABI_VERSION >= 20802
58    // TODO: In 2.9 these should probably be virtual, and declared in the base class...
59    void SetToolNormalBitmap(int id, const wxBitmap& bitmap);
60    void SetToolDisabledBitmap(int id, const wxBitmap& bitmap);
61#endif
62
63    // implementation only from now on
64    // -------------------------------
65
66    virtual void SetWindowStyleFlag(long style);
67
68    virtual bool MSWCommand(WXUINT param, WXWORD id);
69    virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
70
71    void OnMouseEvent(wxMouseEvent& event);
72    void OnSysColourChanged(wxSysColourChangedEvent& event);
73    void OnEraseBackground(wxEraseEvent& event);
74
75    void SetFocus() {}
76
77    static WXHBITMAP MapBitmap(WXHBITMAP bitmap, int width, int height);
78
79    // override WndProc mainly to process WM_SIZE
80    virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
81
82    virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
83
84protected:
85    // common part of all ctors
86    void Init();
87
88    // create the native toolbar control
89    bool MSWCreateToolbar(const wxPoint& pos, const wxSize& size);
90
91    // recreate the control completely
92    void Recreate();
93
94    // implement base class pure virtuals
95    virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
96    virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
97
98    virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable);
99    virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle);
100    virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
101
102    virtual wxToolBarToolBase *CreateTool(int id,
103                                          const wxString& label,
104                                          const wxBitmap& bmpNormal,
105                                          const wxBitmap& bmpDisabled,
106                                          wxItemKind kind,
107                                          wxObject *clientData,
108                                          const wxString& shortHelp,
109                                          const wxString& longHelp);
110    virtual wxToolBarToolBase *CreateTool(wxControl *control);
111
112    // return the appropriate size and flags for the toolbar control
113    virtual wxSize DoGetBestSize() const;
114
115    // handlers for various events
116    bool HandleSize(WXWPARAM wParam, WXLPARAM lParam);
117    bool HandlePaint(WXWPARAM wParam, WXLPARAM lParam);
118    void HandleMouseMove(WXWPARAM wParam, WXLPARAM lParam);
119
120    // should be called whenever the toolbar size changes
121    void UpdateSize();
122
123    // create m_disabledImgList (but doesn't fill it), set it to NULL if it is
124    // unneeded
125    void CreateDisabledImageList();
126
127    // get the Windows toolbar style of this control
128    long GetMSWToolbarStyle() const;
129
130
131    // the big bitmap containing all bitmaps of the toolbar buttons
132    WXHBITMAP m_hBitmap;
133
134    // the image list with disabled images, may be NULL if we use
135    // system-provided versions of them
136    wxImageList *m_disabledImgList;
137
138    // the total number of toolbar elements
139    size_t m_nButtons;
140
141    // the tool the cursor is in
142    wxToolBarToolBase *m_pInTool;
143
144private:
145    // makes sure tool bitmap size is sufficient for all tools
146    void AdjustToolBitmapSize();
147
148    DECLARE_EVENT_TABLE()
149    DECLARE_DYNAMIC_CLASS(wxToolBar)
150    DECLARE_NO_COPY_CLASS(wxToolBar)
151};
152
153#endif // wxUSE_TOOLBAR
154
155#endif // _WX_MSW_TBAR95_H_
156
157