commit 1be50e306ae154bb54cfcdefbf8abd436904f8f0 Author: tobtoht Date: Mon Feb 1 04:33:57 2021 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1c828c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +cmake-build-debug/ +.idea/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a617eff --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,221 @@ +cmake_minimum_required(VERSION 3.13) +project(moneroservice) + +message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}") + +set(THREADS_PREFER_PTHREAD_FLAG ON) +set(VERSION_MAJOR "0") +set(VERSION_MINOR "1") +set(VERSION_REVISION "0") +set(VERSION "beta-3") + +list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake") +include(CheckCCompilerFlag) +include(CheckCXXCompilerFlag) +include(CheckLinkerFlag) +include(FetchContent) +include(FindCcache) +include(CheckIncludeFile) +include(CheckSymbolExists) + +if(DEBUG) + set(CMAKE_VERBOSE_MAKEFILE ON) +endif() + +set(ARCH "x86-64") +set(BUILD_64 ON) +set(USE_SINGLE_BUILDDIR ON) + +check_include_file(sys/prctl.h HAVE_SYS_PRCTL_H) +check_symbol_exists(prctl "sys/prctl.h" HAVE_PRCTL) + +function (add_c_flag_if_supported flag var) + string(REPLACE "-" "_" supported ${flag}_c) + check_c_compiler_flag(${flag} ${supported}) + if(${${supported}}) + set(${var} "${${var}} ${flag}" PARENT_SCOPE) + endif() +endfunction() + +function (add_cxx_flag_if_supported flag var) + string(REPLACE "-" "_" supported ${flag}_cxx) + check_cxx_compiler_flag(${flag} ${supported}) + if(${${supported}}) + set(${var} "${${var}} ${flag}" PARENT_SCOPE) + endif() +endfunction() + +function (add_linker_flag_if_supported flag var) + string(REPLACE "-" "_" supported ${flag}_ld) + string(REPLACE "," "_" supported ${flag}_ld) + check_linker_flag(${flag} ${supported}) + if(${${supported}}) + set(${var} "${${var}} ${flag}" PARENT_SCOPE) + endif() +endfunction() + + +include(CMakePackageConfigHelpers) + +if(UNIX AND NOT APPLE) + if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + # https://github.com/monero-project/monero-gui/issues/3142#issuecomment-705940446 + set(CMAKE_SKIP_RPATH ON) + endif() + + find_package(X11 REQUIRED) + message(STATUS "X11_FOUND = ${X11_FOUND}") + message(STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}") + message(STATUS "X11_LIBRARIES = ${X11_LIBRARIES}") + include_directories(${X11_INCLUDE_DIR}) + link_directories(${X11_LIBRARIES}) + if(STATIC) + find_library(XCB_LIBRARY xcb) + message(STATUS "Found xcb library: ${XCB_LIBRARY}") + endif() +endif() + + +if(MINGW) + string(REGEX MATCH "^[^/]:/[^/]*" msys2_install_path "${CMAKE_C_COMPILER}") + message(STATUS "MSYS location: ${msys2_install_path}") + set(CMAKE_INCLUDE_PATH "${msys2_install_path}/mingw${ARCH_WIDTH}/include") + # This is necessary because otherwise CMake will make Boost libraries -lfoo + # rather than a full path. Unfortunately, this makes the shared libraries get + # linked due to a bug in CMake which misses putting -static flags around the + # -lfoo arguments. + set(DEFLIB ${msys2_install_path}/mingw${ARCH_WIDTH}/lib) + list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_DIRECTORIES ${DEFLIB}) + list(REMOVE_ITEM CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES ${DEFLIB}) +endif() + + +if(MINGW) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wa,-mbig-obj") + set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi;crypt32;bcrypt) + if(DEPENDS) + set(ICU_LIBRARIES iconv) + else() + set(ICU_LIBRARIES icuio icuin icuuc icudt icutu iconv) + endif() +elseif(APPLE) + set(EXTRA_LIBRARIES "-framework AppKit") +elseif(OPENBSD) + set(EXTRA_LIBRARIES "") +elseif(FREEBSD) + set(EXTRA_LIBRARIES execinfo) +elseif(DRAGONFLY) + find_library(COMPAT compat) + set(EXTRA_LIBRARIES execinfo ${COMPAT}) +elseif(CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)") + set(EXTRA_LIBRARIES socket nsl resolv) +elseif(NOT MSVC AND NOT DEPENDS) + find_library(RT rt) + set(EXTRA_LIBRARIES ${RT}) +endif() + +list(APPEND EXTRA_LIBRARIES ${CMAKE_DL_LIBS}) + +if(APPLE) + include_directories(SYSTEM /usr/include/malloc) + if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -fvisibility=default -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -DGTEST_HAS_TR1_TUPLE=0") +endif() + +if (APPLE AND NOT IOS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -fvisibility=default -std=c++11") +endif() + +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -DGTEST_HAS_TR1_TUPLE=0") +endif() + +# warnings +# @TODO: enable these 2 for migration to Qt 6 +#add_c_flag_if_supported(-Werror C_SECURITY_FLAGS) +#add_cxx_flag_if_supported(-Werror CXX_SECURITY_FLAGS) +add_c_flag_if_supported(-Wformat C_SECURITY_FLAGS) +add_cxx_flag_if_supported(-Wformat CXX_SECURITY_FLAGS) +add_c_flag_if_supported(-Wformat-security C_SECURITY_FLAGS) +add_cxx_flag_if_supported(-Wformat-security CXX_SECURITY_FLAGS) + +# -fstack-protector +if (NOT OPENBSD AND NOT (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 9.1))) + add_c_flag_if_supported(-fstack-protector C_SECURITY_FLAGS) + add_cxx_flag_if_supported(-fstack-protector CXX_SECURITY_FLAGS) + add_c_flag_if_supported(-fstack-protector-strong C_SECURITY_FLAGS) + add_cxx_flag_if_supported(-fstack-protector-strong CXX_SECURITY_FLAGS) +endif() + +# New in GCC 8.2 +if (NOT OPENBSD AND NOT (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 9.1))) + add_c_flag_if_supported(-fcf-protection=full C_SECURITY_FLAGS) + add_cxx_flag_if_supported(-fcf-protection=full CXX_SECURITY_FLAGS) +endif() +if (NOT WIN32 AND NOT OPENBSD) + add_c_flag_if_supported(-fstack-clash-protection C_SECURITY_FLAGS) + add_cxx_flag_if_supported(-fstack-clash-protection CXX_SECURITY_FLAGS) +endif() + +# Removed in GCC 9.1 (or before ?), but still accepted, so spams the output +if (NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.1)) + add_c_flag_if_supported(-mmitigate-rop C_SECURITY_FLAGS) + add_cxx_flag_if_supported(-mmitigate-rop CXX_SECURITY_FLAGS) +endif() + +# linker +if (APPLE) + add_linker_flag_if_supported(-Wl,-bind_at_load LD_SECURITY_FLAGS) + add_linker_flag_if_supported(-Wl,-dead_strip LD_SECURITY_FLAGS) + add_linker_flag_if_supported(-Wl,-dead_strip_dylibs LD_SECURITY_FLAGS) +endif() +if (NOT APPLE AND NOT (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "GNU")) + # Windows binaries die on startup with PIE when compiled with GCC + add_linker_flag_if_supported(-pie LD_SECURITY_FLAGS) +endif() +add_linker_flag_if_supported(-Wl,-z,relro LD_SECURITY_FLAGS) +add_linker_flag_if_supported(-Wl,-z,now LD_SECURITY_FLAGS) +add_linker_flag_if_supported(-Wl,-z,noexecstack noexecstack_SUPPORTED) +if (noexecstack_SUPPORTED) + set(LD_SECURITY_FLAGS "${LD_SECURITY_FLAGS} -Wl,-z,noexecstack") +endif() +add_linker_flag_if_supported(-Wl,-z,noexecheap noexecheap_SUPPORTED) +if (noexecheap_SUPPORTED) + set(LD_SECURITY_FLAGS "${LD_SECURITY_FLAGS} -Wl,-z,noexecheap") +endif() + +# some windows linker bits +if (WIN32) + add_linker_flag_if_supported(-Wl,--dynamicbase LD_SECURITY_FLAGS) + add_linker_flag_if_supported(-Wl,--nxcompat LD_SECURITY_FLAGS) + add_linker_flag_if_supported(-Wl,--high-entropy-va LD_SECURITY_FLAGS) +endif() + +if(STATIC) + add_linker_flag_if_supported(-static-libgcc STATIC_FLAGS) + add_linker_flag_if_supported(-static-libstdc++ STATIC_FLAGS) + if(MINGW) + add_linker_flag_if_supported(-static STATIC_FLAGS) + endif() +endif() + +# With GCC 6.1.1 the compiled binary malfunctions due to aliasing. Until that +# is fixed in the code (Issue #847), force compiler to be conservative. +add_c_flag_if_supported(-fno-strict-aliasing C_SECURITY_FLAGS) +add_cxx_flag_if_supported(-fno-strict-aliasing CXX_SECURITY_FLAGS) + +add_c_flag_if_supported(-fPIC C_SECURITY_FLAGS) +add_cxx_flag_if_supported(-fPIC CXX_SECURITY_FLAGS) + +message(STATUS "Using C security hardening flags: ${C_SECURITY_FLAGS}") +message(STATUS "Using C++ security hardening flags: ${CXX_SECURITY_FLAGS}") +message(STATUS "Using linker security hardening flags: ${LD_SECURITY_FLAGS}") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${C_SECURITY_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${CXX_SECURITY_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LD_SECURITY_FLAGS} ${STATIC_FLAGS}") + +add_subdirectory(src) diff --git a/cmake/CheckLinkerFlag.c b/cmake/CheckLinkerFlag.c new file mode 100644 index 0000000..a0dcc16 --- /dev/null +++ b/cmake/CheckLinkerFlag.c @@ -0,0 +1,14 @@ +#ifdef __CLASSIC_C__ +int main() +{ + int ac; + char* av[]; +#else +int main(int ac, char* av[]) +{ +#endif + if (ac > 1000) { + return *av[0]; + } + return 0; +} diff --git a/cmake/CheckLinkerFlag.cmake b/cmake/CheckLinkerFlag.cmake new file mode 100644 index 0000000..96f7182 --- /dev/null +++ b/cmake/CheckLinkerFlag.cmake @@ -0,0 +1,47 @@ +include(CheckCCompilerFlag) + +macro(CHECK_LINKER_FLAG flag VARIABLE) + if(NOT DEFINED "${VARIABLE}") + if(NOT CMAKE_REQUIRED_QUIET) + message(STATUS "Looking for ${flag} linker flag") + endif() + + set(_cle_source ${CMAKE_SOURCE_DIR}/cmake/CheckLinkerFlag.c) + + set(saved_CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + set(CMAKE_C_FLAGS "${flag}") + try_compile(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${_cle_source} + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${flag} + CMAKE_FLAGS + OUTPUT_VARIABLE OUTPUT) + unset(_cle_source) + set(CMAKE_C_FLAGS ${saved_CMAKE_C_FLAGS}) + unset(saved_CMAKE_C_FLAGS) + + if ("${OUTPUT}" MATCHES "warning.*ignored") + set(${VARIABLE} 0) + endif() + + if(${VARIABLE}) + if(NOT CMAKE_REQUIRED_QUIET) + message(STATUS "Looking for ${flag} linker flag - found") + endif() + set(${VARIABLE} 1 CACHE INTERNAL "Have linker flag ${flag}") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the ${flag} linker flag is supported " + "passed with the following output:\n" + "${OUTPUT}\n\n") + else() + if(NOT CMAKE_REQUIRED_QUIET) + message(STATUS "Looking for ${flag} linker flag - not found") + endif() + set(${VARIABLE} "" CACHE INTERNAL "Have linker flag ${flag}") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the ${flag} linker flag is supported " + "failed with the following output:\n" + "${OUTPUT}\n\n") + endif() + endif() +endmacro() diff --git a/cmake/FindCcache.cmake b/cmake/FindCcache.cmake new file mode 100644 index 0000000..29e2d24 --- /dev/null +++ b/cmake/FindCcache.cmake @@ -0,0 +1,56 @@ +# Copyright (c) 2014-2020, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# - Try to find readline include dirs and libraries +# +# Automatically finds ccache build accelerator, if it's found in PATH. +# +# Usage of this module as follows: +# +# project(monero) +# include(FindCcache) # Include AFTER the project() macro to be able to reach the CMAKE_CXX_COMPILER variable +# +# Properties modified by this module: +# +# GLOBAL PROPERTY RULE_LAUNCH_COMPILE set to ccache, when ccache found +# GLOBAL PROPERTY RULE_LAUNCH_LINK set to ccache, when ccache found + +find_program(CCACHE_FOUND ccache) +if (CCACHE_FOUND) + set(TEMP_CPP_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test-program.cpp") + file(WRITE "${TEMP_CPP_FILE}" "int main() { return 0; }") + execute_process(COMMAND "${CCACHE_FOUND}" "${CMAKE_CXX_COMPILER}" "${TEMP_CPP_FILE}" RESULT_VARIABLE RET) + if (${RET} EQUAL 0) + message("found usable ccache: ${CCACHE_FOUND}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_FOUND}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_FOUND}") + else() + message("found ccache ${CCACHE_FOUND}, but is UNUSABLE! Return code: ${RET}") + endif() +else() + message("ccache NOT found!") +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..ebdcb36 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,68 @@ +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +# pthread +find_package(Threads REQUIRED) +find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui) + +qt5_add_resources(RESOURCES assets.qrc) + +# Compile source files (.h/.cpp) +file(GLOB SOURCE_FILES + "*.h" + "*.cpp" + "ui/BreezeStyleSheets/breeze.qrc" + "ui/qdarkstyle/style.qrc" +) + +set(EXECUTABLE_FLAG) + +add_executable(moneroservice ${EXECUTABLE_FLAG} main.cpp + ${SOURCE_FILES} + ${RESOURCES} +) + +set_property(TARGET moneroservice PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + +target_include_directories(moneroservice PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS}) + +file(GLOB_RECURSE SRC_SOURCES *.cpp) +file(GLOB_RECURSE SRC_HEADERS *.h) + +target_include_directories(moneroservice PUBLIC + ${CMAKE_BINARY_DIR}/src/moneroservice_autogen/include + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR} + ${X11_INCLUDE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} +) + +target_compile_definitions(moneroservice + PUBLIC + ${Qt5Core_DEFINITIONS} + ${Qt5Widgets_DEFINITIONS} + ${Qt5Gui_DEFINITIONS} + ) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") + +target_link_libraries(moneroservice + ${CMAKE_DL_LIBS} + ${EXTRA_LIBRARIES} + Qt5::Core + Qt5::Widgets + Qt5::Gui + ${ICU_LIBRARIES} + Threads::Threads + ) + +if(X11_FOUND) + target_link_libraries(moneroservice ${X11_LIBRARIES}) +endif() + +install(TARGETS moneroservice + DESTINATION ${CMAKE_INSTALL_PREFIX} + ) diff --git a/src/CommandLineEdit.cpp b/src/CommandLineEdit.cpp new file mode 100644 index 0000000..86c9032 --- /dev/null +++ b/src/CommandLineEdit.cpp @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2021, The Monero Project. + +#include "CommandLineEdit.h" + +#include + +CommandLineEdit::CommandLineEdit(QWidget *parent) : QLineEdit(parent) +{ + connect(this, &QLineEdit::returnPressed, this, &CommandLineEdit::updateHistory); +} + +void CommandLineEdit::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Up) { + if (m_historyIndex == m_history.size()) { + m_currentLine = this->text(); + } + if (this->decreaseIndex()) { + this->setText(this->getCommand(m_historyIndex)); + } + } else if (event->key() == Qt::Key_Down) { + if (this->increaseIndex()) { + this->setText(this->getCommand(m_historyIndex)); + } + } + QLineEdit::keyPressEvent(event); +} + +bool CommandLineEdit::decreaseIndex() { + if (m_historyIndex > 0 && m_history.size() >= m_historyIndex) { + m_historyIndex -= 1; + return true; + } + return false; +} + +bool CommandLineEdit::increaseIndex() { + if (m_historyIndex < m_history.size()) { + m_historyIndex += 1; + return true; + } + return false; +} + +QString CommandLineEdit::getCommand(int index) { + if (index < m_history.size()) { + return m_history[index]; + } else { + return m_currentLine; + } +} + +void CommandLineEdit::updateHistory() { + QString command = this->text(); + if (m_history.isEmpty() || m_history.last() != command) { + m_history << command; + m_historyIndex = m_history.size(); + } + this->setText(""); + emit commandExecuted(command.split(" ")); +} \ No newline at end of file diff --git a/src/CommandLineEdit.h b/src/CommandLineEdit.h new file mode 100644 index 0000000..e17bfe6 --- /dev/null +++ b/src/CommandLineEdit.h @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2021, The Monero Project. + +#ifndef MONEROSERVICE_COMMANDLINEEDIT_H +#define MONEROSERVICE_COMMANDLINEEDIT_H + +#include +#include + +class CommandLineEdit : public QLineEdit { + Q_OBJECT + +public: + explicit CommandLineEdit(QWidget *parent = nullptr); + + void keyPressEvent(QKeyEvent *event) override; + +signals: + void commandExecuted(const QStringList &command); + +private: + void updateHistory(); + bool decreaseIndex(); + bool increaseIndex(); + QString getCommand(int index); + + QString m_currentLine; + int m_historyIndex = 1; + QStringList m_history; +}; + + +#endif //MONEROSERVICE_COMMANDLINEEDIT_H diff --git a/src/Config.cpp b/src/Config.cpp new file mode 100644 index 0000000..4809269 --- /dev/null +++ b/src/Config.cpp @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. +// Copyright (c) 2020 KeePassXC Team +// Copyright (c) 2011 Felix Geyer + +#include "Config.h" + +#include +#include + +#define QS QStringLiteral + +struct ConfigDirective +{ + QString name; + QVariant defaultValue; +}; + +static const QHash configStrings = { + {Config::network,{QS("network"), "mainnet"}}, + {Config::pathToMonerod,{QS("pathToMonerod"), ""}}, + {Config::pruneBlockchain,{QS("pruneBlockchain"), true}}, + {Config::dataDir,{QS("dataDir"), ""}}, + {Config::logLevel,{QS("logLevel"), 0}}, + {Config::limitRateDown,{QS("limitRateDown"), 0}}, + {Config::customStartupFlags,{QS("customStartupFlags"), ""}}, + {Config::noZeroMQ,{QS("noZeroMQ"), true}}, + {Config::RPCBindIP,{QS("RPCBindIP"), ""}}, + {Config::RPCBindPort,{QS("RPCBindPort"), 0}}, + {Config::P2PBindIP,{QS("P2PBindIP"), ""}}, + {Config::P2PBindPort,{QS("P2PBindPort"), 0}}, +}; + + +QPointer Config::m_instance(nullptr); + +QVariant Config::get(ConfigKey key) +{ + auto cfg = configStrings[key]; + auto defaultValue = configStrings[key].defaultValue; + + return m_settings->value(cfg.name, defaultValue); +} + +QString Config::getFileName() +{ + return m_settings->fileName(); +} + +void Config::set(ConfigKey key, const QVariant& value) +{ + if (get(key) == value) { + return; + } + + auto cfg = configStrings[key]; + m_settings->setValue(cfg.name, value); + + this->sync(); + emit changed(key); +} + +/** + * Sync configuration with persistent storage. + * + * Usually, you don't need to call this method manually, but if you are writing + * configurations after an emitted \link QCoreApplication::aboutToQuit() signal, + * use it to guarantee your config values are persisted. + */ +void Config::sync() +{ + m_settings->sync(); +} + +void Config::resetToDefaults() +{ + m_settings->clear(); +} + +Config::Config(const QString& fileName, QObject* parent) + : QObject(parent) +{ + init(fileName); +} + +Config::Config(QObject* parent) + : QObject(parent) +{ + QString configPath; + + configPath = QDir::homePath(); + configPath += "/.config/moneroservice/settings.json"; + + init(QDir::toNativeSeparators(configPath)); +} + + +Config::~Config() +{ +} + +void Config::init(const QString& configFileName) +{ +// const QSettings::Format jsonFormat = QSettings::registerFormat("json", Utils::readJsonFile, Utils::writeJsonFile); +// QSettings::setDefaultFormat(jsonFormat); + m_settings.reset(new QSettings()); + + connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync); +} + +Config* Config::instance() +{ + if (!m_instance) { + m_instance = new Config(qApp); + } + + return m_instance; +} \ No newline at end of file diff --git a/src/Config.h b/src/Config.h new file mode 100644 index 0000000..6efe31e --- /dev/null +++ b/src/Config.h @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. +// Copyright (c) 2020 KeePassXC Team +// Copyright (c) 2011 Felix Geyer + +#ifndef MONEROSERVICE_SETTINGS_H +#define MONEROSERVICE_SETTINGS_H + +#include +#include +#include + +class Config : public QObject +{ +Q_OBJECT + +public: + Q_DISABLE_COPY(Config) + + enum ConfigKey + { + network, + pathToMonerod, + pruneBlockchain, + dataDir, + logLevel, + limitRateDown, + customStartupFlags, + noZeroMQ, + RPCBindIP, + RPCBindPort, + P2PBindIP, + P2PBindPort + }; + + ~Config() override; + QVariant get(ConfigKey key); + QString getFileName(); + void set(ConfigKey key, const QVariant& value); + void sync(); + void resetToDefaults(); + + static Config* instance(); + +signals: + void changed(ConfigKey key); + +private: + Config(const QString& fileName, QObject* parent = nullptr); + explicit Config(QObject* parent); + void init(const QString& configFileName); + + static QPointer m_instance; + + QScopedPointer m_settings; + QHash m_defaults; +}; + +inline Config* config() +{ + return Config::instance(); +} + +#endif //MONEROSERVICE_SETTINGS_H diff --git a/src/Configurator.cpp b/src/Configurator.cpp new file mode 100644 index 0000000..d9a2c2b --- /dev/null +++ b/src/Configurator.cpp @@ -0,0 +1,86 @@ +#include "Configurator.h" +#include "ui_Configurator.h" +#include "Config.h" + +#include + +Configurator::Configurator(QWidget *parent) : + QDialog(parent), + ui(new Ui::Configurator) +{ + ui->setupUi(this); + + // Basic settings + ui->lineMonerod->setText(config()->get(Config::pathToMonerod).toString()); + ui->lineMonerod->setCursorPosition(0); + connect(ui->lineMonerod, &QLineEdit::textChanged, [this](const QString &text){ + this->setConfig(Config::pathToMonerod, text); + }); + + ui->checkPruneBlockchain->setChecked(config()->get(Config::pruneBlockchain).toBool()); + connect(ui->checkPruneBlockchain, &QCheckBox::toggled, [this](bool toggled){ + this->setConfig(Config::pruneBlockchain, toggled); + }); + + ui->lineDataDir->setText(config()->get(Config::dataDir).toString()); + connect(ui->lineDataDir, &QLineEdit::textChanged, [this](const QString &text){ + this->setConfig(Config::dataDir, text); + }); + + ui->spinLimitSpeedDown->setValue(config()->get(Config::limitRateDown).toInt()); + connect(ui->spinLimitSpeedDown, QOverload::of(&QSpinBox::valueChanged), [this](int value){ + this->setConfig(Config::limitRateDown, value); + }); + + // Advanced settings + ui->comboNetwork->setCurrentIndex(config()->get(Config::network).toInt()); + connect(ui->comboNetwork, QOverload::of(&QComboBox::currentIndexChanged), [this](int value){ + this->setConfig(Config::network, value); + }); + + ui->comboLogLevel->setCurrentIndex(config()->get(Config::logLevel).toInt()); + connect(ui->comboLogLevel, QOverload::of(&QComboBox::currentIndexChanged), [this](int value){ + this->setConfig(Config::logLevel, value); + }); + + ui->checkNoZeroMQ->setChecked(config()->get(Config::noZeroMQ).toBool()); + connect(ui->checkNoZeroMQ, &QCheckBox::toggled, [this](bool toggled){ + this->setConfig(Config::noZeroMQ, toggled); + }); + + ui->lineRPCBindIP->setText(config()->get(Config::RPCBindIP).toString()); + connect(ui->lineRPCBindIP, &QLineEdit::textChanged, [this](const QString &text){ + this->setConfig(Config::RPCBindIP, text); + }); + + ui->lineRPCBindPort->setText(config()->get(Config::RPCBindPort).toString()); + connect(ui->lineP2PBindPort, &QLineEdit::textChanged, [this](const QString &text){ + this->setConfig(Config::P2PBindPort, text); + }); + + ui->lineP2PBindIP->setText(config()->get(Config::P2PBindIP).toString()); + connect(ui->lineP2PBindIP, &QLineEdit::textChanged, [this](const QString &text){ + this->setConfig(Config::P2PBindIP, text); + }); + + ui->lineP2PBindPort->setText(config()->get(Config::P2PBindPort).toString()); + connect(ui->lineP2PBindPort, &QLineEdit::textChanged, [this](const QString &text){ + this->setConfig(Config::P2PBindPort, text); + }); + + this->adjustSize(); +} + +bool Configurator::configUpdated() const { + return m_configUpdated; +} + +void Configurator::setConfig(Config::ConfigKey configKey, const QVariant &value) { + this->m_configUpdated = true; + config()->set(configKey, value); +} + +Configurator::~Configurator() +{ + delete ui; +} diff --git a/src/Configurator.h b/src/Configurator.h new file mode 100644 index 0000000..641f8cf --- /dev/null +++ b/src/Configurator.h @@ -0,0 +1,27 @@ +#ifndef MONEROSERVICE_CONFIGURATOR_H +#define MONEROSERVICE_CONFIGURATOR_H + +#include +#include "Config.h" + +namespace Ui { + class Configurator; +} + +class Configurator : public QDialog +{ + Q_OBJECT + +public: + explicit Configurator(QWidget *parent = nullptr); + ~Configurator() override; + bool configUpdated() const; + +private: + void setConfig(Config::ConfigKey configKey, const QVariant &value); + Ui::Configurator *ui; + + bool m_configUpdated = false; +}; + +#endif //MONEROSERVICE_CONFIGURATOR_H diff --git a/src/Configurator.ui b/src/Configurator.ui new file mode 100644 index 0000000..3d5fc20 --- /dev/null +++ b/src/Configurator.ui @@ -0,0 +1,345 @@ + + + Configurator + + + + 0 + 0 + 692 + 585 + + + + + 500 + 0 + + + + Config + + + + + + 1 + + + + Basic + + + + + + Path to monerod: + + + + + + + + + + + Browse + + + + + + + + + + + + Blockchain + + + + + + Prune blockchain + + + true + + + + + + + Data directory: + + + + + + + + + Leave blank for default + + + + + + + Browse + + + + + + + + + + + + Network + + + + + + + + Limit download speed: + + + + + + + 0 + + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + Advanced + + + + + + + + Network + + + + + + + + Mainnet + + + + + Stagenet + + + + + Testnet + + + + + + + + Log level + + + + + + + + Default + + + + + Info + + + + + Debug + + + + + + + + RPC port + + + + + + + P2P port + + + + + + + RPC bind IP + + + + + + + 127.0.0.1 + + + + + + + P2P bind IP + + + + + + + 127.0.0.1 + + + + + + + 18081 + + + + + + + 18082 + + + + + + + + + No ZeroMQ + + + true + + + + + + + Startup flags + + + + + + + + + + + + Qt::Vertical + + + + 20 + 81 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Configurator + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Configurator + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/DaemonManager.cpp b/src/DaemonManager.cpp new file mode 100644 index 0000000..e9b13ab --- /dev/null +++ b/src/DaemonManager.cpp @@ -0,0 +1,240 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2014-2021, The Monero Project. + +#include "DaemonManager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +bool DaemonManager::start(const QStringList &flags, int port) +{ + if (!QFileInfo(m_monerod).isFile()) + { + emit daemonStartFailure("\"" + QDir::toNativeSeparators(m_monerod) + "\" " + tr("executable is missing")); + return false; + } + + m_port = port; + + // prepare command line arguments and pass to monerod + QStringList arguments = flags; + + arguments << "--check-updates" << "disabled"; + + qDebug() << "starting monerod " + m_monerod; + qDebug() << "With command line arguments " << arguments; + + QMutexLocker locker(&m_daemonMutex); + + m_daemon.reset(new QProcess()); + + // Connect output slots + connect(m_daemon.get(), &QProcess::readyReadStandardOutput, this, &DaemonManager::printOutput); + connect(m_daemon.get(), &QProcess::readyReadStandardError, this, &DaemonManager::printError); + + // add state changed listener + connect(m_daemon.get(), &QProcess::stateChanged, this, &DaemonManager::stateChanged); + + // Start monerod + m_daemon->start(m_monerod, arguments); + + // Start start watcher + m_scheduler.run([this] { + if (startWatcher()) { + emit daemonStarted(); + } + }); + + return true; +} + +void DaemonManager::stop() +{ + m_daemon->terminate(); + m_scheduler.run([this]{ + stopWatcher(); + }); +} + +bool DaemonManager::isRunning() const { + return m_running; +} + +bool DaemonManager::startWatcher() +{ + // Check if daemon is started every 2 seconds + QElapsedTimer timer; + timer.start(); + while(!m_app_exit && m_running) { + QThread::sleep(2); + if(!started()) { + qDebug() << "daemon not running. checking again in 2 seconds."; + } else { + qDebug() << "daemon is started. Waiting 5 seconds to let daemon catch up"; + return true; + } + } + return false; +} + +bool DaemonManager::stopWatcher() +{ + // Check if daemon is running every 2 seconds. Kill if still running after 10 seconds + int counter = 0; + while(!m_app_exit && !m_running) { + QThread::sleep(2); + counter++; + if(!started()) { + return true; + } else { + qDebug() << "Daemon still running. " << counter; + if(counter >= 5) { + m_daemon->kill(); + } + } + } + return false; +} + + +void DaemonManager::stateChanged(QProcess::ProcessState state) +{ + qDebug() << "STATE CHANGED: " << state; + m_running = (state != QProcess::NotRunning); + if (state == QProcess::NotRunning) { + emit daemonStopped(); + } +} + +void DaemonManager::printOutput() +{ + QByteArray byteArray = [this]() { + QMutexLocker locker(&m_daemonMutex); + return m_daemon->readAllStandardOutput(); + }(); + QStringList strLines = QString(byteArray).split("\n"); + + for (const auto& line: strLines) { + emit daemonConsoleUpdated(line); + } +} + +void DaemonManager::printError() +{ + QByteArray byteArray = [this]() { + QMutexLocker locker(&m_daemonMutex); + return m_daemon->readAllStandardError(); + }(); + QStringList strLines = QString(byteArray).split("\n"); + + for (const auto& line: strLines) { + emit daemonConsoleUpdated(line); + qDebug() << "Daemon ERROR: " + line; + } +} + +bool DaemonManager::started() +{ + QString status; + sendCommand({"sync_info"}, status); + qDebug() << status; + m_started = status.contains("Height:"); + return m_started; +} + +bool DaemonManager::sendCommand(const QStringList &cmd, QString &message) const +{ + QProcess p; + QStringList external_cmd(cmd); + + external_cmd << "--rpc-bind-port" << QString::number(m_port); + + qDebug() << "sending external cmd: " << external_cmd; + + p.start(m_monerod, external_cmd); + + bool started = p.waitForFinished(-1); + message = p.readAllStandardOutput(); + emit daemonConsoleUpdated(message); + return started; +} + +void DaemonManager::sendCommandAsync(const QStringList &cmd, std::function callback) const +{ + m_scheduler.run([this, cmd] { + QString message; + return QVariantList({sendCommand(cmd, message), message}); + }, std::move(callback)); +} + +void DaemonManager::exit() +{ + qDebug("DaemonManager: exit()"); + m_app_exit = true; +} +// +//QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const +//{ +// QVariantMap result; +// bool valid = true; +// bool readOnly = false; +// int storageAvailable = 0; +// bool lmdbExists = true; +// +// QStorageInfo storage(dataDir); +// if (storage.isValid() && storage.isReady()) { +// if (storage.isReadOnly()) { +// readOnly = true; +// valid = false; +// } +// +// // Make sure there is 75GB storage available +// storageAvailable = storage.bytesAvailable()/1000/1000/1000; +// if (storageAvailable < 75) { +// valid = false; +// } +// } else { +// valid = false; +// } +// +// +// if (!QDir(dataDir+"/lmdb").exists()) { +// lmdbExists = false; +// valid = false; +// } +// +// result.insert("valid", valid); +// result.insert("lmdbExists", lmdbExists); +// result.insert("readOnly", readOnly); +// result.insert("storageAvailable", storageAvailable); +// +// return result; +//} + +void DaemonManager::setMonerodPath(const QString &path) { + m_monerod = path; +} + +DaemonManager::DaemonManager(QObject *parent) + : QObject(parent) + , m_scheduler(this) +{ +} + +DaemonManager::~DaemonManager() +{ + m_scheduler.shutdownWaitForFinished(); +} diff --git a/src/DaemonManager.h b/src/DaemonManager.h new file mode 100644 index 0000000..6e66137 --- /dev/null +++ b/src/DaemonManager.h @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2014-2021, The Monero Project. + +#ifndef DAEMONMANAGER_H +#define DAEMONMANAGER_H + +#include + +#include +#include +#include +#include +#include +#include "FutureScheduler.h" + +class DaemonManager : public QObject +{ +Q_OBJECT + +public: + explicit DaemonManager(QObject *parent = nullptr); + ~DaemonManager() override; + + bool start(const QStringList &flags, int port); + void stop(); + + void sendCommandAsync(const QStringList &cmd, std::function callback) const; + void exit(); +// QVariantMap validateDataDir(const QString &dataDir) const; + + void setMonerodPath(const QString &path); + bool isRunning() const; + +private: + bool started(); + bool sendCommand(const QStringList &cmd, QString &message) const; + bool startWatcher(); + bool stopWatcher(); + +signals: + void daemonStarted() const; + void daemonStopped() const; + void daemonStartFailure(const QString &error) const; + void daemonConsoleUpdated(QString message) const; + +public slots: + void printOutput(); + void printError(); + void stateChanged(QProcess::ProcessState state); + +private: + std::unique_ptr m_daemon; + QMutex m_daemonMutex; + QString m_monerod; + + bool m_running = false; + bool m_started = false; + bool m_app_exit = false; + int m_port; + + mutable FutureScheduler m_scheduler; +}; + +#endif // DAEMONMANAGER_H diff --git a/src/FutureScheduler.cpp b/src/FutureScheduler.cpp new file mode 100644 index 0000000..cb936ee --- /dev/null +++ b/src/FutureScheduler.cpp @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2014-2021, The Monero Project. + +#include "FutureScheduler.h" + +FutureScheduler::FutureScheduler(QObject *parent) + : QObject(parent), Alive(0), Stopping(false) +{ + static std::once_flag once; + std::call_once(once, []() { + QThreadPool::globalInstance()->setMaxThreadCount(4); + }); +} + +FutureScheduler::~FutureScheduler() +{ + shutdownWaitForFinished(); +} + +void FutureScheduler::shutdownWaitForFinished() noexcept +{ + QMutexLocker locker(&Mutex); + + Stopping = true; + while (Alive > 0) + { + Condition.wait(&Mutex); + } +} + +QPair> FutureScheduler::run(std::function function) noexcept +{ + return execute([this, function](QFutureWatcher *) { + return QtConcurrent::run([this, function] { + try + { + function(); + } + catch (const std::exception &exception) + { + qWarning() << "Exception thrown from async function: " << exception.what(); + } + done(); + }); + }); +} + +QPair> FutureScheduler::run(std::function function, const std::function callback) +{ + return execute([this, function, callback](QFutureWatcher *watcher) { + connect(watcher, &QFutureWatcher::finished, [watcher, callback] { + callback(watcher->future().result()); + }); + return QtConcurrent::run([this, function] { + QVariantList result; + try + { + result = function(); + } + catch (const std::exception &exception) + { + qWarning() << "Exception thrown from async function: " << exception.what(); + } + done(); + return result; + }); + }); +} + +bool FutureScheduler::stopping() const noexcept +{ + return Stopping; +} + +bool FutureScheduler::add() noexcept +{ + QMutexLocker locker(&Mutex); + + if (Stopping) + { + return false; + } + + ++Alive; + return true; +} + +void FutureScheduler::done() noexcept +{ + { + QMutexLocker locker(&Mutex); + --Alive; + } + + Condition.wakeAll(); +} diff --git a/src/FutureScheduler.h b/src/FutureScheduler.h new file mode 100644 index 0000000..3e081ba --- /dev/null +++ b/src/FutureScheduler.h @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2014-2021, The Monero Project. + +#ifndef FUTURE_SCHEDULER_H +#define FUTURE_SCHEDULER_H + +#include + +#include +#include +#include +#include +#include +#include + +class FutureScheduler : public QObject +{ +Q_OBJECT + +public: + FutureScheduler(QObject *parent); + ~FutureScheduler(); + + void shutdownWaitForFinished() noexcept; + + QPair> run(std::function function) noexcept; + QPair> run(std::function function, const std::function callback); + bool stopping() const noexcept; + +private: + bool add() noexcept; + void done() noexcept; + + template + QPair> execute(std::function(QFutureWatcher *)> makeFuture) noexcept + { + if (add()) + { + try + { + auto *watcher = new QFutureWatcher(); + connect(watcher, &QFutureWatcher::finished, [watcher] { + watcher->deleteLater(); + }); + watcher->setFuture(makeFuture(watcher)); + return qMakePair(true, watcher->future()); + } + catch (const std::exception &exception) + { + qCritical() << "Failed to schedule async function: " << exception.what(); + done(); + } + } + + return qMakePair(false, QFuture()); + } + + QFutureWatcher schedule(std::function function); + +private: + size_t Alive; + QWaitCondition Condition; + QMutex Mutex; + std::atomic Stopping; +}; + +#endif // FUTURE_SCHEDULER_H diff --git a/src/assets.qrc b/src/assets.qrc new file mode 100644 index 0000000..486939a --- /dev/null +++ b/src/assets.qrc @@ -0,0 +1,5 @@ + + + assets/monero_grey.png + + diff --git a/src/assets/monero_grey.png b/src/assets/monero_grey.png new file mode 100755 index 0000000..5006367 Binary files /dev/null and b/src/assets/monero_grey.png differ diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..14cab98 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2021, The Monero Project. + +#include "mainwindow.h" +#include +#include + +int main(int argc, char *argv[]) +{ + Q_INIT_RESOURCE(assets); + + QApplication a(argc, argv); + + QApplication::setApplicationName("moneroservice"); + QApplication::setOrganizationName("monero"); + + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp new file mode 100644 index 0000000..75fcf1d --- /dev/null +++ b/src/mainwindow.cpp @@ -0,0 +1,233 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2021, The Monero Project. + +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "Configurator.h" +#include "Config.h" + +#include +#include + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + + this->setWindowIcon(QIcon(":/assets/monero_grey.png")); + + // Setup tray + m_trayIcon = new QSystemTrayIcon(QIcon(":/assets/monero_grey.png")); + m_trayIcon->show(); + m_showWindow = m_trayMenu.addAction("Show window"); + m_trayIcon->setContextMenu(&m_trayMenu); + + // Daemon manager + daemonManager = new DaemonManager(this); + + QString monerodPath = config()->get(Config::pathToMonerod).toString(); + if (monerodPath.isEmpty()) { + monerodPath = this->defaultMonerodPath(); + } + config()->set(Config::pathToMonerod, monerodPath); + daemonManager->setMonerodPath(monerodPath); + connect(daemonManager, &DaemonManager::daemonConsoleUpdated, this, &MainWindow::writeLogLine); + + connect(m_showWindow, &QAction::triggered, [this]{ + this->show(); + this->raise(); + this->setFocus(); + }); + + connect(ui->btn_Configure, &QPushButton::clicked, this, &MainWindow::showConfigurator); + connect(ui->commandPrompt, &CommandLineEdit::commandExecuted, this, &MainWindow::sendCommand); + + this->setStatus("not running"); + connect(ui->btn_ToggleDaemon, &QPushButton::pressed, [this]{ + if (daemonManager->isRunning()) { + this->setStatus("stopping"); + daemonManager->stop(); + } else { + QStringList flags = this->getStartupFlags(); + this->setStatus("starting"); + ui->btn_ToggleDaemon->setEnabled(false); + daemonManager->start(flags, this->getPort()); + } + }); + connect(daemonManager, &DaemonManager::daemonStarted, [this]{ + this->setStatus("running"); + ui->btn_ToggleDaemon->setEnabled(true); + ui->btn_ToggleDaemon->setText("Stop daemon"); + }); + connect(daemonManager, &DaemonManager::daemonStopped, [this]{ + this->setStatus("stopped"); + ui->btn_ToggleDaemon->setText("Start daemon"); + }); + +// qApp->setStyleSheet(this->loadStylesheet(":/qdarkstyle/style.qss")); + + this->adjustSize(); +// showMinimized(); +} + +void MainWindow::writeLogLine(const QString &line) { + auto l = line.trimmed(); + if (!l.isEmpty()) { + ui->logs->append(l); + } +} + +void MainWindow::changeEvent(QEvent* e) +{ + switch (e->type()) + { + case QEvent::WindowStateChange: + { + if (this->windowState() & Qt::WindowMinimized) + { + QTimer::singleShot(250, this, SLOT(hide())); + } + break; + } + default: + break; + } + + QMainWindow::changeEvent(e); +} + +void MainWindow::sendCommand(const QStringList &command) { + daemonManager->sendCommandAsync(command, [](const QVariantList& l){ + bool success = l[0].toBool(); + QString message = l[1].toString(); + + qDebug() << QString("Command executed: %1, with message: %2").arg(success ? "Success" : "Fail", message); + }); +} + +void MainWindow::showConfigurator() { + auto *dialog = new Configurator(this); + dialog->exec(); + if (dialog->configUpdated()) { + this->askRestartMonerod(); + } + dialog->deleteLater(); +} + +void MainWindow::askRestartMonerod() { + QMessageBox::information(this, "Config Updated", "The config has been altered, do you want to restart monerod now?"); +} + +void MainWindow::setStatus(const QString &status) { + ui->labelStatus->setText(QString("Daemon status: %1").arg(status)); +} + +int MainWindow::getPort() { + int RPCBindPort = config()->get(Config::RPCBindPort).toInt(); + if (RPCBindPort) { + return RPCBindPort; + } + + switch (config()->get(Config::network).toInt()) { + case 0: + return 18081; + case 1: + return 38081; + case 2: + return 28081; + } + return 18081; +} + +QStringList MainWindow::getStartupFlags() { + QStringList startupFlags; + + if (config()->get(Config::pruneBlockchain).toBool()) { + startupFlags << "--prune-blockchain"; + } + + QString dataDir = config()->get(Config::dataDir).toString(); + if (!dataDir.isEmpty()) { + // Todo: check if dir exists + startupFlags << "--data-dir" << dataDir; + } + + int limitRateDown = config()->get(Config::limitRateDown).toInt(); + if (limitRateDown > 0) { + startupFlags << "--limit-rate-down" << QString::number(limitRateDown); + } + + switch (config()->get(Config::network).toInt()) { + case 1: + startupFlags << "--stagenet"; + break; + case 2: + startupFlags << "--testnet"; + break; + default: + break; + } + + if (config()->get(Config::noZeroMQ).toBool()) { + startupFlags << "--no-zmq"; + } + + QString RPCBindIP = config()->get(Config::RPCBindIP).toString(); + if (!RPCBindIP.isEmpty()) { + startupFlags << "--rpc-bind-ip" << RPCBindIP; + } + int RPCBindPort = config()->get(Config::RPCBindPort).toInt(); + if (RPCBindPort > 0) { + startupFlags << "--rpc-bind-port" << QString::number(RPCBindPort); + } + + QString P2PBindIP = config()->get(Config::P2PBindIP).toString(); + if (!RPCBindIP.isEmpty()) { + startupFlags << "--p2p-bind-ip" << P2PBindIP; + } + int P2PBindPort = config()->get(Config::P2PBindPort).toInt(); + if (RPCBindPort > 0) { + startupFlags << "--p2p-bind-port" << QString::number(P2PBindPort); + } + + return startupFlags; +} + +QString MainWindow::defaultMonerodPath() { + QString monerod; + + // Platform dependent path to monerod +#ifdef Q_OS_WIN + monerod = QApplication::applicationDirPath() + "/monerod.exe"; +#elif defined(Q_OS_UNIX) + monerod = QApplication::applicationDirPath() + "/monerod"; +#endif + + if (monerod.length() == 0) { + qCritical() << "no daemon binary defined for current platform"; + } + + return monerod; +} + +QString MainWindow::loadStylesheet(const QString &resource) { + QFile f(resource); + if (!f.exists()) { + printf("Unable to set stylesheet, file not found\n"); + f.close(); + return ""; + } + + f.open(QFile::ReadOnly | QFile::Text); + QTextStream ts(&f); + QString data = ts.readAll(); + f.close(); + + return data; +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/src/mainwindow.h b/src/mainwindow.h new file mode 100644 index 0000000..ba05462 --- /dev/null +++ b/src/mainwindow.h @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2021, The Monero Project. + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include + +#include "DaemonManager.h" + +namespace Ui { + class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = nullptr); + ~MainWindow() override; + +private: + void writeLogLine(const QString &line); + void changeEvent(QEvent *e) override; + void showConfigurator(); + void sendCommand(const QStringList &command); + void askRestartMonerod(); + void setStatus(const QString &status); + QStringList getStartupFlags(); + int getPort(); + QString defaultMonerodPath(); + QString loadStylesheet(const QString &resource); + + Ui::MainWindow *ui; + + QSystemTrayIcon *m_trayIcon; + QMenu m_trayMenu; + QAction *m_stopDaemon; + QAction *m_showWindow; + + + + + DaemonManager *daemonManager; +}; + +#endif // MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui new file mode 100644 index 0000000..a0befd1 --- /dev/null +++ b/src/mainwindow.ui @@ -0,0 +1,109 @@ + + + MainWindow + + + + 0 + 0 + 828 + 724 + + + + + 750 + 650 + + + + Monero Daemon Service + + + + + + + 0 + + + + + true + + + Logs are empty + + + + + + + + + + 75 + true + + + + Enter command + + + + + + + + + + + + + status + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Start daemon + + + + + + + Configure + + + + + + + + + + + + CommandLineEdit + QLineEdit +
CommandLineEdit.h
+
+
+ + +
diff --git a/src/ui/BreezeStyleSheets/breeze.qrc b/src/ui/BreezeStyleSheets/breeze.qrc new file mode 100644 index 0000000..88fb185 --- /dev/null +++ b/src/ui/BreezeStyleSheets/breeze.qrc @@ -0,0 +1,89 @@ + + + light/hmovetoolbar.svg + light/vmovetoolbar.svg + light/hsepartoolbar.svg + light/vsepartoolbars.svg + light/stylesheet-branch-end.svg + light/stylesheet-branch-end-closed.svg + light/stylesheet-branch-end-open.svg + light/stylesheet-vline.svg + light/stylesheet-branch-more.svg + light/branch_closed.svg + light/branch_closed-on.svg + light/branch_open.svg + light/branch_open-on.svg + light/down_arrow.svg + light/down_arrow_disabled.svg + light/down_arrow-hover.svg + light/left_arrow.svg + light/left_arrow_disabled.svg + light/right_arrow.svg + light/right_arrow_disabled.svg + light/up_arrow.svg + light/up_arrow_disabled.svg + light/up_arrow-hover.svg + light/sizegrip.svg + light/transparent.svg + light/close.svg + light/close-hover.svg + light/close-pressed.svg + light/undock.svg + light/undock-hover.svg + light/checkbox_checked-hover.svg + light/checkbox_checked.svg + light/checkbox_checked_disabled.svg + light/checkbox_indeterminate.svg + light/checkbox_indeterminate-hover.svg + light/checkbox_indeterminate_disabled.svg + light/checkbox_unchecked-hover.svg + light/checkbox_unchecked_disabled.svg + light/radio_checked-hover.svg + light/radio_checked.svg + light/radio_checked_disabled.svg + light/radio_unchecked-hover.svg + light/radio_unchecked_disabled.svg + dark/hmovetoolbar.svg + dark/vmovetoolbar.svg + dark/hsepartoolbar.svg + dark/vsepartoolbars.svg + dark/stylesheet-branch-end.svg + dark/stylesheet-branch-end-closed.svg + dark/stylesheet-branch-end-open.svg + dark/stylesheet-vline.svg + dark/stylesheet-branch-more.svg + dark/branch_closed.svg + dark/branch_closed-on.svg + dark/branch_open.svg + dark/branch_open-on.svg + dark/down_arrow.svg + dark/down_arrow_disabled.svg + dark/down_arrow-hover.svg + dark/left_arrow.svg + dark/left_arrow_disabled.svg + dark/right_arrow.svg + dark/right_arrow_disabled.svg + dark/up_arrow.svg + dark/up_arrow_disabled.svg + dark/up_arrow-hover.svg + dark/sizegrip.svg + dark/transparent.svg + dark/close.svg + dark/close-hover.svg + dark/close-pressed.svg + dark/undock.svg + dark/undock-hover.svg + dark/checkbox_checked.svg + dark/checkbox_checked_disabled.svg + dark/checkbox_indeterminate.svg + dark/checkbox_indeterminate_disabled.svg + dark/checkbox_unchecked.svg + dark/checkbox_unchecked_disabled.svg + dark/radio_checked.svg + dark/radio_checked_disabled.svg + dark/radio_unchecked.svg + dark/radio_unchecked_disabled.svg + light.qss + dark.qss + + diff --git a/src/ui/BreezeStyleSheets/dark.qss b/src/ui/BreezeStyleSheets/dark.qss new file mode 100644 index 0000000..6829099 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark.qss @@ -0,0 +1,1664 @@ +/* + * BreezeDark stylesheet. + * + * :author: Colin Duquesnoy + * :editor: Alex Huszagh + * :license: MIT, see LICENSE.md + * + * This is originally a fork of QDarkStyleSheet, and is based on Breeze/ + * BreezeDark color scheme, but is in no way affiliated with KDE. + * + * --------------------------------------------------------------------- + * The MIT License (MIT) + * + * Copyright (c) <2013-2014> + * Copyright (c) <2015-2016> + * + * 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: 0.1ex solid #eff0f1; + background-color: #31363b; + alternate-background-color: #3b4045; + color: #eff0f1; + padding: 0.5ex; + 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: #3daee9; + color: #eff0f1; +} + +QWidget::item:selected +{ + background-color: #3daee9; +} + + +QCheckBox +{ + spacing: 0.5ex; + outline: none; + color: #eff0f1; + margin-bottom: 0.2ex; + opacity: 200; +} + +QCheckBox:disabled +{ + color: #76797c; +} + +QGroupBox::indicator +{ + margin-left: 0.2ex; +} + +QCheckBox::indicator:unchecked, +QCheckBox::indicator:unchecked:focus +{ + border-image: url(:/dark/checkbox_unchecked_disabled.svg); +} + +QCheckBox::indicator:unchecked:hover, +QCheckBox::indicator:unchecked:pressed, +QGroupBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:focus, +QGroupBox::indicator:unchecked:pressed +{ + border: none; + border-image: url(:/dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:checked +{ + border-image: url(:/dark/checkbox_checked.svg); +} + +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; + border-image: url(:/dark/checkbox_checked.svg); +} + +QCheckBox::indicator:indeterminate +{ + border-image: url(:/dark/checkbox_indeterminate.svg); +} + +QCheckBox::indicator:indeterminate:focus, +QCheckBox::indicator:indeterminate:hover, +QCheckBox::indicator:indeterminate:pressed +{ + border-image: url(:/dark/checkbox_indeterminate.svg); +} + +QCheckBox::indicator:indeterminate:disabled +{ + border-image: url(:/dark/checkbox_indeterminate_disabled.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled +{ + border-image: url(:/dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled +{ + border-image: url(:/dark/checkbox_unchecked_disabled.svg); +} + +QRadioButton +{ + spacing: 0.5ex; + outline: none; + color: #eff0f1; + margin-bottom: 0.2ex; +} + +QRadioButton:disabled +{ + color: #76797c; +} + +QRadioButton::indicator:unchecked, +QRadioButton::indicator:unchecked:focus +{ + border-image: url(:/dark/radio_unchecked_disabled.svg); +} + + +QRadioButton::indicator:unchecked:hover, +QRadioButton::indicator:unchecked:pressed +{ + border: none; + outline: none; + border-image: url(:/dark/radio_unchecked.svg); +} + + +QRadioButton::indicator:checked +{ + border: none; + outline: none; + border-image: url(:/dark/radio_checked.svg); +} + +QRadioButton::indicator:checked:hover, +QRadioButton::indicator:checked:focus, +QRadioButton::indicator:checked:pressed +{ + border: none; + outline: none; + border-image: url(:/dark/radio_checked.svg); +} + +QRadioButton::indicator:checked:disabled +{ + outline: none; + border-image: url(:/dark/radio_checked_disabled.svg); +} + +QRadioButton::indicator:unchecked:disabled +{ + border-image: url(:/dark/radio_unchecked_disabled.svg); +} + +QMenuBar +{ + background-color: #31363b; + color: #eff0f1; +} + +QMenuBar::item +{ + background: transparent; +} + +QMenuBar::item:selected +{ + background: transparent; + border: 0.1ex solid #76797c; +} + +QMenuBar::item:pressed +{ + border: 0.1ex solid #76797c; + background-color: #3daee9; + color: #eff0f1; + margin-bottom: -0.1ex; + padding-bottom: 0.1ex; +} + +QMenu +{ + border: 0.1ex solid #76797c; + color: #eff0f1; + margin: 0.2ex; +} + +QMenu::icon +{ + margin: 0.5ex; +} + +QMenu::item +{ + padding: 0.5ex 3ex 0.5ex 3ex; + margin-left: 0.5ex; + border: 0.1ex solid transparent; /* reserve space for selection border */ +} + +QMenu::item:selected +{ + color: #eff0f1; +} + +QMenu::separator +{ + height: 0.2ex; + background: lightblue; + margin-left: 1ex; + margin-right: 0.5ex; +} + +/* non-exclusive indicator = check box style indicator + (see QActionGroup::setExclusive) */ +QMenu::indicator:non-exclusive:unchecked +{ + border-image: url(:/dark/checkbox_unchecked_disabled.svg); +} + +QMenu::indicator:non-exclusive:unchecked:selected +{ + border-image: url(:/dark/checkbox_unchecked_disabled.svg); +} + +QMenu::indicator:non-exclusive:checked +{ + border-image: url(:/dark/checkbox_checked.svg); +} + +QMenu::indicator:non-exclusive:checked:selected +{ + border-image: url(:/dark/checkbox_checked.svg); +} + +/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */ +QMenu::indicator:exclusive:unchecked +{ + border-image: url(:/dark/radio_unchecked_disabled.svg); +} + +QMenu::indicator:exclusive:unchecked:selected +{ + border-image: url(:/dark/radio_unchecked_disabled.svg); +} + +QMenu::indicator:exclusive:checked +{ + border-image: url(:/dark/radio_checked.svg); +} + +QMenu::indicator:exclusive:checked:selected +{ + border-image: url(:/dark/radio_checked.svg); +} + +QMenu::right-arrow +{ + margin: 0.5ex; + border-image: url(:/light/right_arrow.svg); + width: 0.6ex; + height: 0.9ex; +} + + +QWidget:disabled +{ + color: #454545; + background-color: #31363b; +} + +QAbstractItemView +{ + alternate-background-color: #31363b; + color: #eff0f1; + border: 0.1ex solid 3A3939; + border-radius: 0.2ex; +} + +QWidget:focus, +QMenuBar:focus +{ + border: 0.1ex solid #3daee9; +} + +QTabWidget:focus, +QCheckBox:focus, +QRadioButton:focus, +QSlider:focus +{ + border: none; +} + +QLineEdit +{ + background-color: #232629; + padding: 0.5ex; + border-style: solid; + border: 0.1ex solid #76797c; + border-radius: 0.2ex; + color: #eff0f1; +} + +QGroupBox +{ + border: 0.1ex solid #76797c; + border-radius: 0.2ex; + padding-top: 1ex; + margin-top: 1ex; +} + +QGroupBox::title +{ + subcontrol-origin: margin; + subcontrol-position: top center; + padding-left: 0.1ex; + padding-right: 0.1ex; + margin-top: -0.7ex; +} + +QAbstractScrollArea +{ + border-radius: 0.2ex; + border: 0.1ex solid #76797c; + background-color: transparent; +} + +QScrollBar:horizontal +{ + height: 1.5ex; + margin: 0.3ex 1.5ex 0.3ex 1.5ex; + border: 0.1ex transparent #2A2929; + border-radius: 0.4ex; + background-color: #2A2929; +} + +QScrollBar::handle:horizontal +{ + background-color: #3daee9; + min-width: 0.5ex; + border-radius: 0.4ex; +} + +QScrollBar::add-line:horizontal +{ + margin: 0px 0.3ex 0px 0.3ex; + border-image: url(:/dark/right_arrow_disabled.svg); + width: 1ex; + height: 1ex; + subcontrol-position: right; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:horizontal +{ + margin: 0ex 0.3ex 0ex 0.3ex; + border-image: url(:/dark/left_arrow_disabled.svg); + width: 1ex; + height: 1ex; + subcontrol-position: left; + subcontrol-origin: margin; +} + +QScrollBar::add-line:horizontal:hover, +QScrollBar::add-line:horizontal:on +{ + border-image: url(:/dark/right_arrow.svg); + width: 1ex; + height: 1ex; + subcontrol-position: right; + subcontrol-origin: margin; +} + + +QScrollBar::sub-line:horizontal:hover, +QScrollBar::sub-line:horizontal:on +{ + border-image: url(:/dark/left_arrow.svg); + width: 1ex; + height: 1ex; + 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: 1.5ex; + margin: 1.5ex 0.3ex 1.5ex 0.3ex; + border: 0.1ex transparent #2A2929; + border-radius: 0.4ex; +} + +QScrollBar::handle:vertical +{ + background-color: #3daee9; + min-height: 0.5ex; + border-radius: 0.4ex; +} + +QScrollBar::sub-line:vertical +{ + margin: 0.3ex 0ex 0.3ex 0ex; + border-image: url(:/dark/up_arrow_disabled.svg); + height: 1ex; + width: 1ex; + subcontrol-position: top; + subcontrol-origin: margin; +} + +QScrollBar::add-line:vertical +{ + margin: 0.3ex 0ex 0.3ex 0ex; + border-image: url(:/dark/down_arrow_disabled.svg); + height: 1ex; + width: 1ex; + subcontrol-position: bottom; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:vertical:hover, +QScrollBar::sub-line:vertical:on +{ + + border-image: url(:/dark/up_arrow.svg); + height: 1ex; + width: 1ex; + subcontrol-position: top; + subcontrol-origin: margin; +} + + +QScrollBar::add-line:vertical:hover, +QScrollBar::add-line:vertical:on +{ + border-image: url(:/dark/down_arrow.svg); + height: 1ex; + width: 1ex; + 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: 0.1ex solid #76797c; +} + +QPlainTextEdit +{ + background-color: #232629; + color: #eff0f1; + border-radius: 0.2ex; + border: 0.1ex solid #76797c; +} + +QHeaderView::section +{ + background-color: #76797c; + color: #eff0f1; + padding: 0.5ex; + border: 0.1ex solid #76797c; +} + +QSizeGrip +{ + border-image: url(:/dark/sizegrip.svg); + width: 1.2ex; + height: 1.2ex; +} + +QMainWindow::separator +{ + background-color: #31363b; + color: white; + padding-left: 0.4ex; + spacing: 0.2ex; + border: 0.1ex dashed #76797c; +} + +QMainWindow::separator:hover +{ + + background-color: #787876; + color: white; + padding-left: 0.4ex; + border: 0.1ex solid #76797c; + spacing: 0.2ex; +} + +QMenu::separator +{ + height: 0.1ex; + background-color: #76797c; + color: white; + padding-left: 0.4ex; + margin-left: 1ex; + margin-right: 0.5ex; +} + +QFrame[frameShape="2"], /* QFrame::Panel == 0x0003 */ +QFrame[frameShape="3"], /* QFrame::WinPanel == 0x0003 */ +QFrame[frameShape="4"], /* QFrame::HLine == 0x0004 */ +QFrame[frameShape="5"], /* QFrame::VLine == 0x0005 */ +QFrame[frameShape="6"] /* QFrame::StyledPanel == 0x0006 */ +{ + border-width: 0.1ex; + padding: 0.1ex; + border-style: solid; + border-color: #31363b; + background-color: #76797c; + border-radius: 0.5ex; +} + +QStackedWidget +{ + border: 0.1ex transparent black; +} + +QToolBar +{ + border: 0.1ex transparent #393838; + background: 0.1ex solid #31363b; + font-weight: bold; +} + +QToolBar::handle:horizontal +{ + border-image: url(:/dark/hmovetoolbar.svg); + width = 1.6ex; + height = 6.4ex; +} + +QToolBar::handle:vertical +{ + border-image: url(:/dark/vmovetoolbar.svg); + width = 5.4ex; + height = 1ex; +} + +QToolBar::separator:horizontal +{ + border-image: url(:/dark/hsepartoolbar.svg); + width = 0.7ex; + height = 6.3ex; +} + +QToolBar::separator:vertical +{ + border-image: url(:/dark/vsepartoolbars.svg); + width = 6.3ex; + height = 0.7ex; +} + +QPushButton +{ + color: #eff0f1; + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #3b4045, stop: 0.5 #31363b); + border-width: 0.1ex; + border-color: #76797c; + border-style: solid; + padding: 0.5ex; + border-radius: 0.2ex; + outline: none; +} + +QPushButton:disabled +{ + background-color: #31363b; + border-width: 0.1ex; + border-color: #454545; + border-style: solid; + padding-top: 0.5ex; + padding-bottom: 0.5ex; + padding-left: 1ex; + padding-right: 1ex; + border-radius: 0.2ex; + color: #454545; +} + +QPushButton:focus +{ + color: white; +} + +QPushButton:pressed +{ + background-color: #31363b; + padding-top: -1.5ex; + padding-bottom: -1.7ex; +} + +QComboBox +{ + selection-background-color: #3daee9; + border-style: solid; + border: 0.1ex solid #76797c; + border-radius: 0.2ex; + padding: 0.5ex; + min-width: 7.5ex; +} + +QPushButton:checked +{ + background-color: #76797c; + border-color: #6A6969; +} + +QPushButton:hover +{ + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #454a4f, stop: 0.5 #3b4045); + border: 0.1ex solid #3daee9; + color: #eff0f1; +} + +QPushButton:checked:hover +{ + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #808386, stop: 0.5 #76797c); + border: 0.1ex solid #3daee9; + color: #eff0f1; +} + +QComboBox:hover, +QAbstractSpinBox:hover, +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover, +QAbstractView:hover, +QTreeView:hover +{ + border: 0.1ex solid #3daee9; + color: #eff0f1; +} + +QComboBox:hover:pressed, +QPushButton:hover:pressed, +QAbstractSpinBox:hover:pressed, +QLineEdit:hover:pressed, +QTextEdit:hover:pressed, +QPlainTextEdit:hover:pressed, +QAbstractView:hover:pressed, +QTreeView:hover:pressed +{ + background-color: #31363b; +} + +QComboBox:on +{ + padding-top: 0.3ex; + padding-left: 0.4ex; + selection-background-color: #4a4a4a; +} + +QComboBox QAbstractItemView +{ + background-color: #232629; + border-radius: 0.2ex; + border: 0.1ex solid #76797c; + selection-background-color: #3daee9; +} + +QComboBox::drop-down +{ + subcontrol-origin: padding; + subcontrol-position: top right; + width: 1.5ex; + + border-left-width: 0ex; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 0.3ex; + border-bottom-right-radius: 0.3ex; +} + +QComboBox::down-arrow +{ + border-image: url(:/dark/down_arrow_disabled.svg); + width: 0.9ex; + height: 0.6ex; +} + +QComboBox::down-arrow:on, +QComboBox::down-arrow:hover, +QComboBox::down-arrow:focus +{ + border-image: url(:/dark/down_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox +{ + padding: 0.5ex; + border: 0.1ex solid #76797c; + background-color: #232629; + color: #eff0f1; + border-radius: 0.2ex; + min-width: 7.5ex; +} + +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 +{ + border-image: url(:/dark/up_arrow_disabled.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox::up-arrow:hover +{ + border-image: url(:/dark/up_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox::down-arrow, +QAbstractSpinBox::down-arrow:disabled, +QAbstractSpinBox::down-arrow:off +{ + border-image: url(:/dark/down_arrow_disabled.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox::down-arrow:hover +{ + border-image: url(:/dark/down_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QLabel +{ + border: 0ex solid black; +} + +/* BORDERS */ +QTabWidget::pane +{ + padding: 0.5ex; + margin: 0.1ex; +} + +QTabWidget::pane:top +{ + border: 0.1ex solid #76797c; + top: -0.1ex; +} + +QTabWidget::pane:bottom +{ + border: 0.1ex solid #76797c; + bottom: -0.1ex; +} + +QTabWidget::pane:left +{ + border: 0.1ex solid #76797c; + right: -0.1ex; +} + +QTabWidget::pane:right +{ + border: 0.1ex solid #76797c; + left: -0.1ex; +} + + +QTabBar +{ + qproperty-drawBase: 0; + left: 0.5ex; /* move to the right by 0.5ex */ + border-radius: 0.3ex; +} + +QTabBar:focus +{ + border: 0ex transparent black; +} + +QTabBar::close-button +{ + border-image: url(:/dark/close.svg); + background: transparent; +} + +QTabBar::close-button:hover +{ + border-image: url(:/dark/close-hover.svg); + width: 1.2ex; + height: 1.2ex; + background: transparent; +} + +QTabBar::close-button:pressed +{ + border-image: url(:/dark/close-pressed.svg); + width: 1.2ex; + height: 1.2ex; + background: transparent; +} + +/* TOP TABS */ +QTabBar::tab:top +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-left: 0.1ex solid #76797c; + border-top: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + min-width: 50px; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:last, +QTabBar::tab:top:only-one +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-left: 0.1ex solid #76797c; + border-right: 0.1ex solid #76797c; + border-top: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + min-width: 50px; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 0.1ex transparent black; + border-left: 0.1ex solid #76797c; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:first:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 0.1ex transparent black; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); + border-left: 0.1ex solid #76797c; +} + +QTabBar::tab:top:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); +} + +/* BOTTOM TABS */ + +QTabBar::tab:bottom +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-left: 0.1ex solid #76797c; + border-bottom: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-width: 50px; +} + +QTabBar::tab:bottom:last, +QTabBar::tab:bottom:only-one +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-left: 0.1ex solid #76797c; + border-right: 0.1ex solid #76797c; + border-bottom: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-width: 50px; +} + +QTabBar::tab:bottom:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 0.1ex transparent black; + border-left: 0.1ex solid #76797c; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; +} + +QTabBar::tab:bottom:first:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 0.1ex transparent black; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:bottom:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); + border-left: 0.1ex solid #76797c; +} + +QTabBar::tab:bottom:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); +} + +/* LEFT TABS */ +QTabBar::tab:left +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-top: 0.1ex solid #76797c; + border-right: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + border-top-right-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-height: 50px; +} + +QTabBar::tab:left:last, +QTabBar::tab:left:only-one +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-top: 0.1ex solid #76797c; + border-bottom: 0.1ex solid #76797c; + border-right: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + border-top-right-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-height: 50px; +} + +QTabBar::tab:left:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #76797c; + border-top-right-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; +} + +QTabBar::tab:left:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); + border-top: 0.1ex solid #76797c; +} + +QTabBar::tab:left:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); +} + +/* RIGHT TABS */ +QTabBar::tab:right +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-top: 0.1ex solid #76797c; + border-left: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + border-top-left-radius: 0.2ex; + border-bottom-left-radius: 0.2ex; + min-height: 50px; +} + +QTabBar::tab:right:last, +QTabBar::tab:right:only-one +{ + color: #eff0f1; + border: 0.1ex transparent black; + border-top: 0.1ex solid #76797c; + border-bottom: 0.1ex solid #76797c; + border-left: 0.1ex solid #76797c; + background-color: #31363b; + padding: 0.5ex; + border-top-left-radius: 0.2ex; + border-bottom-left-radius: 0.2ex; + min-height: 50px; +} + +QTabBar::tab:right:!selected +{ + color: #eff0f1; + background-color: #54575B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #76797c; + border-top-left-radius: 0.2ex; + border-bottom-left-radius: 0.2ex; +} + +QTabBar::tab:right:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); + border-top: 0.1ex solid #76797c; +} + +QTabBar::tab:right:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.2); + border: 0.1ex rgba(61, 173, 232, 0.2); +} + +QTabBar QToolButton::right-arrow:enabled +{ + border-image: url(:/dark/right_arrow.svg); +} + +QTabBar QToolButton::left-arrow:enabled +{ + border-image: url(:/dark/left_arrow.svg); +} + +QTabBar QToolButton::right-arrow:disabled +{ + border-image: url(:/dark/right_arrow_disabled.svg); +} + +QTabBar QToolButton::left-arrow:disabled +{ + border-image: url(:/dark/left_arrow_disabled.svg); +} + +QDockWidget +{ + background: #31363b; + border: 0.1ex solid #403F3F; + titlebar-close-icon: url(:/dark/transparent.svg); + titlebar-normal-icon: url(:/dark/transparent.svg); +} + +QDockWidget::close-button, +QDockWidget::float-button +{ + border: 0.1ex solid transparent; + border-radius: 0.2ex; + background: transparent; +} + +QDockWidget::float-button +{ + border-image: url(:/dark/undock.svg); +} + +QDockWidget::float-button:hover +{ + border-image: url(:/dark/undock-hover.svg) ; +} + +QDockWidget::close-button +{ + border-image: url(:/dark/close.svg) ; +} + +QDockWidget::close-button:hover +{ + border-image: url(:/dark/close-hover.svg) ; +} + +QDockWidget::close-button:pressed +{ + border-image: url(:/dark/close-pressed.svg) ; +} + +QTreeView, +QListView +{ + border: 0.1ex solid #76797c; + background-color: #232629; +} + +QTreeView::branch:has-siblings:!adjoins-item +{ + border-image: url(:/dark/stylesheet-vline.svg) 0; +} + +QTreeView::branch:has-siblings:adjoins-item +{ + border-image: url(:/dark/stylesheet-branch-more.svg) 0; +} + +QTreeView::branch:!has-children:!has-siblings:adjoins-item +{ + border-image: url(:/dark/stylesheet-branch-end.svg) 0; +} + +QTreeView::branch:has-children:!has-siblings:closed, +QTreeView::branch:closed:has-children:has-siblings +{ + border-image: url(:/dark/stylesheet-branch-end-closed.svg) 0; + image: url(:/dark/branch_closed.svg); +} + +QTreeView::branch:open:has-children:!has-siblings, +QTreeView::branch:open:has-children:has-siblings +{ + border-image: url(:/dark/stylesheet-branch-end-open.svg) 0; + image: url(:/dark/branch_open.svg); +} + +/* +QTreeView::branch:has-siblings:!adjoins-item { + background: cyan; +} + +QTreeView::branch:has-siblings:adjoins-item { + background: red; +} + +QTreeView::branch:!has-children:!has-siblings:adjoins-item { + background: blue; +} + +QTreeView::branch:closed:has-children:has-siblings { + background: pink; +} + +QTreeView::branch:has-children:!has-siblings:closed { + background: gray; +} + +QTreeView::branch:open:has-children:has-siblings { + background: magenta; +} + +QTreeView::branch:open:has-children:!has-siblings { + background: green; +} +*/ + +QTableView::item, +QListView::item, +QTreeView::item +{ + padding: 0.3ex; +} + +QTableView::item:!selected:hover, +QListView::item:!selected:hover, +QTreeView::item:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.2); + outline: 0; + color: #eff0f1; + padding: 0.3ex; +} + + +QSlider::groove:horizontal +{ + border: 0.1ex solid #31363b; + height: 0.4ex; + background: #565a5e; + margin: 0ex; + border-radius: 0.2ex; +} + +QSlider::handle:horizontal +{ + background: #232629; + border: 0.1ex solid #626568; + width: 1.6ex; + height: 1.6ex; + margin: -0.8ex 0; + border-radius: 0.9ex; +} + +QSlider::groove:vertical +{ + border: 0.1ex solid #31363b; + width: 0.4ex; + background: #565a5e; + margin: 0ex; + border-radius: 0.3ex; +} + +QSlider::handle:vertical +{ + background: #232629; + border: 0.1ex solid #626568; + width: 1.6ex; + height: 1.6ex; + margin: 0 -0.8ex; + border-radius: 0.9ex; +} + +QSlider::handle:horizontal:hover, +QSlider::handle:horizontal:focus, +QSlider::handle:vertical:hover, +QSlider::handle:vertical:focus +{ + border: 0.1ex solid #3daee9; +} + +QSlider::sub-page:horizontal, +QSlider::add-page:vertical +{ + background: #3daee9; + border-radius: 0.3ex; +} + +QSlider::add-page:horizontal, +QSlider::sub-page:vertical +{ + background: #626568; + border-radius: 0.3ex; +} + +QToolButton +{ + background-color: transparent; + border: 0.1ex solid #76797c; + border-radius: 0.2ex; + margin: 0.3ex; + padding: 0.5ex; +} + +QToolButton[popupMode="1"] /* only for MenuButtonPopup */ +{ + padding-right: 2ex; /* make way for the popup button */ +} + +QToolButton[popupMode="2"] /* only for InstantPopup */ +{ + padding-right: 1ex; /* make way for the popup button */ +} + +QToolButton::menu-indicator +{ + border-image: none; + image: url(:/dark/down_arrow.svg); + top: -0.7ex; + left: -0.2ex; +} + +QToolButton::menu-arrow +{ + border-image: none; + image: url(:/dark/down_arrow.svg); +} + +QToolButton:hover, +QToolButton::menu-button:hover +{ + background-color: transparent; + border: 0.1ex solid #3daee9; +} + +QToolButton:checked, +QToolButton:pressed, +QToolButton::menu-button:pressed +{ + background-color: #3daee9; + border: 0.1ex solid #3daee9; + padding: 0.5ex; +} + +QToolButton::menu-button +{ + border: 0.1ex solid #76797c; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + /* 1ex width + 0.4ex for border + no text = 2ex allocated above */ + width: 1ex; + padding: 0.5ex; + outline: none; +} + +QToolButton::menu-arrow:open +{ + border: 0.1ex solid #76797c; +} + +QPushButton::menu-indicator +{ + subcontrol-origin: padding; + subcontrol-position: bottom right; + left: 0.8ex; +} + +QTableView +{ + border: 0.1ex solid #76797c; + gridline-color: #31363b; + background-color: #232629; +} + + +QTableView, +QHeaderView +{ + border-radius: 0px; +} + +QTableView::item:pressed, +QListView::item:pressed, +QTreeView::item:pressed +{ + background: #3daee9; + color: #eff0f1; +} + +QTableView::item:selected:active, +QTreeView::item:selected:active, +QListView::item:selected:active +{ + background: #3daee9; + color: #eff0f1; +} + +QListView::item:selected:hover, +QTreeView::item:selected:hover +{ + background-color: #47b8f3; + color: #eff0f1; +} + +QHeaderView +{ + background-color: #31363b; + border: 0.1ex transparent; + border-radius: 0px; + margin: 0px; + padding: 0px; + +} + +QHeaderView::section +{ + background-color: #31363b; + color: #eff0f1; + padding: 0.5ex; + border: 0.1ex solid #76797c; + border-radius: 0px; + text-align: center; +} + +QHeaderView::section::vertical::first, +QHeaderView::section::vertical::only-one +{ + border-top: 0.1ex solid #76797c; +} + +QHeaderView::section::vertical +{ + border-top: transparent; +} + +QHeaderView::section::horizontal::first, +QHeaderView::section::horizontal::only-one +{ + border-left: 0.1ex 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(:/dark/down_arrow.svg); +} + +QHeaderView::up-arrow +{ + image: url(:/dark/up_arrow.svg); +} + +QTableCornerButton::section +{ + background-color: #31363b; + border: 0.1ex transparent #76797c; + border-radius: 0px; +} + +QToolBox +{ + padding: 0.5ex; + border: 0.1ex transparent black; +} + +QToolBox:selected +{ + background-color: #31363b; + border-color: #3daee9; +} + +QToolBox:hover +{ + border-color: #3daee9; +} + +QStatusBar::item +{ + border: 0px transparent dark; +} + +QFrame[height="3"], +QFrame[width="3"] +{ + background-color: #76797c; +} + +QSplitter::handle +{ + border: 0.1ex dashed #76797c; +} + +QSplitter::handle:hover +{ + background-color: #787876; + border: 0.1ex solid #76797c; +} + +QSplitter::handle:horizontal +{ + width: 0.1ex; +} + +QSplitter::handle:vertical +{ + height: 0.1ex; +} + +QProgressBar:horizontal +{ + background-color: #626568; + border: 0.1ex solid #31363b; + border-radius: 0.3ex; + height: 0.5ex; + text-align: right; + margin-top: 0.5ex; + margin-bottom: 0.5ex; + margin-right: 5ex; + padding: 0px; +} + +QProgressBar::chunk:horizontal +{ + background-color: #3daee9; + border: 0.1ex transparent; + border-radius: 0.3ex; +} + +QSpinBox, +QDoubleSpinBox +{ + padding-right: 1.5ex; +} + +QSpinBox::up-button, +QDoubleSpinBox::up-button +{ + subcontrol-origin: content; + subcontrol-position: right top; + + width: 1.6ex; + border-width: 0.1ex; +} + +QSpinBox::up-arrow, +QDoubleSpinBox::up-arrow +{ + border-image: url(:/dark/up_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::up-arrow:hover, +QSpinBox::up-arrow:pressed, +QDoubleSpinBox::up-arrow:hover, +QDoubleSpinBox::up-arrow:pressed +{ + border-image: url(:/dark/up_arrow-hover.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::up-arrow:disabled, +QSpinBox::up-arrow:off, +QDoubleSpinBox::up-arrow:disabled, +QDoubleSpinBox::up-arrow:off +{ + border-image: url(:/dark/up_arrow_disabled.svg); +} + +QSpinBox::down-button, +QDoubleSpinBox::down-button +{ + subcontrol-origin: content; + subcontrol-position: right bottom; + + width: 1.6ex; + border-width: 0.1ex; +} + +QSpinBox::down-arrow, +QDoubleSpinBox::down-arrow +{ + border-image: url(:/dark/down_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::down-arrow:hover, +QSpinBox::down-arrow:pressed, +QDoubleSpinBox::down-arrow:hover, +QDoubleSpinBox::down-arrow:pressed +{ + border-image: url(:/dark/down_arrow-hover.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::down-arrow:disabled, +QSpinBox::down-arrow:off, +QDoubleSpinBox::down-arrow:disabled, +QDoubleSpinBox::down-arrow:off +{ + border-image: url(:/dark/down_arrow_disabled.svg); +} + +/* fixes */ + +QPushButton:flat { + background-color: transparent; + border: none; +} + +QLabel:disabled { + color: #787878; +} + +QTableView::item:!selected:hover +{ + background-color: transparent; +} \ No newline at end of file diff --git a/src/ui/BreezeStyleSheets/dark/branch_closed-on.svg b/src/ui/BreezeStyleSheets/dark/branch_closed-on.svg new file mode 100755 index 0000000..8bd398f --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/branch_closed-on.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/branch_closed.svg b/src/ui/BreezeStyleSheets/dark/branch_closed.svg new file mode 100755 index 0000000..f5a072f --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/branch_closed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/branch_open-on.svg b/src/ui/BreezeStyleSheets/dark/branch_open-on.svg new file mode 100755 index 0000000..4dd0c06 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/branch_open-on.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/branch_open.svg b/src/ui/BreezeStyleSheets/dark/branch_open.svg new file mode 100755 index 0000000..0745890 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/branch_open.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/checkbox_checked.svg b/src/ui/BreezeStyleSheets/dark/checkbox_checked.svg new file mode 100755 index 0000000..6753d8b --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/checkbox_checked.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/checkbox_checked_disabled.svg b/src/ui/BreezeStyleSheets/dark/checkbox_checked_disabled.svg new file mode 100755 index 0000000..ff7e63a --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/checkbox_checked_disabled.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/checkbox_indeterminate.svg b/src/ui/BreezeStyleSheets/dark/checkbox_indeterminate.svg new file mode 100755 index 0000000..0f17124 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/checkbox_indeterminate.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/checkbox_indeterminate_disabled.svg b/src/ui/BreezeStyleSheets/dark/checkbox_indeterminate_disabled.svg new file mode 100755 index 0000000..bc0f285 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/checkbox_indeterminate_disabled.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/checkbox_unchecked.svg b/src/ui/BreezeStyleSheets/dark/checkbox_unchecked.svg new file mode 100755 index 0000000..6f3e569 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/checkbox_unchecked.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/checkbox_unchecked_disabled.svg b/src/ui/BreezeStyleSheets/dark/checkbox_unchecked_disabled.svg new file mode 100755 index 0000000..dd73f75 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/checkbox_unchecked_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/close-hover.svg b/src/ui/BreezeStyleSheets/dark/close-hover.svg new file mode 100755 index 0000000..e2b0dd8 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/close-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/close-pressed.svg b/src/ui/BreezeStyleSheets/dark/close-pressed.svg new file mode 100755 index 0000000..a0dc249 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/close-pressed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/close.svg b/src/ui/BreezeStyleSheets/dark/close.svg new file mode 100755 index 0000000..07b50c9 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/down_arrow-hover.svg b/src/ui/BreezeStyleSheets/dark/down_arrow-hover.svg new file mode 100755 index 0000000..408397f --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/down_arrow-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/down_arrow.svg b/src/ui/BreezeStyleSheets/dark/down_arrow.svg new file mode 100755 index 0000000..a50df00 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/down_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/down_arrow_disabled.svg b/src/ui/BreezeStyleSheets/dark/down_arrow_disabled.svg new file mode 100755 index 0000000..af74a30 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/down_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/hmovetoolbar.svg b/src/ui/BreezeStyleSheets/dark/hmovetoolbar.svg new file mode 100755 index 0000000..e4904db --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/hmovetoolbar.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/hsepartoolbar.svg b/src/ui/BreezeStyleSheets/dark/hsepartoolbar.svg new file mode 100755 index 0000000..89beb22 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/hsepartoolbar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/left_arrow.svg b/src/ui/BreezeStyleSheets/dark/left_arrow.svg new file mode 100755 index 0000000..9c787ce --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/left_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/left_arrow_disabled.svg b/src/ui/BreezeStyleSheets/dark/left_arrow_disabled.svg new file mode 100755 index 0000000..2d749e7 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/left_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/radio_checked.svg b/src/ui/BreezeStyleSheets/dark/radio_checked.svg new file mode 100755 index 0000000..b8f7064 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/radio_checked.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/radio_checked_disabled.svg b/src/ui/BreezeStyleSheets/dark/radio_checked_disabled.svg new file mode 100755 index 0000000..523ee00 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/radio_checked_disabled.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/radio_unchecked.svg b/src/ui/BreezeStyleSheets/dark/radio_unchecked.svg new file mode 100755 index 0000000..1a556e3 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/radio_unchecked.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/radio_unchecked_disabled.svg b/src/ui/BreezeStyleSheets/dark/radio_unchecked_disabled.svg new file mode 100755 index 0000000..b3da8a2 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/radio_unchecked_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/right_arrow.svg b/src/ui/BreezeStyleSheets/dark/right_arrow.svg new file mode 100755 index 0000000..b793513 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/right_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/right_arrow_disabled.svg b/src/ui/BreezeStyleSheets/dark/right_arrow_disabled.svg new file mode 100755 index 0000000..4940025 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/right_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/sizegrip.svg b/src/ui/BreezeStyleSheets/dark/sizegrip.svg new file mode 100755 index 0000000..3388f07 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/sizegrip.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/spinup_disabled.svg b/src/ui/BreezeStyleSheets/dark/spinup_disabled.svg new file mode 100755 index 0000000..838436d --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/spinup_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end-closed.svg b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end-closed.svg new file mode 100755 index 0000000..eb73b13 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end-closed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end-open.svg b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end-open.svg new file mode 100755 index 0000000..eb73b13 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end-open.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end.svg b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end.svg new file mode 100755 index 0000000..334ca0c --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-end.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/stylesheet-branch-more.svg b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-more.svg new file mode 100755 index 0000000..f5250ba --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/stylesheet-branch-more.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/dark/stylesheet-vline.svg b/src/ui/BreezeStyleSheets/dark/stylesheet-vline.svg new file mode 100755 index 0000000..4e7ff6a --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/stylesheet-vline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/transparent.svg b/src/ui/BreezeStyleSheets/dark/transparent.svg new file mode 100755 index 0000000..3a8ca5c --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/transparent.svg @@ -0,0 +1 @@ + diff --git a/src/ui/BreezeStyleSheets/dark/undock-hover.svg b/src/ui/BreezeStyleSheets/dark/undock-hover.svg new file mode 100755 index 0000000..6bddbd7 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/undock-hover.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/undock.svg b/src/ui/BreezeStyleSheets/dark/undock.svg new file mode 100755 index 0000000..9ab2197 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/undock.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/up_arrow-hover.svg b/src/ui/BreezeStyleSheets/dark/up_arrow-hover.svg new file mode 100755 index 0000000..dd1271a --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/up_arrow-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/up_arrow.svg b/src/ui/BreezeStyleSheets/dark/up_arrow.svg new file mode 100755 index 0000000..9f42239 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/up_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/up_arrow_disabled.svg b/src/ui/BreezeStyleSheets/dark/up_arrow_disabled.svg new file mode 100755 index 0000000..742e1c5 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/up_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/dark/vmovetoolbar.svg b/src/ui/BreezeStyleSheets/dark/vmovetoolbar.svg new file mode 100755 index 0000000..0a30d45 --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/vmovetoolbar.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/ui/BreezeStyleSheets/dark/vsepartoolbars.svg b/src/ui/BreezeStyleSheets/dark/vsepartoolbars.svg new file mode 100755 index 0000000..00e91ab --- /dev/null +++ b/src/ui/BreezeStyleSheets/dark/vsepartoolbars.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/BreezeStyleSheets/light.qss b/src/ui/BreezeStyleSheets/light.qss new file mode 100644 index 0000000..20a4a67 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light.qss @@ -0,0 +1,1687 @@ +/* + * Breeze stylesheet. + * + * :author: Colin Duquesnoy + * :editor: Alex Huszagh + * :license: MIT, see LICENSE.md + * + * This is originally a fork of QDarkStyleSheet, and is based on Breeze/ + * BreezeDark color scheme, but is in no way affiliated with KDE. + * + * --------------------------------------------------------------------- + * The MIT License (MIT) + * + * Copyright (c) <2013-2014> + * Copyright (c) <2015-2016> + * + * 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 +{ + background-color: black; + color: white; + padding: 0.5ex; +} + +QWidget +{ + color: #31363B; + background-color: #EFF0F1; + selection-background-color:#33A4DF; + selection-color: #31363B; + background-clip: border; + border-image: none; + border: 0px transparent black; + outline: 0; +} + +QWidget::item:hover +{ + background-color: #33A4DF; + color: #31363B; +} + +QWidget::item:selected +{ + background-color: #33A4DF; +} + + +QCheckBox +{ + spacing: 0.5ex; + outline: none; + color: #31363B; + margin-bottom: 0.2ex; + opacity: 200; +} + +QCheckBox:disabled +{ + color: #BAB9B8; +} + +QGroupBox::indicator +{ + margin-left: 0.2ex; + margin-left: 0.2ex; +} + +QCheckBox::indicator:unchecked, +QCheckBox::indicator:unchecked:focus +{ + border-image: url(:/light/checkbox_unchecked_disabled.svg); +} + +QCheckBox::indicator:unchecked:hover, +QCheckBox::indicator:unchecked:pressed, +QGroupBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:focus, +QGroupBox::indicator:unchecked:pressed +{ + border: none; + border-image: url(:/light/checkbox_unchecked-hover.svg); +} + +QCheckBox::indicator:checked +{ + border-image: url(:/light/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:focus, +QCheckBox::indicator:checked:pressed, +QGroupBox::indicator:checked:focus, +QGroupBox::indicator:checked:pressed +{ + border: none; + border-image: url(:/light/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover +{ + border-image: url(:/light/checkbox_checked-hover.svg); +} + +QCheckBox::indicator:indeterminate +{ + border-image: url(:/light/checkbox_indeterminate.svg); +} + +QCheckBox::indicator:indeterminate:hover +{ + border-image: url(:/light/checkbox_indeterminate-hover.svg); +} + +QCheckBox::indicator:indeterminate:focus, +QCheckBox::indicator:indeterminate:pressed +{ +} + +QCheckBox::indicator:indeterminate:disabled +{ + border-image: url(:/light/checkbox_indeterminate_disabled.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled +{ + border-image: url(:/light/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled +{ + border-image: url(:/light/checkbox_unchecked_disabled.svg); +} + +QRadioButton +{ + spacing: 0.5ex; + outline: none; + color: #31363B; + margin-bottom: 0.2ex; +} + +QRadioButton:disabled +{ + color: #BAB9B8; +} + +QRadioButton::indicator:unchecked, +QRadioButton::indicator:unchecked:focus +{ + border-image: url(:/light/radio_unchecked_disabled.svg); +} + +QRadioButton::indicator:unchecked:hover, +QRadioButton::indicator:unchecked:pressed +{ + border: none; + outline: none; + border-image: url(:/light/radio_unchecked-hover.svg); +} + +QRadioButton::indicator:checked +{ + border: none; + outline: none; + border-image: url(:/light/radio_checked.svg); +} + +QRadioButton::indicator:checked:focus, +QRadioButton::indicator:checked:pressed +{ + border: none; + outline: none; + border-image: url(:/light/radio_checked.svg); +} + +QRadioButton::indicator:checked:hover +{ + border-image: url(:/light/radio_checked-hover.svg); +} + +QRadioButton::indicator:checked:disabled +{ + outline: none; + border-image: url(:/light/radio_checked_disabled.svg); +} + +QRadioButton::indicator:unchecked:disabled +{ + border-image: url(:/light/radio_unchecked_disabled.svg); +} + +QMenuBar +{ + background-color: #EFF0F1; + color: #31363B; +} + +QMenuBar::item +{ + background: transparent; +} + +QMenuBar::item:selected +{ + background: transparent; + border: 0.1ex solid #BAB9B8; +} + +QMenuBar::item:pressed +{ + border: 0.1ex solid #BAB9B8; + background-color: #33A4DF; + color: #31363B; + margin-bottom: -0.1ex; + padding-bottom: 0.1ex; +} + +QMenu +{ + border: 0.1ex solid #BAB9B8; + color: #31363B; + margin: 0.2ex; +} + +QMenu::icon +{ + margin: 0.5ex; +} + +QMenu::item +{ + padding: 0.5ex 3ex 0.5ex 3ex; + margin-left: 0.5ex; + border: 0.1ex solid transparent; /* reserve space for selection border */ +} + +QMenu::item:selected +{ + color: #31363B; +} + +QMenu::separator +{ + height: 0.2ex; + background: lightblue; + margin-left: 1ex; + margin-right: 0.5ex; +} + +/* non-exclusive indicator = check box style indicator + (see QActionGroup::setExclusive) */ +QMenu::indicator:non-exclusive:unchecked +{ + border-image: url(:/light/checkbox_unchecked_disabled.svg); +} + +QMenu::indicator:non-exclusive:unchecked:selected +{ + border-image: url(:/light/checkbox_unchecked_disabled.svg); +} + +QMenu::indicator:non-exclusive:checked +{ + border-image: url(:/light/checkbox_checked.svg); +} + +QMenu::indicator:non-exclusive:checked:selected +{ + border-image: url(:/light/checkbox_checked.svg); +} + +/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */ +QMenu::indicator:exclusive:unchecked +{ + border-image: url(:/light/radio_unchecked_disabled.svg); +} + +QMenu::indicator:exclusive:unchecked:selected +{ + border-image: url(:/light/radio_unchecked_disabled.svg); +} + +QMenu::indicator:exclusive:checked +{ + border-image: url(:/light/radio_checked.svg); +} + +QMenu::indicator:exclusive:checked:selected +{ + border-image: url(:/light/radio_checked.svg); +} + +QMenu::right-arrow +{ + margin: 0.5ex; + border-image: url(:/light/right_arrow.svg); + width: 0.6ex; + height: 0.9ex; +} + + +QWidget:disabled +{ + color: #454545; + background-color: #EFF0F1; +} + +QAbstractItemView +{ + alternate-background-color: #EFF0F1; + color: #31363B; + border: 0.1ex solid 3A3939; + border-radius: 0.2ex; +} + +QWidget:focus, +QMenuBar:focus +{ + border: 0.1ex solid #33A4DF; +} + +QTabWidget:focus, +QCheckBox:focus, +QRadioButton:focus, +QSlider:focus +{ + border: none; +} + +QLineEdit +{ + background-color: #FCFCFC; + padding: 0.5ex; + border-style: solid; + border: 0.1ex solid #BAB9B8; + border-radius: 0.2ex; + color: #31363B; +} + +QGroupBox +{ + border: 0.1ex solid #BAB9B8; + border-radius: 0.2ex; + padding-top: 1ex; + margin-top: 1ex; +} + +QGroupBox::title +{ + subcontrol-origin: margin; + subcontrol-position: top center; + padding-left: 0.1ex; + padding-right: 0.1ex; + margin-top: -0.7ex; +} + +QAbstractScrollArea +{ + border-radius: 0.2ex; + border: 0.1ex solid #BAB9B8; + background-color: transparent; +} + +QScrollBar:horizontal +{ + height: 1.5ex; + margin: 0.3ex 1.5ex 0.3ex 1.5ex; + border: 0.1ex transparent #2A2929; + border-radius: 0.4ex; + background-color: #2A2929; +} + +QScrollBar::handle:horizontal +{ + background-color: #605F5F; + min-width: 0.5ex; + border-radius: 0.4ex; +} + +QScrollBar::add-line:horizontal +{ + margin: 0ex 0.3ex 0ex 0.3ex; + border-image: url(:/light/right_arrow_disabled.svg); + width: 1ex; + height: 1ex; + subcontrol-position: right; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:horizontal +{ + margin: 0px 0.3ex 0px 0.3ex; + border-image: url(:/light/left_arrow_disabled.svg); + height: 1ex; + width: 1ex; + subcontrol-position: left; + subcontrol-origin: margin; +} + +QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on +{ + border-image: url(:/light/right_arrow.svg); + width: 1ex; + height: 1ex; + subcontrol-position: right; + subcontrol-origin: margin; +} + + +QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on +{ + border-image: url(:/light/left_arrow.svg); + width: 1ex; + height: 1ex; + 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: 1.5ex; + margin: 1.5ex 0.3ex 1.5ex 0.3ex; + border: 0.1ex transparent #2A2929; + border-radius: 0.4ex; +} + +QScrollBar::handle:vertical +{ + background-color: #605F5F; + min-height: 0.5ex; + border-radius: 0.4ex; +} + +QScrollBar::sub-line:vertical +{ + margin: 0.3ex 0ex 0.3ex 0ex; + border-image: url(:/light/up_arrow_disabled.svg); + height: 1ex; + width: 1ex; + subcontrol-position: top; + subcontrol-origin: margin; +} + +QScrollBar::add-line:vertical +{ + margin: 0.3ex 0ex 0.3ex 0ex; + border-image: url(:/light/down_arrow_disabled.svg); + height: 1ex; + width: 1ex; + subcontrol-position: bottom; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:vertical:hover, +QScrollBar::sub-line:vertical:on +{ + + border-image: url(:/light/up_arrow.svg); + height: 1ex; + width: 1ex; + subcontrol-position: top; + subcontrol-origin: margin; +} + + +QScrollBar::add-line:vertical:hover, +QScrollBar::add-line:vertical:on +{ + border-image: url(:/light/down_arrow.svg); + height: 1ex; + width: 1ex; + 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: #EFF0F1; + color: #31363B; + border: 0.1ex solid #BAB9B8; +} + +QPlainTextEdit +{ + background-color: #EFF0F1; + color: #31363B; + border-radius: 0.2ex; + border: 0.1ex solid #BAB9B8; +} + +QHeaderView::section +{ + background-color: #BAB9B8; + color: #31363B; + padding: 0.5ex; + border: 0.1ex solid #BAB9B8; +} + +QSizeGrip +{ + border-image: url(:/light/sizegrip.svg); + width: 1.2ex; + height: 1.2ex; +} + +QMainWindow::separator +{ + background-color: #EFF0F1; + color: white; + padding-left: 0.4ex; + spacing: 0.2ex; + border: 0.1ex dashed #BAB9B8; +} + +QMainWindow::separator:hover +{ + + background-color: #787876; + color: white; + padding-left: 0.4ex; + border: 0.1ex solid #BAB9B8; + spacing: 0.2ex; +} + +QMenu::separator +{ + height: 0.1ex; + background-color: #BAB9B8; + color: white; + padding-left: 0.4ex; + margin-left: 1ex; + margin-right: 0.5ex; +} + +QFrame[frameShape="2"], /* QFrame::Panel == 0x0003 */ +QFrame[frameShape="3"], /* QFrame::WinPanel == 0x0003 */ +QFrame[frameShape="4"], /* QFrame::HLine == 0x0004 */ +QFrame[frameShape="5"], /* QFrame::VLine == 0x0005 */ +QFrame[frameShape="6"] /* QFrame::StyledPanel == 0x0006 */ +{ + border-width: 0.1ex; + padding: 0.1ex; + border-style: solid; + border-color: #EFF0F1; + background-color: #bcbfc2; + border-radius: 0.5ex; +} + +QStackedWidget +{ + border: 0.1ex transparent black; +} + +QToolBar +{ + border: 0.1ex transparent #393838; + background: 0.1ex solid #EFF0F1; + font-weight: bold; +} + +QToolBar::handle:horizontal +{ + border-image: url(:/light/hmovetoolbar.svg); + width = 1.6ex; + height = 6.4ex; +} + +QToolBar::handle:vertical +{ + border-image: url(:/light/vmovetoolbar.svg); + width = 5.4ex; + height = 1ex; +} + +QToolBar::separator:horizontal +{ + border-image: url(:/light/hsepartoolbar.svg); + width = 0.7ex; + height = 6.3ex; +} + +QToolBar::separator:vertical +{ + border-image: url(:/light/vsepartoolbars.svg); + width = 6.3ex; + height = 0.7ex; +} + +QPushButton +{ + color: #31363B; + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #EFF0F1, stop: 0.5 #eaebec); + border-width: 0.1ex; + border-color: #BAB9B8; + border-style: solid; + padding: 0.5ex; + border-radius: 0.2ex; + outline: none; +} + +QPushButton:disabled +{ + background-color: #e0e1e2; + border-width: 0.1ex; + border-color: #b4b4b4; + border-style: solid; + padding-top: 0.5ex; + padding-bottom: 0.5ex; + padding-left: 1ex; + padding-right: 1ex; + border-radius: 0.2ex; + color: #b4b4b4; +} + +QPushButton:focus +{ + color: black; +} + +QComboBox +{ + selection-background-color: #33A4DF; + border-style: solid; + border: 0.1ex solid #BAB9B8; + border-radius: 0.2ex; + padding: 0.5ex; + min-width: 7.5ex; +} + +QPushButton:checked +{ + background-color: #BAB9B8; + border-color: #6A6969; +} + +QComboBox:hover, +QAbstractSpinBox:hover, +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover, +QAbstractView:hover, +QTreeView:hover +{ + border: 0.1ex solid #33A4DF; + color: #31363B; +} + +QComboBox:hover:pressed, +QPushButton:hover:pressed, +QAbstractSpinBox:hover:pressed, +QLineEdit:hover:pressed, +QTextEdit:hover:pressed, +QPlainTextEdit:hover:pressed, +QAbstractView:hover:pressed, +QTreeView:hover:pressed +{ + background-color: #EFF0F1; +} + +QComboBox:on +{ + padding-top: 0.3ex; + padding-left: 0.4ex; + selection-background-color: #4a4a4a; +} + +QComboBox QAbstractItemView +{ + background-color: #FCFCFC; + border-radius: 0.2ex; + border: 0.1ex solid #BAB9B8; + selection-background-color: #33A4DF; +} + +QComboBox::drop-down +{ + subcontrol-origin: padding; + subcontrol-position: top right; + width: 1.5ex; + + border-left-width: 0ex; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 0.3ex; + border-bottom-right-radius: 0.3ex; +} + +QComboBox::down-arrow +{ + border-image: url(:/light/down_arrow_disabled.svg); + width: 0.9ex; + height: 0.6ex; +} + +QComboBox::down-arrow:on, +QComboBox::down-arrow:hover, +QComboBox::down-arrow:focus +{ + border-image: url(:/light/down_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox +{ + padding: 0.5ex; + border: 0.1ex solid #BAB9B8; + background-color: #D9D8D7; + color: #31363B; + border-radius: 0.2ex; + min-width: 7.5ex; +} + +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 +{ + border-image: url(:/light/up_arrow_disabled.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox::up-arrow:hover +{ + border-image: url(:/light/up_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox::down-arrow, +QAbstractSpinBox::down-arrow:disabled, +QAbstractSpinBox::down-arrow:off +{ + border-image: url(:/light/down_arrow_disabled.svg); + width: 0.9ex; + height: 0.6ex; +} + +QAbstractSpinBox::down-arrow:hover +{ + border-image: url(:/light/down_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QLabel +{ + border: 0ex solid black; +} + +QTabWidget{ + border: 0.1ex solid #BAB9B8; +} + +/* BORDERS */ +QTabWidget::pane +{ + padding: 0.5ex; + margin: 0.1ex; +} + +QTabWidget::pane:top +{ + border: 0.1ex solid #BAB9B8; + top: -0.1ex; +} + +QTabWidget::pane:bottom +{ + border: 0.1ex solid #BAB9B8; + bottom: -0.1ex; +} + +QTabWidget::pane:left +{ + border: 0.1ex solid #BAB9B8; + right: -0.1ex; +} + +QTabWidget::pane:right +{ + border: 0.1ex solid #BAB9B8; + left: -0.1ex; +} + +QTabBar +{ + qproperty-drawBase: 0; + left: 0.5ex; /* move to the right by 0.5ex */ + border-radius: 0.3ex; +} + +QTabBar:focus +{ + border: 0ex transparent black; +} + +QTabBar::close-button +{ + border-image: url(:/light/close.svg); + width: 1.2ex; + height: 1.2ex; + background: transparent; +} + +QTabBar::close-button:hover +{ + border-image: url(:/light/close-hover.svg); + width: 1.2ex; + height: 1.2ex; + background: transparent; +} + +QTabBar::close-button:pressed +{ + border-image: url(:/light/close-pressed.svg); + width: 1.2ex; + height: 1.2ex; + background: transparent; +} + +/* TOP TABS */ +QTabBar::tab:top +{ + color: #31363B; + border: 0.1ex transparent black; + border-left: 0.1ex solid #BAB9B8; + border-top: 0.1ex solid #BAB9B8; + background-color: #EFF0F1; + padding: 0.5ex; + min-width: 5ex; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:last, +QTabBar::tab:top:only-one +{ + color: #31363B; + border: 0.1ex transparent black; + border-left: 0.1ex solid #BAB9B8; + border-right: 0.1ex solid #BAB9B8; + border-top: 0.1ex solid #BAB9B8; + background-color: #EFF0F1; + padding: 0.5ex; + min-width: 5ex; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:!selected +{ + color: #31363B; + background-color: #D9D8D7; + border: 0.1ex transparent black; + border-left: 0.1ex solid #BAB9B8; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:first:!selected +{ + color: #31363B; + background-color: #D9D8D7; + border: 0.1ex transparent black; + border-top-left-radius: 0.2ex; + border-top-right-radius: 0.2ex; +} + +QTabBar::tab:top:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); + border-left: 0.1ex solid #BAB9B8; +} + +QTabBar::tab:top:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); +} + +/* BOTTOM TABS */ +QTabBar::tab:bottom +{ + color: #31363B; + border: 0.1ex transparent black; + border-left: 0.1ex solid #BAB9B8; + border-bottom: 0.1ex solid #BAB9B8; + background-color: #EFF0F1; + padding: 0.5ex; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-width: 5ex; +} + +QTabBar::tab:bottom:last, +QTabBar::tab:bottom:only-one +{ + color: #31363B; + border: 0.1ex transparent black; + border-left: 0.1ex solid #BAB9B8; + border-right: 0.1ex solid #BAB9B8; + border-bottom: 0.1ex solid #BAB9B8; + background-color: #EFF0F1; + padding: 0.5ex; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-width: 5ex; +} + +QTabBar::tab:bottom:!selected +{ + color: #31363B; + background-color: #D9D8D7; + border: 0.1ex transparent black; + border-left: 0.1ex solid #BAB9B8; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; +} + +QTabBar::tab:bottom:first:!selected +{ + color: #31363B; + background-color: #D9D8D7; + border: 0.1ex transparent black; + border-bottom-left-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; +} + +QTabBar::tab:bottom:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); + border-left: 0.1ex solid #BAB9B8; +} + +QTabBar::tab:bottom:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); +} + +/* LEFT TABS */ +QTabBar::tab:left +{ + color: #31363B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #BAB9B8; + border-right: 0.1ex solid #BAB9B8; + background-color: #EFF0F1; + padding: 0.5ex; + border-top-right-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-height: 5ex; +} + +QTabBar::tab:left:last, +QTabBar::tab:left:only-one +{ + color: #31363B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #BAB9B8; + border-bottom: 0.1ex solid #BAB9B8; + border-right: 0.1ex solid #BAB9B8; + background-color: #EFF0F1; + padding: 0.5ex; + border-top-right-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; + min-height: 5ex; +} + +QTabBar::tab:left:!selected +{ + color: #31363B; + background-color: #D9D8D7; + border: 0.1ex transparent black; + border-top: 0.1ex solid #BAB9B8; + border-top-right-radius: 0.2ex; + border-bottom-right-radius: 0.2ex; +} + +QTabBar::tab:left:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); + border-top: 0.1ex solid #BAB9B8; +} + +QTabBar::tab:left:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); +} + +/* RIGHT TABS */ +QTabBar::tab:right +{ + color: #31363B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #BAB9B8; + border-left: 0.1ex solid #BAB9B8; + background-color: #D9D8D7; + padding: 0.5ex; + border-top-left-radius: 0.2ex; + border-bottom-left-radius: 0.2ex; + min-height: 5ex; +} + +QTabBar::tab:right:last, +QTabBar::tab:right:only-one +{ + color: #31363B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #BAB9B8; + border-bottom: 0.1ex solid #BAB9B8; + border-left: 0.1ex solid #BAB9B8; + background-color: #D9D8D7; + padding: 0.5ex; + border-top-left-radius: 0.2ex; + border-bottom-left-radius: 0.2ex; + min-height: 5ex; +} + +QTabBar::tab:right:!selected +{ + color: #31363B; + background-color: #54575B; + border: 0.1ex transparent black; + border-top: 0.1ex solid #BAB9B8; + border-top-left-radius: 0.2ex; + border-bottom-left-radius: 0.2ex; +} + +QTabBar::tab:right:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); + border-top: 0.1ex solid #BAB9B8; +} + +QTabBar::tab:right:!selected:first:hover +{ + background-color: rgba(61, 173, 232, 0.1); + border: 0.1ex rgba(61, 173, 232, 0.1); +} + +QTabBar QToolButton::right-arrow:enabled +{ + border-image: url(:/light/right_arrow.svg); +} + +QTabBar QToolButton::left-arrow:enabled +{ + border-image: url(:/light/left_arrow.svg); +} + +QTabBar QToolButton::right-arrow:disabled +{ + border-image: url(:/light/right_arrow_disabled.svg); +} + +QTabBar QToolButton::left-arrow:disabled +{ + border-image: url(:/light/left_arrow_disabled.svg); +} + +QDockWidget +{ + background: #EFF0F1; + border: 0.1ex solid #403F3F; + titlebar-close-icon: url(:/light/transparent.svg); + titlebar-normal-icon: url(:/light/transparent.svg); +} + +QDockWidget::close-button, +QDockWidget::float-button +{ + border: 0.1ex solid transparent; + border-radius: 0.2ex; + background: transparent; +} + + +QDockWidget::float-button +{ + border-image: url(:/dark/undock.svg); +} + +QDockWidget::float-button:hover +{ + border-image: url(:/dark/undock-hover.svg) ; +} + +QDockWidget::close-button +{ + border-image: url(:/dark/close.svg) ; +} + +QDockWidget::close-button:hover +{ + border-image: url(:/dark/close-hover.svg) ; +} + +QDockWidget::close-button:pressed +{ + border-image: url(:/dark/close-pressed.svg) ; +} + +QTreeView, +QListView +{ + border: 0.1ex solid #BAB9B8; + background-color: #FCFCFC; +} + + +QTreeView::branch:has-siblings:!adjoins-item +{ + border-image: url(:/light/stylesheet-vline.svg) 0; +} + +QTreeView::branch:has-siblings:adjoins-item +{ + border-image: url(:/light/stylesheet-branch-more.svg) 0; +} + +QTreeView::branch:!has-children:!has-siblings:adjoins-item +{ + border-image: url(:/light/stylesheet-branch-end.svg) 0; +} + +QTreeView::branch:has-children:!has-siblings:closed, +QTreeView::branch:closed:has-children:has-siblings +{ + border-image: url(:/light/stylesheet-branch-end-closed.svg) 0; + image: url(:/light/branch_closed.svg); +} + +QTreeView::branch:open:has-children:!has-siblings, +QTreeView::branch:open:has-children:has-siblings +{ + border-image: url(:/light/stylesheet-branch-end-open.svg) 0; + image: url(:/light/branch_open.svg); +} + +QTableView::item, +QListView::item, +QTreeView::item +{ + padding: 0.3ex; +} + +QTableView::item:!selected:hover, +QListView::item:!selected:hover, +QTreeView::item:!selected:hover +{ + background-color: rgba(61, 173, 232, 0.1); + outline: 0; + color: #31363B; + padding: 0.3ex; +} + +QSlider::groove:horizontal +{ + border: 0.1ex solid #EFF0F1; + height: 0.4ex; + background: #9CA0A4; + margin: 0px; + border-radius: 0.2ex; +} + +QSlider::handle:horizontal +{ + background: #D9D8D7; + border: 0.1ex solid #BABEC2; + width: 1.6ex; + height: 1.6ex; + margin: -0.8ex 0; + border-radius: 0.9ex; +} + +QSlider::groove:vertical +{ + border: 0.1ex solid #EFF0F1; + width: 0.4ex; + background: #9CA0A4; + margin: 0ex; + border-radius: 0.3ex; +} + +QSlider::handle:vertical +{ + background: #D9D8D7; + border: 0.1ex solid #BABEC2; + width: 1.6ex; + height: 1.6ex; + margin: 0 -0.8ex; + border-radius: 0.9ex; +} + +QSlider::handle:horizontal:focus, +QSlider::handle:vertical:focus +{ + border: 0.1ex solid #33A4DF; +} + +QSlider::handle:horizontal:hover, +QSlider::handle:vertical:hover +{ + border: 0.1ex solid #51c2fc; +} + +QSlider::sub-page:horizontal, +QSlider::add-page:vertical +{ + background: #33A4DF; + border-radius: 0.3ex; +} + +QSlider::add-page:horizontal, +QSlider::sub-page:vertical +{ + background: #BABEC2; + border-radius: 0.3ex; +} + +QToolButton +{ + background-color: transparent; + border: 0.1ex solid #BAB9B8; + border-radius: 0.2ex; + margin: 0.3ex; + padding: 0.5ex; +} + +QToolButton[popupMode="1"] /* only for MenuButtonPopup */ +{ + padding-right: 2ex; /* make way for the popup button */ +} + +QToolButton[popupMode="2"] /* only for InstantPopup */ +{ + padding-right: 1ex; /* make way for the popup button */ +} + +QToolButton::menu-indicator +{ + border-image: url(:/light/down_arrow.svg); + top: -0.7ex; left: -0.2ex; /* shift it a bit */ + width = 0.9ex; + height = 0.6ex; +} + +QToolButton::menu-arrow +{ + border-image: url(:/light/down_arrow.svg); + width = 0.9ex; + height = 0.6ex; +} + +QToolButton:hover, +QToolButton::menu-button:hover +{ + background-color: transparent; + border: 0.1ex solid #33A4DF; +} + +QToolButton:checked, +QToolButton:pressed, +QToolButton::menu-button:pressed +{ + background-color: #47b8fc; + border: 0.1ex solid #47b8fc; + padding: 0.5ex; +} + +QToolButton::menu-button +{ + border: 0.1ex solid #BAB9B8; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + /* 1ex width + 0.4ex for border + no text = 2ex allocated above */ + width: 1ex; + padding: 0.5ex; + outline: none; +} + +QToolButton::menu-arrow:open +{ + border: 0.1ex solid #BAB9B8; +} + +QPushButton::menu-indicator +{ + subcontrol-origin: padding; + subcontrol-position: bottom right; + left: 0.8ex; +} + +QTableView +{ + border: 0.1ex solid #BAB9B8; + gridline-color: #BAB9B8; + background-color: #FCFCFC; +} + + +QTableView, +QHeaderView +{ + border-radius: 0px; +} + +QTableView::item:pressed +{ + background: #33A4DF; + color: #31363B; +} + +QTableView::item:selected:active +{ + background: #33A4DF; + color: #31363B; +} + +QTableView::item:selected:hover +{ + background-color: #47b8f3; + color: #31363B; +} + +QListView::item:pressed, +QTreeView::item:pressed +{ + background: #3daee9; + color: #31363B; +} + +QTreeView::item:selected:active, +QListView::item:selected:active +{ + background: #3daee9; + color: #31363B; +} + +QListView::item:selected:hover, +QTreeView::item:selected:hover +{ + background-color: #51c2fc; + color: #31363B; +} + + +QHeaderView +{ + background-color: #EFF0F1; + border: 0.1ex transparent; + border-radius: 0px; + margin: 0px; + padding: 0px; + +} + +QHeaderView::section +{ + background-color: #EFF0F1; + color: #31363B; + padding: 0.5ex; + border: 0.1ex solid #BAB9B8; + border-radius: 0px; + text-align: center; +} + +QHeaderView::section::vertical::first, +QHeaderView::section::vertical::only-one +{ + border-top: 0.1ex solid #BAB9B8; +} + +QHeaderView::section::vertical +{ + border-top: transparent; +} + +QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one +{ + border-left: 0.1ex solid #BAB9B8; +} + +QHeaderView::section::horizontal +{ + border-left: transparent; +} + + +QHeaderView::section:checked + + { + color: black; + background-color: #b9dae7; + } + + /* style the sort indicator */ +QHeaderView::down-arrow +{ + image: url(:/light/down_arrow.svg); +} + +QHeaderView::up-arrow +{ + image: url(:/light/up_arrow.svg); +} + +QTableCornerButton::section +{ + background-color: #EFF0F1; + border: 0.1ex transparent #BAB9B8; + border-radius: 0px; +} + +QToolBox +{ + padding: 0.5ex; + border: 0.1ex transparent black; +} + +QToolBox:selected +{ + background-color: #EFF0F1; + border-color: #33A4DF; +} + +QToolBox:hover +{ + border-color: #33A4DF; +} + +QStatusBar::item +{ + border: 0px transparent dark; +} + +QSplitter::handle +{ + border: 0.1ex dashed #BAB9B8; +} + +QSplitter::handle:hover +{ + background-color: #787876; + border: 0.1ex solid #BAB9B8; +} + +QSplitter::handle:horizontal +{ + width: 0.1ex; +} + +QSplitter::handle:vertical +{ + height: 0.1ex; +} + +QProgressBar:horizontal +{ + background-color: #BABEC2; + border: 0.1ex solid #EFF0F1; + border-radius: 0.3ex; + height: 0.5ex; + text-align: right; + margin-top: 0.5ex; + margin-bottom: 0.5ex; + margin-right: 5ex; + padding: 0px; +} + +QProgressBar::chunk:horizontal +{ + background-color: #33A4DF; + border: 0.1ex transparent; + border-radius: 0.3ex; +} + +QAbstractSpinBox +{ + background-color: #EFF0F1; +} + +QSpinBox, +QDoubleSpinBox +{ + padding-right: 1.5ex; +} + +QSpinBox::up-button, +QDoubleSpinBox::up-button +{ + subcontrol-origin: content; + subcontrol-position: right top; + + width: 1.6ex; + border-width: 0.1ex; +} + +QSpinBox::up-arrow, +QDoubleSpinBox::up-arrow +{ + border-image: url(:/light/up_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::up-arrow:hover, +QSpinBox::up-arrow:pressed, +QDoubleSpinBox::up-arrow:hover, +QDoubleSpinBox::up-arrow:pressed +{ + border-image: url(:/light/up_arrow-hover.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::up-arrow:disabled, +QSpinBox::up-arrow:off, +QDoubleSpinBox::up-arrow:disabled, +QDoubleSpinBox::up-arrow:off +{ + border-image: url(:/light/up_arrow_disabled.svg); +} + +QSpinBox::down-button, +QDoubleSpinBox::down-button +{ + subcontrol-origin: content; + subcontrol-position: right bottom; + + width: 1.6ex; + border-width: 0.1ex; +} + +QSpinBox::down-arrow, +QDoubleSpinBox::down-arrow +{ + border-image: url(:/light/down_arrow.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::down-arrow:hover, +QSpinBox::down-arrow:pressed, +QDoubleSpinBox::down-arrow:hover, +QDoubleSpinBox::down-arrow:pressed +{ + border-image: url(:/light/down_arrow-hover.svg); + width: 0.9ex; + height: 0.6ex; +} + +QSpinBox::down-arrow:disabled, +QSpinBox::down-arrow:off, +QDoubleSpinBox::down-arrow:disabled, +QDoubleSpinBox::down-arrow:off +{ + border-image: url(:/light/down_arrow_disabled.svg); +} + +QPushButton:hover +{ + border: 0.1ex solid #3daef3; + color: #31363B; +} + +QPushButton:focus +{ + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #4cbdff, stop: 0.5 #33a4e8); + color: white; +} + +QPushButton:focus:hover +{ + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #bedfec, stop: 0.5 #b9dae7); + color: #31363B; +} + +QPushButton:focus:pressed, +QPushButton:pressed +{ + background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #bedfec, stop: 0.5 #b9dae7); + color: #31363B; +} + +/* fixes */ + +QPushButton:flat { + background-color: transparent; + border: none; +} + +QScrollBar::handle:vertical, +QScrollBar::handle:horizontal +{ + background-color: #BAB9B8; +} + +QScrollBar:vertical, +QScrollBar:horizontal +{ + background-color: #eff0f1; + border: 0.1ex transparent #eff0f1; +} + +QPlainTextEdit +{ + background-color: #fcfcfc; +} + +QTableView::item:!selected:hover +{ + background-color: transparent; +} + +QLabel:disabled { + color: #787878; +} \ No newline at end of file diff --git a/src/ui/BreezeStyleSheets/light/branch_closed-on.svg b/src/ui/BreezeStyleSheets/light/branch_closed-on.svg new file mode 100755 index 0000000..23c5421 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/branch_closed-on.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/branch_closed.svg b/src/ui/BreezeStyleSheets/light/branch_closed.svg new file mode 100755 index 0000000..286c1a9 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/branch_closed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/branch_open-on.svg b/src/ui/BreezeStyleSheets/light/branch_open-on.svg new file mode 100755 index 0000000..9e75927 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/branch_open-on.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/branch_open.svg b/src/ui/BreezeStyleSheets/light/branch_open.svg new file mode 100755 index 0000000..514a312 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/branch_open.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_checked-hover.svg b/src/ui/BreezeStyleSheets/light/checkbox_checked-hover.svg new file mode 100755 index 0000000..64d6667 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_checked-hover.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_checked.svg b/src/ui/BreezeStyleSheets/light/checkbox_checked.svg new file mode 100755 index 0000000..f3acb63 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_checked.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_checked_disabled.svg b/src/ui/BreezeStyleSheets/light/checkbox_checked_disabled.svg new file mode 100755 index 0000000..b7be04b --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_checked_disabled.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_indeterminate-hover.svg b/src/ui/BreezeStyleSheets/light/checkbox_indeterminate-hover.svg new file mode 100755 index 0000000..def9596 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_indeterminate-hover.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_indeterminate.svg b/src/ui/BreezeStyleSheets/light/checkbox_indeterminate.svg new file mode 100755 index 0000000..a619ab0 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_indeterminate.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_indeterminate_disabled.svg b/src/ui/BreezeStyleSheets/light/checkbox_indeterminate_disabled.svg new file mode 100755 index 0000000..74d7168 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_indeterminate_disabled.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_unchecked-hover.svg b/src/ui/BreezeStyleSheets/light/checkbox_unchecked-hover.svg new file mode 100755 index 0000000..8f0bb01 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_unchecked-hover.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/checkbox_unchecked_disabled.svg b/src/ui/BreezeStyleSheets/light/checkbox_unchecked_disabled.svg new file mode 100755 index 0000000..0ef4300 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/checkbox_unchecked_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/close-hover.svg b/src/ui/BreezeStyleSheets/light/close-hover.svg new file mode 100755 index 0000000..cb44c78 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/close-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/close-pressed.svg b/src/ui/BreezeStyleSheets/light/close-pressed.svg new file mode 100755 index 0000000..a0dc249 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/close-pressed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/close.svg b/src/ui/BreezeStyleSheets/light/close.svg new file mode 100755 index 0000000..07b50c9 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/down_arrow-hover.svg b/src/ui/BreezeStyleSheets/light/down_arrow-hover.svg new file mode 100755 index 0000000..408397f --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/down_arrow-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/down_arrow.svg b/src/ui/BreezeStyleSheets/light/down_arrow.svg new file mode 100755 index 0000000..34c5d6a --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/down_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/down_arrow_disabled.svg b/src/ui/BreezeStyleSheets/light/down_arrow_disabled.svg new file mode 100755 index 0000000..af74a30 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/down_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/hmovetoolbar.svg b/src/ui/BreezeStyleSheets/light/hmovetoolbar.svg new file mode 100755 index 0000000..57e54c9 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/hmovetoolbar.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/hsepartoolbar.svg b/src/ui/BreezeStyleSheets/light/hsepartoolbar.svg new file mode 100755 index 0000000..a446425 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/hsepartoolbar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/left_arrow.svg b/src/ui/BreezeStyleSheets/light/left_arrow.svg new file mode 100755 index 0000000..f77acf4 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/left_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/left_arrow_disabled.svg b/src/ui/BreezeStyleSheets/light/left_arrow_disabled.svg new file mode 100755 index 0000000..2d749e7 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/left_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/radio_checked-hover.svg b/src/ui/BreezeStyleSheets/light/radio_checked-hover.svg new file mode 100755 index 0000000..f3d5c98 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/radio_checked-hover.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/radio_checked.svg b/src/ui/BreezeStyleSheets/light/radio_checked.svg new file mode 100755 index 0000000..86ff6bf --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/radio_checked.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/radio_checked_disabled.svg b/src/ui/BreezeStyleSheets/light/radio_checked_disabled.svg new file mode 100755 index 0000000..269ae12 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/radio_checked_disabled.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/radio_unchecked-hover.svg b/src/ui/BreezeStyleSheets/light/radio_unchecked-hover.svg new file mode 100755 index 0000000..f5fc943 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/radio_unchecked-hover.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/radio_unchecked_disabled.svg b/src/ui/BreezeStyleSheets/light/radio_unchecked_disabled.svg new file mode 100755 index 0000000..41f503d --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/radio_unchecked_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/right_arrow.svg b/src/ui/BreezeStyleSheets/light/right_arrow.svg new file mode 100755 index 0000000..a43ea2b --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/right_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/right_arrow_disabled.svg b/src/ui/BreezeStyleSheets/light/right_arrow_disabled.svg new file mode 100755 index 0000000..4940025 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/right_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/sizegrip.svg b/src/ui/BreezeStyleSheets/light/sizegrip.svg new file mode 100755 index 0000000..3388f07 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/sizegrip.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/spinup_disabled.svg b/src/ui/BreezeStyleSheets/light/spinup_disabled.svg new file mode 100755 index 0000000..838436d --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/spinup_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/stylesheet-branch-end-closed.svg b/src/ui/BreezeStyleSheets/light/stylesheet-branch-end-closed.svg new file mode 100755 index 0000000..a31f5c0 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/stylesheet-branch-end-closed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/stylesheet-branch-end-open.svg b/src/ui/BreezeStyleSheets/light/stylesheet-branch-end-open.svg new file mode 100755 index 0000000..a31f5c0 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/stylesheet-branch-end-open.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/stylesheet-branch-end.svg b/src/ui/BreezeStyleSheets/light/stylesheet-branch-end.svg new file mode 100755 index 0000000..a1c0a42 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/stylesheet-branch-end.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/stylesheet-branch-more.svg b/src/ui/BreezeStyleSheets/light/stylesheet-branch-more.svg new file mode 100755 index 0000000..ebef839 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/stylesheet-branch-more.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/ui/BreezeStyleSheets/light/stylesheet-vline.svg b/src/ui/BreezeStyleSheets/light/stylesheet-vline.svg new file mode 100755 index 0000000..688177e --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/stylesheet-vline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/transparent.svg b/src/ui/BreezeStyleSheets/light/transparent.svg new file mode 100755 index 0000000..3a8ca5c --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/transparent.svg @@ -0,0 +1 @@ + diff --git a/src/ui/BreezeStyleSheets/light/undock-hover.svg b/src/ui/BreezeStyleSheets/light/undock-hover.svg new file mode 100755 index 0000000..6bddbd7 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/undock-hover.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/ui/BreezeStyleSheets/light/undock.svg b/src/ui/BreezeStyleSheets/light/undock.svg new file mode 100755 index 0000000..9ab2197 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/undock.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/up_arrow-hover.svg b/src/ui/BreezeStyleSheets/light/up_arrow-hover.svg new file mode 100755 index 0000000..dd1271a --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/up_arrow-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/up_arrow.svg b/src/ui/BreezeStyleSheets/light/up_arrow.svg new file mode 100755 index 0000000..b02bb26 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/up_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/up_arrow_disabled.svg b/src/ui/BreezeStyleSheets/light/up_arrow_disabled.svg new file mode 100755 index 0000000..742e1c5 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/up_arrow_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/ui/BreezeStyleSheets/light/vmovetoolbar.svg b/src/ui/BreezeStyleSheets/light/vmovetoolbar.svg new file mode 100755 index 0000000..0a30d45 --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/vmovetoolbar.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/ui/BreezeStyleSheets/light/vsepartoolbars.svg b/src/ui/BreezeStyleSheets/light/vsepartoolbars.svg new file mode 100755 index 0000000..00e91ab --- /dev/null +++ b/src/ui/BreezeStyleSheets/light/vsepartoolbars.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ui/qdarkstyle/rc/arrow_down.png b/src/ui/qdarkstyle/rc/arrow_down.png new file mode 100644 index 0000000..4fc454e Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down@2x.png b/src/ui/qdarkstyle/rc/arrow_down@2x.png new file mode 100644 index 0000000..fab22c4 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down_disabled.png b/src/ui/qdarkstyle/rc/arrow_down_disabled.png new file mode 100644 index 0000000..39bd0c1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down_disabled@2x.png b/src/ui/qdarkstyle/rc/arrow_down_disabled@2x.png new file mode 100644 index 0000000..5f3ab00 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down_focus.png b/src/ui/qdarkstyle/rc/arrow_down_focus.png new file mode 100644 index 0000000..5986712 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down_focus.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down_focus@2x.png b/src/ui/qdarkstyle/rc/arrow_down_focus@2x.png new file mode 100644 index 0000000..cef37e8 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down_pressed.png b/src/ui/qdarkstyle/rc/arrow_down_pressed.png new file mode 100644 index 0000000..e1d5d3a Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_down_pressed@2x.png b/src/ui/qdarkstyle/rc/arrow_down_pressed@2x.png new file mode 100644 index 0000000..f54850f Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_down_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left.png b/src/ui/qdarkstyle/rc/arrow_left.png new file mode 100644 index 0000000..bd7d54f Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left@2x.png b/src/ui/qdarkstyle/rc/arrow_left@2x.png new file mode 100644 index 0000000..aa3fcfe Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left_disabled.png b/src/ui/qdarkstyle/rc/arrow_left_disabled.png new file mode 100644 index 0000000..673ad11 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left_disabled@2x.png b/src/ui/qdarkstyle/rc/arrow_left_disabled@2x.png new file mode 100644 index 0000000..56a1c0f Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left_focus.png b/src/ui/qdarkstyle/rc/arrow_left_focus.png new file mode 100644 index 0000000..e7fad8f Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left_focus.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left_focus@2x.png b/src/ui/qdarkstyle/rc/arrow_left_focus@2x.png new file mode 100644 index 0000000..473b6f7 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left_pressed.png b/src/ui/qdarkstyle/rc/arrow_left_pressed.png new file mode 100644 index 0000000..2f69cbf Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_left_pressed@2x.png b/src/ui/qdarkstyle/rc/arrow_left_pressed@2x.png new file mode 100644 index 0000000..2955581 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_left_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right.png b/src/ui/qdarkstyle/rc/arrow_right.png new file mode 100644 index 0000000..26050b8 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right@2x.png b/src/ui/qdarkstyle/rc/arrow_right@2x.png new file mode 100644 index 0000000..efbc8de Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right_disabled.png b/src/ui/qdarkstyle/rc/arrow_right_disabled.png new file mode 100644 index 0000000..1e59a58 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right_disabled@2x.png b/src/ui/qdarkstyle/rc/arrow_right_disabled@2x.png new file mode 100644 index 0000000..a6222d7 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right_focus.png b/src/ui/qdarkstyle/rc/arrow_right_focus.png new file mode 100644 index 0000000..9bdcd85 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right_focus.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right_focus@2x.png b/src/ui/qdarkstyle/rc/arrow_right_focus@2x.png new file mode 100644 index 0000000..e24c3ba Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right_pressed.png b/src/ui/qdarkstyle/rc/arrow_right_pressed.png new file mode 100644 index 0000000..4f4fc8e Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_right_pressed@2x.png b/src/ui/qdarkstyle/rc/arrow_right_pressed@2x.png new file mode 100644 index 0000000..1a85167 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_right_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up.png b/src/ui/qdarkstyle/rc/arrow_up.png new file mode 100644 index 0000000..9f45d8e Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up@2x.png b/src/ui/qdarkstyle/rc/arrow_up@2x.png new file mode 100644 index 0000000..2fe1c6b Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up_disabled.png b/src/ui/qdarkstyle/rc/arrow_up_disabled.png new file mode 100644 index 0000000..a77807c Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up_disabled@2x.png b/src/ui/qdarkstyle/rc/arrow_up_disabled@2x.png new file mode 100644 index 0000000..e12c4ee Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up_focus.png b/src/ui/qdarkstyle/rc/arrow_up_focus.png new file mode 100644 index 0000000..b3970bd Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up_focus.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up_focus@2x.png b/src/ui/qdarkstyle/rc/arrow_up_focus@2x.png new file mode 100644 index 0000000..00c6c44 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up_pressed.png b/src/ui/qdarkstyle/rc/arrow_up_pressed.png new file mode 100644 index 0000000..8f9dcf4 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/arrow_up_pressed@2x.png b/src/ui/qdarkstyle/rc/arrow_up_pressed@2x.png new file mode 100644 index 0000000..40c7f20 Binary files /dev/null and b/src/ui/qdarkstyle/rc/arrow_up_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon.png b/src/ui/qdarkstyle/rc/base_icon.png new file mode 100644 index 0000000..bb00857 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon@2x.png b/src/ui/qdarkstyle/rc/base_icon@2x.png new file mode 100644 index 0000000..bc4ab78 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon@2x.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon_disabled.png b/src/ui/qdarkstyle/rc/base_icon_disabled.png new file mode 100644 index 0000000..bb00857 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon_disabled@2x.png b/src/ui/qdarkstyle/rc/base_icon_disabled@2x.png new file mode 100644 index 0000000..bc4ab78 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon_focus.png b/src/ui/qdarkstyle/rc/base_icon_focus.png new file mode 100644 index 0000000..bb00857 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon_focus.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon_focus@2x.png b/src/ui/qdarkstyle/rc/base_icon_focus@2x.png new file mode 100644 index 0000000..bc4ab78 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon_pressed.png b/src/ui/qdarkstyle/rc/base_icon_pressed.png new file mode 100644 index 0000000..bb00857 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/base_icon_pressed@2x.png b/src/ui/qdarkstyle/rc/base_icon_pressed@2x.png new file mode 100644 index 0000000..bc4ab78 Binary files /dev/null and b/src/ui/qdarkstyle/rc/base_icon_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed.png b/src/ui/qdarkstyle/rc/branch_closed.png new file mode 100644 index 0000000..caa34ce Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed@2x.png b/src/ui/qdarkstyle/rc/branch_closed@2x.png new file mode 100644 index 0000000..bc87d01 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed_disabled.png b/src/ui/qdarkstyle/rc/branch_closed_disabled.png new file mode 100644 index 0000000..a83f842 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed_disabled@2x.png b/src/ui/qdarkstyle/rc/branch_closed_disabled@2x.png new file mode 100644 index 0000000..4bb3f6e Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed_focus.png b/src/ui/qdarkstyle/rc/branch_closed_focus.png new file mode 100644 index 0000000..6d19399 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed_focus.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed_focus@2x.png b/src/ui/qdarkstyle/rc/branch_closed_focus@2x.png new file mode 100644 index 0000000..c02f8a8 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed_pressed.png b/src/ui/qdarkstyle/rc/branch_closed_pressed.png new file mode 100644 index 0000000..17b7784 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/branch_closed_pressed@2x.png b/src/ui/qdarkstyle/rc/branch_closed_pressed@2x.png new file mode 100644 index 0000000..51db176 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_closed_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end.png b/src/ui/qdarkstyle/rc/branch_end.png new file mode 100644 index 0000000..05cf7b6 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end@2x.png b/src/ui/qdarkstyle/rc/branch_end@2x.png new file mode 100644 index 0000000..6df213e Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end_disabled.png b/src/ui/qdarkstyle/rc/branch_end_disabled.png new file mode 100644 index 0000000..8d1c2ce Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end_disabled@2x.png b/src/ui/qdarkstyle/rc/branch_end_disabled@2x.png new file mode 100644 index 0000000..0a9305f Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end_focus.png b/src/ui/qdarkstyle/rc/branch_end_focus.png new file mode 100644 index 0000000..3227c78 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end_focus.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end_focus@2x.png b/src/ui/qdarkstyle/rc/branch_end_focus@2x.png new file mode 100644 index 0000000..331af9c Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end_pressed.png b/src/ui/qdarkstyle/rc/branch_end_pressed.png new file mode 100644 index 0000000..3537347 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/branch_end_pressed@2x.png b/src/ui/qdarkstyle/rc/branch_end_pressed@2x.png new file mode 100644 index 0000000..e5e4bce Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_end_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line.png b/src/ui/qdarkstyle/rc/branch_line.png new file mode 100644 index 0000000..36c7ddf Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line@2x.png b/src/ui/qdarkstyle/rc/branch_line@2x.png new file mode 100644 index 0000000..573c551 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line_disabled.png b/src/ui/qdarkstyle/rc/branch_line_disabled.png new file mode 100644 index 0000000..36f9b4e Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line_disabled@2x.png b/src/ui/qdarkstyle/rc/branch_line_disabled@2x.png new file mode 100644 index 0000000..cf615a5 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line_focus.png b/src/ui/qdarkstyle/rc/branch_line_focus.png new file mode 100644 index 0000000..b81bc5b Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line_focus.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line_focus@2x.png b/src/ui/qdarkstyle/rc/branch_line_focus@2x.png new file mode 100644 index 0000000..c474ed9 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line_pressed.png b/src/ui/qdarkstyle/rc/branch_line_pressed.png new file mode 100644 index 0000000..445aa18 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/branch_line_pressed@2x.png b/src/ui/qdarkstyle/rc/branch_line_pressed@2x.png new file mode 100644 index 0000000..4117b54 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_line_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more.png b/src/ui/qdarkstyle/rc/branch_more.png new file mode 100644 index 0000000..1b91df3 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more@2x.png b/src/ui/qdarkstyle/rc/branch_more@2x.png new file mode 100644 index 0000000..2e1bebe Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more_disabled.png b/src/ui/qdarkstyle/rc/branch_more_disabled.png new file mode 100644 index 0000000..72ec42b Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more_disabled@2x.png b/src/ui/qdarkstyle/rc/branch_more_disabled@2x.png new file mode 100644 index 0000000..65d1d9a Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more_focus.png b/src/ui/qdarkstyle/rc/branch_more_focus.png new file mode 100644 index 0000000..9ff3921 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more_focus.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more_focus@2x.png b/src/ui/qdarkstyle/rc/branch_more_focus@2x.png new file mode 100644 index 0000000..95ac204 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more_pressed.png b/src/ui/qdarkstyle/rc/branch_more_pressed.png new file mode 100644 index 0000000..a4f20e0 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/branch_more_pressed@2x.png b/src/ui/qdarkstyle/rc/branch_more_pressed@2x.png new file mode 100644 index 0000000..b113484 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_more_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open.png b/src/ui/qdarkstyle/rc/branch_open.png new file mode 100644 index 0000000..eee8188 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open@2x.png b/src/ui/qdarkstyle/rc/branch_open@2x.png new file mode 100644 index 0000000..bcfdc84 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open_disabled.png b/src/ui/qdarkstyle/rc/branch_open_disabled.png new file mode 100644 index 0000000..b6d2d47 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open_disabled@2x.png b/src/ui/qdarkstyle/rc/branch_open_disabled@2x.png new file mode 100644 index 0000000..dffe12f Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open_focus.png b/src/ui/qdarkstyle/rc/branch_open_focus.png new file mode 100644 index 0000000..1f7bfdc Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open_focus.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open_focus@2x.png b/src/ui/qdarkstyle/rc/branch_open_focus@2x.png new file mode 100644 index 0000000..3cc22d7 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open_pressed.png b/src/ui/qdarkstyle/rc/branch_open_pressed.png new file mode 100644 index 0000000..db44859 Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/branch_open_pressed@2x.png b/src/ui/qdarkstyle/rc/branch_open_pressed@2x.png new file mode 100644 index 0000000..bdf8b2d Binary files /dev/null and b/src/ui/qdarkstyle/rc/branch_open_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked.png b/src/ui/qdarkstyle/rc/checkbox_checked.png new file mode 100644 index 0000000..5acad08 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked@2x.png b/src/ui/qdarkstyle/rc/checkbox_checked@2x.png new file mode 100644 index 0000000..99e66ca Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked_disabled.png b/src/ui/qdarkstyle/rc/checkbox_checked_disabled.png new file mode 100644 index 0000000..bad9677 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked_disabled@2x.png b/src/ui/qdarkstyle/rc/checkbox_checked_disabled@2x.png new file mode 100644 index 0000000..3c3ea0b Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked_focus.png b/src/ui/qdarkstyle/rc/checkbox_checked_focus.png new file mode 100644 index 0000000..464b573 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked_focus.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked_focus@2x.png b/src/ui/qdarkstyle/rc/checkbox_checked_focus@2x.png new file mode 100644 index 0000000..1c30bd1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked_pressed.png b/src/ui/qdarkstyle/rc/checkbox_checked_pressed.png new file mode 100644 index 0000000..4ca5764 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_checked_pressed@2x.png b/src/ui/qdarkstyle/rc/checkbox_checked_pressed@2x.png new file mode 100644 index 0000000..a617952 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_checked_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate.png new file mode 100644 index 0000000..b1c6e71 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate@2x.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate@2x.png new file mode 100644 index 0000000..0d8feb9 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate_disabled.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate_disabled.png new file mode 100644 index 0000000..04d7da1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate_disabled@2x.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate_disabled@2x.png new file mode 100644 index 0000000..de228aa Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate_focus.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate_focus.png new file mode 100644 index 0000000..f7f6d71 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate_focus.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate_focus@2x.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate_focus@2x.png new file mode 100644 index 0000000..3638a7f Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate_pressed.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate_pressed.png new file mode 100644 index 0000000..31220be Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_indeterminate_pressed@2x.png b/src/ui/qdarkstyle/rc/checkbox_indeterminate_pressed@2x.png new file mode 100644 index 0000000..8d112b1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_indeterminate_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked.png b/src/ui/qdarkstyle/rc/checkbox_unchecked.png new file mode 100644 index 0000000..4e68c78 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked@2x.png b/src/ui/qdarkstyle/rc/checkbox_unchecked@2x.png new file mode 100644 index 0000000..c0c4ec9 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked_disabled.png b/src/ui/qdarkstyle/rc/checkbox_unchecked_disabled.png new file mode 100644 index 0000000..9fb0036 Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked_disabled@2x.png b/src/ui/qdarkstyle/rc/checkbox_unchecked_disabled@2x.png new file mode 100644 index 0000000..8d6c0ed Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked_focus.png b/src/ui/qdarkstyle/rc/checkbox_unchecked_focus.png new file mode 100644 index 0000000..2d6b2fc Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked_focus.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked_focus@2x.png b/src/ui/qdarkstyle/rc/checkbox_unchecked_focus@2x.png new file mode 100644 index 0000000..ed63aaa Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked_pressed.png b/src/ui/qdarkstyle/rc/checkbox_unchecked_pressed.png new file mode 100644 index 0000000..85c6c9b Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/checkbox_unchecked_pressed@2x.png b/src/ui/qdarkstyle/rc/checkbox_unchecked_pressed@2x.png new file mode 100644 index 0000000..2a4b99a Binary files /dev/null and b/src/ui/qdarkstyle/rc/checkbox_unchecked_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal.png b/src/ui/qdarkstyle/rc/line_horizontal.png new file mode 100644 index 0000000..a89a1ed Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal@2x.png b/src/ui/qdarkstyle/rc/line_horizontal@2x.png new file mode 100644 index 0000000..3c6899f Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal_disabled.png b/src/ui/qdarkstyle/rc/line_horizontal_disabled.png new file mode 100644 index 0000000..b89b2c9 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal_disabled@2x.png b/src/ui/qdarkstyle/rc/line_horizontal_disabled@2x.png new file mode 100644 index 0000000..027a030 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal_focus.png b/src/ui/qdarkstyle/rc/line_horizontal_focus.png new file mode 100644 index 0000000..148a2df Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal_focus.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal_focus@2x.png b/src/ui/qdarkstyle/rc/line_horizontal_focus@2x.png new file mode 100644 index 0000000..bdce2bb Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal_pressed.png b/src/ui/qdarkstyle/rc/line_horizontal_pressed.png new file mode 100644 index 0000000..c4587b8 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/line_horizontal_pressed@2x.png b/src/ui/qdarkstyle/rc/line_horizontal_pressed@2x.png new file mode 100644 index 0000000..9210add Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_horizontal_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical.png b/src/ui/qdarkstyle/rc/line_vertical.png new file mode 100644 index 0000000..36c7ddf Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical@2x.png b/src/ui/qdarkstyle/rc/line_vertical@2x.png new file mode 100644 index 0000000..573c551 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical_disabled.png b/src/ui/qdarkstyle/rc/line_vertical_disabled.png new file mode 100644 index 0000000..36f9b4e Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical_disabled@2x.png b/src/ui/qdarkstyle/rc/line_vertical_disabled@2x.png new file mode 100644 index 0000000..cf615a5 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical_focus.png b/src/ui/qdarkstyle/rc/line_vertical_focus.png new file mode 100644 index 0000000..b81bc5b Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical_focus.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical_focus@2x.png b/src/ui/qdarkstyle/rc/line_vertical_focus@2x.png new file mode 100644 index 0000000..c474ed9 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical_pressed.png b/src/ui/qdarkstyle/rc/line_vertical_pressed.png new file mode 100644 index 0000000..445aa18 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/line_vertical_pressed@2x.png b/src/ui/qdarkstyle/rc/line_vertical_pressed@2x.png new file mode 100644 index 0000000..4117b54 Binary files /dev/null and b/src/ui/qdarkstyle/rc/line_vertical_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked.png b/src/ui/qdarkstyle/rc/radio_checked.png new file mode 100644 index 0000000..3521990 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked@2x.png b/src/ui/qdarkstyle/rc/radio_checked@2x.png new file mode 100644 index 0000000..b4db822 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked_disabled.png b/src/ui/qdarkstyle/rc/radio_checked_disabled.png new file mode 100644 index 0000000..6bf1e26 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked_disabled@2x.png b/src/ui/qdarkstyle/rc/radio_checked_disabled@2x.png new file mode 100644 index 0000000..c2c08f9 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked_focus.png b/src/ui/qdarkstyle/rc/radio_checked_focus.png new file mode 100644 index 0000000..a74da48 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked_focus.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked_focus@2x.png b/src/ui/qdarkstyle/rc/radio_checked_focus@2x.png new file mode 100644 index 0000000..3282d3e Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked_pressed.png b/src/ui/qdarkstyle/rc/radio_checked_pressed.png new file mode 100644 index 0000000..06131ab Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/radio_checked_pressed@2x.png b/src/ui/qdarkstyle/rc/radio_checked_pressed@2x.png new file mode 100644 index 0000000..f7b1f57 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_checked_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked.png b/src/ui/qdarkstyle/rc/radio_unchecked.png new file mode 100644 index 0000000..3428257 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked@2x.png b/src/ui/qdarkstyle/rc/radio_unchecked@2x.png new file mode 100644 index 0000000..b34782b Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked_disabled.png b/src/ui/qdarkstyle/rc/radio_unchecked_disabled.png new file mode 100644 index 0000000..1205d7f Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked_disabled@2x.png b/src/ui/qdarkstyle/rc/radio_unchecked_disabled@2x.png new file mode 100644 index 0000000..e050fee Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked_focus.png b/src/ui/qdarkstyle/rc/radio_unchecked_focus.png new file mode 100644 index 0000000..caa245f Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked_focus.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked_focus@2x.png b/src/ui/qdarkstyle/rc/radio_unchecked_focus@2x.png new file mode 100644 index 0000000..dd81932 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked_pressed.png b/src/ui/qdarkstyle/rc/radio_unchecked_pressed.png new file mode 100644 index 0000000..21711dc Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/radio_unchecked_pressed@2x.png b/src/ui/qdarkstyle/rc/radio_unchecked_pressed@2x.png new file mode 100644 index 0000000..1a1b9c2 Binary files /dev/null and b/src/ui/qdarkstyle/rc/radio_unchecked_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal.png new file mode 100644 index 0000000..5dbf8c2 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal@2x.png new file mode 100644 index 0000000..e775854 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal_disabled.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_disabled.png new file mode 100644 index 0000000..0563329 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal_disabled@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_disabled@2x.png new file mode 100644 index 0000000..42eed67 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal_focus.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_focus.png new file mode 100644 index 0000000..d870747 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_focus.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal_focus@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_focus@2x.png new file mode 100644 index 0000000..f292153 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal_pressed.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_pressed.png new file mode 100644 index 0000000..69cc1c5 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_horizontal_pressed@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_pressed@2x.png new file mode 100644 index 0000000..9819881 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_horizontal_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical.png new file mode 100644 index 0000000..4450862 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical@2x.png new file mode 100644 index 0000000..3f0618f Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical_disabled.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical_disabled.png new file mode 100644 index 0000000..1369e44 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical_disabled@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical_disabled@2x.png new file mode 100644 index 0000000..5820962 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical_focus.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical_focus.png new file mode 100644 index 0000000..28cedf1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical_focus.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical_focus@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical_focus@2x.png new file mode 100644 index 0000000..828ed59 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical_pressed.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical_pressed.png new file mode 100644 index 0000000..2b413d3 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_move_vertical_pressed@2x.png b/src/ui/qdarkstyle/rc/toolbar_move_vertical_pressed@2x.png new file mode 100644 index 0000000..4e80a0b Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_move_vertical_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal.png new file mode 100644 index 0000000..a1e84c1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal@2x.png new file mode 100644 index 0000000..664323f Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_disabled.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_disabled.png new file mode 100644 index 0000000..bedbab4 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_disabled@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_disabled@2x.png new file mode 100644 index 0000000..d421e81 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_focus.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_focus.png new file mode 100644 index 0000000..1632c59 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_focus.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_focus@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_focus@2x.png new file mode 100644 index 0000000..da41f2c Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_pressed.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_pressed.png new file mode 100644 index 0000000..e03fb80 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_pressed@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_pressed@2x.png new file mode 100644 index 0000000..64a94a4 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_horizontal_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical.png new file mode 100644 index 0000000..86688ee Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical@2x.png new file mode 100644 index 0000000..e4efe8c Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical_disabled.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_disabled.png new file mode 100644 index 0000000..2445368 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical_disabled@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_disabled@2x.png new file mode 100644 index 0000000..393920e Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical_focus.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_focus.png new file mode 100644 index 0000000..d286348 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_focus.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical_focus@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_focus@2x.png new file mode 100644 index 0000000..ad701df Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical_pressed.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_pressed.png new file mode 100644 index 0000000..7f09d5a Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/toolbar_separator_vertical_pressed@2x.png b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_pressed@2x.png new file mode 100644 index 0000000..08d83e1 Binary files /dev/null and b/src/ui/qdarkstyle/rc/toolbar_separator_vertical_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/transparent.png b/src/ui/qdarkstyle/rc/transparent.png new file mode 100644 index 0000000..6775361 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent.png differ diff --git a/src/ui/qdarkstyle/rc/transparent@2x.png b/src/ui/qdarkstyle/rc/transparent@2x.png new file mode 100644 index 0000000..4012944 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent@2x.png differ diff --git a/src/ui/qdarkstyle/rc/transparent_disabled.png b/src/ui/qdarkstyle/rc/transparent_disabled.png new file mode 100644 index 0000000..6775361 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/transparent_disabled@2x.png b/src/ui/qdarkstyle/rc/transparent_disabled@2x.png new file mode 100644 index 0000000..4012944 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/transparent_focus.png b/src/ui/qdarkstyle/rc/transparent_focus.png new file mode 100644 index 0000000..6775361 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent_focus.png differ diff --git a/src/ui/qdarkstyle/rc/transparent_focus@2x.png b/src/ui/qdarkstyle/rc/transparent_focus@2x.png new file mode 100644 index 0000000..4012944 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/transparent_pressed.png b/src/ui/qdarkstyle/rc/transparent_pressed.png new file mode 100644 index 0000000..6775361 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/transparent_pressed@2x.png b/src/ui/qdarkstyle/rc/transparent_pressed@2x.png new file mode 100644 index 0000000..4012944 Binary files /dev/null and b/src/ui/qdarkstyle/rc/transparent_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_close.png b/src/ui/qdarkstyle/rc/window_close.png new file mode 100644 index 0000000..c7ac3e7 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close.png differ diff --git a/src/ui/qdarkstyle/rc/window_close@2x.png b/src/ui/qdarkstyle/rc/window_close@2x.png new file mode 100644 index 0000000..b11aa08 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_close_disabled.png b/src/ui/qdarkstyle/rc/window_close_disabled.png new file mode 100644 index 0000000..d60edac Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/window_close_disabled@2x.png b/src/ui/qdarkstyle/rc/window_close_disabled@2x.png new file mode 100644 index 0000000..b571b12 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_close_focus.png b/src/ui/qdarkstyle/rc/window_close_focus.png new file mode 100644 index 0000000..c970d3f Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close_focus.png differ diff --git a/src/ui/qdarkstyle/rc/window_close_focus@2x.png b/src/ui/qdarkstyle/rc/window_close_focus@2x.png new file mode 100644 index 0000000..f87ac73 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_close_pressed.png b/src/ui/qdarkstyle/rc/window_close_pressed.png new file mode 100644 index 0000000..c6da5c8 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/window_close_pressed@2x.png b/src/ui/qdarkstyle/rc/window_close_pressed@2x.png new file mode 100644 index 0000000..749009c Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_close_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip.png b/src/ui/qdarkstyle/rc/window_grip.png new file mode 100644 index 0000000..e3df93b Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip@2x.png b/src/ui/qdarkstyle/rc/window_grip@2x.png new file mode 100644 index 0000000..c5a0dcc Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip_disabled.png b/src/ui/qdarkstyle/rc/window_grip_disabled.png new file mode 100644 index 0000000..3c0d86e Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip_disabled@2x.png b/src/ui/qdarkstyle/rc/window_grip_disabled@2x.png new file mode 100644 index 0000000..f57b353 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip_focus.png b/src/ui/qdarkstyle/rc/window_grip_focus.png new file mode 100644 index 0000000..2d35380 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip_focus.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip_focus@2x.png b/src/ui/qdarkstyle/rc/window_grip_focus@2x.png new file mode 100644 index 0000000..d92f09b Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip_pressed.png b/src/ui/qdarkstyle/rc/window_grip_pressed.png new file mode 100644 index 0000000..89d5908 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/window_grip_pressed@2x.png b/src/ui/qdarkstyle/rc/window_grip_pressed@2x.png new file mode 100644 index 0000000..ef2dc70 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_grip_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize.png b/src/ui/qdarkstyle/rc/window_minimize.png new file mode 100644 index 0000000..a850c48 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize@2x.png b/src/ui/qdarkstyle/rc/window_minimize@2x.png new file mode 100644 index 0000000..83b82b6 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize_disabled.png b/src/ui/qdarkstyle/rc/window_minimize_disabled.png new file mode 100644 index 0000000..d66d070 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize_disabled@2x.png b/src/ui/qdarkstyle/rc/window_minimize_disabled@2x.png new file mode 100644 index 0000000..3a7f2af Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize_focus.png b/src/ui/qdarkstyle/rc/window_minimize_focus.png new file mode 100644 index 0000000..f533977 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize_focus.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize_focus@2x.png b/src/ui/qdarkstyle/rc/window_minimize_focus@2x.png new file mode 100644 index 0000000..a2b376a Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize_pressed.png b/src/ui/qdarkstyle/rc/window_minimize_pressed.png new file mode 100644 index 0000000..ac050a0 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/window_minimize_pressed@2x.png b/src/ui/qdarkstyle/rc/window_minimize_pressed@2x.png new file mode 100644 index 0000000..b701572 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_minimize_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock.png b/src/ui/qdarkstyle/rc/window_undock.png new file mode 100644 index 0000000..fab0e72 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock@2x.png b/src/ui/qdarkstyle/rc/window_undock@2x.png new file mode 100644 index 0000000..9574d4a Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock_disabled.png b/src/ui/qdarkstyle/rc/window_undock_disabled.png new file mode 100644 index 0000000..a2e1649 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock_disabled.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock_disabled@2x.png b/src/ui/qdarkstyle/rc/window_undock_disabled@2x.png new file mode 100644 index 0000000..b6d5c6c Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock_disabled@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock_focus.png b/src/ui/qdarkstyle/rc/window_undock_focus.png new file mode 100644 index 0000000..2932dea Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock_focus.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock_focus@2x.png b/src/ui/qdarkstyle/rc/window_undock_focus@2x.png new file mode 100644 index 0000000..62de7ba Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock_focus@2x.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock_pressed.png b/src/ui/qdarkstyle/rc/window_undock_pressed.png new file mode 100644 index 0000000..4ccf8a5 Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock_pressed.png differ diff --git a/src/ui/qdarkstyle/rc/window_undock_pressed@2x.png b/src/ui/qdarkstyle/rc/window_undock_pressed@2x.png new file mode 100644 index 0000000..fba29fc Binary files /dev/null and b/src/ui/qdarkstyle/rc/window_undock_pressed@2x.png differ diff --git a/src/ui/qdarkstyle/style.qrc b/src/ui/qdarkstyle/style.qrc new file mode 100644 index 0000000..e301854 --- /dev/null +++ b/src/ui/qdarkstyle/style.qrc @@ -0,0 +1,216 @@ + + + + rc/arrow_down.png + rc/arrow_down@2x.png + rc/arrow_down_disabled.png + rc/arrow_down_disabled@2x.png + rc/arrow_down_focus.png + rc/arrow_down_focus@2x.png + rc/arrow_down_pressed.png + rc/arrow_down_pressed@2x.png + rc/arrow_left.png + rc/arrow_left@2x.png + rc/arrow_left_disabled.png + rc/arrow_left_disabled@2x.png + rc/arrow_left_focus.png + rc/arrow_left_focus@2x.png + rc/arrow_left_pressed.png + rc/arrow_left_pressed@2x.png + rc/arrow_right.png + rc/arrow_right@2x.png + rc/arrow_right_disabled.png + rc/arrow_right_disabled@2x.png + rc/arrow_right_focus.png + rc/arrow_right_focus@2x.png + rc/arrow_right_pressed.png + rc/arrow_right_pressed@2x.png + rc/arrow_up.png + rc/arrow_up@2x.png + rc/arrow_up_disabled.png + rc/arrow_up_disabled@2x.png + rc/arrow_up_focus.png + rc/arrow_up_focus@2x.png + rc/arrow_up_pressed.png + rc/arrow_up_pressed@2x.png + rc/base_icon.png + rc/base_icon@2x.png + rc/base_icon_disabled.png + rc/base_icon_disabled@2x.png + rc/base_icon_focus.png + rc/base_icon_focus@2x.png + rc/base_icon_pressed.png + rc/base_icon_pressed@2x.png + rc/branch_closed.png + rc/branch_closed@2x.png + rc/branch_closed_disabled.png + rc/branch_closed_disabled@2x.png + rc/branch_closed_focus.png + rc/branch_closed_focus@2x.png + rc/branch_closed_pressed.png + rc/branch_closed_pressed@2x.png + rc/branch_end.png + rc/branch_end@2x.png + rc/branch_end_disabled.png + rc/branch_end_disabled@2x.png + rc/branch_end_focus.png + rc/branch_end_focus@2x.png + rc/branch_end_pressed.png + rc/branch_end_pressed@2x.png + rc/branch_line.png + rc/branch_line@2x.png + rc/branch_line_disabled.png + rc/branch_line_disabled@2x.png + rc/branch_line_focus.png + rc/branch_line_focus@2x.png + rc/branch_line_pressed.png + rc/branch_line_pressed@2x.png + rc/branch_more.png + rc/branch_more@2x.png + rc/branch_more_disabled.png + rc/branch_more_disabled@2x.png + rc/branch_more_focus.png + rc/branch_more_focus@2x.png + rc/branch_more_pressed.png + rc/branch_more_pressed@2x.png + rc/branch_open.png + rc/branch_open@2x.png + rc/branch_open_disabled.png + rc/branch_open_disabled@2x.png + rc/branch_open_focus.png + rc/branch_open_focus@2x.png + rc/branch_open_pressed.png + rc/branch_open_pressed@2x.png + rc/checkbox_checked.png + rc/checkbox_checked@2x.png + rc/checkbox_checked_disabled.png + rc/checkbox_checked_disabled@2x.png + rc/checkbox_checked_focus.png + rc/checkbox_checked_focus@2x.png + rc/checkbox_checked_pressed.png + rc/checkbox_checked_pressed@2x.png + rc/checkbox_indeterminate.png + rc/checkbox_indeterminate@2x.png + rc/checkbox_indeterminate_disabled.png + rc/checkbox_indeterminate_disabled@2x.png + rc/checkbox_indeterminate_focus.png + rc/checkbox_indeterminate_focus@2x.png + rc/checkbox_indeterminate_pressed.png + rc/checkbox_indeterminate_pressed@2x.png + rc/checkbox_unchecked.png + rc/checkbox_unchecked@2x.png + rc/checkbox_unchecked_disabled.png + rc/checkbox_unchecked_disabled@2x.png + rc/checkbox_unchecked_focus.png + rc/checkbox_unchecked_focus@2x.png + rc/checkbox_unchecked_pressed.png + rc/checkbox_unchecked_pressed@2x.png + rc/line_horizontal.png + rc/line_horizontal@2x.png + rc/line_horizontal_disabled.png + rc/line_horizontal_disabled@2x.png + rc/line_horizontal_focus.png + rc/line_horizontal_focus@2x.png + rc/line_horizontal_pressed.png + rc/line_horizontal_pressed@2x.png + rc/line_vertical.png + rc/line_vertical@2x.png + rc/line_vertical_disabled.png + rc/line_vertical_disabled@2x.png + rc/line_vertical_focus.png + rc/line_vertical_focus@2x.png + rc/line_vertical_pressed.png + rc/line_vertical_pressed@2x.png + rc/radio_checked.png + rc/radio_checked@2x.png + rc/radio_checked_disabled.png + rc/radio_checked_disabled@2x.png + rc/radio_checked_focus.png + rc/radio_checked_focus@2x.png + rc/radio_checked_pressed.png + rc/radio_checked_pressed@2x.png + rc/radio_unchecked.png + rc/radio_unchecked@2x.png + rc/radio_unchecked_disabled.png + rc/radio_unchecked_disabled@2x.png + rc/radio_unchecked_focus.png + rc/radio_unchecked_focus@2x.png + rc/radio_unchecked_pressed.png + rc/radio_unchecked_pressed@2x.png + rc/toolbar_move_horizontal.png + rc/toolbar_move_horizontal@2x.png + rc/toolbar_move_horizontal_disabled.png + rc/toolbar_move_horizontal_disabled@2x.png + rc/toolbar_move_horizontal_focus.png + rc/toolbar_move_horizontal_focus@2x.png + rc/toolbar_move_horizontal_pressed.png + rc/toolbar_move_horizontal_pressed@2x.png + rc/toolbar_move_vertical.png + rc/toolbar_move_vertical@2x.png + rc/toolbar_move_vertical_disabled.png + rc/toolbar_move_vertical_disabled@2x.png + rc/toolbar_move_vertical_focus.png + rc/toolbar_move_vertical_focus@2x.png + rc/toolbar_move_vertical_pressed.png + rc/toolbar_move_vertical_pressed@2x.png + rc/toolbar_separator_horizontal.png + rc/toolbar_separator_horizontal@2x.png + rc/toolbar_separator_horizontal_disabled.png + rc/toolbar_separator_horizontal_disabled@2x.png + rc/toolbar_separator_horizontal_focus.png + rc/toolbar_separator_horizontal_focus@2x.png + rc/toolbar_separator_horizontal_pressed.png + rc/toolbar_separator_horizontal_pressed@2x.png + rc/toolbar_separator_vertical.png + rc/toolbar_separator_vertical@2x.png + rc/toolbar_separator_vertical_disabled.png + rc/toolbar_separator_vertical_disabled@2x.png + rc/toolbar_separator_vertical_focus.png + rc/toolbar_separator_vertical_focus@2x.png + rc/toolbar_separator_vertical_pressed.png + rc/toolbar_separator_vertical_pressed@2x.png + rc/transparent.png + rc/transparent@2x.png + rc/transparent_disabled.png + rc/transparent_disabled@2x.png + rc/transparent_focus.png + rc/transparent_focus@2x.png + rc/transparent_pressed.png + rc/transparent_pressed@2x.png + rc/window_close.png + rc/window_close@2x.png + rc/window_close_disabled.png + rc/window_close_disabled@2x.png + rc/window_close_focus.png + rc/window_close_focus@2x.png + rc/window_close_pressed.png + rc/window_close_pressed@2x.png + rc/window_grip.png + rc/window_grip@2x.png + rc/window_grip_disabled.png + rc/window_grip_disabled@2x.png + rc/window_grip_focus.png + rc/window_grip_focus@2x.png + rc/window_grip_pressed.png + rc/window_grip_pressed@2x.png + rc/window_minimize.png + rc/window_minimize@2x.png + rc/window_minimize_disabled.png + rc/window_minimize_disabled@2x.png + rc/window_minimize_focus.png + rc/window_minimize_focus@2x.png + rc/window_minimize_pressed.png + rc/window_minimize_pressed@2x.png + rc/window_undock.png + rc/window_undock@2x.png + rc/window_undock_disabled.png + rc/window_undock_disabled@2x.png + rc/window_undock_focus.png + rc/window_undock_focus@2x.png + rc/window_undock_pressed.png + rc/window_undock_pressed@2x.png + + + style.qss + + diff --git a/src/ui/qdarkstyle/style.qss b/src/ui/qdarkstyle/style.qss new file mode 100644 index 0000000..9b1368d --- /dev/null +++ b/src/ui/qdarkstyle/style.qss @@ -0,0 +1,2184 @@ +/* QDarkStyleSheet ----------------------------------------------------------- + +This is the main style sheet, the palette has nine colors. + +It is based on three selecting colors, three greyish (background) colors +plus three whitish (foreground) colors. Each set of widgets of the same +type have a header like this: + + ------------------ + GroupName -------- + ------------------ + +And each widget is separated with a header like this: + + QWidgetName ------ + +This makes more easy to find and change some css field. The basic +configuration is described bellow. + + BACKGROUND ----------- + + Light (unpressed) + Normal (border, disabled, pressed, checked, toolbars, menus) + Dark (background) + + FOREGROUND ----------- + + Light (texts/labels) + Normal (not used yet) + Dark (disabled texts) + + SELECTION ------------ + + Light (selection/hover/active) + Normal (selected) + Dark (selected disabled) + +If a stranger configuration is required because of a bugfix or anything +else, keep the comment on the line above so nobody changes it, including the +issue number. + +*/ +/* + +See Qt documentation: + + - https://doc.qt.io/qt-5/stylesheet.html + - https://doc.qt.io/qt-5/stylesheet-reference.html + - https://doc.qt.io/qt-5/stylesheet-examples.html + +--------------------------------------------------------------------------- */ +/* QWidget ---------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QWidget { + background-color: #19232D; + border: 0px solid #32414B; + padding: 0px; + color: #F0F0F0; + selection-background-color: #1464A0; + selection-color: #F0F0F0; +} + +QWidget:disabled { + background-color: #19232D; + color: #787878; + selection-background-color: #14506E; + selection-color: #787878; +} + +QWidget::item:selected { + background-color: #1464A0; +} + +QWidget::item:hover { + color: #32414B; +} + +/* QMainWindow ------------------------------------------------------------ + +This adjusts the splitter in the dock widget, not qsplitter +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmainwindow + +--------------------------------------------------------------------------- */ +QMainWindow::separator { + background-color: #32414B; + border: 0px solid #19232D; + spacing: 0px; + padding: 2px; +} + +QMainWindow::separator:hover { + background-color: #505F69; + border: 0px solid #148CD2; +} + +QMainWindow::separator:horizontal { + width: 5px; + margin-top: 2px; + margin-bottom: 2px; + image: url(":/qss_icons/rc/toolbar_separator_vertical.png"); +} + +QMainWindow::separator:vertical { + height: 5px; + margin-left: 2px; + margin-right: 2px; + image: url(":/qss_icons/rc/toolbar_separator_horizontal.png"); +} + +/* QToolTip --------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtooltip + +--------------------------------------------------------------------------- */ +QToolTip { + background-color: #148CD2; + border: 1px solid #19232D; + color: #19232D; + /* Remove padding, for fix combo box tooltip */ + padding: 0px; + /* Remove opacity, fix #174 - may need to use RGBA */ +} + +/* QStatusBar ------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qstatusbar + +--------------------------------------------------------------------------- */ +QStatusBar { + border: 1px solid #32414B; + /* Fixes Spyder #9120, #9121 */ + background: #32414B; + /* Fixes #205, white vertical borders separating items */ +} + +QStatusBar::item { + border: none; +} + +QStatusBar QToolTip { + background-color: #148CD2; + border: 1px solid #19232D; + color: #19232D; + /* Remove padding, for fix combo box tooltip */ + padding: 0px; + /* Reducing transparency to read better */ + opacity: 230; +} + +QStatusBar QLabel { + /* Fixes Spyder #9120, #9121 */ + background: transparent; +} + +/* QCheckBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcheckbox + +--------------------------------------------------------------------------- */ +QCheckBox { + background-color: #19232D; + color: #F0F0F0; + spacing: 4px; + outline: none; + padding-top: 4px; + padding-bottom: 4px; +} + +QCheckBox:focus { + border: none; +} + +QCheckBox QWidget:disabled { + background-color: #19232D; + color: #787878; +} + +QCheckBox::indicator { + margin-left: 4px; + height: 16px; + width: 16px; +} + +QCheckBox::indicator:unchecked { + image: url(":/qss_icons/rc/checkbox_unchecked.png"); +} + +QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:focus, QCheckBox::indicator:unchecked:pressed { + border: none; + image: url(":/qss_icons/rc/checkbox_unchecked_focus.png"); +} + +QCheckBox::indicator:unchecked:disabled { + image: url(":/qss_icons/rc/checkbox_unchecked_disabled.png"); +} + +QCheckBox::indicator:checked { + image: url(":/qss_icons/rc/checkbox_checked.png"); +} + +QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:focus, QCheckBox::indicator:checked:pressed { + border: none; + image: url(":/qss_icons/rc/checkbox_checked_focus.png"); +} + +QCheckBox::indicator:checked:disabled { + image: url(":/qss_icons/rc/checkbox_checked_disabled.png"); +} + +QCheckBox::indicator:indeterminate { + image: url(":/qss_icons/rc/checkbox_indeterminate.png"); +} + +QCheckBox::indicator:indeterminate:disabled { + image: url(":/qss_icons/rc/checkbox_indeterminate_disabled.png"); +} + +QCheckBox::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed { + image: url(":/qss_icons/rc/checkbox_indeterminate_focus.png"); +} + +/* QGroupBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qgroupbox + +--------------------------------------------------------------------------- */ +QGroupBox { + font-weight: bold; + border: 1px solid #32414B; + border-radius: 4px; + padding: 4px; + margin-top: 16px; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + left: 3px; + padding-left: 3px; + padding-right: 5px; + padding-top: 8px; + padding-bottom: 16px; +} + +QGroupBox::indicator { + margin-left: 2px; + height: 12px; + width: 12px; +} + +QGroupBox::indicator:unchecked:hover, QGroupBox::indicator:unchecked:focus, QGroupBox::indicator:unchecked:pressed { + border: none; + image: url(":/qss_icons/rc/checkbox_unchecked_focus.png"); +} + +QGroupBox::indicator:unchecked:disabled { + image: url(":/qss_icons/rc/checkbox_unchecked_disabled.png"); +} + +QGroupBox::indicator:checked:hover, QGroupBox::indicator:checked:focus, QGroupBox::indicator:checked:pressed { + border: none; + image: url(":/qss_icons/rc/checkbox_checked_focus.png"); +} + +QGroupBox::indicator:checked:disabled { + image: url(":/qss_icons/rc/checkbox_checked_disabled.png"); +} + +/* QRadioButton ----------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qradiobutton + +--------------------------------------------------------------------------- */ +QRadioButton { + background-color: #19232D; + color: #F0F0F0; + spacing: 4px; + padding: 0px; + border: none; + outline: none; +} + +QRadioButton:focus { + border: none; +} + +QRadioButton:disabled { + background-color: #19232D; + color: #787878; + border: none; + outline: none; +} + +QRadioButton QWidget { + background-color: #19232D; + color: #F0F0F0; + spacing: 0px; + padding: 0px; + outline: none; + border: none; +} + +QRadioButton::indicator { + border: none; + outline: none; + margin-left: 4px; + height: 16px; + width: 16px; +} + +QRadioButton::indicator:unchecked { + image: url(":/qss_icons/rc/radio_unchecked.png"); +} + +QRadioButton::indicator:unchecked:hover, QRadioButton::indicator:unchecked:focus, QRadioButton::indicator:unchecked:pressed { + border: none; + outline: none; + image: url(":/qss_icons/rc/radio_unchecked_focus.png"); +} + +QRadioButton::indicator:unchecked:disabled { + image: url(":/qss_icons/rc/radio_unchecked_disabled.png"); +} + +QRadioButton::indicator:checked { + border: none; + outline: none; + image: url(":/qss_icons/rc/radio_checked.png"); +} + +QRadioButton::indicator:checked:hover, QRadioButton::indicator:checked:focus, QRadioButton::indicator:checked:pressed { + border: none; + outline: none; + image: url(":/qss_icons/rc/radio_checked_focus.png"); +} + +QRadioButton::indicator:checked:disabled { + outline: none; + image: url(":/qss_icons/rc/radio_checked_disabled.png"); +} + +/* QMenuBar --------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenubar + +--------------------------------------------------------------------------- */ +QMenuBar { + background-color: #32414B; + padding: 2px; + border: 1px solid #19232D; + color: #F0F0F0; +} + +QMenuBar:focus { + border: 1px solid #148CD2; +} + +QMenuBar::item { + background: transparent; + padding: 4px; +} + +QMenuBar::item:selected { + padding: 4px; + background: transparent; + border: 0px solid #32414B; +} + +QMenuBar::item:pressed { + padding: 4px; + border: 0px solid #32414B; + background-color: #148CD2; + color: #F0F0F0; + margin-bottom: 0px; + padding-bottom: 0px; +} + +/* QMenu ------------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenu + +--------------------------------------------------------------------------- */ +QMenu { + border: 0px solid #32414B; + color: #F0F0F0; + margin: 0px; +} + +QMenu::separator { + height: 1px; + background-color: #505F69; + color: #F0F0F0; +} + +QMenu::icon { + margin: 0px; + padding-left: 8px; +} + +QMenu::item { + background-color: #32414B; + padding: 4px 24px 4px 24px; + /* Reserve space for selection border */ + border: 1px transparent #32414B; +} + +QMenu::item:selected { + color: #F0F0F0; +} + +QMenu::indicator { + width: 12px; + height: 12px; + padding-left: 6px; + /* non-exclusive indicator = check box style indicator (see QActionGroup::setExclusive) */ + /* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */ +} + +QMenu::indicator:non-exclusive:unchecked { + image: url(":/qss_icons/rc/checkbox_unchecked.png"); +} + +QMenu::indicator:non-exclusive:unchecked:selected { + image: url(":/qss_icons/rc/checkbox_unchecked_disabled.png"); +} + +QMenu::indicator:non-exclusive:checked { + image: url(":/qss_icons/rc/checkbox_checked.png"); +} + +QMenu::indicator:non-exclusive:checked:selected { + image: url(":/qss_icons/rc/checkbox_checked_disabled.png"); +} + +QMenu::indicator:exclusive:unchecked { + image: url(":/qss_icons/rc/radio_unchecked.png"); +} + +QMenu::indicator:exclusive:unchecked:selected { + image: url(":/qss_icons/rc/radio_unchecked_disabled.png"); +} + +QMenu::indicator:exclusive:checked { + image: url(":/qss_icons/rc/radio_checked.png"); +} + +QMenu::indicator:exclusive:checked:selected { + image: url(":/qss_icons/rc/radio_checked_disabled.png"); +} + +QMenu::right-arrow { + margin: 5px; + image: url(":/qss_icons/rc/arrow_right.png"); + height: 12px; + width: 12px; +} + +/* QAbstractItemView ------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox + +--------------------------------------------------------------------------- */ +QAbstractItemView { + alternate-background-color: #19232D; + color: #F0F0F0; + border: 1px solid #32414B; + border-radius: 4px; +} + +QAbstractItemView QLineEdit { + padding: 2px; +} + +/* QAbstractScrollArea ---------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qabstractscrollarea + +--------------------------------------------------------------------------- */ +QAbstractScrollArea { + background-color: #19232D; + border: 1px solid #32414B; + border-radius: 4px; + padding: 2px; + /* fix #159 */ + min-height: 1.25em; + /* fix #159 */ + color: #F0F0F0; +} + +QAbstractScrollArea:disabled { + color: #787878; +} + +/* QScrollArea ------------------------------------------------------------ + +--------------------------------------------------------------------------- */ +QScrollArea QWidget QWidget:disabled { + background-color: #19232D; +} + +/* QScrollBar ------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qscrollbar + +--------------------------------------------------------------------------- */ +QScrollBar:horizontal { + height: 16px; + margin: 2px 16px 2px 16px; + border: 1px solid #32414B; + border-radius: 4px; + background-color: #19232D; +} + +QScrollBar:vertical { + background-color: #19232D; + width: 16px; + margin: 16px 2px 16px 2px; + border: 1px solid #32414B; + border-radius: 4px; +} + +QScrollBar::handle:horizontal { + background-color: #787878; + border: 1px solid #32414B; + border-radius: 4px; + min-width: 8px; +} + +QScrollBar::handle:horizontal:hover { + background-color: #148CD2; + border: 1px solid #148CD2; + border-radius: 4px; + min-width: 8px; +} + +QScrollBar::handle:horizontal:focus { + border: 1px solid #1464A0; +} + +QScrollBar::handle:vertical { + background-color: #787878; + border: 1px solid #32414B; + min-height: 8px; + border-radius: 4px; +} + +QScrollBar::handle:vertical:hover { + background-color: #148CD2; + border: 1px solid #148CD2; + border-radius: 4px; + min-height: 8px; +} + +QScrollBar::handle:vertical:focus { + border: 1px solid #1464A0; +} + +QScrollBar::add-line:horizontal { + margin: 0px 0px 0px 0px; + border-image: url(":/qss_icons/rc/arrow_right_disabled.png"); + height: 12px; + width: 12px; + subcontrol-position: right; + subcontrol-origin: margin; +} + +QScrollBar::add-line:horizontal:hover, QScrollBar::add-line:horizontal:on { + border-image: url(":/qss_icons/rc/arrow_right.png"); + height: 12px; + width: 12px; + subcontrol-position: right; + subcontrol-origin: margin; +} + +QScrollBar::add-line:vertical { + margin: 3px 0px 3px 0px; + border-image: url(":/qss_icons/rc/arrow_down_disabled.png"); + height: 12px; + width: 12px; + subcontrol-position: bottom; + subcontrol-origin: margin; +} + +QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on { + border-image: url(":/qss_icons/rc/arrow_down.png"); + height: 12px; + width: 12px; + subcontrol-position: bottom; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:horizontal { + margin: 0px 3px 0px 3px; + border-image: url(":/qss_icons/rc/arrow_left_disabled.png"); + height: 12px; + width: 12px; + subcontrol-position: left; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on { + border-image: url(":/qss_icons/rc/arrow_left.png"); + height: 12px; + width: 12px; + subcontrol-position: left; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:vertical { + margin: 3px 0px 3px 0px; + border-image: url(":/qss_icons/rc/arrow_up_disabled.png"); + height: 12px; + width: 12px; + subcontrol-position: top; + subcontrol-origin: margin; +} + +QScrollBar::sub-line:vertical:hover, QScrollBar::sub-line:vertical:on { + border-image: url(":/qss_icons/rc/arrow_up.png"); + height: 12px; + width: 12px; + subcontrol-position: top; + subcontrol-origin: margin; +} + +QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal { + background: none; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { + background: none; +} + +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + background: none; +} + +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + background: none; +} + +/* QTextEdit -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-specific-widgets + +--------------------------------------------------------------------------- */ +QTextEdit { + background-color: #19232D; + color: #F0F0F0; + border-radius: 4px; + border: 1px solid #32414B; +} + +QTextEdit:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QTextEdit:focus { + border: 1px solid #1464A0; +} + +QTextEdit:selected { + background: #1464A0; + color: #32414B; +} + +/* QPlainTextEdit --------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QPlainTextEdit { + background-color: #19232D; + color: #F0F0F0; + border-radius: 4px; + border: 1px solid #32414B; +} + +QPlainTextEdit:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QPlainTextEdit:focus { + border: 1px solid #1464A0; +} + +QPlainTextEdit:selected { + background: #1464A0; + color: #32414B; +} + +/* QSizeGrip -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qsizegrip + +--------------------------------------------------------------------------- */ +QSizeGrip { + background: transparent; + width: 12px; + height: 12px; + image: url(":/qss_icons/rc/window_grip.png"); +} + +/* QStackedWidget --------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QStackedWidget { + padding: 2px; + border: 1px solid #32414B; + border: 1px solid #19232D; +} + +/* QToolBar --------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbar + +--------------------------------------------------------------------------- */ +QToolBar { + background-color: #32414B; + border-bottom: 1px solid #19232D; + padding: 2px; + font-weight: bold; + spacing: 2px; +} + +QToolBar QToolButton { + background-color: #32414B; + border: 1px solid #32414B; +} + +QToolBar QToolButton:hover { + border: 1px solid #148CD2; +} + +QToolBar QToolButton:checked { + border: 1px solid #19232D; + background-color: #19232D; +} + +QToolBar QToolButton:checked:hover { + border: 1px solid #148CD2; +} + +QToolBar::handle:horizontal { + width: 16px; + image: url(":/qss_icons/rc/toolbar_move_horizontal.png"); +} + +QToolBar::handle:vertical { + height: 16px; + image: url(":/qss_icons/rc/toolbar_move_vertical.png"); +} + +QToolBar::separator:horizontal { + width: 16px; + image: url(":/qss_icons/rc/toolbar_separator_horizontal.png"); +} + +QToolBar::separator:vertical { + height: 16px; + image: url(":/qss_icons/rc/toolbar_separator_vertical.png"); +} + +QToolButton#qt_toolbar_ext_button { + background: #32414B; + border: 0px; + color: #F0F0F0; + image: url(":/qss_icons/rc/arrow_right.png"); +} + +/* QAbstractSpinBox ------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QAbstractSpinBox { + background-color: #19232D; + border: 1px solid #32414B; + color: #F0F0F0; + /* This fixes 103, 111 */ + padding-top: 2px; + /* This fixes 103, 111 */ + padding-bottom: 2px; + padding-left: 4px; + padding-right: 4px; + border-radius: 4px; + /* min-width: 5px; removed to fix 109 */ +} + +QAbstractSpinBox:up-button { + background-color: transparent #19232D; + subcontrol-origin: border; + subcontrol-position: top right; + border-left: 1px solid #32414B; + border-bottom: 1px solid #32414B; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin: 1px; + width: 12px; + margin-bottom: -1px; +} + +QAbstractSpinBox::up-arrow, QAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off { + image: url(":/qss_icons/rc/arrow_up_disabled.png"); + height: 8px; + width: 8px; +} + +QAbstractSpinBox::up-arrow:hover { + image: url(":/qss_icons/rc/arrow_up.png"); +} + +QAbstractSpinBox:down-button { + background-color: transparent #19232D; + subcontrol-origin: border; + subcontrol-position: bottom right; + border-left: 1px solid #32414B; + border-top: 1px solid #32414B; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin: 1px; + width: 12px; + margin-top: -1px; +} + +QAbstractSpinBox::down-arrow, QAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off { + image: url(":/qss_icons/rc/arrow_down_disabled.png"); + height: 8px; + width: 8px; +} + +QAbstractSpinBox::down-arrow:hover { + image: url(":/qss_icons/rc/arrow_down.png"); +} + +QAbstractSpinBox:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QAbstractSpinBox:focus { + border: 1px solid #1464A0; +} + +QAbstractSpinBox:selected { + background: #1464A0; + color: #32414B; +} + +/* ------------------------------------------------------------------------ */ +/* DISPLAYS --------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* QLabel ----------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qframe + +--------------------------------------------------------------------------- */ +QLabel { + background-color: #19232D; + border: 0px solid #32414B; + padding: 2px; + margin: 0px; + color: #F0F0F0; +} + +QLabel:disabled { + background-color: #19232D; + border: 0px solid #32414B; + color: #787878; +} + +/* QTextBrowser ----------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qabstractscrollarea + +--------------------------------------------------------------------------- */ +QTextBrowser { + background-color: #19232D; + border: 1px solid #32414B; + color: #F0F0F0; + border-radius: 4px; +} + +QTextBrowser:disabled { + background-color: #19232D; + border: 1px solid #32414B; + color: #787878; + border-radius: 4px; +} + +QTextBrowser:hover, QTextBrowser:!hover, QTextBrowser:selected, QTextBrowser:pressed { + border: 1px solid #32414B; +} + +/* QGraphicsView ---------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QGraphicsView { + background-color: #19232D; + border: 1px solid #32414B; + color: #F0F0F0; + border-radius: 4px; +} + +QGraphicsView:disabled { + background-color: #19232D; + border: 1px solid #32414B; + color: #787878; + border-radius: 4px; +} + +QGraphicsView:hover, QGraphicsView:!hover, QGraphicsView:selected, QGraphicsView:pressed { + border: 1px solid #32414B; +} + +/* QCalendarWidget -------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QCalendarWidget { + border: 1px solid #32414B; + border-radius: 4px; +} + +QCalendarWidget:disabled { + background-color: #19232D; + color: #787878; +} + +/* QLCDNumber ------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QLCDNumber { + background-color: #19232D; + color: #F0F0F0; +} + +QLCDNumber:disabled { + background-color: #19232D; + color: #787878; +} + +/* QProgressBar ----------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar + +--------------------------------------------------------------------------- */ +QProgressBar { + background-color: #19232D; + border: 1px solid #32414B; + color: #F0F0F0; + border-radius: 4px; + text-align: center; +} + +QProgressBar:disabled { + background-color: #19232D; + border: 1px solid #32414B; + color: #787878; + border-radius: 4px; + text-align: center; +} + +QProgressBar::chunk { + background-color: #1464A0; + color: #19232D; + border-radius: 4px; +} + +QProgressBar::chunk:disabled { + background-color: #14506E; + color: #787878; + border-radius: 4px; +} + +/* ------------------------------------------------------------------------ */ +/* BUTTONS ---------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* QPushButton ------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qpushbutton + +--------------------------------------------------------------------------- */ +QPushButton { + background-color: #505F69; + border: 1px solid #32414B; + color: #F0F0F0; + border-radius: 4px; + padding: 3px; + outline: none; + /* Issue #194 - Special case of QPushButton inside dialogs, for better UI */ + min-width: 80px; +} + +QPushButton:disabled { + background-color: #32414B; + border: 1px solid #32414B; + color: #787878; + border-radius: 4px; + padding: 3px; +} + +QPushButton:checked { + background-color: #32414B; + border: 1px solid #32414B; + border-radius: 4px; + padding: 3px; + outline: none; +} + +QPushButton:checked:disabled { + background-color: #19232D; + border: 1px solid #32414B; + color: #787878; + border-radius: 4px; + padding: 3px; + outline: none; +} + +QPushButton:checked:selected { + background: #1464A0; + color: #32414B; +} + +QPushButton::menu-indicator { + subcontrol-origin: padding; + subcontrol-position: bottom right; + bottom: 4px; +} + +QPushButton:pressed { + background-color: #19232D; + border: 1px solid #19232D; +} + +QPushButton:pressed:hover { + border: 1px solid #148CD2; +} + +QPushButton:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QPushButton:selected { + background: #1464A0; + color: #32414B; +} + +QPushButton:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QPushButton:focus { + border: 1px solid #1464A0; +} + +/* QToolButton ------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbutton + +--------------------------------------------------------------------------- */ +QToolButton { + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; + margin: 0px; + padding: 2px; + /* The subcontrols below are used only in the DelayedPopup mode */ + /* The subcontrols below are used only in the MenuButtonPopup mode */ + /* The subcontrol below is used only in the InstantPopup or DelayedPopup mode */ +} + +QToolButton:checked { + background-color: transparent; + border: 1px solid #1464A0; +} + +QToolButton:checked:disabled { + border: 1px solid #14506E; +} + +QToolButton:pressed { + margin: 1px; + background-color: transparent; + border: 1px solid #1464A0; +} + +QToolButton:disabled { + border: none; +} + +QToolButton:hover { + border: 1px solid #148CD2; +} + +QToolButton[popupMode="0"] { + /* Only for DelayedPopup */ + padding-right: 2px; +} + +QToolButton[popupMode="1"] { + /* Only for MenuButtonPopup */ + padding-right: 20px; +} + +QToolButton[popupMode="1"]::menu-button { + border: none; +} + +QToolButton[popupMode="1"]::menu-button:hover { + border: none; + border-left: 1px solid #148CD2; + border-radius: 0; +} + +QToolButton[popupMode="2"] { + /* Only for InstantPopup */ + padding-right: 2px; +} + +QToolButton::menu-button { + padding: 2px; + border-radius: 4px; + border: 1px solid #32414B; + width: 12px; + outline: none; +} + +QToolButton::menu-button:hover { + border: 1px solid #148CD2; +} + +QToolButton::menu-button:checked:hover { + border: 1px solid #148CD2; +} + +QToolButton::menu-indicator { + image: url(":/qss_icons/rc/arrow_down.png"); + height: 8px; + width: 8px; + top: 0; + /* Exclude a shift for better image */ + left: -2px; + /* Shift it a bit */ +} + +QToolButton::menu-arrow { + image: url(":/qss_icons/rc/arrow_down.png"); + height: 8px; + width: 8px; +} + +QToolButton::menu-arrow:hover { + image: url(":/qss_icons/rc/arrow_down_focus.png"); +} + +/* QCommandLinkButton ----------------------------------------------------- + +--------------------------------------------------------------------------- */ +QCommandLinkButton { + background-color: transparent; + border: 1px solid #32414B; + color: #F0F0F0; + border-radius: 4px; + padding: 0px; + margin: 0px; +} + +QCommandLinkButton:disabled { + background-color: transparent; + color: #787878; +} + +/* ------------------------------------------------------------------------ */ +/* INPUTS - NO FIELDS ----------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* QComboBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox + +--------------------------------------------------------------------------- */ +QComboBox { + border: 1px solid #32414B; + border-radius: 4px; + selection-background-color: #1464A0; + padding-left: 4px; + padding-right: 36px; + /* 4 + 16*2 See scrollbar size */ + /* Fixes #103, #111 */ + min-height: 1.5em; + /* padding-top: 2px; removed to fix #132 */ + /* padding-bottom: 2px; removed to fix #132 */ + /* min-width: 75px; removed to fix #109 */ + /* Needed to remove indicator - fix #132 */ +} + +QComboBox QAbstractItemView { + border: 1px solid #32414B; + border-radius: 0; + background-color: #19232D; + selection-background-color: #1464A0; +} + +QComboBox QAbstractItemView:hover { + background-color: #19232D; + color: #F0F0F0; +} + +QComboBox QAbstractItemView:selected { + background: #1464A0; + color: #32414B; +} + +QComboBox QAbstractItemView:alternate { + background: #19232D; +} + +QComboBox:disabled { + background-color: #19232D; + color: #787878; +} + +QComboBox:hover { + border: 1px solid #148CD2; +} + +QComboBox:focus { + border: 1px solid #1464A0; +} + +QComboBox:on { + selection-background-color: #1464A0; +} + +QComboBox::indicator { + border: none; + border-radius: 0; + background-color: transparent; + selection-background-color: transparent; + color: transparent; + selection-color: transparent; + /* Needed to remove indicator - fix #132 */ +} + +QComboBox::indicator:alternate { + background: #19232D; +} + +QComboBox::item:alternate { + background: #19232D; +} + +QComboBox::item:checked { + font-weight: bold; +} + +QComboBox::item:selected { + border: 0px solid transparent; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 12px; + border-left: 1px solid #32414B; +} + +QComboBox::down-arrow { + image: url(":/qss_icons/rc/arrow_down_disabled.png"); + height: 8px; + width: 8px; +} + +QComboBox::down-arrow:on, QComboBox::down-arrow:hover, QComboBox::down-arrow:focus { + image: url(":/qss_icons/rc/arrow_down.png"); +} + +/* QSlider ---------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qslider + +--------------------------------------------------------------------------- */ +QSlider:disabled { + background: #19232D; +} + +QSlider:focus { + border: none; +} + +QSlider::groove:horizontal { + background: #32414B; + border: 1px solid #32414B; + height: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::groove:vertical { + background: #32414B; + border: 1px solid #32414B; + width: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::add-page:vertical { + background: #1464A0; + border: 1px solid #32414B; + width: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::add-page:vertical :disabled { + background: #14506E; +} + +QSlider::sub-page:horizontal { + background: #1464A0; + border: 1px solid #32414B; + height: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::sub-page:horizontal:disabled { + background: #14506E; +} + +QSlider::handle:horizontal { + background: #787878; + border: 1px solid #32414B; + width: 8px; + height: 8px; + margin: -8px 0px; + border-radius: 4px; +} + +QSlider::handle:horizontal:hover { + background: #148CD2; + border: 1px solid #148CD2; +} + +QSlider::handle:horizontal:focus { + border: 1px solid #1464A0; +} + +QSlider::handle:vertical { + background: #787878; + border: 1px solid #32414B; + width: 8px; + height: 8px; + margin: 0 -8px; + border-radius: 4px; +} + +QSlider::handle:vertical:hover { + background: #148CD2; + border: 1px solid #148CD2; +} + +QSlider::handle:vertical:focus { + border: 1px solid #1464A0; +} + +/* QLineEdit -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qlineedit + +--------------------------------------------------------------------------- */ +QLineEdit { + background-color: #19232D; + padding-top: 2px; + /* This QLineEdit fix 103, 111 */ + padding-bottom: 2px; + /* This QLineEdit fix 103, 111 */ + padding-left: 4px; + padding-right: 4px; + border-style: solid; + border: 1px solid #32414B; + border-radius: 4px; + color: #F0F0F0; +} + +QLineEdit:disabled { + background-color: #19232D; + color: #787878; +} + +QLineEdit:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QLineEdit:focus { + border: 1px solid #1464A0; +} + +QLineEdit:selected { + background-color: #1464A0; + color: #32414B; +} + +/* QTabWiget -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar + +--------------------------------------------------------------------------- */ +QTabWidget { + padding: 2px; + selection-background-color: #32414B; +} + +QTabWidget QWidget { + /* Fixes #189 */ + border-radius: 4px; +} + +QTabWidget::pane { + border: 1px solid #32414B; + border-radius: 4px; + margin: 0px; + /* Fixes double border inside pane with pyqt5 */ + padding: 0px; +} + +QTabWidget::pane:selected { + background-color: #32414B; + border: 1px solid #1464A0; +} + +/* QTabBar ---------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar + +--------------------------------------------------------------------------- */ +QTabBar { + qproperty-drawBase: 0; + border-radius: 4px; + margin: 0px; + padding: 2px; + border: 0; + /* left: 5px; move to the right by 5px - removed for fix */ +} + +QTabBar::close-button { + border: 0; + margin: 2px; + padding: 2px; + image: url(":/qss_icons/rc/window_close.png"); +} + +QTabBar::close-button:hover { + image: url(":/qss_icons/rc/window_close_focus.png"); +} + +QTabBar::close-button:pressed { + image: url(":/qss_icons/rc/window_close_pressed.png"); +} + +/* QTabBar::tab - selected ------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar + +--------------------------------------------------------------------------- */ +QTabBar::tab { + /* !selected and disabled ----------------------------------------- */ + /* selected ------------------------------------------------------- */ +} + +QTabBar::tab:top:selected:disabled { + border-bottom: 3px solid #14506E; + color: #787878; + background-color: #32414B; +} + +QTabBar::tab:bottom:selected:disabled { + border-top: 3px solid #14506E; + color: #787878; + background-color: #32414B; +} + +QTabBar::tab:left:selected:disabled { + border-right: 3px solid #14506E; + color: #787878; + background-color: #32414B; +} + +QTabBar::tab:right:selected:disabled { + border-left: 3px solid #14506E; + color: #787878; + background-color: #32414B; +} + +QTabBar::tab:top:!selected:disabled { + border-bottom: 3px solid #19232D; + color: #787878; + background-color: #19232D; +} + +QTabBar::tab:bottom:!selected:disabled { + border-top: 3px solid #19232D; + color: #787878; + background-color: #19232D; +} + +QTabBar::tab:left:!selected:disabled { + border-right: 3px solid #19232D; + color: #787878; + background-color: #19232D; +} + +QTabBar::tab:right:!selected:disabled { + border-left: 3px solid #19232D; + color: #787878; + background-color: #19232D; +} + +QTabBar::tab:top:!selected { + border-bottom: 2px solid #19232D; + margin-top: 2px; +} + +QTabBar::tab:bottom:!selected { + border-top: 2px solid #19232D; + margin-bottom: 3px; +} + +QTabBar::tab:left:!selected { + border-left: 2px solid #19232D; + margin-right: 2px; +} + +QTabBar::tab:right:!selected { + border-right: 2px solid #19232D; + margin-left: 2px; +} + +QTabBar::tab:top { + background-color: #32414B; + color: #F0F0F0; + margin-left: 2px; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; + min-width: 5px; + border-bottom: 3px solid #32414B; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} + +QTabBar::tab:top:selected { + background-color: #505F69; + color: #F0F0F0; + border-bottom: 3px solid #1464A0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} + +QTabBar::tab:top:!selected:hover { + border: 1px solid #148CD2; + border-bottom: 3px solid #148CD2; + /* Fixes spyder-ide/spyder#9766 */ + padding-left: 4px; + padding-right: 4px; +} + +QTabBar::tab:bottom { + color: #F0F0F0; + border-top: 3px solid #32414B; + background-color: #32414B; + margin-left: 2px; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + min-width: 5px; +} + +QTabBar::tab:bottom:selected { + color: #F0F0F0; + background-color: #505F69; + border-top: 3px solid #1464A0; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} + +QTabBar::tab:bottom:!selected:hover { + border: 1px solid #148CD2; + border-top: 3px solid #148CD2; + /* Fixes spyder-ide/spyder#9766 */ + padding-left: 4px; + padding-right: 4px; +} + +QTabBar::tab:left { + color: #F0F0F0; + background-color: #32414B; + margin-top: 2px; + padding-left: 2px; + padding-right: 2px; + padding-top: 4px; + padding-bottom: 4px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + min-height: 5px; +} + +QTabBar::tab:left:selected { + color: #F0F0F0; + background-color: #505F69; + border-right: 3px solid #1464A0; +} + +QTabBar::tab:left:!selected:hover { + border: 1px solid #148CD2; + border-right: 3px solid #148CD2; + padding: 0px; +} + +QTabBar::tab:right { + color: #F0F0F0; + background-color: #32414B; + margin-top: 2px; + padding-left: 2px; + padding-right: 2px; + padding-top: 4px; + padding-bottom: 4px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + min-height: 5px; +} + +QTabBar::tab:right:selected { + color: #F0F0F0; + background-color: #505F69; + border-left: 3px solid #1464A0; +} + +QTabBar::tab:right:!selected:hover { + border: 1px solid #148CD2; + border-left: 3px solid #148CD2; + padding: 0px; +} + +QTabBar QToolButton { + /* Fixes #136 */ + background-color: #32414B; + height: 12px; + width: 12px; +} + +QTabBar QToolButton:pressed { + background-color: #32414B; +} + +QTabBar QToolButton:pressed:hover { + border: 1px solid #148CD2; +} + +QTabBar QToolButton::left-arrow:enabled { + image: url(":/qss_icons/rc/arrow_left.png"); +} + +QTabBar QToolButton::left-arrow:disabled { + image: url(":/qss_icons/rc/arrow_left_disabled.png"); +} + +QTabBar QToolButton::right-arrow:enabled { + image: url(":/qss_icons/rc/arrow_right.png"); +} + +QTabBar QToolButton::right-arrow:disabled { + image: url(":/qss_icons/rc/arrow_right_disabled.png"); +} + +/* QDockWiget ------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QDockWidget { + outline: 1px solid #32414B; + background-color: #19232D; + border: 1px solid #32414B; + border-radius: 4px; + titlebar-close-icon: url(":/qss_icons/rc/window_close.png"); + titlebar-normal-icon: url(":/qss_icons/rc/window_undock.png"); +} + +QDockWidget::title { + /* Better size for title bar */ + padding: 6px; + spacing: 4px; + border: none; + background-color: #32414B; +} + +QDockWidget::close-button { + background-color: #32414B; + border-radius: 4px; + border: none; +} + +QDockWidget::close-button:hover { + image: url(":/qss_icons/rc/window_close_focus.png"); +} + +QDockWidget::close-button:pressed { + image: url(":/qss_icons/rc/window_close_pressed.png"); +} + +QDockWidget::float-button { + background-color: #32414B; + border-radius: 4px; + border: none; +} + +QDockWidget::float-button:hover { + image: url(":/qss_icons/rc/window_undock_focus.png"); +} + +QDockWidget::float-button:pressed { + image: url(":/qss_icons/rc/window_undock_pressed.png"); +} + +/* QTreeView QListView QTableView ----------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtreeview +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qlistview +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtableview + +--------------------------------------------------------------------------- */ +QTreeView:branch:selected, QTreeView:branch:hover { + background: url(":/qss_icons/rc/transparent.png"); +} + +QTreeView:branch:has-siblings:!adjoins-item { + border-image: url(":/qss_icons/rc/branch_line.png") 0; +} + +QTreeView:branch:has-siblings:adjoins-item { + border-image: url(":/qss_icons/rc/branch_more.png") 0; +} + +QTreeView:branch:!has-children:!has-siblings:adjoins-item { + border-image: url(":/qss_icons/rc/branch_end.png") 0; +} + +QTreeView:branch:has-children:!has-siblings:closed, QTreeView:branch:closed:has-children:has-siblings { + border-image: none; + image: url(":/qss_icons/rc/branch_closed.png"); +} + +QTreeView:branch:open:has-children:!has-siblings, QTreeView:branch:open:has-children:has-siblings { + border-image: none; + image: url(":/qss_icons/rc/branch_open.png"); +} + +QTreeView:branch:has-children:!has-siblings:closed:hover, QTreeView:branch:closed:has-children:has-siblings:hover { + image: url(":/qss_icons/rc/branch_closed_focus.png"); +} + +QTreeView:branch:open:has-children:!has-siblings:hover, QTreeView:branch:open:has-children:has-siblings:hover { + image: url(":/qss_icons/rc/branch_open_focus.png"); +} + +QTreeView::indicator:checked, +QListView::indicator:checked { + image: url(":/qss_icons/rc/checkbox_checked.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(":/qss_icons/rc/checkbox_checked_focus.png"); +} + +QTreeView::indicator:unchecked, +QListView::indicator:unchecked { + image: url(":/qss_icons/rc/checkbox_unchecked.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(":/qss_icons/rc/checkbox_unchecked_focus.png"); +} + +QTreeView::indicator:indeterminate, +QListView::indicator:indeterminate { + image: url(":/qss_icons/rc/checkbox_indeterminate.png"); +} + +QTreeView::indicator:indeterminate:hover, QTreeView::indicator:indeterminate:focus, QTreeView::indicator:indeterminate:pressed, +QListView::indicator:indeterminate:hover, +QListView::indicator:indeterminate:focus, +QListView::indicator:indeterminate:pressed { + image: url(":/qss_icons/rc/checkbox_indeterminate_focus.png"); +} + +QTreeView, +QListView, +QTableView, +QColumnView { + background-color: #19232D; + border: 1px solid #32414B; + color: #F0F0F0; + gridline-color: #32414B; + border-radius: 4px; +} + +QTreeView:disabled, +QListView:disabled, +QTableView:disabled, +QColumnView:disabled { + background-color: #19232D; + color: #787878; +} + +QTreeView:selected, +QListView:selected, +QTableView:selected, +QColumnView:selected { + background-color: #1464A0; + color: #32414B; +} + +QTreeView::item:pressed, +QListView::item:pressed, +QTableView::item:pressed, +QColumnView::item:pressed { + color: #FFFFFF; +} + +QTreeView::item:selected:hover, +QListView::item:selected:hover, +QTableView::item:selected:hover, +QColumnView::item:selected:hover { + color: #FFFFFF; +} + +QTreeView::item:selected:active, +QListView::item:selected:active, +QTableView::item:selected:active, +QColumnView::item:selected:active { + color: #FFFFFF; + background-color: #1464A0; +} + +QTreeView::item:!selected:hover, +QListView::item:!selected:hover, +QTableView::item:!selected:hover, +QColumnView::item:!selected:hover { + outline: 0; + color: #FFFFFF; +} + +QTableCornerButton::section { + background-color: #19232D; + border: 1px transparent #32414B; + border-radius: 0px; +} + +/* QHeaderView ------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qheaderview + +--------------------------------------------------------------------------- */ +QHeaderView { + background-color: #32414B; + border: 0px transparent #32414B; + padding: 0px; + margin: 0px; + border-radius: 0px; +} + +QHeaderView:disabled { + background-color: #32414B; + border: 1px transparent #32414B; + padding: 2px; +} + +QHeaderView::section { + background-color: #32414B; + color: #F0F0F0; + padding: 2px; + border-radius: 0px; + text-align: left; +} + +QHeaderView::section:checked { + color: #F0F0F0; + background-color: #32414B; +} + +QHeaderView::section:checked:disabled { + color: #787878; + background-color: #14506E; +} + +QHeaderView::section::horizontal { + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid #19232D; +} + +QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one { + border-left: 1px solid #32414B; +} + +QHeaderView::section::horizontal:disabled { + color: #787878; +} + +QHeaderView::section::vertical { + padding-left: 4px; + padding-right: 4px; + border-top: 1px solid #19232D; +} + +QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one { + border-top: 1px solid #32414B; +} + +QHeaderView::section::vertical:disabled { + color: #787878; +} + +QHeaderView::down-arrow { + /* Those settings (border/width/height/background-color) solve bug */ + /* transparent arrow background and size */ + background-color: #32414B; + border: none; + height: 12px; + width: 12px; + padding-left: 2px; + padding-right: 2px; + image: url(":/qss_icons/rc/arrow_down.png"); +} + +QHeaderView::up-arrow { + background-color: #32414B; + border: none; + height: 12px; + width: 12px; + padding-left: 2px; + padding-right: 2px; + image: url(":/qss_icons/rc/arrow_up.png"); +} + +/* QToolBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbox + +--------------------------------------------------------------------------- */ +QToolBox { + padding: 0px; + border: 0px; + border: 1px solid #32414B; +} + +QToolBox:selected { + padding: 0px; + border: 2px solid #1464A0; +} + +QToolBox::tab { + background-color: #19232D; + border: 1px solid #32414B; + color: #F0F0F0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QToolBox::tab:disabled { + color: #787878; +} + +QToolBox::tab:selected { + background-color: #505F69; + border-bottom: 2px solid #1464A0; +} + +QToolBox::tab:selected:disabled { + background-color: #32414B; + border-bottom: 2px solid #14506E; +} + +QToolBox::tab:!selected { + background-color: #32414B; + border-bottom: 2px solid #32414B; +} + +QToolBox::tab:!selected:disabled { + background-color: #19232D; +} + +QToolBox::tab:hover { + border-color: #148CD2; + border-bottom: 2px solid #148CD2; +} + +QToolBox QScrollArea QWidget QWidget { + padding: 0px; + border: 0px; + background-color: #19232D; +} + +/* QFrame ----------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qframe +https://doc.qt.io/qt-5/qframe.html#-prop +https://doc.qt.io/qt-5/qframe.html#details +https://stackoverflow.com/questions/14581498/qt-stylesheet-for-hline-vline-color + +--------------------------------------------------------------------------- */ +/* (dot) .QFrame fix #141, #126, #123 */ +.QFrame { + border-radius: 4px; + border: 1px solid #32414B; + /* No frame */ + /* HLine */ + /* HLine */ +} + +.QFrame[frameShape="0"] { + border-radius: 4px; + border: 1px transparent #32414B; +} + +.QFrame[frameShape="4"] { + max-height: 2px; + border: none; + background-color: #32414B; +} + +.QFrame[frameShape="5"] { + max-width: 2px; + border: none; + background-color: #32414B; +} + +/* QSplitter -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qsplitter + +--------------------------------------------------------------------------- */ +QSplitter { + background-color: #32414B; + spacing: 0px; + padding: 0px; + margin: 0px; +} + +QSplitter::handle { + background-color: #32414B; + border: 0px solid #19232D; + spacing: 0px; + padding: 1px; + margin: 0px; +} + +QSplitter::handle:hover { + background-color: #787878; +} + +QSplitter::handle:horizontal { + width: 5px; + image: url(":/qss_icons/rc/line_vertical.png"); +} + +QSplitter::handle:vertical { + height: 5px; + image: url(":/qss_icons/rc/line_horizontal.png"); +} + +/* QDateEdit -------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QDateEdit { + selection-background-color: #1464A0; + border-style: solid; + border: 1px solid #32414B; + border-radius: 4px; + /* This fixes 103, 111 */ + padding-top: 2px; + /* This fixes 103, 111 */ + padding-bottom: 2px; + padding-left: 4px; + padding-right: 4px; + min-width: 10px; +} + +QDateEdit:on { + selection-background-color: #1464A0; +} + +QDateEdit::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 12px; + border-left: 1px solid #32414B; +} + +QDateEdit::down-arrow { + image: url(":/qss_icons/rc/arrow_down_disabled.png"); + height: 8px; + width: 8px; +} + +QDateEdit::down-arrow:on, QDateEdit::down-arrow:hover, QDateEdit::down-arrow:focus { + image: url(":/qss_icons/rc/arrow_down.png"); +} + +QDateEdit QAbstractItemView { + background-color: #19232D; + border-radius: 4px; + border: 1px solid #32414B; + selection-background-color: #1464A0; +} + +/* QAbstractView ---------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QAbstractView:hover { + border: 1px solid #148CD2; + color: #F0F0F0; +} + +QAbstractView:selected { + background: #1464A0; + color: #32414B; +} + +/* PlotWidget ------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +PlotWidget { + /* Fix cut labels in plots #134 */ + padding: 0px; +} + +/* fixes */ + +QComboBox::item:checked { + font-weight: bold; + max-height: 30px; +} + +QPushButton { + min-width: default; +} + +QPushButton:flat { + background-color: transparent; + border: none; +} + +/* GroupBox checkbox contrast */ + +QGroupBox::indicator:unchecked { + image: url(":/qss_icons/rc/checkbox_unchecked.png"); +} + +QGroupBox::indicator:checked { + image: url(":/qss_icons/rc/checkbox_checked.png"); +} + +QGroupBox::indicator:indeterminate { + image: url(":/qss_icons/rc/checkbox_indeterminate.png"); +} + +QGroupBox::indicator:indeterminate:disabled { + image: url(":/qss_icons/rc/checkbox_indeterminate_disabled.png"); +} + +QGroupBox::indicator:indeterminate:focus, QGroupBox::indicator:indeterminate:hover, QGroupBox::indicator:indeterminate:pressed { + image: url(":/qss_icons/rc/checkbox_indeterminate_focus.png"); +} diff --git a/src/ui/qdarkstyle/svg/arrow_down.svg b/src/ui/qdarkstyle/svg/arrow_down.svg new file mode 100644 index 0000000..301d663 --- /dev/null +++ b/src/ui/qdarkstyle/svg/arrow_down.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/arrow_left.svg b/src/ui/qdarkstyle/svg/arrow_left.svg new file mode 100644 index 0000000..1f7c290 --- /dev/null +++ b/src/ui/qdarkstyle/svg/arrow_left.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/arrow_right.svg b/src/ui/qdarkstyle/svg/arrow_right.svg new file mode 100644 index 0000000..03c6620 --- /dev/null +++ b/src/ui/qdarkstyle/svg/arrow_right.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/arrow_up.svg b/src/ui/qdarkstyle/svg/arrow_up.svg new file mode 100644 index 0000000..ccfa66b --- /dev/null +++ b/src/ui/qdarkstyle/svg/arrow_up.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/base_icon.svg b/src/ui/qdarkstyle/svg/base_icon.svg new file mode 100644 index 0000000..abf5d6b --- /dev/null +++ b/src/ui/qdarkstyle/svg/base_icon.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/base_palette.svg b/src/ui/qdarkstyle/svg/base_palette.svg new file mode 100644 index 0000000..317b2eb --- /dev/null +++ b/src/ui/qdarkstyle/svg/base_palette.svg @@ -0,0 +1,443 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/branch_closed.svg b/src/ui/qdarkstyle/svg/branch_closed.svg new file mode 100644 index 0000000..e7664f4 --- /dev/null +++ b/src/ui/qdarkstyle/svg/branch_closed.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/branch_end.svg b/src/ui/qdarkstyle/svg/branch_end.svg new file mode 100644 index 0000000..d35acd0 --- /dev/null +++ b/src/ui/qdarkstyle/svg/branch_end.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/branch_line.svg b/src/ui/qdarkstyle/svg/branch_line.svg new file mode 100644 index 0000000..f327723 --- /dev/null +++ b/src/ui/qdarkstyle/svg/branch_line.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/branch_more.svg b/src/ui/qdarkstyle/svg/branch_more.svg new file mode 100644 index 0000000..f2bf317 --- /dev/null +++ b/src/ui/qdarkstyle/svg/branch_more.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/branch_open.svg b/src/ui/qdarkstyle/svg/branch_open.svg new file mode 100644 index 0000000..701cb60 --- /dev/null +++ b/src/ui/qdarkstyle/svg/branch_open.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/checkbox_checked.svg b/src/ui/qdarkstyle/svg/checkbox_checked.svg new file mode 100644 index 0000000..f8fb5dd --- /dev/null +++ b/src/ui/qdarkstyle/svg/checkbox_checked.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/checkbox_indeterminate.svg b/src/ui/qdarkstyle/svg/checkbox_indeterminate.svg new file mode 100644 index 0000000..7c6bdf9 --- /dev/null +++ b/src/ui/qdarkstyle/svg/checkbox_indeterminate.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/checkbox_unchecked.svg b/src/ui/qdarkstyle/svg/checkbox_unchecked.svg new file mode 100644 index 0000000..cb17a25 --- /dev/null +++ b/src/ui/qdarkstyle/svg/checkbox_unchecked.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/line_horizontal.svg b/src/ui/qdarkstyle/svg/line_horizontal.svg new file mode 100644 index 0000000..f088e55 --- /dev/null +++ b/src/ui/qdarkstyle/svg/line_horizontal.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/line_vertical.svg b/src/ui/qdarkstyle/svg/line_vertical.svg new file mode 100644 index 0000000..7bed6cd --- /dev/null +++ b/src/ui/qdarkstyle/svg/line_vertical.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/radio_checked.svg b/src/ui/qdarkstyle/svg/radio_checked.svg new file mode 100644 index 0000000..0a0fd71 --- /dev/null +++ b/src/ui/qdarkstyle/svg/radio_checked.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/radio_unchecked.svg b/src/ui/qdarkstyle/svg/radio_unchecked.svg new file mode 100644 index 0000000..f1ce8a6 --- /dev/null +++ b/src/ui/qdarkstyle/svg/radio_unchecked.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/toolbar_move_horizontal.svg b/src/ui/qdarkstyle/svg/toolbar_move_horizontal.svg new file mode 100644 index 0000000..5ca9132 --- /dev/null +++ b/src/ui/qdarkstyle/svg/toolbar_move_horizontal.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/toolbar_move_vertical.svg b/src/ui/qdarkstyle/svg/toolbar_move_vertical.svg new file mode 100644 index 0000000..9db354d --- /dev/null +++ b/src/ui/qdarkstyle/svg/toolbar_move_vertical.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/toolbar_separator_horizontal.svg b/src/ui/qdarkstyle/svg/toolbar_separator_horizontal.svg new file mode 100644 index 0000000..49782cc --- /dev/null +++ b/src/ui/qdarkstyle/svg/toolbar_separator_horizontal.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/toolbar_separator_vertical.svg b/src/ui/qdarkstyle/svg/toolbar_separator_vertical.svg new file mode 100644 index 0000000..fa6c871 --- /dev/null +++ b/src/ui/qdarkstyle/svg/toolbar_separator_vertical.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/transparent.svg b/src/ui/qdarkstyle/svg/transparent.svg new file mode 100644 index 0000000..94adcfd --- /dev/null +++ b/src/ui/qdarkstyle/svg/transparent.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/window_close.svg b/src/ui/qdarkstyle/svg/window_close.svg new file mode 100644 index 0000000..bb73e25 --- /dev/null +++ b/src/ui/qdarkstyle/svg/window_close.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/window_grip.svg b/src/ui/qdarkstyle/svg/window_grip.svg new file mode 100644 index 0000000..2a03260 --- /dev/null +++ b/src/ui/qdarkstyle/svg/window_grip.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/window_minimize.svg b/src/ui/qdarkstyle/svg/window_minimize.svg new file mode 100644 index 0000000..c5a73b8 --- /dev/null +++ b/src/ui/qdarkstyle/svg/window_minimize.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/ui/qdarkstyle/svg/window_undock.svg b/src/ui/qdarkstyle/svg/window_undock.svg new file mode 100644 index 0000000..b6dda46 --- /dev/null +++ b/src/ui/qdarkstyle/svg/window_undock.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + +