menu_item_base.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include "ui/widgets/buttons.h"
  9. #include "ui/widgets/menu/menu.h"
  10. #include "ui/widgets/menu/menu_common.h"
  11. #include "styles/style_widgets.h"
  12. namespace Ui::Menu {
  13. class ItemBase : public RippleButton {
  14. public:
  15. ItemBase(not_null<RpWidget*> parent, const style::Menu &st);
  16. TriggeredSource lastTriggeredSource() const;
  17. rpl::producer<CallbackData> selects() const;
  18. void setSelected(
  19. bool selected,
  20. TriggeredSource source = TriggeredSource::Mouse);
  21. bool isSelected() const;
  22. int index() const;
  23. void setIndex(int index);
  24. void setClicked(TriggeredSource source = TriggeredSource::Mouse);
  25. rpl::producer<CallbackData> clicks() const;
  26. rpl::producer<int> minWidthValue() const;
  27. int minWidth() const;
  28. void setMinWidth(int w);
  29. virtual void handleKeyPress(not_null<QKeyEvent*> e) {
  30. }
  31. virtual not_null<QAction*> action() const = 0;
  32. virtual bool isEnabled() const = 0;
  33. virtual void finishAnimating();
  34. protected:
  35. void initResizeHook(rpl::producer<QSize> &&size);
  36. void enableMouseSelecting();
  37. void enableMouseSelecting(not_null<RpWidget*> widget);
  38. virtual int contentHeight() const = 0;
  39. private:
  40. int _index = -1;
  41. rpl::variable<bool> _selected = false;
  42. rpl::event_stream<> _clicks;
  43. rpl::variable<int> _minWidth = 0;
  44. TriggeredSource _lastTriggeredSource = TriggeredSource::Mouse;
  45. };
  46. } // namespace Ui::Menu