diff --git a/gpxsee.pro b/gpxsee.pro index b1776e63..fad1940a 100644 --- a/gpxsee.pro +++ b/gpxsee.pro @@ -96,7 +96,8 @@ HEADERS += src/config.h \ src/albersequal.h \ src/oddspinbox.h \ src/rectc.h \ - src/searchpointer.h + src/searchpointer.h \ + src/percentslider.h SOURCES += src/main.cpp \ src/gui.cpp \ src/poi.cpp \ @@ -165,7 +166,8 @@ SOURCES += src/main.cpp \ src/maplist.cpp \ src/albersequal.cpp \ src/oddspinbox.cpp \ - src/rectc.cpp + src/rectc.cpp \ + src/percentslider.cpp RESOURCES += gpxsee.qrc TRANSLATIONS = lang/gpxsee_cs.ts \ lang/gpxsee_sv.ts \ diff --git a/src/gui.cpp b/src/gui.cpp index d206de60..0d9b6ffe 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -877,6 +877,8 @@ void GUI::openOptions() for (int i = 0; i < _tabs.count(); i++) _tabs.at(i)->setPalette(options.palette); } + if (options.mapOpacity != _options.mapOpacity) + _pathView->setMapOpacity(options.mapOpacity); if (options.trackWidth != _options.trackWidth) _pathView->setTrackWidth(options.trackWidth); if (options.routeWidth != _options.routeWidth) @@ -1598,6 +1600,8 @@ void GUI::writeSettings() settings.setValue(PALETTE_COLOR_SETTING, _options.palette.color()); if (_options.palette.shift() != PALETTE_SHIFT_DEFAULT) settings.setValue(PALETTE_SHIFT_SETTING, _options.palette.shift()); + if (_options.mapOpacity != MAP_OPACITY_DEFAULT) + settings.setValue(MAP_OPACITY_SETTING, _options.mapOpacity); if (_options.trackWidth != TRACK_WIDTH_DEFAULT) settings.setValue(TRACK_WIDTH_SETTING, _options.trackWidth); if (_options.routeWidth != ROUTE_WIDTH_DEFAULT) @@ -1793,6 +1797,8 @@ void GUI::readSettings() qreal ps = settings.value(PALETTE_SHIFT_SETTING, PALETTE_SHIFT_DEFAULT) .toDouble(); _options.palette = Palette(pc, ps); + _options.mapOpacity = settings.value(MAP_OPACITY_SETTING, + MAP_OPACITY_DEFAULT).toInt(); _options.trackWidth = settings.value(TRACK_WIDTH_SETTING, TRACK_WIDTH_DEFAULT).toInt(); _options.routeWidth = settings.value(ROUTE_WIDTH_SETTING, @@ -1845,6 +1851,7 @@ void GUI::readSettings() SEPARATE_GRAPH_PAGE_DEFAULT).toBool(); _pathView->setPalette(_options.palette); + _pathView->setMapOpacity(_options.mapOpacity); _pathView->setTrackWidth(_options.trackWidth); _pathView->setRouteWidth(_options.routeWidth); _pathView->setTrackStyle(_options.trackStyle); diff --git a/src/optionsdialog.cpp b/src/optionsdialog.cpp index 0ccfd3d6..dc5c87a4 100644 --- a/src/optionsdialog.cpp +++ b/src/optionsdialog.cpp @@ -16,12 +16,13 @@ #include "colorbox.h" #include "stylecombobox.h" #include "oddspinbox.h" +#include "percentslider.h" #include "optionsdialog.h" + #define MENU_MARGIN 20 #define MENU_ICON_SIZE 32 - QWidget *OptionsDialog::createAppearancePage() { _baseColor = new ColorBox(); @@ -31,14 +32,39 @@ QWidget *OptionsDialog::createAppearancePage() _colorOffset->setMaximum(1.0); _colorOffset->setSingleStep(0.01); _colorOffset->setValue(_options->palette.shift()); - QFormLayout *paletteLayout = new QFormLayout(); paletteLayout->addRow(tr("Base color:"), _baseColor); paletteLayout->addRow(tr("Palette shift:"), _colorOffset); +#ifndef Q_OS_MAC + QGroupBox *pathsBox = new QGroupBox(tr("Paths")); + pathsBox->setLayout(paletteLayout); +#endif + + _mapOpacity = new PercentSlider(); + _mapOpacity->setValue(_options->mapOpacity); + QFormLayout *mapLayout = new QFormLayout(); + mapLayout->addRow(tr("Map opacity:"), _mapOpacity); +#ifndef Q_OS_MAC + QGroupBox *mapBox = new QGroupBox(tr("Map")); + mapBox->setLayout(mapLayout); +#endif QWidget *colorTab = new QWidget(); - colorTab->setLayout(paletteLayout); + QVBoxLayout *colorTabLayout = new QVBoxLayout(); +#ifdef Q_OS_MAC + QFrame *l0 = new QFrame(); + l0->setFrameShape(QFrame::HLine); + l0->setFrameShadow(QFrame::Sunken); + colorTabLayout->addLayout(paletteLayout); + colorTabLayout->addWidget(l0); + colorTabLayout->addLayout(mapLayout); +#else // Q_OS_MAC + colorTabLayout->addWidget(pathsBox); + colorTabLayout->addWidget(mapBox); +#endif // O_OS_MAC + colorTabLayout->addStretch(); + colorTab->setLayout(colorTabLayout); _trackWidth = new QSpinBox(); _trackWidth->setValue(_options->trackWidth); @@ -369,6 +395,7 @@ void OptionsDialog::accept() { _options->palette.setColor(_baseColor->color()); _options->palette.setShift(_colorOffset->value()); + _options->mapOpacity = _mapOpacity->value(); _options->trackWidth = _trackWidth->value(); _options->trackStyle = (Qt::PenStyle) _trackStyle->itemData( _trackStyle->currentIndex()).toInt(); diff --git a/src/optionsdialog.h b/src/optionsdialog.h index 133225c4..fe30781f 100644 --- a/src/optionsdialog.h +++ b/src/optionsdialog.h @@ -12,10 +12,12 @@ class QSpinBox; class QDoubleSpinBox; class QComboBox; class QCheckBox; +class PercentSlider; struct Options { // Appearance Palette palette; + int mapOpacity; int trackWidth; int routeWidth; Qt::PenStyle trackStyle; @@ -71,6 +73,7 @@ private: // Appearance ColorBox *_baseColor; QDoubleSpinBox *_colorOffset; + PercentSlider *_mapOpacity; QSpinBox *_trackWidth; StyleComboBox *_trackStyle; QSpinBox *_routeWidth; diff --git a/src/pathview.cpp b/src/pathview.cpp index 11f48e87..a49bcded 100644 --- a/src/pathview.cpp +++ b/src/pathview.cpp @@ -46,6 +46,7 @@ PathView::PathView(Map *map, POI *poi, QWidget *parent) connect(_poi, SIGNAL(pointsChanged()), this, SLOT(updatePOI())); _units = Metric; + _opacity = 1.0; _showMap = true; _showTracks = true; @@ -637,11 +638,21 @@ void PathView::setRouteStyle(Qt::PenStyle style) _routes.at(i)->setStyle(style); } +void PathView::setMapOpacity(int opacity) +{ + _opacity = opacity / 100.0; + resetCachedContent(); +} + void PathView::drawBackground(QPainter *painter, const QRectF &rect) { - if (_showMap) + if (_showMap) { + if (_opacity < 1.0) { + painter->fillRect(rect, Qt::white); + painter->setOpacity(_opacity); + } _map->draw(painter, rect); - else + } else painter->fillRect(rect, Qt::white); } diff --git a/src/pathview.h b/src/pathview.h index 81a89618..c6f233c9 100644 --- a/src/pathview.h +++ b/src/pathview.h @@ -63,6 +63,7 @@ public slots: void setRouteWidth(int width); void setTrackStyle(Qt::PenStyle style); void setRouteStyle(Qt::PenStyle style); + void setMapOpacity(int opacity); private slots: void updatePOI(); @@ -106,6 +107,7 @@ private: POI *_poi; Palette _palette; Units _units; + qreal _opacity; bool _showMap; bool _showTracks; diff --git a/src/percentslider.cpp b/src/percentslider.cpp new file mode 100644 index 00000000..16b71515 --- /dev/null +++ b/src/percentslider.cpp @@ -0,0 +1,48 @@ +#include +#include +#include +#include "units.h" +#include "percentslider.h" + + +static QString format(int value) +{ + return QString::number(value) + UNIT_SPACE + QString("%"); +} + +PercentSlider::PercentSlider(QWidget *parent) : QWidget(parent) +{ + _slider = new QSlider(Qt::Horizontal); + _label = new QLabel(); + + _slider->setMinimum(0); + _slider->setMaximum(100); + + QFontMetrics fm(_label->font()); + _label->setFixedWidth(fm.boundingRect(format(_slider->maximum())).width()); + _label->setAlignment(Qt::AlignRight); + + connect(_slider, SIGNAL(sliderMoved(int)), this, SLOT(updateLabel(int))); + + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget(_slider); + layout->addWidget(_label); + + setLayout(layout); +} + +void PercentSlider::updateLabel(int value) +{ + _label->setText(format(value)); +} + +int PercentSlider::value() const +{ + return _slider->value(); +} + +void PercentSlider::setValue(int value) +{ + _slider->setValue(value); + _label->setText(format(value)); +} diff --git a/src/percentslider.h b/src/percentslider.h new file mode 100644 index 00000000..6a763404 --- /dev/null +++ b/src/percentslider.h @@ -0,0 +1,29 @@ +#ifndef PERCENTSLIDER_H +#define PERCENTSLIDER_H + +#include + +class QSlider; +class QLabel; + +class PercentSlider : public QWidget +{ + Q_OBJECT + +public: + PercentSlider(QWidget *parent = 0); + + int value() const; + +public slots: + void setValue(int value); + +private slots: + void updateLabel(int value); + +private: + QSlider *_slider; + QLabel *_label; +}; + +#endif // PERCENTSLIDER_H diff --git a/src/settings.h b/src/settings.h index 1c865146..42f95e17 100644 --- a/src/settings.h +++ b/src/settings.h @@ -76,6 +76,8 @@ #define PALETTE_COLOR_DEFAULT QColor(Qt::blue) #define PALETTE_SHIFT_SETTING "paletteShift" #define PALETTE_SHIFT_DEFAULT 0.62 +#define MAP_OPACITY_SETTING "mapOpacity" +#define MAP_OPACITY_DEFAULT 100 #define TRACK_WIDTH_SETTING "trackWidth" #define TRACK_WIDTH_DEFAULT 3 #define ROUTE_WIDTH_SETTING "routeWidth"