ValueSlider.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * Copyright (c) 2021, Marcus Nilsson <brainbomb@gmail.com>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/String.h>
  9. #include <LibGUI/AbstractSlider.h>
  10. namespace GUI {
  11. class ValueSlider : public AbstractSlider {
  12. C_OBJECT(ValueSlider);
  13. public:
  14. enum class KnobStyle {
  15. Wide,
  16. Thin,
  17. };
  18. virtual ~ValueSlider() override = default;
  19. void set_suffix(String suffix) { m_suffix = move(suffix); }
  20. void set_knob_style(KnobStyle knobstyle) { m_knob_style = knobstyle; }
  21. virtual void set_value(int value, AllowCallback = AllowCallback::Yes, DoClamp = DoClamp::Yes) override;
  22. protected:
  23. virtual void paint_event(PaintEvent&) override;
  24. virtual void mousedown_event(MouseEvent&) override;
  25. virtual void mousemove_event(MouseEvent&) override;
  26. virtual void mouseup_event(MouseEvent&) override;
  27. virtual void mousewheel_event(MouseEvent&) override;
  28. virtual void leave_event(Core::Event&) override;
  29. private:
  30. explicit ValueSlider(Gfx::Orientation = Gfx::Orientation::Horizontal, String suffix = {});
  31. DeprecatedString formatted_value() const;
  32. int value_at(Gfx::IntPoint position) const;
  33. Gfx::IntRect bar_rect() const;
  34. Gfx::IntRect knob_rect() const;
  35. int knob_length() const;
  36. virtual Optional<UISize> calculated_min_size() const override;
  37. virtual Optional<UISize> calculated_preferred_size() const override;
  38. String m_suffix {};
  39. Orientation m_orientation { Orientation::Horizontal };
  40. KnobStyle m_knob_style { KnobStyle::Thin };
  41. RefPtr<GUI::TextBox> m_textbox;
  42. bool m_dragging { false };
  43. bool m_hovered { false };
  44. };
  45. }