2
* This file is part of wxSmithAui plugin for Code::Blocks Studio
3
* Copyright (C) 2008-2009 César Fernández Domínguez
5
* wxSmithAui is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 3 of the License, or
8
* (at your option) any later version.
10
* wxSmithAui is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with wxSmithAui. If not, see <http://www.gnu.org/licenses/>.
19
#include "wxsAuiToolBar.h"
21
#if wxCHECK_VERSION(2,8,9)
23
#include <wxsadvqppchild.h>
24
#include <wxwidgets/wxsitemresdata.h>
26
#include <wx/textdlg.h>
27
#include <wxwidgets/wxsflags.h>
29
#include "../wxAuiManager/wxsAuiManager.h"
30
#include "wxSmithAuiToolBar.h"
31
#include "wxsAuiToolBarItem.h"
32
#include "wxsAuiToolBarSeparator.h"
33
#include "wxsAuiToolBarLabel.h"
34
#include "wxsAuiToolBarSpacer.h"
36
using namespace wxsFlags;
38
//(*Headers(wxsAuiToolBarParentQP)
39
#include <wx/checkbox.h>
42
#include <wx/textctrl.h>
45
//(*InternalHeaders(wxsAuiToolBarParentQP)
46
#include <wx/string.h>
52
#include "../images/wxsAuiToolBar16.xpm"
53
#include "../images/wxsAuiToolBar32.xpm"
55
wxsRegisterItem<wxsAuiToolBar> Reg(
56
_T("wxAuiToolBar"), // Class name
57
wxsTContainer, // Item type
58
_T("wxWindows"), // License
59
_T("Benjamin I. Williams"), // Author
60
_T(""), // Author's email
61
_T(""), // Item's homepage
62
_T("Aui"), // Category in palette
63
40, // Priority in palette
64
_T("AuiToolBar"), // Base part of names for new items
65
wxsCPP, // List of coding languages supported by this item
67
wxBitmap(wxsAuiToolBar32_xpm), // 32x32 bitmap
68
wxBitmap(wxsAuiToolBar16_xpm), // 16x16 bitmap
69
false); // Allow in XRC
71
/** \brief Extra parameters for aui notebook's children */
72
class wxsAuiToolBarExtra: public wxsPropertyContainer
77
m_Label(_("Item label")),
86
virtual void OnEnumProperties(long Flags)
88
WXS_SHORT_STRING_P(wxsAuiToolBarExtra,m_Label,_("Aui ToolBar label"),_T("label"),_T(""),false,500);
89
WXS_BOOL_P(wxsAuiToolBarExtra,m_Enabled,_("Aui ToolBar Enabled"),_T("enabled"),true,499);
93
WXS_ST_BEGIN(wxsAuiToolBarStyles,_T("wxAUI_TB_DEFAULT_STYLE"))
94
WXS_ST_CATEGORY("wxAuiToolBar")
96
WXS_ST(wxAUI_TB_NO_TOOLTIPS)
97
WXS_ST(wxAUI_TB_NO_AUTORESIZE)
98
WXS_ST(wxAUI_TB_OVERFLOW)
99
WXS_ST(wxAUI_TB_HORZ_LAYOUT)
100
WXS_ST(wxAUI_TB_HORZ_TEXT)
101
WXS_ST(wxAUI_TB_DEFAULT_STYLE)
105
WXS_EV_BEGIN(wxsAuiToolBarEvents)
106
WXS_EVI(EVT_AUITOOLBAR_TOOL_DROPDOWN,wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN,wxAuiToolBarEvent,Dropdown)
107
WXS_EVI(EVT_AUITOOLBAR_OVERFLOW_CLICK,wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK,wxAuiToolBarEvent,OverflowClick)
108
WXS_EVI(EVT_AUITOOLBAR_RIGHT_CLICK,wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK,wxAuiToolBarEvent,RightClick)
109
WXS_EVI(EVT_AUITOOLBAR_MIDDLE_CLICK,wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK,wxAuiToolBarEvent,MiddleClick)
110
WXS_EVI(EVT_AUITOOLBAR_BEGIN_DRAG,wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG,wxAuiToolBarEvent,BeginDrag)
114
wxsAuiToolBar::wxsAuiToolBar(wxsItemResData* Data):
119
wxsAuiToolBarStyles),
120
m_CurrentSelection(0)
125
wxsAuiToolBar::~wxsAuiToolBar()
130
bool wxsAuiToolBar::OnCanAddChild(wxsItem* Item,bool ShowMessage)
132
bool IsControl = wxDynamicCast(Item->BuildPreview(new wxFrame(0,-1,wxEmptyString),0),wxControl);
133
bool IsAuiToolBarItem = Item->GetClassName().Contains(_T("wxAuiToolBar"));
134
if ( !IsControl && !IsAuiToolBarItem )
138
wxMessageBox(_("Only Controls and Aui ToolBar Items can be added to wxAuiToolBar."));
143
return wxsContainer::OnCanAddChild(Item,ShowMessage);
146
bool wxsAuiToolBar::OnCanAddToParent(wxsParent* Parent,bool ShowMessage)
148
if ( Parent->GetClassName() != _T("wxAuiManager") )
152
wxMessageBox(_("wxAuiToolBar can only be added to wxAuiManager."));
157
return wxsContainer::OnCanAddToParent(Parent,ShowMessage);
160
wxsPropertyContainer* wxsAuiToolBar::OnBuildExtra()
162
return new wxsAuiToolBarExtra();
165
wxString wxsAuiToolBar::OnXmlGetExtraObjectClass()
167
return _T("AuiToolBarItem");
170
wxObject* wxsAuiToolBar::OnBuildPreview(wxWindow* Parent,long PreviewFlags)
172
UpdateCurrentSelection();
173
wxsAuiManager* AuiManager = (wxsAuiManager*) GetParent();
174
wxsAuiPaneInfoExtra* PaneInfo = (wxsAuiPaneInfoExtra*) AuiManager->GetChildExtra(AuiManager->GetChildIndex(this));
175
wxSmithAuiToolBar* AuiToolBar;
178
if ( PaneInfo->m_Gripper == wxTOP)
180
Gripper |= wxAUI_TB_VERTICAL;
182
AuiToolBar = new wxSmithAuiToolBar(Parent,-1,Pos(Parent),Size(Parent),Style()|Gripper);
184
if ( !GetChildCount() && !(PreviewFlags&pfExact) )
186
// Adding additional label to prevent from having zero-sized AuiToolBar
187
AuiToolBar->AddControl(new wxStaticText(AuiToolBar,-1,_("No Items")));
190
for ( int i=0; i<GetChildCount(); i++ )
192
wxsItem* Child = GetChild(i);
193
wxsAuiToolBarExtra* Extra = (wxsAuiToolBarExtra*)GetChildExtra(i);
194
wxString ClassName = Child->GetClassName();
196
if ( ClassName == _T("wxAuiToolBarItem") )
198
wxsAuiToolBarItem* Item = (wxsAuiToolBarItem*) Child;
199
Item->m_ItemId = wxNewId();
200
Item->m_HasGripper = PaneInfo->m_Gripper;
201
Item->m_GripperSize = m_GripperSize;
205
Item->m_Bitmap.GetPreview(wxDefaultSize,wxART_TOOLBAR),
206
Item->m_DisabledBitmap.GetPreview(wxDefaultSize,wxART_TOOLBAR),
211
if ( !Extra->m_Enabled ) AuiToolBar->EnableTool(Item->m_ItemId, false);
212
if ( Item->m_DropDown && (Item->m_ItemKind == wxITEM_NORMAL) ) AuiToolBar->SetToolDropDown(Item->m_ItemId, true);
213
AuiToolBar->Realize();
214
Item->BuildPreview(AuiToolBar,PreviewFlags);
216
else if ( ClassName == _T("wxAuiToolBarSeparator") )
218
wxsAuiToolBarSeparator* Separator = (wxsAuiToolBarSeparator*) Child;
219
Separator->m_ItemId = wxNewId();
220
Separator->m_HasGripper = PaneInfo->m_Gripper;
221
Separator->m_GripperSize = m_GripperSize;
222
AuiToolBar->AddTool(Separator->m_ItemId,wxEmptyString,wxNullBitmap,wxNullBitmap,wxITEM_SEPARATOR,wxEmptyString,wxEmptyString,NULL);
223
if ( !Extra->m_Enabled ) AuiToolBar->EnableTool(Separator->m_ItemId, false);
224
AuiToolBar->Realize();
225
Separator->BuildPreview(AuiToolBar,PreviewFlags);
227
else if ( ClassName == _T("wxAuiToolBarLabel") )
229
wxsAuiToolBarLabel* Label = (wxsAuiToolBarLabel*) Child;
230
Label->m_ItemId = wxNewId();
231
Label->m_HasGripper = PaneInfo->m_Gripper;
232
Label->m_GripperSize = m_GripperSize;
233
AuiToolBar->AddLabel(Label->m_ItemId,Extra->m_Label,Label->m_IsDefault ? -1 : Label->m_Width);
234
if ( !Extra->m_Enabled ) AuiToolBar->EnableTool(Label->m_ItemId, false);
235
AuiToolBar->Realize();
236
Label->BuildPreview(AuiToolBar,PreviewFlags);
238
else if ( ClassName == _T("wxAuiToolBarSpacer") )
240
wxsAuiToolBarSpacer* Spacer = (wxsAuiToolBarSpacer*) Child;
241
Spacer->m_ItemId = wxNewId();
242
Spacer->m_HasGripper = PaneInfo->m_Gripper;
243
Spacer->m_GripperSize = m_GripperSize;
244
if ( Spacer->m_Stretch ) AuiToolBar->AddStretchSpacer(Spacer->m_Proportion,Spacer->m_ItemId);
245
else AuiToolBar->AddSpacer(Spacer->m_Pixels,Spacer->m_ItemId);
246
if ( !Extra->m_Enabled ) AuiToolBar->EnableTool(Spacer->m_ItemId, false);
247
AuiToolBar->Realize();
248
Spacer->BuildPreview(AuiToolBar,PreviewFlags);
250
else // If child is not any of wxAuiToolBarItems, it is a wxControl
252
wxControl* ChildAsControl = wxDynamicCast(Child->BuildPreview(AuiToolBar,PreviewFlags),wxControl);
253
AuiToolBar->AddControl(ChildAsControl,Extra->m_Label);
254
if ( !Extra->m_Enabled ) ChildAsControl->Enable(false);
258
AuiToolBar->Realize();
262
void wxsAuiToolBar::OnBuildCreatingCode()
264
switch ( GetLanguage() )
268
wxsAuiManager* AuiManager = (wxsAuiManager*) GetParent();
269
wxsAuiPaneInfoExtra* PaneInfo = (wxsAuiPaneInfoExtra*) AuiManager->GetChildExtra(AuiManager->GetChildIndex(this));
271
AddHeader(_T("<wx/aui/aui.h>"),GetInfo().ClassName,0);
272
AddHeader(_T("<wx/aui/aui.h>"),_T("wxAuiToolBarEvent"),0);
274
if ( PaneInfo->m_Gripper == wxTOP )
276
Codef(_T("%C(%W, %I, %P, %S, %T|wxAUI_TB_VERTICAL);\n"));
280
Codef(_T("%C(%W, %I, %P, %S, %T);\n"));
285
for ( int i=0; i<GetChildCount(); i++ )
287
wxsItem* Child = GetChild(i);
288
wxsAuiToolBarExtra* Extra = (wxsAuiToolBarExtra*)GetChildExtra(i);
289
wxString ClassName = Child->GetClassName();
291
if ( ClassName == _T("wxAuiToolBarItem") )
293
wxsAuiToolBarItem* Item = (wxsAuiToolBarItem*) Child;
294
wxsBitmapData Bitmap = Item->m_Bitmap;
295
wxsBitmapData DisabledBitmap = Item->m_DisabledBitmap;
297
switch ( Item->m_ItemKind )
301
ItemKind = _T("wxITEM_NORMAL");
306
ItemKind = _T("wxITEM_CHECK");
315
Codef(_T("%AAddTool(%s, %t, %i, %i, %s, %t, %t, NULL);\n"),
316
#if wxCHECK_VERSION(2, 9, 0)
317
Child->GetIdName().wx_str(),
318
Extra->m_Label.wx_str(),
319
&Bitmap,_T("wxART_TOOLBAR"),
320
&DisabledBitmap,_T("wxART_TOOLBAR"),
322
Item->m_ShortHelp.wx_str(),
323
Item->m_LongHelp.wx_str());
325
Child->GetIdName().c_str(),
326
Extra->m_Label.c_str(),
327
&Bitmap,_T("wxART_TOOLBAR"),
328
&DisabledBitmap,_T("wxART_TOOLBAR"),
330
Item->m_ShortHelp.c_str(),
331
Item->m_LongHelp.c_str());
333
if ( Item->m_DropDown && (Item->m_ItemKind == wxITEM_NORMAL) )
335
#if wxCHECK_VERSION(2, 9, 0)
336
Codef(_T("%ASetToolDropDown(%s, true);\n"),Item->GetIdName().wx_str());
338
Codef(_T("%ASetToolDropDown(%s, true);\n"),Item->GetIdName().c_str());
343
else if ( ClassName == _T("wxAuiToolBarSeparator") )
345
Codef(_T("%AAddSeparator();\n"));
347
else if ( ClassName == _T("wxAuiToolBarLabel") )
349
wxsAuiToolBarLabel* Label = (wxsAuiToolBarLabel*) Child;
350
if ( Label->m_IsDefault )
352
#if wxCHECK_VERSION(2, 9, 0)
353
Codef(_T("%AAddLabel(%s, %t);\n"),Child->GetIdName().wx_str(),Extra->m_Label.wx_str());
355
Codef(_T("%AAddLabel(%s, %t);\n"),Child->GetIdName().c_str(),Extra->m_Label.c_str());
361
#if wxCHECK_VERSION(2, 9, 0)
362
Codef(_T("%AAddLabel(%s, %t, %d);\n"),Child->GetIdName().wx_str(),Extra->m_Label.wx_str(),Label->m_Width);
364
Codef(_T("%AAddLabel(%s, %t, %d);\n"),Child->GetIdName().c_str(),Extra->m_Label.c_str(),Label->m_Width);
368
else if ( ClassName == _T("wxAuiToolBarSpacer") )
370
wxsAuiToolBarSpacer* Spacer = (wxsAuiToolBarSpacer*) Child;
371
if ( Spacer->m_Stretch ) Codef(_T("%AAddStretchSpacer(%d);\n"),Spacer->m_Proportion);
372
else Codef(_T("%AAddSpacer(%d);\n"),Spacer->m_Pixels);
376
// If child is not any of wxAuiToolBarItems, it is a wxControl
377
#if wxCHECK_VERSION(2, 9, 0)
378
Codef(_T("%AAddControl(%o, %t);\n"),i,Extra->m_Label.wx_str());
379
if ( !Extra->m_Enabled && Child->GetBaseProps()->m_Enabled ) Codef(_T("%s->Enable(false);\n"),Child->GetVarName().wx_str());
381
Codef(_T("%AAddControl(%o, %t);\n"),i,Extra->m_Label.c_str());
382
if ( !Extra->m_Enabled && Child->GetBaseProps()->m_Enabled ) Codef(_T("%s->Enable(false);\n"),Child->GetVarName().c_str());
387
#if wxCHECK_VERSION(2, 9, 0)
388
if ( !Extra->m_Enabled ) Codef(_T("%AEnableTool(%s, false);\n"),Child->GetIdName().wx_str());
390
if ( !Extra->m_Enabled ) Codef(_T("%AEnableTool(%s, false);\n"),Child->GetIdName().c_str());
394
Codef(_T("%ARealize();\n"));
401
wxsCodeMarks::Unknown(_T("wxsAuiToolBar::OnBuildCreatingCode"),GetLanguage());
406
bool wxsAuiToolBar::OnMouseClick(wxWindow* Preview,int PosX,int PosY)
408
UpdateCurrentSelection();
409
wxSmithAuiToolBar* AuiToolBar = (wxSmithAuiToolBar*)Preview;
410
int Hit = AuiToolBar->HitTest(wxPoint(PosX,PosY));
411
if ( (Hit != wxNOT_FOUND) && (Hit < GetChildCount()) )
413
wxsItem* OldSel = m_CurrentSelection;
414
m_CurrentSelection = GetChild(Hit);
415
GetResourceData()->SelectItem(m_CurrentSelection,true);
416
return OldSel != m_CurrentSelection;
421
bool wxsAuiToolBar::OnIsChildPreviewVisible(wxsItem* Child)
423
UpdateCurrentSelection();
424
return Child == m_CurrentSelection;
427
bool wxsAuiToolBar::OnEnsureChildPreviewVisible(wxsItem* Child)
429
if ( IsChildPreviewVisible(Child) ) return false;
430
m_CurrentSelection = Child;
431
UpdateCurrentSelection();
435
void wxsAuiToolBar::UpdateCurrentSelection()
437
wxsItem* NewCurrentSelection = 0;
438
for ( int i=0; i<GetChildCount(); i++ )
440
if ( m_CurrentSelection == GetChild(i) ) return;
441
// Extra below is currently un-used
442
// wxsAuiToolBarExtra* Extra = (wxsAuiToolBarExtra*)GetChildExtra(i);
445
NewCurrentSelection = GetChild(i);
448
m_CurrentSelection = NewCurrentSelection;
451
#endif // wxCHECK_VERSION(2,8,9)