diff --git a/doc/images/examples_qmlpiechart.png b/doc/images/examples_qmlpiechart.png new file mode 100644 index 0000000000000000000000000000000000000000..bd347551ec2f44ab32321a30fc28a6ef6d20d534 GIT binary patch literal 32704 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 literal 0 Hc$@ -
  • ChartView
  • -
  • LineSeries
  • -
  • AreaSeries
  • -
  • ScatterSeries
  • -
  • SplineSeries
  • -
  • PieSeries
  • -
  • PieSlice
  • -
  • BarSeries
  • -
  • GroupedBarSeries
  • -
  • StackedBarSeries
  • -
  • PercentBarSeries
  • -
  • BarSet
  • -
  • Axis
  • -
  • Legend
  • -
  • XyPoint
  • - - \endraw + + + + + + + +
    ChartView and it's properties
    + +
    + + + + + + + +
    XY chart
    + +
    + + + + + + +
    Pie chart
    + +
    + + + + + + +
    Bar chart
    + +
    + \endraw */ diff --git a/examples/examples.pro b/examples/examples.pro index 4a2b699..5ceb93a 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -22,4 +22,5 @@ SUBDIRS += \ modeldata \ groupedbarchart \ legend \ - barmodelmapper + barmodelmapper \ + qmlpiechart diff --git a/examples/qmlpiechart/main.cpp b/examples/qmlpiechart/main.cpp new file mode 100644 index 0000000..a00f6c1 --- /dev/null +++ b/examples/qmlpiechart/main.cpp @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the Qt Commercial Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "qmlapplicationviewer.h" + +Q_DECL_EXPORT int main(int argc, char *argv[]) +{ + QScopedPointer app(createApplication(argc, argv)); + QScopedPointer viewer(QmlApplicationViewer::create()); + + viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer->setSource(QUrl("qrc:/qml/qmlpiechart/main.qml")); + viewer->showExpanded(); + + return app->exec(); +} diff --git a/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..8ba6e88 --- /dev/null +++ b/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,200 @@ +// checksum 0x78c version 0x60010 +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#include // MEEGO_EDITION_HARMATTAN + +#ifdef HARMATTAN_BOOSTER +#include +#endif + +#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 + +#include + +#if !defined(NO_JSDEBUGGER) +#include +#endif +#if !defined(NO_QMLOBSERVER) +#include +#endif + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QmlApplicationViewerPrivate(QDeclarativeView *view_) : view(view_) {} + + QString mainQmlFile; + QDeclarativeView *view; + friend class QmlApplicationViewer; + QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + QString pathInInstallDir; + const QString applicationDirPath = QCoreApplication::applicationDirPath(); + pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path); + + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) + : QDeclarativeView(parent) + , d(new QmlApplicationViewerPrivate(this)) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in +#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 +#if !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(d->view->engine()); +#endif +#if !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view); +#endif +#endif +} + +QmlApplicationViewer::QmlApplicationViewer(QDeclarativeView *view, QWidget *parent) + : QDeclarativeView(parent) + , d(new QmlApplicationViewerPrivate(view)) +{ + connect(view->engine(), SIGNAL(quit()), view, SLOT(close())); + view->setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in +#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 +#if !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(d->view->engine()); +#endif +#if !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view); +#endif +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete d; +} + +QmlApplicationViewer *QmlApplicationViewer::create() +{ +#ifdef HARMATTAN_BOOSTER + return new QmlApplicationViewer(MDeclarativeCache::qDeclarativeView(), 0); +#else + return new QmlApplicationViewer(); +#endif +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = d->adjustPath(file); + d->view->setSource(QUrl::fromLocalFile(d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + d->view->engine()->addImportPath(d->adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#if defined(Q_OS_SYMBIAN) + // If the version of Qt on the device is < 4.7.2, that attribute won't work + if (orientation != ScreenOrientationAuto) { + const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.')); + if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) { + qWarning("Screen orientation locking only supported with Qt 4.7.2 and above"); + return; + } + } +#endif // Q_OS_SYMBIAN + + Qt::WidgetAttribute attribute; + switch (orientation) { +#if QT_VERSION < 0x040702 + // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes + case ScreenOrientationLockPortrait: + attribute = static_cast(128); + break; + case ScreenOrientationLockLandscape: + attribute = static_cast(129); + break; + default: + case ScreenOrientationAuto: + attribute = static_cast(130); + break; +#else // QT_VERSION < 0x040702 + case ScreenOrientationLockPortrait: + attribute = Qt::WA_LockPortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_LockLandscapeOrientation; + break; + default: + case ScreenOrientationAuto: + attribute = Qt::WA_AutoOrientation; + break; +#endif // QT_VERSION < 0x040702 + }; + setAttribute(attribute, true); +} + +void QmlApplicationViewer::showExpanded() +{ +#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) + d->view->showFullScreen(); +#elif defined(Q_WS_MAEMO_5) + d->view->showMaximized(); +#else + d->view->show(); +#endif +} + +QApplication *createApplication(int &argc, char **argv) +{ +#ifdef HARMATTAN_BOOSTER + return MDeclarativeCache::qApplication(argc, argv); +#else + return new QApplication(argc, argv); +#endif +} diff --git a/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.h b/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..f8008f5 --- /dev/null +++ b/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,47 @@ +// checksum 0x82ed version 0x60010 +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + static QmlApplicationViewer *create(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + // Note that this will only have an effect on Symbian and Fremantle. + void setOrientation(ScreenOrientation orientation); + + void showExpanded(); + +private: + explicit QmlApplicationViewer(QDeclarativeView *view, QWidget *parent); + class QmlApplicationViewerPrivate *d; +}; + +QApplication *createApplication(int &argc, char **argv); + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..567c6dc --- /dev/null +++ b/examples/qmlpiechart/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,13 @@ +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +# Include JS debugger library if QMLJSDEBUGGER_PATH is set +!isEmpty(QMLJSDEBUGGER_PATH) { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) +} else { + DEFINES -= QMLJSDEBUGGER +} + diff --git a/examples/qmlpiechart/qmlpiechart.pro b/examples/qmlpiechart/qmlpiechart.pro new file mode 100644 index 0000000..c8e6fa3 --- /dev/null +++ b/examples/qmlpiechart/qmlpiechart.pro @@ -0,0 +1,8 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +RESOURCES += resources.qrc +SOURCES += main.cpp + +include(qmlapplicationviewer/qmlapplicationviewer.pri) diff --git a/examples/qmlpiechart/qmlpiechart.svg b/examples/qmlpiechart/qmlpiechart.svg new file mode 100644 index 0000000..566acfa --- /dev/null +++ b/examples/qmlpiechart/qmlpiechart.svg @@ -0,0 +1,93 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/qmlpiechart/resources.qrc b/examples/qmlpiechart/resources.qrc new file mode 100644 index 0000000..2501bcc --- /dev/null +++ b/examples/qmlpiechart/resources.qrc @@ -0,0 +1,5 @@ + + + qml/qmlpiechart/main.qml + +