From 7bb7295a9033c0a6729b301e7c9b76393539e29a Mon Sep 17 00:00:00 2001 From: Arno Date: Wed, 22 Dec 2010 16:59:12 +0100 Subject: Made colors configurable Added a tab to ConfigurationDialog to make some colors configurable. It works somehow. The font color isn't evaluated yet, since I'm not convinced that it is a good idea. But one problem is that calling qApp->setPalette() doesn't propagate to non visible child dialogs. Dunno if it's worth fixing. --- archivetreeview.cpp | 9 ++++ archivetreeview.h | 1 + configurationdialog.cpp | 136 ++++++++++++++++++++++++++++++++++++++++++++++++ configurationdialog.h | 19 +++++++ filestreemodel.cpp | 9 +++- filestreemodel.h | 5 ++ filestreewidget.cpp | 2 +- filestreewidget.h | 2 +- filesystemwidget.cpp | 2 + mappingtablewidget.cpp | 1 + seriestreewidget.cpp | 6 ++- seriestreewidget.h | 2 +- shemov.cpp | 17 ++++-- 13 files changed, 202 insertions(+), 9 deletions(-) diff --git a/archivetreeview.cpp b/archivetreeview.cpp index 5d8a96d..1a58041 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -82,6 +82,8 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ mNoCoverDialog = new NoCoverMovieDialog(this); mNoCoverDialog->setHidden(true); connect(mNoCoverDialog->view(), SIGNAL(doubleClicked(QModelIndex)), this, SLOT(selectMovie(QModelIndex))); + mFilesWidget->filesTree()->setAlternatingRowColors(true); + mSeriesWidget->seriesTree()->setAlternatingRowColors(true); // layout QHBoxLayout *mainLayout = new QHBoxLayout; @@ -94,6 +96,7 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ setLayout(mainLayout); constructWindowTitle(); + readSettings(); } void ArchiveTreeView::setFileViewMode(int mode){ @@ -196,6 +199,12 @@ void ArchiveTreeView::copyPath(int type){ } } +void ArchiveTreeView::readSettings(){ + seriesWidget()->seriesTree()->readSettings(); + filesWidget()->filesTree()->readSettings(); + mFilesModel->readSettings(); +} + void ArchiveTreeView::currentChanged(const QItemSelection &selected, const QItemSelection &deselected){ Q_UNUSED(selected); Q_UNUSED(deselected); diff --git a/archivetreeview.h b/archivetreeview.h index 7b0cd47..e2c0a9d 100644 --- a/archivetreeview.h +++ b/archivetreeview.h @@ -49,6 +49,7 @@ class ArchiveTreeView : public QWidget void showNoCoverDialog(); void selectMovie(const QModelIndex &idx); void copyPath(int type); + void readSettings(); private slots: void currentChanged(const QItemSelection &selected, const QItemSelection &deselected); diff --git a/configurationdialog.cpp b/configurationdialog.cpp index 08186e9..7008e76 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -27,6 +27,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include "configurationdialog.h" #include "programconfigurator.h" @@ -177,6 +183,81 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q databaseWidget->setLayout(dbGrid); mTab->addTab(databaseWidget, tr("Database")); + //colors tab + QWidget *colorsWidget = new QWidget; + QGridLayout *colorGrid = new QGridLayout; + QSignalMapper *colorMapper = new QSignalMapper(this); + QLabel *colorl1 = new QLabel(tr("Files marked as seen")); + mSeenColor = new QLabel; + mSeenColor->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mSeenColor->setScaledContents(true); + mSeenButton = new QPushButton(tr("Choose...")); + colorGrid->addWidget(colorl1, 0, 0); + colorGrid->addWidget(mSeenColor, 0, 1); + colorGrid->addWidget(mSeenButton, 0, 2); + colorMapper->setMapping(mSeenButton, mSeenColor); + connect(mSeenButton, SIGNAL(clicked()), colorMapper, SLOT(map())); + QLabel *colorl2 = new QLabel(tr("Files in clipboard")); + mClipboardColor = new QLabel; + mClipboardColor->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mClipboardColor->setScaledContents(true); + mClipboardButton = new QPushButton(tr("Choose...")); + colorGrid->addWidget(colorl2, 1, 0); + colorGrid->addWidget(mClipboardColor, 1, 1); + colorGrid->addWidget(mClipboardButton, 1, 2); + colorMapper->setMapping(mClipboardButton, mClipboardColor); + connect(mClipboardButton, SIGNAL(clicked()), colorMapper, SLOT(map())); + QLabel *colorl3 = new QLabel(tr("Base color for rows")); + mBaseColor = new QLabel; + mBaseColor->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mBaseColor->setScaledContents(true); + mBaseButton = new QPushButton(tr("Choose...")); + colorGrid->addWidget(colorl3, 2, 0); + colorGrid->addWidget(mBaseColor, 2, 1); + colorGrid->addWidget(mBaseButton, 2, 2); + colorMapper->setMapping(mBaseButton, mBaseColor); + connect(mBaseButton, SIGNAL(clicked()), colorMapper, SLOT(map())); + QLabel *colorl4 = new QLabel(tr("Alternate base for rows")); + mAlternateBaseColor = new QLabel; + mAlternateBaseColor->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mAlternateBaseColor->setScaledContents(true); + mAlternateBaseButton = new QPushButton(tr("Choose...")); + colorGrid->addWidget(colorl4, 3, 0); + colorGrid->addWidget(mAlternateBaseColor, 3, 1); + colorGrid->addWidget(mAlternateBaseButton, 3, 2); + colorMapper->setMapping(mAlternateBaseButton, mAlternateBaseColor); + connect(mAlternateBaseButton, SIGNAL(clicked()), colorMapper, SLOT(map())); + QLabel *colorl5 = new QLabel(tr("Font color")); + mFontColor = new QLabel; + mFontColor->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mFontColor->setScaledContents(true); + mFontColorButton = new QPushButton(tr("Choose...")); + colorGrid->addWidget(colorl5, 4, 0); + colorGrid->addWidget(mFontColor, 4, 1); + colorGrid->addWidget(mFontColorButton, 4, 2); + colorMapper->setMapping(mFontColorButton, mFontColor); + connect(mFontColorButton, SIGNAL(clicked()), colorMapper, SLOT(map())); + QLabel *colorl6 = new QLabel(tr("Local files")); + mLocalColor = new QLabel; + mLocalColor->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mLocalColor->setScaledContents(true); + mLocalColorButton = new QPushButton(tr("Choose...")); + colorGrid->addWidget(colorl6, 5, 0); + colorGrid->addWidget(mLocalColor, 5, 1); + colorGrid->addWidget(mLocalColorButton, 5, 2); + colorMapper->setMapping(mLocalColorButton, mLocalColor); + connect(mLocalColorButton, SIGNAL(clicked()), colorMapper, SLOT(map())); + connect(colorMapper, SIGNAL(mapped(QWidget*)), this, SLOT(chooseColor(QWidget*))); + mAlternateColors = new QCheckBox(tr("Use alternating row colors")); + mAlternateColors->setTristate(false); + connect(mAlternateColors, SIGNAL(stateChanged(int)), this, SLOT(alternateColorsChanged(int))); + colorGrid->addWidget(mAlternateColors, 6, 1, 1, 2, Qt::AlignLeft); + QVBoxLayout *colorStretchLayout = new QVBoxLayout; + colorStretchLayout->addStretch(); + colorGrid->addLayout(colorStretchLayout, 7, 1, 3, Qt::AlignLeft); + colorsWidget->setLayout(colorGrid); + mTab->addTab(colorsWidget, tr("Colors")); + //main layout mOk = new QPushButton(tr("Ok")); connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); @@ -235,6 +316,26 @@ void ConfigurationDialog::readSettings(){ mDatabaseUsername->setText(s.value("database/dbuser").toString()); mDatabasePassword->setText(s.value("database/dbpass").toString()); + //read colors + QVariant seen = s.value("ui/seencolor", Qt::red); + mColors.insert(mSeenColor, seen.value()); + QVariant clip = s.value("ui/clipcolor", Qt::darkBlue); + mColors.insert(mClipboardColor, clip.value()); + QVariant base = s.value("ui/basecolor", qApp->palette().base().color()); + mColors.insert(mBaseColor, base.value()); + QVariant alternate = s.value("ui/alternatecolor", qApp->palette().alternateBase().color()); + mColors.insert(mAlternateBaseColor, alternate.value()); + QVariant font = s.value("ui/fontcolor", qApp->palette().foreground().color()); + mColors.insert(mFontColor, font.value()); + QVariant local = s.value("ui/localcolor", Qt::darkBlue); + mColors.insert(mLocalColor, local.value()); + QHash::const_iterator it; + for(it = mColors.constBegin(); it != mColors.constEnd(); ++it){ + setColor(it.key()); + } + bool allowAlternate = s.value("ui/allowalternate", true).toBool(); + mAlternateColors->setChecked(allowAlternate); + alternateColorsChanged(mAlternateColors->checkState()); } void ConfigurationDialog::writeSettings(){ @@ -277,6 +378,15 @@ void ConfigurationDialog::writeSettings(){ //write pics mPicConfig->writeSettings(); + + //write colors + s.setValue("ui/seencolor", mColors.value(mSeenColor)); + s.setValue("ui/clipcolor", mColors.value(mClipboardColor)); + s.setValue("ui/basecolor", mColors.value(mBaseColor)); + s.setValue("ui/alternatecolor", mColors.value(mAlternateBaseColor)); + s.setValue("ui/fontcolor", mColors.value(mFontColor)); + s.setValue("ui/localcolor", mColors.value(mLocalColor)); + s.setValue("ui/allowalternate", mAlternateColors->isChecked()); } bool ConfigurationDialog::checkDvdPath(){ @@ -329,3 +439,29 @@ void ConfigurationDialog::mountError(const QString &error){ QSettings s; s.setValue("paths/dvdmount", QString()); } + +void ConfigurationDialog::chooseColor(QWidget *label){ + QColor newColor = QColorDialog::getColor(mColors.value(label), this); + if(newColor.isValid()){ + mColors[label] = newColor; + setColor(label); + } +} + +void ConfigurationDialog::alternateColorsChanged(int state){ + mBaseButton->setEnabled(state == Qt::Checked); + mBaseColor->setEnabled(state == Qt::Checked); + mAlternateBaseButton->setEnabled(state == Qt::Checked); + mAlternateBaseColor->setEnabled(state == Qt::Checked); +} + +void ConfigurationDialog::setColor(QWidget *label){ + QLabel *curLabel = qobject_cast(label); + if(!curLabel){ + return; + } + QColor curColor = mColors.value(label); + QPixmap pm(curLabel->sizeHint()); + pm.fill(curColor); + curLabel->setPixmap(pm); +} diff --git a/configurationdialog.h b/configurationdialog.h index dd8e62b..0f7f76e 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -9,6 +9,7 @@ #define CONFIGURATIONDIALOG_H #include +#include class QPushButton; class QTabWidget; @@ -16,6 +17,7 @@ class QLineEdit; class QComboBox; class QCheckBox; class QSpinBox; +class QLabel; class ProgramConfigurator; @@ -30,12 +32,15 @@ class ConfigurationDialog : public QDialog { private slots: void setGrabFrameEnabled(bool enabled); + void chooseColor(QWidget *label); + void alternateColorsChanged(int); private: void readSettings(); void writeSettings(); bool checkDvdPath(); void mountError(const QString &error); + void setColor(QWidget *label); QPushButton *mOk; QPushButton *mCancel; QTabWidget *mTab; @@ -58,6 +63,20 @@ class ConfigurationDialog : public QDialog { QCheckBox *mHoverArchive; QCheckBox *mHoverMovies; QSpinBox *mHoverOpacity; + QLabel *mSeenColor; + QLabel *mClipboardColor; + QLabel *mBaseColor; + QLabel *mAlternateBaseColor; + QLabel *mFontColor; + QLabel *mLocalColor; + QPushButton *mSeenButton; + QPushButton *mClipboardButton; + QPushButton *mBaseButton; + QPushButton *mAlternateBaseButton; + QPushButton *mFontColorButton; + QPushButton *mLocalColorButton; + QCheckBox *mAlternateColors; + QHash mColors; }; #endif diff --git a/filestreemodel.cpp b/filestreemodel.cpp index f81711d..1a8b959 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "filestreemodel.h" #include "smtreeitem.h" @@ -201,7 +202,7 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{ } if(index.column() == FileName){ if(item->data(DvdNo) == -1){ - return QColor(Qt::darkBlue); + return mLocalColor; } } } @@ -522,6 +523,12 @@ void FilesTreeModel::writeCache(){ } } +void FilesTreeModel::readSettings(){ + QSettings s; + QVariant local = s.value("ui/localcolor", Qt::darkBlue); + mLocalColor = local.value(); +} + void FilesTreeModel::populate(QSqlQuery &filesQuery){ SmTreeItem *root = new SmTreeItem(15); SmTreeItem *files = new SmTreeItem(15, root); diff --git a/filestreemodel.h b/filestreemodel.h index 7acca2c..23e5f75 100644 --- a/filestreemodel.h +++ b/filestreemodel.h @@ -12,6 +12,7 @@ #include #include #include +#include #include "smtreemodel.h" @@ -56,6 +57,9 @@ class FilesTreeModel : public SmTreeModel { void readCache(); void writeCache(); + public slots: + void readSettings(); + private: //functions void populate(QSqlQuery &filesQuery); @@ -80,6 +84,7 @@ class FilesTreeModel : public SmTreeModel { SeriesTreeModel *mSeriesModel; int mMode; const int mMagic; + QColor mLocalColor; }; #endif // FILESTREEMODEL_H diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 857b848..671d531 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -308,7 +308,7 @@ void FilesTreeView::setModel(QAbstractItemModel *model){ readHeaderConfig(); } -void FilesTreeView::readConfig(){ +void FilesTreeView::readSettings(){ QSettings s; mHoverPics = s.value("ui/hoverpics", true).toBool(); mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0); diff --git a/filestreewidget.h b/filestreewidget.h index 23c9ef8..86b6a15 100644 --- a/filestreewidget.h +++ b/filestreewidget.h @@ -64,7 +64,7 @@ class FilesTreeView : public QTreeView { virtual void setModel(QAbstractItemModel *model); public slots: - void readConfig(); + void readSettings(); void readHeaderConfig(); void writeHeaderConfig(); void toggleHeader(QObject *action); diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index c3c86c1..876d27d 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -58,6 +58,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboar mDirView->setEditTriggers(QAbstractItemView::NoEditTriggers); mDirView->setSortingEnabled(true); mDirView->sortByColumn(0, Qt::AscendingOrder); + mDirView->setAlternatingRowColors(true); mFileView = new FileView; mFileProxy = new FilesystemFileProxy; @@ -68,6 +69,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboar mFileView->setItemsExpandable(false); mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); mFileView->setEditTriggers(QAbstractItemView::NoEditTriggers); + mFileView->setAlternatingRowColors(true); mPicViewer = SmGlobals::instance()->pictureViewer(); diff --git a/mappingtablewidget.cpp b/mappingtablewidget.cpp index 03bfa75..74763b9 100644 --- a/mappingtablewidget.cpp +++ b/mappingtablewidget.cpp @@ -26,6 +26,7 @@ MappingTableWidget::MappingTableWidget(const QString &table, QWidget *parent) : mModel = new MappingTableItemModel(this); mModel->setHeaderData(0, Qt::Horizontal, mTable); mView->setModel(mModel); + mView->setAlternatingRowColors(true); //mapping model mMappingModel = static_cast(SmGlobals::instance()->model(mTable)); diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index fdcf24d..f068d29 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "seriestreewidget.h" #include "smtreemodel.h" @@ -314,13 +315,14 @@ void SeriesTreeWidget::addCover(){ SeriesTreeView::SeriesTreeView(QWidget *parent) : QTreeView(parent), mHoverWin(new HoverWindow), mHover(false) { setAttribute(Qt::WA_Hover); - readConfig(); + readSettings(); } -void SeriesTreeView::readConfig(){ +void SeriesTreeView::readSettings(){ QSettings s; mHover = s.value("ui/hoverarchive", true).toBool(); mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0); + } void SeriesTreeView::contextMenuEvent(QContextMenuEvent *e){ diff --git a/seriestreewidget.h b/seriestreewidget.h index b8d89e6..fc55415 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -72,7 +72,7 @@ class SeriesTreeView : public QTreeView { explicit SeriesTreeView(QWidget *parent = 0); public slots: - void readConfig(); + void readSettings(); protected: virtual void contextMenuEvent(QContextMenuEvent *e); diff --git a/shemov.cpp b/shemov.cpp index 79712dd..3170699 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -69,8 +69,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mATree, SIGNAL(needWindowTitleChange(QString)), this, SLOT(setWindowTitle(QString))); connect(mATree->filesWidget()->filesTree()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mATree->seriesWidget()->seriesTree()->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSelectionCount(QItemSelection,QItemSelection))); - connect(this, SIGNAL(configChanged()), mATree->seriesWidget()->seriesTree(), SLOT(readConfig())); - connect(this, SIGNAL(configChanged()), mATree->filesWidget()->filesTree(), SLOT(readConfig())); + connect(this, SIGNAL(configChanged()), mATree, SLOT(readSettings())); //newmoviewizard mNewMovieWizard = new NewMovieWizard(this); @@ -102,7 +101,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla setCentralWidget(centralWidget); show(); mATree->seriesWidget()->readSettings(); - mATree->filesWidget()->filesTree()->readConfig(); + mATree->filesWidget()->filesTree()->readSettings(); mFSWidget->readSettings(); readSettings(); mFSWidget->fileView()->setFocus(Qt::ActiveWindowFocusReason); @@ -859,6 +858,18 @@ void SheMov::readSettings(){ } } } + bool alternate = s.value("ui/allowalternate").toBool(); + QPalette pal(palette()); + if(alternate){ + QVariant basecolor = s.value("ui/basecolor"); + QVariant alternatecolor = s.value("ui/alternatecolor"); + pal.setColor(QPalette::Base, basecolor.value()); + pal.setColor(QPalette::AlternateBase, alternatecolor.value()); + }else{ + pal.setColor(QPalette::Base, Qt::white); + pal.setColor(QPalette::AlternateBase, Qt::white); + } + qApp->setPalette(pal); } void SheMov::checkConsistency(){ -- cgit v1.2.3-70-g09d2