// Author: Benjamin I. Williams
// Modified by:
// Created: 2005-05-17
-// RCS-ID: $Id: dockart.cpp 48848 2007-09-21 10:19:53Z SC $
+// RCS-ID: $Id$
// Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved
// Licence: wxWindows Library Licence, Version 3.1
///////////////////////////////////////////////////////////////////////////////
WX_DEFINE_OBJARRAY(wxAuiToolBarItemArray)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG)
+wxDEFINE_EVENT( wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, wxAuiToolBarEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, wxAuiToolBarEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, wxAuiToolBarEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, wxAuiToolBarEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, wxAuiToolBarEvent );
IMPLEMENT_CLASS(wxAuiToolBar, wxControl)
m_gripper_pen2 = wxPen(darker3_colour);
m_gripper_pen3 = *wxWHITE_PEN;
- static unsigned char button_dropdown_bits[] = { 0xe0, 0xf1, 0xfb };
- static unsigned char overflow_bits[] = { 0x80, 0xff, 0x80, 0xc1, 0xe3, 0xf7 };
+ static const unsigned char button_dropdown_bits[] = { 0xe0, 0xf1, 0xfb };
+ static const unsigned char overflow_bits[] = { 0x80, 0xff, 0x80, 0xc1, 0xe3, 0xf7 };
m_button_dropdown_bmp = wxAuiBitmapFromBits(button_dropdown_bits, 5, 3,
*wxBLACK);
m_text_orientation = orientation;
}
+unsigned int wxAuiDefaultToolBarArt::GetFlags()
+{
+ return m_flags;
+}
+
+wxFont wxAuiDefaultToolBarArt::GetFont()
+{
+ return m_font;
+}
+
+int wxAuiDefaultToolBarArt::GetTextOrientation()
+{
+ return m_text_orientation;
+}
+
void wxAuiDefaultToolBarArt::DrawBackground(
wxDC& dc,
wxWindow* WXUNUSED(wnd),
// get item's width
width = item.GetMinSize().GetWidth();
+ if (width == -1)
+ {
+ // no width specified, measure the text ourselves
+ width = dc.GetTextExtent(item.GetLabel()).GetX();
+ }
+
return wxSize(width, height);
}
{
switch (element_id)
{
- case wxAUI_TBART_SEPARATOR_SIZE: m_separator_size = size;
- case wxAUI_TBART_GRIPPER_SIZE: m_gripper_size = size;
- case wxAUI_TBART_OVERFLOW_SIZE: m_overflow_size = size;
+ case wxAUI_TBART_SEPARATOR_SIZE: m_separator_size = size; break;
+ case wxAUI_TBART_GRIPPER_SIZE: m_gripper_size = size; break;
+ case wxAUI_TBART_OVERFLOW_SIZE: m_overflow_size = size; break;
}
}
m_gripper_sizer_item = NULL;
m_overflow_sizer_item = NULL;
m_dragging = false;
- m_style = style;
+ m_style = style | wxBORDER_NONE;
m_gripper_visible = (m_style & wxAUI_TB_GRIPPER) ? true : false;
m_overflow_visible = (m_style & wxAUI_TB_OVERFLOW) ? true : false;
m_overflow_state = 0;
SetExtraStyle(wxWS_EX_PROCESS_IDLE);
if (style & wxAUI_TB_HORZ_LAYOUT)
SetToolTextOrientation(wxAUI_TBTOOL_TEXT_RIGHT);
+ SetBackgroundStyle(wxBG_STYLE_CUSTOM);
}
SetToolTextOrientation(wxAUI_TBTOOL_TEXT_BOTTOM);
}
+long wxAuiToolBar::GetWindowStyleFlag() const
+{
+ return m_style;
+}
void wxAuiToolBar::SetArtProvider(wxAuiToolBarArt* art)
{
-void wxAuiToolBar::AddTool(int tool_id,
+wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id,
const wxString& label,
const wxBitmap& bitmap,
const wxString& short_help_string,
wxItemKind kind)
{
- AddTool(tool_id,
+ return AddTool(tool_id,
label,
bitmap,
wxNullBitmap,
}
-void wxAuiToolBar::AddTool(int tool_id,
+wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& disabled_bitmap,
item.user_data = 0;
item.sticky = false;
+ if (item.id == wxID_ANY)
+ item.id = wxNewId();
+
if (!item.disabled_bitmap.IsOk())
{
// no disabled bitmap specified, we need to make one
item.disabled_bitmap = MakeDisabledBitmap(item.bitmap);
}
}
-
m_items.Add(item);
+ return &m_items.Last();
}
-void wxAuiToolBar::AddControl(wxControl* control,
+wxAuiToolBarItem* wxAuiToolBar::AddControl(wxControl* control,
const wxString& label)
{
wxAuiToolBarItem item;
item.sticky = false;
m_items.Add(item);
+ return &m_items.Last();
}
-void wxAuiToolBar::AddLabel(int tool_id,
+wxAuiToolBarItem* wxAuiToolBar::AddLabel(int tool_id,
const wxString& label,
const int width)
{
item.user_data = 0;
item.sticky = false;
+ if (item.id == wxID_ANY)
+ item.id = wxNewId();
+
m_items.Add(item);
+ return &m_items.Last();
}
-void wxAuiToolBar::AddSeparator()
+wxAuiToolBarItem* wxAuiToolBar::AddSeparator()
{
wxAuiToolBarItem item;
item.window = NULL;
item.sticky = false;
m_items.Add(item);
+ return &m_items.Last();
}
-void wxAuiToolBar::AddSpacer(int pixels)
+wxAuiToolBarItem* wxAuiToolBar::AddSpacer(int pixels)
{
wxAuiToolBarItem item;
item.window = NULL;
item.sticky = false;
m_items.Add(item);
+ return &m_items.Last();
}
-void wxAuiToolBar::AddStretchSpacer(int proportion)
+wxAuiToolBarItem* wxAuiToolBar::AddStretchSpacer(int proportion)
{
wxAuiToolBarItem item;
item.window = NULL;
item.sticky = false;
m_items.Add(item);
+ return &m_items.Last();
}
void wxAuiToolBar::Clear()
m_gripper_visible = visible;
if (visible)
m_style |= wxAUI_TB_GRIPPER;
+ else
+ m_style &= ~wxAUI_TB_GRIPPER;
Realize();
Refresh(false);
}
m_overflow_visible = visible;
if (visible)
m_style |= wxAUI_TB_OVERFLOW;
+ else
+ m_style &= ~wxAUI_TB_OVERFLOW;
Refresh(false);
}
// find out if the mouse cursor is inside the dropdown rectangle
if (overflow_rect.Contains(pt.x, pt.y))
{
- if (::wxGetMouseState().LeftDown())
+ if (::wxGetMouseState().LeftIsDown())
overflow_state = wxAUI_BUTTON_STATE_PRESSED;
else
overflow_state = wxAUI_BUTTON_STATE_HOVER;
{
wxAuiToolBarItem* tool = FindTool(tool_id);
- if (tool)
+ if (tool && (tool->kind == wxITEM_CHECK || tool->kind == wxITEM_RADIO))
{
- if (tool->kind != wxITEM_CHECK)
- return;
+ if (tool->kind == wxITEM_RADIO)
+ {
+ int i, idx, count;
+ idx = GetToolIndex(tool_id);
+ count = (int)m_items.GetCount();
+
+ if (idx >= 0 && idx < count)
+ {
+ for (i = idx; i < count; ++i)
+ {
+ if (m_items[i].kind != wxITEM_RADIO)
+ break;
+ m_items[i].state &= ~wxAUI_BUTTON_STATE_CHECKED;
+ }
+ for (i = idx; i > 0; i--)
+ {
+ if (m_items[i].kind != wxITEM_RADIO)
+ break;
+ m_items[i].state &= ~wxAUI_BUTTON_STATE_CHECKED;
+ }
+ }
- if (state == true)
tool->state |= wxAUI_BUTTON_STATE_CHECKED;
- else
- tool->state &= ~wxAUI_BUTTON_STATE_CHECKED;
+ }
+ else if (tool->kind == wxITEM_CHECK)
+ {
+ if (state == true)
+ tool->state |= wxAUI_BUTTON_STATE_CHECKED;
+ else
+ tool->state &= ~wxAUI_BUTTON_STATE_CHECKED;
+ }
}
}
if (tool)
{
- if (tool->kind != wxITEM_CHECK)
+ if ( (tool->kind != wxITEM_CHECK) && (tool->kind != wxITEM_RADIO) )
return false;
return (tool->state & wxAUI_BUTTON_STATE_CHECKED) ? true : false;
sizer_item = sizer->Add(size.x + (m_tool_border_padding*2),
size.y + (m_tool_border_padding*2),
item.proportion,
- wxALIGN_CENTER);
+ item.alignment);
if (i+1 < count)
{
sizer->AddSpacer(m_tool_packing);
case wxITEM_CHECK:
case wxITEM_NORMAL:
+ case wxITEM_RADIO:
{
wxSize size = m_art->GetToolSize(dc, this, item);
sizer_item = sizer->Add(size.x + (m_tool_border_padding*2),
size.y + (m_tool_border_padding*2),
0,
- wxALIGN_CENTER);
+ item.alignment);
// add tool packing
if (i+1 < count)
{
vert_sizer->AddStretchSpacer(1);
ctrl_sizer_item = vert_sizer->Add(item.window, 0, wxEXPAND);
vert_sizer->AddStretchSpacer(1);
- if ( (m_style & wxAUI_TB_TEXT) && !item.GetLabel().empty() )
+ if ( (m_style & wxAUI_TB_TEXT) &&
+ m_tool_text_orientation == wxAUI_TBTOOL_TEXT_BOTTOM &&
+ !item.GetLabel().empty() )
{
wxSize s = GetLabelSize(item.GetLabel());
vert_sizer->Add(1, s.y);
void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt))
{
- wxBufferedPaintDC dc(this);
+ wxAutoBufferedPaintDC dc(this);
wxRect cli_rect(wxPoint(0,0), GetClientSize());
// draw a toggle button
m_art->DrawButton(dc, this, item, item_rect);
}
+ else if (item.kind == wxITEM_RADIO)
+ {
+ // draw a toggle button
+ m_art->DrawButton(dc, this, item, item_rect);
+ }
else if (item.kind == wxITEM_CONTROL)
{
// draw the control's label
e.SetEventObject(this);
e.SetToolId(-1);
e.SetClickPoint(wxPoint(evt.GetX(), evt.GetY()));
- bool processed = ProcessEvent(e);
+ bool processed = GetEventHandler()->ProcessEvent(e);
if (processed)
{
{
wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, res);
e.SetEventObject(this);
- GetParent()->ProcessEvent(e);
+ GetParent()->GetEventHandler()->ProcessEvent(e);
}
}
e.SetClickPoint(evt.GetPosition());
e.SetItemRect(rect);
- ProcessEvent(e);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
}
}
{
UnsetToolTip();
- if (hit_item->kind == wxITEM_CHECK)
+ if (hit_item->kind == wxITEM_CHECK || hit_item->kind == wxITEM_RADIO)
{
bool toggle = false;
ToggleTool(m_action_item->id, toggle);
+ // repaint immediately
+ Refresh(false);
+ Update();
+
wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_action_item->id);
e.SetEventObject(this);
- ProcessEvent(e);
+ e.SetInt (toggle);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
}
else
{
wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_action_item->id);
e.SetEventObject(this);
- ProcessEvent(e);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
}
}
e.SetEventObject(this);
e.SetToolId(m_action_item->id);
e.SetClickPoint(m_action_pos);
- ProcessEvent(e);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
}
}
e.SetEventObject(this);
e.SetToolId(-1);
e.SetClickPoint(m_action_pos);
- ProcessEvent(e);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
}
e.SetEventObject(this);
e.SetToolId(m_action_item->id);
e.SetClickPoint(m_action_pos);
- ProcessEvent(e);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
}
}
wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, GetId());
e.SetEventObject(this);
e.SetToolId(m_action_item->id);
- ProcessEvent(e);
+ GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
return;
}