#pragma hdrstop
#endif
-#include "wx/ribbon/bar.h"
-
#if wxUSE_RIBBON
+#include "wx/ribbon/bar.h"
#include "wx/ribbon/art.h"
#include "wx/dcbuffer.h"
#include "wx/arrimpl.cpp"
-WX_DEFINE_USER_EXPORTED_OBJARRAY(wxRibbonPageTabInfoArray);
+WX_DEFINE_USER_EXPORTED_OBJARRAY(wxRibbonPageTabInfoArray)
wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBAR_PAGE_CHANGED, wxRibbonBarEvent);
wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBAR_PAGE_CHANGING, wxRibbonBarEvent);
wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBAR_TAB_MIDDLE_UP, wxRibbonBarEvent);
wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBAR_TAB_RIGHT_DOWN, wxRibbonBarEvent);
wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBAR_TAB_RIGHT_UP, wxRibbonBarEvent);
+wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBAR_TAB_LEFT_DCLICK, wxRibbonBarEvent);
IMPLEMENT_CLASS(wxRibbonBar, wxRibbonControl)
IMPLEMENT_DYNAMIC_CLASS(wxRibbonBarEvent, wxNotifyEvent)
EVT_PAINT(wxRibbonBar::OnPaint)
EVT_RIGHT_DOWN(wxRibbonBar::OnMouseRightDown)
EVT_RIGHT_UP(wxRibbonBar::OnMouseRightUp)
+ EVT_LEFT_DCLICK(wxRibbonBar::OnMouseDoubleClick)
EVT_SIZE(wxRibbonBar::OnSize)
END_EVENT_TABLE()
info.hovered = false;
// info.rect not set (intentional)
- wxMemoryDC dcTemp;
+ wxClientDC dcTemp(this);
wxString label = wxEmptyString;
if(m_flags & wxRIBBON_BAR_SHOW_PAGE_LABELS)
label = page->GetLabel();
return m_pages.Item(m_current_page).page->DismissExpandedPanel();
}
+void wxRibbonBar::ShowPanels(bool show)
+{
+ m_arePanelsShown = show;
+ SetMinSize(wxSize(GetSize().GetWidth(), DoGetBestSize().GetHeight()));
+ Realise();
+ GetParent()->Layout();
+}
+
void wxRibbonBar::SetWindowStyleFlag(long style)
{
m_flags = style;
{
bool status = true;
- wxMemoryDC dcTemp;
+ wxClientDC dcTemp(this);
int sep = m_art->GetMetric(wxRIBBON_ART_TAB_SEPARATION_SIZE);
size_t numtabs = m_pages.GetCount();
size_t i;
if(m_tab_scroll_buttons_shown)
{
#define SET_FLAG(variable, flag) \
- { if(((variable) & (flag)) != (flag)) variable |= (flag), refresh_tabs = true; }
+ { if(((variable) & (flag)) != (flag)) { variable |= (flag); refresh_tabs = true; }}
#define UNSET_FLAG(variable, flag) \
- { if((variable) & (flag)) variable &= ~(flag), refresh_tabs = true; }
+ { if((variable) & (flag)) { variable &= ~(flag); refresh_tabs = true; }}
if(m_tab_scroll_left_button_rect.Contains(x, y))
SET_FLAG(m_tab_scroll_left_button_state, wxRIBBON_SCROLL_BTN_HOVERED)
m_tab_scroll_buttons_shown = true;
}
{
- wxMemoryDC temp_dc;
+ wxClientDC temp_dc(this);
m_tab_scroll_left_button_rect.SetWidth(m_art->GetScrollButtonMinimumSize(temp_dc, this, wxRIBBON_SCROLL_BTN_LEFT | wxRIBBON_SCROLL_BTN_NORMAL | wxRIBBON_SCROLL_BTN_FOR_TABS).GetWidth());
m_tab_scroll_left_button_rect.SetHeight(m_tab_height);
m_tab_scroll_left_button_rect.SetX(m_tab_margin_left);
m_tab_scroll_left_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
m_tab_scroll_right_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
m_tab_scroll_buttons_shown = false;
+ m_arePanelsShown = true;
}
wxRibbonBar::wxRibbonBar(wxWindow* parent,
m_tab_scroll_left_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
m_tab_scroll_right_button_state = wxRIBBON_SCROLL_BTN_NORMAL;
m_tab_scroll_buttons_shown = false;
+ m_arePanelsShown = true;
if(m_art == NULL)
{
if(show_right != (m_tab_scroll_right_button_rect.GetWidth() != 0) ||
show_left != (m_tab_scroll_left_button_rect.GetWidth() != 0))
{
- wxMemoryDC temp_dc;
+ wxClientDC temp_dc(this);
if(show_left)
{
m_tab_scroll_left_button_rect.SetWidth(m_art->GetScrollButtonMinimumSize(temp_dc, this, wxRIBBON_SCROLL_BTN_LEFT | wxRIBBON_SCROLL_BTN_NORMAL | wxRIBBON_SCROLL_BTN_FOR_TABS).GetWidth());
DoMouseButtonCommon(evt, wxEVT_COMMAND_RIBBONBAR_TAB_RIGHT_UP);
}
+void wxRibbonBar::OnMouseDoubleClick(wxMouseEvent& evt)
+{
+ DoMouseButtonCommon(evt, wxEVT_COMMAND_RIBBONBAR_TAB_LEFT_DCLICK);
+}
+
void wxRibbonBar::DoMouseButtonCommon(wxMouseEvent& evt, wxEventType tab_event_type)
{
wxRibbonPageTabInfo *tab = HitTestTabs(evt.GetPosition());
}
m_minWidth = min_size.GetWidth();
- m_minHeight = min_size.GetHeight();
+ m_minHeight = m_arePanelsShown ? min_size.GetHeight() : m_tab_height;
}
wxSize wxRibbonBar::DoGetBestSize() const
{
best.IncBy(0, m_tab_height);
}
+ if(!m_arePanelsShown)
+ {
+ best.SetHeight(m_tab_height);
+ }
return best;
}