GTabWidget.h 1.4 KB

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