diff --git a/src/GcCalendar.cpp b/src/GcCalendar.cpp index f0f8a4b50..bbe6d12cb 100644 --- a/src/GcCalendar.cpp +++ b/src/GcCalendar.cpp @@ -37,7 +37,6 @@ GcCalendar::GcCalendar(MainWindow *main) : main(main) // Splitter - cal at top, summary at bottom splitter = new GcSplitter(Qt::Vertical); mainLayout->addWidget(splitter); - connect(splitter,SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int,int))); // calendar calendarItem = new GcSplitterItem(tr("Calendar"), iconFromPNG(":images/sidebar/calendar.png"), this); @@ -62,6 +61,8 @@ GcCalendar::GcCalendar(MainWindow *main) : main(main) splitter->addWidget(calendarItem); splitter->addWidget(summaryItem); + splitter->prepare(main->cyclist, "diary"); + black.setColor(QPalette::WindowText, Qt::gray); white.setColor(QPalette::WindowText, Qt::white); grey.setColor(QPalette::WindowText, Qt::gray); @@ -272,13 +273,6 @@ GcCalendar::GcCalendar(MainWindow *main) : main(main) slayout->addWidget(summary); slayout->addStretch(); - // restore splitter - QVariant splitterSizes = appsettings->cvalue(main->cyclist, GC_SETTINGS_CALSPLITTER_SIZES); - if (splitterSizes != QVariant()) { - splitter->restoreState(splitterSizes.toByteArray()); - splitter->setOpaqueResize(true); // redraw when released, snappier UI - } - // summary mode changed connect(summarySelect, SIGNAL(currentIndexChanged(int)), this, SLOT(refresh())); @@ -708,9 +702,3 @@ GcCalendar::setSummary() } } - -void -GcCalendar::splitterMoved(int /*pos*/, int /*index*/) -{ - appsettings->setCValue(main->cyclist, GC_SETTINGS_CALSPLITTER_SIZES, splitter->saveState()); -} diff --git a/src/GcCalendar.h b/src/GcCalendar.h index 38b40bcca..0d8e76e27 100644 --- a/src/GcCalendar.h +++ b/src/GcCalendar.h @@ -85,9 +85,6 @@ class GcCalendar : public QWidget // not a GcWindow - belongs on sidebar bool event(QEvent *e); void setSummary(); // set the summary at the bottom - // summary metrics aggregator -- refactor later - void splitterMoved(int pos, int index); - signals: void dateRangeChanged(DateRange); diff --git a/src/GcSideBarItem.cpp b/src/GcSideBarItem.cpp index fe50522c9..476c50b61 100644 --- a/src/GcSideBarItem.cpp +++ b/src/GcSideBarItem.cpp @@ -55,6 +55,46 @@ GcSplitter::GcSplitter(Qt::Orientation orientation, QWidget *parent) : QWidget(p connect(splitter,SIGNAL(splitterMoved(int,int)), this, SLOT(subSplitterMoved(int,int))); } +void +GcSplitter::prepare(QString cyclist, QString name) +{ + this->name = name; + this->cyclist = cyclist; + + // get saved state + QString statesetting = QString("splitter/%1/sizes").arg(name); + QVariant sizes = appsettings->cvalue(cyclist, statesetting); + if (sizes != QVariant()) { + splitter->restoreState(sizes.toByteArray()); + splitter->setOpaqueResize(true); // redraw when released, snappier UI + } + + // should we hide / show each widget? + for(int i=0; icount(); i++) { + QString hidesetting = QString("splitter/%1/hide/%2").arg(name).arg(i); + QVariant hidden = appsettings->cvalue(cyclist, hidesetting); + if (i && hidden != QVariant()) { + if (hidden.toBool() == true) { + splitter->widget(i)->hide(); + } + } + } +} + +void +GcSplitter::saveSettings() +{ + // get saved state + QString statesetting = QString("splitter/%1/sizes").arg(name); + appsettings->setCValue(cyclist, statesetting, splitter->saveState()); + + // should we hide / show each widget? + for(int i=0; icount(); i++) { + QString hidesetting = QString("splitter/%1/hide/%2").arg(name).arg(i); + appsettings->setCValue(cyclist, hidesetting, QVariant(splitter->widget(i)->isHidden())); + } +} + void GcSplitter::setOpaqueResize(bool opaque) { @@ -88,6 +128,7 @@ GcSplitter::restoreState(const QByteArray &state) void GcSplitter::subSplitterMoved(int pos, int index) { + saveSettings(); emit splitterMoved(pos, index); } @@ -103,7 +144,7 @@ GcSplitter::insertWidget(int index, QWidget *widget) splitter->insertWidget(index, widget); } -GcSubSplitter::GcSubSplitter(Qt::Orientation orientation, GcSplitterControl *control, QWidget *parent) : QSplitter(orientation, parent), control(control) +GcSubSplitter::GcSubSplitter(Qt::Orientation orientation, GcSplitterControl *control, GcSplitter *parent) : QSplitter(orientation, parent), control(control), gcSplitter (parent) { _insertedWidget = NULL; @@ -144,6 +185,7 @@ GcSubSplitter::createHandle() control->addAction(_item->controlAction); connect(_item->controlAction, SIGNAL(triggered(void)), _item, SLOT(selectHandle(void))); + connect(_item->controlAction, SIGNAL(triggered(void)), gcSplitter, SLOT(saveSettings())); return _item->splitterHandle; } } @@ -341,7 +383,6 @@ GcSplitterControl::selectAction() { this->setVisible(!this->isVisible()); - /*this->setBaseSize(width(), parentWidget()->height()); this->setMaximumSize(QWIDGETSIZE_MAX,QWIDGETSIZE_MAX);*/ } diff --git a/src/GcSideBarItem.h b/src/GcSideBarItem.h index 02b0e0475..06e7fbdbd 100644 --- a/src/GcSideBarItem.h +++ b/src/GcSideBarItem.h @@ -45,15 +45,21 @@ public: QByteArray saveState() const; bool restoreState(const QByteArray &state); -Q_SIGNALS: + void prepare(QString cyclist, QString name); // get ready for first show, you're now configured + // I'm gonna call you "name" -- which is used to + // save and restore state + +signals: void splitterMoved(int pos, int index); public slots: void subSplitterMoved(int pos, int index); + void saveSettings(); private: GcSubSplitter *splitter; GcSplitterControl *control; + QString cyclist, name; }; class GcSubSplitter : public QSplitter @@ -61,7 +67,7 @@ class GcSubSplitter : public QSplitter Q_OBJECT public: - GcSubSplitter(Qt::Orientation orientation, GcSplitterControl *control, QWidget *parent = 0); + GcSubSplitter(Qt::Orientation orientation, GcSplitterControl *control, GcSplitter *parent); void addWidget(QWidget *widget); void insertWidget(int index, QWidget *widget); @@ -74,6 +80,7 @@ private: QWidget * _insertedWidget; GcSplitterControl *control; + GcSplitter *gcSplitter; }; diff --git a/src/LTMSidebar.cpp b/src/LTMSidebar.cpp index f6d574b76..7225ca3e1 100644 --- a/src/LTMSidebar.cpp +++ b/src/LTMSidebar.cpp @@ -117,7 +117,6 @@ LTMSidebar::LTMSidebar(MainWindow *parent, const QDir &home) : QWidget(parent), splitter = new GcSplitter(Qt::Vertical); splitter->addWidget(seasonsWidget); splitter->addWidget(eventsWidget); - connect(splitter,SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int,int))); GcSplitterItem *summaryWidget = new GcSplitterItem(tr("Summary"), iconFromPNG(":images/sidebar/dashboard.png"), this); @@ -136,12 +135,7 @@ LTMSidebar::LTMSidebar(MainWindow *parent, const QDir &home) : QWidget(parent), mainLayout->addWidget(splitter); - // restore splitter - QVariant splitterSizes = appsettings->cvalue(main->cyclist, GC_SETTINGS_LTMSPLITTER_SIZES); - if (splitterSizes != QVariant()) { - splitter->restoreState(splitterSizes.toByteArray()); - splitter->setOpaqueResize(true); // redraw when released, snappier UI - } + splitter->prepare(main->cyclist, "LTM"); // our date ranges connect(dateRangeTree,SIGNAL(itemSelectionChanged()), this, SLOT(dateRangeTreeWidgetSelectionChanged())); @@ -717,9 +711,3 @@ LTMSidebar::setSummary(DateRange dateRange) } } - -void -LTMSidebar::splitterMoved(int, int) -{ - appsettings->setCValue(main->cyclist, GC_SETTINGS_LTMSPLITTER_SIZES, splitter->saveState()); -} diff --git a/src/LTMSidebar.h b/src/LTMSidebar.h index 07275cfe0..ef5128c3b 100644 --- a/src/LTMSidebar.h +++ b/src/LTMSidebar.h @@ -86,7 +86,6 @@ class LTMSidebar : public QWidget // gui components void setSummary(DateRange); - void splitterMoved(int, int); private: diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index d3c92b7d4..cb60109e0 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -667,12 +667,7 @@ MainWindow::MainWindow(const QDir &home) : analSidebar = new GcSplitter(Qt::Vertical); analSidebar->addWidget(analItem); analSidebar->addWidget(intervalItem); - - QVariant analSplitterSizes = appsettings->cvalue(cyclist, GC_SETTINGS_INTERVALSPLITTER_SIZES); - if (analSplitterSizes != QVariant()) { - analSidebar->restoreState(analSplitterSizes.toByteArray()); - analSidebar->setOpaqueResize(true); // redraw when released, snappier UI - } + analSidebar->prepare(cyclist, "analysis"); QTreeWidgetItem *last = NULL; QStringListIterator i(RideFileFactory::instance().listRideFiles(home)); @@ -994,7 +989,6 @@ MainWindow::MainWindow(const QDir &home) : connect(intervalWidget,SIGNAL(itemSelectionChanged()), this, SLOT(intervalTreeWidgetSelectionChanged())); connect(intervalWidget,SIGNAL(itemChanged(QTreeWidgetItem *,int)), this, SLOT(intervalEdited(QTreeWidgetItem*, int))); connect(splitter,SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int,int))); - connect(analSidebar,SIGNAL(splitterMoved(int,int)), this, SLOT(analSidebarMoved(int,int))); connect(this, SIGNAL(rideDirty()), this, SLOT(enableSaveButton())); connect(this, SIGNAL(rideClean()), this, SLOT(enableSaveButton())); @@ -1386,12 +1380,6 @@ MainWindow::resizeEvent(QResizeEvent*) #endif } -void -MainWindow::analSidebarMoved(int /* pos */, int /*index*/) -{ - appsettings->setCValue(cyclist, GC_SETTINGS_INTERVALSPLITTER_SIZES, analSidebar->saveState()); -} - void MainWindow::splitterMoved(int pos, int /*index*/) { diff --git a/src/MainWindow.h b/src/MainWindow.h index a5bfcb72b..37fc8d0cc 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -277,7 +277,6 @@ class MainWindow : public QMainWindow void rideTreeWidgetSelectionChanged(); void intervalTreeWidgetSelectionChanged(); void splitterMoved(int, int); - void analSidebarMoved(int, int); void newCyclist(); void openCyclist(); void downloadRide(); diff --git a/src/Settings.h b/src/Settings.h index 0c5d05a2e..b0186a9e3 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -29,11 +29,7 @@ #define GC_SETTINGS_MAIN_X "mainwindow/x" #define GC_SETTINGS_MAIN_Y "mainwindow/y" #define GC_SETTINGS_MAIN_GEOM "mainwindow/geometry" -#define GC_SETTINGS_CALSPLITTER_SIZES "mainwindow/calSideBarSizes" -#define GC_SETTINGS_LTMSPLITTER_SIZES "mainwindow/ltmSideBarSizes" -#define GC_SETTINGS_INTERVALSPLITTER_SIZES "mainwindow/analSideBarSizes" #define GC_SETTINGS_SPLITTER_SIZES "mainwindow/splitterSizes" -#define GC_SETTINGS_SUMMARYSPLITTER_SIZES "mainwindow/summarysplittersizes" #define GC_SETTINGS_CALENDAR_SIZES "mainwindow/calendarSizes" #define GC_TABS_TO_HIDE "mainwindow/tabsToHide" #define GC_ELEVATION_HYSTERESIS "elevationHysteresis" diff --git a/src/TrainTool.cpp b/src/TrainTool.cpp index 27339a3d9..4ddffec93 100644 --- a/src/TrainTool.cpp +++ b/src/TrainTool.cpp @@ -296,6 +296,7 @@ TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), h mediaItem->addWidget(mediaTree); trainSplitter->addWidget(mediaItem); #endif + trainSplitter->prepare(main->cyclist, "train"); #ifdef Q_OS_MAC // get rid of annoying focus rectangle for sidebar components