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)
{
wxAuiToolBarItem* tool = FindTool(tool_id);
- if (tool)
+ if (tool && (tool->kind == wxITEM_CHECK || tool->kind == wxITEM_RADIO))
{
- if (tool->kind != wxITEM_CHECK)
- return;
-
- if (state == true)
+ 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;
+ }
+ }
+
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;
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),
// 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;
toggle = true;
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);
+ 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;
}