diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-08-14 10:52:49 +0300 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-08-14 10:57:38 +0300 |
commit | 18785c5e4a02d7c9da2f3f469c7aca6fbe644f10 (patch) | |
tree | b73531a9a029ac07f00f2c47399dd65b727449ca /src | |
parent | df50cbc19ac2b6061b2f1e630a8e5020a1fa2dd0 (diff) |
QML: Invokables to properties
Task-number: QTRD-2188
Change-Id: Id0edd2c1fb98621c0b3bf590ff1f0b7239fd7225
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/datavis3dqml2/declarativebars.cpp | 182 | ||||
-rw-r--r-- | src/datavis3dqml2/declarativebars_p.h | 143 | ||||
-rw-r--r-- | src/datavis3dqml2/declarativescatter.cpp | 129 | ||||
-rw-r--r-- | src/datavis3dqml2/declarativescatter_p.h | 100 |
4 files changed, 418 insertions, 136 deletions
diff --git a/src/datavis3dqml2/declarativebars.cpp b/src/datavis3dqml2/declarativebars.cpp index 04bb0adf..1f17d17b 100644 --- a/src/datavis3dqml2/declarativebars.cpp +++ b/src/datavis3dqml2/declarativebars.cpp @@ -23,10 +23,14 @@ QT_DATAVIS3D_BEGIN_NAMESPACE +const QString smoothString(QStringLiteral("Smooth")); + DeclarativeBars::DeclarativeBars(QQuickItem *parent) : QQuickItem(parent), m_shared(0), - m_initialisedSize(0, 0) + m_initialisedSize(0, 0), + m_cameraPreset(NoPreset), + m_theme(ThemeDefault) { setFlags(QQuickItem::ItemHasContents); setAcceptedMouseButtons(Qt::AllButtons); @@ -89,40 +93,155 @@ QSGNode *DeclarativeBars::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData return node; } -void DeclarativeBars::setBarSpecs(QSizeF thickness, QSizeF spacing, bool relative) +void DeclarativeBars::setupSampleSpace(int rowCount, int columnCount) { - m_shared->setBarSpecs(thickness, spacing, relative); + m_shared->setupSampleSpace(rowCount, columnCount); } -void DeclarativeBars::setBarType(MeshStyle style, bool smooth) +void DeclarativeBars::setBarColor(QColor baseColor, QColor heightColor, QColor depthColor, + bool uniform) { - m_shared->setBarType(style, smooth); + m_shared->setObjectColor(baseColor, heightColor, depthColor, uniform); } -void DeclarativeBars::setupSampleSpace(int rowCount, int columnCount) +void DeclarativeBars::setCameraPosition(qreal horizontal, qreal vertical, int distance) { - m_shared->setupSampleSpace(rowCount, columnCount); + m_shared->setCameraPosition(GLfloat(horizontal), GLfloat(vertical), GLint(distance)); +} + +// TODO needs proper axis support also in QML +void DeclarativeBars::setSegmentCount(int segmentCount, qreal step, qreal minimum) +{ + QValueAxis *axis = static_cast<QValueAxis *>(m_shared->axisY()); + if (axis) { + axis->setSegmentCount(segmentCount); + axis->setRange(minimum, segmentCount * step); + } +} + +void DeclarativeBars::setData(QAbstractItemModel *data) +{ + static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->setItemModel(data); +} + +QAbstractItemModel *DeclarativeBars::data() +{ + return static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->itemModel(); +} + +void DeclarativeBars::setMapping(QItemModelBarDataMapping *mapping) +{ + static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->setMapping(mapping); +} + +QItemModelBarDataMapping *DeclarativeBars::mapping() const +{ + return static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->mapping(); +} + +void DeclarativeBars::setBarThickness(QSizeF thickness) +{ + m_shared->setBarSpecs(thickness, barSpacing(), isBarSpacingRelative()); +} + +QSizeF DeclarativeBars::barThickness() +{ + return m_shared->barThickness(); +} + +void DeclarativeBars::setBarSpacing(QSizeF spacing) +{ + m_shared->setBarSpecs(barThickness(), spacing, isBarSpacingRelative()); +} + +QSizeF DeclarativeBars::barSpacing() +{ + return m_shared->barSpacing(); +} + +void DeclarativeBars::setBarSpacingRelative(bool relative) +{ + m_shared->setBarSpecs(barThickness(), barSpacing(), relative); +} + +bool DeclarativeBars::isBarSpacingRelative() +{ + return m_shared->isBarSpecRelative(); +} + +void DeclarativeBars::setBarType(MeshStyle style) +{ + QString objFile = m_shared->objFile(); + bool smooth = objFile.endsWith(smoothString); + m_shared->setBarType(QtDataVis3D::MeshStyle(style), smooth); +} + +DeclarativeBars::MeshStyle DeclarativeBars::barType() +{ + QString objFile = m_shared->objFile(); + if (objFile.contains("/sphere")) + return Spheres; + else + return Dots; +} + +void DeclarativeBars::setBarSmooth(bool smooth) +{ + QString objFile = m_shared->objFile(); + if (objFile.endsWith(smoothString)) { + if (smooth) + return; // Already smooth; do nothing + else // Rip Smooth off the end + objFile.resize(objFile.indexOf(smoothString)); + } else { + if (!smooth) // Already flat; do nothing + return; + else // Append Smooth to the end + objFile.append(smoothString); + } + m_shared->setMeshFileName(objFile); +} + +bool DeclarativeBars::barSmooth() +{ + QString objFile = m_shared->objFile(); + return objFile.endsWith(smoothString); +} + +void DeclarativeBars::setMeshFileName(const QString &objFileName) +{ + m_shared->setMeshFileName(objFileName); +} + +QString DeclarativeBars::meshFileName() +{ + return m_shared->objFile(); } void DeclarativeBars::setCameraPreset(CameraPreset preset) { - m_shared->setCameraPreset(preset); + // TODO: Implement correctly once "improved camera api" (QTRD-2122) is implemented + // We need to save this locally, as there are no getters for it in controller + m_cameraPreset = preset; + m_shared->setCameraPreset(QtDataVis3D::CameraPreset(preset)); } -void DeclarativeBars::setCameraPosition(qreal horizontal, qreal vertical, int distance) +DeclarativeBars::CameraPreset DeclarativeBars::cameraPreset() { - m_shared->setCameraPosition(GLfloat(horizontal), GLfloat(vertical), GLint(distance)); + return m_cameraPreset; } void DeclarativeBars::setTheme(ColorTheme theme) { - m_shared->setColorTheme(theme); + // TODO: Implement correctly once "user-modifiable themes" (QTRD-2120) is implemented + // We need to save this locally, as there are no getters for it in controller + m_theme = theme; + m_shared->setColorTheme(QtDataVis3D::ColorTheme(theme)); } -void DeclarativeBars::setBarColor(QColor baseColor, QColor heightColor, QColor depthColor, - bool uniform) +DeclarativeBars::ColorTheme DeclarativeBars::theme() { - m_shared->setObjectColor(baseColor, heightColor, depthColor, uniform); + return m_theme; } void DeclarativeBars::setFontSize(float fontsize) @@ -175,26 +294,6 @@ bool DeclarativeBars::isBackgroundVisible() return m_shared->backgroundEnabled(); } -// TODO needs proper axis support also in QML -void DeclarativeBars::setSegmentCount(int segmentCount, qreal step, qreal minimum) -{ - QValueAxis *axis = static_cast<QValueAxis *>(m_shared->axisY()); - if (axis) { - axis->setSegmentCount(segmentCount); - axis->setRange(minimum, segmentCount * step); - } -} - -void DeclarativeBars::setData(QAbstractItemModel *data) -{ - static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->setItemModel(data); -} - -QAbstractItemModel *DeclarativeBars::data() -{ - return static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->itemModel(); -} - void DeclarativeBars::setSelectionMode(DeclarativeBars::SelectionMode mode) { m_shared->setSelectionMode(QtDataVis3D::SelectionMode(mode)); @@ -215,16 +314,6 @@ DeclarativeBars::ShadowQuality DeclarativeBars::shadowQuality() return DeclarativeBars::ShadowQuality(m_shared->shadowQuality()); } -QItemModelBarDataMapping *DeclarativeBars::mapping() const -{ - return static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->mapping(); -} - -void DeclarativeBars::setMapping(QItemModelBarDataMapping *mapping) -{ - static_cast<QItemModelBarDataProxy *>(m_shared->dataProxy())->setMapping(mapping); -} - int DeclarativeBars::rows() const { return m_shared->rowCount(); @@ -245,11 +334,6 @@ void DeclarativeBars::setColumns(int columns) setupSampleSpace(rows(), columns); } -void DeclarativeBars::setMeshFileName(const QString &objFileName) -{ - m_shared->setMeshFileName(objFileName); -} - void DeclarativeBars::mousePressEvent(QMouseEvent *event) { QPoint mousePos = event->pos(); diff --git a/src/datavis3dqml2/declarativebars_p.h b/src/datavis3dqml2/declarativebars_p.h index 0abd8398..36f44542 100644 --- a/src/datavis3dqml2/declarativebars_p.h +++ b/src/datavis3dqml2/declarativebars_p.h @@ -44,19 +44,30 @@ class DeclarativeBars : public QQuickItem { Q_OBJECT Q_PROPERTY(QAbstractItemModel *data READ data WRITE setData) + Q_PROPERTY(QItemModelBarDataMapping *mapping READ mapping WRITE setMapping) Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) Q_PROPERTY(LabelTransparency labelTransparency READ labelTransparency WRITE setLabelTransparency) Q_PROPERTY(ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality) + Q_PROPERTY(MeshStyle barType READ barType WRITE setBarType) + Q_PROPERTY(CameraPreset cameraPreset READ cameraPreset WRITE setCameraPreset) + Q_PROPERTY(ColorTheme theme READ theme WRITE setTheme) + Q_PROPERTY(QSizeF barThickness READ barThickness WRITE setBarThickness) + Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing) + Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative) + Q_PROPERTY(bool barSmooth READ barSmooth WRITE setBarSmooth) + Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName) Q_PROPERTY(QFont font READ font WRITE setFont) Q_PROPERTY(float fontSize READ fontSize WRITE setFontSize) Q_PROPERTY(bool gridVisible READ isGridVisible WRITE setGridVisible) Q_PROPERTY(bool backgroundVisible READ isBackgroundVisible WRITE setBackgroundVisible) Q_PROPERTY(int rows READ rows WRITE setRows) Q_PROPERTY(int columns READ columns WRITE setColumns) - Q_PROPERTY(QItemModelBarDataMapping *mapping READ mapping WRITE setMapping) Q_ENUMS(SelectionMode) Q_ENUMS(ShadowQuality) Q_ENUMS(LabelTransparency) + Q_ENUMS(MeshStyle) + Q_ENUMS(CameraPreset) + Q_ENUMS(ColorTheme) public: // Duplicated here to be able to use the same enums @@ -83,6 +94,56 @@ public: TransparencyNoBackground // Draw just text on transparent background }; + enum MeshStyle { + Bars = 0, + Pyramids, + Cones, + Cylinders, + BevelBars, + Spheres, + Dots + }; + + enum CameraPreset { + NoPreset = -1, + PresetFrontLow = 0, + PresetFront, + PresetFrontHigh, + PresetLeftLow, + PresetLeft, + PresetLeftHigh, + PresetRightLow, + PresetRight, + PresetRightHigh, + PresetBehindLow, + PresetBehind, + PresetBehindHigh, + PresetIsometricLeft, + PresetIsometricLeftHigh, + PresetIsometricRight, + PresetIsometricRightHigh, + PresetDirectlyAbove, + PresetDirectlyAboveCW45, + PresetDirectlyAboveCCW45, + PresetFrontBelow, // These work only for graphs including negative values. + PresetLeftBelow, // They act as Preset...Low for positive-only values. + PresetRightBelow, + PresetBehindBelow, + PresetDirectlyBelow + }; + + enum ColorTheme { + ThemeDefault = -1, + ThemeSystem = 0, + ThemeBlueCerulean, + ThemeBlueIcy, + ThemeBlueNcs, + ThemeBrownSand, + ThemeDark, + ThemeHighContrast, + ThemeLight + }; + public: explicit DeclarativeBars(QQuickItem *parent = 0); ~DeclarativeBars(); @@ -90,48 +151,65 @@ public: void classBegin(); void componentComplete(); - // Add whole data set. - void setData(QAbstractItemModel *data); - QAbstractItemModel *data(); - - // bar thickness, spacing between bars, and is spacing relative to thickness or absolute - // y -component sets the thickness/spacing of z -direction - // With relative 0.0f means side-to-side, 1.0f = one thickness in between - Q_INVOKABLE void setBarSpecs(QSizeF thickness = QSizeF(1.0f, 1.0f), - QSizeF spacing = QSizeF(1.0f, 1.0f), - bool relative = true); - - // bar type; bars (=cubes), pyramids, cones, cylinders, etc. - Q_INVOKABLE void setBarType(MeshStyle style, bool smooth = false); - - // override bar type with own mesh - Q_INVOKABLE void setMeshFileName(const QString &objFileName); - - // how many samples per row and column + // how many samples per row and column Q_INVOKABLE void setupSampleSpace(int rowCount, int columnCount); - // Select preset camera placement - Q_INVOKABLE void setCameraPreset(CameraPreset preset); + // Set color if you don't want to use themes. Set uniform to false if you want the (height) + // color to change from bottom to top + Q_INVOKABLE void setBarColor(QColor baseColor, QColor heightColor, QColor depthColor, + bool uniform = true); // Set camera rotation if you don't want to use the presets (in horizontal (-180...180) and // vertical (0...90) (or (-90...90) if there are negative values) angles and distance in // percentage (10...500)) Q_INVOKABLE void setCameraPosition(qreal horizontal, qreal vertical, int distance); - // Set theme (bar colors, shaders, window color, background colors, light intensity and text - // colors are affected) - Q_INVOKABLE void setTheme(ColorTheme theme); - - // Set color if you don't want to use themes. Set uniform to false if you want the (height) - // color to change from bottom to top - Q_INVOKABLE void setBarColor(QColor baseColor, QColor heightColor, QColor depthColor, - bool uniform = true); - // Set segment count and step. Note; segmentCount * step should be the maximum possible value of data // set. Minimum is the absolute minimum possible value a bar can have. This is especially // important to set if values can be negative. Q_INVOKABLE void setSegmentCount(int segmentCount, qreal step, qreal minimum); + // Add whole data set. + void setData(QAbstractItemModel *data); + QAbstractItemModel *data(); + + QItemModelBarDataMapping *mapping() const; + void setMapping(QItemModelBarDataMapping *mapping); + + // Set bar thickness. Y -component sets the thickness of z -direction. + void setBarThickness(QSizeF thickness); + QSizeF barThickness(); + + // Set spacing between bars. Y -component sets the spacing of z -direction. + // If spacing is relative, 0.0f means side-to-side and 1.0f = one thickness in between. + void setBarSpacing(QSizeF spacing); + QSizeF barSpacing(); + + // Set bar spacing relative to thickness or absolute + void setBarSpacingRelative(bool relative); + bool isBarSpacingRelative(); + + // Bar type + void setBarType(MeshStyle style); + MeshStyle barType(); + + // Bar smoothing + void setBarSmooth(bool smooth); + bool barSmooth(); + + // override object type with own mesh + void setMeshFileName(const QString &objFileName); + QString meshFileName(); + + // Select preset camera placement + void setCameraPreset(CameraPreset preset); + CameraPreset cameraPreset(); + + // Set theme (object colors, shaders, window color, background colors, light intensity and text + // colors are affected) + void setTheme(ColorTheme theme); + ColorTheme theme(); + // Change selection mode; single bar, bar and row, bar and column, or all void setSelectionMode(SelectionMode mode); SelectionMode selectionMode(); @@ -160,9 +238,6 @@ public: void setShadowQuality(ShadowQuality quality); ShadowQuality shadowQuality(); - QItemModelBarDataMapping *mapping() const; - void setMapping(QItemModelBarDataMapping *mapping); - int rows() const; void setRows(int rows); @@ -189,6 +264,8 @@ protected: private: QSize m_initialisedSize; + CameraPreset m_cameraPreset; + ColorTheme m_theme; }; QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3dqml2/declarativescatter.cpp b/src/datavis3dqml2/declarativescatter.cpp index 17015a2b..ad5ecd26 100644 --- a/src/datavis3dqml2/declarativescatter.cpp +++ b/src/datavis3dqml2/declarativescatter.cpp @@ -22,10 +22,14 @@ QT_DATAVIS3D_BEGIN_NAMESPACE +const QString smoothString(QStringLiteral("Smooth")); + DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) : QQuickItem(parent), m_shared(0), - m_initialisedSize(0, 0) + m_initialisedSize(0, 0), + m_cameraPreset(NoPreset), + m_theme(ThemeDefault) { setFlags(QQuickItem::ItemHasContents); setAcceptedMouseButtons(Qt::AllButtons); @@ -88,30 +92,110 @@ QSGNode *DeclarativeScatter::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa return node; } -void DeclarativeScatter::setObjectType(MeshStyle style, bool smooth) +void DeclarativeScatter::setCameraPosition(qreal horizontal, qreal vertical, int distance) +{ + m_shared->setCameraPosition(GLfloat(horizontal), GLfloat(vertical), GLint(distance)); +} + +void DeclarativeScatter::setObjectColor(QColor baseColor, QColor heightColor, QColor depthColor, + bool uniform) +{ + m_shared->setObjectColor(baseColor, heightColor, depthColor, uniform); +} + +void DeclarativeScatter::setData(QAbstractItemModel *data) +{ + static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->setItemModel(data); +} + +QAbstractItemModel *DeclarativeScatter::data() +{ + return static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->itemModel(); +} + +void DeclarativeScatter::setMapping(QItemModelScatterDataMapping *mapping) +{ + static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->setMapping(mapping); +} + +QItemModelScatterDataMapping *DeclarativeScatter::mapping() const +{ + return static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->mapping(); +} + +void DeclarativeScatter::setObjectType(MeshStyle style) +{ + QString objFile = m_shared->objFile(); + bool smooth = objFile.endsWith(smoothString); + m_shared->setObjectType(QtDataVis3D::MeshStyle(style), smooth); +} + +DeclarativeScatter::MeshStyle DeclarativeScatter::objectType() +{ + QString objFile = m_shared->objFile(); + if (objFile.contains("/sphere")) + return Spheres; + else + return Dots; +} + +void DeclarativeScatter::setObjectSmooth(bool smooth) +{ + QString objFile = m_shared->objFile(); + if (objFile.endsWith(smoothString)) { + if (smooth) + return; // Already smooth; do nothing + else // Rip Smooth off the end + objFile.resize(objFile.indexOf(smoothString)); + } else { + if (!smooth) // Already flat; do nothing + return; + else // Append Smooth to the end + objFile.append(smoothString); + } + m_shared->setMeshFileName(objFile); +} + +bool DeclarativeScatter::objectSmooth() +{ + QString objFile = m_shared->objFile(); + return objFile.endsWith(smoothString); +} + +void DeclarativeScatter::setMeshFileName(const QString &objFileName) +{ + m_shared->setMeshFileName(objFileName); +} + +QString DeclarativeScatter::meshFileName() { - m_shared->setObjectType(style, smooth); + return m_shared->objFile(); } void DeclarativeScatter::setCameraPreset(CameraPreset preset) { - m_shared->setCameraPreset(preset); + // TODO: Implement correctly once "improved camera api" (QTRD-2122) is implemented + // We need to save this locally, as there are no getters for it in controller + m_cameraPreset = preset; + m_shared->setCameraPreset(QtDataVis3D::CameraPreset(preset)); } -void DeclarativeScatter::setCameraPosition(qreal horizontal, qreal vertical, int distance) +DeclarativeScatter::CameraPreset DeclarativeScatter::cameraPreset() { - m_shared->setCameraPosition(GLfloat(horizontal), GLfloat(vertical), GLint(distance)); + return m_cameraPreset; } void DeclarativeScatter::setTheme(ColorTheme theme) { - m_shared->setColorTheme(theme); + // TODO: Implement correctly once "user-modifiable themes" (QTRD-2120) is implemented + // We need to save this locally, as there are no getters for it in controller + m_theme = theme; + m_shared->setColorTheme(QtDataVis3D::ColorTheme(theme)); } -void DeclarativeScatter::setObjectColor(QColor baseColor, QColor heightColor, QColor depthColor, - bool uniform) +DeclarativeScatter::ColorTheme DeclarativeScatter::theme() { - m_shared->setObjectColor(baseColor, heightColor, depthColor, uniform); + return m_theme; } void DeclarativeScatter::setFontSize(float fontsize) @@ -164,16 +248,6 @@ bool DeclarativeScatter::isBackgroundVisible() return m_shared->backgroundEnabled(); } -void DeclarativeScatter::setData(QAbstractItemModel *data) -{ - static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->setItemModel(data); -} - -QAbstractItemModel *DeclarativeScatter::data() -{ - return static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->itemModel(); -} - void DeclarativeScatter::setSelectionMode(DeclarativeScatter::SelectionMode mode) { m_shared->setSelectionMode(QtDataVis3D::SelectionMode(mode)); @@ -194,21 +268,6 @@ DeclarativeScatter::ShadowQuality DeclarativeScatter::shadowQuality() return DeclarativeScatter::ShadowQuality(m_shared->shadowQuality()); } -QItemModelScatterDataMapping *DeclarativeScatter::mapping() const -{ - return static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->mapping(); -} - -void DeclarativeScatter::setMapping(QItemModelScatterDataMapping *mapping) -{ - static_cast<QItemModelScatterDataProxy *>(m_shared->dataProxy())->setMapping(mapping); -} - -void DeclarativeScatter::setMeshFileName(const QString &objFileName) -{ - m_shared->setMeshFileName(objFileName); -} - void DeclarativeScatter::mousePressEvent(QMouseEvent *event) { QPoint mousePos = event->pos(); diff --git a/src/datavis3dqml2/declarativescatter_p.h b/src/datavis3dqml2/declarativescatter_p.h index d64c6811..76a8eca2 100644 --- a/src/datavis3dqml2/declarativescatter_p.h +++ b/src/datavis3dqml2/declarativescatter_p.h @@ -44,17 +44,25 @@ class DeclarativeScatter : public QQuickItem { Q_OBJECT Q_PROPERTY(QAbstractItemModel *data READ data WRITE setData) + Q_PROPERTY(QItemModelScatterDataMapping *mapping READ mapping WRITE setMapping) Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) Q_PROPERTY(LabelTransparency labelTransparency READ labelTransparency WRITE setLabelTransparency) Q_PROPERTY(ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality) + Q_PROPERTY(MeshStyle objectType READ objectType WRITE setObjectType) + Q_PROPERTY(CameraPreset cameraPreset READ cameraPreset WRITE setCameraPreset) + Q_PROPERTY(ColorTheme theme READ theme WRITE setTheme) + Q_PROPERTY(bool objectSmooth READ objectSmooth WRITE setObjectSmooth) + Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName) Q_PROPERTY(QFont font READ font WRITE setFont) Q_PROPERTY(float fontSize READ fontSize WRITE setFontSize) Q_PROPERTY(bool gridVisible READ isGridVisible WRITE setGridVisible) Q_PROPERTY(bool backgroundVisible READ isBackgroundVisible WRITE setBackgroundVisible) - Q_PROPERTY(QItemModelScatterDataMapping *mapping READ mapping WRITE setMapping) Q_ENUMS(SelectionMode) Q_ENUMS(ShadowQuality) Q_ENUMS(LabelTransparency) + Q_ENUMS(MeshStyle) + Q_ENUMS(CameraPreset) + Q_ENUMS(ColorTheme) public: // Duplicated here to be able to use the same enums @@ -81,6 +89,51 @@ public: TransparencyNoBackground // Draw just text on transparent background }; + enum MeshStyle { + Spheres = 5, + Dots + }; + + enum CameraPreset { + NoPreset = -1, + PresetFrontLow = 0, + PresetFront, + PresetFrontHigh, + PresetLeftLow, + PresetLeft, + PresetLeftHigh, + PresetRightLow, + PresetRight, + PresetRightHigh, + PresetBehindLow, + PresetBehind, + PresetBehindHigh, + PresetIsometricLeft, + PresetIsometricLeftHigh, + PresetIsometricRight, + PresetIsometricRightHigh, + PresetDirectlyAbove, + PresetDirectlyAboveCW45, + PresetDirectlyAboveCCW45, + PresetFrontBelow, // These work only for graphs including negative values. + PresetLeftBelow, // They act as Preset...Low for positive-only values. + PresetRightBelow, + PresetBehindBelow, + PresetDirectlyBelow + }; + + enum ColorTheme { + ThemeDefault = -1, + ThemeSystem = 0, + ThemeBlueCerulean, + ThemeBlueIcy, + ThemeBlueNcs, + ThemeBrownSand, + ThemeDark, + ThemeHighContrast, + ThemeLight + }; + public: explicit DeclarativeScatter(QQuickItem *parent = 0); ~DeclarativeScatter(); @@ -88,32 +141,42 @@ public: void classBegin(); void componentComplete(); + // Set camera rotation if you don't want to use the presets (in horizontal (-180...180) and + // vertical (-90...90) angles and distance in percentage (10...500)) + Q_INVOKABLE void setCameraPosition(qreal horizontal, qreal vertical, int distance); + + // Set color if you don't want to use themes. Set uniform to false if you want the (height) + // color to change from bottom to top + Q_INVOKABLE void setObjectColor(QColor baseColor, QColor heightColor, QColor depthColor, + bool uniform = true); + // Add whole data set. void setData(QAbstractItemModel *data); QAbstractItemModel *data(); - // dot type - Q_INVOKABLE void setObjectType(MeshStyle style, bool smooth = false); + QItemModelScatterDataMapping *mapping() const; + void setMapping(QItemModelScatterDataMapping *mapping); + + // Object type + void setObjectType(MeshStyle style); + MeshStyle objectType(); + + // Object smoothing + void setObjectSmooth(bool smooth); + bool objectSmooth(); // override object type with own mesh - Q_INVOKABLE void setMeshFileName(const QString &objFileName); + void setMeshFileName(const QString &objFileName); + QString meshFileName(); // Select preset camera placement - Q_INVOKABLE void setCameraPreset(CameraPreset preset); - - // Set camera rotation if you don't want to use the presets (in horizontal (-180...180) and - // vertical (0...90) (or (-90...90) if there are negative values) angles and distance in - // percentage (10...500)) - Q_INVOKABLE void setCameraPosition(qreal horizontal, qreal vertical, int distance); + void setCameraPreset(CameraPreset preset); + CameraPreset cameraPreset(); // Set theme (object colors, shaders, window color, background colors, light intensity and text // colors are affected) - Q_INVOKABLE void setTheme(ColorTheme theme); - - // Set color if you don't want to use themes. Set uniform to false if you want the (height) - // color to change from bottom to top - Q_INVOKABLE void setObjectColor(QColor baseColor, QColor heightColor, QColor depthColor, - bool uniform = true); + void setTheme(ColorTheme theme); + ColorTheme theme(); // Change selection mode void setSelectionMode(SelectionMode mode); @@ -143,9 +206,6 @@ public: void setShadowQuality(ShadowQuality quality); ShadowQuality shadowQuality(); - QItemModelScatterDataMapping *mapping() const; - void setMapping(QItemModelScatterDataMapping *mapping); - public slots: // Used to detect when shadow quality changes autonomously due to e.g. resizing. void handleShadowQualityUpdate(QtDataVis3D::ShadowQuality quality); @@ -165,6 +225,8 @@ protected: private: QSize m_initialisedSize; + CameraPreset m_cameraPreset; + ColorTheme m_theme; }; QT_DATAVIS3D_END_NAMESPACE |