From ff9b4e13f9bfb9b5da92bdd1580d1cf9788784d6 Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 24 May 2009 17:46:44 +0000 Subject: [PATCH] Ajout d'une option permettant d'utiliser ou non les couleurs systeme. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@680 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- misc/qelectrotech.conf | 1 + misc/qelectrotech.sample.conf | 1 + sources/configpages.cpp | 18 ++++++++++++++++++ sources/configpages.h | 2 ++ sources/qetapp.cpp | 32 +++++++++++++++++++++++++++++--- sources/qetapp.h | 4 +++- sources/qetdiagrameditor.cpp | 10 ++-------- 7 files changed, 56 insertions(+), 12 deletions(-) diff --git a/misc/qelectrotech.conf b/misc/qelectrotech.conf index 6d953ba04..5d20aea3c 100644 --- a/misc/qelectrotech.conf +++ b/misc/qelectrotech.conf @@ -1,4 +1,5 @@ [General] +usesystemcolors=true [diagrameditor] defaultauthor= diff --git a/misc/qelectrotech.sample.conf b/misc/qelectrotech.sample.conf index 6d953ba04..5d20aea3c 100644 --- a/misc/qelectrotech.sample.conf +++ b/misc/qelectrotech.sample.conf @@ -1,4 +1,5 @@ [General] +usesystemcolors=true [diagrameditor] defaultauthor= diff --git a/sources/configpages.cpp b/sources/configpages.cpp index 54ed24a2b..ea62cd250 100644 --- a/sources/configpages.cpp +++ b/sources/configpages.cpp @@ -101,9 +101,13 @@ GeneralConfigurationPage::GeneralConfigurationPage(QWidget *parent) : ConfigPage // acces a la configuration de QElectroTech QSettings &settings = QETApp::settings(); + bool use_system_colors = settings.value("usesystemcolors", "true").toBool(); bool tabbed = settings.value("diagrameditor/viewmode", "tabbed") == "tabbed"; bool integrate_elements = settings.value("diagrameditor/integrate-elements", true).toBool(); + appearance_ = new QGroupBox(tr("Apparence"), this); + use_system_colors_ = new QCheckBox(tr("Utiliser les couleurs du syst\350me"), appearance_); + projects_view_mode_ = new QGroupBox(tr("Projets"), this); windowed_mode_ = new QRadioButton(tr("Utiliser des fen\352tres"), projects_view_mode_); tabbed_mode_ = new QRadioButton(tr("Utiliser des onglets"), projects_view_mode_); @@ -112,6 +116,8 @@ GeneralConfigurationPage::GeneralConfigurationPage(QWidget *parent) : ConfigPage elements_management_ = new QGroupBox(tr("Gestion des \351l\351ments"), this); integrate_elements_ = new QCheckBox(tr("Int\351grer automatiquement les \351l\351ments dans les projets (recommand\351)"), elements_management_); + use_system_colors_ -> setChecked(use_system_colors); + if (tabbed) { tabbed_mode_ -> setChecked(true); } else { @@ -120,6 +126,10 @@ GeneralConfigurationPage::GeneralConfigurationPage(QWidget *parent) : ConfigPage integrate_elements_ -> setChecked(integrate_elements); + QVBoxLayout *appearance_layout = new QVBoxLayout(); + appearance_layout -> addWidget(use_system_colors_); + appearance_ -> setLayout(appearance_layout); + QVBoxLayout *projects_view_mode_layout = new QVBoxLayout(); projects_view_mode_layout -> addWidget(windowed_mode_); projects_view_mode_layout -> addWidget(tabbed_mode_); @@ -139,6 +149,7 @@ GeneralConfigurationPage::GeneralConfigurationPage(QWidget *parent) : ConfigPage horiz_line_ -> setFrameShape(QFrame::HLine); vlayout1 -> addWidget(horiz_line_); + vlayout1 -> addWidget(appearance_); vlayout1 -> addWidget(projects_view_mode_); vlayout1 -> addWidget(elements_management_); vlayout1 -> addStretch(); @@ -156,6 +167,13 @@ GeneralConfigurationPage::~GeneralConfigurationPage() { void GeneralConfigurationPage::applyConf() { QSettings &settings = QETApp::settings(); + bool was_using_system_colors = settings.value("usesystemcolors", "true").toBool(); + bool must_use_system_colors = use_system_colors_ -> isChecked(); + settings.setValue("usesystemcolors", must_use_system_colors); + if (was_using_system_colors != must_use_system_colors) { + QETApp::instance() -> useSystemPalette(must_use_system_colors); + } + QString view_mode = tabbed_mode_ -> isChecked() ? "tabbed" : "windowed"; settings.setValue("diagrameditor/viewmode", view_mode) ; diff --git a/sources/configpages.h b/sources/configpages.h index 13dac0e25..a16a79d4d 100644 --- a/sources/configpages.h +++ b/sources/configpages.h @@ -90,6 +90,8 @@ class GeneralConfigurationPage : public ConfigPage { public: QLabel *title_label_; QFrame *horiz_line_; + QGroupBox *appearance_; + QCheckBox *use_system_colors_; QGroupBox *projects_view_mode_; QRadioButton *windowed_mode_; QRadioButton *tabbed_mode_; diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 3c947b8fe..e4d8a619a 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -50,8 +50,9 @@ QETApp::QETApp(int &argc, char **argv) : { parseArguments(); initLanguage(); - initStyle(); + QET::Icons::initIcons(); initConfiguration(); + initStyle(); if (!non_interactive_execution_ && isRunning()) { // envoie les arguments a l'instance deja existante @@ -596,6 +597,28 @@ void QETApp::invertMainWindowVisibility(QWidget *window) { if (QMainWindow *w = qobject_cast(window)) setMainWindowVisible(w, !w -> isVisible()); } +/** + Change la palette de l'application + @param use true pour utiliser les couleurs du systeme, false pour utiliser celles du theme en cours +*/ +void QETApp::useSystemPalette(bool use) { + if (use) { + setPalette(initial_palette_); + } else { + setPalette(style() -> standardPalette()); + } + + // reapplique les feuilles de style + setStyleSheet( + "QAbstractScrollArea#mdiarea {" + " background-color:white;" + " background-image: url(':/ico/mdiarea_bg.png');" + " background-repeat: no-repeat;" + " background-position: center middle;" + "}" + ); +} + /** Demande la fermeture de toutes les fenetres ; si l'utilisateur les accepte, l'application quitte @@ -807,13 +830,15 @@ void QETApp::initLanguage() { Met en place tout ce qui concerne le style graphique de l'application */ void QETApp::initStyle() { - // initialise les icones - QET::Icons::initIcons(); + initial_palette_ = palette(); // lorsque le style Plastique est active, on le remplace par une version amelioree if (qobject_cast(style())) { setStyle(new QETStyle()); } + + // applique ou non les couleurs de l'environnement + useSystemPalette(settings().value("usesystemcolors", true).toBool()); } /** @@ -834,6 +859,7 @@ void QETApp::initConfiguration() { qet_settings = new QSettings(configDir() + "qelectrotech.conf", QSettings::IniFormat, this); // fichiers recents + // note : les icones doivent etre initialisees avant ces instructions (qui creent des menus en interne) projects_recent_files_ = new RecentFiles("projects"); elements_recent_files_ = new RecentFiles("elements"); } diff --git a/sources/qetapp.h b/sources/qetapp.h index fa164e959..c59d65dd5 100644 --- a/sources/qetapp.h +++ b/sources/qetapp.h @@ -128,6 +128,7 @@ class QETApp : public QETSingleApplication { QSettings *qet_settings; QETArguments qet_arguments_; ///< Analyseur d'arguments bool non_interactive_execution_; ///< booleen indiquant si l'application va se terminer immediatement apres un court traitement + QPalette initial_palette_; ///< Palette des couleurs systeme static FileElementsCollection *common_collection; static FileElementsCollection *custom_collection; @@ -135,7 +136,7 @@ class QETApp : public QETSingleApplication { static uint next_project_id; static RecentFiles *projects_recent_files_; static RecentFiles *elements_recent_files_; - + public slots: void systray(QSystemTrayIcon::ActivationReason); void reduceEveryEditor(); @@ -149,6 +150,7 @@ class QETApp : public QETSingleApplication { bool closeEveryEditor(); void setMainWindowVisible(QMainWindow *, bool); void invertMainWindowVisibility(QWidget *); + void useSystemPalette(bool); void quitQET(); void checkRemainingWindows(); void messageReceived(const QString &); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 078f20969..7c4a770b7 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -40,16 +40,10 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) : { // mise en place de l'interface MDI au centre de l'application setCentralWidget(&workspace); + + // nomme l'objet afin qu'il soit reperable par les feuilles de style workspace.setBackground(QBrush(Qt::NoBrush)); workspace.setObjectName("mdiarea"); - workspace.setStyleSheet( - "QAbstractScrollArea#mdiarea {" - " background-color:white;" - " background-image: url(':/ico/mdiarea_bg.png');" - " background-repeat: no-repeat;" - " background-position: center middle;" - "}" - ); // mise en place du signalmapper connect(&windowMapper, SIGNAL(mapped(QWidget *)), this, SLOT(activateWidget(QWidget *)));