version 2.18.0

add GraphicRanges to graphic library
new graphic_analysis library
This commit is contained in:
2023-07-31 20:17:34 +03:00
parent 2a063a4f00
commit d98e8c1f30
24 changed files with 1524 additions and 383 deletions

View File

@@ -209,7 +209,7 @@ Graphic::~Graphic() {
delete buttons_menu;
#endif
delete conf;
// if (buffer != 0) delete buffer;
delete ui;
}

View File

@@ -16,7 +16,10 @@
<height>150</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
@@ -29,384 +32,388 @@
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>2</number>
</property>
<item row="0" column="1">
<widget class="QLabel" name="labelCaption">
<property name="textFormat">
<enum>Qt::RichText</enum>
<item>
<layout class="QGridLayout" name="gridLayout">
<property name="spacing">
<number>2</number>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="2">
<widget class="QWidget" name="widgetLeft" native="true">
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>-10</x>
<y>0</y>
<width>35</width>
<height>420</height>
</rect>
</property>
<layout class="QVBoxLayout" name="layoutButtons">
<property name="spacing">
<number>2</number>
</property>
<item>
<widget class="QToolButton" name="graphic_buttonAutofit">
<property name="toolTip">
<string>Autofit</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/view-autofit.png</normaloff>:/icons/view-autofit.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkGuides">
<property name="toolTip">
<string>Cursor axis</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/edit-guides.png</normaloff>:/icons/edit-guides.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonFullscreen">
<property name="toolTip">
<string>Fullscreen</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/view-fullscreen.png</normaloff>:/icons/view-fullscreen.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkBorderInputs">
<property name="toolTip">
<string>Border inputs</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/border-line.png</normaloff>:/icons/border-line.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkLegend">
<property name="toolTip">
<string>Legend</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/legend.png</normaloff>:/icons/legend.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkPause">
<property name="toolTip">
<string>Pause</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/media-playback-pause.png</normaloff>:/icons/media-playback-pause.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonConfigure">
<property name="toolTip">
<string>Configure ...</string>
</property>
<property name="icon">
<iconset resource="../application/qad_application.qrc">
<normaloff>:/icons/configure.png</normaloff>:/icons/configure.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonSaveMenu">
<property name="toolTip">
<string>Save image ...</string>
</property>
<property name="icon">
<iconset resource="../blockview/qad_blockview.qrc">
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonRecord">
<property name="toolTip">
<string>Record graphic</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/media-record.png</normaloff>:/icons/media-record.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonClear">
<property name="toolTip">
<string>Clear</string>
</property>
<property name="icon">
<iconset resource="../application/qad_application.qrc">
<normaloff>:/icons/edit-clear.png</normaloff>:/icons/edit-clear.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonClose">
<property name="toolTip">
<string>Close</string>
</property>
<property name="icon">
<iconset resource="../blockview/qad_blockview.qrc">
<normaloff>:/icons/dialog-close.png</normaloff>:/icons/dialog-close.png</iconset>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<widget class="QWidget" name="widgetRight" native="true"/>
</item>
<item row="3" column="1">
<widget class="QLabel" name="status">
<property name="text">
<string>Cursor: ( ; )</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="2" column="1" colspan="2">
<widget class="QWidget" name="widgetLX" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<item row="0" column="0" rowspan="2">
<widget class="QWidget" name="widgetLeft" native="true">
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>-10</x>
<y>0</y>
<width>35</width>
<height>420</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QVBoxLayout" name="layoutButtons">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<spacer name="horizontalSpacer">
<widget class="QToolButton" name="graphic_buttonAutofit">
<property name="toolTip">
<string>Autofit</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/view-autofit.png</normaloff>:/icons/view-autofit.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkGuides">
<property name="toolTip">
<string>Cursor axis</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/edit-guides.png</normaloff>:/icons/edit-guides.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonFullscreen">
<property name="toolTip">
<string>Fullscreen</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/view-fullscreen.png</normaloff>:/icons/view-fullscreen.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkBorderInputs">
<property name="toolTip">
<string>Border inputs</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/border-line.png</normaloff>:/icons/border-line.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkLegend">
<property name="toolTip">
<string>Legend</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/legend.png</normaloff>:/icons/legend.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_checkPause">
<property name="toolTip">
<string>Pause</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/media-playback-pause.png</normaloff>:/icons/media-playback-pause.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonConfigure">
<property name="toolTip">
<string>Configure ...</string>
</property>
<property name="icon">
<iconset resource="../application/qad_application.qrc">
<normaloff>:/icons/configure.png</normaloff>:/icons/configure.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonSaveMenu">
<property name="toolTip">
<string>Save image ...</string>
</property>
<property name="icon">
<iconset resource="../blockview/qad_blockview.qrc">
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonRecord">
<property name="toolTip">
<string>Record graphic</string>
</property>
<property name="icon">
<iconset resource="qad_graphic.qrc">
<normaloff>:/icons/media-record.png</normaloff>:/icons/media-record.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
<width>0</width>
<height>30</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="1" rowspan="2" colspan="2">
<layout class="QVBoxLayout" name="layoutCanvas">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="UWidget" name="canvas_raster" native="true">
<property name="mouseTracking">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0" rowspan="2">
<widget class="QWidget" name="widgetLY" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<spacer name="verticalSpacer_3">
<widget class="QToolButton" name="graphic_buttonClear">
<property name="toolTip">
<string>Clear</string>
</property>
<property name="icon">
<iconset resource="../application/qad_application.qrc">
<normaloff>:/icons/edit-clear.png</normaloff>:/icons/edit-clear.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="graphic_buttonClose">
<property name="toolTip">
<string>Close</string>
</property>
<property name="icon">
<iconset resource="../blockview/qad_blockview.qrc">
<normaloff>:/icons/dialog-close.png</normaloff>:/icons/dialog-close.png</iconset>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QWidget" name="widgetLegend" native="true">
<layout class="QGridLayout" name="layoutLegend">
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<property name="horizontalSpacing">
<number>4</number>
</property>
<property name="verticalSpacing">
<number>2</number>
</property>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="1">
<widget class="QWidget" name="scrollLegend" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="labelCaption">
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<widget class="QWidget" name="widgetRight" native="true"/>
</item>
<item row="1" column="1">
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="2" column="1" colspan="2">
<widget class="QWidget" name="widgetLX" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="1" rowspan="2" colspan="2">
<layout class="QVBoxLayout" name="layoutCanvas">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="UWidget" name="canvas_raster" native="true">
<property name="mouseTracking">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0" rowspan="2">
<widget class="QWidget" name="widgetLY" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QWidget" name="widgetLegend" native="true">
<layout class="QGridLayout" name="layoutLegend">
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<property name="horizontalSpacing">
<number>4</number>
</property>
<property name="verticalSpacing">
<number>2</number>
</property>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="status">
<property name="text">
<string>Cursor: ( ; )</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QWidget" name="scrollLegend" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
<action name="graphic_actionGuidesFree">

