diff --git a/.gitignore b/.gitignore index bbd6044..ed83f3f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ dev_iDeLUCS/* .DS_Store Results/ */__pycache__/* +build/* +dist/* diff --git a/GUI_iDeLUCS.py b/GUI_iDeLUCS.py index 113ea42..1f84c80 100644 --- a/GUI_iDeLUCS.py +++ b/GUI_iDeLUCS.py @@ -16,17 +16,18 @@ sys.stdout.write("\r... loading libraries [20%]..........") sys.stdout.flush() -from src import models -from src.utils import SummaryFasta, PlotPolygon, plot_confusion_matrix, \ +from idelucs import LossFunctions, kmers_non_cython, PytorchUtils, ResNet, utils +from idelucs import models +from idelucs.utils import SummaryFasta, PlotPolygon, plot_confusion_matrix, \ compute_results -from src.utils_GUI import define_ToolTips +from idelucs.utils_GUI import define_ToolTips import numpy as np import torch import random import pandas as pd import os import csv -from src.utils import label_features +from idelucs.utils import label_features sys.stdout.write("\r... loading libraries [50%]..........") sys.stdout.flush() import umap diff --git a/README.md b/README.md index 3e0fda8..5aab9cf 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,18 @@ $ pip install -r requirements.txt $ python iDeLUCS.py -h ``` +### (Optional) Using the GUI on Apple Silicon-based Macs +The current `pip` distribution of `PyQt5` does not support Apple Silicon. However, to make it work we can use the `brew` distribution of `PyQt5` and then point to that distribution from within the `virtualenv`. +1. Ensure that `homebrew` is installed correctly. +2. `brew install PyQt5` +3. Run `brew --prefix PyQt5` to see where `PyQt5` is installed. +4. Append `/lib/python3.9/site-packages/PyQt5` to the end of the string returned from the previous command. +5. Navigate to the root `iDeLUCS` folder. +6. Establish a symbolic link between the `brew` installed `PyQt5` package and the virtual environment's `site-packages` folder. + - Example: `ln -s /opt/homebrew/opt/pyqt@5/lib/python3.9/site-packages/PyQt5 /Users/shaneding/Desktop/iDeLUCS/dev_iDeLUCS/lib/python3.10/site-packages` + +If the above does not work, try seeing what different versions of python are inside `/opt/homebrew/opt/pyqt@5/lib` and try linking to a different version. + ### Clustering parameters iDeLUCS assigns a cluster identifier to all the DNA sequences present in a sigle FASTA file. The path to this file must be provided as input in both the CLI and the GUI versions of iDeLUCS. There are several hyperparameters that are required to perform the clustering. The user may use the default values or select a specific one depending on the amount of information that is available about the dataset. diff --git a/Unsupervised.py b/Unsupervised.py index ba26610..b942a68 100644 --- a/Unsupervised.py +++ b/Unsupervised.py @@ -8,7 +8,7 @@ from sklearn import mixture from sklearn.cluster import KMeans -from src.utils import SummaryFasta, compute_results, kmersFasta +from idelucs.utils import SummaryFasta, compute_results, kmersFasta import argparse import time diff --git a/dist/Loading.gif b/dist/Loading.gif deleted file mode 100644 index baa56ed..0000000 Binary files a/dist/Loading.gif and /dev/null differ diff --git a/dist/breeze.qrc b/dist/breeze.qrc deleted file mode 100644 index e65d2a8..0000000 --- a/dist/breeze.qrc +++ /dev/null @@ -1,118 +0,0 @@ - - - dark/branch_closed.svg - dark/branch_closed_hover.svg - dark/branch_end.svg - dark/branch_end_arrow.svg - dark/branch_more.svg - dark/branch_more_arrow.svg - dark/branch_open.svg - dark/branch_open_hover.svg - dark/calendar_next.svg - dark/calendar_previous.svg - dark/checkbox_checked.svg - dark/checkbox_checked_disabled.svg - dark/checkbox_indeterminate.svg - dark/checkbox_indeterminate_disabled.svg - dark/checkbox_unchecked.svg - dark/checkbox_unchecked_disabled.svg - dark/close.svg - dark/close_hover.svg - dark/close_pressed.svg - dark/dialog_cancel.svg - dark/dialog_close.svg - dark/dialog_discard.svg - dark/dialog_help.svg - dark/dialog_no.svg - dark/dialog_ok.svg - dark/dialog_open.svg - dark/dialog_reset.svg - dark/dialog_save.svg - dark/down_arrow.svg - dark/down_arrow_disabled.svg - dark/down_arrow_hover.svg - dark/hmovetoolbar.svg - dark/hseptoolbar.svg - dark/left_arrow.svg - dark/left_arrow_disabled.svg - dark/message_critical.svg - dark/message_information.svg - dark/message_question.svg - dark/message_warning.svg - dark/radio_checked.svg - dark/radio_checked_disabled.svg - dark/radio_unchecked.svg - dark/radio_unchecked_disabled.svg - dark/right_arrow.svg - dark/right_arrow_disabled.svg - dark/sizegrip.svg - dark/stylesheet.qss - dark/transparent.svg - dark/undock.svg - dark/undock_hover.svg - dark/undock_hover_pressed.svg - dark/up_arrow.svg - dark/up_arrow_disabled.svg - dark/up_arrow_hover.svg - dark/vline.svg - dark/vmovetoolbar.svg - dark/vseptoolbar.svg - light/branch_closed.svg - light/branch_closed_hover.svg - light/branch_end.svg - light/branch_end_arrow.svg - light/branch_more.svg - light/branch_more_arrow.svg - light/branch_open.svg - light/branch_open_hover.svg - light/calendar_next.svg - light/calendar_previous.svg - light/checkbox_checked.svg - light/checkbox_checked_disabled.svg - light/checkbox_indeterminate.svg - light/checkbox_indeterminate_disabled.svg - light/checkbox_unchecked.svg - light/checkbox_unchecked_disabled.svg - light/close.svg - light/close_hover.svg - light/close_pressed.svg - light/dialog_cancel.svg - light/dialog_close.svg - light/dialog_discard.svg - light/dialog_help.svg - light/dialog_no.svg - light/dialog_ok.svg - light/dialog_open.svg - light/dialog_reset.svg - light/dialog_save.svg - light/down_arrow.svg - light/down_arrow_disabled.svg - light/down_arrow_hover.svg - light/hmovetoolbar.svg - light/hseptoolbar.svg - light/left_arrow.svg - light/left_arrow_disabled.svg - light/message_critical.svg - light/message_information.svg - light/message_question.svg - light/message_warning.svg - light/radio_checked.svg - light/radio_checked_disabled.svg - light/radio_unchecked.svg - light/radio_unchecked_disabled.svg - light/right_arrow.svg - light/right_arrow_disabled.svg - light/sizegrip.svg - light/stylesheet.qss - light/transparent.svg - light/undock.svg - light/undock_hover.svg - light/undock_hover_pressed.svg - light/up_arrow.svg - light/up_arrow_disabled.svg - light/up_arrow_hover.svg - light/vline.svg - light/vmovetoolbar.svg - light/vseptoolbar.svg - - diff --git a/dist/dark/branch_closed.svg b/dist/dark/branch_closed.svg deleted file mode 100644 index e8e8d91..0000000 --- a/dist/dark/branch_closed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/branch_closed_hover.svg b/dist/dark/branch_closed_hover.svg deleted file mode 100644 index 71873dc..0000000 --- a/dist/dark/branch_closed_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/branch_end.svg b/dist/dark/branch_end.svg deleted file mode 100644 index 7e8888e..0000000 --- a/dist/dark/branch_end.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/dark/branch_end_arrow.svg b/dist/dark/branch_end_arrow.svg deleted file mode 100644 index d5aaabd..0000000 --- a/dist/dark/branch_end_arrow.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/dark/branch_more.svg b/dist/dark/branch_more.svg deleted file mode 100644 index a6d2b6e..0000000 --- a/dist/dark/branch_more.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/dark/branch_more_arrow.svg b/dist/dark/branch_more_arrow.svg deleted file mode 100644 index 6c4935a..0000000 --- a/dist/dark/branch_more_arrow.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/dark/branch_open.svg b/dist/dark/branch_open.svg deleted file mode 100644 index 031aa44..0000000 --- a/dist/dark/branch_open.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/branch_open_hover.svg b/dist/dark/branch_open_hover.svg deleted file mode 100644 index 3081521..0000000 --- a/dist/dark/branch_open_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/calendar_next.svg b/dist/dark/calendar_next.svg deleted file mode 100644 index 6131893..0000000 --- a/dist/dark/calendar_next.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/calendar_previous.svg b/dist/dark/calendar_previous.svg deleted file mode 100644 index 8382adf..0000000 --- a/dist/dark/calendar_previous.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/checkbox_checked.svg b/dist/dark/checkbox_checked.svg deleted file mode 100644 index bbee00e..0000000 --- a/dist/dark/checkbox_checked.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/dark/checkbox_checked_disabled.svg b/dist/dark/checkbox_checked_disabled.svg deleted file mode 100644 index 0508e92..0000000 --- a/dist/dark/checkbox_checked_disabled.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/dark/checkbox_indeterminate.svg b/dist/dark/checkbox_indeterminate.svg deleted file mode 100644 index d891422..0000000 --- a/dist/dark/checkbox_indeterminate.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/checkbox_indeterminate_disabled.svg b/dist/dark/checkbox_indeterminate_disabled.svg deleted file mode 100644 index 2ba0edf..0000000 --- a/dist/dark/checkbox_indeterminate_disabled.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/checkbox_unchecked.svg b/dist/dark/checkbox_unchecked.svg deleted file mode 100644 index ec56272..0000000 --- a/dist/dark/checkbox_unchecked.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/dark/checkbox_unchecked_disabled.svg b/dist/dark/checkbox_unchecked_disabled.svg deleted file mode 100644 index bedb0fd..0000000 --- a/dist/dark/checkbox_unchecked_disabled.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/dark/close.svg b/dist/dark/close.svg deleted file mode 100644 index df9dde2..0000000 --- a/dist/dark/close.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/close_hover.svg b/dist/dark/close_hover.svg deleted file mode 100644 index cc62728..0000000 --- a/dist/dark/close_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/close_pressed.svg b/dist/dark/close_pressed.svg deleted file mode 100644 index 1d4dc43..0000000 --- a/dist/dark/close_pressed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/dialog_cancel.svg b/dist/dark/dialog_cancel.svg deleted file mode 100644 index 226499f..0000000 --- a/dist/dark/dialog_cancel.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_close.svg b/dist/dark/dialog_close.svg deleted file mode 100644 index c2174c2..0000000 --- a/dist/dark/dialog_close.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_discard.svg b/dist/dark/dialog_discard.svg deleted file mode 100644 index b711b61..0000000 --- a/dist/dark/dialog_discard.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_help.svg b/dist/dark/dialog_help.svg deleted file mode 100644 index 46153b6..0000000 --- a/dist/dark/dialog_help.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_no.svg b/dist/dark/dialog_no.svg deleted file mode 100644 index e9f5245..0000000 --- a/dist/dark/dialog_no.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_ok.svg b/dist/dark/dialog_ok.svg deleted file mode 100644 index d236e77..0000000 --- a/dist/dark/dialog_ok.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_open.svg b/dist/dark/dialog_open.svg deleted file mode 100644 index 5fa68c3..0000000 --- a/dist/dark/dialog_open.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_reset.svg b/dist/dark/dialog_reset.svg deleted file mode 100644 index bb5839a..0000000 --- a/dist/dark/dialog_reset.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/dialog_save.svg b/dist/dark/dialog_save.svg deleted file mode 100644 index e85535f..0000000 --- a/dist/dark/dialog_save.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/dark/down_arrow.svg b/dist/dark/down_arrow.svg deleted file mode 100644 index 358a36f..0000000 --- a/dist/dark/down_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/down_arrow_disabled.svg b/dist/dark/down_arrow_disabled.svg deleted file mode 100644 index 6e3f650..0000000 --- a/dist/dark/down_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/down_arrow_hover.svg b/dist/dark/down_arrow_hover.svg deleted file mode 100644 index 3a1c09a..0000000 --- a/dist/dark/down_arrow_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/hmovetoolbar.svg b/dist/dark/hmovetoolbar.svg deleted file mode 100644 index e28bea6..0000000 --- a/dist/dark/hmovetoolbar.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/dark/hseptoolbar.svg b/dist/dark/hseptoolbar.svg deleted file mode 100644 index 6962c39..0000000 --- a/dist/dark/hseptoolbar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/dark/left_arrow.svg b/dist/dark/left_arrow.svg deleted file mode 100644 index 086d4ea..0000000 --- a/dist/dark/left_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/left_arrow_disabled.svg b/dist/dark/left_arrow_disabled.svg deleted file mode 100644 index 626235b..0000000 --- a/dist/dark/left_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/message_critical.svg b/dist/dark/message_critical.svg deleted file mode 100644 index 2cab82b..0000000 --- a/dist/dark/message_critical.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/dark/message_information.svg b/dist/dark/message_information.svg deleted file mode 100644 index 3394b28..0000000 --- a/dist/dark/message_information.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/dist/dark/message_question.svg b/dist/dark/message_question.svg deleted file mode 100644 index 96b4e33..0000000 --- a/dist/dark/message_question.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/dist/dark/message_warning.svg b/dist/dark/message_warning.svg deleted file mode 100644 index 0675a66..0000000 --- a/dist/dark/message_warning.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/dist/dark/radio_checked.svg b/dist/dark/radio_checked.svg deleted file mode 100644 index 5b1ebec..0000000 --- a/dist/dark/radio_checked.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/dark/radio_checked_disabled.svg b/dist/dark/radio_checked_disabled.svg deleted file mode 100644 index f6449bc..0000000 --- a/dist/dark/radio_checked_disabled.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/dark/radio_unchecked.svg b/dist/dark/radio_unchecked.svg deleted file mode 100644 index a84b48f..0000000 --- a/dist/dark/radio_unchecked.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/dark/radio_unchecked_disabled.svg b/dist/dark/radio_unchecked_disabled.svg deleted file mode 100644 index 14602a1..0000000 --- a/dist/dark/radio_unchecked_disabled.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/dark/right_arrow.svg b/dist/dark/right_arrow.svg deleted file mode 100644 index 82a5ead..0000000 --- a/dist/dark/right_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/right_arrow_disabled.svg b/dist/dark/right_arrow_disabled.svg deleted file mode 100644 index 5ee3433..0000000 --- a/dist/dark/right_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/sizegrip.svg b/dist/dark/sizegrip.svg deleted file mode 100644 index 415c874..0000000 --- a/dist/dark/sizegrip.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/stylesheet.qss b/dist/dark/stylesheet.qss deleted file mode 100644 index 976ba7b..0000000 --- a/dist/dark/stylesheet.qss +++ /dev/null @@ -1,1963 +0,0 @@ -/* - * BreezeDark stylesheet. - * - * :author: Colin Duquesnoy - * :editor: Alex Huszagh - * :license: MIT, see LICENSE.md - * - * This is originally a fork of QDarkStyleSheet, and is based on Breeze/ - * BreezeDark color scheme, but is in no way affiliated with KDE. - * - * --------------------------------------------------------------------- - * The MIT License (MIT) - * - * Copyright (c) <2013-2014> - * Copyright (c) <2015-2021> - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * --------------------------------------------------------------------- - */ - -/** - * MAIN STYLESHEET - * --------------- - */ - -QToolTip -{ - /* 0.2ex is the smallest value that's not ignored on Windows. */ - border: 0.04em solid #eff0f1; - background-color: #31363b; - alternate-background-color: #31363b; - color: #eff0f1; - padding: 0.1em; - opacity: 200; -} - -QWidget -{ - color: #eff0f1; - background-color: #31363b; - selection-background-color: #3daee9; - selection-color: #eff0f1; - background-clip: border; - border-image: none; -} - -QWidget:disabled -{ - color: #454545; - background-color: #31363b; -} - -QWidget:disabled:hover -{ - background-color: #31363b; -} - -QCheckBox -{ - spacing: 0.23em; - outline: none; - color: #eff0f1; - margin-bottom: 0.09em; - opacity: 200; -} - -QCheckBox:disabled -{ - color: #b0b0b0; -} - -QGroupBox -{ - /* Need to make sure the groupbox doesn't compress below the title. */ - min-height: 1.2em; - border: 0.04em solid #76797c; - border-radius: 0.09em; - /** - * This gives us enough space at the top to ensure we can move the - * title to be inside the guidelines, and the padding at the top - * ensures we have space below the title. - */ - margin-top: 0.5em; - padding-top: 1em; -} - -QGroupBox:focus -{ - border: 0.04em solid #76797c; - border-radius: 0.09em; -} - -QGroupBox::title -{ - /* We need to move 0.6em up to be inside the lines, +1em for padding. */ - top: -1.6em; - subcontrol-origin: content; - subcontrol-position: top center; - background: #31363b; - padding-left: 0.2em; - padding-right: 0.2em; -} - -QCheckBox::indicator, -QTreeView::indicator -{ - width: 1em; - height: 1em; -} - -QCheckBox::indicator:unchecked, -QCheckBox::indicator:unchecked:focus, -QTreeView::indicator:unchecked, -QTreeView::indicator:unchecked:focus -{ - border-image: url(:/dark/checkbox_unchecked_disabled.svg); -} - -QCheckBox::indicator:unchecked:hover, -QCheckBox::indicator:unchecked:pressed, -QTreeView::indicator:unchecked:hover, -QTreeView::indicator:unchecked:pressed, -QGroupBox::indicator:unchecked, -QGroupBox::indicator:unchecked:hover, -QGroupBox::indicator:unchecked:focus, -QGroupBox::indicator:unchecked:pressed -{ - border: none; - border-image: url(:/dark/checkbox_unchecked.svg); -} - -QCheckBox::indicator:checked, -QTreeView::indicator:checked, -QGroupBox::indicator:checked -{ - border-image: url(:/dark/checkbox_checked.svg); -} - -QCheckBox::indicator:checked:hover, -QCheckBox::indicator:checked:focus, -QCheckBox::indicator:checked:pressed, -QTreeView::indicator:checked:hover, -QTreeView::indicator:checked:focus, -QTreeView::indicator:checked:pressed, -QGroupBox::indicator:checked:hover, -QGroupBox::indicator:checked:focus, -QGroupBox::indicator:checked:pressed -{ - border: none; - border-image: url(:/dark/checkbox_checked.svg); -} - -QCheckBox::indicator:indeterminate, -QTreeView::indicator:indeterminate -{ - border-image: url(:/dark/checkbox_indeterminate.svg); -} - -QCheckBox::indicator:indeterminate:focus, -QCheckBox::indicator:indeterminate:hover, -QCheckBox::indicator:indeterminate:pressed, -QTreeView::indicator:indeterminate:focus, -QTreeView::indicator:indeterminate:hover, -QTreeView::indicator:indeterminate:pressed -{ - border-image: url(:/dark/checkbox_indeterminate.svg); -} - -QCheckBox::indicator:indeterminate:disabled, -QTreeView::indicator:indeterminate:disabled -{ - border-image: url(:/dark/checkbox_indeterminate_disabled.svg); -} - -QCheckBox::indicator:checked:disabled, -QTreeView::indicator:checked:disabled, -QGroupBox::indicator:checked:disabled -{ - border-image: url(:/dark/checkbox_checked_disabled.svg); -} - -QCheckBox::indicator:unchecked:disabled, -QTreeView::indicator:unchecked:disabled, -QGroupBox::indicator:unchecked:disabled -{ - border-image: url(:/dark/checkbox_unchecked_disabled.svg); -} - -QRadioButton -{ - spacing: 0.23em; - outline: none; - color: #eff0f1; - margin-bottom: 0.09em; -} - -QRadioButton:disabled -{ - color: #76797c; -} - -QRadioButton::indicator -{ - width: 1em; - height: 1em; -} - -QRadioButton::indicator:unchecked, -QRadioButton::indicator:unchecked:focus -{ - border-image: url(:/dark/radio_unchecked_disabled.svg); -} - -QRadioButton::indicator:unchecked:hover, -QRadioButton::indicator:unchecked:pressed -{ - border: none; - outline: none; - border-image: url(:/dark/radio_unchecked.svg); -} - -QRadioButton::indicator:checked -{ - border: none; - outline: none; - border-image: url(:/dark/radio_checked.svg); -} - -QRadioButton::indicator:checked:hover, -QRadioButton::indicator:checked:focus, -QRadioButton::indicator:checked:pressed -{ - border: none; - outline: none; - border-image: url(:/dark/radio_checked.svg); -} - -QRadioButton::indicator:checked:disabled -{ - outline: none; - border-image: url(:/dark/radio_checked_disabled.svg); -} - -QRadioButton::indicator:unchecked:disabled -{ - border-image: url(:/dark/radio_unchecked_disabled.svg); -} - -QMenuBar -{ - background-color: #31363b; - color: #eff0f1; -} - -QMenuBar::item -{ - background: transparent; -} - -QMenuBar::item:selected -{ - background: transparent; -} - -QMenuBar::item:disabled -{ - color: #76797c; -} - -QMenuBar::item:pressed -{ - background-color: #3daee9; - color: #eff0f1; - margin-bottom: -0.09em; - padding-bottom: 0.09em; -} - -QMenu -{ - color: #eff0f1; - margin: 0.09em; -} - -QMenu::icon -{ - margin: 0.23em; -} - -QMenu::item -{ - /* Add extra padding on the right for the QMenu arrow */ - padding: 0.23em 1.5em 0.23em 1.3em; - border: 0.09em solid transparent; - background: transparent; -} - -QMenu::item:selected -{ - color: #eff0f1; - background-color: #3daee9; -} - -QMenu::item:selected:disabled -{ - background-color: #31363b; -} - -QMenu::item:disabled -{ - color: #76797c; -} - -QMenu::indicator -{ - width: 1em; - height: 1em; -} - -QMenu::indicator:non-exclusive:unchecked -{ - border-image: url(:/dark/checkbox_unchecked_disabled.svg); -} - -QMenu::indicator:non-exclusive:unchecked:selected -{ - border-image: url(:/dark/checkbox_unchecked_disabled.svg); -} - -QMenu::indicator:non-exclusive:checked -{ - border-image: url(:/dark/checkbox_checked.svg); -} - -QMenu::indicator:non-exclusive:checked:selected -{ - border-image: url(:/dark/checkbox_checked.svg); -} - -QMenu::indicator:exclusive:unchecked -{ - border-image: url(:/dark/radio_unchecked_disabled.svg); -} - -QMenu::indicator:exclusive:unchecked:selected -{ - border-image: url(:/dark/radio_unchecked_disabled.svg); -} - -QMenu::indicator:exclusive:checked -{ - border-image: url(:/dark/radio_checked.svg); -} - -QMenu::indicator:exclusive:checked:selected -{ - border-image: url(:/dark/radio_checked.svg); -} - -QMenu::right-arrow -{ - margin: 0.23em; - border-image: url(:/dark/right_arrow.svg); - width: 0.5em; - height: 0.8em; -} - -QMenu::right-arrow:disabled -{ - border-image: url(:/dark/right_arrow_disabled.svg); -} - -QAbstractItemView -{ - alternate-background-color: #31363b; - color: #eff0f1; - border: 0.09em solid #31363b; - border-radius: 0.09em; -} - -QMenuBar::item:focus:!disabled -{ - border: 0.04em solid #3daee9; -} - -QTabWidget:focus, -QCheckBox:focus, -QRadioButton:focus, -QSlider:focus -{ - border: none; -} - -QLineEdit -{ - background-color: #1d2023; - padding: 0.23em; - border-style: solid; - border: 0.04em solid #76797c; - border-radius: 0.09em; - color: #eff0f1; -} - -QAbstractScrollArea -{ - border-radius: 0.09em; - border: 0.09em solid #76797c; - background-color: transparent; -} - -/** - * This is the background for the box in the bottom-right corner - * whene both scrollbars are active. - */ -QAbstractScrollArea::corner -{ - background: #31363b; -} - -/** - * Can't do the KDE style of where the scrollbar handle - * becomes light on the hover, and only when the handle - * is hovered does it become stylized. This is because - * both the handle and the background events are treated - * together. - */ -QScrollBar:horizontal -{ - background-color: #1d2023; - height: 0.65em; - margin: 0.13em 0.65em 0.13em 0.65em; - border: 0.04em transparent #1d2023; - border-radius: 0.17em; -} - -QScrollBar:horizontal:hover -{ - background-color: #76797c; -} - -QScrollBar::handle:horizontal -{ - background-color: #3daee9; - border: 0.04em solid #3daee9; - min-width: 0.5em; - border-radius: 0.17em; -} - -QScrollBar::handle:horizontal:hover -{ - background-color: #3daee9; - border: 0.04em solid #3daee9; -} - -QScrollBar::add-line:horizontal -{ - margin: 0em 0.13em 0em 0.13em; - border-image: url(:/dark/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: right; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:horizontal -{ - margin: 0em 0.13em 0em 0.13em; - border-image: url(:/dark/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: left; - subcontrol-origin: margin; -} - -QScrollBar::add-line:horizontal:hover, -QScrollBar::add-line:horizontal:on -{ - border-image: url(:/dark/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: right; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:horizontal:hover, -QScrollBar::sub-line:horizontal:on -{ - border-image: url(:/dark/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: left; - subcontrol-origin: margin; -} - -QScrollBar::up-arrow:horizontal, -QScrollBar::down-arrow:horizontal -{ - background: none; -} - -QScrollBar::add-page:horizontal, -QScrollBar::sub-page:horizontal -{ - background: none; -} - -QScrollBar:vertical -{ - background-color: #1d2023; - width: 0.65em; - margin: 0.65em 0.13em 0.65em 0.13em; - border: 0.04em transparent #1d2023; - border-radius: 0.17em; -} - -QScrollBar:vertical:hover -{ - background-color: #76797c; -} - -QScrollBar::handle:vertical -{ - background-color: #3daee9; - border: 0.04em solid #3daee9; - min-height: 0.5em; - border-radius: 0.17em; -} - -QScrollBar::handle:vertical:hover -{ - background-color: #3daee9; - border: 0.04em solid #3daee9; -} - -QScrollBar::sub-line:vertical -{ - margin: 0.13em 0em 0.13em 0em; - border-image: url(:/dark/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: top; - subcontrol-origin: margin; -} - -QScrollBar::add-line:vertical -{ - margin: 0.13em 0em 0.13em 0em; - border-image: url(:/dark/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: bottom; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:vertical:hover, -QScrollBar::sub-line:vertical:on -{ - border-image: url(:/dark/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: top; - subcontrol-origin: margin; -} - -QScrollBar::add-line:vertical:hover, -QScrollBar::add-line:vertical:on -{ - border-image: url(:/dark/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: bottom; - subcontrol-origin: margin; -} - -QScrollBar::up-arrow:vertical, -QScrollBar::down-arrow:vertical -{ - background: none; -} - -QScrollBar::add-page:vertical, -QScrollBar::sub-page:vertical -{ - background: none; -} - -QTextEdit -{ - background-color: #1d2023; - color: #eff0f1; - border: 0.04em solid #76797c; -} - -QPlainTextEdit -{ - background-color: #1d2023; - color: #eff0f1; - border-radius: 0.09em; - border: 0.04em solid #76797c; -} - -QSizeGrip -{ - border-image: url(:/dark/sizegrip.svg); - width: 0.5em; - height: 0.5em; -} - -/** - * Set the separator to be transparent, since the dock has a border. - * On PyQt6, neither the border nor the background seem to be respected. - */ -QMainWindow::separator -{ - border: 0.09em transparent #76797c; - background: transparent; -} - -QMenu::separator -{ - height: 0.09em; - background-color: #76797c; - padding-left: 0.2em; - margin-top: 0.2em; - margin-bottom: 0.2em; - margin-left: 0.41em; - margin-right: 0.41em; -} - -QFrame[frameShape="2"], /* QFrame::Panel == 0x0003 */ -QFrame[frameShape="3"], /* QFrame::WinPanel == 0x0003 */ -QFrame[frameShape="4"], /* QFrame::HLine == 0x0004 */ -QFrame[frameShape="5"], /* QFrame::VLine == 0x0005 */ -QFrame[frameShape="6"] /* QFrame::StyledPanel == 0x0006 */ -{ - border-width: 0.04em; - padding: 0.09em; - border-style: solid; - border-color: #31363b; - background-color: #76797c; - border-radius: 0.23em; -} - -/* Provide highlighting for frame objects. */ -QFrame[frameShape="2"]:hover, -QFrame[frameShape="3"]:hover, -QFrame[frameShape="4"]:hover, -QFrame[frameShape="5"]:hover, -QFrame[frameShape="6"]:hover -{ - border: 0.04em solid #3daee9; -} - -/* Don't provide an outline if we have a widget that takes up the space. */ -QFrame[frameShape] QAbstractItemView:hover -{ - border: 0em solid black; -} - -/** - * Note: I can't really change the background of the toolbars - * independently, since KDE Breeze has different colors for the - * window bar and the rest of the UI. The top toolbar uses - * the window style, and the rest use the application style, - * which we can't do. - */ -QToolBar -{ - font-weight: bold; -} - -QToolBar:horizontal -{ - background: 0.09em solid #31363b; -} - -QToolBar:vertical -{ - background: 0.09em solid #31363b; -} - -QToolBar::handle:horizontal -{ - border-image: url(:/dark/hmovetoolbar.svg); -} - -QToolBar::handle:vertical -{ - border-image: url(:/dark/vmovetoolbar.svg); -} - -QToolBar::separator:horizontal -{ - border-image: url(:/dark/hseptoolbar.svg); -} - -QToolBar::separator:vertical -{ - border-image: url(:/dark/vseptoolbar.svg); -} - -QToolBar QToolButton -{ - font-weight: bold; - min-height: 1em; - min-width: 2em; - border: 0.04em transparent black; - padding-left: 0.2em; - padding-right: 0.3em; -} - -QToolBar QToolButton:hover -{ - border: 0.04em solid #3daee9; -} - -QToolBar QToolButton:pressed -{ - border: 0.04em solid #3daee9; - /* The padding doesn't inherit from `QToolBar QToolButton`, so leave it in. */ - padding-left: 0.2em; - padding-right: 0.3em; -} - -QPushButton -{ - color: #eff0f1; - background-color: #31363b; - border: 0.04em solid #76797c; - padding: 0.23em; - border-radius: 0.09em; - outline: none; - min-height: 1.1em; -} - -QComboBox:open, -QPushButton:open -{ - border-width: 0.04em; - border-color: #76797c; -} - -QComboBox:closed, -QPushButton:closed -{ - border-width: 0.04em; - border-color: #76797c; -} - -QPushButton:disabled -{ - background-color: #31363b; - border-width: 0.04em; - border-color: #76797c; - border-style: solid; - padding-top: 0.23em; - padding-bottom: 0.23em; - padding-left: 1ex; - padding-right: 1ex; - border-radius: 0.04em; - color: #454545; -} - -QPushButton:focus -{ - color: #eff0f1; -} - -QPushButton:pressed -{ - background-color: #454a4f; - padding-top: -0.65em; - padding-bottom: -0.74em; - color: #eff0f1; -} - -QComboBox -{ - border: 0.04em solid #76797c; - border-radius: 0.09em; - padding: 0.23em; - min-width: 2.5em; -} - -QComboBox:editable -{ - background-color: #1d2023; -} - -QPushButton:checked -{ - background-color: #626568; - border: 0.04em solid #76797c; - color: #eff0f1; -} - -QPushButton:hover -{ - background-color: #31363b; - border: 0.04em solid #3daee9; - color: #eff0f1; -} - -QPushButton:checked:hover -{ - background-color: #626568; - border: 0.04em solid #3daee9; - color: #eff0f1; -} - -QComboBox:hover, -QComboBox:focus, -QAbstractSpinBox:hover, -QAbstractSpinBox:focus, -QLineEdit:hover, -QLineEdit:focus, -QTextEdit:hover, -QTextEdit:focus, -QPlainTextEdit:hover, -QPlainTextEdit:focus, -QAbstractView:hover, -QTreeView:hover, -QTreeView:focus -{ - border: 0.04em solid #3daee9; - color: #eff0f1; -} - -QComboBox:hover:pressed:!editable, -QPushButton:hover:pressed, -QAbstractSpinBox:hover:pressed, -QLineEdit:hover:pressed, -QTextEdit:hover:pressed, -QPlainTextEdit:hover:pressed, -QAbstractView:hover:pressed, -QTreeView:hover:pressed -{ - background-color: #31363b; -} - -QComboBox:hover:pressed:editable -{ - background-color: #1d2023; -} - -QComboBox QAbstractItemView -{ - /* This happens for the drop-down menu always, whether editable or not.*/ - background-color: #1d2023; - selection-background-color: #2a79a3; - outline-color: 0em; - border-radius: 0.09em; -} - -QComboBox::drop-down -{ - subcontrol-origin: padding; - subcontrol-position: top right; - width: 0.65em; - - border-left-width: 0em; - border-left-style: solid; - border-top-right-radius: 0.13em; - border-bottom-right-radius: 0.13em; -} - -QComboBox::down-arrow -{ - border-image: url(:/dark/down_arrow_disabled.svg); - width: 0.8em; - height: 0.5em; - margin-right: 0.41em; -} - -QComboBox::down-arrow:on, -QComboBox::down-arrow:hover, -QComboBox::down-arrow:focus -{ - border-image: url(:/dark/down_arrow.svg); - width: 0.8em; - height: 0.5em; - margin-right: 0.41em; -} - -QAbstractSpinBox -{ - padding: 0.23em; - border: 0.09em solid #76797c; - background-color: #1d2023; - color: #eff0f1; - border-radius: 0.09em; - min-width: 3em; - min-height: 1em; -} - -QAbstractSpinBox:hover -{ - border: 0.09em solid #3daee9; -} - -QAbstractSpinBox:up-button, -QAbstractSpinBox:up-button:hover -{ - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: center right; - padding-right: 0.1em; - width: 0.8em; - height: 0.5em; -} - -QAbstractSpinBox:down-button, -QAbstractSpinBox:down-button:hover -{ - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: center left; - padding-left: 0.1em; - width: 0.8em; - height: 0.5em; -} - -QAbstractSpinBox::up-arrow -{ - border-image: url(:/dark/up_arrow.svg); -} - -QAbstractSpinBox::up-arrow:disabled, -QAbstractSpinBox::up-arrow:off -{ - border-image: url(:/dark/up_arrow_disabled.svg); -} - -QAbstractSpinBox::up-arrow:hover -{ - border-image: url(:/dark/up_arrow_hover.svg); -} - -QAbstractSpinBox::down-arrow -{ - border-image: url(:/dark/down_arrow.svg); -} - -QAbstractSpinBox::down-arrow:disabled, -QAbstractSpinBox::down-arrow:off -{ - border-image: url(:/dark/down_arrow_disabled.svg); -} - -QAbstractSpinBox::down-arrow:!off:!disabled:hover -{ - border-image: url(:/dark/down_arrow_hover.svg); -} - -QDoubleSpinBox -{ - min-width: 4em; -} - -/** - * `QCalendarWidget QAbstractItemView:enabled` sets the color, background - * color, and selection color for active dates in the view. - * `QCalendarWidget QAbstractItemView:enabled` sets the disabled dates. - */ -QCalendarWidget QAbstractItemView:enabled -{ - color: #eff0f1; - selection-color: #eff0f1; - selection-background-color: #3daee9; -} - -/* Won't take hover events. */ -QCalendarWidget QToolButton#qt_calendar_nextmonth -{ - border-image: url(:/dark/calendar_next.svg); - width: 0.5em; - height: 0.8em; - icon-size: 0px; -} - -QCalendarWidget QToolButton#qt_calendar_prevmonth -{ - border-image: url(:/dark/calendar_previous.svg); - width: 0.5em; - height: 0.8em; - icon-size: 0px; -} - -QCalendarWidget QSpinBox -{ - max-height: 1.5em; - min-width: 3.5em; - margin: 0em; - margin-top: 0.2em; - padding: 0em; - outline: 0em; - padding-left: 0.5em; -} - -QLabel -{ - border: 0em solid black; -} - -/* BORDERS */ -QTabWidget::pane -{ - padding: 0.23em; - margin: 0.04em; -} - -QTabWidget::pane:top -{ - border: 0.04em solid #76797c; - top: -0.04em; -} - -QTabWidget::pane:bottom -{ - border: 0.04em solid #76797c; - bottom: -0.04em; -} - -QTabWidget::pane:left -{ - border: 0.04em solid #76797c; - left: -0.04em; -} - -QTabWidget::pane:right -{ - border: 0.04em solid #76797c; - right: -0.04em; -} - -QTabBar -{ - qproperty-drawBase: 0; - left: 0.23em; - border-radius: 0.13em; - /** - * Note: this is the underline for each tab title. It's not - * documented, and this took forever to track down. At least - * 10 hours have been wasted trying to turn off this line, - * do not deleted this comment. - */ - selection-color: transparent; -} - -QTabBar:focus -{ - border: 0em transparent black; -} - -QTabBar::close-button -{ - /* Doesn't seem possible to resize these buttons */ - border-image: url(:/dark/transparent.svg); - image: url(:/dark/close.svg); - background: transparent; -} - -QTabBar::close-button:hover -{ - image: url(:/dark/close_hover.svg); -} - -QTabBar::close-button:pressed -{ - image: url(:/dark/close_pressed.svg); -} - -/* TOP TABS */ -QTabBar::tab:top, -QTabBar::tab:top:last, -QTabBar::tab:top:only-one -{ - color: #eff0f1; - border: 0.04em transparent black; - border-left: 0.04em solid #76797c; - border-right: 0.04em solid #76797c; - border-top: 0.09em solid #3daee9; - background-color: #31363b; - padding: 0.23em; - min-width: 50px; - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:!selected -{ - color: #eff0f1; - background-color: #2c3034; - border: 0.04em transparent black; - border-right: 0.04em solid #76797c; - border-bottom: 0.04em solid #76797c; - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:next-selected -{ - border-right: 0.04em transparent #2c3034; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -/* BOTTOM TABS */ -QTabBar::tab:bottom, -QTabBar::tab:bottom:last, -QTabBar::tab:bottom:only-one -{ - color: #eff0f1; - border: 0.04em transparent black; - border-left: 0.04em solid #76797c; - border-right: 0.04em solid #76797c; - border-bottom: 0.09em solid #3daee9; - background-color: #31363b; - padding: 0.23em; - min-width: 50px; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:!selected -{ - color: #eff0f1; - background-color: #2c3034; - border: 0.04em transparent black; - border-top: 0.04em solid #76797c; - border-right: 0.04em solid #76797c; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:next-selected -{ - border-right: 0.04em transparent #2c3034; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -/* LEFT TABS */ -QTabBar::tab:left, -QTabBar::tab:left:last, -QTabBar::tab:left:only-one -{ - color: #eff0f1; - border: 0.04em transparent black; - border-top: 0.09em solid #3daee9; - border-bottom: 0.04em solid #76797c; - border-left: 0.04em solid #76797c; - background-color: #31363b; - padding: 0.23em; - min-height: 50px; - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:!selected -{ - color: #eff0f1; - background-color: #2c3034; - border: 0.04em transparent black; - border-top: 0.04em solid #76797c; - border-right: 0.04em solid #76797c; - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:previous-selected -{ - border-top: 0.04em transparent #2c3034; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -/* RIGHT TABS */ -QTabBar::tab:right, -QTabBar::tab:right:last, -QTabBar::tab:right:only-one -{ - color: #eff0f1; - border: 0.04em transparent black; - border-top: 0.09em solid #3daee9; - border-bottom: 0.04em solid #76797c; - border-right: 0.04em solid #76797c; - background-color: #31363b; - padding: 0.23em; - min-height: 50px; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:!selected -{ - color: #eff0f1; - background-color: #2c3034; - border: 0.04em transparent black; - border-top: 0.04em solid #76797c; - border-left: 0.04em solid #76797c; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:previous-selected -{ - border-top: 0.04em transparent #2c3034; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.1); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar QToolButton::right-arrow:enabled -{ - border-image: url(:/dark/right_arrow.svg); - width: 0.5em; - height: 0.8em; -} - -QTabBar QToolButton::left-arrow:enabled -{ - border-image: url(:/dark/left_arrow.svg); - width: 0.5em; - height: 0.8em; -} - -QTabBar QToolButton::right-arrow:disabled -{ - border-image: url(:/dark/right_arrow_disabled.svg); - width: 0.5em; - height: 0.8em; -} - -QTabBar QToolButton::left-arrow:disabled -{ - border-image: url(:/dark/left_arrow_disabled.svg); - width: 0.5em; - height: 0.8em; -} - -QDockWidget -{ - background: #31363b; - /** - * It doesn't seem possible to change the border of the - * QDockWidget without changing the content margins. - */ - /** - * This is a bug fix so we can handle hover, pressed, and other events. - * Reference: https://stackoverflow.com/questions/32145080/qdockwidget-float-close-button-hover-images - */ - titlebar-close-icon: url(:/dark/transparent.svg); - titlebar-normal-icon: url(:/dark/transparent.svg); -} - -/** - * Don't style the title, since it gives a weird, missing border - * around the rest of the dock widget, which the remaining border - * cannot be removed. - * - * There is a bug in Qt6, where the icons are small. It doesn't - * change if we use `image` instead of `border-image`, nor if we - * use `qproperty-icon`, etc. The icon seem to be half the size - * of our desired values. - */ -QDockWidget::close-button, -QDockWidget::float-button -{ - border: 0.04em solid transparent; - border-radius: 0.09em; - background: transparent; - /* Maximum icon size for buttons */ - icon-size: 14px; -} - -QDockWidget::float-button -{ - border-image: url(:/dark/transparent.svg); - image: url(:/dark/undock.svg); -} - -QDockWidget::float-button:hover -{ - image: url(:/dark/undock_hover.svg); -} - -/* The :pressed events don't register, seems to be a Qt bug. */ -QDockWidget::float-button:pressed -{ - image: url(:/dark/undock_hover.svg); -} - -QDockWidget::close-button -{ - border-image: url(:/dark/transparent.svg); - image: url(:/dark/close.svg); -} - -QDockWidget::close-button:hover -{ - image: url(:/dark/close_hover.svg); -} - -/* The :pressed events don't register, seems to be a Qt bug. */ -QDockWidget::close-button:pressed -{ - image: url(:/dark/close_pressed.svg); -} - -QTreeView, -QListView -{ - background-color: #1d2023; - border: 0em solid black; -} - -QTreeView:selected, -QTreeView:!selected, -QListView:selected, -QListView:!selected -{ - border: 0em solid black; -} - -QTreeView::branch:has-siblings -{ - border-image: url(:/dark/vline.svg); - image: none; -} - -/* These branch indicators don't scale */ -TreeView::branch:!has-siblings -{ - border-image: none; - image: none; -} - -QTreeView::branch:has-siblings:adjoins-item -{ - border-image: url(:/dark/branch_more.svg); -} - -QTreeView::branch:!has-children:!has-siblings:adjoins-item -{ - border-image: url(:/dark/branch_end.svg); -} - -QTreeView::branch:has-children:!has-siblings:closed, -QTreeView::branch:closed:has-children:has-siblings -{ - image: url(:/dark/branch_closed.svg); -} - -QTreeView::branch:has-children:!has-siblings:closed:hover, -QTreeView::branch:closed:has-children:has-siblings:hover -{ - image: url(:/dark/branch_closed_hover.svg); -} - -QTreeView::branch:has-children:!has-siblings:closed, -QTreeView::branch:open:has-children:!has-siblings -{ - border-image: url(:/dark/branch_end_arrow.svg); -} - -QTreeView::branch:closed:has-children:has-siblings, -QTreeView::branch:open:has-children:has-siblings -{ - border-image: url(:/dark/branch_more_arrow.svg); -} - -QTreeView::branch:open:has-children:!has-siblings, -QTreeView::branch:open:has-children:has-siblings -{ - image: url(:/dark/branch_open.svg); -} - -QTreeView::branch:open:has-children:!has-siblings:hover, -QTreeView::branch:open:has-children:has-siblings:hover -{ - image: url(:/dark/branch_open_hover.svg); -} - -QListView -{ - /* Give space for elements aligned left or right. */ - padding: 0.2em; -} - -QTableView::item, -QListView::item, -QTreeView::item -{ - padding: 0.13em; - color: #eff0f1; -} - -QTableView::item:!selected:hover, -QListView::item:!selected:hover, -QTreeView::item:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.1); - outline: 0; - color: #eff0f1; - padding: 0.13em; -} - -QSlider::handle:horizontal, -QSlider::handle:vertical -{ - background: #1d2023; - border: 0.04em solid #626568; - width: 0.7em; - height: 0.7em; - border-radius: 0.35em; -} - -QSlider:horizontal -{ - height: 2em; -} - -QSlider:vertical -{ - width: 2em; -} - -QSlider::handle:horizontal -{ - margin: -0.23em 0; -} - -QSlider::handle:vertical -{ - margin: 0 -0.23em; -} - -QSlider::groove:horizontal, -QSlider::groove:vertical -{ - background: #2c3034; - border: 0em solid #31363b; - border-radius: 0.19em; -} - -QSlider::groove:horizontal -{ - height: 0.4em; -} - -QSlider::groove:vertical -{ - width: 0.4em; -} - -QSlider::handle:horizontal:hover, -QSlider::handle:horizontal:focus, -QSlider::handle:vertical:hover, -QSlider::handle:vertical:focus -{ - border: 0.04em solid #3daee9; -} - -QSlider::handle:horizontal:!focus:!hover, -QSlider::handle:vertical:!focus:!hover -{ - border: 0.04em solid #626568; -} - -QSlider::sub-page:horizontal, -QSlider::add-page:vertical -{ - background: #3daee9; - border-radius: 0.19em; -} - -QSlider::add-page:horizontal, -QSlider::sub-page:vertical -{ - background: #626568; - border-radius: 0.19em; -} - -QToolButton -{ - background-color: transparent; - border: 0.04em solid #76797c; - border-radius: 0.09em; - margin: 0.23em; - padding: 0.23em; - padding-top: 0.1em; - padding-right: 1.2em; - min-height: 1.1em; -} - -QToolButton::right-arrow, -QToolButton::left-arrow, -QToolButton::up-arrow, -QToolButton::down-arrow -{ - /* Undo the padding when we have an arrow */ - padding-right: -1.2em; -} - -QToolButton::right-arrow -{ - image: url(:/dark/right_arrow.svg); -} - -QToolButton::left-arrow -{ - image: url(:/dark/left_arrow.svg); -} - -QToolButton::up-arrow -{ - image: url(:/dark/up_arrow.svg); -} - -QToolButton::down-arrow -{ - image: url(:/dark/down_arrow.svg); -} - -QToolButton:hover -{ - border: 0.04em solid #3daee9; -} - -QToolButton::menu-indicator -{ - border-image: none; - image: url(:/dark/down_arrow.svg); - width: 0.8em; - height: 0.5em; - top: -0.7ex; - left: -0.09em; - padding-right: 0.09em; -} - -QToolButton::menu-arrow -{ - border-image: none; - image: url(:/dark/down_arrow.svg); - width: 0.8em; - height: 0.5em; - subcontrol-position: bottom right; -} - -QToolButton::menu-button -{ - border-top-right-radius: 0.5em; - border-bottom-right-radius: 0.5em; - /* 1ex width + 0.4ex for border + no text = 2ex allocated above */ - width: 1.3em; - padding: 0.23em; - outline: none; -} - -QToolButton::menu-button::menu-arrow -{ - left: -0.09em; - subcontrol-position: bottom right; -} - -QToolButton::menu-button:hover -{ - background-color: transparent; -} - -QToolButton:checked, -QToolButton:pressed -{ - background-color: #3daee9; - padding: 0.23em; - padding-right: 1.2em; - min-height: 1.3em; - outline: none; -} - -QToolButton::menu-button:pressed -{ - background-color: transparent; - padding: 0.23em; - outline: none; -} - -QTableView -{ - border: 0em solid black; - gridline-color: #31363b; - background-color: #1d2023; -} - -QTableView:!selected, -QTableView:selected -{ - border: 0em solid black; -} - -QTableView -{ - border-radius: 0em; -} - -QAbstractItemView::item -{ - color: #eff0f1; -} - -QAbstractItemView::item:pressed -{ - background: #2a79a3; - color: #eff0f1; -} - -QAbstractItemView::item:selected:!active -{ - background: rgba(61, 173, 232, 0.1); -} - -/* Use background with qlineargradient to avoid ugly border on widget. */ -QAbstractItemView::item:selected:active -{ - background: qlineargradient( - x1: 0.5, y1: 0.5 - x2: 0.5, y2: 1, - stop: 0 #2a79a3, - stop: 1 #2a79a3 - ); - color: #eff0f1; -} - -QAbstractItemView::item:selected:hover -{ - background: qlineargradient( - x1: 0.5, y1: 0.5 - x2: 0.5, y2: 1, - stop: 0 #2f88b7, - stop: 1 #2f88b7 - ); - color: #eff0f1; -} - -QHeaderView -{ - background-color: #31363b; - border: 0.04em transparent; - border-radius: 0em; - margin: 0em; - padding: 0em; -} - -QHeaderView::section -{ - background-color: #31363b; - border: 0.04em solid #76797c; - color: #eff0f1; - padding: 0.23em; - padding-top: 0.3em; - border-radius: 0em; - text-align: center; -} - -QHeaderView::section::vertical::first, -QHeaderView::section::vertical::only-one -{ - border-top: 0.04em solid #76797c; -} - -QHeaderView::section::vertical -{ - border-top: transparent; -} - -QHeaderView::section::horizontal::first, -QHeaderView::section::horizontal::only-one -{ - border-left: 0.04em solid #76797c; -} - -QHeaderView::section::horizontal -{ - border-left: transparent; -} - -QHeaderView::section:checked -{ - color: #ffffff; - background-color: #334e5e; -} - -/* Note that this doesn't work for QTreeView unless the header is clickable */ -QHeaderView::section:hover, -QHeaderView::section::horizontal::first:hover, -QHeaderView::section::horizontal::only-one:hover, -QHeaderView::section::vertical::first:hover, -QHeaderView::section::vertical::only-one:hover -{ - border: 0.04em solid #3daee9; -} - -QHeaderView::down-arrow -{ - image: url(:/dark/down_arrow.svg); - subcontrol-origin: margin; - subcontrol-position: top center; - padding-top: 0.2em; - width: 0.8em; - height: 0.5em; -} - -QHeaderView::up-arrow -{ - image: url(:/dark/up_arrow.svg); - subcontrol-origin: margin; - subcontrol-position: top center; - padding-top: 0.2em; - width: 0.8em; - height: 0.5em; -} - -QTableView QTableCornerButton::section -{ - background-color: #31363b; - border: 0.04em transparent #76797c; - border-top: 0.04em solid #76797c; - border-left: 0.04em solid #76797c; - border-radius: 0em; -} - -/* No hover event */ -QTableView QTableCornerButton:hover -{ - border: 0.04em transparent #76797c; -} - -QTableView QTableCornerButton::section:pressed -{ - border: 0.04em solid #3daee9; - border-radius: 0em; -} - -QToolBox -{ - padding: 0.23em; - border: 0.09em transparent black; -} - -QToolBox::tab -{ - border-bottom: 0.09em solid #76797c; - margin-left: 1.5em; -} - -QToolBox::tab:selected, -QToolBox::tab:hover -{ - border-bottom: 0.09em solid #3daee9; -} - -QSplitter::handle -{ - border: 0.09em solid #2c3034; - background: -0.5em solid #2c3034; - max-width: 0em; - max-height: 0em; -} - -/** - * It's not possible to get satisfactory rounded borders here. - * If you set the border to be negative, while adjusting the - * widths, you get an asymmetrical curve which produces an - * unappealing border. - */ -QProgressBar:horizontal, -QProgressBar:vertical -{ - background-color: #626568; - border: 0.9em solid #31363b; - border-radius: 0.13em; - padding: 0em; -} - -QProgressBar:horizontal -{ - height: 0.2em; - min-width: 6em; - text-align: right; - padding-left: -0.03em; - padding-right: -0.03em; - margin-top: 0.2em; - margin-bottom: 0.2em; - margin-right: 1.3em; -} - -QProgressBar:vertical -{ - width: 0.2em; - min-height: 6em; - text-align: bottom; - padding-top: -0.03em; - padding-bottom: -0.03em; - margin-left: 0.2em; - margin-right: 0.2em; - margin-bottom: 0.41em; -} - -QProgressBar::chunk:horizontal, -QProgressBar::chunk:vertical -{ - background-color: #3daee9; - border: 0.9em transparent; - border-radius: 0.08em; -} - -QScrollArea, -QScrollArea:focus, -QScrollArea:hover -{ - border: 0em solid black; -} - -/* ICONS */ -/** - * Qt's built-in icons can look pretty bad if the system theme - * is a different color than the current one. For example, when - * using a dark theme, with a light UI, the `Ok` button is greyed - * out for an about dialog. - * - * QDialogButtonBox will apply for all standard buttons in all standard - * widgets, such as QMessageBox, etc. However, we do need to override - * standard icons elsewhere. - * - * The rest of the icons make little sense to implement: - * Qt uses native window decorations. - * Qt normally uses native file dialogs, which look nicer. - * Media controls are used in custom widgets, which aren't standard. - */ -QDialogButtonBox -{ - dialogbuttonbox-buttons-have-icons: true; - - dialog-cancel-icon: url(:/dark/dialog_cancel.svg); - dialog-close-icon: url(:/dark/dialog_close.svg); - dialog-ok-icon: url(:/dark/dialog_ok.svg); - dialog-open-icon: url(:/dark/dialog_open.svg); - dialog-reset-icon: url(:/dark/dialog_reset.svg); - dialog-save-icon: url(:/dark/dialog_save.svg); - /** - * No support yet for overriding saveall. - * dialog-saveall-icon: url(:/dark/dialog_saveall.svg); - */ - dialog-yes-icon: url(:/dark/dialog_ok.svg); - dialog-help-icon: url(:/dark/dialog_help.svg); - dialog-no-icon: url(:/dark/dialog_no.svg); - dialog-apply-icon: url(:/dark/dialog_ok.svg); - dialog-discard-icon: url(:/dark/dialog_discard.svg); -} - -QMessageBox -{ - messagebox-critical-icon: url(:/dark/message_critical.svg); - messagebox-information-icon: url(:/dark/message_information.svg); - messagebox-question-icon: url(:/dark/message_question.svg); - messagebox-warning-icon: url(:/dark/message_warning.svg); -} - -/* Set some styles for these custom dialog buttons */ -QDialogButtonBox QPushButton, -QMessageBox QPushButton -{ - min-height: 1.1em; - min-width: 5em; -} diff --git a/dist/dark/transparent.svg b/dist/dark/transparent.svg deleted file mode 100644 index 3a8ca5c..0000000 --- a/dist/dark/transparent.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dist/dark/undock.svg b/dist/dark/undock.svg deleted file mode 100644 index 886196c..0000000 --- a/dist/dark/undock.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/undock_hover.svg b/dist/dark/undock_hover.svg deleted file mode 100644 index 5f1c72c..0000000 --- a/dist/dark/undock_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/undock_hover_pressed.svg b/dist/dark/undock_hover_pressed.svg deleted file mode 100644 index 1fa8d5c..0000000 --- a/dist/dark/undock_hover_pressed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/up_arrow.svg b/dist/dark/up_arrow.svg deleted file mode 100644 index b6ec618..0000000 --- a/dist/dark/up_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/up_arrow_disabled.svg b/dist/dark/up_arrow_disabled.svg deleted file mode 100644 index de13ac2..0000000 --- a/dist/dark/up_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/up_arrow_hover.svg b/dist/dark/up_arrow_hover.svg deleted file mode 100644 index 6f33e68..0000000 --- a/dist/dark/up_arrow_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/vline.svg b/dist/dark/vline.svg deleted file mode 100644 index 2ecc5ce..0000000 --- a/dist/dark/vline.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/dark/vmovetoolbar.svg b/dist/dark/vmovetoolbar.svg deleted file mode 100644 index e626a33..0000000 --- a/dist/dark/vmovetoolbar.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/dark/vseptoolbar.svg b/dist/dark/vseptoolbar.svg deleted file mode 100644 index 3ab1a7b..0000000 --- a/dist/dark/vseptoolbar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/light/branch_closed.svg b/dist/light/branch_closed.svg deleted file mode 100644 index 5365e9e..0000000 --- a/dist/light/branch_closed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/branch_closed_hover.svg b/dist/light/branch_closed_hover.svg deleted file mode 100644 index 91f8e3a..0000000 --- a/dist/light/branch_closed_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/branch_end.svg b/dist/light/branch_end.svg deleted file mode 100644 index 70ea5fd..0000000 --- a/dist/light/branch_end.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/light/branch_end_arrow.svg b/dist/light/branch_end_arrow.svg deleted file mode 100644 index 5f25d55..0000000 --- a/dist/light/branch_end_arrow.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/light/branch_more.svg b/dist/light/branch_more.svg deleted file mode 100644 index 543a353..0000000 --- a/dist/light/branch_more.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/light/branch_more_arrow.svg b/dist/light/branch_more_arrow.svg deleted file mode 100644 index 6681447..0000000 --- a/dist/light/branch_more_arrow.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/light/branch_open.svg b/dist/light/branch_open.svg deleted file mode 100644 index 5ef0d33..0000000 --- a/dist/light/branch_open.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/branch_open_hover.svg b/dist/light/branch_open_hover.svg deleted file mode 100644 index 233530b..0000000 --- a/dist/light/branch_open_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/calendar_next.svg b/dist/light/calendar_next.svg deleted file mode 100644 index 5c2e0d5..0000000 --- a/dist/light/calendar_next.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/calendar_previous.svg b/dist/light/calendar_previous.svg deleted file mode 100644 index 04ebc9c..0000000 --- a/dist/light/calendar_previous.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/checkbox_checked.svg b/dist/light/checkbox_checked.svg deleted file mode 100644 index 506f020..0000000 --- a/dist/light/checkbox_checked.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/light/checkbox_checked_disabled.svg b/dist/light/checkbox_checked_disabled.svg deleted file mode 100644 index fd8fa46..0000000 --- a/dist/light/checkbox_checked_disabled.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/dist/light/checkbox_indeterminate.svg b/dist/light/checkbox_indeterminate.svg deleted file mode 100644 index 580d522..0000000 --- a/dist/light/checkbox_indeterminate.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/checkbox_indeterminate_disabled.svg b/dist/light/checkbox_indeterminate_disabled.svg deleted file mode 100644 index a8b22cd..0000000 --- a/dist/light/checkbox_indeterminate_disabled.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/checkbox_unchecked.svg b/dist/light/checkbox_unchecked.svg deleted file mode 100644 index 2e46929..0000000 --- a/dist/light/checkbox_unchecked.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/light/checkbox_unchecked_disabled.svg b/dist/light/checkbox_unchecked_disabled.svg deleted file mode 100644 index af0f0b3..0000000 --- a/dist/light/checkbox_unchecked_disabled.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/light/close.svg b/dist/light/close.svg deleted file mode 100644 index 13caf6f..0000000 --- a/dist/light/close.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/close_hover.svg b/dist/light/close_hover.svg deleted file mode 100644 index 8e2d0ab..0000000 --- a/dist/light/close_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/close_pressed.svg b/dist/light/close_pressed.svg deleted file mode 100644 index 850141a..0000000 --- a/dist/light/close_pressed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/dialog_cancel.svg b/dist/light/dialog_cancel.svg deleted file mode 100644 index 4bd6495..0000000 --- a/dist/light/dialog_cancel.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_close.svg b/dist/light/dialog_close.svg deleted file mode 100644 index 6f1aa21..0000000 --- a/dist/light/dialog_close.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_discard.svg b/dist/light/dialog_discard.svg deleted file mode 100644 index 2d6d096..0000000 --- a/dist/light/dialog_discard.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_help.svg b/dist/light/dialog_help.svg deleted file mode 100644 index 8640730..0000000 --- a/dist/light/dialog_help.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_no.svg b/dist/light/dialog_no.svg deleted file mode 100644 index 6c4ed77..0000000 --- a/dist/light/dialog_no.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_ok.svg b/dist/light/dialog_ok.svg deleted file mode 100644 index 7756ff1..0000000 --- a/dist/light/dialog_ok.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_open.svg b/dist/light/dialog_open.svg deleted file mode 100644 index 65f282d..0000000 --- a/dist/light/dialog_open.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_reset.svg b/dist/light/dialog_reset.svg deleted file mode 100644 index 4af3b6b..0000000 --- a/dist/light/dialog_reset.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/dialog_save.svg b/dist/light/dialog_save.svg deleted file mode 100644 index 346dc52..0000000 --- a/dist/light/dialog_save.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/dist/light/down_arrow.svg b/dist/light/down_arrow.svg deleted file mode 100644 index 213c94a..0000000 --- a/dist/light/down_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/down_arrow_disabled.svg b/dist/light/down_arrow_disabled.svg deleted file mode 100644 index a3ae7e5..0000000 --- a/dist/light/down_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/down_arrow_hover.svg b/dist/light/down_arrow_hover.svg deleted file mode 100644 index 6fa931a..0000000 --- a/dist/light/down_arrow_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/hmovetoolbar.svg b/dist/light/hmovetoolbar.svg deleted file mode 100644 index 87e684f..0000000 --- a/dist/light/hmovetoolbar.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/light/hseptoolbar.svg b/dist/light/hseptoolbar.svg deleted file mode 100644 index c495226..0000000 --- a/dist/light/hseptoolbar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/light/left_arrow.svg b/dist/light/left_arrow.svg deleted file mode 100644 index fcc49e8..0000000 --- a/dist/light/left_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/left_arrow_disabled.svg b/dist/light/left_arrow_disabled.svg deleted file mode 100644 index e23269e..0000000 --- a/dist/light/left_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/message_critical.svg b/dist/light/message_critical.svg deleted file mode 100644 index 5ab2260..0000000 --- a/dist/light/message_critical.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dist/light/message_information.svg b/dist/light/message_information.svg deleted file mode 100644 index 8c7639b..0000000 --- a/dist/light/message_information.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/dist/light/message_question.svg b/dist/light/message_question.svg deleted file mode 100644 index 8e12e7b..0000000 --- a/dist/light/message_question.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/dist/light/message_warning.svg b/dist/light/message_warning.svg deleted file mode 100644 index 166c159..0000000 --- a/dist/light/message_warning.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/dist/light/radio_checked.svg b/dist/light/radio_checked.svg deleted file mode 100644 index 58dad54..0000000 --- a/dist/light/radio_checked.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/light/radio_checked_disabled.svg b/dist/light/radio_checked_disabled.svg deleted file mode 100644 index 62a922c..0000000 --- a/dist/light/radio_checked_disabled.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/light/radio_unchecked.svg b/dist/light/radio_unchecked.svg deleted file mode 100644 index 2d6ba2e..0000000 --- a/dist/light/radio_unchecked.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/light/radio_unchecked_disabled.svg b/dist/light/radio_unchecked_disabled.svg deleted file mode 100644 index abd1b6e..0000000 --- a/dist/light/radio_unchecked_disabled.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dist/light/right_arrow.svg b/dist/light/right_arrow.svg deleted file mode 100644 index 344441b..0000000 --- a/dist/light/right_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/right_arrow_disabled.svg b/dist/light/right_arrow_disabled.svg deleted file mode 100644 index 2f81873..0000000 --- a/dist/light/right_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/sizegrip.svg b/dist/light/sizegrip.svg deleted file mode 100644 index a0cd535..0000000 --- a/dist/light/sizegrip.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/stylesheet.qss b/dist/light/stylesheet.qss deleted file mode 100644 index c8444d8..0000000 --- a/dist/light/stylesheet.qss +++ /dev/null @@ -1,1962 +0,0 @@ -/* - * BreezeDark stylesheet. - * - * :author: Colin Duquesnoy - * :editor: Alex Huszagh - * :license: MIT, see LICENSE.md - * - * This is originally a fork of QDarkStyleSheet, and is based on Breeze/ - * BreezeDark color scheme, but is in no way affiliated with KDE. - * - * --------------------------------------------------------------------- - * The MIT License (MIT) - * - * Copyright (c) <2013-2014> - * Copyright (c) <2015-2021> - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * --------------------------------------------------------------------- - */ - -/** - * MAIN STYLESHEET - * --------------- - */ - -QToolTip -{ - /* 0.2ex is the smallest value that's not ignored on Windows. */ - border: 0.04em solid #31363b; - background-color: #eff0f1; - alternate-background-color: #eaebec; - color: #31363b; - padding: 0.1em; - opacity: 200; -} - -QWidget -{ - color: #31363b; - background-color: #eff0f1; - selection-background-color: rgba(51, 164, 223, 0.5); - selection-color: #31363b; - background-clip: border; - border-image: none; -} - -QWidget:disabled -{ - color: #b4b4b4; - background-color: #eff0f1; -} - -QWidget:disabled:hover -{ - background-color: #eff0f1; -} - -QCheckBox -{ - spacing: 0.23em; - outline: none; - color: #31363b; - margin-bottom: 0.09em; - opacity: 200; -} - -QCheckBox:disabled -{ - color: #bab9b8; -} - -QGroupBox -{ - /* Need to make sure the groupbox doesn't compress below the title. */ - min-height: 1.2em; - border: 0.04em solid #bab9b8; - border-radius: 0.09em; - /** - * This gives us enough space at the top to ensure we can move the - * title to be inside the guidelines, and the padding at the top - * ensures we have space below the title. - */ - margin-top: 0.5em; - padding-top: 1em; -} - -QGroupBox:focus -{ - border: 0.04em solid #bab9b8; - border-radius: 0.09em; -} - -QGroupBox::title -{ - /* We need to move 0.6em up to be inside the lines, +1em for padding. */ - top: -1.6em; - subcontrol-origin: content; - subcontrol-position: top center; - background: #eff0f1; - padding-left: 0.2em; - padding-right: 0.2em; -} - -QCheckBox::indicator, -QTreeView::indicator -{ - width: 1em; - height: 1em; -} - -QCheckBox::indicator:unchecked, -QCheckBox::indicator:unchecked:focus, -QTreeView::indicator:unchecked, -QTreeView::indicator:unchecked:focus -{ - border-image: url(:/light/checkbox_unchecked_disabled.svg); -} - -QCheckBox::indicator:unchecked:hover, -QCheckBox::indicator:unchecked:pressed, -QTreeView::indicator:unchecked:hover, -QTreeView::indicator:unchecked:pressed, -QGroupBox::indicator:unchecked, -QGroupBox::indicator:unchecked:hover, -QGroupBox::indicator:unchecked:focus, -QGroupBox::indicator:unchecked:pressed -{ - border: none; - border-image: url(:/light/checkbox_unchecked.svg); -} - -QCheckBox::indicator:checked, -QTreeView::indicator:checked, -QGroupBox::indicator:checked -{ - border-image: url(:/light/checkbox_checked.svg); -} - -QCheckBox::indicator:checked:hover, -QCheckBox::indicator:checked:focus, -QCheckBox::indicator:checked:pressed, -QTreeView::indicator:checked:hover, -QTreeView::indicator:checked:focus, -QTreeView::indicator:checked:pressed, -QGroupBox::indicator:checked:hover, -QGroupBox::indicator:checked:focus, -QGroupBox::indicator:checked:pressed -{ - border: none; - border-image: url(:/light/checkbox_checked.svg); -} - -QCheckBox::indicator:indeterminate, -QTreeView::indicator:indeterminate -{ - border-image: url(:/light/checkbox_indeterminate.svg); -} - -QCheckBox::indicator:indeterminate:focus, -QCheckBox::indicator:indeterminate:hover, -QCheckBox::indicator:indeterminate:pressed, -QTreeView::indicator:indeterminate:focus, -QTreeView::indicator:indeterminate:hover, -QTreeView::indicator:indeterminate:pressed -{ - border-image: url(:/light/checkbox_indeterminate.svg); -} - -QCheckBox::indicator:indeterminate:disabled, -QTreeView::indicator:indeterminate:disabled -{ - border-image: url(:/light/checkbox_indeterminate_disabled.svg); -} - -QCheckBox::indicator:checked:disabled, -QTreeView::indicator:checked:disabled, -QGroupBox::indicator:checked:disabled -{ - border-image: url(:/light/checkbox_checked_disabled.svg); -} - -QCheckBox::indicator:unchecked:disabled, -QTreeView::indicator:unchecked:disabled, -QGroupBox::indicator:unchecked:disabled -{ - border-image: url(:/light/checkbox_unchecked_disabled.svg); -} - -QRadioButton -{ - spacing: 0.23em; - outline: none; - color: #31363b; - margin-bottom: 0.09em; -} - -QRadioButton:disabled -{ - color: #bab9b8; -} - -QRadioButton::indicator -{ - width: 1em; - height: 1em; -} - -QRadioButton::indicator:unchecked, -QRadioButton::indicator:unchecked:focus -{ - border-image: url(:/light/radio_unchecked_disabled.svg); -} - -QRadioButton::indicator:unchecked:hover, -QRadioButton::indicator:unchecked:pressed -{ - border: none; - outline: none; - border-image: url(:/light/radio_unchecked.svg); -} - -QRadioButton::indicator:checked -{ - border: none; - outline: none; - border-image: url(:/light/radio_checked.svg); -} - -QRadioButton::indicator:checked:hover, -QRadioButton::indicator:checked:focus, -QRadioButton::indicator:checked:pressed -{ - border: none; - outline: none; - border-image: url(:/light/radio_checked.svg); -} - -QRadioButton::indicator:checked:disabled -{ - outline: none; - border-image: url(:/light/radio_checked_disabled.svg); -} - -QRadioButton::indicator:unchecked:disabled -{ - border-image: url(:/light/radio_unchecked_disabled.svg); -} - -QMenuBar -{ - background-color: #eff0f1; - color: #31363b; -} - -QMenuBar::item -{ - background: transparent; -} - -QMenuBar::item:selected -{ - background: transparent; -} - -QMenuBar::item:disabled -{ - color: #bab9b8; -} - -QMenuBar::item:pressed -{ - background-color: rgba(51, 164, 223, 0.5); - color: #31363b; - margin-bottom: -0.09em; - padding-bottom: 0.09em; -} - -QMenu -{ - color: #31363b; - margin: 0.09em; -} - -QMenu::icon -{ - margin: 0.23em; -} - -QMenu::item -{ - /* Add extra padding on the right for the QMenu arrow */ - padding: 0.23em 1.5em 0.23em 1.3em; - border: 0.09em solid transparent; - background: transparent; -} - -QMenu::item:selected -{ - color: #31363b; - background-color: rgba(51, 164, 223, 0.5); -} - -QMenu::item:selected:disabled -{ - background-color: #eff0f1; -} - -QMenu::item:disabled -{ - color: #bab9b8; -} - -QMenu::indicator -{ - width: 1em; - height: 1em; -} - -QMenu::indicator:non-exclusive:unchecked -{ - border-image: url(:/light/checkbox_unchecked_disabled.svg); -} - -QMenu::indicator:non-exclusive:unchecked:selected -{ - border-image: url(:/light/checkbox_unchecked_disabled.svg); -} - -QMenu::indicator:non-exclusive:checked -{ - border-image: url(:/light/checkbox_checked.svg); -} - -QMenu::indicator:non-exclusive:checked:selected -{ - border-image: url(:/light/checkbox_checked.svg); -} - -QMenu::indicator:exclusive:unchecked -{ - border-image: url(:/light/radio_unchecked_disabled.svg); -} - -QMenu::indicator:exclusive:unchecked:selected -{ - border-image: url(:/light/radio_unchecked_disabled.svg); -} - -QMenu::indicator:exclusive:checked -{ - border-image: url(:/light/radio_checked.svg); -} - -QMenu::indicator:exclusive:checked:selected -{ - border-image: url(:/light/radio_checked.svg); -} - -QMenu::right-arrow -{ - margin: 0.23em; - border-image: url(:/light/right_arrow.svg); - width: 0.5em; - height: 0.8em; -} - -QMenu::right-arrow:disabled -{ - border-image: url(:/light/right_arrow_disabled.svg); -} - -QAbstractItemView -{ - alternate-background-color: #eff0f1; - color: #31363b; - border: 0.09em solid #bab9b8; - border-radius: 0.09em; -} - -QMenuBar::item:focus:!disabled -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); -} - -QTabWidget:focus, -QCheckBox:focus, -QRadioButton:focus, -QSlider:focus -{ - border: none; -} - -QLineEdit -{ - background-color: #eff0f1; - padding: 0.23em; - border-style: solid; - border: 0.04em solid #bab9b8; - border-radius: 0.09em; - color: #31363b; -} - -QAbstractScrollArea -{ - border-radius: 0.09em; - border: 0.09em solid #bab9b8; - background-color: transparent; -} - -/** - * This is the background for the box in the bottom-right corner - * whene both scrollbars are active. - */ -QAbstractScrollArea::corner -{ - background: #eff0f1; -} - -/** - * Can't do the KDE style of where the scrollbar handle - * becomes light on the hover, and only when the handle - * is hovered does it become stylized. This is because - * both the handle and the background events are treated - * together. - */ -QScrollBar:horizontal -{ - background-color: #eff0f1; - height: 0.65em; - margin: 0.13em 0.65em 0.13em 0.65em; - border: 0.04em transparent #eff0f1; - border-radius: 0.17em; -} - -QScrollBar:horizontal:hover -{ - background-color: #c7c7c6; -} - -QScrollBar::handle:horizontal -{ - background-color: rgba(51, 164, 223, 0.8); - border: 0.04em solid rgba(51, 164, 223, 0.8); - min-width: 0.5em; - border-radius: 0.17em; -} - -QScrollBar::handle:horizontal:hover -{ - background-color: rgba(51, 164, 223, 0.8); - border: 0.04em solid rgba(51, 164, 223, 0.8); -} - -QScrollBar::add-line:horizontal -{ - margin: 0em 0.13em 0em 0.13em; - border-image: url(:/light/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: right; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:horizontal -{ - margin: 0em 0.13em 0em 0.13em; - border-image: url(:/light/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: left; - subcontrol-origin: margin; -} - -QScrollBar::add-line:horizontal:hover, -QScrollBar::add-line:horizontal:on -{ - border-image: url(:/light/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: right; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:horizontal:hover, -QScrollBar::sub-line:horizontal:on -{ - border-image: url(:/light/transparent.svg); - width: 0.41em; - height: 0.41em; - subcontrol-position: left; - subcontrol-origin: margin; -} - -QScrollBar::up-arrow:horizontal, -QScrollBar::down-arrow:horizontal -{ - background: none; -} - -QScrollBar::add-page:horizontal, -QScrollBar::sub-page:horizontal -{ - background: none; -} - -QScrollBar:vertical -{ - background-color: #eff0f1; - width: 0.65em; - margin: 0.65em 0.13em 0.65em 0.13em; - border: 0.04em transparent #eff0f1; - border-radius: 0.17em; -} - -QScrollBar:vertical:hover -{ - background-color: #c7c7c6; -} - -QScrollBar::handle:vertical -{ - background-color: rgba(51, 164, 223, 0.8); - border: 0.04em solid rgba(51, 164, 223, 0.8); - min-height: 0.5em; - border-radius: 0.17em; -} - -QScrollBar::handle:vertical:hover -{ - background-color: rgba(51, 164, 223, 0.8); - border: 0.04em solid rgba(51, 164, 223, 0.8); -} - -QScrollBar::sub-line:vertical -{ - margin: 0.13em 0em 0.13em 0em; - border-image: url(:/light/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: top; - subcontrol-origin: margin; -} - -QScrollBar::add-line:vertical -{ - margin: 0.13em 0em 0.13em 0em; - border-image: url(:/light/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: bottom; - subcontrol-origin: margin; -} - -QScrollBar::sub-line:vertical:hover, -QScrollBar::sub-line:vertical:on -{ - border-image: url(:/light/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: top; - subcontrol-origin: margin; -} - -QScrollBar::add-line:vertical:hover, -QScrollBar::add-line:vertical:on -{ - border-image: url(:/light/transparent.svg); - height: 0.41em; - width: 0.41em; - subcontrol-position: bottom; - subcontrol-origin: margin; -} - -QScrollBar::up-arrow:vertical, -QScrollBar::down-arrow:vertical -{ - background: none; -} - -QScrollBar::add-page:vertical, -QScrollBar::sub-page:vertical -{ - background: none; -} - -QTextEdit -{ - background-color: #eff0f1; - color: #31363b; - border: 0.04em solid #bab9b8; -} - -QPlainTextEdit -{ - background-color: #eff0f1; - color: #31363b; - border-radius: 0.09em; - border: 0.04em solid #bab9b8; -} - -QSizeGrip -{ - border-image: url(:/light/sizegrip.svg); - width: 0.5em; - height: 0.5em; -} - -/** - * Set the separator to be transparent, since the dock has a border. - * On PyQt6, neither the border nor the background seem to be respected. - */ -QMainWindow::separator -{ - border: 0.09em transparent #bab9b8; - background: transparent; -} - -QMenu::separator -{ - height: 0.09em; - background-color: #bab9b8; - padding-left: 0.2em; - margin-top: 0.2em; - margin-bottom: 0.2em; - margin-left: 0.41em; - margin-right: 0.41em; -} - -QFrame[frameShape="2"], /* QFrame::Panel == 0x0003 */ -QFrame[frameShape="3"], /* QFrame::WinPanel == 0x0003 */ -QFrame[frameShape="4"], /* QFrame::HLine == 0x0004 */ -QFrame[frameShape="5"], /* QFrame::VLine == 0x0005 */ -QFrame[frameShape="6"] /* QFrame::StyledPanel == 0x0006 */ -{ - border-width: 0.04em; - padding: 0.09em; - border-style: solid; - border-color: #eff0f1; - background-color: #bab9b8; - border-radius: 0.23em; -} - -/* Provide highlighting for frame objects. */ -QFrame[frameShape="2"]:hover, -QFrame[frameShape="3"]:hover, -QFrame[frameShape="4"]:hover, -QFrame[frameShape="5"]:hover, -QFrame[frameShape="6"]:hover -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); -} - -/* Don't provide an outline if we have a widget that takes up the space. */ -QFrame[frameShape] QAbstractItemView:hover -{ - border: 0em solid black; -} - -/** - * Note: I can't really change the background of the toolbars - * independently, since KDE Breeze has different colors for the - * window bar and the rest of the UI. The top toolbar uses - * the window style, and the rest use the application style, - * which we can't do. - */ -QToolBar -{ - font-weight: bold; -} - -QToolBar:horizontal -{ - background: 0.09em solid #eff0f1; -} - -QToolBar:vertical -{ - background: 0.09em solid #eff0f1; -} - -QToolBar::handle:horizontal -{ - border-image: url(:/light/hmovetoolbar.svg); -} - -QToolBar::handle:vertical -{ - border-image: url(:/light/vmovetoolbar.svg); -} - -QToolBar::separator:horizontal -{ - border-image: url(:/light/hseptoolbar.svg); -} - -QToolBar::separator:vertical -{ - border-image: url(:/light/vseptoolbar.svg); -} - -QToolBar QToolButton -{ - font-weight: bold; - min-height: 1em; - min-width: 2em; - border: 0.04em transparent black; - padding-left: 0.2em; - padding-right: 0.3em; -} - -QToolBar QToolButton:hover -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); -} - -QToolBar QToolButton:pressed -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); - /* The padding doesn't inherit from `QToolBar QToolButton`, so leave it in. */ - padding-left: 0.2em; - padding-right: 0.3em; -} - -QPushButton -{ - color: #31363b; - background-color: #eaebec; - border: 0.04em solid #bab9b8; - padding: 0.23em; - border-radius: 0.09em; - outline: none; - min-height: 1.1em; -} - -QComboBox:open, -QPushButton:open -{ - border-width: 0.04em; - border-color: #bab9b8; -} - -QComboBox:closed, -QPushButton:closed -{ - border-width: 0.04em; - border-color: #bab9b8; -} - -QPushButton:disabled -{ - background-color: #eff0f1; - border-width: 0.04em; - border-color: #bab9b8; - border-style: solid; - padding-top: 0.23em; - padding-bottom: 0.23em; - padding-left: 1ex; - padding-right: 1ex; - border-radius: 0.04em; - color: #b4b4b4; -} - -QPushButton:focus -{ - color: #31363b; -} - -QPushButton:pressed -{ - background-color: #bedfec; - padding-top: -0.65em; - padding-bottom: -0.74em; - color: #31363b; -} - -QComboBox -{ - border: 0.04em solid #bab9b8; - border-radius: 0.09em; - padding: 0.23em; - min-width: 2.5em; -} - -QComboBox:editable -{ - background-color: #eff0f1; -} - -QPushButton:checked -{ - background-color: #c7c7c6; - border: 0.04em solid #bab9b8; - color: #31363b; -} - -QPushButton:hover -{ - background-color: #eaebec; - border: 0.04em solid rgba(51, 164, 223, 0.5); - color: #31363b; -} - -QPushButton:checked:hover -{ - background-color: #c7c7c6; - border: 0.04em solid rgba(51, 164, 223, 0.5); - color: #31363b; -} - -QComboBox:hover, -QComboBox:focus, -QAbstractSpinBox:hover, -QAbstractSpinBox:focus, -QLineEdit:hover, -QLineEdit:focus, -QTextEdit:hover, -QTextEdit:focus, -QPlainTextEdit:hover, -QPlainTextEdit:focus, -QAbstractView:hover, -QTreeView:hover, -QTreeView:focus -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); - color: #31363b; -} - -QComboBox:hover:pressed:!editable, -QPushButton:hover:pressed, -QAbstractSpinBox:hover:pressed, -QLineEdit:hover:pressed, -QTextEdit:hover:pressed, -QPlainTextEdit:hover:pressed, -QAbstractView:hover:pressed, -QTreeView:hover:pressed -{ - background-color: #eff0f1; -} - -QComboBox:hover:pressed:editable -{ - background-color: #eff0f1; -} - -QComboBox QAbstractItemView -{ - /* This happens for the drop-down menu always, whether editable or not.*/ - background-color: #eff0f1; - selection-background-color: rgba(45, 147, 200, 0.5); - outline-color: 0em; - border-radius: 0.09em; -} - -QComboBox::drop-down -{ - subcontrol-origin: padding; - subcontrol-position: top right; - width: 0.65em; - - border-left-width: 0em; - border-left-style: solid; - border-top-right-radius: 0.13em; - border-bottom-right-radius: 0.13em; -} - -QComboBox::down-arrow -{ - border-image: url(:/light/down_arrow_disabled.svg); - width: 0.8em; - height: 0.5em; - margin-right: 0.41em; -} - -QComboBox::down-arrow:on, -QComboBox::down-arrow:hover, -QComboBox::down-arrow:focus -{ - border-image: url(:/light/down_arrow.svg); - width: 0.8em; - height: 0.5em; - margin-right: 0.41em; -} - -QAbstractSpinBox -{ - padding: 0.23em; - border: 0.09em solid #bab9b8; - background-color: #eff0f1; - color: #31363b; - border-radius: 0.09em; - min-width: 3em; - min-height: 1em; -} - -QAbstractSpinBox:hover -{ - border: 0.09em solid rgba(51, 164, 223, 0.5); -} - -QAbstractSpinBox:up-button, -QAbstractSpinBox:up-button:hover -{ - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: center right; - padding-right: 0.1em; - width: 0.8em; - height: 0.5em; -} - -QAbstractSpinBox:down-button, -QAbstractSpinBox:down-button:hover -{ - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: center left; - padding-left: 0.1em; - width: 0.8em; - height: 0.5em; -} - -QAbstractSpinBox::up-arrow -{ - border-image: url(:/light/up_arrow.svg); -} - -QAbstractSpinBox::up-arrow:disabled, -QAbstractSpinBox::up-arrow:off -{ - border-image: url(:/light/up_arrow_disabled.svg); -} - -QAbstractSpinBox::up-arrow:hover -{ - border-image: url(:/light/up_arrow_hover.svg); -} - -QAbstractSpinBox::down-arrow -{ - border-image: url(:/light/down_arrow.svg); -} - -QAbstractSpinBox::down-arrow:disabled, -QAbstractSpinBox::down-arrow:off -{ - border-image: url(:/light/down_arrow_disabled.svg); -} - -QAbstractSpinBox::down-arrow:!off:!disabled:hover -{ - border-image: url(:/light/down_arrow_hover.svg); -} - -QDoubleSpinBox -{ - min-width: 4em; -} - -/** - * `QCalendarWidget QAbstractItemView:enabled` sets the color, background - * color, and selection color for active dates in the view. - * `QCalendarWidget QAbstractItemView:enabled` sets the disabled dates. - */ -QCalendarWidget QAbstractItemView:enabled -{ - color: #31363b; - selection-color: #31363b; - selection-background-color: rgba(51, 164, 223, 0.5); -} - -/* Won't take hover events. */ -QCalendarWidget QToolButton#qt_calendar_nextmonth -{ - border-image: url(:/light/calendar_next.svg); - width: 0.5em; - height: 0.8em; - icon-size: 0px; -} - -QCalendarWidget QToolButton#qt_calendar_prevmonth -{ - border-image: url(:/light/calendar_previous.svg); - width: 0.5em; - height: 0.8em; - icon-size: 0px; -} - -QCalendarWidget QSpinBox -{ - max-height: 1.5em; - min-width: 3.5em; - margin: 0em; - margin-top: 0.2em; - padding: 0em; - outline: 0em; - padding-left: 0.5em; -} - -QLabel -{ - border: 0em solid black; -} - -/* BORDERS */ -QTabWidget::pane -{ - padding: 0.23em; - margin: 0.04em; -} - -QTabWidget::pane:top -{ - border: 0.04em solid #bab9b8; - top: -0.04em; -} - -QTabWidget::pane:bottom -{ - border: 0.04em solid #bab9b8; - bottom: -0.04em; -} - -QTabWidget::pane:left -{ - border: 0.04em solid #bab9b8; - left: -0.04em; -} - -QTabWidget::pane:right -{ - border: 0.04em solid #bab9b8; - right: -0.04em; -} - -QTabBar -{ - qproperty-drawBase: 0; - left: 0.23em; - border-radius: 0.13em; - /** - * Note: this is the underline for each tab title. It's not - * documented, and this took forever to track down. At least - * 10 hours have been wasted trying to turn off this line, - * do not deleted this comment. - */ - selection-color: transparent; -} - -QTabBar:focus -{ - border: 0em transparent black; -} - -QTabBar::close-button -{ - /* Doesn't seem possible to resize these buttons */ - border-image: url(:/light/transparent.svg); - image: url(:/light/close.svg); - background: transparent; -} - -QTabBar::close-button:hover -{ - image: url(:/light/close_hover.svg); -} - -QTabBar::close-button:pressed -{ - image: url(:/light/close_pressed.svg); -} - -/* TOP TABS */ -QTabBar::tab:top, -QTabBar::tab:top:last, -QTabBar::tab:top:only-one -{ - color: #31363b; - border: 0.04em transparent black; - border-left: 0.04em solid #bab9b8; - border-right: 0.04em solid #bab9b8; - border-top: 0.09em solid rgba(51, 164, 223, 0.5); - background-color: #eff0f1; - padding: 0.23em; - min-width: 50px; - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:!selected -{ - color: #31363b; - background-color: #d9d8d7; - border: 0.04em transparent black; - border-right: 0.04em solid #bab9b8; - border-bottom: 0.04em solid #bab9b8; - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:next-selected -{ - border-right: 0.04em transparent #d9d8d7; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:top:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-bottom-left-radius: 0em; - border-bottom-right-radius: 0em; -} - -/* BOTTOM TABS */ -QTabBar::tab:bottom, -QTabBar::tab:bottom:last, -QTabBar::tab:bottom:only-one -{ - color: #31363b; - border: 0.04em transparent black; - border-left: 0.04em solid #bab9b8; - border-right: 0.04em solid #bab9b8; - border-bottom: 0.09em solid rgba(51, 164, 223, 0.5); - background-color: #eff0f1; - padding: 0.23em; - min-width: 50px; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:!selected -{ - color: #31363b; - background-color: #d9d8d7; - border: 0.04em transparent black; - border-top: 0.04em solid #bab9b8; - border-right: 0.04em solid #bab9b8; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:next-selected -{ - border-right: 0.04em transparent #d9d8d7; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -QTabBar::tab:bottom:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-top-right-radius: 0em; -} - -/* LEFT TABS */ -QTabBar::tab:left, -QTabBar::tab:left:last, -QTabBar::tab:left:only-one -{ - color: #31363b; - border: 0.04em transparent black; - border-top: 0.09em solid rgba(51, 164, 223, 0.5); - border-bottom: 0.04em solid #bab9b8; - border-left: 0.04em solid #bab9b8; - background-color: #eff0f1; - padding: 0.23em; - min-height: 50px; - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:!selected -{ - color: #31363b; - background-color: #d9d8d7; - border: 0.04em transparent black; - border-top: 0.04em solid #bab9b8; - border-right: 0.04em solid #bab9b8; - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:previous-selected -{ - border-top: 0.04em transparent #d9d8d7; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -QTabBar::tab:left:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-top-right-radius: 0em; - border-bottom-right-radius: 0em; -} - -/* RIGHT TABS */ -QTabBar::tab:right, -QTabBar::tab:right:last, -QTabBar::tab:right:only-one -{ - color: #31363b; - border: 0.04em transparent black; - border-top: 0.09em solid rgba(51, 164, 223, 0.5); - border-bottom: 0.04em solid #bab9b8; - border-right: 0.04em solid #bab9b8; - background-color: #eff0f1; - padding: 0.23em; - min-height: 50px; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:!selected -{ - color: #31363b; - background-color: #d9d8d7; - border: 0.04em transparent black; - border-top: 0.04em solid #bab9b8; - border-left: 0.04em solid #bab9b8; - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:previous-selected -{ - border-top: 0.04em transparent #d9d8d7; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar::tab:right:!selected:first:hover -{ - background-color: rgba(61, 173, 232, 0.2); - border-radius: 0.09em; - border-top-left-radius: 0em; - border-bottom-left-radius: 0em; -} - -QTabBar QToolButton::right-arrow:enabled -{ - border-image: url(:/light/right_arrow.svg); - width: 0.5em; - height: 0.8em; -} - -QTabBar QToolButton::left-arrow:enabled -{ - border-image: url(:/light/left_arrow.svg); - width: 0.5em; - height: 0.8em; -} - -QTabBar QToolButton::right-arrow:disabled -{ - border-image: url(:/light/right_arrow_disabled.svg); - width: 0.5em; - height: 0.8em; -} - -QTabBar QToolButton::left-arrow:disabled -{ - border-image: url(:/light/left_arrow_disabled.svg); - width: 0.5em; - height: 0.8em; -} - -QDockWidget -{ - background: #eaebec; - /** - * It doesn't seem possible to change the border of the - * QDockWidget without changing the content margins. - */ - /** - * This is a bug fix so we can handle hover, pressed, and other events. - * Reference: https://stackoverflow.com/questions/32145080/qdockwidget-float-close-button-hover-images - */ - titlebar-close-icon: url(:/light/transparent.svg); - titlebar-normal-icon: url(:/light/transparent.svg); -} - -/** - * Don't style the title, since it gives a weird, missing border - * around the rest of the dock widget, which the remaining border - * cannot be removed. - * - * There is a bug in Qt6, where the icons are small. It doesn't - * change if we use `image` instead of `border-image`, nor if we - * use `qproperty-icon`, etc. The icon seem to be half the size - * of our desired values. - */ -QDockWidget::close-button, -QDockWidget::float-button -{ - border: 0.04em solid transparent; - border-radius: 0.09em; - background: transparent; - /* Maximum icon size for buttons */ - icon-size: 14px; -} - -QDockWidget::float-button -{ - border-image: url(:/light/transparent.svg); - image: url(:/light/undock.svg); -} - -QDockWidget::float-button:hover -{ - image: url(:/light/undock_hover.svg); -} - -/* The :pressed events don't register, seems to be a Qt bug. */ -QDockWidget::float-button:pressed -{ - image: url(:/light/undock_hover.svg); -} - -QDockWidget::close-button -{ - border-image: url(:/light/transparent.svg); - image: url(:/light/close.svg); -} - -QDockWidget::close-button:hover -{ - image: url(:/light/close_hover.svg); -} - -/* The :pressed events don't register, seems to be a Qt bug. */ -QDockWidget::close-button:pressed -{ - image: url(:/light/close_pressed.svg); -} - -QTreeView, -QListView -{ - background-color: #eff0f1; - border: 0em solid black; -} - -QTreeView:selected, -QTreeView:!selected, -QListView:selected, -QListView:!selected -{ - border: 0em solid black; -} - -QTreeView::branch:has-siblings -{ - border-image: url(:/light/vline.svg); - image: none; -} - -/* These branch indicators don't scale */ -TreeView::branch:!has-siblings -{ - border-image: none; - image: none; -} - -QTreeView::branch:has-siblings:adjoins-item -{ - border-image: url(:/light/branch_more.svg); -} - -QTreeView::branch:!has-children:!has-siblings:adjoins-item -{ - border-image: url(:/light/branch_end.svg); -} - -QTreeView::branch:has-children:!has-siblings:closed, -QTreeView::branch:closed:has-children:has-siblings -{ - image: url(:/light/branch_closed.svg); -} - -QTreeView::branch:has-children:!has-siblings:closed:hover, -QTreeView::branch:closed:has-children:has-siblings:hover -{ - image: url(:/light/branch_closed_hover.svg); -} - -QTreeView::branch:has-children:!has-siblings:closed, -QTreeView::branch:open:has-children:!has-siblings -{ - border-image: url(:/light/branch_end_arrow.svg); -} - -QTreeView::branch:closed:has-children:has-siblings, -QTreeView::branch:open:has-children:has-siblings -{ - border-image: url(:/light/branch_more_arrow.svg); -} - -QTreeView::branch:open:has-children:!has-siblings, -QTreeView::branch:open:has-children:has-siblings -{ - image: url(:/light/branch_open.svg); -} - -QTreeView::branch:open:has-children:!has-siblings:hover, -QTreeView::branch:open:has-children:has-siblings:hover -{ - image: url(:/light/branch_open_hover.svg); -} - -QListView -{ - /* Give space for elements aligned left or right. */ - padding: 0.2em; -} - -QTableView::item, -QListView::item, -QTreeView::item -{ - padding: 0.13em; - color: #31363b; -} - -QTableView::item:!selected:hover, -QListView::item:!selected:hover, -QTreeView::item:!selected:hover -{ - background-color: rgba(61, 173, 232, 0.2); - outline: 0; - color: #31363b; - padding: 0.13em; -} - -QSlider::handle:horizontal, -QSlider::handle:vertical -{ - background: #eff0f1; - border: 0.04em solid rgba(106, 105, 105, 0.7); - width: 0.7em; - height: 0.7em; - border-radius: 0.35em; -} - -QSlider:horizontal -{ - height: 2em; -} - -QSlider:vertical -{ - width: 2em; -} - -QSlider::handle:horizontal -{ - margin: -0.23em 0; -} - -QSlider::handle:vertical -{ - margin: 0 -0.23em; -} - -QSlider::groove:horizontal, -QSlider::groove:vertical -{ - background: #d9d8d7; - border: 0em solid #eff0f1; - border-radius: 0.19em; -} - -QSlider::groove:horizontal -{ - height: 0.4em; -} - -QSlider::groove:vertical -{ - width: 0.4em; -} - -QSlider::handle:horizontal:hover, -QSlider::handle:horizontal:focus, -QSlider::handle:vertical:hover, -QSlider::handle:vertical:focus -{ - border: 0.04em solid #3daef3; -} - -QSlider::handle:horizontal:!focus:!hover, -QSlider::handle:vertical:!focus:!hover -{ - border: 0.04em solid rgba(106, 105, 105, 0.7); -} - -QSlider::sub-page:horizontal, -QSlider::add-page:vertical -{ - background: #3daef3; - border-radius: 0.19em; -} - -QSlider::add-page:horizontal, -QSlider::sub-page:vertical -{ - background: rgba(106, 105, 105, 0.7); - border-radius: 0.19em; -} - -QToolButton -{ - background-color: transparent; - border: 0.04em solid #bab9b8; - border-radius: 0.09em; - margin: 0.23em; - padding: 0.23em; - padding-top: 0.1em; - padding-right: 1.2em; - min-height: 1.1em; -} - -QToolButton::right-arrow, -QToolButton::left-arrow, -QToolButton::up-arrow, -QToolButton::down-arrow -{ - /* Undo the padding when we have an arrow */ - padding-right: -1.2em; -} - -QToolButton::right-arrow -{ - image: url(:/light/right_arrow.svg); -} - -QToolButton::left-arrow -{ - image: url(:/light/left_arrow.svg); -} - -QToolButton::up-arrow -{ - image: url(:/light/up_arrow.svg); -} - -QToolButton::down-arrow -{ - image: url(:/light/down_arrow.svg); -} - -QToolButton:hover -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); -} - -QToolButton::menu-indicator -{ - border-image: none; - image: url(:/light/down_arrow.svg); - width: 0.8em; - height: 0.5em; - top: -0.7ex; - left: -0.09em; - padding-right: 0.09em; -} - -QToolButton::menu-arrow -{ - border-image: none; - image: url(:/light/down_arrow.svg); - width: 0.8em; - height: 0.5em; - subcontrol-position: bottom right; -} - -QToolButton::menu-button -{ - border-top-right-radius: 0.5em; - border-bottom-right-radius: 0.5em; - /* 1ex width + 0.4ex for border + no text = 2ex allocated above */ - width: 1.3em; - padding: 0.23em; - outline: none; -} - -QToolButton::menu-button::menu-arrow -{ - left: -0.09em; - subcontrol-position: bottom right; -} - -QToolButton::menu-button:hover -{ - background-color: transparent; -} - -QToolButton:checked, -QToolButton:pressed -{ - background-color: rgba(51, 164, 223, 0.5); - padding: 0.23em; - padding-right: 1.2em; - min-height: 1.3em; - outline: none; -} - -QToolButton::menu-button:pressed -{ - background-color: transparent; - padding: 0.23em; - outline: none; -} - -QTableView -{ - border: 0em solid black; - gridline-color: #bab9b8; - background-color: #eff0f1; -} - -QTableView:!selected, -QTableView:selected -{ - border: 0em solid black; -} - -QTableView -{ - border-radius: 0em; -} - -QAbstractItemView::item -{ - color: #31363b; -} - -QAbstractItemView::item:pressed -{ - background: rgba(45, 147, 200, 0.5); - color: #31363b; -} - -QAbstractItemView::item:selected:!active -{ - background: rgba(61, 173, 232, 0.2); -} - -/* Use background with qlineargradient to avoid ugly border on widget. */ -QAbstractItemView::item:selected:active -{ - background: qlineargradient( - x1: 0.5, y1: 0.5 - x2: 0.5, y2: 1, - stop: 0 rgba(45, 147, 200, 0.5), - stop: 1 rgba(45, 147, 200, 0.5) - ); - color: #31363b; -} - -QAbstractItemView::item:selected:hover -{ - background: qlineargradient( - x1: 0.5, y1: 0.5 - x2: 0.5, y2: 1, - stop: 0 rgba(71, 184, 243, 0.6), - stop: 1 rgba(71, 184, 243, 0.6) - ); - color: #31363b; -} - -QHeaderView -{ - background-color: #eff0f1; - border: 0.04em transparent; - border-radius: 0em; - margin: 0em; - padding: 0em; -} - -QHeaderView::section -{ - background-color: #eff0f1; - border: 0.04em solid #bab9b8; - color: #31363b; - padding: 0.23em; - padding-top: 0.3em; - border-radius: 0em; - text-align: center; -} - -QHeaderView::section::vertical::first, -QHeaderView::section::vertical::only-one -{ - border-top: 0.04em solid #bab9b8; -} - -QHeaderView::section::vertical -{ - border-top: transparent; -} - -QHeaderView::section::horizontal::first, -QHeaderView::section::horizontal::only-one -{ - border-left: 0.04em solid #bab9b8; -} - -QHeaderView::section::horizontal -{ - border-left: transparent; -} - -QHeaderView::section:checked -{ - color: #272b2f; - background-color: #b9dae7; -} - -/* Note that this doesn't work for QTreeView unless the header is clickable */ -QHeaderView::section:hover, -QHeaderView::section::horizontal::first:hover, -QHeaderView::section::horizontal::only-one:hover, -QHeaderView::section::vertical::first:hover, -QHeaderView::section::vertical::only-one:hover -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); -} - -QHeaderView::down-arrow -{ - image: url(:/light/down_arrow.svg); - subcontrol-origin: margin; - subcontrol-position: top center; - padding-top: 0.2em; - width: 0.8em; - height: 0.5em; -} - -QHeaderView::up-arrow -{ - image: url(:/light/up_arrow.svg); - subcontrol-origin: margin; - subcontrol-position: top center; - padding-top: 0.2em; - width: 0.8em; - height: 0.5em; -} - -QTableView QTableCornerButton::section -{ - background-color: #eff0f1; - border: 0.04em transparent #bab9b8; - border-top: 0.04em solid #bab9b8; - border-left: 0.04em solid #bab9b8; - border-radius: 0em; -} - -/* No hover event */ -QTableView QTableCornerButton:hover -{ - border: 0.04em transparent #bab9b8; -} - -QTableView QTableCornerButton::section:pressed -{ - border: 0.04em solid rgba(51, 164, 223, 0.5); - border-radius: 0em; -} - -QToolBox -{ - padding: 0.23em; - border: 0.09em transparent black; -} - -QToolBox::tab -{ - border-bottom: 0.09em solid #bab9b8; - margin-left: 1.5em; -} - -QToolBox::tab:selected, -QToolBox::tab:hover -{ - border-bottom: 0.09em solid rgba(51, 164, 223, 0.5); -} - -QSplitter::handle -{ - border: 0.09em solid #d9d8d7; - background: -0.5em solid #d9d8d7; - max-width: 0em; - max-height: 0em; -} - -/** - * It's not possible to get satisfactory rounded borders here. - * If you set the border to be negative, while adjusting the - * widths, you get an asymmetrical curve which produces an - * unappealing border. - */ -QProgressBar:horizontal, -QProgressBar:vertical -{ - background-color: rgba(106, 105, 105, 0.7); - border: 0.9em solid #FFFFFF; - border-radius: 0.13em; - padding: 0em; -} - -QProgressBar:horizontal -{ - height: 0.2em; - min-width: 6em; - text-align: right; - padding-left: -0.03em; - padding-right: -0.03em; - margin-top: 0.2em; - margin-bottom: 0.2em; - margin-right: 1.3em; -} - -QProgressBar:vertical -{ - width: 0.2em; - min-height: 6em; - text-align: bottom; - padding-top: -0.03em; - padding-bottom: -0.03em; - margin-left: 0.2em; - margin-right: 0.2em; - margin-bottom: 0.41em; -} -QProgressBar::chunk:horizontal, -QProgressBar::chunk:vertical -{ - background-color: #3daef3; - border: 0.9em transparent; - border-radius: 0.08em; -} - -QScrollArea, -QScrollArea:focus, -QScrollArea:hover -{ - border: 0em solid black; -} - -/* ICONS */ -/** - * Qt's built-in icons can look pretty bad if the system theme - * is a different color than the current one. For example, when - * using a dark theme, with a light UI, the `Ok` button is greyed - * out for an about dialog. - * - * QDialogButtonBox will apply for all standard buttons in all standard - * widgets, such as QMessageBox, etc. However, we do need to override - * standard icons elsewhere. - * - * The rest of the icons make little sense to implement: - * Qt uses native window decorations. - * Qt normally uses native file dialogs, which look nicer. - * Media controls are used in custom widgets, which aren't standard. - */ -QDialogButtonBox -{ - dialogbuttonbox-buttons-have-icons: true; - - dialog-cancel-icon: url(:/light/dialog_cancel.svg); - dialog-close-icon: url(:/light/dialog_close.svg); - dialog-ok-icon: url(:/light/dialog_ok.svg); - dialog-open-icon: url(:/light/dialog_open.svg); - dialog-reset-icon: url(:/light/dialog_reset.svg); - dialog-save-icon: url(:/light/dialog_save.svg); - /** - * No support yet for overriding saveall. - * dialog-saveall-icon: url(:/light/dialog_saveall.svg); - */ - dialog-yes-icon: url(:/light/dialog_ok.svg); - dialog-help-icon: url(:/light/dialog_help.svg); - dialog-no-icon: url(:/light/dialog_no.svg); - dialog-apply-icon: url(:/light/dialog_ok.svg); - dialog-discard-icon: url(:/light/dialog_discard.svg); -} - -QMessageBox -{ - messagebox-critical-icon: url(:/light/message_critical.svg); - messagebox-information-icon: url(:/light/message_information.svg); - messagebox-question-icon: url(:/light/message_question.svg); - messagebox-warning-icon: url(:/light/message_warning.svg); -} - -/* Set some styles for these custom dialog buttons */ -QDialogButtonBox QPushButton, -QMessageBox QPushButton -{ - min-height: 1.1em; - min-width: 5em; -} diff --git a/dist/light/transparent.svg b/dist/light/transparent.svg deleted file mode 100644 index 3a8ca5c..0000000 --- a/dist/light/transparent.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dist/light/undock.svg b/dist/light/undock.svg deleted file mode 100644 index 886196c..0000000 --- a/dist/light/undock.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/undock_hover.svg b/dist/light/undock_hover.svg deleted file mode 100644 index 3a031ba..0000000 --- a/dist/light/undock_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/undock_hover_pressed.svg b/dist/light/undock_hover_pressed.svg deleted file mode 100644 index c39c8ad..0000000 --- a/dist/light/undock_hover_pressed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/up_arrow.svg b/dist/light/up_arrow.svg deleted file mode 100644 index 4f65d32..0000000 --- a/dist/light/up_arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/up_arrow_disabled.svg b/dist/light/up_arrow_disabled.svg deleted file mode 100644 index e409602..0000000 --- a/dist/light/up_arrow_disabled.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/up_arrow_hover.svg b/dist/light/up_arrow_hover.svg deleted file mode 100644 index 4a33aac..0000000 --- a/dist/light/up_arrow_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/vline.svg b/dist/light/vline.svg deleted file mode 100644 index 5d35af3..0000000 --- a/dist/light/vline.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/dist/light/vmovetoolbar.svg b/dist/light/vmovetoolbar.svg deleted file mode 100644 index b714234..0000000 --- a/dist/light/vmovetoolbar.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/dist/light/vseptoolbar.svg b/dist/light/vseptoolbar.svg deleted file mode 100644 index 1510cdf..0000000 --- a/dist/light/vseptoolbar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/iDeLUCS.egg-info/PKG-INFO b/iDeLUCS.egg-info/PKG-INFO new file mode 100644 index 0000000..4cea78c --- /dev/null +++ b/iDeLUCS.egg-info/PKG-INFO @@ -0,0 +1,14 @@ +Metadata-Version: 2.1 +Name: iDeLUCS +Version: 0.0.3 +Summary: iDeLUCS Python package +Author: Pablo Millana +Author-email: pmillana@uwaterloo.ca +Keywords: python,clustering,sequences,latent representations +Classifier: Intended Audience :: Education +Classifier: Programming Language :: Python :: 3 +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +License-File: LICENCE.md + +Unsupervised clustering of sequences using latent representations diff --git a/iDeLUCS.egg-info/SOURCES.txt b/iDeLUCS.egg-info/SOURCES.txt new file mode 100644 index 0000000..44a655a --- /dev/null +++ b/iDeLUCS.egg-info/SOURCES.txt @@ -0,0 +1,17 @@ +LICENCE.md +README.md +iDeLUCS.py +setup.py +iDeLUCS.egg-info/PKG-INFO +iDeLUCS.egg-info/SOURCES.txt +iDeLUCS.egg-info/dependency_links.txt +iDeLUCS.egg-info/requires.txt +iDeLUCS.egg-info/top_level.txt +idelucs/LossFunctions.py +idelucs/PytorchUtils.py +idelucs/ResNet.py +idelucs/__init__.py +idelucs/kmers_non_cython.py +idelucs/models.py +idelucs/utils.py +idelucs/utils_GUI.py \ No newline at end of file diff --git a/iDeLUCS.egg-info/dependency_links.txt b/iDeLUCS.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/iDeLUCS.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/iDeLUCS.egg-info/requires.txt b/iDeLUCS.egg-info/requires.txt new file mode 100644 index 0000000..c57e8fc --- /dev/null +++ b/iDeLUCS.egg-info/requires.txt @@ -0,0 +1,10 @@ +numpy +torch +cython +matplotlib +pandas +torchvision +scikit-learn +scipy +umap-learn +tqdm diff --git a/iDeLUCS.egg-info/top_level.txt b/iDeLUCS.egg-info/top_level.txt new file mode 100644 index 0000000..917796b --- /dev/null +++ b/iDeLUCS.egg-info/top_level.txt @@ -0,0 +1,2 @@ +iDeLUCS +idelucs diff --git a/iDeLUCS.py b/iDeLUCS.py index 5ccd9ca..ec42369 100644 --- a/iDeLUCS.py +++ b/iDeLUCS.py @@ -1,10 +1,10 @@ import pandas as pd import os -from src import models +from idelucs import models import numpy as np import matplotlib.pyplot as plt -from src.utils import SummaryFasta, plot_confusion_matrix, \ +from idelucs.utils import SummaryFasta, plot_confusion_matrix, \ label_features, compute_results, generate_csv_mapping import argparse diff --git a/src/LossFunctions.py b/idelucs/LossFunctions.py similarity index 100% rename from src/LossFunctions.py rename to idelucs/LossFunctions.py diff --git a/src/PytorchUtils.py b/idelucs/PytorchUtils.py similarity index 100% rename from src/PytorchUtils.py rename to idelucs/PytorchUtils.py diff --git a/src/ResNet.py b/idelucs/ResNet.py similarity index 100% rename from src/ResNet.py rename to idelucs/ResNet.py diff --git a/idelucs/__init__.py b/idelucs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/kmers.pyx b/idelucs/kmers.pyx similarity index 100% rename from src/kmers.pyx rename to idelucs/kmers.pyx diff --git a/idelucs/kmers_non_cython.py b/idelucs/kmers_non_cython.py new file mode 100644 index 0000000..c7f55f6 --- /dev/null +++ b/idelucs/kmers_non_cython.py @@ -0,0 +1,49 @@ +def kmer_counts(seq, k, counts): + + """ + Adapted from VAMB: https://github.com/RasmussenLab/vamb + + seq is expected to be np.uint8 of bytevalues of the contig. + Only values 64, 67, 71, 84 (A, C, G, T) are accepted, all + others are skipped. The counts vector is expected to be an + array of 4^k 32-bit integers. + """ + + k_mer = 0 + bp, bp_code, i = 0, 0, 0 + countdown = k-1 + contiglength = len(seq) + size = (1 << (2 * k)) - 1 + + encoding = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + + + + for i in range(contiglength): + bp = seq[i] + bp_code = encoding[bp] + + if bp_code == 4: + countdown = k + + k_mer = ((k_mer << 2) | bp_code) & size + + if countdown == 0: + counts[k_mer] += 1 + else: + countdown -= 1 \ No newline at end of file diff --git a/src/models.py b/idelucs/models.py similarity index 97% rename from src/models.py rename to idelucs/models.py index f19255b..8176669 100644 --- a/src/models.py +++ b/idelucs/models.py @@ -8,12 +8,12 @@ sys.path.append('src/') sys.path.append('../src/') -from LossFunctions import IID_loss, info_nce_loss +from idelucs.LossFunctions import IID_loss, info_nce_loss from torch.utils.data import DataLoader -from PytorchUtils import NetLinear, myNet -from ResNet import ResNet18, ConvNet +from idelucs.PytorchUtils import NetLinear, myNet +from idelucs.ResNet import ResNet18, ConvNet -from utils import SequenceDataset, create_dataloader +from idelucs.utils import SequenceDataset, create_dataloader # Random Seeds for reproducibility. torch.manual_seed(0) diff --git a/src/utils.py b/idelucs/utils.py similarity index 99% rename from src/utils.py rename to idelucs/utils.py index 0bc01b7..c7fc513 100644 --- a/src/utils.py +++ b/idelucs/utils.py @@ -3,7 +3,8 @@ import pyximport pyximport.install() -from kmers import kmer_counts, cgr +# from kmers import kmer_counts +from idelucs.kmers_non_cython import kmer_counts import random, itertools import numpy as np diff --git a/src/utils_GUI.py b/idelucs/utils_GUI.py similarity index 100% rename from src/utils_GUI.py rename to idelucs/utils_GUI.py diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..ce3e08b --- /dev/null +++ b/setup.py @@ -0,0 +1,39 @@ +from setuptools import setup, find_packages + +VERSION = '0.0.3' +DESCRIPTION = 'iDeLUCS Python package' +LONG_DESCRIPTION = 'Unsupervised clustering of sequences using latent representations' + +# Setting up +setup( + # the name must match the folder name 'verysimplemodule' + name="iDeLUCS", + version=VERSION, + author="Pablo Millana", + author_email="pmillana@uwaterloo.ca", + description=DESCRIPTION, + long_description=LONG_DESCRIPTION, + packages=find_packages(), + install_requires=[ + "numpy", + "torch", + "cython", + "matplotlib", + "pandas", + "torchvision", + "scikit-learn", + "scipy", + "umap-learn", + "tqdm" + ], # add any additional packages that + # needs to be installed along with your package. Eg: 'caer' + + keywords=['python', 'clustering', 'sequences', 'latent representations'], + py_modules=["iDeLUCS"], + classifiers= [ + "Intended Audience :: Education", + "Programming Language :: Python :: 3", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows", + ] +) \ No newline at end of file diff --git a/test_fcgr_rep.py b/test_fcgr_rep.py index 4c8d19b..77ebd34 100644 --- a/test_fcgr_rep.py +++ b/test_fcgr_rep.py @@ -1,7 +1,7 @@ import pyximport pyximport.install() -from src.kmers import kmer_counts, cgr +from idelucs.kmers import kmer_counts, cgr import numpy as np test_seq = bytearray("AACAAACTTTTTTAACTCAACTCCCCTATTGAATGTACCCCCCCCTTCCCCCCCAGGGGGGGTATACTATGCATAATCGTGCATACATTTATATTCCACATATATTATGGTACCAGTACTATATACTATAATCGTACTAAACCCATTACATGTATACGGACATTACACCACAGCCCCATTCCTCCCAATGTACACTCCATGCACTGCCCCAAGACCAGAACCACTACTTCCCCTTCACCTGCTAACCAACCCTCAAGTCACCATACTATGAATGGTTACAGGACATACATGCAATACCAGGCACTTCCCCATTTGGTTATGCTCGACGTACCAGATGGATTTATTGATCGTACACCTCACGAGAGATCAGCAACCCCTGCCCGTAATGTACTTTATGACTAGCTTCAGGCCCATTCTTTCCCCCTACACCCCTCGCCCCTCTTGCTCTTTTGCGCCTCTGGTTCCTCGGTCAGGAACATCCCATGCTTAACTCCTGAACTTTCTCACTTTTCACGAAGTCATCTGTGCATTATTCTCCCCTATTTAGTCCGTGATCGCGGCATCTTCTTTCTTCATTGCTGTTGGTTCCTCTTTTTTCTGGGGCTTCTTCACAGGTTGCCCTTCACAGTGCAGGTGCGGAGTGCTATTCAAGTGAAGCCTGGACTACTCCTGCGTTGCGTCCTATTCTAGTACTCTCGTGTCCCTCAATGAGACGGTTTGCGTGTATGGGGAATCATTTTGACACTGATGCACTTTGGATCGCATTTGGTTATGGCTCTTCCACCCCCCCGCTAAATGGGGCTATTTAGTGAATGCTTGTCGGACATATTTTTACGAATTTTCACTTCCTCTATTTTCTCCACAAAACTAGGAGATTCACCACAATTTTTTCTTTAGTTTTTTGTTATTTTTTTTAAAAACATTTTTAAAAAACTAAATTAAACTAAAACTACCGCATAAAAACCCCCAAACCACAAAAACGTTTCGTTTAGTATATATACATTGTTACATTCACCATTTTTATTAGAGAAACTCCACTACTAAACTTTCTTTTCCAAAAACAAAAATTACATTGGACAAAACCCTACAAACAAACATTATTTATATTGATGACAAACAAATGGCTCAATTCTCCTACCTCCAACAGCCTCCATAGCTTAATCCAAAGCATGGCACTGAAGATGCCAAGACGGTACCTATAATACCTGTGGGCAAAAGACTTAGTCCTAACCTTGCTATTGATTTTTGCTAGACATATACATGCAAGTATCCGCACGCCAGTGAGAATGCCCTGACACCTCCAATAAGAATAAAGGAGCAGGTATCAGGCACACCCGAGAGTAGCCCAAGACACCTTGCCTTAGCCACGCCCCCACGGGTATTCAGCAGTAATTAACCTTAAGCAATAAGTGTAAACTTGACTTAGCCATAGCAATTCAGGGTTGGTAAATCTTGTGCCAGCCACCGCGGTCATACAAGAGACCCAAATCAATAGCCACCCGGCGTAAAGAGTGGCCAGATGTTATCCCACTGCCTAAGATCAAAATGCAACTAAGCTGTCATAAGCCCAAGATTCACTTAAGCCCCTTCAAACCATCTTAGCCCCACGACTAATTTTACCCCACGAAAGCCAGGGCACAAACTGGGATTAGATACCCCACTATGCCTGGCCCTAAATCTAGATGCTCAAATACCCATGCATCCGCCCGAGAACTACGAGCACAAACGCTTAAAACTCTAAGGACTTGGCGGTGCCCCAAACCCACCTAGAGGAGCCTGTTCTATAATCGATAGTCCACGATTCACCCAACCACCCCTTGCCAACACAGCCTACATACCGCCGTCGCCAGTCCACCTAAAATGAAAGATCAACAGTGGGCTCAATAGTCCACCACTAACAAGACAGGTCAAGGTATAGCCCATGGGGTGGAAGAAATGGGCTACATTTTCTACCATAGAATAAACGAAAGAGGACGTGAAACCCGTCCTTGGAAGGAGGATTTAGCAGTAAAGCAGGATCATACTCCCCTAAGCCTGCTTTAAGACGGCCCTGGGGCACGTACATACCGCCCGTCACCCTCTTCATAGGCCCCAATATTAATAAATAATACCTGCATCTAAGCCAAAGACGAGGCAAGTCGTAACAAGGTAAGCGTACCGGAAGGTGCGCTTAGACCACCGAGACGTAGCTATAAACCCCAAAGCATTCAGCTTACACCTGAAAGATATCTTCCAGAACAAGATCGTCTTGACTTGCCCTACCTCTAGCCCAACCATCACACTACCTCTCTTCATCAAAAACACATTTCCGCAGCAAACCAAAACATTCTAACCCTCTCTTAGTATAGGCGATAGAAAAGATTTCTGGCGCAATAGAGGTCTAACCGTACCGTAAGGGAAAGATGAAATAATAATGAAAACCAAAAGCAAAAAACAGTAAAGACCAACCCTTGTACCTCTTGCATCATGATTTAGCAAGAACAACCAAGCAAAGTGCACTAAAGTTTGCCCTCCCGAAACCCAAGCGAGCTACCTGAGAGCAGCTAAAATTGAGCAAACCCGTCTCTGTCGCAAAAGAGTGGGGCGACTCTCTGGTAGAGGTGAAAAGCCAACCGAGCTGGGTGATAGCTGGTTGCCTGCCAAATGAATCTAAGTTCCCCCTTAGTCTACTCTCTAAGGATATTCATCTAAACCCCACACATGTCAGGACTAAGAGCAACTCGACGGGGGTACAGCCCCTTCGAAAAAGAATACAATCTCCTCCAGCGGATAATACCCTTTTACCCCTTACCGTGGGCCTTAAAGCAGCCATCAACAAAAGAGTGCGTCAAAGCTCCCCCATCAAAAATCCAAAAACCAATTTGACTCCCTCACCCAAAGCAGGCCAACCTATGAAAATAGAAGGATTAATGCTAAAATGAGTAACTCGGAATTCTCCTCACAGCGCAAACTTACATCAACTTATTATTAACAGCCTAACTTATACCCAAACTCCAACAAGAACACGTATTCAACCTAACCTGTTACACCGACTCAGGAGCGCCCACATAGATGATTAAAATCTGCAAAAGGAACTCGGCAAGCCAAAGACCCGACTGTTTACCAAAAACATAGCCTTTAGCAAACAACAAGTATTAAAGGTGATGCCTGCCCAGTGACCCATAAAGTTTAACGGCCGCGGTATCCTAACCGTGCGAAGGTAGCGCAATCAATTGTCCCATAAATTGAGACTTGTATGAATGGCTAAACGAGGTCTTAACTGTCTCTTGCAGATCATCAGTGAAATTAGTATTCCCGTGCAAAAACGAGAATGTGACCATAAGACGAGAAGACCCTGTGGAACTTAAAAATAACAATCACCTCCTCACCAGCACCCCCCCCCCCCGGGGGGGCCTACCTGTATACAATACCTGATTGACATTTTTCGGTTGGGGCGACCTTGGAGAAAAACAAATCCTCCAAACCTGCAGACCATAACTCTTCACCAAGATTAACCCATCAAAGTACTAATAGTAACTTAGACCCAATATAATTGATCAATGAACCAAGCTACCCCAGGGATAACAGCGCAATCTCCTCCAAGAGCCCATATCGACAAGGAGGTTTACGACCTCGATGTTGGATCAGGACACCCTAATGGTGCAGCCGCTATTAAGGGTTCGTTTGTTCAACGATTAACAGTCCTACGTGATCTGAGTTCAGACCGGAGCAATCCAGGTCGGTTTCTATCTATGAATTAACTCCTCCTAGTACGAAAGGACCGGAGAAGTGGGGTCAATGCCATAAAGTACACCCCAGCTTATAAGCAATGAACTCAGCTCAATTGCCAAAAGCCCCACACACACCTAATTCCTAGAAAAGGAACAGCTAGCGTGGCAGAGCTCGGCAAATGCAAAAGGCTTAAGCCCTTTATCCAGAGGTTCAAATCCTCTCCCTAGCTCCTCCCCCAATATGACCTCATCCTCCCTAATAAGCCTCTTAGCCATAACCTTATCCTATGTACTCCCAATTCTAATCGCCGTGGCCTTCTTAACACTTGTAGAACGAAAAATCCTCAGCTACATACAGGCCCGAAAGGGCCCAAACATCGTGGGCCCTTTTGGTCTACTCCAGCCTGTCGCGGATGGAGTGAAATTGTTCATTAAAGAGCCCATCCGTCCATCCACCTCTTCCCCCTTCCTCTTCACCATAACACCTGTCCTAGCCCTCCTACTAGCCCTCACCATCTGGACGCCCCTCCCACTACCCTTCCCCCTTGCAGACCTGAACCTAGGCCTGCTATTCCTCCTGGCCATGTCAAGTCTAACTGTCTACTCCCTGCTCTGATCCGGATGAGCTTCAAACTCCAAATACGCCCTAATCGGAGCCCTTCGTGCTGTTGCTCAGACAATCTCATATGAAGTTACCCTGGCCATCATCCTTCTATCCACAATTATATTATGCGGGAACTACTCCTTAAGCACTCTAGCCACCACCCAAGAACCCATCTACCTTATTTTTCCCTCATGGCCTCTAGCAATAATATGATTTATTTCTACCCTCGCTGAGACTAACCGTGCCCCATTCGACCTCACAGAAGGAGAATCTGAACTTGTCTCAGGGTTCAACGTTGAATATGCCGCCGGACCATTTGCCCTGTTCTTCCTAGCAGAATACGCTAACATCATGTTAATAAACACGCTAACAACCATCCTATTCCTCAACCCTAGCTTTTTAAGCCTCCCATCCGAACTATTCTCCGTTGCACTAGCTACAAAAACCCTTCTACTCTCATCCTCATTCCTATGGATCCGAGCCTCATACCCACGATTCCGCTATGACCAACTAATGCACCTCCTATGAAAAAACTTCCTACCCCTAACCCTAGCCCTATGTCTATGACACACCAGCATACCAATTAGCTACGCCGGTCTACCCCCAATCTAAGGCAGCGTGCCTGAACATAAAGGATCACTATGATAAAGTGAACATAGAGGTACAATAATCCTCTCGCTTCCTTTTAACTTAGAAAAGTAGGAATCGAACCTACACAAAAGAGATCAAAACTCTTCATACTCCCCTTATATTATTTTCTAGTAGGGTCAGCTAACCAAGCTATCGGGCCCATACCCCGAAAATGATGGTCTAACCCCTTCCCCTACTAATGAACCCTCATGCAAAACTAGCCTTCACCGCAAGTTTACTGCTAGGAACCAGCATTACCATCTCTAGTAACCATTGAATCTTAGCTTGAGCCGGCCTAGAAATCAACACCTTAGCCATCATTCCCCTTATCTCCAAATCTCACCACCCTCGAGCAATTGAAGCAACCATCAAATACTTCCTTACCCAATCAGCCGCATCAGCCTTAATTCTGTTCTCAAGCTTAGCCAATGCCTGATCCACAGGCCAATGAGACATCACACAATTAAACCACCCCACATCCTGCCTAGTACTGACCATAGCAATCGCAATCAAATTAGGACTAGTCCCATTCCACTTCTGATTCCCGGAAGTACTTCAAGGCTCTTCAATAATTACCGCCCTACTACTCTCGACTCTCATAAAACTACCCCCAATCACCCTTCTCCTCATTACATCACAATCCCTTAACCCCCCACTACTCACCCTTCTAGCAATCTCCTCCGCACTAATCGGGGGCTGAATAGGCCTTAACCAGACACAGACACGAAAAATCCTAGCTTTCTCATCCATCTCACACCTAGGCTGAATAATCATTGTTATCACCTACAACCCCCATCTCACCCTCCTCACCTTTACCCTCTATACAGTAATAACAACAACCGTGTTCCTATCCCTCAATCAAATCAAAGTCCTAAAACTGTCAACAATACTCATCTCATGAACAAAAACACCCACACTAAACGCAGCCATAATACTAACACTCCTATCCTTAGCAGGCCTCCCGCCCCTAACAGGCTTCATGCCAAAATGATTCATCATCCAAGAGCTTACTAAGCAAGAAATAACCCCCACAGCCACAATTATCACCATGCTATCACTCTTAGGCCTATTTTTCTACCTCCGCCTCGCATACCATTCAACAATCACACTCCCACCCAACTCATCCAACCACATAAAACTCTGACGAACCAACAAAACACCAAACACCTCTACAGCCATCCTATCCGCCCTATCAACTTCCCTGCTACCTTTGTCTCCCCTAATTATCACCATATTCTAGAAACTTAGGATTAAACCGCCGCCTAAACCAAAGGCCTTCAAAGCCTTAAATAAGAGTTAAACTCTCTTAGTTTCTGCCATGCTAAGACTAACAGGGCATTAACCTGTATCTTCTGAATGCAAACCAGATGCTTTAATTAAGCTAAAGCCTTTATCTAGGCAGATGGGCCTCGATCCCATACAATTCTAGTTAACAGCTAGACGCCACAACCCCTTGGCTTCTGCCTACAAGACCCTGGCACGCTCTTGCGCACATCAATGAGCTTGCAACTCACCATGAACTTCACCACAGGGTCGATAAGAAGAGGAATCAAACCTCTGTAAAAAGGACTACAGCCTAACGCTTCAACACTCAGCCATCTTACCTGTGACCTTCATCAACCGATGATTATTCTCAACTAACCACAAAGATATCGGCACTCTTTATCTAATTTTCGGCACATGAGCAGGCATAGTCGGCACAGCACTTAGCCTGTTAATTCGCGCAGAACTGGGGCAACCAGGAACACTTTTGGGAGACGACCAAATTTACAATGTAATCGTCACAGCCCATGCCTTCGTTATAATTTTCTTCATAGTTATGCCAATCATAATCGGAGGCTTTGGGAACTGACTAGTTCCTCTCATAATTGGTGCCCCAGACATAGCATTCCCACGCATGAACAACATAAGCTTCTGACTTCTTCCTCCCTCTTTTCTTCTCCTACTAGCTTCCTCCACCGTAGAAGCTGGGGCCGGTACTGGATGAACTGTCTATCCCCCCTTAGCCGGAAATCTCGCCCATGCCGGTGCATCAGTAGACCTAGCCATCTTCTCCCTTCATCTCGCAGGTGTATCATCTATTTTAGGGGCTATTAACTTCATCACCACCATTATTAACATAAAACCCCCCGCACTGTCACAGTACCAAACACCCCTATTCGTTTGATCTGTCCTCATTACTGCTATTCTCCTACTACTTTCTCTACCTGTCCTAGCCGCCGGAATTACAATACTACTCACCGACCGCAACCTTAACACTACATTCTTCGACCCTGCAGGGGGAGGGGATCCAATCCTCTACCAACATCTGTTCTGATTCTTCGGCCACCCTGAAGTTTATATTCTCATCCTTCCGGGTTTCGGAATAATCTCTCATGTAGTAGCTTACTACGCAGGGAAAAAAGAACCATTTGGCTACATAGGAATAGTGTGAGCAATACTATCAATCGGATTCTTGGGCTTTATTGTATGGGCCCATCACATATTCACAGTGGGAATAGACGTGGACACCCGAGCTTACTTTACATCTGCCACTATGATCATCGCTATCCCAACCGGTATTAAGGTCTTTAGCTGACTCGCAACCTTACATGGAGGGACAATCAAATGAGATCCGCCCATGCTATGAGCCTTAGGATTCATCTTCTTATTTACTATCGGAGGCTTAACAGGAATTGTCCTAGCCAACTCATCGCTAGATATTGCCCTCCACGATACCTACTACGTAGTTGCCCACTTCCACTATGTTCTCTCAATAGGGGCAGTTTTCGCCATTCTAGCAGGATTCACTCACTGATTCCCCCTTTTCACAGGCTTCACTCTCCACCCCTCATGAACTAAAGCACACTTCGGAGTAATATTCACAGGAGTAAACCTAACTTTCTTCCCACAACACTTCCTAGGCCTAGCTGGCATGCCCCGACGATACTCAGACTATCCGGACGCCTACACATTATGAAACACATTATCCTCAATCGGCTCCCTAATCTCAATAACAGCTGTAATCATGCTCATATTCATCGTCTGAGAAGCTTTCTCAGCAAAGCGAAAAGTACTTCAGCCCGAATTAACTTCCACTAACATCGAATGAATCCACGGCTGCCCCCCTCCATACCACACCTTCGAGGAACCAGCCTTTGTCCAAGTACAAGAAAGGAAGGAATCGAACCCTCACATGCTGGTTTCAAGCCAACCGCATCAAACCAATTAATGCTTCTTTCTCATGAGCTGTTAGTAAACCAATTACATAGACTTGTCAAGGCTAAATCACAGGTGCAAACCCTGTACACCTCACATGGCAAACCACTCCCAACTAGGATTTCAAGATGCCTCATCCCCCATCATAGAAGAACTTGTTGAATTCCACGACCACGCCCTAATAGTAGCATTGGCGATCTGTAGCCTAGTCCTCTACCTTCTTACCCTTATACTCATAGGAAAACTATCATCAAATACTGTAGACGCCCAAGAAATCGAATTAATCTGAACTATCCTTCCTGCCGTTGTCCTAGTCCTACTTGCCCTCCCCTCCCTGCAAATCCTCTACATAATAGATGAAATTGATGAACCCGATCTTACCCTAAAAGCCATCGGCCACCAATGATACTGAACTTATGAGTACACTGACTTCAAAGATCTTTCATTCGACTCTTACATAACCCCAACAACAGACCTCCCCCAAGGCCACTTCCGCCTCCTAGAAGTCGACCACCGCATTGTAGTCCCAATAGAGTCACCCATCCGAATAATCATTACCGCTGACGATGTACTTCACTCATGAGCCGTCCCAACCCTCGGGGTAAAAACAGACGCAATTCCAGGACGATTAAATCAAACTTCCTTCATTACCACTCGGCCAGGAGTGTTTTACGGACAATGCTCAGAAATCTGCGGAGCTAACCACAGTTTCATGCCCATCGTAGTAGAATCTACCCCTCTCAAACATTTTGAAGCCTGAACTTCTCTTTTATCATCCTAACCATTAAGAAGCTATGAACCAGCACTAGCCTTTTAAGCTAGAGAAAGAGGAGATTTCCCCCTCCTTAATGGTATGCCTCAGCTAAACCCCAACCCATGATTCATTACCATAATCCTAACCTGATTCACCTTCTCCCTACTTATTCAACCCAAACTACTATCGTTTATCCCCACAAATAACCCCACAAACAAAACCATAACAACAAAACCCACCCCCTGAACTTGACCATGAACCTAAGCTTCTTCGACCAATTTTCAAGCCCATACCTCCTAGGCATGCCACTAATCCTCCCATCCCTTCTTCTCCCGACCCTCCTACTCCCATCACCGGGACGCCGGTGGGTCAATAACCGTCTTTCTACCATTCAACTCTGGTTTATTCACCTAATTACGAAACAACTAATAACCCCCCTAAACAAAGCAGGTCACAAATGAGCCCTTCTCCTAATTTCCCTTATCTTAATACTCCTCTCCATCAACCTACTTGGCCTCCTCCCATACACCTTTACCCCCACCACCCAATTATCGATAAACATAGCCCTAGCCTTTCCCCTATGACTTGCCACTTTGCTAATCGGATTACGAAATCAACCCTCCGCATCCCTAGGCCACCTCCTCCCTGAGGGAACACCCACCCCATTAATTCCAGCCCTAATCATAATCGAAACAACCAGCCTTCTCATCCGACCTTTAGCCCTAGGAGTACGCCTGACAGCTAACCTCACAGCTGGCCATTTACTTATCCAACTCATCTCCACAGCCACAATTACCCTCTTACCAATAATACCATCAATCTCTCTCCTAACAGCAATCATCCTCTTTCTACTGACCATCCTAGAAGTAGCAGTAGCTATGATCCAAGCCTATGTCTTTGTTCTCCTACTAAGCCTATACTTACAAGAAAATATCTAATGGCACACCAAGCACATTCCTACCACATAGTCGACCCAAGCCCATGACCAATCTTCGGCGCAGCCGCAGCACTACTAACCACCTCAGGCTTAATCATGTGATTCCACTTCAACTCATCAGCCCTGCTATCAATAGGCCTTCTTTCTATACTTCTAGTTATACTGCAATGATGACGGGATGTAGTTCGAGAAAGCACCTTCCAAGGCCACCACACCCCAACTGTCCAAAAAGGCCTACGATACGGCATGATCCTCTTCATTACATCAGAAGCCTTCTTCTTCCTAGGCTTCTTCTGAGCCTTCTTCCACTCAAGCCTAGCCCCCACACCAGAACTAGGGGGACAATGACCCCCTACAGGAATTAGCCCCCTAAACCCCCTCGAAGTCCCCCTTCTAAACACAGCAATCCTCCTAGCCTCCGGCGTTACCGTGACATGAGCCCACCATAGCATTACCGAAGGAAACCGAAAACAAGCCATCCACGCACTAACCCTCACCATTATCCTAGGATTCTACTTCACTGCCCTACAGGCAATAGAATATCATGAAGCTTCATTTTCAATCGCTGATAGCGTTTATGGCTCCACTTTCTTCGTCGCCACAGGATTCCATGGGCTACACGTAATCATCGGATCGTCCTTCCTATCAGTCTGTCTTCTACGACTAATCAAATTCCACTTTACATCAAATCATCATTTCGGATTTGAAGCAGCAGCCTGATACTGACACTTCGTAGACATTATCTGACTCTTCCTCTATATATCAATATACTGATGAGGATCCTGCTCTTCTAGTATACTCATTACAATTGACTTCCAATCTTTAAAATCTGGCGCAAATCCAGAGAAGAGCAATGAATTCACTCACATTCATACTATCATCATCTTTTCTACTAAGCACTGCACTAACCACCCTGAACTTCTGACTCGCCCAAATAACCCCAGACACAGAAAAACTATCCCCATATGAATGTGGATTTGACCCCCTAGGATCCGCCCGACTCCCATTCTCAATCCGATTCTTCCTCAGTAGCCATCCTATTCCTTCTATTCGACCTAGAAATCGCCCTACTCCTCCCCCTCCCATGAGCCATTCAACTTCAATCACCCACTACAACCCTCACCTGAGCTACCACTATCATTACCCTCCTCACACTTGGCCTCATTTACGAGTGGATGCAAGGAGGCCTAGAATGAGCAGAATAACAGAAAGCTAGTCTAACTAAGACAGCTGGTTTCGGCCCAGCAAATTATAGATACCATCTATAGCTTTCTTATGTCTCCCCTTCACTTTAGCTTCTACTCTGCATTCACATTCAGCTGCCTAGGATTAGCATTCCACCGAACCCACCTTATCTCCGCCCTTCTTTGCTTGGAAAGCATAATACTATCCATATTCATCCCCCTCTCAATATGGCCCATCGAGAACCAGACCCCATCATTCACCCTCGTACCCATCCTCATACTAGCTTTCTCAGCATGCGAAGCTGGTGCCGGCCTAGCTATACTAGTAGCTTCAACCCGAACACATGGTTCCGACCACCTACACAACCTAAACCTCCTACAATGCTAAAAATCATCCTACCAACAACTATACTCCTACCAATAACCCTGCTATCCCCAGCAAAATCCATATGAACTAACACCACAGCCCACAGCCTCCTAATCGCCCTAATTAGCCTACACTGACTGGTCCCATCATACTACCCCTCAAAAAACTTAGCCCATTGAGCAGGTATTGACCAAATCTCAGCACCTCTGCTAGTCCTCTCCTGCTGATTCCTCCCGCTCATAATCTTGGCCAGCCAAGGCCATTTGCAATACGAACCCCATGTACGAAAACAAATATTCATCTCTACCCTCGTCATCATCCAACCATTTATCATCCTGGCCTTTTCAGCAACAGAACTCATACTATTCTACATCTCATTCGAAGCAACCCTAATCCCAACCCTAATCTTAATTACACGCTGAGGAAACCAACCCGAACGACTCAGCGCAGGCATTTACCTCCTCTTCTACACCTTAATTAGCTCCCTACCACTACTAATCTCCATCCTCTACCTTCACTCAAAAACAGGGACACTCCACCTTCCTGTCCTCAAACTCACCCACCCAAATCCATCAACCCCATGAACAGGCTTGTTATCAAGCCTAGCCCTCCTAATAGCATTTATAGTCAAGGCCCCCCTATATGGCTTGCACCTATGACTGCCTAAAGCCCACGTAGAGGCACCAATTGCAGGCTCAATACTGCTCGCTGCCCTACTACTTAAGCTAGGGGGGTATGGCATCATACGAGCCACCCTACTAATTGAACCCCCATCCAACCACCTACACTACCCCTTCTTAACCTTGGCCTTGTGGGGCGCCTTAATAACTAGTTCCATCTGTCTACGTCAAACTGACCTAAAATCCCTCATCGCCTACTCATCCGTAAGCCACATAGGCCTGGTAATTGCCGCAGGCATAATCCAAACTCAATGATCGTTTTCAGGAGCAATAATCCTCATAATCTCCCATGGACTAACATCCTCCCTTCTATTCTGCCTAGCGAACACAAACTACGAACGAACACACAGCCGCATTCTCATCCTCACACGAGGCCTACAACCCCTCCTACCATTAATGTCAACATGATGGCTCCTAGCCAACCTAACTAACATAGCCCTACCCCCAACAACCAATTTAATAGCAGAATTAACAATCATAGTCGCCCTCTTTAACTGATCACCCCTTACAATCATCCTGACCGGAATCGCAACACTCTTAACCGCTTGCTACACCTTATACATACTACTGTCCACCCAGCGAGGAACCCTACCAACCCACATCACAACAGCCTCAAACTCAAACACACGAGAGCACCTCCTAATAACCCTCCACATCATCCCAATATTAGCCCTCATTCTTAAACCAGAGTTAATCTCAGCAACCCCTCTATGCAAACATAGTTTAATTCAAACATTAGATTGTGATTCTAAAAATAGGAGCTCAAACCTTCTTGTTCGCCGAGGGGAGGCTAAGCCAGCAAGAACTGCTAATTCCTGCATCCGAGCTTTAAACCTCGGCCCCCTTAACTTTTAAAGGATAAAAGTAATCCATTGGTCTTAGGAACCACCCATCTTGGTGCAATTCCAAGTAAAAGTAGTGGAAACAGTACTACTCCTAAACACTTTTACACTACTAACCCTATTTATCCTCCTCACCCCAATCATCCTATCCCCCCTACTTAATCTCAAAAACCCCCCACAATCAATCCCCCAAACCATTAAAACTGCCTTCCTAATCAGCCTCATTCCAACAACCATCTTCCTCCACTCAGGCATAGAAAGCATCACCACCTACTGAGAATGGCAACTCACCCAAAACTTCAAAATCCCAATCTCCTTAAAAATAGACCTATATTCCATAGTATTCTTCCCCATTGCACTGTTTGTAACCTGATCTATCCTAGAATTTTCGACATGGTACATAGCCTCCGAACCCTTTATCATAAAATTCTTCACCTTTCTCCTTATTTTCCTCATCGCCATATTAACCCTCACAATCGCAAACAACATATTCCTTCTATTTATCGGCTGAGAGGGAGTAGGAATCATATCGTTCCTCCTCATCGGCTGATGACAAGGACGGGCCGAAGCCAACACAGCTGCACTCCAGGCCATAATCTACAATCGAATCGGAGACATCGGCCTAATCCTAAGCATAGCATGACTAGCCTCAACACTAAACACCTGAGAAATTCAACAAGCCATTCAACCAAACCAAACGCCTACCCTCCCTCTTTTAGGACTAATCCTAGCCGCTACAGGAAAATCAGCCCAATTCGGCCTCCACCCATGACTCCCTGCAGCAATAGAGGGCCCAACTCCAGTCTCCGCCCTACTCCACTCCAGCACCATAGTAGTGGCCGGAATCTTCTTACTCATTCGCACTCACCCTATCTTAACCTCAAATAAACTAGCCCTAACCTCATGCCTATGCCTAGGCGCCCTATCAACATTATTCGCTGCCACCTGCGCCCTCACCCAAAATGACATCAAAAAAATCATTGCCTTCTCTACCTCAAGCCAACTAGGCCTCATAATAGTTACAATCGGACTAGATCTCCCCCAACTTGCTTTCCTCCACATCTCAACTCACGCATTCTTCAAAGCCATACTATTCCTATGTTCTGGCCTAATCATCCACAGCCTAAATGGAGAACAAGACATTCGCAAAATGGGATGCCTACAAAAAACCCTCCCAATAACCACCTCCTGCCTAACCATCGGCAACCTCGCCCTAATAGGCACTCCATTCCTAGCGGGCTTCTACTCAAAAGACCTAATCATTGAAAACCTAAACACCTCATACATTAACACCTGGGCCCTTCTCCTTACACTACTTGCCACATCCTTCACCGCAACTTACAGCCTCCGCATGACTCTCCTAGTCCAAACAGGACACACCCGAACCCCCACAATCACACCCATCAATGAAAACACATCCTCAGCCATCCTACCTATCATTCGACTAGCTTTCGGCAGCATCACAGCCGGCTTATTAATCTCATCACTCACCCTTCCCATGAAAACACCCCCAATAACCATACCTACTATTACAAAAACTGCTGCCATTGCCGTCACAGCCCTTGGGATCATCCTCGCCCTAGAACTCTCAAACATAACACACACCCTCACCCTCCCAAAACAAAGCCCTCTTACAAATTTCTCCTCTTCACTAGGCTACTTCAACCCCCTAATACATCGAACTAACCCTGCAATCCTCCTAAATACCGGACAAAAAATTGCCTCCCACTTAATCGACATAACATGGTACAAAAAAATAGGCCCTGAAGGCCTTGCCAACCTCCATCTCATCATAAGTAAAACCTCCACGACCCTTCATACAGGTCTAATCAAATCCTACCTAGGATCCTTCGCCCTAACAATCCTCACAACAATCCTACTAACCCAAAAATAAAGTTTAATGGCACCCAACATCCGAAAATCACACCCCCTACTAAAAATAATCAATAACTCCCTAATCGACCTGCCCGCCCCATCCAACATCTCCGCTTGATGGAACTTCGGCTCCCTGTTAGCAGTATGCCTCGCTACTCAAATCCTCACCGGCCTCCTACTGGCCATACATTATACCGCAGATACTTCCCTAGCTTTCTCCTCCGTAGCCCACACATGCCGAAACGTACAGTACGGCTGACTCATCCGAAACCTTCATGCAAATGGCGCCTCATTCTTCTTCATTTGCATCTTCCTTCACATCGGACGCGGCCTCTACTACGGCTCCTACCTATACAAAGAGACATGAAACACCGGAGTTATCCTACTCCTCACCCTCATAGCAACCGCTTTTGTAGGGTACGTCCTCCCATGAGGACAAATATCATTTTGAGGGGCTACCGTCATCACAAATCTATTCTCAGCAATCCCTTACATCGGACAAACCCTAGTGGAGTGGGCCTGAGGAGGATTCTCAGTTGACAACCCAACCCTCACCCGATTCTTCGCCCTACACTTCCTCCTCCCCTTCGTAATTGCAGGAATTACTATCACCCACCTCATATTCCTACACGAATCAGGCTCAAACAACCCACTAGGCATCTCATCTAATTCCGACAAAATCCCATTCCACCCATACTACTCCCTCAAAGACATCCTAGGCCTAGCACTTATATTCACCCCATTCCTAATACTAGCCCTATTCTCACCTAACCTTCTGGGCGACCCAGAAAACTTCACCCCAGCAAACCCACTAGTAACCCCACCTCACATTAAACCAGAATGATACTTCCTATTTGCCTATGCTATCCTACGCTCAATCCCAAATAAACTCGGAGGCGTCCTAGCACTAGCAGCCTCGGTACTCATCCTCCTCCTCATTCCCTTCCTTCACAAATCCAAACAACGAACTATAACCTTCCGCCCACTTTCCCAGGCCCTATTTTGATTGCTAGTTGCCAACCTTCTCATCTTAACTTGAGTAGGAAGCCAACCAGTAGAGCACCCATTCATCATCATCGGCCAAATAGCATCATTCTCATACTTCACCATCCTACTAATCCTCTTCCCCGCAGTCGGAACCCTAGAAAACAAAATACTTAACTACTAGTACTCTAATAGTTTATGAAAAACATTGGTCTTGTAAACCAAAAACTGAAGACTACACCCTTCTTAGAGTAACTCAGAAAAAAAGGACTTAAACCTTTCTCTCCAGCTCCCAAAGCTGGTATTTTAAATAAACTATTCTCTGAAACCCCTAAACCGCCCGAATCGCCCCCCGAGACAACCCACGTACAAGCTCCAGCACAACAAACAACACCAACAACAAACCTCACCCCGCCACTAAAAACAACCCAGCCCCACATGAATAAAACACCGCCACCCCACTGAAATCCAACCGAACTAAAGATATCCCCCCACTATCAACAGTAACCACTACAACCTTCCAAAAATCAACAAATCCTGCCAAAAACGCCCCAACACAAACCACCAAAACAAACCCCAACCCATAACCAGCTACCCGCCAATCTCCCCAAGCCTCAGGATATGGATCTGCCGCCAAAGACACAGAGTAAACAAAAACTACCAGCATACCCCCCAAATAGACCATAAACAATGCCAAAGAAATAAAAGAAACGCCTAAGCTCACTAACCACCCGCACCCAACTACAGATGCTAGCACTAACCCCACCACACCATAATAAGGAGAGGGGTTAGATGCTACAGCTAAAACCCCTAATATAAAACAGACCCCAAGAAAAATCACGAAATAAGTCATATGTTCCCGCTTGGATAGACCCCAAGGACTACGGCTTGAAAAGCCATTGTTGTTCTCAACTACGGGAAC", "utf-8")