summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-02-03 08:02:05 +0100
committerArno <arno@disconnect.de>2018-02-03 08:02:05 +0100
commit8512ed1a06888a98f71367f4ac3da3f6edc945c3 (patch)
treecd9504d630e25ab1e1db9cb64c01d73dc6877d81
parentcbb1974ae94858b101ba1bf92047236dcfa2e5fa (diff)
downloadShemovCleaner-8512ed1a06888a98f71367f4ac3da3f6edc945c3.tar.gz
ShemovCleaner-8512ed1a06888a98f71367f4ac3da3f6edc945c3.tar.bz2
ShemovCleaner-8512ed1a06888a98f71367f4ac3da3f6edc945c3.zip
Implement alternating row colors
Once again, surprisingly difficult, as you can see on the number of changed files. Coding the configuration options wasn't that difficult, but actually using them was. As it turned out, the default style on Windows doesn't use QApplication::palette() at all, though it does honor setAlternatingRowColors(). It just doesn't use the palette colors, but style sheets. Took me a while to figure out. So, there's always another layer of indirection: First, add all QTreeViews to Globals::views, then create a helper to set the style sheet.
-rw-r--r--configurationwidget.cpp61
-rw-r--r--configurationwidget.h9
-rw-r--r--filewidget.cpp1
-rw-r--r--globals.cpp6
-rw-r--r--globals.h5
-rw-r--r--helper.cpp17
-rw-r--r--helper.h1
-rw-r--r--searchdialog.cpp3
-rw-r--r--searchview.cpp3
-rw-r--r--shemovcleaner.cpp4
-rw-r--r--torrentwidget.cpp1
11 files changed, 110 insertions, 1 deletions
diff --git a/configurationwidget.cpp b/configurationwidget.cpp
index 33e1271..43188e6 100644
--- a/configurationwidget.cpp
+++ b/configurationwidget.cpp
@@ -7,11 +7,13 @@
#include <QVBoxLayout>
#include <QLineEdit>
#include <QFileDialog>
+#include <QCheckBox>
+#include <QColorDialog>
#include "configurationwidget.h"
#include "itemselectionwidget.h"
-ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) {
+ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mColors(2) {
//database setup
QGridLayout *dbLayout = new QGridLayout;
mDbHost = new QLineEdit;
@@ -64,6 +66,38 @@ ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : Q
//mime type filters
mMimeTypeW = new ItemSelectionWidget(ItemSelectionWidget::Item, tr("Mime Type Regex"));
+ //colors
+ QLabel *baseColorT = new QLabel(tr("Base color"));
+ mBaseColorL = new QLabel;
+ mBaseColorL->setFrameStyle(QFrame::Sunken | QFrame::Panel);
+ mBaseColorL->setScaledContents(true);
+ QPushButton *baseColorB = new QPushButton(tr("Choose..."));
+ baseColorB->setDisabled(true);
+ connect(baseColorB, &QPushButton::clicked, [=] { chooseColor(mBaseColorL, 0); });
+ QLabel *altColorT = new QLabel(tr("Alternate color"));
+ mAltColorL = new QLabel;
+ mAltColorL->setFrameStyle(QFrame::Sunken | QFrame::Panel);
+ mAltColorL->setScaledContents(true);
+ QPushButton *altColorB = new QPushButton(tr("Choose..."));
+ altColorB->setDisabled(true);
+ connect(altColorB, &QPushButton::clicked, [=] { chooseColor(mAltColorL, 1); });
+ mUseAltColors = new QCheckBox(tr("Use alternating colors"));
+ connect(mUseAltColors, &QCheckBox::stateChanged, [=]{
+ baseColorB->setEnabled(mUseAltColors->isChecked());
+ altColorB->setEnabled(mUseAltColors->isChecked());
+ });
+ QGridLayout *colorGrid = new QGridLayout;
+ colorGrid->setAlignment(Qt::AlignTop);
+ colorGrid->addWidget(baseColorT, 0, 0);
+ colorGrid->addWidget(mBaseColorL, 0, 1);
+ colorGrid->addWidget(baseColorB, 0, 2);
+ colorGrid->addWidget(altColorT, 1, 0);
+ colorGrid->addWidget(mAltColorL, 1, 1);
+ colorGrid->addWidget(altColorB, 1, 2);
+ colorGrid->addWidget(mUseAltColors, 2, 0, 1, 3, Qt::AlignHCenter);
+ QWidget *colorW = new QWidget;
+ colorW->setLayout(colorGrid);
+
//buttons
QPushButton *acceptB = new QPushButton(tr("Save"));
connect(acceptB, &QPushButton::clicked, this, &ConfigurationWidget::accept);
@@ -83,6 +117,7 @@ ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : Q
tab->addTab(mCopyDirW, tr("Copy dirs"));
tab->addTab(mFavDirW, tr("Fav. dirs"));
tab->addTab(mMimeTypeW, tr("MIME filter"));
+ tab->addTab(colorW, tr("Colors"));
mainLayout->addWidget(tab);
mainLayout->addLayout(bLayout);
readSettings();
@@ -106,6 +141,9 @@ void ConfigurationWidget::accept(){
s.setValue("favdirs", favDirs);
QStringList mimeFilters = mMimeTypeW->items();
s.setValue("mimefilters", mimeFilters);
+ s.setValue("alternatecolors", mUseAltColors->isChecked());
+ s.setValue("basecolor", mColors.at(0));
+ s.setValue("altcolor", mColors.at(1));
QDialog::accept();
}
@@ -130,4 +168,25 @@ void ConfigurationWidget::readSettings(){
mFavDirW->setItems(favDirs);
QStringList mimeFilters = s.value("mimefilters").toStringList();
mMimeTypeW->setItems(mimeFilters);
+ mUseAltColors->setChecked(s.value("alternatecolors").toBool());
+ QVariant c1 = s.value("basecolor");
+ mColors[0] = c1.value<QColor>();
+ QPixmap pm1(mBaseColorL->sizeHint());
+ pm1.fill(mColors.at(0));
+ mBaseColorL->setPixmap(pm1);
+ QVariant c2 = s.value("altcolor");
+ mColors[1] = c2.value<QColor>();
+ QPixmap pm2(mAltColorL->sizeHint());
+ pm2.fill(mColors.at(1));
+ mAltColorL->setPixmap(pm2);
+}
+
+void ConfigurationWidget::chooseColor(QLabel *l, int colorIndex){
+ QColor c = QColorDialog::getColor(mColors.at(colorIndex), this);
+ if(c.isValid()){
+ mColors[colorIndex] = c;
+ QPixmap pm(l->sizeHint());
+ pm.fill(c);
+ l->setPixmap(pm);
+ }
}
diff --git a/configurationwidget.h b/configurationwidget.h
index 08488cc..8e7bb19 100644
--- a/configurationwidget.h
+++ b/configurationwidget.h
@@ -2,9 +2,13 @@
#define CONFIGURATIONWIDGET_H
#include <QDialog>
+#include <QVector>
+#include <QColor>
class QLineEdit;
class ItemSelectionWidget;
+class QLabel;
+class QCheckBox;
class ConfigurationWidget : public QDialog {
Q_OBJECT
@@ -19,6 +23,7 @@ class ConfigurationWidget : public QDialog {
private:
void readSettings();
+ void chooseColor(QLabel *l, int colorIndex);
QLineEdit *mDbHost;
QLineEdit *mDbUser;
QLineEdit *mDbPass;
@@ -26,9 +31,13 @@ class ConfigurationWidget : public QDialog {
QLineEdit *mFfProbe;
QLineEdit *mFfMpeg;
QLineEdit *mMkvInfo;
+ QLabel *mBaseColorL;
+ QLabel *mAltColorL;
+ QCheckBox *mUseAltColors;
ItemSelectionWidget *mCopyDirW;
ItemSelectionWidget *mFavDirW;
ItemSelectionWidget *mMimeTypeW;
+ QVector<QColor> mColors;
};
#endif // CONFIGURATIONWIDGET_H
diff --git a/filewidget.cpp b/filewidget.cpp
index a56d1fa..ab087dd 100644
--- a/filewidget.cpp
+++ b/filewidget.cpp
@@ -103,6 +103,7 @@ void FileWidget::setupGui(){
topL->addWidget(mMimeFilters, 1, 3);
mFileView = new QTreeView;
+ Globals::instance()->addView(mFileView);
mFileView->setSortingEnabled(true);
mFileView->setUniformRowHeights(true);
mFileView->setSelectionBehavior(QAbstractItemView::SelectRows);
diff --git a/globals.cpp b/globals.cpp
index 53bd1f0..68d710a 100644
--- a/globals.cpp
+++ b/globals.cpp
@@ -16,6 +16,12 @@ void Globals::addAction(QAction *a){
mActions.insert(a->data().toInt(), a);
}
+void Globals::addView(QTreeView *v){
+ if(!mViews.contains(v)){
+ mViews.append(v);
+ }
+}
+
QAction *Globals::action(int actionType){
return mActions.value(actionType);
}
diff --git a/globals.h b/globals.h
index e0bc5ef..c8037fe 100644
--- a/globals.h
+++ b/globals.h
@@ -3,9 +3,11 @@
#include <QObject>
#include <QHash>
+#include <QVector>
class QAction;
class Viewer;
+class QTreeView;
class Globals : public QObject {
Q_OBJECT
@@ -13,6 +15,8 @@ class Globals : public QObject {
enum ActionType { QuitAction = 0, ConfigAction = 1 };
static Globals *instance();
void addAction(QAction *a);
+ void addView(QTreeView *v);
+ const QVector<QTreeView*> views() { return mViews; }
QAction *action(int actionType);
Viewer *viewer();
@@ -23,6 +27,7 @@ class Globals : public QObject {
static Globals *mInstance;
QHash<int, QAction*> mActions;
Viewer *mViewer;
+ QVector<QTreeView*> mViews;
};
#endif // GLOBALS_H
diff --git a/helper.cpp b/helper.cpp
index c3bc118..08b8532 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -11,8 +11,10 @@
#include <QPainter>
#include <QStandardPaths>
#include <QDir>
+#include <QTreeView>
#include "helper.h"
+#include "globals.h"
namespace Helper {
const QString md5Sum(const QString &path){
@@ -155,6 +157,21 @@ namespace Helper {
return QIcon(QPixmap::fromImage(img));
}
+ void setAlternatingRowColors(){
+ QSettings s;
+ bool alternate = s.value("alternatecolors").toBool();
+ if(alternate){
+ QColor b = s.value("basecolor").value<QColor>();
+ QColor a = s.value("altcolor").value<QColor>();
+ QString style = QString("background-color: rgb(%1,%2,%3);alternate-background-color: rgb(%4,%5,%6);").arg(b.red()).arg(b.green()).arg(b.blue()).arg(a.red()).arg(a.green()).arg(a.blue());
+ QVector<QTreeView*> views = Globals::instance()->views();
+ for(QTreeView *v : views){
+ v->setAlternatingRowColors(true);
+ v->setStyleSheet(style);
+ }
+ }
+ }
+
Duration::Duration() : mHours(0), mMinutes(0), mSeconds(0) {}
Duration::Duration(qint64 seconds){
diff --git a/helper.h b/helper.h
index c8982b4..4883a5f 100644
--- a/helper.h
+++ b/helper.h
@@ -13,6 +13,7 @@ namespace Helper {
const QImage snapshot(const QString &file, int offset);
const QString appDataDir();
const QIcon icon(const QColor &bg, const QChar c, bool bold = true);
+ void setAlternatingRowColors();
class Duration {
public:
Duration();
diff --git a/searchdialog.cpp b/searchdialog.cpp
index e30ead6..50109b9 100644
--- a/searchdialog.cpp
+++ b/searchdialog.cpp
@@ -17,6 +17,7 @@
#include "searchdialog.h"
#include "searchview.h"
#include "helper.h"
+#include "globals.h"
SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
//search bar
@@ -42,6 +43,7 @@ SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent,
QSortFilterProxyModel *resMProxy = new QSortFilterProxyModel;
resMProxy->setSourceModel(mResM);
mResV = new SearchView;
+ Globals::instance()->addView(mResV);
mResV->setModel(resMProxy);
connect(mResV->selectionModel(), &QItemSelectionModel::currentChanged, this, &SearchDialog::doResult);
QHBoxLayout *resGBL = new QHBoxLayout;
@@ -52,6 +54,7 @@ SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent,
QSortFilterProxyModel *dataMProxy = new QSortFilterProxyModel;
dataMProxy->setSourceModel(mDataM);
mDataV = new SearchView;
+ Globals::instance()->addView(mDataV);
mDataV->setModel(dataMProxy);
QHBoxLayout *dataGBL = new QHBoxLayout;
dataGBL->addWidget(mDataV);
diff --git a/searchview.cpp b/searchview.cpp
index a4ba25b..c74b661 100644
--- a/searchview.cpp
+++ b/searchview.cpp
@@ -1,6 +1,7 @@
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>
+#include <QApplication>
#include "searchview.h"
#include "helper.h"
@@ -20,6 +21,8 @@ SearchView::SearchView(QWidget *parent) : QTreeView(parent){
QAction *collapseAllA = new QAction(Helper::icon(QColor(255,85,255), QChar(0x2196)), tr("Collapse all"), this);
connect(collapseAllA, &QAction::triggered, this, &SearchView::collapseAll);
mCtxMenu->addAction(collapseAllA);
+ setAlternatingRowColors(true);
+ setPalette(qApp->palette());
}
void SearchView::expandNode(){
diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp
index a0bf4f2..e31545f 100644
--- a/shemovcleaner.cpp
+++ b/shemovcleaner.cpp
@@ -24,6 +24,7 @@
#include "configurationwidget.h"
#include "filewidget.h"
#include "globals.h"
+#include "helper.h"
ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(parent, f) {
//general setup
@@ -83,6 +84,7 @@ ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(p
restoreGeometry(s.value("geometry").toByteArray());
mTorrentTab->torrentFileView()->setFocus();
readSettings();
+ Helper::setAlternatingRowColors();
mTorrentTab->selectFirst();
mFileTab->selectFirst();
}
@@ -137,6 +139,7 @@ void ShemovCleaner::configure(){
if(res == QDialog::Accepted){
openDatabase();
emit configurationChanged();
+ Helper::setAlternatingRowColors();
}
}
@@ -236,6 +239,7 @@ void ShemovCleaner::readSettings(){
int curTab = s.value("startupTab").toInt();
mTab->setCurrentIndex(curTab);
tabChanged(curTab);
+
}
void ShemovCleaner::writeSettings(){
diff --git a/torrentwidget.cpp b/torrentwidget.cpp
index bb3bf54..8cdbca1 100644
--- a/torrentwidget.cpp
+++ b/torrentwidget.cpp
@@ -65,6 +65,7 @@ void TorrentWidget::setupGui(){
buttonL->addWidget(doSearchTorrentsB, 1, 2);
mFileView = new QTreeView;
+ Globals::instance()->addView(mFileView);
mFileView->setSortingEnabled(true);
mFileView->setSelectionBehavior(QAbstractItemView::SelectRows);
mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);