diff options
Diffstat (limited to 'testapp/main.cpp')
-rw-r--r-- | testapp/main.cpp | 188 |
1 files changed, 134 insertions, 54 deletions
diff --git a/testapp/main.cpp b/testapp/main.cpp index 92fe4f3..c54d98d 100644 --- a/testapp/main.cpp +++ b/testapp/main.cpp @@ -2,93 +2,173 @@ #include <QApplication> #include <QListWidget> #include <QListWidgetItem> -#include <QTabWidget> #include <QSplitter> #include <QStackedWidget> #include <QSignalMapper> #include <QMainWindow> #include <QMenuBar> #include <QActionGroup> +#include <QWebView> +#include <QTimer> #ifdef Q_WS_MAEMO_5 # include <QAbstractKineticScroller> #endif #include "qscrollareakineticscroller.h" +#include "qwebviewkineticscroller.h" #include "settingswidget.h" #include "plotwidget.h" -int main(int argc, char **argv) +bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event) { - QApplication a(argc, argv); - - QListWidget *list = new QListWidget(); + return QCoreApplication::sendSpontaneousEvent(receiver, event); +} - for (int i = 0; i < 1000; ++i) - new QListWidgetItem(QString("This is a test text %1 %2").arg(i).arg(QString("--------").left(i % 8)), list); +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(bool smallscreen) + : QMainWindow() + { + m_list = new QListWidget(); + m_list_scroller = installKineticScroller(m_list); - // remove the old kinetic scroller if any - QAbstractKineticScroller *oldScroller = list->property("kineticScroller").value<QAbstractKineticScroller *>(); - oldScroller->setEnabled(false); + for (int i = 0; i < 1000; ++i) + new QListWidgetItem(QString("This is a test text %1 %2").arg(i).arg(QString("--------").left(i % 8)), m_list); - // set a new kinetic scroller - QScrollAreaKineticScroller *newScroller = new QScrollAreaKineticScroller(); - newScroller->setWidget(list); + m_web = new QWebView(); + m_web_scroller = installKineticScroller(m_web); -#if defined(Q_WS_MAEMO_5) || defined(Q_WS_S60) || defined(Q_WS_WINCE) - bool smallScreen = true; -#else - bool smallScreen = false; -#endif + QTimer::singleShot(1000, this, SLOT(loadUrl())); - QWidget *settings = new SettingsWidget(newScroller, smallScreen); - QWidget *plot = new PlotWidget(newScroller); + m_settings = new SettingsWidget(smallscreen); + m_plot = new PlotWidget(smallscreen); - if (smallScreen) { - QMainWindow *top = new QMainWindow(); QStackedWidget *stack = new QStackedWidget(); - stack->addWidget(list); - stack->addWidget(settings); - stack->addWidget(plot); - top->setCentralWidget(stack); + stack->addWidget(m_list); + stack->addWidget(m_web); - QActionGroup *pages = new QActionGroup(top); + QActionGroup *pages = new QActionGroup(this); pages->setExclusive(true); - QSignalMapper *mapper = new QSignalMapper(top); - QObject::connect(mapper, SIGNAL(mapped(int)), stack, SLOT(setCurrentIndex(int))); + QSignalMapper *mapper = new QSignalMapper(this); + connect(mapper, SIGNAL(mapped(int)), stack, SLOT(setCurrentIndex(int))); + + createAction("List", pages, mapper, 0, true); + createAction("Web", pages, mapper, 1); + + if (smallscreen) { + stack->addWidget(m_settings); + stack->addWidget(m_plot); + + createAction("Settings", pages, mapper, 2); + createAction("Plot", pages, mapper, 3); + + setCentralWidget(stack); + } else { + QSplitter *split = new QSplitter(); + split->addWidget(stack); + split->addWidget(m_settings); + split->addWidget(m_plot); + setCentralWidget(split); + } + menuBar()->addMenu(QLatin1String("Pages"))->addActions(pages->actions()); + connect(stack, SIGNAL(currentChanged(int)), this, SLOT(pageChanged(int))); + pageChanged(0); + } - QAction *a = new QAction(QLatin1String("List"), pages); - a->setCheckable(true); - a->setChecked(true); - mapper->setMapping(a, 0); - QObject::connect(a, SIGNAL(toggled(bool)), mapper, SLOT(map())); +private slots: + void pageChanged(int page) + { + if (page < 0 || page > 1) + return; + switch (page) { + case 0: + m_settings->setKineticScroller(m_list_scroller); + m_plot->setKineticScroller(m_list_scroller); + break; + case 1: + m_settings->setKineticScroller(m_web_scroller); + m_plot->setKineticScroller(m_web_scroller); + break; + default: + break; + } + } - a = new QAction(QLatin1String("Config"), pages); - a->setCheckable(true); - a->setChecked(false); - a->setMenuRole(QAction::NoRole); - mapper->setMapping(a, 1); - QObject::connect(a, SIGNAL(toggled(bool)), mapper, SLOT(map())); + void loadUrl() + { + m_web->load(QUrl("http://www.heise.de")); + } - a = new QAction(QLatin1String("Plot"), pages); +private: + QAction *createAction(const char *text, QActionGroup *group, QSignalMapper *mapper, int mapping, bool checked = false) + { + QAction *a = new QAction(QLatin1String(text), group); a->setCheckable(true); - a->setChecked(false); - mapper->setMapping(a, 2); - QObject::connect(a, SIGNAL(toggled(bool)), mapper, SLOT(map())); - - top->menuBar()->addMenu("Pages")->addActions(pages->actions()); - top->showMaximized(); - } else { - QSplitter *split = new QSplitter(); - split->addWidget(list); - split->addWidget(settings); - split->addWidget(plot); - split->show(); + a->setChecked(checked); #if defined(Q_WS_MAC) - split->raise(); + a->setMenuRole(QAction::NoRole); +#endif + mapper->setMapping(a, mapping); + connect(a, SIGNAL(toggled(bool)), mapper, SLOT(map())); + return a; + } + + QKineticScroller *installKineticScroller(QWidget *w) + { +#if defined(Q_WS_MAEMO_5) + // remove the old kinetic scroller if any + QAbstractKineticScroller *oldScroller = w->property("kineticScroller").value<QAbstractKineticScroller *>(); + oldScroller->setEnabled(false); #endif + // set a new kinetic scroller + if (QAbstractScrollArea *area = qobject_cast<QAbstractScrollArea *>(w)) { + QScrollAreaKineticScroller *newScroller = new QScrollAreaKineticScroller(); + newScroller->setWidget(area); + return newScroller; + } else if (QWebView *web = qobject_cast<QWebView *>(w)) { + QWebViewKineticScroller *newScroller = new QWebViewKineticScroller(); + newScroller->setWidget(web); + return newScroller; + } else { + return 0; + } } +private: + QListWidget *m_list; + QWebView *m_web; + QKineticScroller *m_list_scroller, *m_web_scroller; + SettingsWidget *m_settings; + PlotWidget *m_plot; +}; + +int main(int argc, char **argv) +{ + QApplication a(argc, argv); + +#if defined(Q_WS_MAEMO_5) || defined(Q_WS_S60) || defined(Q_WS_WINCE) + bool smallscreen = true; +#else + bool smallscreen = false; +#endif + + if (a.arguments().contains(QLatin1String("--small"))) + smallscreen = true; + + MainWindow *mw = new MainWindow(smallscreen); + if (smallscreen) + mw->showMaximized(); + else + mw->show(); +#if defined(Q_WS_MAC) + mw->raise(); +#endif + return a.exec(); } + +#include "main.moc" |