mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-04-15 05:32:21 +00:00
NewSideBar Button ids as an enum class and View Stack Ids (#4688)
Updates the NewSideBar button ids to use an enum class, and viewStack identifiers to provide strong typing, and aid the clarity of the code.
This commit is contained in:
@@ -211,7 +211,7 @@ AthleteTab::rideSelected(RideItem*)
|
|||||||
// as important to be aware that perspectives are loaded
|
// as important to be aware that perspectives are loaded
|
||||||
// when the view is selected by the user and no earlier
|
// when the view is selected by the user and no earlier
|
||||||
if (analysisView->page() != NULL) {
|
if (analysisView->page() != NULL) {
|
||||||
context->mainWindow->newSidebar()->setItemSelected(3, true);
|
context->mainWindow->newSidebar()->setItemSelected(GcSideBarBtnId::ACTIVITIES_BTN, true);
|
||||||
selectView(1);
|
selectView(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,7 +81,6 @@
|
|||||||
// GUI Widgets
|
// GUI Widgets
|
||||||
#include "AthleteTab.h"
|
#include "AthleteTab.h"
|
||||||
#include "GcToolBar.h"
|
#include "GcToolBar.h"
|
||||||
#include "NewSideBar.h"
|
|
||||||
#include "HelpWindow.h"
|
#include "HelpWindow.h"
|
||||||
#include "Perspective.h"
|
#include "Perspective.h"
|
||||||
#include "PerspectiveDialog.h"
|
#include "PerspectiveDialog.h"
|
||||||
@@ -115,6 +114,12 @@
|
|||||||
#include "WindowsCrashHandler.cpp"
|
#include "WindowsCrashHandler.cpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// The order of the GcViewStackIdx values below must match the viewStack widget's tab order, see the MainWindow's constructor below.
|
||||||
|
namespace GcViewStackIdx {
|
||||||
|
// use constexpr instead of enum class to prevent unecessary casting
|
||||||
|
constexpr int SELECT_ATHLETE_VIEW = 0;
|
||||||
|
constexpr int ATHLETE_TAB_STACK = 1;
|
||||||
|
};
|
||||||
|
|
||||||
// We keep track of all theopen mainwindows
|
// We keep track of all theopen mainwindows
|
||||||
QList<MainWindow *> mainwindows;
|
QList<MainWindow *> mainwindows;
|
||||||
@@ -207,34 +212,34 @@ MainWindow::MainWindow(const QDir &home)
|
|||||||
HelpWhatsThis *helpNewSideBar = new HelpWhatsThis(sidebar);
|
HelpWhatsThis *helpNewSideBar = new HelpWhatsThis(sidebar);
|
||||||
sidebar->setWhatsThis(helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar));
|
sidebar->setWhatsThis(helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar));
|
||||||
|
|
||||||
sidebar->addItem(QImage(":sidebar/athlete.png"), tr("athletes"), 0, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Athletes));
|
// The ids of the sidebar buttons below are defined in NewSideBar.h
|
||||||
sidebar->setItemEnabled(1, false);
|
sidebar->addItem(QImage(":sidebar/athlete.png"), tr("athletes"), GcSideBarBtnId::SELECT_ATHLETE_BTN, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Athletes));
|
||||||
|
|
||||||
sidebar->addItem(QImage(":sidebar/plan.png"), tr("plan"), 1), tr("Feature not implemented yet");
|
sidebar->addItem(QImage(":sidebar/plan.png"), tr("plan"), GcSideBarBtnId::PLAN_BTN, tr("Feature not implemented yet"));
|
||||||
sidebar->setItemEnabled(1, false);
|
sidebar->setItemEnabled(GcSideBarBtnId::PLAN_BTN, false);
|
||||||
|
|
||||||
sidebar->addItem(QImage(":sidebar/trends.png"), tr("trends"), 2, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Trends));
|
sidebar->addItem(QImage(":sidebar/trends.png"), tr("trends"), GcSideBarBtnId::TRENDS_BTN, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Trends));
|
||||||
sidebar->addItem(QImage(":sidebar/assess.png"), tr("activities"), 3, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Rides));
|
|
||||||
sidebar->setItemSelected(3, true);
|
|
||||||
|
|
||||||
sidebar->addItem(QImage(":sidebar/reflect.png"), tr("reflect"), 4), tr("Feature not implemented yet");
|
sidebar->addItem(QImage(":sidebar/assess.png"), tr("activities"), GcSideBarBtnId::ACTIVITIES_BTN, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Rides));
|
||||||
sidebar->setItemEnabled(4, false);
|
|
||||||
|
|
||||||
sidebar->addItem(QImage(":sidebar/train.png"), tr("train"), 5, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Train));
|
sidebar->addItem(QImage(":sidebar/reflect.png"), tr("reflect"), GcSideBarBtnId::REFLECT_BTN, tr("Feature not implemented yet"));
|
||||||
|
sidebar->setItemEnabled(GcSideBarBtnId::REFLECT_BTN, false);
|
||||||
|
|
||||||
|
sidebar->addItem(QImage(":sidebar/train.png"), tr("train"), GcSideBarBtnId::TRAIN_BTN, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Train));
|
||||||
|
|
||||||
sidebar->addStretch();
|
sidebar->addStretch();
|
||||||
sidebar->addItem(QImage(":sidebar/apps.png"), tr("apps"), 6, tr("Feature not implemented yet"));
|
sidebar->addItem(QImage(":sidebar/apps.png"), tr("apps"), GcSideBarBtnId::APPS_BTN, tr("Feature not implemented yet"));
|
||||||
sidebar->setItemEnabled(6, false);
|
sidebar->setItemEnabled(GcSideBarBtnId::APPS_BTN, false);
|
||||||
sidebar->addStretch();
|
sidebar->addStretch();
|
||||||
|
|
||||||
// we can click on the quick icons, but they aren't selectable views
|
// we can click on the quick icons, but they aren't selectable views
|
||||||
sidebar->addItem(QImage(":sidebar/sync.png"), tr("sync"), 7, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Sync));
|
sidebar->addItem(QImage(":sidebar/sync.png"), tr("sync"), GcSideBarBtnId::SYNC_BTN, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Sync));
|
||||||
sidebar->setItemSelectable(7, false);
|
sidebar->setItemSelectable(GcSideBarBtnId::SYNC_BTN, false);
|
||||||
sidebar->addItem(QImage(":sidebar/prefs.png"), tr("options"), 8, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Options));
|
sidebar->addItem(QImage(":sidebar/prefs.png"), tr("options"), GcSideBarBtnId::OPTIONS_BTN, helpNewSideBar->getWhatsThisText(HelpWhatsThis::ScopeBar_Options));
|
||||||
sidebar->setItemSelectable(8, false);
|
sidebar->setItemSelectable(GcSideBarBtnId::OPTIONS_BTN, false);
|
||||||
|
|
||||||
connect(sidebar, SIGNAL(itemClicked(int)), this, SLOT(sidebarClicked(int)));
|
connect(sidebar, SIGNAL(itemClicked(GcSideBarBtnId)), this, SLOT(sidebarClicked(GcSideBarBtnId)));
|
||||||
connect(sidebar, SIGNAL(itemSelected(int)), this, SLOT(sidebarSelected(int)));
|
connect(sidebar, SIGNAL(itemSelected(GcSideBarBtnId)), this, SLOT(sidebarSelected(GcSideBarBtnId)));
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
* What's this Context Help
|
* What's this Context Help
|
||||||
@@ -416,6 +421,7 @@ MainWindow::MainWindow(const QDir &home)
|
|||||||
tabbar->setDocumentMode(true);
|
tabbar->setDocumentMode(true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Note: The order of the viewStack tabs below, must match the GcViewStackIdx definitions above.
|
||||||
athleteView = new AthleteView(context);
|
athleteView = new AthleteView(context);
|
||||||
viewStack = new QStackedWidget(this);
|
viewStack = new QStackedWidget(this);
|
||||||
viewStack->addWidget(athleteView);
|
viewStack->addWidget(athleteView);
|
||||||
@@ -1217,37 +1223,32 @@ MainWindow::support()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWindow::sidebarClicked(int id)
|
MainWindow::sidebarClicked(GcSideBarBtnId id)
|
||||||
{
|
{
|
||||||
// sync quick link
|
switch (id) {
|
||||||
if (id == 7) checkCloud();
|
case GcSideBarBtnId::SYNC_BTN: checkCloud(); break; // sync quick link
|
||||||
|
case GcSideBarBtnId::OPTIONS_BTN: showOptions(); break; // prefs
|
||||||
// prefs
|
}
|
||||||
if (id == 8) showOptions();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWindow::sidebarSelected(int id)
|
MainWindow::sidebarSelected(GcSideBarBtnId id)
|
||||||
{
|
{
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 0: selectAthlete(); break;
|
case GcSideBarBtnId::SELECT_ATHLETE_BTN: selectAthlete(); break;
|
||||||
case 1: // plan not written yet
|
case GcSideBarBtnId::PLAN_BTN: break; // plan not written yet
|
||||||
break;
|
case GcSideBarBtnId::TRENDS_BTN: selectTrends(); break;
|
||||||
case 2: selectTrends(); break;
|
case GcSideBarBtnId::ACTIVITIES_BTN: selectAnalysis(); break;
|
||||||
case 3: selectAnalysis(); break;
|
case GcSideBarBtnId::REFLECT_BTN: break; // reflect not written yet
|
||||||
case 4: // reflect not written yet
|
case GcSideBarBtnId::TRAIN_BTN: selectTrain(); break;
|
||||||
break;
|
case GcSideBarBtnId::APPS_BTN: break;// apps not written yet
|
||||||
case 5: selectTrain(); break;
|
|
||||||
case 6: // apps not written yet
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWindow::selectAthlete()
|
MainWindow::selectAthlete()
|
||||||
{
|
{
|
||||||
viewStack->setCurrentIndex(0);
|
viewStack->setCurrentIndex(GcViewStackIdx::SELECT_ATHLETE_VIEW);
|
||||||
back->hide();
|
back->hide();
|
||||||
forward->hide();
|
forward->hide();
|
||||||
perspectiveSelector->hide();
|
perspectiveSelector->hide();
|
||||||
@@ -1260,8 +1261,8 @@ MainWindow::selectAnalysis()
|
|||||||
{
|
{
|
||||||
resetPerspective(1);
|
resetPerspective(1);
|
||||||
//currentTab->analysisView->setPerspectives(perspectiveSelector);
|
//currentTab->analysisView->setPerspectives(perspectiveSelector);
|
||||||
viewStack->setCurrentIndex(1);
|
viewStack->setCurrentIndex(GcViewStackIdx::ATHLETE_TAB_STACK);
|
||||||
sidebar->setItemSelected(3, true);
|
sidebar->setItemSelected(GcSideBarBtnId::ACTIVITIES_BTN, true);
|
||||||
currentAthleteTab->selectView(1);
|
currentAthleteTab->selectView(1);
|
||||||
back->show();
|
back->show();
|
||||||
forward->show();
|
forward->show();
|
||||||
@@ -1276,8 +1277,8 @@ MainWindow::selectTrain()
|
|||||||
{
|
{
|
||||||
resetPerspective(3);
|
resetPerspective(3);
|
||||||
//currentTab->trainView->setPerspectives(perspectiveSelector);
|
//currentTab->trainView->setPerspectives(perspectiveSelector);
|
||||||
viewStack->setCurrentIndex(1);
|
viewStack->setCurrentIndex(GcViewStackIdx::ATHLETE_TAB_STACK);
|
||||||
sidebar->setItemSelected(5, true);
|
sidebar->setItemSelected(GcSideBarBtnId::TRAIN_BTN, true);
|
||||||
currentAthleteTab->selectView(3);
|
currentAthleteTab->selectView(3);
|
||||||
back->show();
|
back->show();
|
||||||
forward->show();
|
forward->show();
|
||||||
@@ -1292,7 +1293,7 @@ MainWindow::selectDiary()
|
|||||||
{
|
{
|
||||||
resetPerspective(2);
|
resetPerspective(2);
|
||||||
//currentTab->diaryView->setPerspectives(perspectiveSelector);
|
//currentTab->diaryView->setPerspectives(perspectiveSelector);
|
||||||
viewStack->setCurrentIndex(1);
|
viewStack->setCurrentIndex(GcViewStackIdx::ATHLETE_TAB_STACK);
|
||||||
currentAthleteTab->selectView(2);
|
currentAthleteTab->selectView(2);
|
||||||
back->show();
|
back->show();
|
||||||
forward->show();
|
forward->show();
|
||||||
@@ -1307,8 +1308,8 @@ MainWindow::selectTrends()
|
|||||||
{
|
{
|
||||||
resetPerspective(0);
|
resetPerspective(0);
|
||||||
//currentTab->homeView->setPerspectives(perspectiveSelector);
|
//currentTab->homeView->setPerspectives(perspectiveSelector);
|
||||||
viewStack->setCurrentIndex(1);
|
viewStack->setCurrentIndex(GcViewStackIdx::ATHLETE_TAB_STACK);
|
||||||
sidebar->setItemSelected(2, true);
|
sidebar->setItemSelected(GcSideBarBtnId::TRENDS_BTN, true);
|
||||||
currentAthleteTab->selectView(0);
|
currentAthleteTab->selectView(0);
|
||||||
back->show();
|
back->show();
|
||||||
forward->show();
|
forward->show();
|
||||||
@@ -2269,18 +2270,18 @@ MainWindow::saveGCState(Context *context)
|
|||||||
void
|
void
|
||||||
MainWindow::restoreGCState(Context *context)
|
MainWindow::restoreGCState(Context *context)
|
||||||
{
|
{
|
||||||
if (viewStack->currentIndex() != 0) {
|
if (viewStack->currentIndex() != GcViewStackIdx::SELECT_ATHLETE_VIEW) {
|
||||||
|
|
||||||
// not on athlete view...
|
// not on athlete view...
|
||||||
resetPerspective(currentAthleteTab->currentView()); // will lazy load, hence doing it first
|
resetPerspective(currentAthleteTab->currentView()); // will lazy load, hence doing it first
|
||||||
|
|
||||||
// restore window state from the supplied context
|
// restore window state from the supplied context
|
||||||
switch(currentAthleteTab->currentView()) {
|
switch(currentAthleteTab->currentView()) {
|
||||||
case 0: sidebar->setItemSelected(2,true); break;
|
case 0: sidebar->setItemSelected(GcSideBarBtnId::TRENDS_BTN,true); break;
|
||||||
case 1: sidebar->setItemSelected(3,true); break;
|
case 1: sidebar->setItemSelected(GcSideBarBtnId::ACTIVITIES_BTN,true); break;
|
||||||
case 2: break; // diary not an icon
|
case 2: break; // diary not an icon
|
||||||
case 3: sidebar->setItemSelected(5, true); break;
|
case 3: sidebar->setItemSelected(GcSideBarBtnId::TRAIN_BTN, true); break;
|
||||||
default: sidebar->setItemSelected(0, true); break;
|
default: sidebar->setItemSelected(GcSideBarBtnId::SELECT_ATHLETE_BTN, true); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#ifndef _GC_MainWindow_h
|
#ifndef _GC_MainWindow_h
|
||||||
#define _GC_MainWindow_h 1
|
#define _GC_MainWindow_h 1
|
||||||
#include "GoldenCheetah.h"
|
#include "GoldenCheetah.h"
|
||||||
|
#include "NewSideBar.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QSqlDatabase>
|
#include <QSqlDatabase>
|
||||||
@@ -175,8 +176,8 @@ class MainWindow : public QMainWindow
|
|||||||
void switchAthleteTab(int index); // for switching between one tab and another
|
void switchAthleteTab(int index); // for switching between one tab and another
|
||||||
|
|
||||||
// sidebar selecting views and actions
|
// sidebar selecting views and actions
|
||||||
void sidebarClicked(int id);
|
void sidebarClicked(GcSideBarBtnId id);
|
||||||
void sidebarSelected(int id);
|
void sidebarSelected(GcSideBarBtnId id);
|
||||||
|
|
||||||
// Athlete Backup
|
// Athlete Backup
|
||||||
void setBackupAthleteMenu();
|
void setBackupAthleteMenu();
|
||||||
|
|||||||
@@ -153,17 +153,12 @@ NavigationModel::action(bool redo, NavigationEvent event)
|
|||||||
{
|
{
|
||||||
view = redo ? event.after.toInt() : event.before.toInt();
|
view = redo ? event.after.toInt() : event.before.toInt();
|
||||||
|
|
||||||
// new side bar uses a different id, which will
|
switch (view) {
|
||||||
// eventually be refactored to be the only id
|
case 0: tab->context->mainWindow->selectTrends(); break;
|
||||||
// but for now we need to map this
|
case 1: tab->context->mainWindow->selectAnalysis(); break;
|
||||||
int id=0;
|
case 2: tab->context->mainWindow->selectDiary(); break;
|
||||||
switch(view) {
|
case 3: tab->context->mainWindow->selectTrain(); break;
|
||||||
case 0: id=2; break; // trends
|
|
||||||
case 1: id=3; break; // analysis
|
|
||||||
case 2: id=0; break; // diary
|
|
||||||
case 3: id=5; break; // train
|
|
||||||
}
|
}
|
||||||
tab->context->mainWindow->sidebarSelected(id);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 Mark Liversedge <liversedge@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
||||||
|
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
#include "Context.h"
|
#include "Context.h"
|
||||||
#include "NewSideBar.h"
|
#include "NewSideBar.h"
|
||||||
#include "Colors.h"
|
#include "Colors.h"
|
||||||
@@ -11,7 +29,7 @@ NewSideBar::NewSideBar(Context *context, QWidget *parent) : QWidget(parent), con
|
|||||||
{
|
{
|
||||||
setFixedWidth(gl_itemwidth *dpiXFactor);
|
setFixedWidth(gl_itemwidth *dpiXFactor);
|
||||||
setAutoFillBackground(true);
|
setAutoFillBackground(true);
|
||||||
lastid=0;
|
lastid=GcSideBarBtnId::NO_BUTTON_SET;
|
||||||
|
|
||||||
QVBoxLayout *mainlayout = new QVBoxLayout(this);
|
QVBoxLayout *mainlayout = new QVBoxLayout(this);
|
||||||
mainlayout->setSpacing(0);
|
mainlayout->setSpacing(0);
|
||||||
@@ -35,18 +53,18 @@ NewSideBar::NewSideBar(Context *context, QWidget *parent) : QWidget(parent), con
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NewSideBar::clicked(int id)
|
NewSideBar::clicked(GcSideBarBtnId id)
|
||||||
{
|
{
|
||||||
// un selectable item was clicked (e.g. symc or settings)
|
// un selectable item was clicked (e.g. symc or settings)
|
||||||
emit itemClicked(id);
|
emit itemClicked(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NewSideBar::selected(int id)
|
NewSideBar::selected(GcSideBarBtnId id)
|
||||||
{
|
{
|
||||||
// we selected one, so need to set it selected
|
// we selected one, so need to set it selected
|
||||||
// and deselect everyone else
|
// and deselect everyone else
|
||||||
QMapIterator<int,NewSideBarItem*>i(items);
|
QMapIterator<GcSideBarBtnId,NewSideBarItem*>i(items);
|
||||||
while(i.hasNext()) {
|
while(i.hasNext()) {
|
||||||
i.next();
|
i.next();
|
||||||
if (i.key() == id) i.value()->setSelected(true);
|
if (i.key() == id) i.value()->setSelected(true);
|
||||||
@@ -56,16 +74,15 @@ NewSideBar::selected(int id)
|
|||||||
emit itemSelected(id);
|
emit itemSelected(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
GcSideBarBtnId
|
||||||
NewSideBar::addItem(QImage icon, QString name, int id, QString whatsThisText)
|
NewSideBar::addItem(QImage icon, const QString& name, GcSideBarBtnId id, const QString& whatsThisText)
|
||||||
{
|
{
|
||||||
// allocated an id
|
if (id != GcSideBarBtnId::NO_BUTTON_SET) {
|
||||||
if (id == -1) id=lastid++;
|
NewSideBarItem *add = new NewSideBarItem(this, id, icon, name);
|
||||||
|
if (!whatsThisText.isEmpty()) add->setWhatsThis(whatsThisText);
|
||||||
NewSideBarItem *add = new NewSideBarItem(this, id, icon, name);
|
layout->addWidget(add);
|
||||||
if (!whatsThisText.isEmpty()) add->setWhatsThis(whatsThisText);
|
items.insert(id, add);
|
||||||
layout->addWidget(add);
|
}
|
||||||
items.insert(id, add);
|
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@@ -80,14 +97,14 @@ NewSideBar::addStretch()
|
|||||||
|
|
||||||
// is it shown, is it usable?
|
// is it shown, is it usable?
|
||||||
void
|
void
|
||||||
NewSideBar::setItemVisible(int id, bool x)
|
NewSideBar::setItemVisible(GcSideBarBtnId id, bool x)
|
||||||
{
|
{
|
||||||
NewSideBarItem *item = items.value(id, NULL);
|
NewSideBarItem *item = items.value(id, NULL);
|
||||||
if (item) item->setVisible(x);
|
if (item) item->setVisible(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NewSideBar::setItemEnabled(int id, bool x)
|
NewSideBar::setItemEnabled(GcSideBarBtnId id, bool x)
|
||||||
{
|
{
|
||||||
NewSideBarItem *item = items.value(id, NULL);
|
NewSideBarItem *item = items.value(id, NULL);
|
||||||
if (item) item->setEnabled(x);
|
if (item) item->setEnabled(x);
|
||||||
@@ -95,14 +112,14 @@ NewSideBar::setItemEnabled(int id, bool x)
|
|||||||
|
|
||||||
// can we select it, select it by program?
|
// can we select it, select it by program?
|
||||||
void
|
void
|
||||||
NewSideBar::setItemSelectable(int id, bool x)
|
NewSideBar::setItemSelectable(GcSideBarBtnId id, bool x)
|
||||||
{
|
{
|
||||||
NewSideBarItem *item = items.value(id, NULL);
|
NewSideBarItem *item = items.value(id, NULL);
|
||||||
if (item) item->setSelectable(x);
|
if (item) item->setSelectable(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NewSideBar::setItemSelected(int id, bool x)
|
NewSideBar::setItemSelected(GcSideBarBtnId id, bool x)
|
||||||
{
|
{
|
||||||
NewSideBarItem *item = items.value(id, NULL);
|
NewSideBarItem *item = items.value(id, NULL);
|
||||||
if (item) item->setSelected(x);
|
if (item) item->setSelected(x);
|
||||||
@@ -131,7 +148,7 @@ NewSideBar::configChanged(qint32)
|
|||||||
middle->setStyleSheet(style);
|
middle->setStyleSheet(style);
|
||||||
}
|
}
|
||||||
|
|
||||||
NewSideBarItem::NewSideBarItem(NewSideBar *sidebar, int id, QImage icon, QString name) : QWidget(sidebar), sidebar(sidebar), id(id), icon(icon), name(name)
|
NewSideBarItem::NewSideBarItem(NewSideBar *sidebar, GcSideBarBtnId id, QImage icon, QString name) : QWidget(sidebar), sidebar(sidebar), id(id), icon(icon), name(name)
|
||||||
{
|
{
|
||||||
clicked = selected = false;
|
clicked = selected = false;
|
||||||
selectable = enabled = true;
|
selectable = enabled = true;
|
||||||
|
|||||||
@@ -1,13 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 Mark Liversedge <liversedge@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
||||||
|
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _GC_NewSideBar_h
|
||||||
|
#define _GC_NewSideBar_h 1
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
enum class GcSideBarBtnId : int {
|
||||||
|
NO_BUTTON_SET = -1,
|
||||||
|
SELECT_ATHLETE_BTN = 0,
|
||||||
|
PLAN_BTN = 1,
|
||||||
|
TRENDS_BTN = 2,
|
||||||
|
ACTIVITIES_BTN = 3,
|
||||||
|
REFLECT_BTN = 4,
|
||||||
|
TRAIN_BTN = 5,
|
||||||
|
APPS_BTN = 6,
|
||||||
|
SYNC_BTN = 7,
|
||||||
|
OPTIONS_BTN = 8
|
||||||
|
};
|
||||||
|
|
||||||
class Context;
|
class Context;
|
||||||
class NewSideBarItem;
|
class NewSideBarItem;
|
||||||
class NewSideBar : public QWidget
|
class NewSideBar : public QWidget
|
||||||
{
|
{
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_ENUM(GcSideBarBtnId)
|
||||||
|
|
||||||
friend class ::NewSideBarItem;
|
friend class ::NewSideBarItem;
|
||||||
|
|
||||||
@@ -16,32 +51,31 @@ class NewSideBar : public QWidget
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
// managing items - the id can be assigned or will get a default
|
// managing items - addItem returns the id of the button added, or NO_BUTTON_SET.
|
||||||
// it returns the id used
|
GcSideBarBtnId addItem(QImage icon, const QString& name, GcSideBarBtnId id, const QString& whatsThisText);
|
||||||
int addItem(QImage icon, QString name, int id=-1, QString whatsThisText="");
|
|
||||||
|
|
||||||
// leave a gap- we have main icons, gap, apps, gap, sync, prefs
|
// leave a gap- we have main icons, gap, apps, gap, sync, prefs
|
||||||
void addStretch();
|
void addStretch();
|
||||||
|
|
||||||
// is it shown, is it usable?
|
// is it shown, is it usable?
|
||||||
void setItemVisible(int id, bool);
|
void setItemVisible(GcSideBarBtnId id, bool);
|
||||||
void setItemEnabled(int id, bool);
|
void setItemEnabled(GcSideBarBtnId id, bool);
|
||||||
|
|
||||||
// can we select it, select it by program?
|
// can we select it, select it by program?
|
||||||
void setItemSelectable(int id, bool);
|
void setItemSelectable(GcSideBarBtnId id, bool);
|
||||||
void setItemSelected(int id, bool);
|
void setItemSelected(GcSideBarBtnId id, bool);
|
||||||
|
|
||||||
// config changed
|
// config changed
|
||||||
void configChanged(qint32);
|
void configChanged(qint32);
|
||||||
|
|
||||||
// called by children
|
// called by children
|
||||||
void clicked(int id);
|
void clicked(GcSideBarBtnId id);
|
||||||
void selected(int id);
|
void selected(GcSideBarBtnId id);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
void itemSelected(int id);
|
void itemSelected(GcSideBarBtnId id);
|
||||||
void itemClicked(int id);
|
void itemClicked(GcSideBarBtnId id);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Context *context;
|
Context *context;
|
||||||
@@ -49,9 +83,9 @@ class NewSideBar : public QWidget
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
QWidget *top, *middle, *bottom; // bars at top and the bottom
|
QWidget *top, *middle, *bottom; // bars at top and the bottom
|
||||||
QMap<int,NewSideBarItem*> items;
|
QMap<GcSideBarBtnId,NewSideBarItem*> items;
|
||||||
|
|
||||||
int lastid; // when autoallocating
|
GcSideBarBtnId lastid; // when autoallocating
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -62,7 +96,7 @@ class NewSideBarItem : public QWidget
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
NewSideBarItem(NewSideBar *sidebar, int id, QImage icon, QString name);
|
NewSideBarItem(NewSideBar *sidebar, GcSideBarBtnId id, QImage icon, QString name);
|
||||||
|
|
||||||
void setSelectable(bool);
|
void setSelectable(bool);
|
||||||
void setEnabled(bool);
|
void setEnabled(bool);
|
||||||
@@ -87,7 +121,7 @@ class NewSideBarItem : public QWidget
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
NewSideBar *sidebar; // for emitting signals
|
NewSideBar *sidebar; // for emitting signals
|
||||||
int id;
|
GcSideBarBtnId id;
|
||||||
|
|
||||||
// pre-rendered/calculated icons and colors
|
// pre-rendered/calculated icons and colors
|
||||||
QImage icon;
|
QImage icon;
|
||||||
@@ -103,3 +137,5 @@ class NewSideBarItem : public QWidget
|
|||||||
bool enabled;
|
bool enabled;
|
||||||
bool clicked;
|
bool clicked;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif // _GC_NewSideBar_h
|
||||||
|
|||||||
Reference in New Issue
Block a user