From f9cc98791a77f9891874051b78ee73abf5843d15 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Fri, 19 Mar 2010 08:04:35 +0000 Subject: [PATCH] Subclass Cleanlook style to make sure the progress value is displayed when selected --- src/main.cpp | 6 +++ src/options_imp.cpp | 6 +++ src/qgnomelook.h | 96 +++++++++++++++++++++++++++++++++++++++++++++ src/src.pro | 1 + 4 files changed, 109 insertions(+) create mode 100644 src/qgnomelook.h diff --git a/src/main.cpp b/src/main.cpp index 238aa5256..9e5064633 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -39,6 +39,7 @@ #include #include #include +#include "qgnomelook.h" #include "GUI.h" #include "ico.h" #else @@ -159,6 +160,11 @@ void useStyle(QApplication *app, QString style){ if(!style.isEmpty()) { QApplication::setStyle(QStyleFactory::create(style)); } + if(app->style()->objectName() == "cleanlooks") { + // Force our own cleanlooks style + qDebug("Forcing our own cleanlooks style"); + app->setStyle(new QGnomeLookStyle()); + } Preferences::setStyle(app->style()->objectName()); } #endif diff --git a/src/options_imp.cpp b/src/options_imp.cpp index 43e41d804..c9c75d095 100644 --- a/src/options_imp.cpp +++ b/src/options_imp.cpp @@ -34,6 +34,7 @@ #include #include #include +#include "qgnomelook.h" #include #include #include @@ -307,6 +308,11 @@ void options_imp::changePage(QListWidgetItem *current, QListWidgetItem *previous void options_imp::useStyle() { QApplication::setStyle(QStyleFactory::create(comboStyle->itemText(comboStyle->currentIndex()))); + if(QApplication::style()->objectName() == "cleanlooks") { + // Force our own cleanlooks style + qDebug("Forcing our own cleanlooks style"); + QApplication::setStyle(new QGnomeLookStyle()); + } } void options_imp::loadWindowState() { diff --git a/src/qgnomelook.h b/src/qgnomelook.h new file mode 100644 index 000000000..b53a8762b --- /dev/null +++ b/src/qgnomelook.h @@ -0,0 +1,96 @@ +/* + * Bittorrent Client using Qt4 and libtorrent. + * Copyright (C) 2006 Christophe Dumez + * + * 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. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + * + * Contact : chris@qbittorrent.org + */ + +#ifndef QGNOMELOOK +#define QGNOMELOOK + +#include +#include +#include +#include +#include +#include + +class QGnomeLookStyle : public QCleanlooksStyle { + public: + QGnomeLookStyle() : QCleanlooksStyle() {} + + void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { + switch(element) { + case CE_ProgressBarLabel: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) { + bool vertical = false; + if (const QStyleOptionProgressBarV2 *pb2 = qstyleoption_cast(option)) { + vertical = (pb2->orientation == Qt::Vertical); + } + if (!vertical) { + QPalette::ColorRole textRole = QPalette::WindowText;/* + if ((pb->textAlignment & Qt::AlignCenter) && pb->textVisible + && ((qint64(pb->progress) - qint64(pb->minimum)) * 2 >= (qint64(pb->maximum) - qint64(pb->minimum)))) { + textRole = QPalette::HighlightedText; + //Draw text shadow, This will increase readability when the background of same color + QRect shadowRect(pb->rect); + shadowRect.translate(1,1); + QColor shadowColor = (pb->palette.color(textRole).value() <= 128) ? QColor(255,255,255,160) : QColor(0,0,0,160); + QPalette shadowPalette = pb->palette; + shadowPalette.setColor(textRole, shadowColor); + drawItemText(painter, shadowRect, Qt::AlignCenter | Qt::TextSingleLine, shadowPalette, pb->state, pb->text, textRole); + } + QPalette shadowPalette = pb->palette; + shadowPalette.setColor(textRole, QColor(0,0,0,160));*/ + drawItemText(painter, pb->rect, Qt::AlignCenter | Qt::TextSingleLine, pb->palette, pb->state, pb->text, textRole); + } + } + break; + default: + QCleanlooksStyle::drawControl(element, option, painter, widget); + } + } + + QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget=0) const + { + QRect rect; + switch (element) { +#ifndef QT_NO_PROGRESSBAR + case SE_ProgressBarLabel: + case SE_ProgressBarContents: + case SE_ProgressBarGroove: + return option->rect; +#endif // QT_NO_PROGRESSBAR + default: + return QCleanlooksStyle::subElementRect(element, option, widget); + } + + return visualRect(option->direction, option->rect, rect); + } + +}; + +#endif diff --git a/src/src.pro b/src/src.pro index b54161888..c22f85c55 100644 --- a/src/src.pro +++ b/src/src.pro @@ -227,6 +227,7 @@ else:HEADERS += GUI.h \ ico.h \ engineselectdlg.h \ pluginsource.h \ + qgnomelook.h \ searchEngine.h \ rss.h \ rss_imp.h \