bool TabBar::EventFilter(Wnd* w, const WndEvent& event) { if (event.Type() == WndEvent::LButtonDown || event.Type() == WndEvent::RButtonDown) MoveChildUp(m_left_right_button_layout); return false; }
bool Scroll::EventFilter(Wnd* w, const WndEvent& event) { if (w == m_tab) { switch (event.Type()) { case WndEvent::LDrag: { if (!Disabled()) { Pt new_ul = m_tab->RelativeUpperLeft() + event.DragMove(); if (m_orientation == VERTICAL) { new_ul.x = m_tab->RelativeUpperLeft().x; new_ul.y = std::max(0 + (m_decr ? m_decr->Height() : Y0), std::min(new_ul.y, ClientHeight() - (m_incr ? m_incr->Height() : Y0) - m_tab->Height())); m_tab_dragged |= bool(m_tab->RelativeUpperLeft().y - new_ul.y); } else { new_ul.x = std::max(0 + (m_decr ? m_decr->Width() : X0), std::min(new_ul.x, ClientWidth() - (m_incr ? m_incr->Width() : X0) - m_tab->Width())); new_ul.y = m_tab->RelativeUpperLeft().y; m_tab_dragged |= bool(m_tab->RelativeUpperLeft().x - new_ul.x); } m_tab->MoveTo(new_ul); UpdatePosn(); } return true; } case WndEvent::LButtonDown: m_dragging_tab = true; break; case WndEvent::LButtonUp: case WndEvent::LClick: if (m_tab_dragged) ScrolledAndStoppedSignal(m_posn, m_posn + m_page_sz, m_range_min, m_range_max); m_dragging_tab = false; m_tab_dragged = false; break; case WndEvent::MouseLeave: return m_dragging_tab; default: break; } } return false; }
void Wnd::HandleEvent(const WndEvent& event) { for (std::vector<Wnd*>::reverse_iterator it = m_filters.rbegin(); it != m_filters.rend(); ++it) { if ((*it)->EventFilter(this, event)) return; } try { switch (event.Type()) { case WndEvent::LButtonDown: LButtonDown(event.Point(), event.ModKeys()); break; case WndEvent::LDrag: LDrag(event.Point(), event.DragMove(), event.ModKeys()); break; case WndEvent::LButtonUp: LButtonUp(event.Point(), event.ModKeys()); break; case WndEvent::LClick: LClick(event.Point(), event.ModKeys()); break; case WndEvent::LDoubleClick: LDoubleClick(event.Point(), event.ModKeys()); break; case WndEvent::MButtonDown: MButtonDown(event.Point(), event.ModKeys()); break; case WndEvent::MDrag: MDrag(event.Point(), event.DragMove(), event.ModKeys()); break; case WndEvent::MButtonUp: MButtonUp(event.Point(), event.ModKeys()); break; case WndEvent::MClick: MClick(event.Point(), event.ModKeys()); break; case WndEvent::MDoubleClick: MDoubleClick(event.Point(), event.ModKeys()); break; case WndEvent::RButtonDown: RButtonDown(event.Point(), event.ModKeys()); break; case WndEvent::RDrag: RDrag(event.Point(), event.DragMove(), event.ModKeys()); break; case WndEvent::RButtonUp: RButtonUp(event.Point(), event.ModKeys()); break; case WndEvent::RClick: RClick(event.Point(), event.ModKeys()); break; case WndEvent::RDoubleClick: RDoubleClick(event.Point(), event.ModKeys()); break; case WndEvent::MouseEnter: MouseEnter(event.Point(), event.ModKeys()); break; case WndEvent::MouseHere: MouseHere(event.Point(), event.ModKeys()); break; case WndEvent::MouseLeave: MouseLeave(); break; case WndEvent::DragDropEnter: DragDropEnter(event.Point(), event.DragDropWnds(), event.ModKeys()); break; case WndEvent::DragDropHere: DragDropHere(event.Point(), event.DragDropWnds(), event.ModKeys()); break; case WndEvent::DragDropLeave: DragDropLeave(); break; case WndEvent::MouseWheel: MouseWheel(event.Point(), event.WheelMove(), event.ModKeys()); break; case WndEvent::KeyPress: KeyPress(event.GetKey(), event.KeyCodePoint(), event.ModKeys()); break; case WndEvent::KeyRelease: KeyRelease(event.GetKey(), event.KeyCodePoint(), event.ModKeys()); break; case WndEvent::GainingFocus: GainingFocus(); break; case WndEvent::LosingFocus: LosingFocus(); break; case WndEvent::TimerFiring: TimerFiring(event.Ticks(), event.GetTimer()); break; default: break; } } catch (const ForwardToParentException&) { if (Wnd* p = Parent()) p->HandleEvent(event); } }