Rose
LinearScale.h
Go to the documentation of this file.
1 
8 #pragma once
9 
10 #include "Border.h"
11 #include "Frame.h"
12 #include "ImageView.h"
13 #include "Signals.h"
14 
15 namespace rose {
16 
17  using namespace std;
18 
19  enum class LinearScaleIndicator {
20  RoundThumb,
21  SquareThumb,
22  SingleChannel,
23  DualChannel,
24  };
25 
33  class LinearScale : public Frame {
34  protected:
35  LinearScaleIndicator mLinearScaleInd{};
36  SignalSerialNumber mSignalSerialNumber{};
38 
39  float mLowerBound0{0.f};
40  float mUpperBound0{1.f};
41  float mValue0{0.f};
42 
43  float mLowerBound1{0.f};
44  float mUpperBound1{1.f};
45  float mValue1{0.f};
46 
47  ImageId mImageId0{RoseImageInvalid};
48  ImageId mImageId1{RoseImageInvalid};
49 
50  Rectangle mImageRect0{};
51  Rectangle mImageRect1{};
52 
53  Rectangle getIndicatorRectangle(ImageId imageId);
54 
61  void setThumbOffset(float offset, float maxOffset);
62 
63 #if 0
64 
68  class LinearScaleBorder : public Border {
69  public:
70  LinearScaleBorder() = default;
71  ~LinearScaleBorder() override = default;
72  LinearScaleBorder(const LinearScaleBorder &) = delete;
73  LinearScaleBorder(LinearScaleBorder &&) = delete;
74  LinearScaleBorder& operator=(const LinearScaleBorder &) = delete;
75  LinearScaleBorder& operator=(LinearScaleBorder &&) = delete;
76 
81  explicit LinearScaleBorder(int border) : Border(border) {}
82 
86  void initializeComposite() override;
87 
91  Rectangle widgetLayout(sdl::Renderer &renderer, Rectangle available, uint layoutStage) override;
92 
96  void draw(sdl::Renderer &renderer, Rectangle parentRect) override;
97  };
98 #endif
99 
104  class LinearScaleImage : public ImageView {
105  public:
106  LinearScaleImage() = default;
107  ~LinearScaleImage() override = default;
108  LinearScaleImage(const LinearScaleImage &) = delete;
109  LinearScaleImage(LinearScaleImage &&) = delete;
110  LinearScaleImage& operator=(const LinearScaleImage &) = delete;
111  LinearScaleImage& operator=(LinearScaleImage &&) = delete;
112 
117  explicit LinearScaleImage(ImageId imageId) : ImageView(imageId) {}
118 
122  void initializeComposite() override;
123 
127  Rectangle widgetLayout(sdl::Renderer &renderer, Rectangle available, uint layoutStage) override;
128 
132  void draw(sdl::Renderer &renderer, Rectangle parentRect) override;
133  };
134 
135 // shared_ptr<LinearScaleBorder> mBorder{}; ///< The Border inside the Frame.
136  shared_ptr<LinearScaleImage> mIndicator{};
137 
138  public:
139  ~LinearScale() override = default;
140  LinearScale(const LinearScale &) = delete;
141  LinearScale& operator=(const LinearScale &) = delete;
142  LinearScale(LinearScale &&) = delete;
143  LinearScale& operator=(LinearScale &&) = delete;
144 
149  explicit LinearScale(LinearScaleIndicator linearScaleIndicator);
150 
158  LinearScale(float lowerBound, float upperBound, float value, LinearScaleIndicator linearScaleIndicator);
159 
163  void initializeComposite() override;
164 
168  Rectangle widgetLayout(sdl::Renderer &renderer, Rectangle available, uint layoutStage) override;
169 
173  void draw(sdl::Renderer &renderer, Rectangle parentRect) override;
174 
175  using ScaledSignal = std::array<float,3>;
176  std::shared_ptr<Slot<ScaledSignal>> rxScaledValue0{};
177 
178  std::shared_ptr<Slot<ScaledSignal>> rxScaledValue1{};
179 
180  void setOrientation(Orientation orientation) override {
181  mOrientation = orientation;
182  rose()->needsLayout();
183  }
184 
188  virtual void initializeBorderComposite();
189 
198  virtual Rectangle initialBorderLayout(sdl::Renderer &renderer, Rectangle available, Rectangle borderLayout);
199 
205  virtual void drawBorder(sdl::Renderer &renderer, Rectangle available);
206 
210  virtual void initializeImageComposite();
211 
220  virtual Rectangle initialImageLayout(sdl::Renderer &renderer, Rectangle available, Rectangle imageLayout);
221 
227  virtual void drawImage(sdl::Renderer &renderer, Rectangle available);
228  };
229 }
230 
Invalid image ID.
Definition: Constants.h:172
Display an image texture.
Definition: ImageView.h:20
void setOrientation(Orientation orientation) override
Receive scaled signals on channel 1.
Definition: LinearScale.h:180
The Indicator image of the LinearScale.
Definition: LinearScale.h:104
Not set to a valid value.
Definition: Frame.h:214
Orientation
Possible values for Widget orientation.
Definition: Types.h:41
A base class for Widgets that are base on a linear value input or output eg) Slider and Gauge...
Definition: LinearScale.h:33
A composite of a Position and a Size.
Definition: Types.h:307
Written as a workaround for an issue in the SDL2 Library.
Definition: Renderer.h:64
An image view Widget.
LinearScaleImage(ImageId imageId)
Constructor.
Definition: LinearScale.h:117
ToDo: There is an issue that the initial scroll interaction is lost if the click/press lands on a Wid...
Definition: CelestialOverlay.cpp:13
Establish an intra-application signaling protocol.