Statusbar.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibGUI/Button.h>
  9. #include <LibGUI/Painter.h>
  10. #include <LibGUI/Widget.h>
  11. #include <LibGfx/Palette.h>
  12. namespace GUI {
  13. class Statusbar : public Widget {
  14. C_OBJECT(Statusbar)
  15. public:
  16. virtual ~Statusbar() override = default;
  17. String text(size_t index = 0) const;
  18. void set_text(String);
  19. void set_text(size_t index, String);
  20. void set_override_text(String);
  21. class Segment final : public Button {
  22. C_OBJECT(Segment)
  23. friend class Statusbar;
  24. public:
  25. enum class Mode {
  26. Proportional,
  27. Fixed,
  28. Auto,
  29. };
  30. void set_clickable(bool b) { m_clickable = b; }
  31. bool is_clickable() { return m_clickable; }
  32. void set_mode(Mode mode) { m_mode = mode; }
  33. Mode mode() const { return m_mode; }
  34. protected:
  35. virtual void paint_event(PaintEvent& event) override;
  36. virtual void mousedown_event(MouseEvent& event) override;
  37. virtual void mouseup_event(MouseEvent& event) override;
  38. private:
  39. Segment();
  40. void set_frame_shape(Gfx::FrameShape shape) { m_shape = shape; }
  41. void set_restored_width(int width) { m_restored_width = width; }
  42. int restored_width() const { return m_restored_width; }
  43. String const& override_text() const { return m_override_text; }
  44. String const& restored_text() const { return m_restored_text; }
  45. String m_override_text;
  46. String m_restored_text;
  47. bool m_clickable { false };
  48. int m_restored_width { 0 };
  49. int m_thickness { 1 };
  50. Mode m_mode { Mode::Proportional };
  51. Gfx::FrameShape m_shape { Gfx::FrameShape::Panel };
  52. };
  53. Segment& segment(size_t index) { return m_segments.at(index); }
  54. protected:
  55. explicit Statusbar(int segment_count = 1);
  56. virtual void paint_event(PaintEvent&) override;
  57. virtual void resize_event(ResizeEvent&) override;
  58. private:
  59. void set_segment_count(size_t);
  60. size_t segment_count() const { return m_segments.size(); }
  61. void update_segment(size_t);
  62. NonnullRefPtr<Segment> create_segment();
  63. NonnullRefPtrVector<Segment> m_segments;
  64. RefPtr<ResizeCorner> m_corner;
  65. };
  66. }