/*===================================================================== QGroundControl Open Source Ground Control Station (c) 2009, 2014 QGROUNDCONTROL PROJECT This file is part of the QGROUNDCONTROL project QGROUNDCONTROL is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. QGROUNDCONTROL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QGROUNDCONTROL. If not, see . ======================================================================*/ /// @file /// @brief Widget which shows current RC value on a bar with tick marks. /// @author Don Gagne #ifndef RCValueWidget_H #define RCValueWidget_H #include #include /// @brief Widget which shows current RC value on a bar with tick marks. class RCValueWidget : public QWidget { Q_OBJECT public: explicit RCValueWidget(QWidget *parent = 0); /// @brief Set the widget to display small value bar. void setSmallMode(void) { _smallMode = true; } /// @brief Set the current RC value to display void setValue(int value); /// @brief Set the current RC Value, Minimum RC Value and Maximum RC Value void setValueAndMinMax(int val, int min, int max); void setMinMax(int min, int max); void setMin(int min); void setMax(int max); /// @brief Set whether the Min range value is valid or not. void setMinValid(bool valid); /// @brief Set whether the Max range value is valid or not. void setMaxValid(bool valid); /// @brief Sets the Trim value for the channel void setTrim(int value); /// @brief Sets the reversed state of channel /// @param reversed true: channel is reversed void setReversed(bool reversed) { _reversed = reversed; } int value(void) { return _value; } ///< Returns the current RC Value set in the control int min(void) { return _min; } ///< Returns the min value set in the control int max(void) { return _max; } ///< Returns the max values set in the control int trim(void) { return _trim; } ///< Returns the trim value set in the control void showMinMax(bool show); bool isMinMaxShown() { return _showMinMax; } bool isMinValid(void) { return _minValid; } bool isMaxValid(void) { return _maxValid; } void showTrim(bool show); bool isTrimShown() { return _showTrim; } protected: virtual void paintEvent(QPaintEvent *event); private: void _drawValuePointer(QPainter* painter, int xTip, int yTip, int height, bool rightSideUp); bool _smallMode; ///< true: draw small value bar, false: draw normal value bar int _value; ///< Current RC value int _min; ///< Min RC value int _max; ///< Max RC value int _trim; ///< RC Value for Trim position bool _reversed; ///< true: channel is reversed bool _minValid; ///< true: minimum value is valid bool _maxValid; ///< true: maximum value is valid bool _showMinMax; ///< true: show min max values on display bool _showTrim; ///< true: show trim value on display static const int _centerValue = 1500; ///< RC Value which is at center static const int _maxDeltaRange = 650; ///< Delta around center value which is the max range for widget static const int _minRange = _centerValue - _maxDeltaRange; ///< Smallest value widget can display static const int _maxRange = _centerValue + _maxDeltaRange; ///< Largest value widget can display static const int _barHeight = 7; QColor _fgColor; }; #endif