GTabWidget.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include <LibGUI/GWidget.h>
  3. class GTabWidget : public GWidget {
  4. C_OBJECT(GTabWidget)
  5. public:
  6. enum TabPosition {
  7. Top,
  8. Bottom,
  9. };
  10. explicit GTabWidget(GWidget* parent);
  11. virtual ~GTabWidget() override;
  12. TabPosition tab_position() const { return m_tab_position; }
  13. void set_tab_position(TabPosition);
  14. int active_tab_index() const;
  15. GWidget* active_widget() { return m_active_widget.ptr(); }
  16. const GWidget* active_widget() const { return m_active_widget.ptr(); }
  17. void set_active_widget(GWidget*);
  18. int bar_height() const { return 21; }
  19. int container_padding() const { return 2; }
  20. void add_widget(const StringView&, GWidget*);
  21. protected:
  22. virtual void paint_event(GPaintEvent&) override;
  23. virtual void child_event(CChildEvent&) override;
  24. virtual void resize_event(GResizeEvent&) override;
  25. virtual void mousedown_event(GMouseEvent&) override;
  26. virtual void mousemove_event(GMouseEvent&) override;
  27. virtual void leave_event(CEvent&) override;
  28. private:
  29. Rect child_rect_for_size(const Size&) const;
  30. Rect button_rect(int index) const;
  31. Rect bar_rect() const;
  32. Rect container_rect() const;
  33. void update_bar();
  34. ObjectPtr<GWidget> m_active_widget;
  35. struct TabData {
  36. Rect rect(const Font&) const;
  37. int width(const Font&) const;
  38. String title;
  39. GWidget* widget { nullptr };
  40. };
  41. Vector<TabData> m_tabs;
  42. TabPosition m_tab_position { TabPosition::Top };
  43. int m_hovered_tab_index { -1 };
  44. };