mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-14 08:38:45 +00:00
The 4 views have been shown to be confusing -- it is not clear to new users what their purpose is, and hence how or why they are different. So in an effort to reduce the confusion I've renamed a few things to be much more explicit and specific. .. We embrace the fact we are a cycling program and use the term RIDES not ACTIVITIES for all files .. HOME is confusing, renamed to TRENDS .. the ANALYSIS view name is confusing, its all about ANALYSIS to renamed to RIDES There will no doubt be areas that are not renamed properly we can fix those when the arise.
261 lines
9.9 KiB
C++
261 lines
9.9 KiB
C++
/*
|
|
* Copyright (c) 2010 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 "Colors.h"
|
|
#include "Context.h"
|
|
#include "Context.h"
|
|
#include "Athlete.h"
|
|
#include "RideMetadata.h"
|
|
#include <QObject>
|
|
#include <QDir>
|
|
#include "Settings.h"
|
|
|
|
// Number of confugurable metric colors + 1 for sentinel value
|
|
static Colors ColorList[CNUMOFCFGCOLORS+1], DefaultColorList[CNUMOFCFGCOLORS+1];
|
|
|
|
static void copyArray(Colors source[], Colors target[])
|
|
{
|
|
for (int i=0; source[i].name != ""; i++)
|
|
target[i] = source[i];
|
|
}
|
|
|
|
// initialization called from constructor to enable translation
|
|
void GCColor::setupColors()
|
|
{
|
|
// consider removing when we can guarantee extended initialisation support in gcc
|
|
// (c++0x not supported by Qt currently and not planned for 4.8 or 5.0)
|
|
Colors init[CNUMOFCFGCOLORS+1] = {
|
|
{ tr("Plot Background"), "COLORPLOTBACKGROUND", Qt::white },
|
|
{ tr("Ride Plot Background"), "COLORRIDEPLOTBACKGROUND", Qt::black },
|
|
{ tr("Plot Symbols"), "COLORRIDEPLOTSYMBOLS", Qt::gray },
|
|
{ tr("Ride Plot X Axis"), "COLORRIDEPLOTXAXIS", Qt::blue },
|
|
{ tr("Ride Plot Y Axis"), "COLORRIDEPLOTYAXIS", Qt::red },
|
|
{ tr("Plot Thumbnail Background"), "COLORPLOTTHUMBNAIL", Qt::gray },
|
|
{ tr("Plot Title"), "COLORPLOTTITLE", Qt::black },
|
|
{ tr("Plot Selection Pen"), "COLORPLOTSELECT", Qt::blue },
|
|
{ tr("Plot TrackerPen"), "COLORPLOTTRACKER", Qt::blue },
|
|
{ tr("Plot Markers"), "COLORPLOTMARKER", Qt::gray },
|
|
{ tr("Plot Grid"), "COLORGRID", Qt::black },
|
|
{ tr("Interval Highlighter"), "COLORINTERVALHIGHLIGHTER", Qt::blue },
|
|
{ tr("Heart Rate"), "COLORHEARTRATE", Qt::blue },
|
|
{ tr("Speed"), "COLORSPEED", Qt::green },
|
|
{ tr("Power"), "COLORPOWER", Qt::red },
|
|
{ tr("Normalised Power"), "CNPOWER", Qt::magenta },
|
|
{ tr("Skiba xPower"), "CXPOWER", Qt::magenta },
|
|
{ tr("Altitude Power"), "CAPOWER", Qt::magenta },
|
|
{ tr("Critical Power"), "COLORCP", Qt::red },
|
|
{ tr("Cadence"), "COLORCADENCE", QColor(0,204,204) },
|
|
{ tr("Altitude"), "COLORALTITUTDE", QColor(124,91,31) },
|
|
{ tr("Altitude Shading"), "COLORALTITUDESHADE", QColor(124,91,31) },
|
|
{ tr("Wind Speed"), "COLORWINDSPEED", Qt::darkGreen },
|
|
{ tr("Torque"), "COLORTORQUE", Qt::magenta },
|
|
{ tr("Load"), "COLORLOAD", Qt::yellow },
|
|
{ tr("TSS"), "COLORTSS", Qt::green },
|
|
{ tr("Short Term Stress"), "COLORSTS", Qt::blue },
|
|
{ tr("Long Term Stress"), "COLORLTS", Qt::green },
|
|
{ tr("Stress Balance"), "COLORSB", Qt::black },
|
|
{ tr("Daily Stress"), "COLORDAILYSTRESS", Qt::red },
|
|
{ tr("Bike Score"), "COLORBIKESCORE", Qt::gray },
|
|
{ tr("Calendar Text"), "COLORCALENDARTEXT", Qt::black },
|
|
{ tr("Power Zone 1 Shading"), "COLORZONE1", QColor(255,0,255) },
|
|
{ tr("Power Zone 2 Shading"), "COLORZONE2", QColor(42,0,255) },
|
|
{ tr("Power Zone 3 Shading"), "COLORZONE3", QColor(0,170,255) },
|
|
{ tr("Power Zone 4 Shading"), "COLORZONE4", QColor(0,255,128) },
|
|
{ tr("Power Zone 5 Shading"), "COLORZONE5", QColor(85,255,0) },
|
|
{ tr("Power Zone 6 Shading"), "COLORZONE6", QColor(255,213,0) },
|
|
{ tr("Power Zone 7 Shading"), "COLORZONE7", QColor(255,0,0) },
|
|
{ tr("Power Zone 8 Shading"), "COLORZONE8", Qt::gray },
|
|
{ tr("Power Zone 9 Shading"), "COLORZONE9", Qt::gray },
|
|
{ tr("Power Zone 10 Shading"), "COLORZONE10", Qt::gray },
|
|
{ tr("HR Zone 1 Shading"), "HRCOLORZONE1", QColor(255,0,255) },
|
|
{ tr("HR Zone 2 Shading"), "HRCOLORZONE2", QColor(42,0,255) },
|
|
{ tr("HR Zone 3 Shading"), "HRCOLORZONE3", QColor(0,170,255) },
|
|
{ tr("HR Zone 4 Shading"), "HRCOLORZONE4", QColor(0,255,128) },
|
|
{ tr("HR Zone 5 Shading"), "HRCOLORZONE5", QColor(85,255,0) },
|
|
{ tr("HR Zone 6 Shading"), "HRCOLORZONE6", QColor(255,213,0) },
|
|
{ tr("HR Zone 7 Shading"), "HRCOLORZONE7", QColor(255,0,0) },
|
|
{ tr("HR Zone 8 Shading"), "HRCOLORZONE8", Qt::gray },
|
|
{ tr("HR Zone 9 Shading"), "HRCOLORZONE9", Qt::gray },
|
|
{ tr("HR Zone 10 Shading"), "HRCOLORZONE10", Qt::gray },
|
|
{ tr("Aerolab VE"), "COLORAEROVE", Qt::blue },
|
|
{ tr("Aerolab Elevation"), "COLORAEROEL", Qt::green },
|
|
{ tr("Calendar background"), "CCALCELL", Qt::white },
|
|
{ tr("Calendar heading"), "CCALHEAD", QColor(230,230,230) },
|
|
{ tr("Calendar Current Selection"), "CCALCURRENT", QColor(255,213,0) },
|
|
{ tr("Calendar Actual Workout"), "CCALACTUAL", Qt::green },
|
|
{ tr("Calendar Planned Workout"), "CCALPLANNED", Qt::yellow },
|
|
{ tr("Calendar Today"), "CCALTODAY", Qt::cyan },
|
|
{ tr("Pop Up Windows Background"), "CPOPUP", Qt::lightGray },
|
|
{ tr("Pop Up Windows Foreground"), "CPOPUPTEXT", Qt::white },
|
|
{ tr("Chart Bar Unselected"), "CTILEBAR", Qt::gray },
|
|
{ tr("Chart Bar Selected"), "CTILEBARSELECT", Qt::yellow },
|
|
{ tr("ToolBar Background"), "CTOOLBAR", Qt::white },
|
|
{ tr("Ride History Group"), "CRIDEGROUP", QColor(236,246,255) },
|
|
{ tr("SpinScan Left"), "CSPINSCANLEFT", Qt::gray },
|
|
{ tr("SpinScan Right"), "CSPINSCANRIGHT", Qt::cyan },
|
|
{ tr("Temperature"), "COLORTEMPERATURE", Qt::yellow },
|
|
{ tr("Default Dial Color"), "CDIAL", Qt::gray },
|
|
{ tr("Alternate Power"), "CALTPOWER", Qt::magenta },
|
|
{ tr("Left Balance"), "CBALANCELEFT", QColor(178,0,0) },
|
|
{ tr("Right Balance"), "CBALANCERIGHT", QColor(128,0,50) },
|
|
{ tr("W' Balance"), "CWBAL", Qt::red },
|
|
{ tr("Ride CP Curve"), "CRIDECP", Qt::black },
|
|
{ "", "", QColor(0,0,0) },
|
|
};
|
|
|
|
// set the defaults to system detaults
|
|
init[CCALCURRENT].color = QPalette().color(QPalette::Highlight);
|
|
init[CTOOLBAR].color = QPalette().color(QPalette::Window);
|
|
|
|
copyArray(init, DefaultColorList);
|
|
copyArray(init, ColorList);
|
|
}
|
|
|
|
// default settings for fonts etc
|
|
// we err on the side of caution -- smaller is better
|
|
struct SizeSettings defaultAppearance[] ={
|
|
|
|
// small screens include netbooks and old vga 800x600, 1024x768
|
|
{ 1024, 768, 8,8,6,6,6,6, 800, 600 },
|
|
|
|
// medium screen size includes typical 16:9 pc formats and TV screens
|
|
{ 1280, 800, 8,8,6,6,6,6, 800, 600},
|
|
|
|
// high resolution screens
|
|
{ 1650, 1080, 10,10,8,8,8,8, 1024,650 },
|
|
|
|
// very big panels, incl. e.g. mac 27"
|
|
{ 9999, 9999, 10,10,8,8,8,8, 1280,700 },
|
|
|
|
{ 0,0,0,0,0,0,0,0,0,0 },
|
|
};
|
|
|
|
struct SizeSettings
|
|
GCColor::defaultSizes(int width, int height)
|
|
{
|
|
for (int i=0; defaultAppearance[i].maxheight; i++) {
|
|
|
|
if (height > defaultAppearance[i].maxheight && width > defaultAppearance[i].maxwidth)
|
|
continue;
|
|
|
|
else return defaultAppearance[i];
|
|
|
|
}
|
|
return defaultAppearance[0]; // shouldn't get here
|
|
}
|
|
|
|
GCColor::GCColor(Context *context) : QObject(context)
|
|
{
|
|
setupColors();
|
|
readConfig();
|
|
connect(context, SIGNAL(configChanged()), this, SLOT(readConfig()));
|
|
}
|
|
|
|
const Colors * GCColor::colorSet()
|
|
{
|
|
return ColorList;
|
|
}
|
|
|
|
const Colors * GCColor::defaultColorSet()
|
|
{
|
|
return DefaultColorList;
|
|
}
|
|
|
|
void GCColor::resetColors()
|
|
{
|
|
copyArray(DefaultColorList, ColorList);
|
|
}
|
|
|
|
QColor
|
|
GCColor::invert(QColor color)
|
|
{
|
|
return QColor(255-color.red(), 255-color.green(), 255-color.blue());
|
|
}
|
|
|
|
void
|
|
GCColor::readConfig()
|
|
{
|
|
// read in config settings and populate the color table
|
|
for (unsigned int i=0; ColorList[i].name != ""; i++) {
|
|
QString colortext = appsettings->value(this, ColorList[i].setting, "").toString();
|
|
if (colortext != "") {
|
|
// color definitions are stored as "r:g:b"
|
|
QStringList rgb = colortext.split(":");
|
|
ColorList[i].color = QColor(rgb[0].toInt(),
|
|
rgb[1].toInt(),
|
|
rgb[2].toInt());
|
|
} else {
|
|
// set sensible defaults for any not set...
|
|
if (ColorList[i].name == "CTOOLBAR") {
|
|
QPalette def;
|
|
ColorList[i].color = def.color(QPalette::Window);
|
|
}
|
|
if (ColorList[i].name == "CCALCURRENT") {
|
|
QPalette def;
|
|
ColorList[i].color = def.color(QPalette::Highlight);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
QColor
|
|
GCColor::getColor(int colornum)
|
|
{
|
|
return ColorList[colornum].color;
|
|
}
|
|
|
|
ColorEngine::ColorEngine(Context* context) : QObject(context), defaultColor(QColor(Qt::white)), context(context)
|
|
{
|
|
configUpdate();
|
|
connect(context, SIGNAL(configChanged()), this, SLOT(configUpdate()));
|
|
}
|
|
|
|
void ColorEngine::configUpdate()
|
|
{
|
|
// clear existing
|
|
workoutCodes.clear();
|
|
|
|
// setup the keyword/color combinations from config settings
|
|
foreach (KeywordDefinition keyword, context->athlete->rideMetadata()->getKeywords()) {
|
|
if (keyword.name == "Default")
|
|
defaultColor = keyword.color;
|
|
else {
|
|
workoutCodes[keyword.name] = keyword.color;
|
|
|
|
// alternative texts in notes
|
|
foreach (QString token, keyword.tokens) {
|
|
workoutCodes[token] = keyword.color;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
QColor
|
|
ColorEngine::colorFor(QString text)
|
|
{
|
|
QColor color = defaultColor;
|
|
|
|
foreach(QString code, workoutCodes.keys()) {
|
|
if (text.contains(code, Qt::CaseInsensitive)) {
|
|
color = workoutCodes[code];
|
|
}
|
|
}
|
|
return color;
|
|
}
|