From d30e4ac8d5e86b3e2e0c1e6250bbdc5580c4bec6 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Wed, 27 Feb 2013 16:03:56 +0000 Subject: [PATCH] New sidebar splitter on Analysis and Diary --- src/GcCalendar.cpp | 26 ++++++++++++-------------- src/GcCalendar.h | 6 +++++- src/GcSideBarItem.cpp | 5 ++++- src/MainWindow.cpp | 35 +++++++++++++++++++---------------- src/MainWindow.h | 9 ++++++++- src/Settings.h | 4 ++-- 6 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/GcCalendar.cpp b/src/GcCalendar.cpp index 4fd05089d..7fe89ccf4 100644 --- a/src/GcCalendar.cpp +++ b/src/GcCalendar.cpp @@ -27,7 +27,6 @@ GcCalendar::GcCalendar(MainWindow *main) : main(main) setContentsMargins(0,0,0,0); setAutoFillBackground(true); - setStyleSheet("QLabel { color: gray; }"); month = year = 0; _ride = NULL; @@ -36,28 +35,32 @@ GcCalendar::GcCalendar(MainWindow *main) : main(main) mainLayout->setSpacing(0); // Splitter - cal at top, summary at bottom - splitter = new QSplitter(this); - splitter->setHandleWidth(1); - splitter->setOrientation(Qt::Vertical); - splitter->setFrameStyle(QFrame::NoFrame); - + 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"), QIcon(QPixmap(":images/sidebar/calendar.png")), this); + summaryItem = new GcSplitterItem(tr("Summary"), QIcon(QPixmap(":images/sidebar/dashboard.png")), this); + // cal widget QWidget *cal = new QWidget(this); - cal->setContentsMargins(20,10,20,20); + cal->setContentsMargins(10,5,10,10); + cal->setStyleSheet("QLabel { color: gray; }"); layout = new QVBoxLayout(cal); layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); - splitter->addWidget(cal); + calendarItem->addWidget(cal); // summary widget QWidget *sum = new QWidget(this); sum->setContentsMargins(0,0,0,0); QVBoxLayout *slayout = new QVBoxLayout(sum); slayout->setSpacing(0); - splitter->addWidget(sum); + summaryItem->addWidget(sum); + + splitter->addWidget(calendarItem); + splitter->addWidget(summaryItem); black.setColor(QPalette::WindowText, Qt::gray); white.setColor(QPalette::WindowText, Qt::white); @@ -274,11 +277,6 @@ GcCalendar::GcCalendar(MainWindow *main) : main(main) if (splitterSizes != QVariant()) { splitter->restoreState(splitterSizes.toByteArray()); splitter->setOpaqueResize(true); // redraw when released, snappier UI - } else { - QList sizes; - sizes.append(400); - sizes.append(400); - splitter->setSizes(sizes); } // summary mode changed diff --git a/src/GcCalendar.h b/src/GcCalendar.h index 7383fa258..38b40bcca 100644 --- a/src/GcCalendar.h +++ b/src/GcCalendar.h @@ -30,6 +30,8 @@ #include "RideItem.h" #include "RideNavigator.h" +#include "GcSideBarItem.h" + // Catch signal, no background and do embossed text class GcLabel : public QLabel { @@ -113,7 +115,9 @@ class GcCalendar : public QWidget // not a GcWindow - belongs on sidebar QList fieldDefinitions; GcCalendarModel *calendarModel; - QSplitter *splitter; // calendar vs summary + GcSplitter *splitter; // calendar vs summary + GcSplitterItem *calendarItem, + *summaryItem; QComboBox *summarySelect; QWebView *summary; diff --git a/src/GcSideBarItem.cpp b/src/GcSideBarItem.cpp index c475cb6ee..e6493ec3f 100644 --- a/src/GcSideBarItem.cpp +++ b/src/GcSideBarItem.cpp @@ -93,6 +93,9 @@ GcSplitter::insertWidget(int index, QWidget *widget) GcSubSplitter::GcSubSplitter(Qt::Orientation orientation, GcSplitterControl *control, QWidget *parent) : QSplitter(orientation, parent), control(control) { _insertedWidget = NULL; + + // we add a fake widget to ensure the first real widget + // that is added has a handle (even though it cannot be moved) QLabel *fake = new QLabel("fake"); fake->setFixedHeight(0); setHandleWidth(0); @@ -317,7 +320,7 @@ void GcSplitterItem::addWidget(QWidget *p) { content = p; - p->setContentsMargins(0,0,0,0); + //p->setContentsMargins(0,0,0,0); layout->addWidget(p); } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index d59807bba..6eb06d5a0 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -173,7 +173,6 @@ MainWindow::MainWindow(const QDir &home) : setAttribute(Qt::WA_DeleteOnClose); - // need to restore geometry before setUnifiedToolBar.. on Mac appsettings->setValue(GC_SETTINGS_LAST, home.dirName()); QVariant geom = appsettings->value(this, GC_SETTINGS_MAIN_GEOM); @@ -643,21 +642,25 @@ MainWindow::MainWindow(const QDir &home) : intervalSplitter = new QSplitter(this); intervalSplitter->setHandleWidth(1); intervalSplitter->setOrientation(Qt::Vertical); - intervalSplitter->addWidget(activityHistory); intervalSplitter->addWidget(intervalWidget); intervalSplitter->addWidget(intervalSummaryWindow); intervalSplitter->setFrameStyle(QFrame::NoFrame); + intervalSplitter->setCollapsible(0, false); + intervalSplitter->setCollapsible(1, false); - QVariant intervalSplitterSizes = appsettings->cvalue(cyclist, GC_SETTINGS_INTERVALSPLITTER_SIZES); - if (intervalSplitterSizes != QVariant()) { - intervalSplitter->restoreState(intervalSplitterSizes.toByteArray()); - intervalSplitter->setOpaqueResize(true); // redraw when released, snappier UI - } else { - QList sizes; - sizes.append(400); - sizes.append(200); - sizes.append(200); - intervalSplitter->setSizes(sizes); + analItem = new GcSplitterItem(tr("Activities"), QIcon(QPixmap(":images/sidebar/folder.png")), this); + analItem->addWidget(activityHistory); + intervalItem = new GcSplitterItem(tr("Intervals"), QIcon(QPixmap(":images/mac/stop.png")), this); + intervalItem->addWidget(intervalSplitter); + + 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 } QTreeWidgetItem *last = NULL; @@ -756,7 +759,7 @@ MainWindow::MainWindow(const QDir &home) : connect(ltmSidebar, SIGNAL(dateRangeChanged(DateRange)), this, SLOT(dateRangeChangedLTM(DateRange))); ltmSidebar->dateRangeTreeWidgetSelectionChanged(); // force an update to get first date range shown - toolBox->addWidget(intervalSplitter); + toolBox->addWidget(analSidebar); toolBox->addWidget(gcCalendar); toolBox->addWidget(trainTool->controls()); toolBox->addWidget(ltmSidebar); @@ -984,7 +987,7 @@ 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(intervalSplitter,SIGNAL(splitterMoved(int,int)), this, SLOT(intervalSplitterMoved(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())); @@ -1359,9 +1362,9 @@ MainWindow::resizeEvent(QResizeEvent*) } void -MainWindow::intervalSplitterMoved(int /* pos */, int /*index*/) +MainWindow::analSidebarMoved(int /* pos */, int /*index*/) { - appsettings->setCValue(cyclist, GC_SETTINGS_INTERVALSPLITTER_SIZES, intervalSplitter->saveState()); + appsettings->setCValue(cyclist, GC_SETTINGS_INTERVALSPLITTER_SIZES, analSidebar->saveState()); } void diff --git a/src/MainWindow.h b/src/MainWindow.h index 220cb77ec..9b1c0738b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -74,6 +74,8 @@ class BlankStateAnalysisPage; class BlankStateHomePage; class BlankStateDiaryPage; class BlankStateTrainPage; +class GcSplitter; +class GcSplitterItem; extern QList mainwindows; // keep track of all the MainWindows we have open extern QDesktopWidget *desktop; // how many screens / res etc @@ -275,7 +277,7 @@ class MainWindow : public QMainWindow void rideTreeWidgetSelectionChanged(); void intervalTreeWidgetSelectionChanged(); void splitterMoved(int, int); - void intervalSplitterMoved(int, int); + void analSidebarMoved(int, int); void newCyclist(); void openCyclist(); void downloadRide(); @@ -428,6 +430,11 @@ class MainWindow : public QMainWindow QSplitter *splitter; QSplitter *metaSplitter; QTreeWidget *treeWidget; + + // sidebar splitter + GcSplitter *analSidebar; + GcSplitterItem *analItem, *intervalItem; + QSplitter *intervalSplitter; IntervalTreeView *intervalWidget; diff --git a/src/Settings.h b/src/Settings.h index 46659e99a..0c5d05a2e 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -29,9 +29,9 @@ #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/calsplitterSizes" +#define GC_SETTINGS_CALSPLITTER_SIZES "mainwindow/calSideBarSizes" #define GC_SETTINGS_LTMSPLITTER_SIZES "mainwindow/ltmSideBarSizes" -#define GC_SETTINGS_INTERVALSPLITTER_SIZES "mainwindow/intervalsplitterSizes" +#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"