From a82cb5b3123224e706835407f21acea9dc7ab0f0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Thu, 24 Jun 2021 20:00:06 +0200 Subject: [PATCH] r3ctl now has themes --- installs.pri | 52 + main.cpp | 164 +-- mainwindow.cpp | 63 +- mainwindow.h | 7 +- mainwindow.ui | 10 + r3ctl.pro | 16 +- r3ctlsettings.cpp | 29 + r3ctlsettings.h | 24 + themes/dark_theme.qss | 1297 +++++++++++++++++ themes/dark_theme/Hmovetoolbar.png | Bin 0 -> 220 bytes themes/dark_theme/Hsepartoolbar.png | Bin 0 -> 172 bytes themes/dark_theme/Vmovetoolbar.png | Bin 0 -> 228 bytes themes/dark_theme/Vsepartoolbar.png | Bin 0 -> 187 bytes themes/dark_theme/branch_closed-on.png | Bin 0 -> 147 bytes themes/dark_theme/branch_closed.png | Bin 0 -> 160 bytes themes/dark_theme/branch_open-on.png | Bin 0 -> 150 bytes themes/dark_theme/branch_open.png | Bin 0 -> 166 bytes themes/dark_theme/checkbox_checked.png | Bin 0 -> 492 bytes .../dark_theme/checkbox_checked_disabled.png | Bin 0 -> 491 bytes themes/dark_theme/checkbox_checked_focus.png | Bin 0 -> 252 bytes themes/dark_theme/checkbox_indeterminate.png | Bin 0 -> 493 bytes .../checkbox_indeterminate_disabled.png | Bin 0 -> 492 bytes .../checkbox_indeterminate_focus.png | Bin 0 -> 249 bytes themes/dark_theme/checkbox_unchecked.png | Bin 0 -> 464 bytes .../checkbox_unchecked_disabled.png | Bin 0 -> 464 bytes .../dark_theme/checkbox_unchecked_focus.png | Bin 0 -> 240 bytes themes/dark_theme/close-hover.png | Bin 0 -> 598 bytes themes/dark_theme/close-pressed.png | Bin 0 -> 598 bytes themes/dark_theme/close.png | Bin 0 -> 586 bytes themes/dark_theme/down_arrow.png | Bin 0 -> 165 bytes themes/dark_theme/down_arrow_disabled.png | Bin 0 -> 166 bytes themes/dark_theme/left_arrow.png | Bin 0 -> 166 bytes themes/dark_theme/left_arrow_disabled.png | Bin 0 -> 166 bytes themes/dark_theme/radio_checked.png | Bin 0 -> 940 bytes themes/dark_theme/radio_checked_disabled.png | Bin 0 -> 972 bytes themes/dark_theme/radio_checked_focus.png | Bin 0 -> 846 bytes themes/dark_theme/radio_unchecked.png | Bin 0 -> 728 bytes .../dark_theme/radio_unchecked_disabled.png | Bin 0 -> 760 bytes themes/dark_theme/radio_unchecked_focus.png | Bin 0 -> 646 bytes themes/dark_theme/right_arrow.png | Bin 0 -> 160 bytes themes/dark_theme/right_arrow_disabled.png | Bin 0 -> 160 bytes themes/dark_theme/sizegrip.png | Bin 0 -> 129 bytes themes/dark_theme/stylesheet-branch-end.png | Bin 0 -> 224 bytes themes/dark_theme/stylesheet-branch-more.png | Bin 0 -> 182 bytes themes/dark_theme/stylesheet-vline.png | Bin 0 -> 239 bytes themes/dark_theme/transparent.png | Bin 0 -> 195 bytes themes/dark_theme/undock.png | Bin 0 -> 578 bytes themes/dark_theme/up_arrow.png | Bin 0 -> 158 bytes themes/dark_theme/up_arrow_disabled.png | Bin 0 -> 159 bytes 49 files changed, 1556 insertions(+), 106 deletions(-) create mode 100644 installs.pri create mode 100644 r3ctlsettings.cpp create mode 100644 r3ctlsettings.h create mode 100644 themes/dark_theme.qss create mode 100644 themes/dark_theme/Hmovetoolbar.png create mode 100644 themes/dark_theme/Hsepartoolbar.png create mode 100644 themes/dark_theme/Vmovetoolbar.png create mode 100644 themes/dark_theme/Vsepartoolbar.png create mode 100644 themes/dark_theme/branch_closed-on.png create mode 100644 themes/dark_theme/branch_closed.png create mode 100644 themes/dark_theme/branch_open-on.png create mode 100644 themes/dark_theme/branch_open.png create mode 100644 themes/dark_theme/checkbox_checked.png create mode 100644 themes/dark_theme/checkbox_checked_disabled.png create mode 100644 themes/dark_theme/checkbox_checked_focus.png create mode 100644 themes/dark_theme/checkbox_indeterminate.png create mode 100644 themes/dark_theme/checkbox_indeterminate_disabled.png create mode 100644 themes/dark_theme/checkbox_indeterminate_focus.png create mode 100644 themes/dark_theme/checkbox_unchecked.png create mode 100644 themes/dark_theme/checkbox_unchecked_disabled.png create mode 100644 themes/dark_theme/checkbox_unchecked_focus.png create mode 100644 themes/dark_theme/close-hover.png create mode 100644 themes/dark_theme/close-pressed.png create mode 100644 themes/dark_theme/close.png create mode 100644 themes/dark_theme/down_arrow.png create mode 100644 themes/dark_theme/down_arrow_disabled.png create mode 100644 themes/dark_theme/left_arrow.png create mode 100644 themes/dark_theme/left_arrow_disabled.png create mode 100644 themes/dark_theme/radio_checked.png create mode 100644 themes/dark_theme/radio_checked_disabled.png create mode 100644 themes/dark_theme/radio_checked_focus.png create mode 100644 themes/dark_theme/radio_unchecked.png create mode 100644 themes/dark_theme/radio_unchecked_disabled.png create mode 100644 themes/dark_theme/radio_unchecked_focus.png create mode 100644 themes/dark_theme/right_arrow.png create mode 100644 themes/dark_theme/right_arrow_disabled.png create mode 100644 themes/dark_theme/sizegrip.png create mode 100644 themes/dark_theme/stylesheet-branch-end.png create mode 100644 themes/dark_theme/stylesheet-branch-more.png create mode 100644 themes/dark_theme/stylesheet-vline.png create mode 100644 themes/dark_theme/transparent.png create mode 100644 themes/dark_theme/undock.png create mode 100644 themes/dark_theme/up_arrow.png create mode 100644 themes/dark_theme/up_arrow_disabled.png diff --git a/installs.pri b/installs.pri new file mode 100644 index 0000000..5434983 --- /dev/null +++ b/installs.pri @@ -0,0 +1,52 @@ +themesInstall.path = $${DESTDIR}/themes +themesInstall.files = themes/dark_theme.qss +INSTALLS += themesInstall + +darkThemeInstall.path = $${DESTDIR}/themes/dark_theme +darkThemeInstall.files = themes/dark_theme/checkbox_indeterminate_disabled.png \ + themes/dark_theme/radio_unchecked.png \ + themes/dark_theme/up_arrow.png \ + themes/dark_theme/branch_closed-on.png \ + themes/dark_theme/checkbox_checked_disabled.png \ + themes/dark_theme/checkbox_unchecked.png \ + themes/dark_theme/checkbox_indeterminate.png \ + themes/dark_theme/stylesheet-branch-more.png \ + themes/dark_theme/checkbox_checked.png \ + themes/dark_theme/checkbox_unchecked_disabled.png \ + themes/dark_theme/radio_checked.png \ + themes/dark_theme/checkbox_indeterminate_focus.png \ + themes/dark_theme/checkbox_checked_focus.png \ + themes/dark_theme/branch_closed.png \ + themes/dark_theme/Vsepartoolbar.png \ + themes/dark_theme/radio_checked_disabled.png \ + themes/dark_theme/left_arrow.png \ + themes/dark_theme/Vmovetoolbar.png \ + themes/dark_theme/branch_open-on.png \ + themes/dark_theme/close.png \ + themes/dark_theme/stylesheet-branch-end.png \ + themes/dark_theme/stylesheet-vline.png \ + themes/dark_theme/down_arrow_disabled.png \ + themes/dark_theme/radio_unchecked_disabled.png \ + themes/dark_theme/left_arrow_disabled.png \ + themes/dark_theme/Hmovetoolbar.png \ + themes/dark_theme/close-pressed.png \ + themes/dark_theme/up_arrow_disabled.png \ + themes/dark_theme/branch_open.png \ + themes/dark_theme/radio_checked_focus.png \ + themes/dark_theme/sizegrip.png \ + themes/dark_theme/checkbox_unchecked_focus.png \ + themes/dark_theme/right_arrow_disabled.png \ + themes/dark_theme/Hsepartoolbar.png \ + themes/dark_theme/undock.png \ + themes/dark_theme/transparent.png \ + themes/dark_theme/close-hover.png \ + themes/dark_theme/radio_unchecked_focus.png \ + themes/dark_theme/down_arrow.png \ + themes/dark_theme/right_arrow.png +INSTALLS += darkThemeInstall + +stripLayoutsInstall.path = $${DESTDIR}/strips +stripLayoutsInstall.files = strips/bookingstartstrip.ui \ + strips/bookingendstrip.ui \ + strips/timeassignmentstrip.ui +INSTALLS += stripLayoutsInstall diff --git a/main.cpp b/main.cpp index f353051..ce888f2 100644 --- a/main.cpp +++ b/main.cpp @@ -1,110 +1,78 @@ #include #include -#include -#include -#include +#include +#include +#include +#include -#include "r3client.h" #include "mainwindow.h" +#include "r3ctlsettings.h" -#include +namespace { +bool loadTheme(R3CtlSettings &settings); +} int main(int argc, char *argv[]) { - QApplication a(argc, argv); + QApplication app(argc, argv); - MainWindow mainWindow; + qSetMessagePattern(QStringLiteral("%{time dd.MM.yyyy HH:mm:ss.zzz} " + "[" + "%{if-debug}D%{endif}" + "%{if-info}I%{endif}" + "%{if-warning}W%{endif}" + "%{if-critical}C%{endif}" + "%{if-fatal}F%{endif}" + "] " + "%{function}(): " + "%{message}")); + + QCoreApplication::setOrganizationDomain(QStringLiteral("brunner.ninja")); + QCoreApplication::setOrganizationName(QStringLiteral("db-software")); + QCoreApplication::setApplicationName(QStringLiteral("r3ctl")); + QCoreApplication::setApplicationVersion(QStringLiteral("1.0")); + + R3CtlSettings settings{&app}; + + loadTheme(settings); + + MainWindow mainWindow{settings}; mainWindow.show(); - return a.exec(); - - const auto arguments = [&](){ - auto arguments = a.arguments(); - arguments.removeFirst(); - return arguments; - }(); - - if (arguments.isEmpty()) - { - puts("No cmd given!"); - return -1; - } - - R3Client client; - - QObject::connect(&client, &R3Client::disconnected, [](){ qDebug() << "disconnected()"; }); - QObject::connect(&client, &R3Client::error, [](QAbstractSocket::SocketError error){ qDebug() << "error()" << error; }); - - if (arguments.first() == "log") - { - QObject::connect(&client, &R3Client::connected, [](){ qDebug() << "connected()"; }); - QObject::connect(&client, &R3Client::statusReceived, [](const QString &ctx, const QJsonValue &jsonValue){ qDebug() << "statusReceived()" << ctx << jsonValue; }); - } - else if (arguments.first() == "script") - { - QObject::connect(&client, &R3Client::connected, [&](){ - client.sendMQTT("action/ceilingscripts/activatescript", QJsonObject{ - {"colourlist", QJsonArray{ - QJsonObject{{"b", 0}, {"cw", 0}, {"g", 0}, {"r", 1000}, {"ww", 0}}, - QJsonObject{{"b", 100}, {"cw", 0}, {"g", 0}, {"r", 800}, {"ww", 0}}, - QJsonObject{{"b", 300}, {"cw", 0}, {"g", 0}, {"r", 0}, {"ww", 0}}, - QJsonObject{{"b", 100}, {"cw", 0}, {"g", 500}, {"r", 0}, {"ww", 0}}, - QJsonObject{{"b", 0}, {"cw", 0}, {"g", 800}, {"r", 0}, {"ww", 0}}, - QJsonObject{{"b", 0}, {"cw", 0}, {"g", 200}, {"r", 800}, {"ww", 0}} - }}, - {"fadeduration", 500}, - {"script", "wave"} - }); - }); - } - else if (arguments.first() == "sendYmhButton") - { - if (arguments.size() < 2) - { - puts("No button given for sendYmhButton"); - return -3; - } - - const auto btn = arguments.at(1); - - QObject::connect(&client, &R3Client::connected, [&client,btn](){ - client.sendYmhButton(btn); - }); - QObject::connect(&client, &R3Client::statusReceived, [btn](const QString &ctx, const QJsonValue &jsonValue){ - if (ctx != "action/yamahastereo/ircmd") - return; - if (!jsonValue.isObject()) - { - qWarning() << "json data is not an object"; - qWarning() << jsonValue; - return; - } - const auto object = jsonValue.toObject(); - if (!object.contains("Cmd")) - { - qWarning() << "json data does not contain Cmd"; - qWarning() << object; - return; - } - const auto cmdValue = object.value("Cmd"); - if (!cmdValue.isString()) - { - qWarning() << "json data Cmd is not a string"; - qWarning() << object; - return; - } - const auto cmd = cmdValue.toString(); - if (cmd == btn) - QCoreApplication::quit(); - }); - } - else - { - puts("Invalid cmd. Valid are log, script, sendYmhButton"); - return -2; - } - - client.open(); - - return a.exec(); + return app.exec(); +} + +namespace { +bool loadTheme(R3CtlSettings &settings) +{ + qDebug() << "Loading theme..."; + + if(settings.theme().isEmpty()) + return true; + + auto themePath = QDir{QDir{QCoreApplication::applicationDirPath()}.absoluteFilePath(QStringLiteral("themes"))}.absoluteFilePath(settings.theme()); + + QFile file{themePath + ".qss"}; + + if(!file.exists()) + { + QMessageBox::warning(nullptr, QCoreApplication::translate("main", "Could not load theme!"), + QCoreApplication::translate("main", "Could not load theme!") + "\n\n" + + QCoreApplication::translate("main", "Theme file does not exist!")); + return false; + } + + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QMessageBox::warning(nullptr, QCoreApplication::translate("main", "Could not load theme!"), + QCoreApplication::translate("main", "Could not load theme!") + "\n\n" + + file.errorString()); + return false; + } + + QTextStream textStream(&file); + qApp->setStyleSheet(textStream.readAll().replace(QStringLiteral("@THEME_RESOURCES@"), themePath)); + + return true; +} } diff --git a/mainwindow.cpp b/mainwindow.cpp index c6d7012..1ddf96a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include namespace { template @@ -19,8 +21,9 @@ QString enumToString(const QEnum value) } } -MainWindow::MainWindow(QWidget *parent) : - QMainWindow{parent} +MainWindow::MainWindow(R3CtlSettings &settings, QWidget *parent) : + QMainWindow{parent}, + m_settings{settings} { m_ui.setupUi(this); @@ -95,6 +98,21 @@ MainWindow::MainWindow(QWidget *parent) : } }); m_timer2.start(1000/20); + + m_ui.themeComboBox->addItem(tr("Default"), QString()); + + for(const auto &entry : QDir{QDir{QCoreApplication::applicationDirPath()}.absoluteFilePath(QStringLiteral("themes"))}.entryInfoList(QStringList { QStringLiteral("*.qss") }, QDir::Files)) + m_ui.themeComboBox->addItem(entry.baseName(), entry.baseName()); + + if(!m_settings.theme().isEmpty()) + { + auto index = m_ui.themeComboBox->findData(m_settings.theme()); + if(index == -1) + QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") + "\n\n" + tr("Unknown theme!")); + m_ui.themeComboBox->setCurrentIndex(index); + } + + connect(m_ui.themeComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::themeSelected); } MainWindow::~MainWindow() = default; @@ -243,6 +261,47 @@ void MainWindow::receivedFrames(const QVector &frames) } } +void MainWindow::themeSelected() +{ + if (m_ui.comboBox->currentIndex() == -1) + { + qWarning() << "invalid theme selected"; + return; + } + + auto theme = m_ui.themeComboBox->currentData().toString(); + if (theme == m_settings.theme()) + return; + + QString styleSheet; + if(!theme.isEmpty()) + { + auto themePath = QDir{QDir{QCoreApplication::applicationDirPath()}.absoluteFilePath(QStringLiteral("themes"))}.absoluteFilePath(theme); + + QFile file{themePath + ".qss"}; + + if(!file.exists()) + { + QMessageBox::warning(this, tr("Could not load theme!"), tr("Could not load theme!") + "\n\n" + tr("Theme file does not exist!")); + return; + } + + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QMessageBox::warning(this, tr("Could not load theme!"), tr("Could not load theme!") + "\n\n" + file.errorString()); + return; + } + + QTextStream textStream(&file); + styleSheet = textStream.readAll().replace(QStringLiteral("@THEME_RESOURCES@"), themePath); + } + + if(!m_settings.setTheme(theme)) + QMessageBox::warning(this, tr("Could not save theme!"), tr("Could not save theme!")); + + qApp->setStyleSheet(styleSheet); +} + void MainWindow::log(const QString &msg) { m_ui.logView->appendPlainText(QString{"%0 %1"}.arg(QDateTime::currentDateTime().toString(), msg)); diff --git a/mainwindow.h b/mainwindow.h index 52452f6..fe42992 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -17,6 +17,7 @@ #include "r3client.h" #include "bpmdetector.h" #include "audioformat.h" +#include "r3ctlsettings.h" class QAudioInput; @@ -25,7 +26,7 @@ class MainWindow : public QMainWindow Q_OBJECT public: - explicit MainWindow(QWidget *parent = nullptr); + explicit MainWindow(R3CtlSettings &settings, QWidget *parent = nullptr); ~MainWindow(); private slots: @@ -50,6 +51,8 @@ private slots: void receivedFrames(const QVector &frames); + void themeSelected(); + private: void log(const QString &msg); void lightCmd(const QString &light, const QString &status); @@ -57,6 +60,8 @@ private: void updateAudioDevices(); private: + R3CtlSettings &m_settings; + Ui::MainWindow m_ui; R3Client m_client; diff --git a/mainwindow.ui b/mainwindow.ui index 4eadfa4..518c2ac 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -477,6 +477,16 @@ + + + + 350 + 10 + 79 + 23 + + + diff --git a/r3ctl.pro b/r3ctl.pro index d77deea..1e37c4b 100644 --- a/r3ctl.pro +++ b/r3ctl.pro @@ -4,17 +4,23 @@ CONFIG += c++latest DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 +DESTDIR = $${OUT_PWD}/bin + SOURCES += \ - bpmdetector.cpp \ - main.cpp \ - mainwindow.cpp \ - r3client.cpp + bpmdetector.cpp \ + main.cpp \ + mainwindow.cpp \ + r3client.cpp \ + r3ctlsettings.cpp HEADERS += \ audioformat.h \ bpmdetector.h \ mainwindow.h \ - r3client.h + r3client.h \ + r3ctlsettings.h FORMS += \ mainwindow.ui + +include(installs.pri) diff --git a/r3ctlsettings.cpp b/r3ctlsettings.cpp new file mode 100644 index 0000000..7001547 --- /dev/null +++ b/r3ctlsettings.cpp @@ -0,0 +1,29 @@ +#include "r3ctlsettings.h" + +const QString R3CtlSettings::m_theme("theme"); + +QString R3CtlSettings::theme() const +{ + return value(m_theme).toString(); +} + +bool R3CtlSettings::setTheme(const QString &theme) +{ + if(this->theme() == theme) + return true; + + if(theme.isEmpty()) + remove(m_theme); + else + setValue(m_theme, theme); + + sync(); + + const auto success = status() == QSettings::NoError; + if(success) + Q_EMIT themeChanged(theme); + else + Q_EMIT saveErrorOccured(); + + return success; +} diff --git a/r3ctlsettings.h b/r3ctlsettings.h new file mode 100644 index 0000000..afaaacf --- /dev/null +++ b/r3ctlsettings.h @@ -0,0 +1,24 @@ +#pragma once + +// Qt includes +#include + +class R3CtlSettings : public QSettings +{ + Q_OBJECT + Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged) + +public: + using QSettings::QSettings; + + QString theme() const; + bool setTheme(const QString &theme); + +Q_SIGNALS: + void saveErrorOccured(); + + void themeChanged(const QString &theme); + +private: + static const QString m_theme; +}; diff --git a/themes/dark_theme.qss b/themes/dark_theme.qss new file mode 100644 index 0000000..102aafb --- /dev/null +++ b/themes/dark_theme.qss @@ -0,0 +1,1297 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) <2013-2014> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +QToolTip +{ + border: 1px solid #76797C; + background-color: rgb(90, 102, 117);; + color: white; + padding: 5px; + opacity: 200; +} + +QWidget +{ + color: #eff0f1; + background-color: #31363b; + selection-background-color:#3daee9; + selection-color: #eff0f1; + background-clip: border; + border-image: none; + border: 0px transparent black; + outline: 0; +} + +QWidget:item:hover +{ + background-color: #18465d; + color: #eff0f1; +} + +QWidget:item:selected +{ + background-color: #18465d; +} + +QCheckBox +{ + spacing: 5px; + outline: none; + color: #eff0f1; + margin-bottom: 2px; +} + +QCheckBox:disabled +{ + color: #76797C; +} + +QCheckBox::indicator, +QGroupBox::indicator +{ + width: 18px; + height: 18px; +} +QGroupBox::indicator +{ + margin-left: 2px; +} + +QCheckBox::indicator:unchecked +{ + image: url(@THEME_RESOURCES@/checkbox_unchecked.png); +} + +QCheckBox::indicator:unchecked:hover, +QCheckBox::indicator:unchecked:focus, +QCheckBox::indicator:unchecked:pressed, +QGroupBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:focus, +QGroupBox::indicator:unchecked:pressed +{ + border: none; + image: url(@THEME_RESOURCES@/checkbox_unchecked_focus.png); +} + +QCheckBox::indicator:checked +{ + image: url(@THEME_RESOURCES@/checkbox_checked.png); +} + +QCheckBox::indicator:checked:hover, +QCheckBox::indicator:checked:focus, +QCheckBox::indicator:checked:pressed, +QGroupBox::indicator:checked:hover, +QGroupBox::indicator:checked:focus, +QGroupBox::indicator:checked:pressed +{ + border: none; + image: url(@THEME_RESOURCES@/checkbox_checked_focus.png); +} + + +QCheckBox::indicator:indeterminate +{ + image: url(@THEME_RESOURCES@/checkbox_indeterminate.png); +} + +QCheckBox::indicator:indeterminate:focus, +QCheckBox::indicator:indeterminate:hover, +QCheckBox::indicator:indeterminate:pressed +{ + image: url(@THEME_RESOURCES@/checkbox_indeterminate_focus.png); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled +{ + image: url(@THEME_RESOURCES@/checkbox_checked_disabled.png); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled +{ + image: url(@THEME_RESOURCES@/checkbox_unchecked_disabled.png); +} + +QRadioButton +{ + spacing: 5px; + outline: none; + color: #eff0f1; + margin-bottom: 2px; +} + +QRadioButton:disabled +{ + color: #76797C; +} +QRadioButton::indicator +{ + width: 21px; + height: 21px; +} + +QRadioButton::indicator:unchecked +{ + image: url(@THEME_RESOURCES@/radio_unchecked.png); +} + + +QRadioButton::indicator:unchecked:hover, +QRadioButton::indicator:unchecked:focus, +QRadioButton::indicator:unchecked:pressed +{ + border: none; + outline: none; + image: url(@THEME_RESOURCES@/radio_unchecked_focus.png); +} + +QRadioButton::indicator:checked +{ + border: none; + outline: none; + image: url(@THEME_RESOURCES@/radio_checked.png); +} + +QRadioButton::indicator:checked:hover, +QRadioButton::indicator:checked:focus, +QRadioButton::indicator:checked:pressed +{ + border: none; + outline: none; + image: url(@THEME_RESOURCES@/radio_checked_focus.png); +} + +QRadioButton::indicator:checked:disabled +{ + outline: none; + image: url(@THEME_RESOURCES@/radio_checked_disabled.png); +} + +QRadioButton::indicator:unchecked:disabled +{ + image: url(@THEME_RESOURCES@/radio_unchecked_disabled.png); +} + + +QMenuBar +{ + background-color: #31363b; + color: #eff0f1; +} + +QMenuBar::item +{ + background: transparent; +} + +QMenuBar::item:selected +{ + background: transparent; + border: 1px solid #76797C; +} + +QMenuBar::item:pressed +{ + border: 1px solid #76797C; + background-color: #3daee9; + color: #eff0f1; + margin-bottom:-1px; + padding-bottom:1px; +} + +QMenu +{ + border: 1px solid #76797C; + color: #eff0f1; + margin: 2px; +} + +QMenu::icon +{ + margin: 5px; +} + +QMenu::item +{ + padding: 5px 30px 5px 30px; + border: 1px solid transparent; /* reserve space for selection border */ +} + +QMenu::item:selected +{ + color: #eff0f1; +} + +QMenu::separator { + height: 2px; + background: lightblue; + margin-left: 10px; + margin-right: 5px; +} + +QMenu::indicator { + width: 18px; + height: 18px; +} + +/* non-exclusive indicator = check box style indicator + (see QActionGroup::setExclusive) */ +QMenu::indicator:non-exclusive:unchecked { + image: url(@THEME_RESOURCES@/checkbox_unchecked.png); +} + +QMenu::indicator:non-exclusive:unchecked:selected { + image: url(@THEME_RESOURCES@/checkbox_unchecked_disabled.png); +} + +QMenu::indicator:non-exclusive:checked { + image: url(@THEME_RESOURCES@/checkbox_checked.png); +} + +QMenu::indicator:non-exclusive:checked:selected { + image: url(@THEME_RESOURCES@/checkbox_checked_disabled.png); +} + +/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */ +QMenu::indicator:exclusive:unchecked { + image: url(@THEME_RESOURCES@/radio_unchecked.png); +} + +QMenu::indicator:exclusive:unchecked:selected { + image: url(@THEME_RESOURCES@/radio_unchecked_disabled.png); +} + +QMenu::indicator:exclusive:checked { + image: url(@THEME_RESOURCES@/radio_checked.png); +} + +QMenu::indicator:exclusive:checked:selected { + image: url(@THEME_RESOURCES@/radio_checked_disabled.png); +} + +QMenu::right-arrow { + margin: 5px; + image: url(@THEME_RESOURCES@/right_arrow.png) +} + + +QWidget:disabled +{ + color: #454545; + background-color: #31363b; +} + +QAbstractItemView +{ + alternate-background-color: #31363b; + color: #eff0f1; + border: 1px solid 3A3939; + border-radius: 2px; +} + +QWidget:focus, QMenuBar:focus +{ + border: 1px solid #3daee9; +} + +QTabWidget:focus, QCheckBox:focus, QRadioButton:focus, QSlider:focus +{ + border: none; +} + +QLineEdit +{ + background-color: #232629; + padding: 5px; + border-style: solid; + border: 1px solid #76797C; + border-radius: 2px; + color: #eff0f1; +} + +QAbstractItemView QLineEdit +{ + padding: 0; +} + +QGroupBox { + border:1px solid #76797C; + border-radius: 2px; + margin-top: 20px; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding-left: 10px; + padding-right: 10px; + padding-top: 10px; +} + +QAbstractScrollArea +{ + border-radius: 2px; + border: 1px solid #76797C; + background-color: transparent; +} + +QScrollBar:horizontal +{ + height: 15px; + margin: 3px 15px 3px 15px; + border: 1px transparent #2A2929; + border-radius: 4px; + background-color: #2A2929; +} + +QScrollBar::handle:horizontal +{ + background-color: #605F5F; + min-width: 5px; + border-radius: 4px; +} + +QScrollBar::add-line:horizontal +{ + margin: 0px 3px 0px 3px; + border-image: url(@THEME_RESOURCES@/right_arrow_disabled.png); + width: 10px; + height: 10px; + subcontrol-position: right; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:horizontal +{ + margin: 0px 3px 0px 3px; + border-image: url(@THEME_RESOURCES@/left_arrow_disabled.png); + height: 10px; + width: 10px; + subcontrol-position: left; + subcontrol-origin: margin; +} + +QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on +{ + border-image: url(@THEME_RESOURCES@/right_arrow.png); + height: 10px; + width: 10px; + subcontrol-position: right; + subcontrol-origin: margin; +} + + +QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on +{ + border-image: url(@THEME_RESOURCES@/left_arrow.png); + height: 10px; + width: 10px; + subcontrol-position: left; + subcontrol-origin: margin; +} + +QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal +{ + background: none; +} + + +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal +{ + background: none; +} + +QScrollBar:vertical +{ + background-color: #2A2929; + width: 15px; + margin: 15px 3px 15px 3px; + border: 1px transparent #2A2929; + border-radius: 4px; +} + +QScrollBar::handle:vertical +{ + background-color: #605F5F; + min-height: 5px; + border-radius: 4px; +} + +QScrollBar::sub-line:vertical +{ + margin: 3px 0px 3px 0px; + border-image: url(@THEME_RESOURCES@/up_arrow_disabled.png); + height: 10px; + width: 10px; + subcontrol-position: top; + subcontrol-origin: margin; +} + +QScrollBar::add-line:vertical +{ + margin: 3px 0px 3px 0px; + border-image: url(@THEME_RESOURCES@/down_arrow_disabled.png); + height: 10px; + width: 10px; + subcontrol-position: bottom; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on +{ + + border-image: url(@THEME_RESOURCES@/up_arrow.png); + height: 10px; + width: 10px; + subcontrol-position: top; + subcontrol-origin: margin; +} + + +QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on +{ + border-image: url(@THEME_RESOURCES@/down_arrow.png); + height: 10px; + width: 10px; + subcontrol-position: bottom; + subcontrol-origin: margin; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical +{ + background: none; +} + + +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical +{ + background: none; +} + +QTextEdit +{ + background-color: #232629; + color: #eff0f1; + border: 1px solid #76797C; +} + +QPlainTextEdit +{ + background-color: #232629;; + color: #eff0f1; + border-radius: 2px; + border: 1px solid #76797C; +} + +QHeaderView::section +{ + background-color: #76797C; + color: #eff0f1; + padding: 5px; + border: 1px solid #76797C; +} + +QSizeGrip { + image: url(@THEME_RESOURCES@/sizegrip.png); + width: 12px; + height: 12px; +} + + +QMainWindow::separator +{ + background-color: #31363b; + color: white; + padding-left: 4px; + spacing: 2px; + border: 1px dashed #76797C; +} + +QMainWindow::separator:hover +{ + + background-color: #787876; + color: white; + padding-left: 4px; + border: 1px solid #76797C; + spacing: 2px; +} + + +QMenu::separator +{ + height: 1px; + background-color: #76797C; + color: white; + padding-left: 4px; + margin-left: 10px; + margin-right: 5px; +} + + +QFrame +{ + border-radius: 2px; + border: 1px solid #76797C; +} + +QFrame[frameShape="0"] +{ + border-radius: 2px; + border: 1px transparent #76797C; +} + +QStackedWidget +{ + border: 1px transparent black; +} + +QToolBar { + border: 1px transparent #393838; + background: 1px solid #31363b; + font-weight: bold; +} + +QToolBar::handle:horizontal { + image: url(@THEME_RESOURCES@/Hmovetoolbar.png); +} +QToolBar::handle:vertical { + image: url(@THEME_RESOURCES@/Vmovetoolbar.png); +} +QToolBar::separator:horizontal { + image: url(@THEME_RESOURCES@/Hsepartoolbar.png); +} +QToolBar::separator:vertical { + image: url(@THEME_RESOURCES@/Vsepartoolbar.png); +} +QToolButton#qt_toolbar_ext_button { + background: #58595a +} + +QPushButton +{ + color: #eff0f1; + background-color: #31363b; + border-width: 1px; + border-color: #76797C; + border-style: solid; + padding: 5px; + border-radius: 2px; + outline: none; +} + +QPushButton:disabled +{ + background-color: #31363b; + border-width: 1px; + border-color: #454545; + border-style: solid; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 10px; + padding-right: 10px; + border-radius: 2px; + color: #454545; +} + +QPushButton:focus { + background-color: #3daee9; + color: white; +} + +QPushButton:pressed +{ + background-color: #3daee9; + padding-top: -15px; + padding-bottom: -17px; +} + +QComboBox +{ + selection-background-color: #3daee9; + border-style: solid; + border: 1px solid #76797C; + border-radius: 2px; + padding: 5px; + min-width: 75px; +} + +QPushButton:checked{ + background-color: #76797C; + border-color: #6A6969; +} + +QComboBox:hover,QPushButton:hover,QAbstractSpinBox:hover,QLineEdit:hover,QTextEdit:hover,QPlainTextEdit:hover,QAbstractView:hover,QTreeView:hover +{ + border: 1px solid #3daee9; + color: #eff0f1; +} + +QComboBox:on +{ + padding-top: 3px; + padding-left: 4px; + selection-background-color: #4a4a4a; +} + +QComboBox QAbstractItemView +{ + background-color: #232629; + border-radius: 2px; + border: 1px solid #76797C; + selection-background-color: #18465d; +} + +QComboBox::drop-down +{ + subcontrol-origin: padding; + subcontrol-position: top right; + width: 15px; + + border-left-width: 0px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QComboBox::down-arrow +{ + image: url(@THEME_RESOURCES@/down_arrow_disabled.png); +} + +QComboBox::down-arrow:on, QComboBox::down-arrow:hover, +QComboBox::down-arrow:focus +{ + image: url(@THEME_RESOURCES@/down_arrow.png); +} + +QAbstractSpinBox { + padding: 5px; + border: 1px solid #76797C; + background-color: #232629; + color: #eff0f1; + border-radius: 2px; + min-width: 75px; +} + +QAbstractSpinBox:up-button +{ + background-color: transparent; + subcontrol-origin: border; + subcontrol-position: center right; +} + +QAbstractSpinBox:down-button +{ + background-color: transparent; + subcontrol-origin: border; + subcontrol-position: center left; +} + +QAbstractSpinBox::up-arrow,QAbstractSpinBox::up-arrow:disabled,QAbstractSpinBox::up-arrow:off { + image: url(@THEME_RESOURCES@/up_arrow_disabled.png); + width: 10px; + height: 10px; +} +QAbstractSpinBox::up-arrow:hover +{ + image: url(@THEME_RESOURCES@/up_arrow.png); +} + + +QAbstractSpinBox::down-arrow,QAbstractSpinBox::down-arrow:disabled,QAbstractSpinBox::down-arrow:off +{ + image: url(@THEME_RESOURCES@/down_arrow_disabled.png); + width: 10px; + height: 10px; +} +QAbstractSpinBox::down-arrow:hover +{ + image: url(@THEME_RESOURCES@/down_arrow.png); +} + + +QLabel +{ + border: 0px solid black; +} + +QTabWidget{ + border: 0px transparent black; +} + +QTabWidget::pane { + border: 1px solid #76797C; + padding: 5px; + margin: 0px; +} + +QTabWidget::tab-bar { + left: 5px; /* move to the right by 5px */ +} + +QTabBar +{ + qproperty-drawBase: 0; + border-radius: 3px; +} + +QTabBar:focus +{ + border: 0px transparent black; +} + +QTabBar::close-button { + image: url(@THEME_RESOURCES@/close.png); + background: transparent; +} + +QTabBar::close-button:hover +{ + image: url(@THEME_RESOURCES@/close-hover.png); + background: transparent; +} + +QTabBar::close-button:pressed { + image: url(@THEME_RESOURCES@/close-pressed.png); + background: transparent; +} + +/* TOP TABS */ +QTabBar::tab:top { + color: #eff0f1; + border: 1px solid #76797C; + border-bottom: 1px transparent black; + background-color: #31363b; + padding: 5px; + min-width: 50px; + border-top-left-radius: 2px; + border-top-right-radius: 2px; +} + +QTabBar::tab:top:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 1px solid #76797C; + border-bottom: 1px transparent black; + border-top-left-radius: 2px; + border-top-right-radius: 2px; +} + +QTabBar::tab:top:!selected:hover { + background-color: #3daee9; +} + +/* BOTTOM TABS */ +QTabBar::tab:bottom { + color: #eff0f1; + border: 1px solid #76797C; + border-top: 1px transparent black; + background-color: #31363b; + padding: 5px; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + min-width: 50px; +} + +QTabBar::tab:bottom:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 1px solid #76797C; + border-top: 1px transparent black; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +QTabBar::tab:bottom:!selected:hover { + background-color: #3daee9; +} + +/* LEFT TABS */ +QTabBar::tab:left { + color: #eff0f1; + border: 1px solid #76797C; + border-left: 1px transparent black; + background-color: #31363b; + padding: 5px; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + min-height: 50px; +} + +QTabBar::tab:left:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 1px solid #76797C; + border-left: 1px transparent black; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} + +QTabBar::tab:left:!selected:hover { + background-color: #3daee9; +} + + +/* RIGHT TABS */ +QTabBar::tab:right { + color: #eff0f1; + border: 1px solid #76797C; + border-right: 1px transparent black; + background-color: #31363b; + padding: 5px; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + min-height: 50px; +} + +QTabBar::tab:right:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 1px solid #76797C; + border-right: 1px transparent black; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +QTabBar::tab:right:!selected:hover { + background-color: #3daee9; +} + +QTabBar QToolButton::right-arrow:enabled { + image: url(@THEME_RESOURCES@/right_arrow.png); + } + + QTabBar QToolButton::left-arrow:enabled { + image: url(@THEME_RESOURCES@/left_arrow.png); + } + +QTabBar QToolButton::right-arrow:disabled { + image: url(@THEME_RESOURCES@/right_arrow_disabled.png); + } + + QTabBar QToolButton::left-arrow:disabled { + image: url(@THEME_RESOURCES@/left_arrow_disabled.png); + } + + +QDockWidget { + background: #31363b; + border: 1px solid #403F3F; + titlebar-close-icon: url(@THEME_RESOURCES@/close.png); + titlebar-normal-icon: url(@THEME_RESOURCES@/undock.png); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + border-radius: 2px; + background: transparent; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgba(255, 255, 255, 10); +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; + background: rgba(255, 255, 255, 10); +} + +QTreeView, QListView +{ + border: 1px solid #76797C; + background-color: #232629; +} + +QTreeView:branch:selected, QTreeView:branch:hover +{ + background: url(@THEME_RESOURCES@/transparent.png); +} + +QTreeView::branch:has-siblings:!adjoins-item { + border-image: url(@THEME_RESOURCES@/transparent.png); +} + +QTreeView::branch:has-siblings:adjoins-item { + border-image: url(@THEME_RESOURCES@/transparent.png); +} + +QTreeView::branch:!has-children:!has-siblings:adjoins-item { + border-image: url(@THEME_RESOURCES@/transparent.png); +} + +QTreeView::branch:has-children:!has-siblings:closed, +QTreeView::branch:closed:has-children:has-siblings { + image: url(@THEME_RESOURCES@/branch_closed.png); +} + +QTreeView::branch:open:has-children:!has-siblings, +QTreeView::branch:open:has-children:has-siblings { + image: url(@THEME_RESOURCES@/branch_open.png); +} + +QTreeView::branch:has-children:!has-siblings:closed:hover, +QTreeView::branch:closed:has-children:has-siblings:hover { + image: url(@THEME_RESOURCES@/branch_closed-on.png); + } + +QTreeView::branch:open:has-children:!has-siblings:hover, +QTreeView::branch:open:has-children:has-siblings:hover { + image: url(@THEME_RESOURCES@/branch_open-on.png); + } + +QListView::item:!selected:hover, QTreeView::item:!selected:hover { + background: #18465d; + outline: 0; + color: #eff0f1 +} + +QListView::item:selected:hover, QTreeView::item:selected:hover { + background: #287399; + color: #eff0f1; +} + +QTreeView::indicator:checked, QListView::indicator:checked +{ + image: url(@THEME_RESOURCES@/checkbox_checked.png); +} + +QTreeView::indicator:checked, QListView::indicator:checked +{ + image: url(@THEME_RESOURCES@/checkbox_unchecked.png); +} + +QTreeView::indicator:checked:hover, +QTreeView::indicator:checked:focus, +QTreeView::indicator:checked:pressed, +QListView::indicator:checked:hover, +QListView::indicator:checked:focus, +QListView::indicator:checked:pressed +{ + image: url(@THEME_RESOURCES@/checkbox_checked_focus.png); +} + +QTreeView::indicator:unchecked:hover, +QTreeView::indicator:unchecked:focus, +QTreeView::indicator:unchecked:pressed, +QListView::indicator:unchecked:hover, +QListView::indicator:unchecked:focus, +QListView::indicator:unchecked:pressed +{ + image: url(@THEME_RESOURCES@/checkbox_unchecked_focus.png); +} + +QSlider::groove:horizontal { + border: 1px solid #565a5e; + height: 4px; + background: #565a5e; + margin: 0px; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background: #232629; + border: 1px solid #565a5e; + width: 16px; + height: 16px; + margin: -8px 0; + border-radius: 9px; +} + +QSlider::groove:vertical { + border: 1px solid #565a5e; + width: 4px; + background: #565a5e; + margin: 0px; + border-radius: 3px; +} + +QSlider::handle:vertical { + background: #232629; + border: 1px solid #565a5e; + width: 16px; + height: 16px; + margin: 0 -8px; + border-radius: 9px; +} + +QToolButton { + background-color: transparent; + border: 1px transparent #76797C; + border-radius: 2px; + margin: 3px; + padding: 5px; +} + +QToolButton[popupMode="1"] { /* only for MenuButtonPopup */ + padding-right: 20px; /* make way for the popup button */ + border: 1px #76797C; + border-radius: 5px; +} + +QToolButton[popupMode="2"] { /* only for InstantPopup */ + padding-right: 10px; /* make way for the popup button */ + border: 1px #76797C; +} + + +QToolButton:hover, QToolButton::menu-button:hover { + background-color: transparent; + border: 1px solid #3daee9; + padding: 5px; +} + +QToolButton:checked, QToolButton:pressed, + QToolButton::menu-button:pressed { + background-color: #3daee9; + border: 1px solid #3daee9; + padding: 5px; +} + +/* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */ +QToolButton::menu-indicator { + image: url(@THEME_RESOURCES@/down_arrow.png); + top: -7px; left: -2px; /* shift it a bit */ +} + +/* the subcontrols below are used only in the MenuButtonPopup mode */ +QToolButton::menu-button { + border: 1px transparent #76797C; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + /* 16px width + 4px for border = 20px allocated above */ + width: 16px; + outline: none; +} + +QToolButton::menu-arrow { + image: url(@THEME_RESOURCES@/down_arrow.png); +} + +QToolButton::menu-arrow:open { + border: 1px solid #76797C; +} + +QPushButton::menu-indicator { + subcontrol-origin: padding; + subcontrol-position: bottom right; + left: 8px; +} + +QTableView +{ + border: 1px solid #76797C; + gridline-color: #31363b; + background-color: #232629; +} + + +QTableView, QHeaderView +{ + border-radius: 0px; +} + +QTableView::item:pressed, QListView::item:pressed, QTreeView::item:pressed { + background: #18465d; + color: #eff0f1; +} + +QTableView::item:selected:active, QTreeView::item:selected:active, QListView::item:selected:active { + background: #287399; + color: #eff0f1; +} + + +QHeaderView +{ + background-color: #31363b; + border: 1px transparent; + border-radius: 0px; + margin: 0px; + padding: 0px; + +} + +QHeaderView::section { + background-color: #31363b; + color: #eff0f1; + padding: 5px; + border: 1px solid #76797C; + border-radius: 0px; + text-align: center; +} + +QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one +{ + border-top: 1px solid #76797C; +} + +QHeaderView::section::vertical +{ + border-top: transparent; +} + +QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one +{ + border-left: 1px solid #76797C; +} + +QHeaderView::section::horizontal +{ + border-left: transparent; +} + + +QHeaderView::section:checked + { + color: white; + background-color: #334e5e; + } + + /* style the sort indicator */ +QHeaderView::down-arrow { + image: url(@THEME_RESOURCES@/down_arrow.png); +} + +QHeaderView::up-arrow { + image: url(@THEME_RESOURCES@/up_arrow.png); +} + + +QTableCornerButton::section { + background-color: #31363b; + border: 1px transparent #76797C; + border-radius: 0px; +} + +QToolBox { + padding: 5px; + border: 1px transparent black; +} + +QToolBox::tab { + color: #eff0f1; + background-color: #31363b; + border: 1px solid #76797C; + border-bottom: 1px transparent #31363b; + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} + +QToolBox::tab:selected { /* italicize selected tabs */ + font: italic; + background-color: #31363b; + border-color: #3daee9; + } + +QStatusBar::item { + border: 0px transparent dark; + } + + +QFrame[height="3"], QFrame[width="3"] { + background-color: #76797C; +} + + +QSplitter::handle { + border: 1px dashed #76797C; +} + +QSplitter::handle:hover { + background-color: #787876; + border: 1px solid #76797C; +} + +QSplitter::handle:horizontal { + width: 1px; +} + +QSplitter::handle:vertical { + height: 1px; +} + +QProgressBar { + border: 1px solid #76797C; + border-radius: 5px; + text-align: center; +} + +QProgressBar::chunk { + background-color: #05B8CC; +} + +QDateEdit +{ + selection-background-color: #3daee9; + border-style: solid; + border: 1px solid #3375A3; + border-radius: 2px; + padding: 1px; + min-width: 75px; +} + +QDateEdit:on +{ + padding-top: 3px; + padding-left: 4px; + selection-background-color: #4a4a4a; +} + +QDateEdit QAbstractItemView +{ + background-color: #232629; + border-radius: 2px; + border: 1px solid #3375A3; + selection-background-color: #3daee9; +} + +QDateEdit::drop-down +{ + subcontrol-origin: padding; + subcontrol-position: top right; + width: 15px; + border-left-width: 0px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateEdit::down-arrow +{ + image: url(@THEME_RESOURCES@/down_arrow_disabled.png); +} + +QDateEdit::down-arrow:on, QDateEdit::down-arrow:hover, +QDateEdit::down-arrow:focus +{ + image: url(@THEME_RESOURCES@/down_arrow.png); +} diff --git a/themes/dark_theme/Hmovetoolbar.png b/themes/dark_theme/Hmovetoolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..cead99ed108a83715a939fc293dd7692008ac6b2 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU~u4IV_;wquKhlZfq{W7$=lt9VKYM|L*<>j z!G9PS7&r?&B8wRqxP?KOkzv*x2?hoR_7YEDSN8iXk^;Jt>%CrIU|?X7%?ybsan8@p zP0cG|00HNs)Wnk16ovB4k_-iRPv3wPy;OFPeV#6kArXh)o-^cPP~c&9_`0|@I(}8~ z!IMW_pBS-9^=&Jg8K`sfeHKXpJ&|A6j;v!~V6gObaSX9Iot&V+ zcI5bR<0Hq9FYYi*3~mV)T7Pb$#>u85|N4)l$?z@=JQ;X0(6fe>?QsUjL@iG{28IrA XmdloU6YLon7#KWV{an^LB{Ts5Tr)C9 literal 0 HcmV?d00001 diff --git a/themes/dark_theme/Vmovetoolbar.png b/themes/dark_theme/Vmovetoolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..512edcecd69bd11ef3d58930ba8304473319e183 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~VBq3lV_;zT|934n0|NtNage(c!@6@aFBupZ z*pj^6T^Q;a+8L%kySHpT0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>FdgVheMoGOMAwI zm@ftZd>duW@ARGztUqC@Zv0drJKjVz`)??>gTe~DWM4fg6&F5 literal 0 HcmV?d00001 diff --git a/themes/dark_theme/Vsepartoolbar.png b/themes/dark_theme/Vsepartoolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..d9dc1561b473019a12091725e724a44d979dc238 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0y~yV6bOkU|{E9V_;y|Up7^qfq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z8kO3v0zOL+dIK(+kwL?z@Wic=? zSbMrShFF|VPLN<#7B&!CykcLimTK9b<gTe~DWM4fu2nP3 literal 0 HcmV?d00001 diff --git a/themes/dark_theme/branch_closed-on.png b/themes/dark_theme/branch_closed-on.png new file mode 100644 index 0000000000000000000000000000000000000000..d081e9b3b90d774450a8ea48f1184019e33a755a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flVBq9nVPIg`J$b4a0|Nt7lDE4H!{x2v3t~W0 z1s;*b3=G`DAk4@xYmNj10|R@Br>`sf9d33W9&IlhgAxV?1{F^i#}JO|$q5du|NkG3 u@Hr8qmJ+F!a#4mUdwuXO1@!l~}cCxuyBUe53Oj7#OrX zT^vI=t|uoPVCdoDDYjGKUczBuWT3#kjKjddz-flSK@mm~;ef4+85xf4WSgTe~DWM4f^v@-A literal 0 HcmV?d00001 diff --git a/themes/dark_theme/checkbox_checked.png b/themes/dark_theme/checkbox_checked.png new file mode 100644 index 0000000000000000000000000000000000000000..830cfee6568b718535c61564b95caf2d17c0958a GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?nVv3=ArY-_r(63Sb`WUWzj0B^b4I3ch9!4er}Vvb5h;*&O4XGPZnM4+;2!wS z;YDSO&69-%Jv}cyk_Jlyrzcwl_Pk=ez$Dc%qwo3Gpw6hMtW>6ahoFA-Y7qSffN z08Fj@dtlrDpZ=5oG8r4q_3FGCzqyD>c!8*E;AWjoTffa%Vk`fgg(a`SZBNX-_QZ-1 zE}On~hu8)4AF2h0N=8U8l49VVbnwYifnBc@PtLwB>U93Q{-uK|_Ol{iulxPYc#_}F pjx!C0tFFgwuMWRp{NKZlag9V(So8H4c?=8;44$rjF6*2UngE-z%RvAD literal 0 HcmV?d00001 diff --git a/themes/dark_theme/checkbox_checked_disabled.png b/themes/dark_theme/checkbox_checked_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..cb63cc2fac47ad304451f864be5fb9b9085910ee GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?8J;eVArY-_r~CRHa*$}7zg|G(3iE<+0pV@)oXbu`^r#ic8yYSw@t9u0bNxsK zd*OS2ritfUrzkAYk%`H;f7j>!m&#?nmnDC^pZIfQ{u#~yX08Lvl+S4ws4Mj<@aQf$ z&2q$CjYaDK!wV+=K9+5bN*frrL|vPAOemP~zJxpnOWvjY{H3ckURgFV7sTm3cb|9N z@kzh|mTTJ>_ssO;mFRKpi#g1=ZqW+$mnEDMt2}Jy%@@7FzAI6}Zb#d3&ZY-)6ZKZL zrZPo_#9w2bpJr3XR`k(e@2dCGi&tCSUz+;%&-8Da_sYfVl{+1jCUB@QfvGij_}BcJ z|KDV@|AKyxcc+&bFWS!fMVv+CUBjcwopa*FcL%L}voMM!Pn^YOqIW{_6tCFu)mQJ9 z9tc*FRamUlTT%Bf;Sx(tg2m0fc2*0!-}r>h3(RP{HqWr$pmTL-a$o3@zE_MBN|io* oJeME1H)HGViHocMP29sQR+y#kQu5EAfq{X+)78&qol`;+0EPg>MgRZ+ literal 0 HcmV?d00001 diff --git a/themes/dark_theme/checkbox_checked_focus.png b/themes/dark_theme/checkbox_checked_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..671be273b06e2b721f494379ab61e527932ba69e GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0VruY)k7lg8`{1_lQ95>H=O_J^#zT$X(2-wHS~Ffep_x;TbJ98OM z`u)HC;^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?S)MMAArY-_r=Rva-vp*Ff|aFB;kFE~97F{#fB9Rc7I^MjL^6}-!~Ug3J0DiwJHc5q z(V{Q=WX(Ni(=FHR7-AcOwk=R8;`9-+DCcGWV3Tj+KZ(si^y+H;JhK1`#$SmNcDvis zGq>ONcbNaBrdFJxtns_=!Qx8hZ(*D{s;vjEv7UOZw#IN*-aGY=hXcay-v7lX!qn=Z zxZ#`qhIhM5=dOM4p!i`m%dsa~Q+d^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?nVv3=ArY-_r=RsY>>%QH-nTibUe2MGRlDSM@r~HGGdh~~^>ekV&7724%X59{ z558CT>b8;GF=NxCr0zE|fkM)J;}X;^Jv zxA}vp25a5a1KdihTc@7uxF_}Dldr==wiWYDX3zedv^{EVZpiBc4`w&07jf$FYfoKm zz_a}snWID7M7#J8lUHx3vIVCg!08`z>hX4Qo literal 0 HcmV?d00001 diff --git a/themes/dark_theme/checkbox_indeterminate_focus.png b/themes/dark_theme/checkbox_indeterminate_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..415f9b6e14e21d52aa6595bbc80dd34adfa2ba2b GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0VruY)k7lg8`{1_lQ95>H=O_J^#zTvmdaC;ZA87#P|-T^vIq4ksr_ylfC` z{r=y6@!MbF|1&ZlK6EftV{<$9e+J)z=BGDg7|R>p?wbBTP=vM9IOuXv%roP}QpKsd z$J5n>ZFP>Pn_YHz-W15*W7W`lqsDuCj>RlCH(7&M4UWNl7dC~-^fm>u^W?Dy>=si= vF%!03l~j|)H?NQL?yj^Ftp{y<3=AA`7O9p(0*4qF7#KWV{an^LB{Ts5G$vHP literal 0 HcmV?d00001 diff --git a/themes/dark_theme/checkbox_unchecked.png b/themes/dark_theme/checkbox_unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..2159aca9a10f75729912579b33a1226e575799aa GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?zMd|QArY-_r(63Sb`W8B?izULJ42&3L(n^?Q@w8^L<;1cQfKyR9+u5mu~?&A z;Y*E^-KWI`Jv}}<#e^!fqN6I)RK?#PtatCyU!`T%_qXlD(nFdX9-sKEXu#Zd?EBh| z3{8hn)y~J!qA!`f6Piw}7T)`c@dE3ujw7|_xj%QL)g3#wQGe#2jTdvi^%xebf711w zRC4KTT2EHO+FAxThTcC8&QF9QmKD5<;!Eh6nSW^u`x=+8uTIal*Oyxoa7gp zmi^Z7W`&(DE5{v%wj-|iYi&Gl*5X1%>r=Vqq4JAu(BaPK#^W^4ERf0S#OCLAd>SZs0e3IhWJgQu&X J%Q~loCIDQHzg++T literal 0 HcmV?d00001 diff --git a/themes/dark_theme/checkbox_unchecked_disabled.png b/themes/dark_theme/checkbox_unchecked_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ade721e81ba47fa792d4586516b8744f8c49c8bb GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}?zMd|QArY-_ulxEPa*#Oo@qaW2$1BDQ+8vzH=M{IKx*_HHz%I$jDbsU$1<&=C z0`|i9>`aZH5FKwG>A-K3OZnw(B$#)xMz0nIYon;Od356UUy5q zf4^FHHEa2bu!e_X2LyMrfBNk6?BMsmlWV7>yZmzSbB#Lr@7duc%oPW6zJC9ev^4ff zMd{}`PU=02qRr&hPOiv5GquYk(3YJmj3NGhO~H=O_J^#zTvpoak4!(xz`#)J>Eaj?aX2|a;$?$i z>-Ycmi{JhV|DTch@S%gD8k^g(|1mdKI;Vst0JT|Cn*aa+ literal 0 HcmV?d00001 diff --git a/themes/dark_theme/close-hover.png b/themes/dark_theme/close-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..657943a668b734138256aa7bb178661030fd4a1f GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hElCp-6+d@B{;Czsv4XWvL@9D%q*01U z!4wWj!F$0?Jsj^eo!r{Ddri1_aII2`+7CHSBk7veEV0oKIji@ligbwndtX%fbjSSj zB7yJk>(p*naoj8Y?WTpv9#av+FM&c;pQcHOn7-eu8u2N2o_+JcK8dOo)VFq(dtD5P*TA^*Iwnd_9S4dQA^DjCZx(!8z~<(=iFoS)%h)AEr0m$~>^@`P%zGzba>*n3>R4-3d+y(lI7Q*8XyvpP*>kyeXaCcOR>sS+XYyGGsk t9`Eh9i#3<@ESz_?k|WV>PRz#d6-@3MqS>un>=;4O>*?y}vd$@?2>><1^ClMOQP`oh&d=?lFt z=ciiUvYAvZobkza>N6QRX92!;QSGodmMuRw?tlC-@N@a}-?7UC0=Q)~T{bywPC23R zKts?-Y0q*NNx?h8Ej@hsQxz6BN4uWz`Cu!QV)i49bJw;*!r$snYY1rn`B_%|bjLhD zk-+!&b!xY(IPR7HcGJRSkEw{^mq4MaPtznsOyBQSjrf$iamMlk*ZzE-v|;M;UGF-= z-!GPWIrIDNrWe~dl-!s$Jy-nCYNKlKV80(@zi`X)69pLm=kq#<+NxTZ{rPR>pxIu1oyD!t)tWz}H8FJB73PUi8e%rF4!knLb}kL6 z@&6irPEYW$Y57V1&Wgb}deC_?8UzIaY%uHyjab=t~JAB2lZ_n-~ zU3_EPe=dKY!bDpy<;vKJD}A@+b^1!ZUX+skDK>uUS)Hb`NUOyy6JCFcREd!HU88P% tkN5W5#hOcc7S20c$&qL`CuZaK3Z}pXQ4`BAF)4$h*VEO{Wt~$(698sW^c4UA literal 0 HcmV?d00001 diff --git a/themes/dark_theme/close.png b/themes/dark_theme/close.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0f5761096ef24b8b4461d9252b42dad48d0d45 GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEliNZ92o3C#tA@u-{|C)d$t8FXFiLZ~V3mRS5g>*y3Mt%yn16ufNXTD$f?W zvODp8uk+z(XThcYlME(pKek{+;d|YKlhz+el4Dx>@ww{4DaWnecZ9!REcJ5c_uDNm z%s7>_7;k=_@Ska(ki>`h_J-q&j^CVa34KjIQxn55XC6!l=n2Sp~G*9|XOw;VE5 z%`mIj#?srCK1aQUE2FW03d2p_zHc_kfi5?B`wqE;G^I&>78EiOu4!S}?i_eT;@dfP zTM<{EgdVR8Yd+|325C%BH`(*NyzZ}uRFT>Y#rV*Mr_V%JZCqUGtut%y^NT;vimPmL zUpwi$=*+&9-_ve%ZPfSTQ`!GM^yV3*jOj~_y*PI2&3A43dhtk|5p%{3TX|o_RG+Uo i=bSk{KYY@+`?&nSj;Kdx-^+M{qSVvX&t;ucLK6U%E&0;` literal 0 HcmV?d00001 diff --git a/themes/dark_theme/down_arrow.png b/themes/dark_theme/down_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e271f7f90b4132c9d740058d8b6c915dbdd626d2 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0y~yVBln6U|{25VPIg`eXhojfq{XsILO_JVcj{ImkbOH zOiAAEE(~*mP5#7!)E0O|7Bet#3xhBt!>l~}cCxtUmUXGmuEal|aXmTV07DNCPqCc>_Yw{RBLfBQWgG?u22L{s4vH{}2nTFk%*b$TC;NohH2G!* P1_lOCS3j3^P6f{ QFfcH9y85}Sb4q9e07qdf=>Px# literal 0 HcmV?d00001 diff --git a/themes/dark_theme/left_arrow_disabled.png b/themes/dark_theme/left_arrow_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b9af8a34edb5f8dd767bf6afa303b89a31d38f GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flVBq9nVPIg`J$b4a0|NtNage(c!@6@aFBupZ zn3BBRT^Rni_n+AhQdi&+S^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa~tnw~C>ArY-_r}}5ago+%if1cWra_iXMl~X*zw@tLtSa;d?D3`B8TJkM(ebuvW z>=#w~)@=${;dwV@=Ak{3m-FT+1Rs1fzqM5Q&*dee6N9`8ysoPntDJrCJ7$l$?}R<( zvM*R-I1^+k#4H)lBVNpx+0HRG?=iqy?FqwMD2 zuYAR{>glKG8M+LI*|xKor-ZQ=94g@09C(nU;CjNlInQgqhOn?WUf6y$M~~sXbWL_* zgjMywKey^)?tk~UC=j$@)wy^3hQ`_R=i4*?8P8=o(!O6k^V-}wd!`)wYV%(0L)F#q z>5bio-TN5MEWNqJO@Z(C^fa^LbpbzQ5;8Mi&OCVVVCLj|YFw6TYfryET4RV%u}292SPQQnS~7 z-x{@Cec7^C45Ih{-#gRBzUgMNXY0#1+c`E|&FJBdD_GKh%beeM=4&JCef_!BHlNDX zKKlx={AGA%A+IERH_z<6%G}8s4r$2;qIN%+XIt{3DS<`PGWX&=@95rRtPIyn>kq#% zyRes`d5)+3+sIi8T%}e^E-2+y|6BZE>N?hhZ!y2;9=Diw>i*VZk;2?914DaG}-mH`5o(wzdbi!%$usc@=vVw@dvNg z$<1X6+byQBLQ(d6?SGa7htHl(J#)=4_|!wDJU$tl9XuO?^q%v?x%}Fd&3H3s8{3`U zYU`s(9|Pl8mrCsr4KBNU@!ZBOZIAcNJpa60B~qd`u6$ec+U!{F6VE?eTb$D=(0cdQ z$H(_7`=*=W6Yovk!e!F9EaB>zdy*Cf4@|F@zGn`p-On;-%FQ!hzLaRcoYNN?_w_I9 z1Lg%!s_rGJ?^9X*tM23(J4UhC^V&;4T8mxX+uJ*7iT44gtKavp4qL6SUKoDr=^gQ@ zr})#pXgym|IfMbntC0RXcsG~?boH7_9v;ISMC)uU0`iATT_Iqv-SIYmIIIF zKlLQ=oJbV=%DFP{L-&$fWvfedb)VaQxo~*@NB)YZexC%NWI8c0Ffe$!`njxgN@xNA D@ms|$ literal 0 HcmV?d00001 diff --git a/themes/dark_theme/radio_checked_disabled.png b/themes/dark_theme/radio_checked_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0051ede5f00d8cecf17b37c6bb9de38bb24e19 GIT binary patch literal 972 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa~to}Mm_ArY-_r=87?36(fje}3-F881`BF3nvziEknI*5f_da!epkcsu$0$>aqbYwLXT$4V6H}BXns4T3 zxi8%L#B1rLPkwRdKl5>?8B||Blhz)z^3InpB{wwdwn#fD|NMPmXVA_+mFoEdEZzsA zm)pLVG5Gxa?QMqOx!+3GfNXM!5~vB$n!cZ5#+*4diN(o}W1Bgzdh?}eKeH%4nX)ND zLqv}0$IUk)A7*+!b`%JyVk?N!?-+r&*2jh+Xk*j;RWc#Eq_iSjasFCr|6xw;A=F{7VH(fJj?HL?!8i3aOF?|v?S_pD~sXX@t>lbvyM&DDFe=gH=O_J^#z+?*<>F0}?TFfiTrba4!cIQ(|ndGC-w zk>mE?e@L{N=Q0Ui5_4N!(&pG>rnY!?V~;?YCjPwGKWB zR|VaQ_r9B4@AM$*UHakYzH=`Yuve_(efiX`d?njSmzxG^T_PU}zPeBNrZ0P)y({q0 zXZ1(({;&SM)qc-)wa8Cd9MsVu=gw+4Qh&YL$7$ z1GlMvgGBEBRxEJZ{P~=q>v6q*SMR@Bv1xy(=$ZhQ2@|G%$}bREHLvI^hsde6ZL+bv z^53PHq`!OFL^V2PFx{Gvyn9br-lvT9iULPVrrzb(X;FKiv1!o@pNcvrg;xfew^@&0 z`8h){LWeEw(zQmt2R#RJGMHKqq_BpaZZmB7DQ8~L!uY^Bbld0SRi1~BCTT^@iqh7+ zy=R|^se$k;2SZWaObJ0(t#?0_8Ft2%?-iJ_`9N-N1Vhb%>us$a1*-*S6#rcEn>XRl z>#$p=?EgI5vwQ1%oxbY2V`kGP?)~Avc529T@Bj016O!5Uj=y_To@syWhl9xC12PlN zso(u>IxBqo)V=mfDPd+!zjtqaY`}bSL0kKQ%-jgER`m^O!Vi|z8p<9JPq3I@lK%g+ z$2FP2>8@{kQgTC;Z$`UM%*{%8=3r=lNRUsqj``<$#n7Am!j23K3=E#GelF{r5}E)y CbB8bh literal 0 HcmV?d00001 diff --git a/themes/dark_theme/radio_unchecked.png b/themes/dark_theme/radio_unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..9a4def65c64a9d55441f82fe66fc7f46e5b73a75 GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}Cp`I>|ArY-_r~3K_2MV;!-zg>Z-d}+C;07Vz4IlXrusvq;@F~B*FP78GsIx92 zqlxwZA=|ZY)^&=7*XbNt`>{JCiAQnC#y0y4ZEb3`v0D_66-4W8*!;fi*%_Pkb2BAh ztX%#-R_wSX&*6Q4vr4_vCbMxa*q^&9;agyC=y`nr)H)qeSF`juQ{6W~oovaC|1qloZ8!yl76U~_ZcjnBq z=a*de-*xccTBn5@GA`+u^ne4!{`P!TbT5R)GroQSu k=C<7Y{mSL@{#})~yYk+JchCP+1_lNOPgg&ebxsLQ045ejk^lez literal 0 HcmV?d00001 diff --git a/themes/dark_theme/radio_unchecked_disabled.png b/themes/dark_theme/radio_unchecked_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6ece890e750b0685bbd818f22e5fbf999ccd35e1 GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}CrJgR1ArY-_r=9f^4wPt{zh3l`Q3Z3DZ)Qa2GW(Bg3Tjg3Q(A6rGd{v?;3i-a zD5mFeaYvE!mXaHjW;{BzL(p8O=a!k!0Rac*Htqu zotfEamiw>#i2n_fv*+FwRCu^ta_~}QYIwz`^q#e=`f65TUEROq8@X@HJhP$e2}@N2 z|Ds(hl&rTFvba>t2Msnktz=T(qpQ#;)SZsRG&Dnag zB%2&(&pE4ehtoEddOiIVWHj-Ip3--rlPODM^ww9V+R8U(&YF8SHg@%a%-Vk@#fX&u8j#FTGYE?=jvi2I_upup?jp69xc4~e@d?PFyKxq98VGQm+n;kVpB z)-uHADft`GL4Ms|kH&b{r&_*`V(Z?PMz!@3W& z9SG_EtF&%5^EGRyg{z7+PV4Si?_?Rono&zH^lv(5gS?`QNfzk9dmV^bCb P0|SGntDnm{r-UW|M`=yg literal 0 HcmV?d00001 diff --git a/themes/dark_theme/radio_unchecked_focus.png b/themes/dark_theme/radio_unchecked_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..564e022d33d93bab458674a4820d943299333857 GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0VruY)k7lg8`{1_lQ95>H=O_J^#z+??iqIY)XK7?^}TT^vIq4!@nYKRY;3 zAshnu3h3e>-*u8<=3kDo)_2MEpG5J`gy-~k%oNT4GS0dzH>|( z%o>aux0Z|D*rWLHM_T&r|D|uA%*CGR)1$L;YnCry>x@1_yX&>_1tE&8Il;MbiAnKYW~8ba_%^z z#j!JMMHseytBsh*;NUXliZy3D!wd_CT(gHBK@4enOd0O%37@$Rq;RS3;CPUl!XVVg zFSPt_mBGXZ%G!(;t}dr1GM+iN&ELh>?BQICbMNbKs_xz+W!XM0$yH(Mysh0!g>G)U z7CFI7dgYg^F050$s>?Qpu=U=t;{U9Du<@pKLF}w=&u1qTi#MoGt<#xmcYXb{tNi=t zHyz1!zwqc@*ypfW?4C1ciZk{!o>lW$BYZL3I_vn`BR$L+3^U&QJ)i#ntY?_SJjTxb z>Nij9oBYO<^Z0qoEnogl+C4pX_skTd6@M5nt$EgR%RM8Jfq{X+)78&qol`;+0E8qQ Aa{vGU literal 0 HcmV?d00001 diff --git a/themes/dark_theme/right_arrow.png b/themes/dark_theme/right_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0a4e6a7a8097818d9c0626c84f19f4d690dd31 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flVBq9nVPIg`J$b4a0|NtNage(c!@6@aFBupZ zn3BBRT^Rni_n+AhQdi&+SEal|aXmS~f%X6S!x26wV$@P1)l!ZY@GVxHb2y_T5#)m07S2-hc{i0A7#J8lUHx3v IIVCg!0Q-9=WdHyG literal 0 HcmV?d00001 diff --git a/themes/dark_theme/right_arrow_disabled.png b/themes/dark_theme/right_arrow_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..5c0bee402ff962fe285183b321feba59dac4f3d6 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flVBq9nVPIg`J$b4a0|NtNage(c!@6@aFBupZ zn3BBRT^Rni_n+AhQdi&+Sk07#J8lUHx3v IIVCg!0RC7gAOHXW literal 0 HcmV?d00001 diff --git a/themes/dark_theme/sizegrip.png b/themes/dark_theme/sizegrip.png new file mode 100644 index 0000000000000000000000000000000000000000..350583aaac4aa474ac449eaea2cc7ddd060276b9 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRdMrH;E236Z!B?bltwg8_HR|W=#b?erZXJ6B0 zU|?V@3GxeOaCmkjje&td)6>Nz(!sM1rC-2ha+zM<2rMwpeI*@Z@PO%TWH}e g*?iSqXK(y9mdKI;Vst0DBB1#Q*>R literal 0 HcmV?d00001 diff --git a/themes/dark_theme/stylesheet-branch-end.png b/themes/dark_theme/stylesheet-branch-end.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5d3b51f8cf7fd0f0ed26cfea722fa5a632dc1a GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yUuUCj- zU|`7iba4!+xb^nJMqUO34ra#_3wVw%@;uL?u}eQTa{9(C@Aeh1UUlck*A@k*7L5)8 zMJExL4gp0jC6^8XRzW3~jwTL4B^SpQjz9rL!V3PZViyW!DG8f5FNA@Cfx*+&&t;uc GLK6T|14Eer literal 0 HcmV?d00001 diff --git a/themes/dark_theme/transparent.png b/themes/dark_theme/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..483df25137d1f267b9793bb6068bb58e8825f11f GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hElYWU|=ut^mS#w&mt)xZXMrT;>*CmAe$KyQR1ARo12m?w-NFAiRT*4Z!n;%CcpX@y z#_~F_LXG2fY>hU{>(~lyj@^@f7z@0~derZg`@Q~igLa?IWzKbaa=Ztt z1^Qbaobl7z<{!(hvF&}9oPywI3@R*NZmWIGHrTzHL9{YJdyRLU{>RSxI`y&*ZwZY?&bMia)nMux3kJPh&WCCv0ih+Og7!u zji=}E%oRMmN_>G_pWEC6HcHFo`~M3cUnioeIpN1MmX;s&tU{@(M(+i*jC@xTn zQhj#%fg!i5zlmMm$~8tDQ5&}?wM;6i6y;buUG3RaNr&Ud_L#J`T)etFMg{vd$@?2>^|N=fD5} literal 0 HcmV?d00001 diff --git a/themes/dark_theme/up_arrow.png b/themes/dark_theme/up_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..abcc7245212f19a5dbff1bb19647b1dd4bb05b6a GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0y~yVBln6U|{25VPIg`eXhojfq{XsILO_JVcj{ImkbOH zOiAAEE)4(M`_JqLsV(q`EM{Qf76xHPhFNnY7#JAXOFVsD+3#?ObBOZ)?f;?2z`&s7 z>Eal|aXmTV0Pnx~?HeT~vP$qibn?*Rk(7{_$SR<9k%8gVR`yF}yEh$WU|?YIboFyt I=akR{015Ib8~^|S literal 0 HcmV?d00001 diff --git a/themes/dark_theme/up_arrow_disabled.png b/themes/dark_theme/up_arrow_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..b9c8e3b53519f086536accd2e8adb193b66817d8 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0y~yVBln6U|{25VPIg`eXhojfq{XsILO_JVcj{ImkbOH zOiAAEE)4(M`_JqLsV(q`EM{Qf76xHPhFNnY7#JAXOFVsD+3#?ObBM_QRKCg0z`&sF z>Eal|aXmTV0PnM!hK&*vS%X*}IB|$-GV$>AoM7UZn!&)ZW)1rUzf_Yo3=9kmp00i_ I>zopr0PfHyJpcdz literal 0 HcmV?d00001