void wxRibbonBar::OnMouseLeftDown(wxMouseEvent& evt) { wxRibbonPageTabInfo *tab = HitTestTabs(evt.GetPosition()); if(tab && tab != &m_pages.Item(m_current_page)) { wxRibbonBarEvent query(wxEVT_COMMAND_RIBBONBAR_PAGE_CHANGING, GetId(), tab->page); query.SetEventObject(this); ProcessWindowEvent(query); if(query.IsAllowed()) { SetActivePage(query.GetPage()); wxRibbonBarEvent notification(wxEVT_COMMAND_RIBBONBAR_PAGE_CHANGED, GetId(), m_pages.Item(m_current_page).page); notification.SetEventObject(this); ProcessWindowEvent(notification); } } else if(tab == NULL) { if(m_tab_scroll_left_button_rect.Contains(evt.GetPosition())) { m_tab_scroll_left_button_state |= wxRIBBON_SCROLL_BTN_ACTIVE | wxRIBBON_SCROLL_BTN_HOVERED; RefreshTabBar(); } else if(m_tab_scroll_right_button_rect.Contains(evt.GetPosition())) { m_tab_scroll_right_button_state |= wxRIBBON_SCROLL_BTN_ACTIVE | wxRIBBON_SCROLL_BTN_HOVERED; RefreshTabBar(); } } }
void wxRibbonBar::DoMouseButtonCommon(wxMouseEvent& evt, wxEventType tab_event_type) { wxRibbonPageTabInfo *tab = HitTestTabs(evt.GetPosition()); if(tab) { wxRibbonBarEvent notification(tab_event_type, GetId(), tab->page); notification.SetEventObject(this); ProcessWindowEvent(notification); } }
void wxRibbonBar::OnMouseDoubleClick(wxMouseEvent& evt) { wxRibbonPageTabInfo *tab = HitTestTabs(evt.GetPosition()); SetFocus(); if ( tab && tab == &m_pages.Item(m_current_page) ) { if ( m_ribbon_state == wxRIBBON_BAR_PINNED ) { HidePanels(); } else { ShowPanels(wxRIBBON_BAR_PINNED); } } }
void wxRibbonBar::OnMouseMove(wxMouseEvent& evt) { int x = evt.GetX(); int y = evt.GetY(); int hovered_page = -1; bool refresh_tabs = false; if(y < m_tab_height) { // It is quite likely that the mouse moved a small amount and is still over the same tab if(m_current_hovered_page != -1 && m_pages.Item((size_t)m_current_hovered_page).rect.Contains(x, y)) { hovered_page = m_current_hovered_page; // But be careful, if tabs can be scrolled, then parts of the tab rect may not be valid if(m_tab_scroll_buttons_shown) { if(x >= m_tab_scroll_right_button_rect.GetX() || x < m_tab_scroll_left_button_rect.GetRight()) { hovered_page = -1; } } } else { HitTestTabs(evt.GetPosition(), &hovered_page); } } if(hovered_page != m_current_hovered_page) { if(m_current_hovered_page != -1) { m_pages.Item((int)m_current_hovered_page).hovered = false; } m_current_hovered_page = hovered_page; if(m_current_hovered_page != -1) { m_pages.Item((int)m_current_hovered_page).hovered = true; } refresh_tabs = true; } if(m_tab_scroll_buttons_shown) { #define SET_FLAG(variable, flag) \ { if(((variable) & (flag)) != (flag)) { variable |= (flag); refresh_tabs = true; }} #define UNSET_FLAG(variable, flag) \ { 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) else UNSET_FLAG(m_tab_scroll_left_button_state, wxRIBBON_SCROLL_BTN_HOVERED) if(m_tab_scroll_right_button_rect.Contains(x, y)) SET_FLAG(m_tab_scroll_right_button_state, wxRIBBON_SCROLL_BTN_HOVERED) else UNSET_FLAG(m_tab_scroll_right_button_state, wxRIBBON_SCROLL_BTN_HOVERED) #undef SET_FLAG #undef UNSET_FLAG } if(refresh_tabs) { RefreshTabBar(); } }
void wxRibbonBar::OnMouseLeftDown(wxMouseEvent& evt) { wxRibbonPageTabInfo *tab = HitTestTabs(evt.GetPosition()); SetFocus(); if ( tab ) { if ( m_ribbon_state == wxRIBBON_BAR_MINIMIZED ) { ShowPanels(); m_ribbon_state = wxRIBBON_BAR_EXPANDED; } else if ( (tab == &m_pages.Item(m_current_page)) && (m_ribbon_state == wxRIBBON_BAR_EXPANDED) ) { HidePanels(); m_ribbon_state = wxRIBBON_BAR_MINIMIZED; } } else { if ( m_ribbon_state == wxRIBBON_BAR_EXPANDED ) { HidePanels(); m_ribbon_state = wxRIBBON_BAR_MINIMIZED; } } if(tab && tab != &m_pages.Item(m_current_page)) { wxRibbonBarEvent query(wxEVT_RIBBONBAR_PAGE_CHANGING, GetId(), tab->page); query.SetEventObject(this); ProcessWindowEvent(query); if(query.IsAllowed()) { SetActivePage(query.GetPage()); wxRibbonBarEvent notification(wxEVT_RIBBONBAR_PAGE_CHANGED, GetId(), m_pages.Item(m_current_page).page); notification.SetEventObject(this); ProcessWindowEvent(notification); } } else if(tab == NULL) { if(m_tab_scroll_left_button_rect.Contains(evt.GetPosition())) { m_tab_scroll_left_button_state |= wxRIBBON_SCROLL_BTN_ACTIVE | wxRIBBON_SCROLL_BTN_HOVERED; RefreshTabBar(); } else if(m_tab_scroll_right_button_rect.Contains(evt.GetPosition())) { m_tab_scroll_right_button_state |= wxRIBBON_SCROLL_BTN_ACTIVE | wxRIBBON_SCROLL_BTN_HOVERED; RefreshTabBar(); } } wxPoint position = evt.GetPosition(); if(position.x >= 0 && position.y >= 0) { wxSize size = GetSize(); if(position.x < size.GetWidth() && position.y < size.GetHeight()) { if(m_toggle_button_rect.Contains(position)) { bool pshown = ArePanelsShown(); ShowPanels(!pshown); if ( pshown ) m_ribbon_state = wxRIBBON_BAR_MINIMIZED; else m_ribbon_state = wxRIBBON_BAR_PINNED; wxRibbonBarEvent event(wxEVT_RIBBONBAR_TOGGLED, GetId()); event.SetEventObject(this); ProcessWindowEvent(event); } if ( m_help_button_rect.Contains(position) ) { wxRibbonBarEvent event(wxEVT_RIBBONBAR_HELP_CLICK, GetId()); event.SetEventObject(this); ProcessWindowEvent(event); } } } }