View File

@@ -0,0 +1,184 @@
#include <QTimer>
#include "graphic_ranges.h"
GraphicRanges::GraphicRanges(QWidget * parent): Graphic(parent) {
connect(this, SIGNAL(graphicPaintEvent(QPainter *)), this, SLOT(onPaintEvent(QPainter *)));
connect(this, SIGNAL(graphicMousePressEvent(QPointF, int)), this, SLOT(onMousePressEvent(QPointF, int)));
connect(this, SIGNAL(graphicMouseMoveEvent(QPointF, int)), this, SLOT(onMouseMoveEvent(QPointF, int)));
connect(this, SIGNAL(graphicMouseReleaseEvent(QPointF, int)), this, SLOT(onMouseReleaseEvent(QPointF, int)));
//setOpenGL(true);
range_start = range_end = 0.;
range_sel = request = false;
color_ = QColor(64, 192, 64, 128);
color_cur = QColor(64, 64, 192, 128);
}
GraphicRanges::~GraphicRanges() {
}
int GraphicRanges::addRange(double start, double end, QString name, QColor color) {
ranges_ << Range(start, end, name, color);
update();
return ranges_.size() - 1;
}
void GraphicRanges::replaceRange(int index, double start, double end) {
if (index < 0 || index >= ranges_.size()) return;
ranges_[index].start = start;
ranges_[index].end = end;
update();
}
GraphicRanges::Range GraphicRanges::removeRange(int index) {
if (index < 0 || index >= ranges_.size()) return Range();
Range ret = ranges_.takeAt(index);
update();
return ret;
}
void GraphicRanges::clearRanges() {
ranges_.clear();
update();
}
void GraphicRanges::clearRangesByColor(QColor c) {
for (int i = 0; i < ranges_.size(); ++i) {
if (ranges_[i].color == c) {
ranges_.removeAt(i);
--i;
}
}
update();
}
GraphicRanges::Range GraphicRanges::rangeAll() const {
Range ret;
for (int g = 0; g < graphicsCount(); ++g) {
const QPolygonF & gd(graphics[g].polyline);
if (!gd.isEmpty()) {
if (ret.isEmpty()) {
ret.start = gd.front().x();
ret.end = gd.back ().x();
} else {
ret.start = qMin(ret.start, gd.front().x());
ret.end = qMax(ret.end , gd.back ().x());
}
}
}
return ret;
}
GraphicRanges::Range GraphicRanges::rangeVisible() const {
Range ret;
ret.start = visualRect().left ();
ret.end = visualRect().right();
return ret;
}
void GraphicRanges::setCurrentRange(double start, double end) {
range_start = start;
range_end = end;
update();
}
void GraphicRanges::clearCurrentRange() {
range_start = range_end = 0.;
update();
}
GraphicRanges::Range GraphicRanges::currentRange() const {
return Range(range_start, range_end);
}
void GraphicRanges::clear() {
ranges_.clear();
Graphic::clear();
}
void GraphicRanges::drawRange(QPainter * p, const GraphicRanges::Range & r, QColor color) {
if (r.isEmpty()) return;
double cx[2] = {real2canvasX(r.start),
real2canvasX(r.end)};
p->fillRect(QRectF(cx[0], 0, cx[1] - cx[0], height()), color);
p->setPen(QPen(QColor(color.rgb()), 2, Qt::DotLine));
p->drawLine(cx[0], 0, cx[0], height());
p->drawLine(cx[1], 0, cx[1], height());
if (!r.name.isEmpty()) {
p->setPen(QPen(QColor(color.rgb()).darker(), 1, Qt::SolidLine));
p->drawText(QRectF(cx[0], 10, cx[1] - cx[0], height() - 10), Qt::AlignHCenter | Qt::AlignTop | Qt::TextDontClip, r.name);
}
}
void GraphicRanges::onPaintEvent(QPainter * p) {
p->save();
//QPen pen = p->pen();
for (const auto & r: ranges_) {
drawRange(p, r, r.hasColor() ? r.color : color_);
}
drawRange(p, Range(range_start, range_end), color_cur);
p->restore();
}
void GraphicRanges::onMousePressEvent(QPointF p, int b) {
if (b == Qt::RightButton) return;// request = false;
if (b != Qt::LeftButton || !request) return;
update();
range_sel = true;
range_start = range_end = p.x();
setNavigationEnabled(false);
}
void GraphicRanges::onMouseMoveEvent(QPointF p, int b) {
if (!range_sel) return;
range_end = p.x();
update();
}
void GraphicRanges::onMouseReleaseEvent(QPointF p, int b) {
if (b == Qt::RightButton && range_sel)
canvas->setCursor(Qt::SplitHCursor);
if (b != Qt::LeftButton) return;
if (range_sel) {
range_sel = request = false;
range_end = p.x();
if (range_start > range_end)
std::swap(range_start, range_end);
rangeSelected(range_start, range_end);
canvas->setCursor(Qt::ArrowCursor);
range_start = range_end = 0.;
}
QTimer::singleShot(10, [this](){setNavigationEnabled(true); update();});
}
void GraphicRanges::rangeRequest() {
request = true;
canvas->setCursor(Qt::SplitHCursor);
}
void GraphicRanges::cancelRangeRequest(bool with_nav) {
request = false;
canvas->setCursor(Qt::ArrowCursor);
if (with_nav)
QTimer::singleShot(10, [this](){setNavigationEnabled(true); update();});
}

View File

@@ -0,0 +1,87 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
#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<Range> 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<Range> 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

View File

@@ -2,7 +2,7 @@
#include "graphic.h"
#include <QtCore/QtPlugin>
#include <QtPlugin>
GraphicPlugin::GraphicPlugin(QObject * parent): QObject(parent) {
@@ -10,12 +10,9 @@ GraphicPlugin::GraphicPlugin(QObject * parent): QObject(parent) {
}
void GraphicPlugin::initialize(QDesignerFormEditorInterface * /* core */) {
void GraphicPlugin::initialize(QDesignerFormEditorInterface *) {
m_designer = true;
if (m_initialized) return;
// Add extension registrations, etc. here
m_initialized = true;
}

View File

@@ -3,7 +3,7 @@
#include "graphicplugin.h"
QADGraphic::QADGraphic(QObject * parent): QObject(parent) {
m_widgets.append(new GraphicPlugin(this));
m_widgets << new GraphicPlugin(this);
}