GTabWidget.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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() const { return m_active_widget; }
  16. void set_active_widget(GWidget*);
  17. int bar_height() const { return 21; }
  18. int container_padding() const { return 2; }
  19. void add_widget(const StringView&, GWidget*);
  20. protected:
  21. virtual void paint_event(GPaintEvent&) override;
  22. virtual void child_event(CChildEvent&) override;
  23. virtual void resize_event(GResizeEvent&) override;
  24. virtual void mousedown_event(GMouseEvent&) override;
  25. virtual void mousemove_event(GMouseEvent&) override;
  26. virtual void leave_event(CEvent&) override;
  27. private:
  28. Rect child_rect_for_size(const Size&) const;
  29. Rect button_rect(int index) const;
  30. Rect bar_rect() const;
  31. Rect container_rect() const;
  32. void update_bar();
  33. GWidget* m_active_widget { nullptr };
  34. struct TabData {
  35. Rect rect(const Font&) const;
  36. int width(const Font&) const;
  37. String title;
  38. GWidget* widget { nullptr };
  39. };
  40. Vector<TabData> m_tabs;
  41. TabPosition m_tab_position { TabPosition::Top };
  42. int m_hovered_tab_index { -1 };
  43. };