GUI parts for DISCO-F746NG. GuiBase, Button, ButtonGroup, Label, BlinkLabel, NumericLabel, SeekBar, SeekbarGroup

Dependents:   F746_SD_GraphicEqualizer_ren0620

Fork of F746_GUI by 不韋 呂

SeekBar.hpp

Committer:
MikamiUitOpen
Date:
2016-04-12
Revision:
6:b8f197b0012c
Parent:
5:9c3ea4d4bc6b
Child:
9:c379410bda15

File content as of revision 6:b8f197b0012c:

//-----------------------------------------------------------
//  SeekBar class -- Header
//
//  2016/04/12, Copyright (c) 2016 MIKAMI, Naoki
//-----------------------------------------------------------

#ifndef F746_SEEKBAR_HPP
#define F746_SEEKBAR_HPP

#include "GuiBase.hpp"
#include "Label.hpp"

namespace Mikami
{
    class SeekBar : public GuiBase
    {
    public:
        enum Orientation { Holizontal, Vertical };

        // Constructor
        SeekBar(uint16_t x, uint16_t y, uint16_t length,
                float min, float max, float initialValue,
                Orientation hv = Holizontal,
                uint32_t thumbColor = LCD_COLOR_WHITE,
                uint16_t thumbSize = 30, uint16_t width = 4,
                uint32_t colorL = LCD_COLOR_LIGHTGRAY,
                uint32_t colorH = 0xFFB0B0B0,
                uint32_t backColor = GuiBase::ENUM_BACK)
            : GuiBase(x, y, Font12, 0, backColor, thumbColor),
              L_(length), W_(width),
              SIZE_(thumbSize), COLOR_L_(colorL), COLOR_H_(colorH),
              MIN_(min), MAX_(max), ORIENT_(hv),
              labelL(NULL), labelC(NULL), labelR(NULL),
              v_(initialValue), active_(true)
        {   Draw(initialValue); }

        // Constructor with scale value (only horizontal)
        SeekBar(uint16_t x, uint16_t y, uint16_t length,
                float min, float max, float initialValue,
                string left, string center, string right,
                uint32_t thumbColor = LCD_COLOR_WHITE,
                uint16_t thumbSize = 30, uint16_t width = 4,
                uint32_t colorL = LCD_COLOR_LIGHTGRAY,
                uint32_t colorH = 0xFFB0B0B0,
                uint32_t backColor = GuiBase::ENUM_BACK);

        bool Slide();
        float GetValue() { return v_; }
        int GetIntValue() { return Round(v_); }
        void Activate();
        void Inactivate();

    private:
        struct Point
        {
            uint16_t x, y;
            Point(uint16_t x0 = 0, uint16_t y0 = 0) : x(x0), y(y0) {}
        };

        const uint16_t L_, W_;
        const uint16_t SIZE_;           // Size of thumb
        const uint32_t COLOR_L_, COLOR_H_;
        const float MIN_, MAX_;
        const Orientation ORIENT_;

        Label *labelL, *labelC, *labelR;
        float v_;             // value of seekbar
        bool slided_;
        bool active_;

        void Draw(float value, bool fill = false);
        bool IsOnThumb(uint16_t &x, uint16_t &y);
        Point ToPoint(float value);
        float ToValue(Point pt);
        int Round(float x) { return x + 0.5f - (x < 0); }  // Round up on 5
        float Saturate(float value);

        // disallow copy constructor and assignment operator
        SeekBar(const SeekBar&);
        SeekBar& operator=(const SeekBar&);
    };
}
#endif  // F746_SEEKBAR_HPP