/* QAD - Qt ADvanced Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef GRAPHIC_RANGES_H #define GRAPHIC_RANGES_H #include "graphic.h" class QAD_GRAPHIC_EXPORT GraphicRanges: public Graphic { Q_OBJECT public: explicit GraphicRanges(QWidget * parent = 0); ~GraphicRanges(); struct QAD_GRAPHIC_EXPORT Range { Range(double s = 0., double e = 0., QString n = QString(), QColor c = Qt::black) { start = s; end = e; name = n; color = c; } bool isEmpty() const { return qFuzzyIsNull(start - end); } bool hasColor() const { return color != Qt::black; } QString name; QColor color; double start; double end; }; int addRange(double start, double end, QString name, QColor color = Qt::black); void replaceRange(int index, double start, double end); Range removeRange(int index); void clearRanges(); void clearRangesByColor(QColor c); QList ranges() const { return ranges_; } Range rangeAll() const; Range rangeVisible() const; bool isRangeRequested() const { return request; } void setCurrentRange(double start, double end); void clearCurrentRange(); Range currentRange() const; void clear(); protected: void drawRange(QPainter * p, const Range & r, QColor color); QList ranges_; QColor color_, color_cur; double range_start, range_end; bool range_sel, request; private slots: void onPaintEvent(QPainter * p); void onMousePressEvent(QPointF p, int b); void onMouseMoveEvent(QPointF p, int b); void onMouseReleaseEvent(QPointF p, int b); public slots: void rangeRequest(); void cancelRangeRequest(bool with_nav = true); signals: void rangeSelected(double start, double end); }; #endif