commit 9145e72263a1c058aa11f1fd80396d0f84139606 Author: Sam Date: Sat Feb 15 21:20:54 2025 +0800 [feature] 初始化仓库 diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000..b4a569e --- /dev/null +++ b/.cursorrules @@ -0,0 +1,5 @@ +You are an expert in Python, Pysie6 application development. +Key Principles +- Use precise, efficient, and concise Python code to develop Pyside6 applications. +- Follow the principle of minimal changes for each modification. +- Prioritize readability and maintainability. \ No newline at end of file diff --git a/Avas_System.code-workspace b/Avas_System.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/Avas_System.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/__pycache__/Ui_widget.cpython-313.pyc b/__pycache__/Ui_widget.cpython-313.pyc new file mode 100644 index 0000000..dcd6884 Binary files /dev/null and b/__pycache__/Ui_widget.cpython-313.pyc differ diff --git a/__pycache__/audio_filter_widget.cpython-313.pyc b/__pycache__/audio_filter_widget.cpython-313.pyc new file mode 100644 index 0000000..2834324 Binary files /dev/null and b/__pycache__/audio_filter_widget.cpython-313.pyc differ diff --git a/data/database.db b/data/database.db new file mode 100644 index 0000000..cc809d3 Binary files /dev/null and b/data/database.db differ diff --git a/database/__init__.py b/database/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/database/__pycache__/__init__.cpython-313.pyc b/database/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..82e813d Binary files /dev/null and b/database/__pycache__/__init__.cpython-313.pyc differ diff --git a/database/__pycache__/db_manager.cpython-313.pyc b/database/__pycache__/db_manager.cpython-313.pyc new file mode 100644 index 0000000..651770f Binary files /dev/null and b/database/__pycache__/db_manager.cpython-313.pyc differ diff --git a/database/__pycache__/models.cpython-313.pyc b/database/__pycache__/models.cpython-313.pyc new file mode 100644 index 0000000..b51b524 Binary files /dev/null and b/database/__pycache__/models.cpython-313.pyc differ diff --git a/database/db_manager.py b/database/db_manager.py new file mode 100644 index 0000000..3d76dde --- /dev/null +++ b/database/db_manager.py @@ -0,0 +1,165 @@ +import sqlite3 +from typing import List, Optional, Tuple +from pathlib import Path +import os +from .models import FilterData, ParamData, ConfigData + +class DatabaseManager: + _instance = None + + def __new__(cls, db_path: str = None): + if cls._instance is None: + cls._instance = super(DatabaseManager, cls).__new__(cls) + if db_path is None: + app_dir = Path(os.path.dirname(os.path.abspath(__file__))).parent + data_dir = app_dir / 'data' + db_path = str(data_dir / 'database.db') + + cls._instance.db_path = db_path + cls._instance._init_database() + return cls._instance + + def __init__(self): + self.init_database() + + def _init_database(self): + Path(self.db_path).parent.mkdir(parents=True, exist_ok=True) + + with sqlite3.connect(self.db_path) as conn: + conn.executescript(""" + CREATE TABLE IF NOT EXISTS configs ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS params ( + id INTEGER PRIMARY KEY, + config_id INTEGER, + delay_data1 FLOAT, + ENC_volume_data1 FLOAT, + ENT_mx_right_data FLOAT, + ENT_mix_left_data FLOAT, + FOREIGN KEY (config_id) REFERENCES configs(id) + ); + + CREATE TABLE IF NOT EXISTS filters ( + id INTEGER PRIMARY KEY, + config_id INTEGER, + filter_type TEXT NOT NULL, + freq FLOAT, + q FLOAT, + gain FLOAT, + slope FLOAT, + enabled BOOLEAN DEFAULT TRUE, + position INTEGER, + FOREIGN KEY (config_id) REFERENCES configs(id) + ); + """) + + def get_connection(self): + return sqlite3.connect(self.db_path) + + def get_all_configs(self) -> List[ConfigData]: + with self.get_connection() as conn: + cursor = conn.execute("SELECT id, name, created_at FROM configs") + return [ConfigData(*row) for row in cursor.fetchall()] + + def load_config(self, config_id: int) -> Tuple[Optional[ParamData], List[FilterData]]: + with self.get_connection() as conn: + cursor = conn.execute( + "SELECT * FROM params WHERE config_id = ?", + (config_id,) + ) + param_row = cursor.fetchone() + params = ParamData(*param_row[2:]) if param_row else None + + cursor = conn.execute( + "SELECT * FROM filters WHERE config_id = ? ORDER BY position", + (config_id,) + ) + filters = [FilterData(*row[2:]) for row in cursor.fetchall()] + + return params, filters + + def save_config(self, name: str, params: ParamData, filters: List[FilterData]) -> int: + with self.get_connection() as conn: + cursor = conn.execute( + "INSERT INTO configs (name) VALUES (?)", + (name,) + ) + config_id = cursor.lastrowid + + conn.execute( + """INSERT INTO params + (config_id, delay_data1, ENC_volume_data1, ENT_mx_right_data, ENT_mix_left_data) + VALUES (?, ?, ?, ?, ?)""", + (config_id, params.delay_data1, params.ENC_volume_data1, + params.ENT_mx_right_data, params.ENT_mix_left_data) + ) + + for filter_data in filters: + conn.execute( + """INSERT INTO filters + (config_id, filter_type, freq, q, gain, slope, enabled, position) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)""", + (config_id, filter_data.filter_type, filter_data.freq, + filter_data.q, filter_data.gain, filter_data.slope, + filter_data.enabled, filter_data.position) + ) + + conn.commit() + return config_id + + def update_filter(self, filter_id: int, **kwargs): + with self.get_connection() as conn: + set_clause = ", ".join(f"{k} = ?" for k in kwargs.keys()) + query = f"UPDATE filters SET {set_clause} WHERE id = ?" + conn.execute(query, (*kwargs.values(), filter_id)) + conn.commit() + + def update_params(self, config_id: int, params: ParamData): + with self.get_connection() as conn: + conn.execute( + """UPDATE params SET + delay_data1 = ?, ENC_volume_data1 = ?, + ENT_mx_right_data = ?, ENT_mix_left_data = ? + WHERE config_id = ?""", + (params.delay_data1, params.ENC_volume_data1, + params.ENT_mx_right_data, params.ENT_mix_left_data, + config_id) + ) + conn.commit() + + def init_database(self): + """初始化数据库,如果没有数据则创建默认配置""" + configs = self.get_all_configs() + if not configs: + # 创建默认配置 + default_params = ParamData( + delay_data1=0.0, + ENC_volume_data1=0.0, + ENT_mx_right_data=0.0, + ENT_mix_left_data=0.0 + ) + + # 创建一些默认滤波器 + default_filters = [ + FilterData( + filter_type="PEQ", + freq=1000.0, + q=1.0, + gain=0.0, + slope=12.0 + ), + FilterData( + filter_type="HPF", + freq=20.0, + q=0.707, + gain=0.0, + slope=12.0 + ) + ] + + # 保存默认配置 + self.save_config("Default Config", default_params, default_filters) diff --git a/database/models.py b/database/models.py new file mode 100644 index 0000000..3be871d --- /dev/null +++ b/database/models.py @@ -0,0 +1,27 @@ +from dataclasses import dataclass +from typing import List, Optional, Tuple +from datetime import datetime + +@dataclass +class FilterData: + filter_type: str + freq: float + q: float + gain: float + slope: float + id: int = None + enabled: bool = True + position: int = 0 + +@dataclass +class ParamData: + delay_data1: float + ENC_volume_data1: float + ENT_mx_right_data: float + ENT_mix_left_data: float + +@dataclass +class ConfigData: + id: int + name: str + created_at: str diff --git a/doc/page.png b/doc/page.png new file mode 100644 index 0000000..0236be4 Binary files /dev/null and b/doc/page.png differ diff --git a/doc/通道逻辑架构设计.pdf b/doc/通道逻辑架构设计.pdf new file mode 100644 index 0000000..5f9566a Binary files /dev/null and b/doc/通道逻辑架构设计.pdf differ diff --git a/main.py b/main.py new file mode 100644 index 0000000..6148396 --- /dev/null +++ b/main.py @@ -0,0 +1,10 @@ +import sys +from PySide6.QtWidgets import QApplication +from widgets.avas_widget import AVAS_WIDGET +from widgets.audio_filter_widget import AudioFilterWidget + +if __name__ == "__main__": + app = QApplication(sys.argv) + main_window = AVAS_WIDGET() + main_window.show() + sys.exit(app.exec()) diff --git a/widget.ui b/widget.ui new file mode 100644 index 0000000..e288ec3 --- /dev/null +++ b/widget.ui @@ -0,0 +1,2793 @@ + + + Widget + + + + 0 + 0 + 691 + 408 + + + + Widget + + + /* --------------------------------------------------------------------------- + + WARNING! File created programmatically. All changes made in this file will be lost! + + Created by the qtsass compiler v0.4.0 + + The definitions are in the "qdarkstyle.qss._styles.scss" module + +--------------------------------------------------------------------------- */ +/* Light Style - QDarkStyleSheet ------------------------------------------ */ +/* + +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 + +--------------------------------------------------------------------------- */ +/* Reset elements ------------------------------------------------------------ + +Resetting everything helps to unify styles across different operating systems + +--------------------------------------------------------------------------- */ +* { + padding: 0px; + margin: 0px; + border: 0px; + border-style: none; + border-image: none; + outline: 0; +} + +/* specific reset for elements inside QToolBar */ +QToolBar * { + margin: 0px; + padding: 0px; +} + +/* QWidget ---------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QWidget { + background-color: #19232D; + border: 0px solid #455364; + padding: 0px; + color: #DFE1E2; + selection-background-color: #346792; + selection-color: #DFE1E2; +} + +QWidget:disabled { + background-color: #19232D; + color: #788D9C; + selection-background-color: #26486B; + selection-color: #788D9C; +} + +QWidget::item:selected { + background-color: #346792; +} + +QWidget::item:hover:!selected { + background-color: #1A72BB; +} + +/* 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: #455364; + border: 0px solid #19232D; + spacing: 0px; + padding: 2px; +} + +QMainWindow::separator:hover { + background-color: #60798B; + border: 0px solid #1A72BB; +} + +QMainWindow::separator:horizontal { + width: 5px; + margin-top: 2px; + margin-bottom: 2px; + image: url(":/qss_icons/dark/rc/toolbar_separator_vertical.png"); +} + +QMainWindow::separator:vertical { + height: 5px; + margin-left: 2px; + margin-right: 2px; + image: url(":/qss_icons/dark/rc/toolbar_separator_horizontal.png"); +} + +/* QToolTip --------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtooltip + +--------------------------------------------------------------------------- */ +QToolTip { + background-color: #346792; + color: #DFE1E2; + /* If you remove the border property, background stops working on Windows */ + border: none; + /* 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 #455364; + /* Fixes Spyder #9120, #9121 */ + background: #455364; + /* Fixes #205, white vertical borders separating items */ +} + +QStatusBar::item { + border: none; +} + +QStatusBar QToolTip { + background-color: #1A72BB; + 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: #DFE1E2; + spacing: 4px; + outline: none; + padding-top: 4px; + padding-bottom: 4px; +} + +QCheckBox:focus { + border: none; +} + +QCheckBox QWidget:disabled { + background-color: #19232D; + color: #788D9C; +} + +QCheckBox::indicator { + margin-left: 2px; + height: 14px; + width: 14px; +} + +QCheckBox::indicator:unchecked { + image: url(":/qss_icons/dark/rc/checkbox_unchecked.png"); +} + +QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:focus, QCheckBox::indicator:unchecked:pressed { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_unchecked_focus.png"); +} + +QCheckBox::indicator:unchecked:disabled { + image: url(":/qss_icons/dark/rc/checkbox_unchecked_disabled.png"); +} + +QCheckBox::indicator:checked { + image: url(":/qss_icons/dark/rc/checkbox_checked.png"); +} + +QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:focus, QCheckBox::indicator:checked:pressed { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_checked_focus.png"); +} + +QCheckBox::indicator:checked:disabled { + image: url(":/qss_icons/dark/rc/checkbox_checked_disabled.png"); +} + +QCheckBox::indicator:indeterminate { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate.png"); +} + +QCheckBox::indicator:indeterminate:disabled { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate_disabled.png"); +} + +QCheckBox::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate_focus.png"); +} + +/* QGroupBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qgroupbox + +--------------------------------------------------------------------------- */ +QGroupBox { + font-weight: bold; + border: 1px solid #455364; + border-radius: 4px; + padding: 2px; + margin-top: 6px; + margin-bottom: 4px; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + left: 4px; + padding-left: 2px; + padding-right: 4px; + padding-top: -4px; +} + +QGroupBox::indicator { + margin-left: 2px; + margin-top: 2px; + padding: 0; + height: 14px; + width: 14px; +} + +QGroupBox::indicator:unchecked { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_unchecked.png"); +} + +QGroupBox::indicator:unchecked:hover, QGroupBox::indicator:unchecked:focus, QGroupBox::indicator:unchecked:pressed { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_unchecked_focus.png"); +} + +QGroupBox::indicator:unchecked:disabled { + image: url(":/qss_icons/dark/rc/checkbox_unchecked_disabled.png"); +} + +QGroupBox::indicator:checked { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_checked.png"); +} + +QGroupBox::indicator:checked:hover, QGroupBox::indicator:checked:focus, QGroupBox::indicator:checked:pressed { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_checked_focus.png"); +} + +QGroupBox::indicator:checked:disabled { + image: url(":/qss_icons/dark/rc/checkbox_checked_disabled.png"); +} + +/* QRadioButton ----------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qradiobutton + +--------------------------------------------------------------------------- */ +QRadioButton { + background-color: #19232D; + color: #DFE1E2; + spacing: 4px; + padding-top: 4px; + padding-bottom: 4px; + border: none; + outline: none; +} + +QRadioButton:focus { + border: none; +} + +QRadioButton:disabled { + background-color: #19232D; + color: #788D9C; + border: none; + outline: none; +} + +QRadioButton QWidget { + background-color: #19232D; + color: #DFE1E2; + spacing: 0px; + padding: 0px; + outline: none; + border: none; +} + +QRadioButton::indicator { + border: none; + outline: none; + margin-left: 2px; + height: 14px; + width: 14px; +} + +QRadioButton::indicator:unchecked { + image: url(":/qss_icons/dark/rc/radio_unchecked.png"); +} + +QRadioButton::indicator:unchecked:hover, QRadioButton::indicator:unchecked:focus, QRadioButton::indicator:unchecked:pressed { + border: none; + outline: none; + image: url(":/qss_icons/dark/rc/radio_unchecked_focus.png"); +} + +QRadioButton::indicator:unchecked:disabled { + image: url(":/qss_icons/dark/rc/radio_unchecked_disabled.png"); +} + +QRadioButton::indicator:checked { + border: none; + outline: none; + image: url(":/qss_icons/dark/rc/radio_checked.png"); +} + +QRadioButton::indicator:checked:hover, QRadioButton::indicator:checked:focus, QRadioButton::indicator:checked:pressed { + border: none; + outline: none; + image: url(":/qss_icons/dark/rc/radio_checked_focus.png"); +} + +QRadioButton::indicator:checked:disabled { + outline: none; + image: url(":/qss_icons/dark/rc/radio_checked_disabled.png"); +} + +/* QMenuBar --------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenubar + +--------------------------------------------------------------------------- */ +QMenuBar { + background-color: #455364; + padding: 2px; + border: 1px solid #19232D; + color: #DFE1E2; + selection-background-color: #1A72BB; +} + +QMenuBar:focus { + border: 1px solid #346792; +} + +QMenuBar::item { + background: transparent; + padding: 4px; +} + +QMenuBar::item:selected { + padding: 4px; + background: transparent; + border: 0px solid #455364; + background-color: #1A72BB; +} + +QMenuBar::item:pressed { + padding: 4px; + border: 0px solid #455364; + background-color: #1A72BB; + color: #DFE1E2; + margin-bottom: 0px; + padding-bottom: 0px; +} + +/* QMenu ------------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenu + +--------------------------------------------------------------------------- */ +QMenu { + border: 0px solid #455364; + color: #DFE1E2; + margin: 0px; + background-color: #37414F; + selection-background-color: #1A72BB; +} + +QMenu::separator { + height: 1px; + background-color: #60798B; + color: #DFE1E2; +} + +QMenu::item { + background-color: #37414F; + padding: 4px 24px 4px 28px; + /* Reserve space for selection border */ + border: 1px transparent #455364; +} + +QMenu::item:selected { + color: #DFE1E2; + background-color: #1A72BB; +} + +QMenu::item:pressed { + background-color: #1A72BB; +} + +QMenu::icon { + padding-left: 10px; + width: 14px; + height: 14px; +} + +QMenu::indicator { + padding-left: 8px; + width: 12px; + height: 12px; + /* 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/dark/rc/checkbox_unchecked.png"); +} + +QMenu::indicator:non-exclusive:unchecked:hover, QMenu::indicator:non-exclusive:unchecked:focus, QMenu::indicator:non-exclusive:unchecked:pressed { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_unchecked_focus.png"); +} + +QMenu::indicator:non-exclusive:unchecked:disabled { + image: url(":/qss_icons/dark/rc/checkbox_unchecked_disabled.png"); +} + +QMenu::indicator:non-exclusive:checked { + image: url(":/qss_icons/dark/rc/checkbox_checked.png"); +} + +QMenu::indicator:non-exclusive:checked:hover, QMenu::indicator:non-exclusive:checked:focus, QMenu::indicator:non-exclusive:checked:pressed { + border: none; + image: url(":/qss_icons/dark/rc/checkbox_checked_focus.png"); +} + +QMenu::indicator:non-exclusive:checked:disabled { + image: url(":/qss_icons/dark/rc/checkbox_checked_disabled.png"); +} + +QMenu::indicator:non-exclusive:indeterminate { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate.png"); +} + +QMenu::indicator:non-exclusive:indeterminate:disabled { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate_disabled.png"); +} + +QMenu::indicator:non-exclusive:indeterminate:focus, QMenu::indicator:non-exclusive:indeterminate:hover, QMenu::indicator:non-exclusive:indeterminate:pressed { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate_focus.png"); +} + +QMenu::indicator:exclusive:unchecked { + image: url(":/qss_icons/dark/rc/radio_unchecked.png"); +} + +QMenu::indicator:exclusive:unchecked:hover, QMenu::indicator:exclusive:unchecked:focus, QMenu::indicator:exclusive:unchecked:pressed { + border: none; + outline: none; + image: url(":/qss_icons/dark/rc/radio_unchecked_focus.png"); +} + +QMenu::indicator:exclusive:unchecked:disabled { + image: url(":/qss_icons/dark/rc/radio_unchecked_disabled.png"); +} + +QMenu::indicator:exclusive:checked { + border: none; + outline: none; + image: url(":/qss_icons/dark/rc/radio_checked.png"); +} + +QMenu::indicator:exclusive:checked:hover, QMenu::indicator:exclusive:checked:focus, QMenu::indicator:exclusive:checked:pressed { + border: none; + outline: none; + image: url(":/qss_icons/dark/rc/radio_checked_focus.png"); +} + +QMenu::indicator:exclusive:checked:disabled { + outline: none; + image: url(":/qss_icons/dark/rc/radio_checked_disabled.png"); +} + +QMenu::right-arrow { + margin: 5px; + padding-left: 12px; + image: url(":/qss_icons/dark/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: #DFE1E2; + border: 1px solid #455364; + 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 #455364; + border-radius: 4px; + /* fix #159 */ + padding: 2px; + /* remove min-height to fix #244 */ + color: #DFE1E2; +} + +QAbstractScrollArea:disabled { + color: #788D9C; +} + +/* 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 #455364; + border-radius: 4px; + background-color: #19232D; +} + +QScrollBar:vertical { + background-color: #19232D; + width: 16px; + margin: 16px 2px 16px 2px; + border: 1px solid #455364; + border-radius: 4px; +} + +QScrollBar::handle:horizontal { + background-color: #60798B; + border: 1px solid #455364; + border-radius: 4px; + min-width: 8px; +} + +QScrollBar::handle:horizontal:hover { + background-color: #346792; + border: #346792; + border-radius: 4px; + min-width: 8px; +} + +QScrollBar::handle:horizontal:focus { + border: 1px solid #1A72BB; +} + +QScrollBar::handle:vertical { + background-color: #60798B; + border: 1px solid #455364; + min-height: 8px; + border-radius: 4px; +} + +QScrollBar::handle:vertical:hover { + background-color: #346792; + border: #346792; + border-radius: 4px; + min-height: 8px; +} + +QScrollBar::handle:vertical:focus { + border: 1px solid #1A72BB; +} + +QScrollBar::add-line:horizontal { + margin: 0px 0px 0px 0px; + border-image: url(":/qss_icons/dark/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/dark/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/dark/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/dark/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/dark/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/dark/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/dark/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/dark/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: #DFE1E2; + border-radius: 4px; + border: 1px solid #455364; +} + +QTextEdit:focus { + border: 1px solid #1A72BB; +} + +QTextEdit:selected { + background: #346792; + color: #455364; +} + +/* QPlainTextEdit --------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QPlainTextEdit { + background-color: #19232D; + color: #DFE1E2; + border-radius: 4px; + border: 1px solid #455364; +} + +QPlainTextEdit:focus { + border: 1px solid #1A72BB; +} + +QPlainTextEdit:selected { + background: #346792; + color: #455364; +} + +/* QSizeGrip -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qsizegrip + +--------------------------------------------------------------------------- */ +QSizeGrip { + background: transparent; + width: 12px; + height: 12px; + image: url(":/qss_icons/dark/rc/window_grip.png"); +} + +/* QStackedWidget --------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QStackedWidget { + padding: 2px; + border: 1px solid #455364; + border: 1px solid #19232D; +} + +/* QToolBar --------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbar + +--------------------------------------------------------------------------- */ +QToolBar { + background-color: #455364; + border-bottom: 1px solid #19232D; + padding: 1px; + font-weight: bold; + spacing: 2px; +} + +QToolBar:disabled { + /* Fixes #272 */ + background-color: #455364; +} + +QToolBar::handle:horizontal { + width: 16px; + image: url(":/qss_icons/dark/rc/toolbar_move_horizontal.png"); +} + +QToolBar::handle:vertical { + height: 16px; + image: url(":/qss_icons/dark/rc/toolbar_move_vertical.png"); +} + +QToolBar::separator:horizontal { + width: 16px; + image: url(":/qss_icons/dark/rc/toolbar_separator_horizontal.png"); +} + +QToolBar::separator:vertical { + height: 16px; + image: url(":/qss_icons/dark/rc/toolbar_separator_vertical.png"); +} + +QToolButton#qt_toolbar_ext_button { + background: #455364; + border: 0px; + color: #DFE1E2; + image: url(":/qss_icons/dark/rc/arrow_right.png"); +} + +/* QAbstractSpinBox ------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QAbstractSpinBox { + background-color: #19232D; + border: 1px solid #455364; + color: #DFE1E2; + /* 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 #455364; + border-bottom: 1px solid #455364; + 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/dark/rc/arrow_up_disabled.png"); + height: 8px; + width: 8px; +} + +QAbstractSpinBox::up-arrow:hover { + image: url(":/qss_icons/dark/rc/arrow_up.png"); +} + +QAbstractSpinBox:down-button { + background-color: transparent #19232D; + subcontrol-origin: border; + subcontrol-position: bottom right; + border-left: 1px solid #455364; + border-top: 1px solid #455364; + 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/dark/rc/arrow_down_disabled.png"); + height: 8px; + width: 8px; +} + +QAbstractSpinBox::down-arrow:hover { + image: url(":/qss_icons/dark/rc/arrow_down.png"); +} + +QAbstractSpinBox:hover { + border: 1px solid #346792; + color: #DFE1E2; +} + +QAbstractSpinBox:focus { + border: 1px solid #1A72BB; +} + +QAbstractSpinBox:selected { + background: #346792; + color: #455364; +} + +/* ------------------------------------------------------------------------ */ +/* DISPLAYS --------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* QLabel ----------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qframe + +--------------------------------------------------------------------------- */ +QLabel { + background-color: #19232D; + border: 0px solid #455364; + padding: 2px; + margin: 0px; + color: #DFE1E2; +} + +QLabel:disabled { + background-color: #19232D; + border: 0px solid #455364; + color: #788D9C; +} + +/* QTextBrowser ----------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qabstractscrollarea + +--------------------------------------------------------------------------- */ +QTextBrowser { + background-color: #19232D; + border: 1px solid #455364; + color: #DFE1E2; + border-radius: 4px; +} + +QTextBrowser:disabled { + background-color: #19232D; + border: 1px solid #455364; + color: #788D9C; + border-radius: 4px; +} + +QTextBrowser:hover, QTextBrowser:!hover, QTextBrowser:selected, QTextBrowser:pressed { + border: 1px solid #455364; +} + +/* QGraphicsView ---------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QGraphicsView { + background-color: #19232D; + border: 1px solid #455364; + color: #DFE1E2; + border-radius: 4px; +} + +QGraphicsView:disabled { + background-color: #19232D; + border: 1px solid #455364; + color: #788D9C; + border-radius: 4px; +} + +QGraphicsView:hover, QGraphicsView:!hover, QGraphicsView:selected, QGraphicsView:pressed { + border: 1px solid #455364; +} + +/* QCalendarWidget -------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QCalendarWidget { + border: 1px solid #455364; + border-radius: 4px; +} + +QCalendarWidget:disabled { + background-color: #19232D; + color: #788D9C; +} + +/* QLCDNumber ------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QLCDNumber { + background-color: #19232D; + color: #DFE1E2; +} + +QLCDNumber:disabled { + background-color: #19232D; + color: #788D9C; +} + +/* QProgressBar ----------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar + +--------------------------------------------------------------------------- */ +QProgressBar { + background-color: #19232D; + border: 1px solid #455364; + color: #DFE1E2; + border-radius: 4px; + text-align: center; +} + +QProgressBar:disabled { + background-color: #19232D; + border: 1px solid #455364; + color: #788D9C; + border-radius: 4px; + text-align: center; +} + +QProgressBar::chunk { + background-color: #346792; + color: #19232D; + border-radius: 4px; +} + +QProgressBar::chunk:disabled { + background-color: #26486B; + color: #788D9C; + border-radius: 4px; +} + +/* ------------------------------------------------------------------------ */ +/* BUTTONS ---------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* QPushButton ------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qpushbutton + +--------------------------------------------------------------------------- */ +QPushButton { + background-color: #455364; + color: #DFE1E2; + border-radius: 4px; + padding: 2px; + outline: none; + border: none; +} + +QPushButton:disabled { + background-color: #455364; + color: #788D9C; + border-radius: 4px; + padding: 2px; +} + +QPushButton:checked { + background-color: #60798B; + border-radius: 4px; + padding: 2px; + outline: none; +} + +QPushButton:checked:disabled { + background-color: #60798B; + color: #788D9C; + border-radius: 4px; + padding: 2px; + outline: none; +} + +QPushButton:checked:selected { + background: #60798B; +} + +QPushButton:hover { + background-color: #54687A; + color: #DFE1E2; +} + +QPushButton:pressed { + background-color: #60798B; +} + +QPushButton:selected { + background: #60798B; + color: #DFE1E2; +} + +QPushButton::menu-indicator { + subcontrol-origin: padding; + subcontrol-position: bottom right; + bottom: 4px; +} + +QDialogButtonBox QPushButton { + /* Issue #194 #248 - Special case of QPushButton inside dialogs, for better UI */ + min-width: 80px; +} + +/* QToolButton ------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbutton + +--------------------------------------------------------------------------- */ +QToolButton { + background-color: #455364; + color: #DFE1E2; + border-radius: 4px; + padding: 2px; + outline: none; + border: none; + /* 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:disabled { + background-color: #455364; + color: #788D9C; + border-radius: 4px; + padding: 2px; +} + +QToolButton:checked { + background-color: #60798B; + border-radius: 4px; + padding: 2px; + outline: none; +} + +QToolButton:checked:disabled { + background-color: #60798B; + color: #788D9C; + border-radius: 4px; + padding: 2px; + outline: none; +} + +QToolButton:checked:hover { + background-color: #54687A; + color: #DFE1E2; +} + +QToolButton:checked:pressed { + background-color: #60798B; +} + +QToolButton:checked:selected { + background: #60798B; + color: #DFE1E2; +} + +QToolButton:hover { + background-color: #54687A; + color: #DFE1E2; +} + +QToolButton:pressed { + background-color: #60798B; +} + +QToolButton:selected { + background: #60798B; + color: #DFE1E2; +} + +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 #455364; + border-radius: 0; +} + +QToolButton[popupMode="2"] { + /* Only for InstantPopup */ + padding-right: 2px; +} + +QToolButton::menu-button { + padding: 2px; + border-radius: 4px; + width: 12px; + border: none; + outline: none; +} + +QToolButton::menu-button:hover { + border: 1px solid #346792; +} + +QToolButton::menu-button:checked:hover { + border: 1px solid #346792; +} + +QToolButton::menu-indicator { + image: url(":/qss_icons/dark/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/dark/rc/arrow_down.png"); + height: 8px; + width: 8px; +} + +QToolButton::menu-arrow:hover { + image: url(":/qss_icons/dark/rc/arrow_down_focus.png"); +} + +/* QCommandLinkButton ----------------------------------------------------- + +--------------------------------------------------------------------------- */ +QCommandLinkButton { + background-color: transparent; + border: 1px solid #455364; + color: #DFE1E2; + border-radius: 4px; + padding: 0px; + margin: 0px; +} + +QCommandLinkButton:disabled { + background-color: transparent; + color: #788D9C; +} + +/* ------------------------------------------------------------------------ */ +/* INPUTS - NO FIELDS ----------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* QComboBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox + +--------------------------------------------------------------------------- */ +QComboBox { + border: 1px solid #455364; + border-radius: 4px; + selection-background-color: #346792; + padding-left: 4px; + padding-right: 4px; + /* padding-right = 36; 4 + 16*2 See scrollbar size */ + /* changed to 4px to fix #239 */ + /* 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 #455364; + border-radius: 0; + background-color: #19232D; + selection-background-color: #346792; +} + +QComboBox QAbstractItemView:hover { + background-color: #19232D; + color: #DFE1E2; +} + +QComboBox QAbstractItemView:selected { + background: #346792; + color: #455364; +} + +QComboBox QAbstractItemView:alternate { + background: #19232D; +} + +QComboBox:disabled { + background-color: #19232D; + color: #788D9C; +} + +QComboBox:hover { + border: 1px solid #346792; +} + +QComboBox:focus { + border: 1px solid #1A72BB; +} + +QComboBox:on { + selection-background-color: #346792; +} + +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 { + /* Remove to fix #282, #285 and MR #288*/ + /*&:checked { + font-weight: bold; + } + + &:selected { + border: 0px solid transparent; + } + */ +} + +QComboBox::item:alternate { + background: #19232D; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 12px; + border-left: 1px solid #455364; +} + +QComboBox::down-arrow { + image: url(":/qss_icons/dark/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/dark/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: #455364; + border: 1px solid #455364; + height: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::groove:vertical { + background: #455364; + border: 1px solid #455364; + width: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::add-page:vertical { + background: #346792; + border: 1px solid #455364; + width: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::add-page:vertical :disabled { + background: #26486B; +} + +QSlider::sub-page:horizontal { + background: #346792; + border: 1px solid #455364; + height: 4px; + margin: 0px; + border-radius: 4px; +} + +QSlider::sub-page:horizontal:disabled { + background: #26486B; +} + +QSlider::handle:horizontal { + background: #9DA9B5; + border: 1px solid #455364; + width: 8px; + height: 8px; + margin: -8px 0px; + border-radius: 4px; +} + +QSlider::handle:horizontal:hover { + background: #346792; + border: 1px solid #346792; +} + +QSlider::handle:horizontal:focus { + border: 1px solid #1A72BB; +} + +QSlider::handle:vertical { + background: #9DA9B5; + border: 1px solid #455364; + width: 8px; + height: 8px; + margin: 0 -8px; + border-radius: 4px; +} + +QSlider::handle:vertical:hover { + background: #346792; + border: 1px solid #346792; +} + +QSlider::handle:vertical:focus { + border: 1px solid #1A72BB; +} + +/* 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 #455364; + border-radius: 4px; + color: #DFE1E2; +} + +QLineEdit:disabled { + background-color: #19232D; + color: #788D9C; +} + +QLineEdit:hover { + border: 1px solid #346792; + color: #DFE1E2; +} + +QLineEdit:focus { + border: 1px solid #1A72BB; +} + +QLineEdit:selected { + background-color: #346792; + color: #455364; +} + +/* QTabWiget -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar + +--------------------------------------------------------------------------- */ +QTabWidget { + padding: 2px; + selection-background-color: #455364; +} + +QTabWidget QWidget { + /* Fixes #189 */ + border-radius: 4px; +} + +QTabWidget::pane { + border: 1px solid #455364; + border-radius: 4px; + margin: 0px; + /* Fixes double border inside pane with pyqt5 */ + padding: 0px; +} + +QTabWidget::pane:selected { + background-color: #455364; + border: 1px solid #346792; +} + +/* QTabBar ---------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar + +--------------------------------------------------------------------------- */ +QTabBar, QDockWidget 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, QDockWidget QTabBar::close-button { + border: 0; + margin: 0; + padding: 4px; + image: url(":/qss_icons/dark/rc/window_close.png"); +} + +QTabBar::close-button:hover, QDockWidget QTabBar::close-button:hover { + image: url(":/qss_icons/dark/rc/window_close_focus.png"); +} + +QTabBar::close-button:pressed, QDockWidget QTabBar::close-button:pressed { + image: url(":/qss_icons/dark/rc/window_close_pressed.png"); +} + +QTabBar::tab, QDockWidget QTabBar::tab { + /* !selected and disabled ----------------------------------------- */ + /* selected ------------------------------------------------------- */ +} + +QTabBar::tab:top:selected:disabled, QDockWidget QTabBar::tab:top:selected:disabled { + border-bottom: 3px solid #26486B; + color: #788D9C; + background-color: #455364; +} + +QTabBar::tab:bottom:selected:disabled, QDockWidget QTabBar::tab:bottom:selected:disabled { + border-top: 3px solid #26486B; + color: #788D9C; + background-color: #455364; +} + +QTabBar::tab:left:selected:disabled, QDockWidget QTabBar::tab:left:selected:disabled { + border-right: 3px solid #26486B; + color: #788D9C; + background-color: #455364; +} + +QTabBar::tab:right:selected:disabled, QDockWidget QTabBar::tab:right:selected:disabled { + border-left: 3px solid #26486B; + color: #788D9C; + background-color: #455364; +} + +QTabBar::tab:top:!selected:disabled, QDockWidget QTabBar::tab:top:!selected:disabled { + border-bottom: 3px solid #19232D; + color: #788D9C; + background-color: #19232D; +} + +QTabBar::tab:bottom:!selected:disabled, QDockWidget QTabBar::tab:bottom:!selected:disabled { + border-top: 3px solid #19232D; + color: #788D9C; + background-color: #19232D; +} + +QTabBar::tab:left:!selected:disabled, QDockWidget QTabBar::tab:left:!selected:disabled { + border-right: 3px solid #19232D; + color: #788D9C; + background-color: #19232D; +} + +QTabBar::tab:right:!selected:disabled, QDockWidget QTabBar::tab:right:!selected:disabled { + border-left: 3px solid #19232D; + color: #788D9C; + background-color: #19232D; +} + +QTabBar::tab:top:!selected, QDockWidget QTabBar::tab:top:!selected { + border-bottom: 2px solid #19232D; + margin-top: 2px; +} + +QTabBar::tab:bottom:!selected, QDockWidget QTabBar::tab:bottom:!selected { + border-top: 2px solid #19232D; + margin-bottom: 2px; +} + +QTabBar::tab:left:!selected, QDockWidget QTabBar::tab:left:!selected { + border-left: 2px solid #19232D; + margin-right: 2px; +} + +QTabBar::tab:right:!selected, QDockWidget QTabBar::tab:right:!selected { + border-right: 2px solid #19232D; + margin-left: 2px; +} + +QTabBar::tab:top, QDockWidget QTabBar::tab:top { + background-color: #455364; + margin-left: 2px; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; + min-width: 5px; + border-bottom: 3px solid #455364; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:top:selected, QDockWidget QTabBar::tab:top:selected { + background-color: #54687A; + border-bottom: 3px solid #259AE9; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:top:!selected:hover, QDockWidget QTabBar::tab:top:!selected:hover { + border: 1px solid #1A72BB; + border-bottom: 3px solid #1A72BB; + /* Fixes spyder-ide/spyder#9766 and #243 */ + padding-left: 3px; + padding-right: 3px; +} + +QTabBar::tab:bottom, QDockWidget QTabBar::tab:bottom { + border-top: 3px solid #455364; + background-color: #455364; + margin-left: 2px; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + min-width: 5px; +} + +QTabBar::tab:bottom:selected, QDockWidget QTabBar::tab:bottom:selected { + background-color: #54687A; + border-top: 3px solid #259AE9; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab:bottom:!selected:hover, QDockWidget QTabBar::tab:bottom:!selected:hover { + border: 1px solid #1A72BB; + border-top: 3px solid #1A72BB; + /* Fixes spyder-ide/spyder#9766 and #243 */ + padding-left: 3px; + padding-right: 3px; +} + +QTabBar::tab:left, QDockWidget QTabBar::tab:left { + background-color: #455364; + margin-top: 2px; + padding-left: 2px; + padding-right: 2px; + padding-top: 4px; + padding-bottom: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + min-height: 5px; +} + +QTabBar::tab:left:selected, QDockWidget QTabBar::tab:left:selected { + background-color: #54687A; + border-right: 3px solid #259AE9; +} + +QTabBar::tab:left:!selected:hover, QDockWidget QTabBar::tab:left:!selected:hover { + border: 1px solid #1A72BB; + border-right: 3px solid #1A72BB; + /* Fixes different behavior #271 */ + margin-right: 0px; + padding-right: -1px; +} + +QTabBar::tab:right, QDockWidget QTabBar::tab:right { + background-color: #455364; + margin-top: 2px; + padding-left: 2px; + padding-right: 2px; + padding-top: 4px; + padding-bottom: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + min-height: 5px; +} + +QTabBar::tab:right:selected, QDockWidget QTabBar::tab:right:selected { + background-color: #54687A; + border-left: 3px solid #259AE9; +} + +QTabBar::tab:right:!selected:hover, QDockWidget QTabBar::tab:right:!selected:hover { + border: 1px solid #1A72BB; + border-left: 3px solid #1A72BB; + /* Fixes different behavior #271 */ + margin-left: 0px; + padding-left: 0px; +} + +QTabBar QToolButton, QDockWidget QTabBar QToolButton { + /* Fixes #136 */ + background-color: #455364; + height: 12px; + width: 12px; +} + +QTabBar QToolButton:pressed, QDockWidget QTabBar QToolButton:pressed { + background-color: #455364; +} + +QTabBar QToolButton:pressed:hover, QDockWidget QTabBar QToolButton:pressed:hover { + border: 1px solid #346792; +} + +QTabBar QToolButton::left-arrow:enabled, QDockWidget QTabBar QToolButton::left-arrow:enabled { + image: url(":/qss_icons/dark/rc/arrow_left.png"); +} + +QTabBar QToolButton::left-arrow:disabled, QDockWidget QTabBar QToolButton::left-arrow:disabled { + image: url(":/qss_icons/dark/rc/arrow_left_disabled.png"); +} + +QTabBar QToolButton::right-arrow:enabled, QDockWidget QTabBar QToolButton::right-arrow:enabled { + image: url(":/qss_icons/dark/rc/arrow_right.png"); +} + +QTabBar QToolButton::right-arrow:disabled, QDockWidget QTabBar QToolButton::right-arrow:disabled { + image: url(":/qss_icons/dark/rc/arrow_right_disabled.png"); +} + +/* QDockWiget ------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QDockWidget { + outline: 1px solid #455364; + background-color: #19232D; + border: 1px solid #455364; + border-radius: 4px; + titlebar-close-icon: url(":/qss_icons/dark/rc/transparent.png"); + titlebar-normal-icon: url(":/qss_icons/dark/rc/transparent.png"); +} + +QDockWidget::title { + /* Better size for title bar */ + padding: 3px; + spacing: 4px; + border: none; + background-color: #455364; +} + +QDockWidget::close-button { + icon-size: 12px; + border: none; + background: transparent; + background-image: transparent; + border: 0; + margin: 0; + padding: 0; + image: url(":/qss_icons/dark/rc/window_close.png"); +} + +QDockWidget::close-button:hover { + image: url(":/qss_icons/dark/rc/window_close_focus.png"); +} + +QDockWidget::close-button:pressed { + image: url(":/qss_icons/dark/rc/window_close_pressed.png"); +} + +QDockWidget::float-button { + icon-size: 12px; + border: none; + background: transparent; + background-image: transparent; + border: 0; + margin: 0; + padding: 0; + image: url(":/qss_icons/dark/rc/window_undock.png"); +} + +QDockWidget::float-button:hover { + image: url(":/qss_icons/dark/rc/window_undock_focus.png"); +} + +QDockWidget::float-button:pressed { + image: url(":/qss_icons/dark/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/dark/rc/transparent.png"); +} + +QTreeView:branch:has-siblings:!adjoins-item { + border-image: url(":/qss_icons/dark/rc/branch_line.png") 0; +} + +QTreeView:branch:has-siblings:adjoins-item { + border-image: url(":/qss_icons/dark/rc/branch_more.png") 0; +} + +QTreeView:branch:!has-children:!has-siblings:adjoins-item { + border-image: url(":/qss_icons/dark/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/dark/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/dark/rc/branch_open.png"); +} + +QTreeView:branch:has-children:!has-siblings:closed:hover, QTreeView:branch:closed:has-children:has-siblings:hover { + image: url(":/qss_icons/dark/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/dark/rc/branch_open_focus.png"); +} + +QTreeView::indicator:checked, +QListView::indicator:checked, +QTableView::indicator:checked, +QColumnView::indicator:checked { + image: url(":/qss_icons/dark/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, +QTableView::indicator:checked:hover, +QTableView::indicator:checked:focus, +QTableView::indicator:checked:pressed, +QColumnView::indicator:checked:hover, +QColumnView::indicator:checked:focus, +QColumnView::indicator:checked:pressed { + image: url(":/qss_icons/dark/rc/checkbox_checked_focus.png"); +} + +QTreeView::indicator:unchecked, +QListView::indicator:unchecked, +QTableView::indicator:unchecked, +QColumnView::indicator:unchecked { + image: url(":/qss_icons/dark/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, +QTableView::indicator:unchecked:hover, +QTableView::indicator:unchecked:focus, +QTableView::indicator:unchecked:pressed, +QColumnView::indicator:unchecked:hover, +QColumnView::indicator:unchecked:focus, +QColumnView::indicator:unchecked:pressed { + image: url(":/qss_icons/dark/rc/checkbox_unchecked_focus.png"); +} + +QTreeView::indicator:indeterminate, +QListView::indicator:indeterminate, +QTableView::indicator:indeterminate, +QColumnView::indicator:indeterminate { + image: url(":/qss_icons/dark/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, +QTableView::indicator:indeterminate:hover, +QTableView::indicator:indeterminate:focus, +QTableView::indicator:indeterminate:pressed, +QColumnView::indicator:indeterminate:hover, +QColumnView::indicator:indeterminate:focus, +QColumnView::indicator:indeterminate:pressed { + image: url(":/qss_icons/dark/rc/checkbox_indeterminate_focus.png"); +} + +QTreeView, +QListView, +QTableView, +QColumnView { + background-color: #19232D; + border: 1px solid #455364; + color: #DFE1E2; + gridline-color: #455364; + border-radius: 4px; +} + +QTreeView:disabled, +QListView:disabled, +QTableView:disabled, +QColumnView:disabled { + background-color: #19232D; + color: #788D9C; +} + +QTreeView:selected, +QListView:selected, +QTableView:selected, +QColumnView:selected { + background-color: #346792; + color: #455364; +} + +QTreeView:focus, +QListView:focus, +QTableView:focus, +QColumnView:focus { + border: 1px solid #1A72BB; +} + +QTreeView::item:pressed, +QListView::item:pressed, +QTableView::item:pressed, +QColumnView::item:pressed { + background-color: #346792; +} + +QTreeView::item:selected:active, +QListView::item:selected:active, +QTableView::item:selected:active, +QColumnView::item:selected:active { + background-color: #346792; +} + +QTreeView::item:selected:!active, +QListView::item:selected:!active, +QTableView::item:selected:!active, +QColumnView::item:selected:!active { + color: #DFE1E2; + background-color: #37414F; +} + +QTreeView::item:!selected:hover, +QListView::item:!selected:hover, +QTableView::item:!selected:hover, +QColumnView::item:!selected:hover { + outline: 0; + color: #DFE1E2; + background-color: #37414F; +} + +QTableCornerButton::section { + background-color: #19232D; + border: 1px transparent #455364; + border-radius: 0px; +} + +/* QHeaderView ------------------------------------------------------------ + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qheaderview + +--------------------------------------------------------------------------- */ +QHeaderView { + background-color: #455364; + border: 0px transparent #455364; + padding: 0; + margin: 0; + border-radius: 0; +} + +QHeaderView:disabled { + background-color: #455364; + border: 1px transparent #455364; +} + +QHeaderView::section { + background-color: #455364; + color: #DFE1E2; + border-radius: 0; + text-align: left; + font-size: 13px; +} + +QHeaderView::section::horizontal { + padding-top: 0; + padding-bottom: 0; + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid #19232D; +} + +QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one { + border-left: 1px solid #455364; +} + +QHeaderView::section::horizontal:disabled { + color: #788D9C; +} + +QHeaderView::section::vertical { + padding-top: 0; + padding-bottom: 0; + padding-left: 4px; + padding-right: 4px; + border-top: 1px solid #19232D; +} + +QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one { + border-top: 1px solid #455364; +} + +QHeaderView::section::vertical:disabled { + color: #788D9C; +} + +QHeaderView::down-arrow { + /* Those settings (border/width/height/background-color) solve bug */ + /* transparent arrow background and size */ + background-color: #455364; + border: none; + height: 12px; + width: 12px; + padding-left: 2px; + padding-right: 2px; + image: url(":/qss_icons/dark/rc/arrow_down.png"); +} + +QHeaderView::up-arrow { + background-color: #455364; + border: none; + height: 12px; + width: 12px; + padding-left: 2px; + padding-right: 2px; + image: url(":/qss_icons/dark/rc/arrow_up.png"); +} + +/* QToolBox -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbox + +--------------------------------------------------------------------------- */ +QToolBox { + padding: 0px; + border: 0px; + border: 1px solid #455364; +} + +QToolBox:selected { + padding: 0px; + border: 2px solid #346792; +} + +QToolBox::tab { + background-color: #19232D; + border: 1px solid #455364; + color: #DFE1E2; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QToolBox::tab:disabled { + color: #788D9C; +} + +QToolBox::tab:selected { + background-color: #60798B; + border-bottom: 2px solid #346792; +} + +QToolBox::tab:selected:disabled { + background-color: #455364; + border-bottom: 2px solid #26486B; +} + +QToolBox::tab:!selected { + background-color: #455364; + border-bottom: 2px solid #455364; +} + +QToolBox::tab:!selected:disabled { + background-color: #19232D; +} + +QToolBox::tab:hover { + border-color: #1A72BB; + border-bottom: 2px solid #1A72BB; +} + +QToolBox QScrollArea { + 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 #455364; + /* No frame */ + /* HLine */ + /* HLine */ +} + +.QFrame[frameShape="0"] { + border-radius: 4px; + border: 1px transparent #455364; +} + +.QFrame[frameShape="4"] { + max-height: 2px; + border: none; + background-color: #455364; +} + +.QFrame[frameShape="5"] { + max-width: 2px; + border: none; + background-color: #455364; +} + +/* QSplitter -------------------------------------------------------------- + +https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qsplitter + +--------------------------------------------------------------------------- */ +QSplitter { + background-color: #455364; + spacing: 0px; + padding: 0px; + margin: 0px; +} + +QSplitter::handle { + background-color: #455364; + border: 0px solid #19232D; + spacing: 0px; + padding: 1px; + margin: 0px; +} + +QSplitter::handle:hover { + background-color: #9DA9B5; +} + +QSplitter::handle:horizontal { + width: 5px; + image: url(":/qss_icons/dark/rc/line_vertical.png"); +} + +QSplitter::handle:vertical { + height: 5px; + image: url(":/qss_icons/dark/rc/line_horizontal.png"); +} + +/* QDateEdit, QDateTimeEdit ----------------------------------------------- + +--------------------------------------------------------------------------- */ +QDateEdit, QDateTimeEdit { + selection-background-color: #346792; + border-style: solid; + border: 1px solid #455364; + 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, QDateTimeEdit:on { + selection-background-color: #346792; +} + +QDateEdit::drop-down, QDateTimeEdit::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 12px; + border-left: 1px solid #455364; +} + +QDateEdit::down-arrow, QDateTimeEdit::down-arrow { + image: url(":/qss_icons/dark/rc/arrow_down_disabled.png"); + height: 8px; + width: 8px; +} + +QDateEdit::down-arrow:on, QDateEdit::down-arrow:hover, QDateEdit::down-arrow:focus, QDateTimeEdit::down-arrow:on, QDateTimeEdit::down-arrow:hover, QDateTimeEdit::down-arrow:focus { + image: url(":/qss_icons/dark/rc/arrow_down.png"); +} + +QDateEdit QAbstractItemView, QDateTimeEdit QAbstractItemView { + background-color: #19232D; + border-radius: 4px; + border: 1px solid #455364; + selection-background-color: #346792; +} + +/* QAbstractView ---------------------------------------------------------- + +--------------------------------------------------------------------------- */ +QAbstractView:hover { + border: 1px solid #346792; + color: #DFE1E2; +} + +QAbstractView:selected { + background: #346792; + color: #455364; +} + +/* PlotWidget ------------------------------------------------------------- + +--------------------------------------------------------------------------- */ +PlotWidget { + /* Fix cut labels in plots #134 */ + padding: 0px; +} + + + + + + + + + 参数 + + + + + + ENT_mix_left_data + + + + + + + + + + delay_data1 + + + + + + + + + + + + + ENT_mx_right_data + + + + + + + + + + ENC_volume_data1 + + + + + + + + + + + + 发送 + + + + + + + 获取 + + + + + + + + + + + 滤波器-2 + + + + + + + + + + Freq + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + Qt::Orientation::Horizontal + + + + 13 + 20 + + + + + + + + Qt::Orientation::Vertical + + + + + + + Qt::Orientation::Horizontal + + + + 18 + 20 + + + + + + + + + + + + + + Q + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + Qt::Orientation::Horizontal + + + + 13 + 20 + + + + + + + + Qt::Orientation::Vertical + + + + + + + Qt::Orientation::Horizontal + + + + 18 + 20 + + + + + + + + + + + + + + Gain + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + Qt::Orientation::Horizontal + + + + 13 + 20 + + + + + + + + Qt::Orientation::Vertical + + + + + + + Qt::Orientation::Horizontal + + + + 18 + 20 + + + + + + + + + + + + + + Slope + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + Qt::Orientation::Horizontal + + + + 13 + 20 + + + + + + + + Qt::Orientation::Vertical + + + + + + + Qt::Orientation::Horizontal + + + + 18 + 20 + + + + + + + + + + + + + + + + QTableWidget {border: none} + + + 0 + + + Qt::ScrollBarPolicy::ScrollBarAsNeeded + + + Qt::ScrollBarPolicy::ScrollBarAsNeeded + + + QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents + + + true + + + Qt::PenStyle::DotLine + + + 6 + + + true + + + 18 + + + 67 + + + false + + + false + + + false + + + false + + + 17 + + + 30 + + + false + + + + 新建行 + + + + + 新建行 + + + + + 新建行 + + + + + + + + 滤波器 + + + AlignLeading|AlignVCenter + + + + + Freq + + + AlignLeading|AlignVCenter + + + + + Q + + + AlignJustify|AlignVCenter + + + + + Gain + + + AlignJustify|AlignVCenter + + + + + Slop + + + AlignJustify|AlignVCenter + + + + + PEAK_1 + + + Checked + + + + + 1111 + + + + + 11 + + + + + 1.1 + + + + + 6 + + + + + LOWPASS_1 + + + Checked + + + + + 1112 + + + + + 32 + + + + + 2.3 + + + + + 24 + + + + + HIGHPASS_1 + + + Checked + + + + + ALLPASS_1 + + + Checked + + + + + LOWSHELF_1 + + + Checked + + + + + HIGHSHELF_1 + + + Checked + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + 添加 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + 删除 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + diff --git a/widgets/Ui_widget.py b/widgets/Ui_widget.py new file mode 100644 index 0000000..0b158f6 --- /dev/null +++ b/widgets/Ui_widget.py @@ -0,0 +1,2695 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'widget.ui' +## +## Created by: Qt User Interface Compiler version 6.8.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractScrollArea, QApplication, QGridLayout, QGroupBox, + QHBoxLayout, QHeaderView, QLabel, QLineEdit, + QPushButton, QSizePolicy, QSlider, QSpacerItem, + QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget) + +class Ui_Widget(object): + def setupUi(self, Widget): + if not Widget.objectName(): + Widget.setObjectName(u"Widget") + Widget.resize(691, 408) + Widget.setStyleSheet(u"/* ---------------------------------------------------------------------------\n" +"\n" +" WARNING! File created programmatically. All changes made in this file will be lost!\n" +"\n" +" Created by the qtsass compiler v0.4.0\n" +"\n" +" The definitions are in the \"qdarkstyle.qss._styles.scss\" module\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"/* Light Style - QDarkStyleSheet ------------------------------------------ */\n" +"/*\n" +"\n" +"See Qt documentation:\n" +"\n" +" - https://doc.qt.io/qt-5/stylesheet.html\n" +" - https://doc.qt.io/qt-5/stylesheet-reference.html\n" +" - https://doc.qt.io/qt-5/stylesheet-examples.html\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"/* Reset elements ------------------------------------------------------------\n" +"\n" +"Resetting everything helps to unify styles across different operating systems\n" +"\n" +"--------------------------------------------------------------------------- */" + "\n" +"* {\n" +" padding: 0px;\n" +" margin: 0px;\n" +" border: 0px;\n" +" border-style: none;\n" +" border-image: none;\n" +" outline: 0;\n" +"}\n" +"\n" +"/* specific reset for elements inside QToolBar */\n" +"QToolBar * {\n" +" margin: 0px;\n" +" padding: 0px;\n" +"}\n" +"\n" +"/* QWidget ----------------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QWidget {\n" +" background-color: #19232D;\n" +" border: 0px solid #455364;\n" +" padding: 0px;\n" +" color: #DFE1E2;\n" +" selection-background-color: #346792;\n" +" selection-color: #DFE1E2;\n" +"}\n" +"\n" +"QWidget:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +" selection-background-color: #26486B;\n" +" selection-color: #788D9C;\n" +"}\n" +"\n" +"QWidget::item:selected {\n" +" background-color: #346792;\n" +"}\n" +"\n" +"QWidget::item:hover:!selected {\n" +" background-color: #1A72BB;\n" +"}\n" +"\n" +"/* QMainWindow --------------------------------------------" + "----------------\n" +"\n" +"This adjusts the splitter in the dock widget, not qsplitter\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmainwindow\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QMainWindow::separator {\n" +" background-color: #455364;\n" +" border: 0px solid #19232D;\n" +" spacing: 0px;\n" +" padding: 2px;\n" +"}\n" +"\n" +"QMainWindow::separator:hover {\n" +" background-color: #60798B;\n" +" border: 0px solid #1A72BB;\n" +"}\n" +"\n" +"QMainWindow::separator:horizontal {\n" +" width: 5px;\n" +" margin-top: 2px;\n" +" margin-bottom: 2px;\n" +" image: url(\":/qss_icons/dark/rc/toolbar_separator_vertical.png\");\n" +"}\n" +"\n" +"QMainWindow::separator:vertical {\n" +" height: 5px;\n" +" margin-left: 2px;\n" +" margin-right: 2px;\n" +" image: url(\":/qss_icons/dark/rc/toolbar_separator_horizontal.png\");\n" +"}\n" +"\n" +"/* QToolTip ---------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples." + "html#customizing-qtooltip\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QToolTip {\n" +" background-color: #346792;\n" +" color: #DFE1E2;\n" +" /* If you remove the border property, background stops working on Windows */\n" +" border: none;\n" +" /* Remove padding, for fix combo box tooltip */\n" +" padding: 0px;\n" +" /* Remove opacity, fix #174 - may need to use RGBA */\n" +"}\n" +"\n" +"/* QStatusBar -------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qstatusbar\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QStatusBar {\n" +" border: 1px solid #455364;\n" +" /* Fixes Spyder #9120, #9121 */\n" +" background: #455364;\n" +" /* Fixes #205, white vertical borders separating items */\n" +"}\n" +"\n" +"QStatusBar::item {\n" +" border: none;\n" +"}\n" +"\n" +"QStatusBar QToolTip {\n" +" background-color: #1A72BB;\n" +" border: 1px solid #19232D;\n" +" col" + "or: #19232D;\n" +" /* Remove padding, for fix combo box tooltip */\n" +" padding: 0px;\n" +" /* Reducing transparency to read better */\n" +" opacity: 230;\n" +"}\n" +"\n" +"QStatusBar QLabel {\n" +" /* Fixes Spyder #9120, #9121 */\n" +" background: transparent;\n" +"}\n" +"\n" +"/* QCheckBox --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcheckbox\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QCheckBox {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +" spacing: 4px;\n" +" outline: none;\n" +" padding-top: 4px;\n" +" padding-bottom: 4px;\n" +"}\n" +"\n" +"QCheckBox:focus {\n" +" border: none;\n" +"}\n" +"\n" +"QCheckBox QWidget:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QCheckBox::indicator {\n" +" margin-left: 2px;\n" +" height: 14px;\n" +" width: 14px;\n" +"}\n" +"\n" +"QCheckBox::indicator:unchecked {\n" +" image: url(\":/qss_icons/dark/rc/chec" + "kbox_unchecked.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:focus, QCheckBox::indicator:unchecked:pressed {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_focus.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:unchecked:disabled {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_disabled.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:checked {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:focus, QCheckBox::indicator:checked:pressed {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked_focus.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:checked:disabled {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked_disabled.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:indeterminate {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_indeterminate.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:indeterminate:disabled {\n" +" ima" + "ge: url(\":/qss_icons/dark/rc/checkbox_indeterminate_disabled.png\");\n" +"}\n" +"\n" +"QCheckBox::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_indeterminate_focus.png\");\n" +"}\n" +"\n" +"/* QGroupBox --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qgroupbox\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QGroupBox {\n" +" font-weight: bold;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" margin-top: 6px;\n" +" margin-bottom: 4px;\n" +"}\n" +"\n" +"QGroupBox::title {\n" +" subcontrol-origin: margin;\n" +" subcontrol-position: top left;\n" +" left: 4px;\n" +" padding-left: 2px;\n" +" padding-right: 4px;\n" +" padding-top: -4px;\n" +"}\n" +"\n" +"QGroupBox::indicator {\n" +" margin-left: 2px;\n" +" margin-top: 2px;\n" +" padding: 0;\n" +" he" + "ight: 14px;\n" +" width: 14px;\n" +"}\n" +"\n" +"QGroupBox::indicator:unchecked {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked.png\");\n" +"}\n" +"\n" +"QGroupBox::indicator:unchecked:hover, QGroupBox::indicator:unchecked:focus, QGroupBox::indicator:unchecked:pressed {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_focus.png\");\n" +"}\n" +"\n" +"QGroupBox::indicator:unchecked:disabled {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_disabled.png\");\n" +"}\n" +"\n" +"QGroupBox::indicator:checked {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked.png\");\n" +"}\n" +"\n" +"QGroupBox::indicator:checked:hover, QGroupBox::indicator:checked:focus, QGroupBox::indicator:checked:pressed {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked_focus.png\");\n" +"}\n" +"\n" +"QGroupBox::indicator:checked:disabled {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked_disabled.png\");\n" +"}\n" +"\n" +"/* QRadioButton" + " -----------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qradiobutton\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QRadioButton {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +" spacing: 4px;\n" +" padding-top: 4px;\n" +" padding-bottom: 4px;\n" +" border: none;\n" +" outline: none;\n" +"}\n" +"\n" +"QRadioButton:focus {\n" +" border: none;\n" +"}\n" +"\n" +"QRadioButton:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +" border: none;\n" +" outline: none;\n" +"}\n" +"\n" +"QRadioButton QWidget {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +" spacing: 0px;\n" +" padding: 0px;\n" +" outline: none;\n" +" border: none;\n" +"}\n" +"\n" +"QRadioButton::indicator {\n" +" border: none;\n" +" outline: none;\n" +" margin-left: 2px;\n" +" height: 14px;\n" +" width: 14px;\n" +"}\n" +"\n" +"QRadioButton::indicator:unchecked {\n" +" image: url(\":/qss_icons/dark/rc/radio_un" + "checked.png\");\n" +"}\n" +"\n" +"QRadioButton::indicator:unchecked:hover, QRadioButton::indicator:unchecked:focus, QRadioButton::indicator:unchecked:pressed {\n" +" border: none;\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_unchecked_focus.png\");\n" +"}\n" +"\n" +"QRadioButton::indicator:unchecked:disabled {\n" +" image: url(\":/qss_icons/dark/rc/radio_unchecked_disabled.png\");\n" +"}\n" +"\n" +"QRadioButton::indicator:checked {\n" +" border: none;\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_checked.png\");\n" +"}\n" +"\n" +"QRadioButton::indicator:checked:hover, QRadioButton::indicator:checked:focus, QRadioButton::indicator:checked:pressed {\n" +" border: none;\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_checked_focus.png\");\n" +"}\n" +"\n" +"QRadioButton::indicator:checked:disabled {\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_checked_disabled.png\");\n" +"}\n" +"\n" +"/* QMenuBar --------------------------------------------------------" + "-------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenubar\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QMenuBar {\n" +" background-color: #455364;\n" +" padding: 2px;\n" +" border: 1px solid #19232D;\n" +" color: #DFE1E2;\n" +" selection-background-color: #1A72BB;\n" +"}\n" +"\n" +"QMenuBar:focus {\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"QMenuBar::item {\n" +" background: transparent;\n" +" padding: 4px;\n" +"}\n" +"\n" +"QMenuBar::item:selected {\n" +" padding: 4px;\n" +" background: transparent;\n" +" border: 0px solid #455364;\n" +" background-color: #1A72BB;\n" +"}\n" +"\n" +"QMenuBar::item:pressed {\n" +" padding: 4px;\n" +" border: 0px solid #455364;\n" +" background-color: #1A72BB;\n" +" color: #DFE1E2;\n" +" margin-bottom: 0px;\n" +" padding-bottom: 0px;\n" +"}\n" +"\n" +"/* QMenu ------------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenu\n" +"\n" +"---" + "------------------------------------------------------------------------ */\n" +"QMenu {\n" +" border: 0px solid #455364;\n" +" color: #DFE1E2;\n" +" margin: 0px;\n" +" background-color: #37414F;\n" +" selection-background-color: #1A72BB;\n" +"}\n" +"\n" +"QMenu::separator {\n" +" height: 1px;\n" +" background-color: #60798B;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QMenu::item {\n" +" background-color: #37414F;\n" +" padding: 4px 24px 4px 28px;\n" +" /* Reserve space for selection border */\n" +" border: 1px transparent #455364;\n" +"}\n" +"\n" +"QMenu::item:selected {\n" +" color: #DFE1E2;\n" +" background-color: #1A72BB;\n" +"}\n" +"\n" +"QMenu::item:pressed {\n" +" background-color: #1A72BB;\n" +"}\n" +"\n" +"QMenu::icon {\n" +" padding-left: 10px;\n" +" width: 14px;\n" +" height: 14px;\n" +"}\n" +"\n" +"QMenu::indicator {\n" +" padding-left: 8px;\n" +" width: 12px;\n" +" height: 12px;\n" +" /* non-exclusive indicator = check box style indicator (see QActionGroup::setExclusive) */\n" +" /* exclusive indicator = radio button s" + "tyle indicator (see QActionGroup::setExclusive) */\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:unchecked {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:unchecked:hover, QMenu::indicator:non-exclusive:unchecked:focus, QMenu::indicator:non-exclusive:unchecked:pressed {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_focus.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:unchecked:disabled {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_disabled.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:checked {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:checked:hover, QMenu::indicator:non-exclusive:checked:focus, QMenu::indicator:non-exclusive:checked:pressed {\n" +" border: none;\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked_focus.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:checked:disabled {\n" +" image: url(\":/qs" + "s_icons/dark/rc/checkbox_checked_disabled.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:indeterminate {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_indeterminate.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:indeterminate:disabled {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_indeterminate_disabled.png\");\n" +"}\n" +"\n" +"QMenu::indicator:non-exclusive:indeterminate:focus, QMenu::indicator:non-exclusive:indeterminate:hover, QMenu::indicator:non-exclusive:indeterminate:pressed {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_indeterminate_focus.png\");\n" +"}\n" +"\n" +"QMenu::indicator:exclusive:unchecked {\n" +" image: url(\":/qss_icons/dark/rc/radio_unchecked.png\");\n" +"}\n" +"\n" +"QMenu::indicator:exclusive:unchecked:hover, QMenu::indicator:exclusive:unchecked:focus, QMenu::indicator:exclusive:unchecked:pressed {\n" +" border: none;\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_unchecked_focus.png\");\n" +"}\n" +"\n" +"QMenu::indicator:exclusive:unchecked:disabled {\n" +"" + " image: url(\":/qss_icons/dark/rc/radio_unchecked_disabled.png\");\n" +"}\n" +"\n" +"QMenu::indicator:exclusive:checked {\n" +" border: none;\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_checked.png\");\n" +"}\n" +"\n" +"QMenu::indicator:exclusive:checked:hover, QMenu::indicator:exclusive:checked:focus, QMenu::indicator:exclusive:checked:pressed {\n" +" border: none;\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_checked_focus.png\");\n" +"}\n" +"\n" +"QMenu::indicator:exclusive:checked:disabled {\n" +" outline: none;\n" +" image: url(\":/qss_icons/dark/rc/radio_checked_disabled.png\");\n" +"}\n" +"\n" +"QMenu::right-arrow {\n" +" margin: 5px;\n" +" padding-left: 12px;\n" +" image: url(\":/qss_icons/dark/rc/arrow_right.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +"}\n" +"\n" +"/* QAbstractItemView ------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox\n" +"\n" +"-----------------------------------------" + "---------------------------------- */\n" +"QAbstractItemView {\n" +" alternate-background-color: #19232D;\n" +" color: #DFE1E2;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QAbstractItemView QLineEdit {\n" +" padding: 2px;\n" +"}\n" +"\n" +"/* QAbstractScrollArea ----------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qabstractscrollarea\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QAbstractScrollArea {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" /* fix #159 */\n" +" padding: 2px;\n" +" /* remove min-height to fix #244 */\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QAbstractScrollArea:disabled {\n" +" color: #788D9C;\n" +"}\n" +"\n" +"/* QScrollArea ------------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QScrollArea QWidget QWidget:disa" + "bled {\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"/* QScrollBar -------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qscrollbar\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QScrollBar:horizontal {\n" +" height: 16px;\n" +" margin: 2px 16px 2px 16px;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"QScrollBar:vertical {\n" +" background-color: #19232D;\n" +" width: 16px;\n" +" margin: 16px 2px 16px 2px;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QScrollBar::handle:horizontal {\n" +" background-color: #60798B;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" min-width: 8px;\n" +"}\n" +"\n" +"QScrollBar::handle:horizontal:hover {\n" +" background-color: #346792;\n" +" border: #346792;\n" +" border-radius: 4px;\n" +" min-width: 8px;\n" +"}\n" +"\n" +"QScrollBar::handle:horizontal:focus {\n" +"" + " border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QScrollBar::handle:vertical {\n" +" background-color: #60798B;\n" +" border: 1px solid #455364;\n" +" min-height: 8px;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QScrollBar::handle:vertical:hover {\n" +" background-color: #346792;\n" +" border: #346792;\n" +" border-radius: 4px;\n" +" min-height: 8px;\n" +"}\n" +"\n" +"QScrollBar::handle:vertical:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QScrollBar::add-line:horizontal {\n" +" margin: 0px 0px 0px 0px;\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_right_disabled.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: right;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::add-line:horizontal:hover, QScrollBar::add-line:horizontal:on {\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_right.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: right;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::add-line:vertical {\n" +" margin: 3px 0px 3px" + " 0px;\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_down_disabled.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: bottom;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on {\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: bottom;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::sub-line:horizontal {\n" +" margin: 0px 3px 0px 3px;\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_left_disabled.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: left;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on {\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_left.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: left;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::sub-line:vertical {\n" +" margin" + ": 3px 0px 3px 0px;\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_up_disabled.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: top;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::sub-line:vertical:hover, QScrollBar::sub-line:vertical:on {\n" +" border-image: url(\":/qss_icons/dark/rc/arrow_up.png\");\n" +" height: 12px;\n" +" width: 12px;\n" +" subcontrol-position: top;\n" +" subcontrol-origin: margin;\n" +"}\n" +"\n" +"QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal {\n" +" background: none;\n" +"}\n" +"\n" +"QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {\n" +" background: none;\n" +"}\n" +"\n" +"QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {\n" +" background: none;\n" +"}\n" +"\n" +"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\n" +" background: none;\n" +"}\n" +"\n" +"/* QTextEdit --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customiz" + "ing-specific-widgets\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QTextEdit {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +" border: 1px solid #455364;\n" +"}\n" +"\n" +"QTextEdit:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QTextEdit:selected {\n" +" background: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"/* QPlainTextEdit ---------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QPlainTextEdit {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +" border: 1px solid #455364;\n" +"}\n" +"\n" +"QPlainTextEdit:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QPlainTextEdit:selected {\n" +" background: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"/* QSizeGrip --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-" + "qsizegrip\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QSizeGrip {\n" +" background: transparent;\n" +" width: 12px;\n" +" height: 12px;\n" +" image: url(\":/qss_icons/dark/rc/window_grip.png\");\n" +"}\n" +"\n" +"/* QStackedWidget ---------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QStackedWidget {\n" +" padding: 2px;\n" +" border: 1px solid #455364;\n" +" border: 1px solid #19232D;\n" +"}\n" +"\n" +"/* QToolBar ---------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbar\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QToolBar {\n" +" background-color: #455364;\n" +" border-bottom: 1px solid #19232D;\n" +" padding: 1px;\n" +" font-weight: bold;\n" +" spacing: 2px;\n" +"}\n" +"\n" +"QToolBar:disabled {\n" +" /* Fixes #272 */\n" +" background-color: #455" + "364;\n" +"}\n" +"\n" +"QToolBar::handle:horizontal {\n" +" width: 16px;\n" +" image: url(\":/qss_icons/dark/rc/toolbar_move_horizontal.png\");\n" +"}\n" +"\n" +"QToolBar::handle:vertical {\n" +" height: 16px;\n" +" image: url(\":/qss_icons/dark/rc/toolbar_move_vertical.png\");\n" +"}\n" +"\n" +"QToolBar::separator:horizontal {\n" +" width: 16px;\n" +" image: url(\":/qss_icons/dark/rc/toolbar_separator_horizontal.png\");\n" +"}\n" +"\n" +"QToolBar::separator:vertical {\n" +" height: 16px;\n" +" image: url(\":/qss_icons/dark/rc/toolbar_separator_vertical.png\");\n" +"}\n" +"\n" +"QToolButton#qt_toolbar_ext_button {\n" +" background: #455364;\n" +" border: 0px;\n" +" color: #DFE1E2;\n" +" image: url(\":/qss_icons/dark/rc/arrow_right.png\");\n" +"}\n" +"\n" +"/* QAbstractSpinBox -------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QAbstractSpinBox {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +"" + " /* This fixes 103, 111 */\n" +" padding-top: 2px;\n" +" /* This fixes 103, 111 */\n" +" padding-bottom: 2px;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" border-radius: 4px;\n" +" /* min-width: 5px; removed to fix 109 */\n" +"}\n" +"\n" +"QAbstractSpinBox:up-button {\n" +" background-color: transparent #19232D;\n" +" subcontrol-origin: border;\n" +" subcontrol-position: top right;\n" +" border-left: 1px solid #455364;\n" +" border-bottom: 1px solid #455364;\n" +" border-top-left-radius: 0;\n" +" border-bottom-left-radius: 0;\n" +" margin: 1px;\n" +" width: 12px;\n" +" margin-bottom: -1px;\n" +"}\n" +"\n" +"QAbstractSpinBox::up-arrow, QAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n" +" image: url(\":/qss_icons/dark/rc/arrow_up_disabled.png\");\n" +" height: 8px;\n" +" width: 8px;\n" +"}\n" +"\n" +"QAbstractSpinBox::up-arrow:hover {\n" +" image: url(\":/qss_icons/dark/rc/arrow_up.png\");\n" +"}\n" +"\n" +"QAbstractSpinBox:down-button {\n" +" background-color: transparent #19232D;\n" +" " + "subcontrol-origin: border;\n" +" subcontrol-position: bottom right;\n" +" border-left: 1px solid #455364;\n" +" border-top: 1px solid #455364;\n" +" border-top-left-radius: 0;\n" +" border-bottom-left-radius: 0;\n" +" margin: 1px;\n" +" width: 12px;\n" +" margin-top: -1px;\n" +"}\n" +"\n" +"QAbstractSpinBox::down-arrow, QAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down_disabled.png\");\n" +" height: 8px;\n" +" width: 8px;\n" +"}\n" +"\n" +"QAbstractSpinBox::down-arrow:hover {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +"}\n" +"\n" +"QAbstractSpinBox:hover {\n" +" border: 1px solid #346792;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QAbstractSpinBox:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QAbstractSpinBox:selected {\n" +" background: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"/* ------------------------------------------------------------------------ */\n" +"/* DISPLAYS ------------------------------------------------" + "--------------- */\n" +"/* ------------------------------------------------------------------------ */\n" +"/* QLabel -----------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qframe\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QLabel {\n" +" background-color: #19232D;\n" +" border: 0px solid #455364;\n" +" padding: 2px;\n" +" margin: 0px;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QLabel:disabled {\n" +" background-color: #19232D;\n" +" border: 0px solid #455364;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"/* QTextBrowser -----------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qabstractscrollarea\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QTextBrowser {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QT" + "extBrowser:disabled {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QTextBrowser:hover, QTextBrowser:!hover, QTextBrowser:selected, QTextBrowser:pressed {\n" +" border: 1px solid #455364;\n" +"}\n" +"\n" +"/* QGraphicsView ----------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QGraphicsView {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QGraphicsView:disabled {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QGraphicsView:hover, QGraphicsView:!hover, QGraphicsView:selected, QGraphicsView:pressed {\n" +" border: 1px solid #455364;\n" +"}\n" +"\n" +"/* QCalendarWidget --------------------------------------------------------\n" +"\n" +"------------------------------------------------" + "--------------------------- */\n" +"QCalendarWidget {\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QCalendarWidget:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"/* QLCDNumber -------------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QLCDNumber {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QLCDNumber:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"/* QProgressBar -----------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QProgressBar {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +" text-align: center;\n" +"}\n" +"\n" +"QProgressBar:disabled {\n" +" backgrou" + "nd-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +" text-align: center;\n" +"}\n" +"\n" +"QProgressBar::chunk {\n" +" background-color: #346792;\n" +" color: #19232D;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QProgressBar::chunk:disabled {\n" +" background-color: #26486B;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"/* ------------------------------------------------------------------------ */\n" +"/* BUTTONS ---------------------------------------------------------------- */\n" +"/* ------------------------------------------------------------------------ */\n" +"/* QPushButton ------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qpushbutton\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QPushButton {\n" +" background-color: #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" outline: none;\n" +" " + " border: none;\n" +"}\n" +"\n" +"QPushButton:disabled {\n" +" background-color: #455364;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +"}\n" +"\n" +"QPushButton:checked {\n" +" background-color: #60798B;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" outline: none;\n" +"}\n" +"\n" +"QPushButton:checked:disabled {\n" +" background-color: #60798B;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" outline: none;\n" +"}\n" +"\n" +"QPushButton:checked:selected {\n" +" background: #60798B;\n" +"}\n" +"\n" +"QPushButton:hover {\n" +" background-color: #54687A;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QPushButton:pressed {\n" +" background-color: #60798B;\n" +"}\n" +"\n" +"QPushButton:selected {\n" +" background: #60798B;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QPushButton::menu-indicator {\n" +" subcontrol-origin: padding;\n" +" subcontrol-position: bottom right;\n" +" bottom: 4px;\n" +"}\n" +"\n" +"QDialogButtonBox QPushButton {\n" +" /* Issue #194 #248 - Special case of QPushButton inside" + " dialogs, for better UI */\n" +" min-width: 80px;\n" +"}\n" +"\n" +"/* QToolButton ------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbutton\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QToolButton {\n" +" background-color: #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" outline: none;\n" +" border: none;\n" +" /* The subcontrols below are used only in the DelayedPopup mode */\n" +" /* The subcontrols below are used only in the MenuButtonPopup mode */\n" +" /* The subcontrol below is used only in the InstantPopup or DelayedPopup mode */\n" +"}\n" +"\n" +"QToolButton:disabled {\n" +" background-color: #455364;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +"}\n" +"\n" +"QToolButton:checked {\n" +" background-color: #60798B;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" outline: none;\n" +"}\n" +"\n" +"QToolButton:checked:disabled" + " {\n" +" background-color: #60798B;\n" +" color: #788D9C;\n" +" border-radius: 4px;\n" +" padding: 2px;\n" +" outline: none;\n" +"}\n" +"\n" +"QToolButton:checked:hover {\n" +" background-color: #54687A;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QToolButton:checked:pressed {\n" +" background-color: #60798B;\n" +"}\n" +"\n" +"QToolButton:checked:selected {\n" +" background: #60798B;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QToolButton:hover {\n" +" background-color: #54687A;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QToolButton:pressed {\n" +" background-color: #60798B;\n" +"}\n" +"\n" +"QToolButton:selected {\n" +" background: #60798B;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QToolButton[popupMode=\"0\"] {\n" +" /* Only for DelayedPopup */\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QToolButton[popupMode=\"1\"] {\n" +" /* Only for MenuButtonPopup */\n" +" padding-right: 20px;\n" +"}\n" +"\n" +"QToolButton[popupMode=\"1\"]::menu-button {\n" +" border: none;\n" +"}\n" +"\n" +"QToolButton[popupMode=\"1\"]::menu-button:hover {\n" +" border: none;\n" +"" + " border-left: 1px solid #455364;\n" +" border-radius: 0;\n" +"}\n" +"\n" +"QToolButton[popupMode=\"2\"] {\n" +" /* Only for InstantPopup */\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QToolButton::menu-button {\n" +" padding: 2px;\n" +" border-radius: 4px;\n" +" width: 12px;\n" +" border: none;\n" +" outline: none;\n" +"}\n" +"\n" +"QToolButton::menu-button:hover {\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"QToolButton::menu-button:checked:hover {\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"QToolButton::menu-indicator {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +" height: 8px;\n" +" width: 8px;\n" +" top: 0;\n" +" /* Exclude a shift for better image */\n" +" left: -2px;\n" +" /* Shift it a bit */\n" +"}\n" +"\n" +"QToolButton::menu-arrow {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +" height: 8px;\n" +" width: 8px;\n" +"}\n" +"\n" +"QToolButton::menu-arrow:hover {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down_focus.png\");\n" +"}\n" +"\n" +"/* QCommandLinkButton ---------------" + "--------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QCommandLinkButton {\n" +" background-color: transparent;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 4px;\n" +" padding: 0px;\n" +" margin: 0px;\n" +"}\n" +"\n" +"QCommandLinkButton:disabled {\n" +" background-color: transparent;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"/* ------------------------------------------------------------------------ */\n" +"/* INPUTS - NO FIELDS ----------------------------------------------------- */\n" +"/* ------------------------------------------------------------------------ */\n" +"/* QComboBox --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QComboBox {\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" selection-background-col" + "or: #346792;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" /* padding-right = 36; 4 + 16*2 See scrollbar size */\n" +" /* changed to 4px to fix #239 */\n" +" /* Fixes #103, #111 */\n" +" min-height: 1.5em;\n" +" /* padding-top: 2px; removed to fix #132 */\n" +" /* padding-bottom: 2px; removed to fix #132 */\n" +" /* min-width: 75px; removed to fix #109 */\n" +" /* Needed to remove indicator - fix #132 */\n" +"}\n" +"\n" +"QComboBox QAbstractItemView {\n" +" border: 1px solid #455364;\n" +" border-radius: 0;\n" +" background-color: #19232D;\n" +" selection-background-color: #346792;\n" +"}\n" +"\n" +"QComboBox QAbstractItemView:hover {\n" +" background-color: #19232D;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QComboBox QAbstractItemView:selected {\n" +" background: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"QComboBox QAbstractItemView:alternate {\n" +" background: #19232D;\n" +"}\n" +"\n" +"QComboBox:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QComboBox:hover {\n" +"" + " border: 1px solid #346792;\n" +"}\n" +"\n" +"QComboBox:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QComboBox:on {\n" +" selection-background-color: #346792;\n" +"}\n" +"\n" +"QComboBox::indicator {\n" +" border: none;\n" +" border-radius: 0;\n" +" background-color: transparent;\n" +" selection-background-color: transparent;\n" +" color: transparent;\n" +" selection-color: transparent;\n" +" /* Needed to remove indicator - fix #132 */\n" +"}\n" +"\n" +"QComboBox::indicator:alternate {\n" +" background: #19232D;\n" +"}\n" +"\n" +"QComboBox::item {\n" +" /* Remove to fix #282, #285 and MR #288*/\n" +" /*&:checked {\n" +" font-weight: bold;\n" +" }\n" +"\n" +" &:selected {\n" +" border: 0px solid transparent;\n" +" }\n" +" */\n" +"}\n" +"\n" +"QComboBox::item:alternate {\n" +" background: #19232D;\n" +"}\n" +"\n" +"QComboBox::drop-down {\n" +" subcontrol-origin: padding;\n" +" subcontrol-position: top right;\n" +" width: 12px;\n" +" border-left: 1px solid #455364;\n" +"}\n" +"\n" +"" + "QComboBox::down-arrow {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down_disabled.png\");\n" +" height: 8px;\n" +" width: 8px;\n" +"}\n" +"\n" +"QComboBox::down-arrow:on, QComboBox::down-arrow:hover, QComboBox::down-arrow:focus {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +"}\n" +"\n" +"/* QSlider ----------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qslider\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QSlider:disabled {\n" +" background: #19232D;\n" +"}\n" +"\n" +"QSlider:focus {\n" +" border: none;\n" +"}\n" +"\n" +"QSlider::groove:horizontal {\n" +" background: #455364;\n" +" border: 1px solid #455364;\n" +" height: 4px;\n" +" margin: 0px;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QSlider::groove:vertical {\n" +" background: #455364;\n" +" border: 1px solid #455364;\n" +" width: 4px;\n" +" margin: 0px;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QSlider::add-page:vertical {\n" +" " + " background: #346792;\n" +" border: 1px solid #455364;\n" +" width: 4px;\n" +" margin: 0px;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QSlider::add-page:vertical :disabled {\n" +" background: #26486B;\n" +"}\n" +"\n" +"QSlider::sub-page:horizontal {\n" +" background: #346792;\n" +" border: 1px solid #455364;\n" +" height: 4px;\n" +" margin: 0px;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QSlider::sub-page:horizontal:disabled {\n" +" background: #26486B;\n" +"}\n" +"\n" +"QSlider::handle:horizontal {\n" +" background: #9DA9B5;\n" +" border: 1px solid #455364;\n" +" width: 8px;\n" +" height: 8px;\n" +" margin: -8px 0px;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QSlider::handle:horizontal:hover {\n" +" background: #346792;\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"QSlider::handle:horizontal:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QSlider::handle:vertical {\n" +" background: #9DA9B5;\n" +" border: 1px solid #455364;\n" +" width: 8px;\n" +" height: 8px;\n" +" margin: 0 -8px;\n" +" border-radius: 4px;\n" +"" + "}\n" +"\n" +"QSlider::handle:vertical:hover {\n" +" background: #346792;\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"QSlider::handle:vertical:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"/* QLineEdit --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qlineedit\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QLineEdit {\n" +" background-color: #19232D;\n" +" padding-top: 2px;\n" +" /* This QLineEdit fix 103, 111 */\n" +" padding-bottom: 2px;\n" +" /* This QLineEdit fix 103, 111 */\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" border-style: solid;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QLineEdit:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QLineEdit:hover {\n" +" border: 1px solid #346792;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QLineEdit:focus {\n" +" border: 1px solid #1A72" + "BB;\n" +"}\n" +"\n" +"QLineEdit:selected {\n" +" background-color: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"/* QTabWiget --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QTabWidget {\n" +" padding: 2px;\n" +" selection-background-color: #455364;\n" +"}\n" +"\n" +"QTabWidget QWidget {\n" +" /* Fixes #189 */\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QTabWidget::pane {\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" margin: 0px;\n" +" /* Fixes double border inside pane with pyqt5 */\n" +" padding: 0px;\n" +"}\n" +"\n" +"QTabWidget::pane:selected {\n" +" background-color: #455364;\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"/* QTabBar ----------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtabwidget-and-qtabbar\n" +"\n" +"------" + "--------------------------------------------------------------------- */\n" +"QTabBar, QDockWidget QTabBar {\n" +" qproperty-drawBase: 0;\n" +" border-radius: 4px;\n" +" margin: 0px;\n" +" padding: 2px;\n" +" border: 0;\n" +" /* left: 5px; move to the right by 5px - removed for fix */\n" +"}\n" +"\n" +"QTabBar::close-button, QDockWidget QTabBar::close-button {\n" +" border: 0;\n" +" margin: 0;\n" +" padding: 4px;\n" +" image: url(\":/qss_icons/dark/rc/window_close.png\");\n" +"}\n" +"\n" +"QTabBar::close-button:hover, QDockWidget QTabBar::close-button:hover {\n" +" image: url(\":/qss_icons/dark/rc/window_close_focus.png\");\n" +"}\n" +"\n" +"QTabBar::close-button:pressed, QDockWidget QTabBar::close-button:pressed {\n" +" image: url(\":/qss_icons/dark/rc/window_close_pressed.png\");\n" +"}\n" +"\n" +"QTabBar::tab, QDockWidget QTabBar::tab {\n" +" /* !selected and disabled ----------------------------------------- */\n" +" /* selected ------------------------------------------------------- */\n" +"}\n" +"\n" +"QTabBar::tab:top:" + "selected:disabled, QDockWidget QTabBar::tab:top:selected:disabled {\n" +" border-bottom: 3px solid #26486B;\n" +" color: #788D9C;\n" +" background-color: #455364;\n" +"}\n" +"\n" +"QTabBar::tab:bottom:selected:disabled, QDockWidget QTabBar::tab:bottom:selected:disabled {\n" +" border-top: 3px solid #26486B;\n" +" color: #788D9C;\n" +" background-color: #455364;\n" +"}\n" +"\n" +"QTabBar::tab:left:selected:disabled, QDockWidget QTabBar::tab:left:selected:disabled {\n" +" border-right: 3px solid #26486B;\n" +" color: #788D9C;\n" +" background-color: #455364;\n" +"}\n" +"\n" +"QTabBar::tab:right:selected:disabled, QDockWidget QTabBar::tab:right:selected:disabled {\n" +" border-left: 3px solid #26486B;\n" +" color: #788D9C;\n" +" background-color: #455364;\n" +"}\n" +"\n" +"QTabBar::tab:top:!selected:disabled, QDockWidget QTabBar::tab:top:!selected:disabled {\n" +" border-bottom: 3px solid #19232D;\n" +" color: #788D9C;\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"QTabBar::tab:bottom:!selected:disabled, QDockWidget QTabBar" + "::tab:bottom:!selected:disabled {\n" +" border-top: 3px solid #19232D;\n" +" color: #788D9C;\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"QTabBar::tab:left:!selected:disabled, QDockWidget QTabBar::tab:left:!selected:disabled {\n" +" border-right: 3px solid #19232D;\n" +" color: #788D9C;\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"QTabBar::tab:right:!selected:disabled, QDockWidget QTabBar::tab:right:!selected:disabled {\n" +" border-left: 3px solid #19232D;\n" +" color: #788D9C;\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"QTabBar::tab:top:!selected, QDockWidget QTabBar::tab:top:!selected {\n" +" border-bottom: 2px solid #19232D;\n" +" margin-top: 2px;\n" +"}\n" +"\n" +"QTabBar::tab:bottom:!selected, QDockWidget QTabBar::tab:bottom:!selected {\n" +" border-top: 2px solid #19232D;\n" +" margin-bottom: 2px;\n" +"}\n" +"\n" +"QTabBar::tab:left:!selected, QDockWidget QTabBar::tab:left:!selected {\n" +" border-left: 2px solid #19232D;\n" +" margin-right: 2px;\n" +"}\n" +"\n" +"QTabBar::tab:right:!selected, QDockWid" + "get QTabBar::tab:right:!selected {\n" +" border-right: 2px solid #19232D;\n" +" margin-left: 2px;\n" +"}\n" +"\n" +"QTabBar::tab:top, QDockWidget QTabBar::tab:top {\n" +" background-color: #455364;\n" +" margin-left: 2px;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" padding-top: 2px;\n" +" padding-bottom: 2px;\n" +" min-width: 5px;\n" +" border-bottom: 3px solid #455364;\n" +" border-top-left-radius: 4px;\n" +" border-top-right-radius: 4px;\n" +"}\n" +"\n" +"QTabBar::tab:top:selected, QDockWidget QTabBar::tab:top:selected {\n" +" background-color: #54687A;\n" +" border-bottom: 3px solid #259AE9;\n" +" border-top-left-radius: 4px;\n" +" border-top-right-radius: 4px;\n" +"}\n" +"\n" +"QTabBar::tab:top:!selected:hover, QDockWidget QTabBar::tab:top:!selected:hover {\n" +" border: 1px solid #1A72BB;\n" +" border-bottom: 3px solid #1A72BB;\n" +" /* Fixes spyder-ide/spyder#9766 and #243 */\n" +" padding-left: 3px;\n" +" padding-right: 3px;\n" +"}\n" +"\n" +"QTabBar::tab:bottom, QDockWidget QTabBar::tab:bottom {\n" +" " + " border-top: 3px solid #455364;\n" +" background-color: #455364;\n" +" margin-left: 2px;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" padding-top: 2px;\n" +" padding-bottom: 2px;\n" +" border-bottom-left-radius: 4px;\n" +" border-bottom-right-radius: 4px;\n" +" min-width: 5px;\n" +"}\n" +"\n" +"QTabBar::tab:bottom:selected, QDockWidget QTabBar::tab:bottom:selected {\n" +" background-color: #54687A;\n" +" border-top: 3px solid #259AE9;\n" +" border-bottom-left-radius: 4px;\n" +" border-bottom-right-radius: 4px;\n" +"}\n" +"\n" +"QTabBar::tab:bottom:!selected:hover, QDockWidget QTabBar::tab:bottom:!selected:hover {\n" +" border: 1px solid #1A72BB;\n" +" border-top: 3px solid #1A72BB;\n" +" /* Fixes spyder-ide/spyder#9766 and #243 */\n" +" padding-left: 3px;\n" +" padding-right: 3px;\n" +"}\n" +"\n" +"QTabBar::tab:left, QDockWidget QTabBar::tab:left {\n" +" background-color: #455364;\n" +" margin-top: 2px;\n" +" padding-left: 2px;\n" +" padding-right: 2px;\n" +" padding-top: 4px;\n" +" padding-bottom: 4px;\n" +"" + " border-top-left-radius: 4px;\n" +" border-bottom-left-radius: 4px;\n" +" min-height: 5px;\n" +"}\n" +"\n" +"QTabBar::tab:left:selected, QDockWidget QTabBar::tab:left:selected {\n" +" background-color: #54687A;\n" +" border-right: 3px solid #259AE9;\n" +"}\n" +"\n" +"QTabBar::tab:left:!selected:hover, QDockWidget QTabBar::tab:left:!selected:hover {\n" +" border: 1px solid #1A72BB;\n" +" border-right: 3px solid #1A72BB;\n" +" /* Fixes different behavior #271 */\n" +" margin-right: 0px;\n" +" padding-right: -1px;\n" +"}\n" +"\n" +"QTabBar::tab:right, QDockWidget QTabBar::tab:right {\n" +" background-color: #455364;\n" +" margin-top: 2px;\n" +" padding-left: 2px;\n" +" padding-right: 2px;\n" +" padding-top: 4px;\n" +" padding-bottom: 4px;\n" +" border-top-right-radius: 4px;\n" +" border-bottom-right-radius: 4px;\n" +" min-height: 5px;\n" +"}\n" +"\n" +"QTabBar::tab:right:selected, QDockWidget QTabBar::tab:right:selected {\n" +" background-color: #54687A;\n" +" border-left: 3px solid #259AE9;\n" +"}\n" +"\n" +"QTabBar::tab:righ" + "t:!selected:hover, QDockWidget QTabBar::tab:right:!selected:hover {\n" +" border: 1px solid #1A72BB;\n" +" border-left: 3px solid #1A72BB;\n" +" /* Fixes different behavior #271 */\n" +" margin-left: 0px;\n" +" padding-left: 0px;\n" +"}\n" +"\n" +"QTabBar QToolButton, QDockWidget QTabBar QToolButton {\n" +" /* Fixes #136 */\n" +" background-color: #455364;\n" +" height: 12px;\n" +" width: 12px;\n" +"}\n" +"\n" +"QTabBar QToolButton:pressed, QDockWidget QTabBar QToolButton:pressed {\n" +" background-color: #455364;\n" +"}\n" +"\n" +"QTabBar QToolButton:pressed:hover, QDockWidget QTabBar QToolButton:pressed:hover {\n" +" border: 1px solid #346792;\n" +"}\n" +"\n" +"QTabBar QToolButton::left-arrow:enabled, QDockWidget QTabBar QToolButton::left-arrow:enabled {\n" +" image: url(\":/qss_icons/dark/rc/arrow_left.png\");\n" +"}\n" +"\n" +"QTabBar QToolButton::left-arrow:disabled, QDockWidget QTabBar QToolButton::left-arrow:disabled {\n" +" image: url(\":/qss_icons/dark/rc/arrow_left_disabled.png\");\n" +"}\n" +"\n" +"QTabBar QToolButto" + "n::right-arrow:enabled, QDockWidget QTabBar QToolButton::right-arrow:enabled {\n" +" image: url(\":/qss_icons/dark/rc/arrow_right.png\");\n" +"}\n" +"\n" +"QTabBar QToolButton::right-arrow:disabled, QDockWidget QTabBar QToolButton::right-arrow:disabled {\n" +" image: url(\":/qss_icons/dark/rc/arrow_right_disabled.png\");\n" +"}\n" +"\n" +"/* QDockWiget -------------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QDockWidget {\n" +" outline: 1px solid #455364;\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" titlebar-close-icon: url(\":/qss_icons/dark/rc/transparent.png\");\n" +" titlebar-normal-icon: url(\":/qss_icons/dark/rc/transparent.png\");\n" +"}\n" +"\n" +"QDockWidget::title {\n" +" /* Better size for title bar */\n" +" padding: 3px;\n" +" spacing: 4px;\n" +" border: none;\n" +" background-color: #455364;\n" +"}\n" +"\n" +"QDockWidget::close-button {\n" +" icon-size: 12px;\n" +"" + " border: none;\n" +" background: transparent;\n" +" background-image: transparent;\n" +" border: 0;\n" +" margin: 0;\n" +" padding: 0;\n" +" image: url(\":/qss_icons/dark/rc/window_close.png\");\n" +"}\n" +"\n" +"QDockWidget::close-button:hover {\n" +" image: url(\":/qss_icons/dark/rc/window_close_focus.png\");\n" +"}\n" +"\n" +"QDockWidget::close-button:pressed {\n" +" image: url(\":/qss_icons/dark/rc/window_close_pressed.png\");\n" +"}\n" +"\n" +"QDockWidget::float-button {\n" +" icon-size: 12px;\n" +" border: none;\n" +" background: transparent;\n" +" background-image: transparent;\n" +" border: 0;\n" +" margin: 0;\n" +" padding: 0;\n" +" image: url(\":/qss_icons/dark/rc/window_undock.png\");\n" +"}\n" +"\n" +"QDockWidget::float-button:hover {\n" +" image: url(\":/qss_icons/dark/rc/window_undock_focus.png\");\n" +"}\n" +"\n" +"QDockWidget::float-button:pressed {\n" +" image: url(\":/qss_icons/dark/rc/window_undock_pressed.png\");\n" +"}\n" +"\n" +"/* QTreeView QListView QTableView -----------------------------------------\n" +"" + "\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtreeview\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qlistview\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtableview\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QTreeView:branch:selected, QTreeView:branch:hover {\n" +" background: url(\":/qss_icons/dark/rc/transparent.png\");\n" +"}\n" +"\n" +"QTreeView:branch:has-siblings:!adjoins-item {\n" +" border-image: url(\":/qss_icons/dark/rc/branch_line.png\") 0;\n" +"}\n" +"\n" +"QTreeView:branch:has-siblings:adjoins-item {\n" +" border-image: url(\":/qss_icons/dark/rc/branch_more.png\") 0;\n" +"}\n" +"\n" +"QTreeView:branch:!has-children:!has-siblings:adjoins-item {\n" +" border-image: url(\":/qss_icons/dark/rc/branch_end.png\") 0;\n" +"}\n" +"\n" +"QTreeView:branch:has-children:!has-siblings:closed, QTreeView:branch:closed:has-children:has-siblings {\n" +" border-image: none;\n" +" image: url(\":/qss_icons/dark/rc/branch_clo" + "sed.png\");\n" +"}\n" +"\n" +"QTreeView:branch:open:has-children:!has-siblings, QTreeView:branch:open:has-children:has-siblings {\n" +" border-image: none;\n" +" image: url(\":/qss_icons/dark/rc/branch_open.png\");\n" +"}\n" +"\n" +"QTreeView:branch:has-children:!has-siblings:closed:hover, QTreeView:branch:closed:has-children:has-siblings:hover {\n" +" image: url(\":/qss_icons/dark/rc/branch_closed_focus.png\");\n" +"}\n" +"\n" +"QTreeView:branch:open:has-children:!has-siblings:hover, QTreeView:branch:open:has-children:has-siblings:hover {\n" +" image: url(\":/qss_icons/dark/rc/branch_open_focus.png\");\n" +"}\n" +"\n" +"QTreeView::indicator:checked,\n" +"QListView::indicator:checked,\n" +"QTableView::indicator:checked,\n" +"QColumnView::indicator:checked {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked.png\");\n" +"}\n" +"\n" +"QTreeView::indicator:checked:hover, QTreeView::indicator:checked:focus, QTreeView::indicator:checked:pressed,\n" +"QListView::indicator:checked:hover,\n" +"QListView::indicator:checked:focus,\n" +"" + "QListView::indicator:checked:pressed,\n" +"QTableView::indicator:checked:hover,\n" +"QTableView::indicator:checked:focus,\n" +"QTableView::indicator:checked:pressed,\n" +"QColumnView::indicator:checked:hover,\n" +"QColumnView::indicator:checked:focus,\n" +"QColumnView::indicator:checked:pressed {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_checked_focus.png\");\n" +"}\n" +"\n" +"QTreeView::indicator:unchecked,\n" +"QListView::indicator:unchecked,\n" +"QTableView::indicator:unchecked,\n" +"QColumnView::indicator:unchecked {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked.png\");\n" +"}\n" +"\n" +"QTreeView::indicator:unchecked:hover, QTreeView::indicator:unchecked:focus, QTreeView::indicator:unchecked:pressed,\n" +"QListView::indicator:unchecked:hover,\n" +"QListView::indicator:unchecked:focus,\n" +"QListView::indicator:unchecked:pressed,\n" +"QTableView::indicator:unchecked:hover,\n" +"QTableView::indicator:unchecked:focus,\n" +"QTableView::indicator:unchecked:pressed,\n" +"QColumnView::indicator:unchecked:hover,\n" +"" + "QColumnView::indicator:unchecked:focus,\n" +"QColumnView::indicator:unchecked:pressed {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_unchecked_focus.png\");\n" +"}\n" +"\n" +"QTreeView::indicator:indeterminate,\n" +"QListView::indicator:indeterminate,\n" +"QTableView::indicator:indeterminate,\n" +"QColumnView::indicator:indeterminate {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_indeterminate.png\");\n" +"}\n" +"\n" +"QTreeView::indicator:indeterminate:hover, QTreeView::indicator:indeterminate:focus, QTreeView::indicator:indeterminate:pressed,\n" +"QListView::indicator:indeterminate:hover,\n" +"QListView::indicator:indeterminate:focus,\n" +"QListView::indicator:indeterminate:pressed,\n" +"QTableView::indicator:indeterminate:hover,\n" +"QTableView::indicator:indeterminate:focus,\n" +"QTableView::indicator:indeterminate:pressed,\n" +"QColumnView::indicator:indeterminate:hover,\n" +"QColumnView::indicator:indeterminate:focus,\n" +"QColumnView::indicator:indeterminate:pressed {\n" +" image: url(\":/qss_icons/dark/rc/checkbox_" + "indeterminate_focus.png\");\n" +"}\n" +"\n" +"QTreeView,\n" +"QListView,\n" +"QTableView,\n" +"QColumnView {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +" gridline-color: #455364;\n" +" border-radius: 4px;\n" +"}\n" +"\n" +"QTreeView:disabled,\n" +"QListView:disabled,\n" +"QTableView:disabled,\n" +"QColumnView:disabled {\n" +" background-color: #19232D;\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QTreeView:selected,\n" +"QListView:selected,\n" +"QTableView:selected,\n" +"QColumnView:selected {\n" +" background-color: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"QTreeView:focus,\n" +"QListView:focus,\n" +"QTableView:focus,\n" +"QColumnView:focus {\n" +" border: 1px solid #1A72BB;\n" +"}\n" +"\n" +"QTreeView::item:pressed,\n" +"QListView::item:pressed,\n" +"QTableView::item:pressed,\n" +"QColumnView::item:pressed {\n" +" background-color: #346792;\n" +"}\n" +"\n" +"QTreeView::item:selected:active,\n" +"QListView::item:selected:active,\n" +"QTableView::item:selected:active,\n" +"QColumnView::item:sele" + "cted:active {\n" +" background-color: #346792;\n" +"}\n" +"\n" +"QTreeView::item:selected:!active,\n" +"QListView::item:selected:!active,\n" +"QTableView::item:selected:!active,\n" +"QColumnView::item:selected:!active {\n" +" color: #DFE1E2;\n" +" background-color: #37414F;\n" +"}\n" +"\n" +"QTreeView::item:!selected:hover,\n" +"QListView::item:!selected:hover,\n" +"QTableView::item:!selected:hover,\n" +"QColumnView::item:!selected:hover {\n" +" outline: 0;\n" +" color: #DFE1E2;\n" +" background-color: #37414F;\n" +"}\n" +"\n" +"QTableCornerButton::section {\n" +" background-color: #19232D;\n" +" border: 1px transparent #455364;\n" +" border-radius: 0px;\n" +"}\n" +"\n" +"/* QHeaderView ------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qheaderview\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QHeaderView {\n" +" background-color: #455364;\n" +" border: 0px transparent #455364;\n" +" padding: 0;\n" +" mar" + "gin: 0;\n" +" border-radius: 0;\n" +"}\n" +"\n" +"QHeaderView:disabled {\n" +" background-color: #455364;\n" +" border: 1px transparent #455364;\n" +"}\n" +"\n" +"QHeaderView::section {\n" +" background-color: #455364;\n" +" color: #DFE1E2;\n" +" border-radius: 0;\n" +" text-align: left;\n" +" font-size: 13px;\n" +"}\n" +"\n" +"QHeaderView::section::horizontal {\n" +" padding-top: 0;\n" +" padding-bottom: 0;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" border-left: 1px solid #19232D;\n" +"}\n" +"\n" +"QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one {\n" +" border-left: 1px solid #455364;\n" +"}\n" +"\n" +"QHeaderView::section::horizontal:disabled {\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QHeaderView::section::vertical {\n" +" padding-top: 0;\n" +" padding-bottom: 0;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" border-top: 1px solid #19232D;\n" +"}\n" +"\n" +"QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one {\n" +" border-top: 1px solid #4553" + "64;\n" +"}\n" +"\n" +"QHeaderView::section::vertical:disabled {\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QHeaderView::down-arrow {\n" +" /* Those settings (border/width/height/background-color) solve bug */\n" +" /* transparent arrow background and size */\n" +" background-color: #455364;\n" +" border: none;\n" +" height: 12px;\n" +" width: 12px;\n" +" padding-left: 2px;\n" +" padding-right: 2px;\n" +" image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +"}\n" +"\n" +"QHeaderView::up-arrow {\n" +" background-color: #455364;\n" +" border: none;\n" +" height: 12px;\n" +" width: 12px;\n" +" padding-left: 2px;\n" +" padding-right: 2px;\n" +" image: url(\":/qss_icons/dark/rc/arrow_up.png\");\n" +"}\n" +"\n" +"/* QToolBox --------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtoolbox\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QToolBox {\n" +" padding: 0px;\n" +" border: 0px;\n" +" border: 1px solid #4" + "55364;\n" +"}\n" +"\n" +"QToolBox:selected {\n" +" padding: 0px;\n" +" border: 2px solid #346792;\n" +"}\n" +"\n" +"QToolBox::tab {\n" +" background-color: #19232D;\n" +" border: 1px solid #455364;\n" +" color: #DFE1E2;\n" +" border-top-left-radius: 4px;\n" +" border-top-right-radius: 4px;\n" +"}\n" +"\n" +"QToolBox::tab:disabled {\n" +" color: #788D9C;\n" +"}\n" +"\n" +"QToolBox::tab:selected {\n" +" background-color: #60798B;\n" +" border-bottom: 2px solid #346792;\n" +"}\n" +"\n" +"QToolBox::tab:selected:disabled {\n" +" background-color: #455364;\n" +" border-bottom: 2px solid #26486B;\n" +"}\n" +"\n" +"QToolBox::tab:!selected {\n" +" background-color: #455364;\n" +" border-bottom: 2px solid #455364;\n" +"}\n" +"\n" +"QToolBox::tab:!selected:disabled {\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"QToolBox::tab:hover {\n" +" border-color: #1A72BB;\n" +" border-bottom: 2px solid #1A72BB;\n" +"}\n" +"\n" +"QToolBox QScrollArea {\n" +" padding: 0px;\n" +" border: 0px;\n" +" background-color: #19232D;\n" +"}\n" +"\n" +"/* QFrame -----" + "------------------------------------------------------------\n" +"\n" +"https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qframe\n" +"https://doc.qt.io/qt-5/qframe.html#-prop\n" +"https://doc.qt.io/qt-5/qframe.html#details\n" +"https://stackoverflow.com/questions/14581498/qt-stylesheet-for-hline-vline-color\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"/* (dot) .QFrame fix #141, #126, #123 */\n" +".QFrame {\n" +" border-radius: 4px;\n" +" border: 1px solid #455364;\n" +" /* No frame */\n" +" /* HLine */\n" +" /* HLine */\n" +"}\n" +"\n" +".QFrame[frameShape=\"0\"] {\n" +" border-radius: 4px;\n" +" border: 1px transparent #455364;\n" +"}\n" +"\n" +".QFrame[frameShape=\"4\"] {\n" +" max-height: 2px;\n" +" border: none;\n" +" background-color: #455364;\n" +"}\n" +"\n" +".QFrame[frameShape=\"5\"] {\n" +" max-width: 2px;\n" +" border: none;\n" +" background-color: #455364;\n" +"}\n" +"\n" +"/* QSplitter --------------------------------------------------------------\n" +"\n" +"ht" + "tps://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qsplitter\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QSplitter {\n" +" background-color: #455364;\n" +" spacing: 0px;\n" +" padding: 0px;\n" +" margin: 0px;\n" +"}\n" +"\n" +"QSplitter::handle {\n" +" background-color: #455364;\n" +" border: 0px solid #19232D;\n" +" spacing: 0px;\n" +" padding: 1px;\n" +" margin: 0px;\n" +"}\n" +"\n" +"QSplitter::handle:hover {\n" +" background-color: #9DA9B5;\n" +"}\n" +"\n" +"QSplitter::handle:horizontal {\n" +" width: 5px;\n" +" image: url(\":/qss_icons/dark/rc/line_vertical.png\");\n" +"}\n" +"\n" +"QSplitter::handle:vertical {\n" +" height: 5px;\n" +" image: url(\":/qss_icons/dark/rc/line_horizontal.png\");\n" +"}\n" +"\n" +"/* QDateEdit, QDateTimeEdit -----------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QDateEdit, QDateTimeEdit {\n" +" selection-background-color: #346792;\n" +" border-style: sol" + "id;\n" +" border: 1px solid #455364;\n" +" border-radius: 4px;\n" +" /* This fixes 103, 111 */\n" +" padding-top: 2px;\n" +" /* This fixes 103, 111 */\n" +" padding-bottom: 2px;\n" +" padding-left: 4px;\n" +" padding-right: 4px;\n" +" min-width: 10px;\n" +"}\n" +"\n" +"QDateEdit:on, QDateTimeEdit:on {\n" +" selection-background-color: #346792;\n" +"}\n" +"\n" +"QDateEdit::drop-down, QDateTimeEdit::drop-down {\n" +" subcontrol-origin: padding;\n" +" subcontrol-position: top right;\n" +" width: 12px;\n" +" border-left: 1px solid #455364;\n" +"}\n" +"\n" +"QDateEdit::down-arrow, QDateTimeEdit::down-arrow {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down_disabled.png\");\n" +" height: 8px;\n" +" width: 8px;\n" +"}\n" +"\n" +"QDateEdit::down-arrow:on, QDateEdit::down-arrow:hover, QDateEdit::down-arrow:focus, QDateTimeEdit::down-arrow:on, QDateTimeEdit::down-arrow:hover, QDateTimeEdit::down-arrow:focus {\n" +" image: url(\":/qss_icons/dark/rc/arrow_down.png\");\n" +"}\n" +"\n" +"QDateEdit QAbstractItemView, QDateTimeEdit QAbstra" + "ctItemView {\n" +" background-color: #19232D;\n" +" border-radius: 4px;\n" +" border: 1px solid #455364;\n" +" selection-background-color: #346792;\n" +"}\n" +"\n" +"/* QAbstractView ----------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"QAbstractView:hover {\n" +" border: 1px solid #346792;\n" +" color: #DFE1E2;\n" +"}\n" +"\n" +"QAbstractView:selected {\n" +" background: #346792;\n" +" color: #455364;\n" +"}\n" +"\n" +"/* PlotWidget -------------------------------------------------------------\n" +"\n" +"--------------------------------------------------------------------------- */\n" +"PlotWidget {\n" +" /* Fix cut labels in plots #134 */\n" +" padding: 0px;\n" +"}\n" +"") + self.verticalLayout_7 = QVBoxLayout(Widget) + self.verticalLayout_7.setObjectName(u"verticalLayout_7") + self.horizontalLayout_8 = QHBoxLayout() + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.groupBox_2 = QGroupBox(Widget) + self.groupBox_2.setObjectName(u"groupBox_2") + self.gridLayout = QGridLayout(self.groupBox_2) + self.gridLayout.setObjectName(u"gridLayout") + self.label_9 = QLabel(self.groupBox_2) + self.label_9.setObjectName(u"label_9") + + self.gridLayout.addWidget(self.label_9, 0, 3, 1, 1) + + self.lineEdit_11 = QLineEdit(self.groupBox_2) + self.lineEdit_11.setObjectName(u"lineEdit_11") + + self.gridLayout.addWidget(self.lineEdit_11, 1, 0, 1, 1) + + self.label_10 = QLabel(self.groupBox_2) + self.label_10.setObjectName(u"label_10") + + self.gridLayout.addWidget(self.label_10, 0, 0, 1, 1) + + self.lineEdit_13 = QLineEdit(self.groupBox_2) + self.lineEdit_13.setObjectName(u"lineEdit_13") + + self.gridLayout.addWidget(self.lineEdit_13, 1, 2, 1, 1) + + self.lineEdit_10 = QLineEdit(self.groupBox_2) + self.lineEdit_10.setObjectName(u"lineEdit_10") + + self.gridLayout.addWidget(self.lineEdit_10, 1, 1, 1, 1) + + self.label_11 = QLabel(self.groupBox_2) + self.label_11.setObjectName(u"label_11") + + self.gridLayout.addWidget(self.label_11, 0, 2, 1, 1) + + self.lineEdit_12 = QLineEdit(self.groupBox_2) + self.lineEdit_12.setObjectName(u"lineEdit_12") + + self.gridLayout.addWidget(self.lineEdit_12, 1, 3, 1, 1) + + self.label_12 = QLabel(self.groupBox_2) + self.label_12.setObjectName(u"label_12") + + self.gridLayout.addWidget(self.label_12, 0, 1, 1, 1) + + + self.horizontalLayout_8.addWidget(self.groupBox_2) + + self.verticalLayout_6 = QVBoxLayout() + self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.pushButton_9 = QPushButton(Widget) + self.pushButton_9.setObjectName(u"pushButton_9") + + self.verticalLayout_6.addWidget(self.pushButton_9) + + self.pushButton_10 = QPushButton(Widget) + self.pushButton_10.setObjectName(u"pushButton_10") + + self.verticalLayout_6.addWidget(self.pushButton_10) + + + self.horizontalLayout_8.addLayout(self.verticalLayout_6) + + self.horizontalLayout_8.setStretch(0, 2) + self.horizontalLayout_8.setStretch(1, 1) + + self.verticalLayout_7.addLayout(self.horizontalLayout_8) + + self.groupBox_4 = QGroupBox(Widget) + self.groupBox_4.setObjectName(u"groupBox_4") + self.horizontalLayout_7 = QHBoxLayout(self.groupBox_4) + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.horizontalLayout_6 = QHBoxLayout() + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.verticalLayout = QVBoxLayout() + self.verticalLayout.setObjectName(u"verticalLayout") + self.label = QLabel(self.groupBox_4) + self.label.setObjectName(u"label") + self.label.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout.addWidget(self.label) + + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalSpacer = QSpacerItem(13, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer) + + self.verticalSlider = QSlider(self.groupBox_4) + self.verticalSlider.setObjectName(u"verticalSlider") + self.verticalSlider.setOrientation(Qt.Orientation.Vertical) + + self.horizontalLayout.addWidget(self.verticalSlider) + + self.horizontalSpacer_2 = QSpacerItem(18, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer_2) + + + self.verticalLayout.addLayout(self.horizontalLayout) + + + self.horizontalLayout_6.addLayout(self.verticalLayout) + + self.verticalLayout_2 = QVBoxLayout() + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.label_2 = QLabel(self.groupBox_4) + self.label_2.setObjectName(u"label_2") + self.label_2.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_2.addWidget(self.label_2) + + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalSpacer_3 = QSpacerItem(13, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer_3) + + self.verticalSlider_2 = QSlider(self.groupBox_4) + self.verticalSlider_2.setObjectName(u"verticalSlider_2") + self.verticalSlider_2.setOrientation(Qt.Orientation.Vertical) + + self.horizontalLayout_2.addWidget(self.verticalSlider_2) + + self.horizontalSpacer_4 = QSpacerItem(18, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer_4) + + + self.verticalLayout_2.addLayout(self.horizontalLayout_2) + + + self.horizontalLayout_6.addLayout(self.verticalLayout_2) + + self.verticalLayout_3 = QVBoxLayout() + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.label_3 = QLabel(self.groupBox_4) + self.label_3.setObjectName(u"label_3") + self.label_3.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_3.addWidget(self.label_3) + + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalSpacer_5 = QSpacerItem(13, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_3.addItem(self.horizontalSpacer_5) + + self.verticalSlider_3 = QSlider(self.groupBox_4) + self.verticalSlider_3.setObjectName(u"verticalSlider_3") + self.verticalSlider_3.setOrientation(Qt.Orientation.Vertical) + + self.horizontalLayout_3.addWidget(self.verticalSlider_3) + + self.horizontalSpacer_6 = QSpacerItem(18, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_3.addItem(self.horizontalSpacer_6) + + + self.verticalLayout_3.addLayout(self.horizontalLayout_3) + + + self.horizontalLayout_6.addLayout(self.verticalLayout_3) + + self.verticalLayout_4 = QVBoxLayout() + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.label_4 = QLabel(self.groupBox_4) + self.label_4.setObjectName(u"label_4") + self.label_4.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_4.addWidget(self.label_4) + + self.horizontalLayout_4 = QHBoxLayout() + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalSpacer_7 = QSpacerItem(13, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_4.addItem(self.horizontalSpacer_7) + + self.verticalSlider_4 = QSlider(self.groupBox_4) + self.verticalSlider_4.setObjectName(u"verticalSlider_4") + self.verticalSlider_4.setOrientation(Qt.Orientation.Vertical) + + self.horizontalLayout_4.addWidget(self.verticalSlider_4) + + self.horizontalSpacer_8 = QSpacerItem(18, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_4.addItem(self.horizontalSpacer_8) + + + self.verticalLayout_4.addLayout(self.horizontalLayout_4) + + + self.horizontalLayout_6.addLayout(self.verticalLayout_4) + + + self.horizontalLayout_7.addLayout(self.horizontalLayout_6) + + self.verticalLayout_5 = QVBoxLayout() + self.verticalLayout_5.setObjectName(u"verticalLayout_5") + self.tableWidget = QTableWidget(self.groupBox_4) + if (self.tableWidget.columnCount() < 5): + self.tableWidget.setColumnCount(5) + __qtablewidgetitem = QTableWidgetItem() + __qtablewidgetitem.setTextAlignment(Qt.AlignLeading|Qt.AlignVCenter); + self.tableWidget.setHorizontalHeaderItem(0, __qtablewidgetitem) + __qtablewidgetitem1 = QTableWidgetItem() + __qtablewidgetitem1.setTextAlignment(Qt.AlignLeading|Qt.AlignVCenter); + self.tableWidget.setHorizontalHeaderItem(1, __qtablewidgetitem1) + __qtablewidgetitem2 = QTableWidgetItem() + __qtablewidgetitem2.setTextAlignment(Qt.AlignJustify|Qt.AlignVCenter); + self.tableWidget.setHorizontalHeaderItem(2, __qtablewidgetitem2) + __qtablewidgetitem3 = QTableWidgetItem() + __qtablewidgetitem3.setTextAlignment(Qt.AlignJustify|Qt.AlignVCenter); + self.tableWidget.setHorizontalHeaderItem(3, __qtablewidgetitem3) + __qtablewidgetitem4 = QTableWidgetItem() + __qtablewidgetitem4.setTextAlignment(Qt.AlignJustify|Qt.AlignVCenter); + self.tableWidget.setHorizontalHeaderItem(4, __qtablewidgetitem4) + if (self.tableWidget.rowCount() < 6): + self.tableWidget.setRowCount(6) + __qtablewidgetitem5 = QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(0, __qtablewidgetitem5) + __qtablewidgetitem6 = QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(1, __qtablewidgetitem6) + __qtablewidgetitem7 = QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(2, __qtablewidgetitem7) + __qtablewidgetitem8 = QTableWidgetItem() + __qtablewidgetitem8.setCheckState(Qt.Checked); + self.tableWidget.setItem(0, 0, __qtablewidgetitem8) + __qtablewidgetitem9 = QTableWidgetItem() + self.tableWidget.setItem(0, 1, __qtablewidgetitem9) + __qtablewidgetitem10 = QTableWidgetItem() + self.tableWidget.setItem(0, 2, __qtablewidgetitem10) + __qtablewidgetitem11 = QTableWidgetItem() + self.tableWidget.setItem(0, 3, __qtablewidgetitem11) + __qtablewidgetitem12 = QTableWidgetItem() + self.tableWidget.setItem(0, 4, __qtablewidgetitem12) + __qtablewidgetitem13 = QTableWidgetItem() + __qtablewidgetitem13.setCheckState(Qt.Checked); + self.tableWidget.setItem(1, 0, __qtablewidgetitem13) + __qtablewidgetitem14 = QTableWidgetItem() + self.tableWidget.setItem(1, 1, __qtablewidgetitem14) + __qtablewidgetitem15 = QTableWidgetItem() + self.tableWidget.setItem(1, 2, __qtablewidgetitem15) + __qtablewidgetitem16 = QTableWidgetItem() + self.tableWidget.setItem(1, 3, __qtablewidgetitem16) + __qtablewidgetitem17 = QTableWidgetItem() + self.tableWidget.setItem(1, 4, __qtablewidgetitem17) + __qtablewidgetitem18 = QTableWidgetItem() + __qtablewidgetitem18.setCheckState(Qt.Checked); + self.tableWidget.setItem(2, 0, __qtablewidgetitem18) + __qtablewidgetitem19 = QTableWidgetItem() + __qtablewidgetitem19.setCheckState(Qt.Checked); + self.tableWidget.setItem(3, 0, __qtablewidgetitem19) + __qtablewidgetitem20 = QTableWidgetItem() + __qtablewidgetitem20.setCheckState(Qt.Checked); + self.tableWidget.setItem(4, 0, __qtablewidgetitem20) + __qtablewidgetitem21 = QTableWidgetItem() + __qtablewidgetitem21.setCheckState(Qt.Checked); + self.tableWidget.setItem(5, 0, __qtablewidgetitem21) + self.tableWidget.setObjectName(u"tableWidget") + self.tableWidget.setStyleSheet(u"QTableWidget {border: none}") + self.tableWidget.setMidLineWidth(0) + self.tableWidget.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.tableWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.tableWidget.setSizeAdjustPolicy(QAbstractScrollArea.SizeAdjustPolicy.AdjustToContents) + self.tableWidget.setAutoScroll(True) + self.tableWidget.setGridStyle(Qt.PenStyle.DotLine) + self.tableWidget.setRowCount(6) + self.tableWidget.horizontalHeader().setVisible(True) + self.tableWidget.horizontalHeader().setMinimumSectionSize(18) + self.tableWidget.horizontalHeader().setDefaultSectionSize(67) + self.tableWidget.horizontalHeader().setHighlightSections(False) + self.tableWidget.horizontalHeader().setProperty(u"showSortIndicator", False) + self.tableWidget.horizontalHeader().setStretchLastSection(False) + self.tableWidget.verticalHeader().setVisible(False) + self.tableWidget.verticalHeader().setMinimumSectionSize(17) + self.tableWidget.verticalHeader().setDefaultSectionSize(30) + self.tableWidget.verticalHeader().setHighlightSections(False) + + self.verticalLayout_5.addWidget(self.tableWidget) + + self.horizontalLayout_5 = QHBoxLayout() + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.horizontalSpacer_9 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_9) + + self.pushButton_7 = QPushButton(self.groupBox_4) + self.pushButton_7.setObjectName(u"pushButton_7") + + self.horizontalLayout_5.addWidget(self.pushButton_7) + + self.horizontalSpacer_10 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_10) + + self.pushButton_8 = QPushButton(self.groupBox_4) + self.pushButton_8.setObjectName(u"pushButton_8") + + self.horizontalLayout_5.addWidget(self.pushButton_8) + + self.horizontalSpacer_11 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_11) + + + self.verticalLayout_5.addLayout(self.horizontalLayout_5) + + + self.horizontalLayout_7.addLayout(self.verticalLayout_5) + + + self.verticalLayout_7.addWidget(self.groupBox_4) + + + self.retranslateUi(Widget) + + QMetaObject.connectSlotsByName(Widget) + # setupUi + + def retranslateUi(self, Widget): + Widget.setWindowTitle(QCoreApplication.translate("Widget", u"Widget", None)) + self.groupBox_2.setTitle(QCoreApplication.translate("Widget", u"\u53c2\u6570", None)) + self.label_9.setText(QCoreApplication.translate("Widget", u"ENT_mix_left_data", None)) + self.label_10.setText(QCoreApplication.translate("Widget", u"delay_data1", None)) + self.label_11.setText(QCoreApplication.translate("Widget", u"ENT_mx_right_data", None)) + self.label_12.setText(QCoreApplication.translate("Widget", u"ENC_volume_data1", None)) + self.pushButton_9.setText(QCoreApplication.translate("Widget", u"\u53d1\u9001", None)) + self.pushButton_10.setText(QCoreApplication.translate("Widget", u"\u83b7\u53d6", None)) + self.groupBox_4.setTitle(QCoreApplication.translate("Widget", u"\u6ee4\u6ce2\u5668-2", None)) + self.label.setText(QCoreApplication.translate("Widget", u"Freq", None)) + self.label_2.setText(QCoreApplication.translate("Widget", u"Q", None)) + self.label_3.setText(QCoreApplication.translate("Widget", u"Gain", None)) + self.label_4.setText(QCoreApplication.translate("Widget", u"Slope", None)) + ___qtablewidgetitem = self.tableWidget.horizontalHeaderItem(0) + ___qtablewidgetitem.setText(QCoreApplication.translate("Widget", u"\u6ee4\u6ce2\u5668", None)); + ___qtablewidgetitem1 = self.tableWidget.horizontalHeaderItem(1) + ___qtablewidgetitem1.setText(QCoreApplication.translate("Widget", u"Freq", None)); + ___qtablewidgetitem2 = self.tableWidget.horizontalHeaderItem(2) + ___qtablewidgetitem2.setText(QCoreApplication.translate("Widget", u"Q", None)); + ___qtablewidgetitem3 = self.tableWidget.horizontalHeaderItem(3) + ___qtablewidgetitem3.setText(QCoreApplication.translate("Widget", u"Gain", None)); + ___qtablewidgetitem4 = self.tableWidget.horizontalHeaderItem(4) + ___qtablewidgetitem4.setText(QCoreApplication.translate("Widget", u"Slop", None)); + ___qtablewidgetitem5 = self.tableWidget.verticalHeaderItem(0) + ___qtablewidgetitem5.setText(QCoreApplication.translate("Widget", u"\u65b0\u5efa\u884c", None)); + ___qtablewidgetitem6 = self.tableWidget.verticalHeaderItem(1) + ___qtablewidgetitem6.setText(QCoreApplication.translate("Widget", u"\u65b0\u5efa\u884c", None)); + ___qtablewidgetitem7 = self.tableWidget.verticalHeaderItem(2) + ___qtablewidgetitem7.setText(QCoreApplication.translate("Widget", u"\u65b0\u5efa\u884c", None)); + + __sortingEnabled = self.tableWidget.isSortingEnabled() + self.tableWidget.setSortingEnabled(False) + ___qtablewidgetitem8 = self.tableWidget.item(0, 0) + ___qtablewidgetitem8.setText(QCoreApplication.translate("Widget", u"PEAK_1", None)); + ___qtablewidgetitem9 = self.tableWidget.item(0, 1) + ___qtablewidgetitem9.setText(QCoreApplication.translate("Widget", u"1111", None)); + ___qtablewidgetitem10 = self.tableWidget.item(0, 2) + ___qtablewidgetitem10.setText(QCoreApplication.translate("Widget", u"11", None)); + ___qtablewidgetitem11 = self.tableWidget.item(0, 3) + ___qtablewidgetitem11.setText(QCoreApplication.translate("Widget", u"1.1", None)); + ___qtablewidgetitem12 = self.tableWidget.item(0, 4) + ___qtablewidgetitem12.setText(QCoreApplication.translate("Widget", u"6", None)); + ___qtablewidgetitem13 = self.tableWidget.item(1, 0) + ___qtablewidgetitem13.setText(QCoreApplication.translate("Widget", u"LOWPASS_1", None)); + ___qtablewidgetitem14 = self.tableWidget.item(1, 1) + ___qtablewidgetitem14.setText(QCoreApplication.translate("Widget", u"1112", None)); + ___qtablewidgetitem15 = self.tableWidget.item(1, 2) + ___qtablewidgetitem15.setText(QCoreApplication.translate("Widget", u"32", None)); + ___qtablewidgetitem16 = self.tableWidget.item(1, 3) + ___qtablewidgetitem16.setText(QCoreApplication.translate("Widget", u"2.3", None)); + ___qtablewidgetitem17 = self.tableWidget.item(1, 4) + ___qtablewidgetitem17.setText(QCoreApplication.translate("Widget", u"24", None)); + ___qtablewidgetitem18 = self.tableWidget.item(2, 0) + ___qtablewidgetitem18.setText(QCoreApplication.translate("Widget", u"HIGHPASS_1", None)); + ___qtablewidgetitem19 = self.tableWidget.item(3, 0) + ___qtablewidgetitem19.setText(QCoreApplication.translate("Widget", u"ALLPASS_1", None)); + ___qtablewidgetitem20 = self.tableWidget.item(4, 0) + ___qtablewidgetitem20.setText(QCoreApplication.translate("Widget", u"LOWSHELF_1", None)); + ___qtablewidgetitem21 = self.tableWidget.item(5, 0) + ___qtablewidgetitem21.setText(QCoreApplication.translate("Widget", u"HIGHSHELF_1", None)); + self.tableWidget.setSortingEnabled(__sortingEnabled) + + self.pushButton_7.setText(QCoreApplication.translate("Widget", u"\u6dfb\u52a0", None)) + self.pushButton_8.setText(QCoreApplication.translate("Widget", u"\u5220\u9664", None)) + # retranslateUi + diff --git a/widgets/__init__.py b/widgets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/widgets/__pycache__/Ui_widget.cpython-313.pyc b/widgets/__pycache__/Ui_widget.cpython-313.pyc new file mode 100644 index 0000000..1e8d17b Binary files /dev/null and b/widgets/__pycache__/Ui_widget.cpython-313.pyc differ diff --git a/widgets/__pycache__/__init__.cpython-313.pyc b/widgets/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..2f395d6 Binary files /dev/null and b/widgets/__pycache__/__init__.cpython-313.pyc differ diff --git a/widgets/__pycache__/audio_filter_widget.cpython-313.pyc b/widgets/__pycache__/audio_filter_widget.cpython-313.pyc new file mode 100644 index 0000000..3f1011a Binary files /dev/null and b/widgets/__pycache__/audio_filter_widget.cpython-313.pyc differ diff --git a/widgets/__pycache__/avas_widget.cpython-313.pyc b/widgets/__pycache__/avas_widget.cpython-313.pyc new file mode 100644 index 0000000..03be399 Binary files /dev/null and b/widgets/__pycache__/avas_widget.cpython-313.pyc differ diff --git a/widgets/audio_filter_widget.py b/widgets/audio_filter_widget.py new file mode 100644 index 0000000..83b46fb --- /dev/null +++ b/widgets/audio_filter_widget.py @@ -0,0 +1,455 @@ +from PySide6.QtWidgets import QWidget, QDialog, QVBoxLayout, QComboBox, QPushButton, QLabel, QTableWidgetItem, QAbstractScrollArea +from PySide6.QtCore import Qt +from widgets.Ui_widget import Ui_Widget +from database.db_manager import DatabaseManager +from database.models import FilterData, ParamData + +class AudioFilterModel: + def __init__(self, db_manager: DatabaseManager): + self.db_manager = db_manager + self.current_config_id: Optional[int] = None + self.filters: List[FilterData] = [] + self.params: ParamData = ParamData( + delay_data1=0.0, + ENC_volume_data1=0.0, + ENT_mx_right_data=0.0, + ENT_mix_left_data=0.0 + ) + self.current_filter_index: int = -1 + + def load_config(self, config_id: int) -> bool: + params, filters = self.db_manager.load_config(config_id) + if params is not None: + self.params = params + self.filters = filters + self.current_config_id = config_id + return True + return False + + def save_config(self, name: str) -> int: + return self.db_manager.save_config(name, self.params, self.filters) + + def update_filter(self, index: int, **kwargs): + if 0 <= index < len(self.filters): + filter_data = self.filters[index] + for key, value in kwargs.items(): + setattr(filter_data, key, value) + self.db_manager.update_filter(filter_data.id, **kwargs) + + def update_params(self, **kwargs): + if self.params is None: + self.params = ParamData( + delay_data1=0.0, + ENC_volume_data1=0.0, + ENT_mx_right_data=0.0, + ENT_mix_left_data=0.0 + ) + for key, value in kwargs.items(): + setattr(self.params, key, value) + if self.current_config_id: + self.db_manager.update_params(self.current_config_id, self.params) + +class FilterTypeDialog(QDialog): + def __init__(self, parent=None): + super().__init__(parent) + self.setWindowTitle("选择滤波器类型") + self.setModal(True) + + layout = QVBoxLayout() + + # 添加说明标签 + label = QLabel("请选择要添加的滤波器类型:") + layout.addWidget(label) + + # 创建下拉框 + self.combo = QComboBox() + self.combo.addItems(["PEAK", "LOWPASS", "HIGHPASS", "ALLPASS"]) + layout.addWidget(self.combo) + + # 添加确认按钮 + button = QPushButton("确定") + button.clicked.connect(self.accept) + layout.addWidget(button) + + self.setLayout(layout) + + def get_selected_type(self): + return self.combo.currentText() + +class AudioFilterController: + def __init__(self, model: AudioFilterModel, view): + print("AudioFilterController initialized") + self.model = model + self.view = view + self.setup_connections() + + def setup_connections(self): + print("setup_connections") + # 表格选择变化 + self.view.ui.tableWidget.itemSelectionChanged.connect(self.on_selection_changed) + # 滑块值变化 + self.view.ui.verticalSlider.valueChanged.connect( + lambda v: self.update_filter_param('freq', v) + ) + self.view.ui.verticalSlider_2.valueChanged.connect( + lambda v: self.update_filter_param('q', v) + ) + self.view.ui.verticalSlider_3.valueChanged.connect( + lambda v: self.update_filter_param('gain', v) + ) + self.view.ui.verticalSlider_4.valueChanged.connect( + lambda v: self.update_filter_param('slope', v) + ) + + # 参数输入框变化 + self.view.ui.lineEdit_11.textChanged.connect( + lambda v: self.update_param('delay_data1', float(v)) + ) + # to do: 其他参数输入框连接 + + # 按钮点击 + self.view.ui.pushButton_7.clicked.connect(self.add_filter) + self.view.ui.pushButton_8.clicked.connect(self.delete_filter) + self.view.ui.pushButton_9.clicked.connect(self.send_params) + self.view.ui.pushButton_10.clicked.connect(self.get_params) + + def on_selection_changed(self): + row = self.view.ui.tableWidget.currentRow() + print(f"len model:{len(self.model.filters)}") + if row >= 0 and row < len(self.model.filters): + print(f"on_selection_changed:{row}") + self.model.current_filter_index = row + filter_name = self.model.filters[row].filter_type + self.view.ui.groupBox_4.setTitle(filter_name) + self.view.update_sliders() + + def update_filter_param(self, param: str, value: float): + if self.model.current_filter_index >= 0: + print(f"update_filter_param {self.model.current_filter_index} {value}") + # 更新滤波器参数 + self.model.update_filter(self.model.current_filter_index, **{param: value}) + # 更新表格显示 + self.view.update_table_row(self.model.current_filter_index) + # 如果有当前配置,保存到数据库 + if self.model.current_config_id: + self.model.save_config(f"Config {self.model.current_config_id}") + + def update_param(self, param: str, value: float): + try: + self.model.update_params(**{param: value}) + except ValueError as e: + print(f"Error updating parameter: {e}") + + def get_next_available_number(self, filter_type: str) -> int: + """ + 获取下一个可用的序号,确保序号连续 + """ + # 获取当前所有同类型的滤波器序号 + existing_numbers = set() + for f in self.model.filters: + if f.filter_type.startswith(filter_type + "_"): + try: + number = int(f.filter_type.split("_")[1]) + existing_numbers.add(number) + except (IndexError, ValueError): + continue + + # 从1开始查找第一个可用的序号 + next_number = 1 + while next_number in existing_numbers: + next_number += 1 + + return next_number + + def add_filter(self): + # 检查是否达到最大滤波器数量 + if len(self.model.filters) >= 20: + print("已达到最大滤波器数量限制(20个)") + return + + # 显示滤波器类型选择对话框 + dialog = FilterTypeDialog(self.view) + if dialog.exec(): + filter_type = dialog.get_selected_type() + + # 获取下一个可用的序号 + next_number = self.get_next_available_number(filter_type) + + # 创建新的滤波器名称 + new_filter_type = f"{filter_type}_{next_number}" + + # 创建新的滤波器,使用默认参数 + new_filter = FilterData( + filter_type=new_filter_type, + freq=1000.0, + q=1.0, + gain=0.0, + slope=12.0, + position=len(self.model.filters) + ) + + # 添加到模型中 + self.model.filters.append(new_filter) + + # 如果有当前配置,保存到数据库 + if self.model.current_config_id: + self.model.save_config(f"Config {self.model.current_config_id}") + + # 更新视图 + self.view.update_table() + + def delete_filter(self): + # 获取当前选中的行 + current_row = self.view.ui.tableWidget.currentRow() + + # 检查是否有选中的行 + if current_row < 0 or current_row >= len(self.model.filters): + print("请先选择要删除的滤波器") + return + + # 从模型中删除滤波器 + self.model.filters.pop(current_row) + + # 重置当前选中的滤波器索引 + self.model.current_filter_index = -1 + + # 如果有当前配置,保存到数据库 + if self.model.current_config_id: + self.model.save_config(f"Config {self.model.current_config_id}") + + # 更新视图 + self.view.update_table() + # 清空滤波器组标题 + self.view.ui.groupBox_4.setTitle("") + + def send_params(self): + # 实现发送参数的逻辑 + pass + + def get_params(self): + # 实现获取参数的逻辑 + pass + +class AudioFilterWidget(QWidget): + def __init__(self): + super().__init__() + self.ui = Ui_Widget() + self.ui.setupUi(self) + print("AudioFilterWidget initialized") + + # 初始化表格设置 + self.setup_table() + + self.db_manager = DatabaseManager() + self.model = AudioFilterModel(self.db_manager) + + # 加载配置 + configs = self.db_manager.get_all_configs() + if configs: + # 有配置则加载最后一个 + last_config_id = configs[-1].id + self.model.load_config(last_config_id) + else: + # 没有配置则创建默认配置 + default_params = ParamData( + delay_data1=0.0, + ENC_volume_data1=0.0, + ENT_mx_right_data=0.0, + ENT_mix_left_data=0.0 + ) + + # 创建默认滤波器 + self.model.filters = [ + FilterData( + filter_type="PEQ", + freq=1000.0, + q=1.0, + gain=0.0, + slope=12.0 + ) + ] + self.model.params = default_params + + # 保存到数据库 + config_id = self.model.save_config("Default Config") + self.model.current_config_id = config_id + + self.controller = AudioFilterController(self.model, self) + self.update_view() + + # 添加表格数据变化的信号连接 + self.ui.tableWidget.itemChanged.connect(self.on_table_item_changed) + + def update_view(self): + self.update_table() + self.update_sliders() + self.update_params() + + def update_table_row(self, row: int): + filter_data = self.model.filters[row] + # 创建带复选框的滤波器名称项 + filter_item = QTableWidgetItem(filter_data.filter_type) + filter_item.setFlags(filter_item.flags() | Qt.ItemFlag.ItemIsUserCheckable) + filter_item.setCheckState(Qt.CheckState.Checked) # 默认选中 + + # 更新各列的值 + self.ui.tableWidget.setItem(row, 0, filter_item) + self.ui.tableWidget.setItem(row, 1, QTableWidgetItem(str(filter_data.freq))) + self.ui.tableWidget.setItem(row, 2, QTableWidgetItem(str(filter_data.q))) + self.ui.tableWidget.setItem(row, 3, QTableWidgetItem(str(filter_data.gain))) + self.ui.tableWidget.setItem(row, 4, QTableWidgetItem(str(filter_data.slope))) + + def update_table(self): + self.ui.tableWidget.setRowCount(len(self.model.filters)) + for i, filter_data in enumerate(self.model.filters): + self.update_table_row(i) + + def update_sliders(self): + if self.model.current_filter_index >= 0: + filter_data = self.model.filters[self.model.current_filter_index] + self.ui.verticalSlider.setValue(int(filter_data.freq)) + self.ui.verticalSlider_2.setValue(int(filter_data.q)) + self.ui.verticalSlider_3.setValue(int(filter_data.gain)) + self.ui.verticalSlider_4.setValue(int(filter_data.slope)) + + def update_params(self): + if self.model.params: + self.ui.lineEdit_11.setText(str(self.model.params.delay_data1)) + self.ui.lineEdit_10.setText(str(self.model.params.ENC_volume_data1)) + self.ui.lineEdit_13.setText(str(self.model.params.ENT_mx_right_data)) + self.ui.lineEdit_12.setText(str(self.model.params.ENT_mix_left_data)) + + def setup_table(self): + """初始化表格设置""" + table = self.ui.tableWidget + + # 设置列数和列标题 + table.setColumnCount(5) + headers = ["滤波器", "Freq", "Q", "Gain", "Slop"] + table.setHorizontalHeaderLabels(headers) + + # 创建带复选框的表头项 + header_item = QTableWidgetItem("滤波器") + header_item.setFlags(header_item.flags() | Qt.ItemFlag.ItemIsUserCheckable) + header_item.setCheckState(Qt.CheckState.Checked) # 默认选中 + table.setHorizontalHeaderItem(0, header_item) + + # 设置第一列的特殊属性,使其支持复选框 + table.setItemDelegateForColumn(0, None) + + # 设置表格样式,包括复选框的颜色 + table.setStyleSheet(""" + /* 基础样式设置 */ + QTableWidget, QHeaderView { + border: none; + } + + /* 同时设置表格和表头的复选框样式 */ + QTableWidget::indicator, + QHeaderView::down-arrow, + QHeaderView::indicator { + width: 20px; + height: 20px; + background-color: transparent; + color: #DFE1E2; + } + + /* 选中状态 */ + QTableWidget::indicator:checked, + QHeaderView::down-arrow:checked, + QHeaderView::indicator:checked { + image: none; + background-color: #FF0000; + border: 2px solid #FF0000; + } + + /* 未选中状态 */ + QTableWidget::indicator:unchecked, + QHeaderView::down-arrow:unchecked, + QHeaderView::indicator:unchecked { + image: none; + background-color: transparent; + border: 2px solid #DFE1E2; + } + """) + + # 设置表格属性 + table.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + table.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + table.setSizeAdjustPolicy(QAbstractScrollArea.SizeAdjustPolicy.AdjustToContents) + table.setAutoScroll(True) + table.setGridStyle(Qt.PenStyle.DotLine) + + # 设置表头 + header = table.horizontalHeader() + header.setVisible(True) + header.setMinimumSectionSize(18) + header.setDefaultSectionSize(67) + header.setHighlightSections(False) + header.setProperty("showSortIndicator", False) + header.setStretchLastSection(False) + + # 隐藏垂直表头 + v_header = table.verticalHeader() + v_header.setVisible(False) + v_header.setMinimumSectionSize(17) + v_header.setDefaultSectionSize(30) + v_header.setHighlightSections(False) + + # 添加表头复选框变化的信号连接 + table.horizontalHeader().sectionClicked.connect(self.on_header_clicked) + + def on_header_clicked(self, logical_index): + """处理表头点击事件""" + if logical_index == 0: # 只处理第一列 + header_item = self.ui.tableWidget.horizontalHeaderItem(0) + new_state = Qt.CheckState.Unchecked if header_item.checkState() == Qt.CheckState.Checked else Qt.CheckState.Checked + header_item.setCheckState(new_state) + + # 更新所有行的复选框状态 + for row in range(self.ui.tableWidget.rowCount()): + item = self.ui.tableWidget.item(row, 0) + if item: + item.setCheckState(new_state) + + def on_table_item_changed(self, item): + """处理表格数据变化""" + row = item.row() + column = item.column() + + if column == 0: # 处理滤波器名称的修改 + new_name = item.text() + # 检查是否存在重名(不包括当前滤波器) + for i, filter_data in enumerate(self.model.filters): + if i != row and filter_data.filter_type == new_name: + print(f"滤波器名称 '{new_name}' 已存在,请使用其他名称") + # 恢复原来的名称 + item.setText(self.model.filters[row].filter_type) + return + + # 更新滤波器名称并保存到数据库 + self.model.update_filter(row, filter_type=new_name) + # 更新组框标题(如果当前选中的是这个滤波器) + if row == self.model.current_filter_index: + self.ui.groupBox_4.setTitle(new_name) + # 保存整个配置到数据库 + if self.model.current_config_id: + self.model.save_config(f"Config {self.model.current_config_id}") + return + + try: + # 处理其他数值列的修改 + new_value = float(item.text()) + + # 更新对应的滑动条 + if column == 1: # Freq + self.ui.verticalSlider.setValue(int(new_value)) + elif column == 2: # Q + self.ui.verticalSlider_2.setValue(int(new_value)) + elif column == 3: # Gain + self.ui.verticalSlider_3.setValue(int(new_value)) + elif column == 4: # Slope + self.ui.verticalSlider_4.setValue(int(new_value)) + + except ValueError: + print("输入的值无效,请输入数字") diff --git a/widgets/avas_widget.py b/widgets/avas_widget.py new file mode 100644 index 0000000..02851cc --- /dev/null +++ b/widgets/avas_widget.py @@ -0,0 +1,204 @@ +import sys +from PySide6.QtWidgets import (QApplication, QWidget, QPushButton, QGridLayout, + QVBoxLayout, QHBoxLayout, QCheckBox, QComboBox, + QLabel, QSlider, QFrame, QGroupBox) +from PySide6.QtCore import Qt +from widgets.audio_filter_widget import AudioFilterWidget + +class ChannelButton(QWidget): + def __init__(self, channel_num): + super().__init__() + + # Create GroupBox for the channel + self.group = QGroupBox(f"CH{channel_num}") + layout = QVBoxLayout() + layout.setSpacing(2) + + # Channel button + self.channel_btn = QPushButton(f"Channel {channel_num}") + self.channel_btn.setFixedHeight(25) + + # Store audio filter window reference + self.filter_window = None + + # Controls container with two rows + controls_layout = QGridLayout() + controls_layout.setSpacing(2) + + # SOLO row + self.solo_cb = QCheckBox("S") + self.solo_btn = QPushButton("SOLO") + self.solo_btn.setFixedHeight(20) + controls_layout.addWidget(self.solo_cb, 0, 0) + controls_layout.addWidget(self.solo_btn, 0, 1) + + # MUTE row + self.mute_cb = QCheckBox("M") + self.mute_btn = QPushButton("MUTE") + self.mute_btn.setFixedHeight(20) + controls_layout.addWidget(self.mute_cb, 1, 0) + controls_layout.addWidget(self.mute_btn, 1, 1) + + # Add widgets to main layout + layout.addWidget(self.channel_btn) + layout.addLayout(controls_layout) + + # Set GroupBox layout + self.group.setLayout(layout) + + # Main layout + main_layout = QVBoxLayout() + main_layout.addWidget(self.group) + main_layout.setContentsMargins(2, 2, 2, 2) + self.setLayout(main_layout) + + # Set fixed size for the channel widget + self.setFixedSize(110, 100) + + # Style + self.channel_btn.setStyleSheet(""" + QPushButton { + background-color: #404040; + color: white; + border: 1px solid #505050; + } + QPushButton:hover { + background-color: #505050; + } + """) + + button_style = """ + QPushButton { + background-color: #303030; + color: white; + border: 1px solid #404040; + padding: 2px; + } + QPushButton:hover { + background-color: #404040; + } + """ + + self.solo_btn.setStyleSheet(button_style) + self.mute_btn.setStyleSheet(button_style) + + self.group.setStyleSheet(""" + QGroupBox { + border: 1px solid #505050; + margin-top: 0.5em; + padding: 2px; + } + QCheckBox { + spacing: 2px; + } + """) + + # Connect button click event + self.channel_btn.clicked.connect(self.show_filter_window) + + def show_filter_window(self): + if not self.filter_window: + self.filter_window = AudioFilterWidget() + # Set window title to include channel number + self.filter_window.setWindowTitle(f"Channel {self.group.title()} Filter Settings") + + # Show the window if it's not visible + if not self.filter_window.isVisible(): + self.filter_window.show() + else: + # If already visible, bring to front + self.filter_window.raise_() + self.filter_window.activateWindow() + +class AVAS_WIDGET(QWidget): + def __init__(self): + super().__init__() + self.setWindowTitle("AVAS") + self.setup_ui() + + def setup_ui(self): + main_layout = QVBoxLayout() + + # Top section - Channel buttons + channels_layout = QGridLayout() + for i in range(24): + row = i // 8 + col = i % 8 + channel = ChannelButton(i + 1) + channels_layout.addWidget(channel, row, col) + + # Middle section + middle_layout = QHBoxLayout() + + # Left side - Parameter matrix + param_matrix = self.create_parameter_matrix() + + # Right side - Filter controls + filter_controls = self.create_filter_controls() + + middle_layout.addWidget(param_matrix, stretch=2) + middle_layout.addWidget(filter_controls, stretch=1) + + # Bottom section + bottom_layout = QHBoxLayout() + clean_btn = QPushButton("Clean") + send_btn = QPushButton("Send") + enable_cb = QCheckBox("Enable") + + bottom_layout.addStretch() + bottom_layout.addWidget(clean_btn) + bottom_layout.addWidget(send_btn) + bottom_layout.addWidget(enable_cb) + + # Add all sections to main layout + main_layout.addLayout(channels_layout) + main_layout.addLayout(middle_layout) + main_layout.addLayout(bottom_layout) + + self.setLayout(main_layout) + + def create_parameter_matrix(self): + frame = QFrame() + frame.setFrameStyle(QFrame.Box) + layout = QGridLayout() + + # Add headers and parameter rows + for i in range(24): # 24 channels + layout.addWidget(QLabel(f"Ch{i+1}"), i+1, 0) + # Add parameter controls for each channel + for j in range(5): # Example: 5 parameters per channel + layout.addWidget(QSlider(Qt.Horizontal), i+1, j+1) + + frame.setLayout(layout) + return frame + + def create_filter_controls(self): + frame = QFrame() + frame.setFrameStyle(QFrame.Box) + layout = QVBoxLayout() + + # Filter selection + filter_select = QComboBox() + filter_select.addItems(["Filter 1", "Filter 2", "Filter 3"]) + + # Filter type radio buttons + filter_types = QVBoxLayout() + types = ["Pink-Pin", "Bass Setting", "Stereo Surround", "None"] + for type_name in types: + filter_types.addWidget(QCheckBox(type_name)) + + # Sliders + sliders_layout = QVBoxLayout() + slider_labels = ["Input Level", "Freq", "Gain"] + for label in slider_labels: + sliders_layout.addWidget(QLabel(label)) + sliders_layout.addWidget(QSlider(Qt.Horizontal)) + + layout.addWidget(QLabel("Filter Select")) + layout.addWidget(filter_select) + layout.addLayout(filter_types) + layout.addLayout(sliders_layout) + + frame.setLayout(layout) + return frame +