diff options
author | Robert Griebl <rgriebl@trolltech.com> | 2010-04-21 14:15:23 +0200 |
---|---|---|
committer | Robert Griebl <rgriebl@trolltech.com> | 2010-04-21 14:15:23 +0200 |
commit | 0a8e69e0b4576dbe65dfe6fa8d4deadc08198f88 (patch) | |
tree | 795ff4221e7fea3e02f96471476feee78ba2dafd | |
parent | 27ce15ae5c7f47f6a2c456db74c41b5be6d4144f (diff) |
added small-screen mode
-rw-r--r-- | touchy/main.cpp | 65 | ||||
-rw-r--r-- | touchy/settingswidget.cpp | 90 | ||||
-rw-r--r-- | touchy/settingswidget.h | 6 |
3 files changed, 113 insertions, 48 deletions
diff --git a/touchy/main.cpp b/touchy/main.cpp index 698ec64..b9b5154 100644 --- a/touchy/main.cpp +++ b/touchy/main.cpp @@ -8,26 +8,67 @@ int main(int argc, char **argv) { QApplication a(argc, argv); - QListWidget *lw = new QListWidget(); + QListWidget *list = new QListWidget(); for (int i = 0; i < 1000; ++i) - new QListWidgetItem(QString("Oa dsjfhdk jhdsjk hfdskj k %1").arg(i), lw); + new QListWidgetItem(QString("Oa dsjfhdk jhdsjk hfdskj k %1").arg(i), list); QScrollAreaKineticScroller *s = new QScrollAreaKineticScroller(); - s->setWidget(lw); + s->setWidget(list); - QWidget *settings = new SettingsWidget(s); +#if defined(Q_WS_MAEMO_5) || defined(Q_WS_S60) || defined(Q_WS_WINCE) + bool smallScreen = true; +#else + bool smallScreen = true; // false; +#endif + + QWidget *settings = new SettingsWidget(s, smallScreen); QWidget *plot = new PlotWidget(s); - QSplitter *split = new QSplitter(); - split->addWidget(lw); - QTabWidget *tab = new QTabWidget(); - tab->addTab(settings, settings->windowTitle()); - tab->addTab(plot, plot->windowTitle()); - split->addWidget(tab); + if (smallScreen) { + QMainWindow *top = new QMainWindow(); + QStackedWidget *stack = new QStackedWidget(); + stack->addWidget(list); + stack->addWidget(settings); + stack->addWidget(plot); + top->setCentralWidget(stack); + + QActionGroup *pages = new QActionGroup(top); + pages->setExclusive(true); + QSignalMapper *mapper = new QSignalMapper(top); + QObject::connect(mapper, SIGNAL(mapped(int)), stack, SLOT(setCurrentIndex(int))); + + 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())); + + 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())); + + a = new QAction(QLatin1String("Plot"), pages); + a->setCheckable(true); + a->setChecked(false); + mapper->setMapping(a, 2); + QObject::connect(a, SIGNAL(toggled(bool)), mapper, SLOT(map())); - split->show(); - split->raise(); + 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(); +#if defined(Q_WS_MAC) + split->raise(); +#endif + } return a.exec(); } diff --git a/touchy/settingswidget.cpp b/touchy/settingswidget.cpp index 7f41a7b..5756cf8 100644 --- a/touchy/settingswidget.cpp +++ b/touchy/settingswidget.cpp @@ -86,9 +86,10 @@ public: m_slider2 = 0; m_control = m_slider; } - m_unitLabel = new QLabel(QLatin1String(m_item->unit)); m_valueLabel = new QLabel(); m_nameLabel = new QLabel(QLatin1String(m_item->name)); + if (m_item->unit && m_item->unit[0]) + m_nameLabel->setText(m_nameLabel->text() + QLatin1String(" [") + QLatin1String(m_item->unit) + QLatin1String("]")); m_resetButton = new QToolButton(); m_resetButton->setText(QLatin1String("Reset")); m_resetButton->setEnabled(false); @@ -107,7 +108,6 @@ public: } QWidget *nameLabel() { return m_nameLabel; } - QWidget *unitLabel() { return m_unitLabel; } QWidget *valueLabel() { return m_valueLabel; } QWidget *valueControl() { return m_control; } QWidget *resetButton() { return m_resetButton; } @@ -177,7 +177,7 @@ private: QKineticScroller *m_scroller; QSlider *m_slider, *m_slider2; - QLabel *m_unitLabel, *m_nameLabel, *m_valueLabel; + QLabel *m_nameLabel, *m_valueLabel; QToolButton *m_resetButton; QWidget *m_control; @@ -189,11 +189,11 @@ private: MetricItem items[QKineticScroller::ScrollMetricCount] = { { METRIC(DragVelocitySmoothingFactor), 1, "", qreal(0), qreal(1), qreal(0.01) }, - { METRIC(LinearDecelerationFactor), 1, "m/s^2", qreal(0), qreal(3), qreal(0.01) }, + { METRIC(LinearDecelerationFactor), 1, "m/s\xb2", qreal(0), qreal(3), qreal(0.01) }, { METRIC(ExponentialDecelerationBase), 1, "", qreal(0), qreal(1), qreal(0.01) }, - { METRIC(OvershootSpringConstant), 1, "kg/s^2", qreal(1), qreal(500), qreal(1) }, + { METRIC(OvershootSpringConstant), 1, "kg/s\xb2", qreal(1), qreal(500), qreal(1) }, { METRIC(OvershootDragResistanceFactor), 1, "", qreal(0), qreal(1), qreal(0.01) }, - { METRIC(OvershootMaximumDistance), 1000, "(mm, mm)", QPointF(0, 0), QPointF(500, 500), qreal(1) }, + { METRIC(OvershootMaximumDistance), 1000, "mm, mm", QPointF(0, 0), QPointF(500, 500), qreal(1) }, { METRIC(DragStartDistance), 1000, "mm", qreal(1), qreal(20), qreal(0.1) }, { METRIC(DragStartDirectionErrorMargin), 1000, "mm", qreal(1), qreal(20), qreal(0.1) }, @@ -214,23 +214,36 @@ MetricItem items[QKineticScroller::ScrollMetricCount] = { #undef METRIC +void SettingsWidget::addToGrid(QGridLayout *grid, QWidget *label, int widgetCount, ...) +{ + va_list args; + va_start(args, widgetCount); + + int rows = grid->rowCount(); + int cols = grid->columnCount(); + + if (label) { + if (m_smallscreen) + grid->addWidget(label, rows++, 0, 1, qMax(cols, widgetCount)); + else + grid->addWidget(label, rows, 0); + } + for (int i = 0; i < widgetCount; i++) { + if (QWidget *w = va_arg(args, QWidget *)) + grid->addWidget(w, rows, m_smallscreen ? i : i + 1); + } + va_end(args); +} + QGridLayout *SettingsWidget::createMetricsItemGrid() { QGridLayout *grid = new QGridLayout(); - grid->setVerticalSpacing(2); - int row = 0; + grid->setVerticalSpacing(m_smallscreen ? 4 : 2); for (int i = 0; i < QKineticScroller::ScrollMetricCount; i++) { MetricItemUpdater *u = new MetricItemUpdater(items + i, m_scroller); u->setParent(this); - - grid->addWidget(u->nameLabel(), row, 0); - grid->addWidget(u->valueControl(), row, 1); - grid->addWidget(u->valueLabel(), row, 2); - grid->addWidget(u->unitLabel(), row, 3); - grid->addWidget(u->resetButton(), row, 4); - - row++; + addToGrid(grid, u->nameLabel(), 3, u->valueControl(), u->valueLabel(), u->resetButton()); } return grid; } @@ -246,56 +259,56 @@ public: using QAbstractSpinBox::lineEdit; }; -SettingsWidget::SettingsWidget(QKineticScroller *scroller) - : QWidget(), m_scroller(scroller) +SettingsWidget::SettingsWidget(QKineticScroller *scroller, bool smallscreen) + : QScrollArea(), m_scroller(scroller), m_smallscreen(smallscreen) { setWindowTitle(QLatin1String("Settings")); - QVBoxLayout *layout = new QVBoxLayout(this); + QWidget *view = new QWidget(); + QVBoxLayout *layout = new QVBoxLayout(view); QGroupBox *grp; QGridLayout *grid; grp = new QGroupBox(QLatin1String("General")); grid = new QGridLayout(); - grid->setVerticalSpacing(2); + grid->setVerticalSpacing(smallscreen ? 4 : 2); QCheckBox *onoff = new QCheckBox(QLatin1String("Enabled")); onoff->setChecked(m_scroller->isEnabled()); connect(onoff, SIGNAL(toggled(bool)), this, SLOT(enabledChanged(bool))); - grid->addWidget(onoff, 0, 0, 1, 2); - grid->addWidget(new QLabel("DPI"), 1, 0); + addToGrid(grid, onoff, 0); + QSpinBox *dpi = new QSpinBox(); dpi->setRange(10, 1000); dpi->setSuffix(QLatin1String(" dpi")); dpi->setValue(m_scroller->dpi()); connect(dpi, SIGNAL(valueChanged(int)), this, SLOT(dpiChanged(int))); - grid->addWidget(dpi, 1, 1); + addToGrid(grid, new QLabel("DPI"), 1, dpi); - grid->addWidget(new QLabel("Horizontal Overshoot Policy"), 2, 0); m_hospolicy = new QComboBox(); m_hospolicy->addItem("When Scrollable", QKineticScroller::OvershootWhenScrollable); m_hospolicy->addItem("Always On", QKineticScroller::OvershootAlwaysOn); m_hospolicy->addItem("Always Off", QKineticScroller::OvershootAlwaysOff); m_hospolicy->setCurrentIndex(m_hospolicy->findData(m_scroller->horizontalOvershootPolicy())); connect(m_hospolicy, SIGNAL(currentIndexChanged(int)), this, SLOT(overshootPolicyChanged(int))); - grid->addWidget(m_hospolicy, 2, 1); + addToGrid(grid, new QLabel("Horizontal Overshoot Policy"), 1, m_hospolicy); - grid->addWidget(new QLabel("Vertical Overshoot Policy"), 3, 0); m_vospolicy = new QComboBox(); m_vospolicy->addItem("When Scrollable", QKineticScroller::OvershootWhenScrollable); m_vospolicy->addItem("Always On", QKineticScroller::OvershootAlwaysOn); m_vospolicy->addItem("Always Off", QKineticScroller::OvershootAlwaysOff); m_vospolicy->setCurrentIndex(m_vospolicy->findData(m_scroller->verticalOvershootPolicy())); connect(m_vospolicy, SIGNAL(currentIndexChanged(int)), this, SLOT(overshootPolicyChanged(int))); - grid->addWidget(m_vospolicy, 3, 1); + addToGrid(grid, new QLabel("Vertical Overshoot Policy"), 1, m_vospolicy); + grp->setLayout(grid); layout->addWidget(grp); grp = new QGroupBox(QLatin1String("Scroll Metrics")); - grid = createMetricsItemGrid(); - grp->setLayout(grid); + grp->setLayout(createMetricsItemGrid()); layout->addWidget(grp); grp = new QGroupBox(QLatin1String("Scroll To")); grid = new QGridLayout(); + grid->setVerticalSpacing(m_smallscreen ? 4 : 2); QSizeF vp = static_cast<HackScroller *>(m_scroller)->viewportSize(); QPointF maxc = static_cast<HackScroller *>(m_scroller)->maximumContentPosition(); @@ -317,16 +330,25 @@ SettingsWidget::SettingsWidget(QKineticScroller *scroller) grid->addWidget(m_scrollx, 0, 1); grid->addWidget(new QLabel(QLatin1String("Y:")), 0, 2); grid->addWidget(m_scrolly, 0, 3); - grid->addWidget(new QLabel(QLatin1String("in")), 0, 4); - grid->addWidget(m_scrolltime, 0, 5); - grid->addWidget(go, 0, 6); + int row = smallscreen ? 1 : 0; + int col = smallscreen ? 0 : 4; + grid->addWidget(new QLabel(QLatin1String("in")), row, col++); + grid->addWidget(m_scrolltime, row, col++); + if (smallscreen) { + grid->addWidget(go, row, col + 1); + } else { + grid->addWidget(go, row, col); + grid->setColumnStretch(5, 1); + grid->setColumnStretch(6, 1); + } grid->setColumnStretch(1, 1); grid->setColumnStretch(3, 1); - grid->setColumnStretch(5, 1); - grid->setColumnStretch(6, 1); grp->setLayout(grid); layout->addWidget(grp); layout->addStretch(100); + + setWidget(view); + setWidgetResizable(true); } void SettingsWidget::enabledChanged(bool on) diff --git a/touchy/settingswidget.h b/touchy/settingswidget.h index 22ec6aa..749962a 100644 --- a/touchy/settingswidget.h +++ b/touchy/settingswidget.h @@ -46,12 +46,12 @@ class QKineticScroller; -class SettingsWidget : public QWidget +class SettingsWidget : public QScrollArea { Q_OBJECT public: - SettingsWidget(QKineticScroller *scroller); + SettingsWidget(QKineticScroller *scroller, bool smallscreen = false); private slots: void enabledChanged(bool on); @@ -61,10 +61,12 @@ private slots: private: QGridLayout *createMetricsItemGrid(); + void addToGrid(QGridLayout *grid, QWidget *label, int widgetCount, ...); QKineticScroller *m_scroller; QSpinBox *m_scrollx, *m_scrolly, *m_scrolltime; QComboBox *m_hospolicy, *m_vospolicy; + bool m_smallscreen; }; #endif |