Rebase onto master. Added deply script to unused files folder
9
.gitignore
vendored
@@ -1,12 +1,7 @@
|
||||
__pycache__
|
||||
Data
|
||||
*.ipynb*
|
||||
wav_converter.py
|
||||
to_do.txt
|
||||
csv_info.txt
|
||||
pyinstaller_cmd.txt
|
||||
themes/.current_theme
|
||||
launch.bat
|
||||
src/themes/.current_theme
|
||||
designer.bat
|
||||
default_pics/
|
||||
launch.bat
|
||||
.vscode/
|
||||
|
||||
193
README.md
Normal file
@@ -0,0 +1,193 @@
|
||||
<img src="documentation/ArtemisLogoSmall.png" align="right" />
|
||||
|
||||
# ARTEMIS 3   
|
||||
|
||||
*Radio Signals Recognition Manual*
|
||||
|
||||
## ARTEMIS. In a nutshell.
|
||||
|
||||
In short, ARTEMIS is a signals hunter software and a useful aid for radio listeners! The analysis of real-time spectra (from your SDR, for instance is made simple: you can take advantage using one of the largest RF signal database (with over 370 records). Compare several signals properties (such as frequency, bandwidth, modulation, etc.) and verify what you are searching for through a waterfall/audio sample. A collection of filters allows you to narrow your search, making the identification of unknown signals, odd buzzes or weird noises way easier.
|
||||
|
||||
## Table of contents
|
||||
|
||||
- [Installation](#installation)
|
||||
- [Run from binary](#Run-from-binary)
|
||||
- [Run from source code](#Run-from-source-code-OS-independent)
|
||||
- [Run using deploy script](#Run-using-deploy-script)
|
||||
- [Windows](#Windows)
|
||||
- [Linux](#Linux)
|
||||
- [MacOS](#MacOS)
|
||||
- [Database](#database)
|
||||
- [Syntax](#syntax)
|
||||
- [Multiple Items fields (Location, Modulation)](#multiple-items-fields-location-modulation)
|
||||
- [Themes](#themes)
|
||||
- [License](#license)
|
||||
- [Thanks](#thanks)
|
||||
|
||||
## Installation
|
||||
The power of the new Artemis is the native multi-environment capability. To achieve this point, the entire code has been written in python. The procedure of Artemis 3 deployment is very similar among the different main operative systems (Windows, Linux or MacOS) but, in principle, any OS capable of running python scripts has all the necessary features to run Artemis smoothly.
|
||||
|
||||
## Run from binary
|
||||
**If you don't know what you want or you are not sure where to look, this is for you.**
|
||||
|
||||
Basically, this is the easiest, smooth, and clean way to run Artemis 3. Python 3.7 and the libraries are not required because they are already contained into the bundle.
|
||||
For more information, follow the main page of Artemis 3: https://aresvalley.com/artemis/ (detailed documentation at the end of the main page)
|
||||
|
||||
## Run from source code (OS independent)
|
||||
Run the software from the source code with the Python interpreter is the simplest and natural way to run Artemis 3. The main drawback: this is not the most convenient or fast way to launch the software. Requirements:
|
||||
- Python 3 (>3.7)
|
||||
- Pandas>=0.24.2
|
||||
- Certifi>=2019.6.16
|
||||
- Aiohttp>=3.5.4
|
||||
- Urllib3>=1.25.3
|
||||
- Pygame>=1.9.6
|
||||
- QtAwesome>=0.5.7
|
||||
- PyQt5==5.12.2
|
||||
|
||||
1. Download and install Python 3 (> 3.7) from the official website (https://www.python.org/downloads/). Be sure to select the flag `Add Python 3.x to PATH` during the first part of the installation.
|
||||
|
||||
2. Install the necessary Python libraries with PIP. Open a console in Artemis/requirements folder and type:
|
||||
|
||||
```
|
||||
pip install -r requirements.txt --user
|
||||
```
|
||||
|
||||
3. After that launch the software in the Artemis folder with:
|
||||
|
||||
```
|
||||
python3 artemis.py
|
||||
```
|
||||
|
||||
## Run using deploy script
|
||||
|
||||
<img src="documentation/win.png" align="right" />
|
||||
|
||||
> ### Windows:
|
||||
>
|
||||
> 1. Windows don't offer a native version of Python. Download and install Python 3 (> 3.7) from the official website (https://www.python.org/downloads/). Be sure to select the flag `Add Python 3.x to PATH` during the first part of the installation. To verify the correct installation of Python open a CMD terminal (Open the **run** windows with **Win+R** and type **cmd**) and check the version of the just installed python 3 with:
|
||||
> ```
|
||||
> python --version
|
||||
> ```
|
||||
> 2. Use the `clone or download` button (https://github.com/AresValley/Artemis/archive/master.zip) to download the source code of Artemis 3.
|
||||
> 3. Extract the .zip and place Artemis folder where you prefer. The code must always be accompanied by a `themes` folder.
|
||||
> 4. To install the necessary libraries open the `Artemis/deploy/Windows` folder. Run (with a double click) the script `deploy_win.bat`. The script will:
|
||||
>
|
||||
> * Set the correct read/write privileges for Artemis folder. The main folder **must have the reading/writing permission** to download the Signals Database.
|
||||
> * Install the required Python 3 libraries with pip3.
|
||||
> * Generate a .pyw file (script launcher without console), and it will create a shortcut on the desktop.
|
||||
|
||||
|
||||
<img src="documentation/linux.png" align="right" />
|
||||
|
||||
> ### Linux:
|
||||
>
|
||||
> 1. Linux already offers a native version of python on board. Please verify the presence of Python 3 and check the version (> 3.7) opening a terminal and typing:
|
||||
> ```
|
||||
> python --version
|
||||
> ```
|
||||
> If, for some reasons python, it is not present in your system follow the specific instructions to install it on your distro. For the common Linux OS:
|
||||
> * **Ubuntu**, **Mint**: `sudo apt-get install python3.7`
|
||||
> * **Fedora**: `sudo dnf install python37`
|
||||
> 2. Use the `clone or download` button (https://github.com/AresValley/Artemis/archive/master.zip) to download the source code of Artemis 3.
|
||||
> 3. Extract the .zip where you like (use `unzip Artemis-master.zip`). The code must always be accompanied by a `themes` folder.
|
||||
> 4. To install the necessary libraries open the `Artemis/deploy/Linux` folder. Run the script `deploy_linux.sh` typing in a terminal:
|
||||
> ```
|
||||
> cd PATH / TO / ARTEMIS / FOLDER /deploy/Linux
|
||||
> sh deploy_linux.sh
|
||||
> ```
|
||||
>
|
||||
> 5. Follow the terminal instructions. At the end, you will find a shortcut to Artemis 3 in the main menu. The script `deploy_linux.sh` will:
|
||||
>
|
||||
> * Set the correct read/write privileges for Artemis folder. The main folder **must have the reading/writing permission** to download the Signals Database.
|
||||
> * Install the required Python 3 libraries with pip3.
|
||||
> * Generate a .desktop file (script launcher without console) in `$HOME/.local/share/applications` and it will copy the .svg Artemis icon in `/usr/share/icons/`.
|
||||
|
||||
|
||||
<img src="documentation/apple.png" align="right" />
|
||||
|
||||
> ### MacOS:
|
||||
>
|
||||
> 1. To Be Completed...
|
||||
|
||||
## Database
|
||||
|
||||
The database (db.csv) is directly extracted from sigidwiki.com with a DB parser and reworked to a standard format defined as follow. Artemis DB is a human-readable csv file where the delimiter is the character `*` (Asterisk, Unicode: U+002A). The new entry (separation between signals) is the End Of Line (EOL) escape sequence `\n`. Every signal is directly connected to spectra and audio sample stored in **Spectra** and **Audio** folders, respectively. Every signal is composed of 12 columns:
|
||||
|
||||
| Column | Description | Unit of Measurement | Multiple Items | Type|
|
||||
| :-: | :-: | :-: | :-: | :-: |
|
||||
| 1 | Signal name | - | - | string |
|
||||
| 2 | Freq. Lower Limit | Hz | - | integer |
|
||||
| 3 | Freq. Upper Limit | Hz | - | integer |
|
||||
| 4 | Mode | - | - | string |
|
||||
| 5 | Band. Lower Limit | Hz | - | integer |
|
||||
| 6 | Band. Upper Limit | Hz | - | integer |
|
||||
| 7 | Location | - | ✔ | string |
|
||||
| 8 | sigidwiki URL | - | - | string |
|
||||
| 9 | Description | - | - | string |
|
||||
| 10 | Modulation | - | ✔ | string |
|
||||
| 11 | ID Code | - | - | integer |
|
||||
| 12 | Auto-correlation function | ms | - | string |
|
||||
|
||||
### Syntax
|
||||
|
||||
1. **Signal Name**: The name of the signal. A simple string that describes in short the analyzed signal. Special characters are allowed (except the main delimiter `*`).
|
||||
2. **Frequency (Lower Limit)**: The frequency lower bound expressed in Hertz.
|
||||
3. **Frequency (Upper Limit)**: The same as above but this express the frequency upper bound of the received signal.
|
||||
|
||||
* In the case of a single frequency transmitter/service the **Freq. Lower Limit** and the **Freq. Upper Limit** must be coincident (same value)
|
||||
* Transmission with different protocols must be added in two or more distinct entry. **DO NOT USE** the same signal page to add different transmission protocols (with different frequencies, bandwidth, modes,...). For example, NOAA-19 satellite transimit images and data with two different protocols:
|
||||
|
||||
* APT (Analog): 137.1000 MHz - 137.3125 MHz
|
||||
* HRPT (Digital): 1698 MHz - 1707 MHz
|
||||
|
||||
Add two separate entry (APT and HRPT) with the correct Lower and Upper bound frequency. **DO NOT ADD** a single signal entry with a Freq. Lower Bound of 137.100 MHz and the Upper Bound of 1707 MHz.
|
||||
|
||||
4. **Mode**: This field reports the way how a signals has been decoded during the reception.
|
||||
5. **Bandwidth (Lower Limit)**: As reported above for frequency (points 2 and 3). Also here the value is reported in Hz.
|
||||
6. **Bandwidth (Upper Limit)**: As reported above for frequency (points 2 and 3).
|
||||
7. **Location**: This is the location where the signal is distributed/received. Avoid the usage of the precise location of the TX station or very small town (very rare). It's a good habit to use nations/continents or special location (worldwide).
|
||||
8. **sigidiwki URL**: The sigidwiki URL of the selected signal. This is a direct connection to the online database where further details of the signal are collected.
|
||||
9. **Description**: The short description is used to explain the purpose of the signal and some other useful details.
|
||||
10. **Modulation**: The modulation is the way how the information have been encoded into the main signal (carrier). Several modification of the properties (Amplitude, Frequecy, ...) are possible and a tx station could transmit with different modulations.
|
||||
11. **ID Code**: The category code, known as ID Code, is a sequence of 0/1 and its main purpose is to assign the signal to their families/categories. It's formed by 17 digits:
|
||||
|
||||
|1|2|3|4|5|6|7|8|9|10|
|
||||
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
||||
| Military | Radar | Active | Inactive | HAM | Commercial | Aviation | Marine | Analogue | Digital|
|
||||
|
||||
|11|12|13|14|15|16|17|
|
||||
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
||||
| Trunked | Utility | Sat | Navigation | Interfering | Number Stations | Time Signal |
|
||||
|
||||
12. **Auto-correlation funtion (ACF)**: The ACF is an awesome discriminator when the signal is composed of redundant pattern that continouosly repeats. It is reported in **ms**. An extended description with an example signal analysis is available here: https://aresvalley.com/documentation/
|
||||
|
||||
### Multiple Items fields (Location, Modulation)
|
||||
The necessity to manage a multiple Location/Modulation search pushed us to implement a fictitious 'secondary delimiter' chosen to be the `;` character. For instance:
|
||||
|
||||
```
|
||||
Band. Upper Limit * Location 1 ; Location 2 ; ... * sigidwiki URL
|
||||
```
|
||||
or
|
||||
```
|
||||
Description * Modulation 1 ; Modulation 2 ; ... * ID Code
|
||||
```
|
||||
|
||||
## Themes
|
||||
The only folder with the pre-built package is the `themes` one. In this way the themes are fully customizable and you can add your own. New themes (in the `themes` folder) will appear automatically in the main menu and the last used theme will be saved as the favorite one (a restart of Artemis will use the last used theme).
|
||||
|
||||
Some of the available themes were adapted from https://github.com/GTRONICK/QSS.
|
||||
|
||||
## License
|
||||
This program (ARTEMIS 3, 2014-2019) is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with this program. If not, see: www.gnu.org/licenses
|
||||
|
||||
## Thanks
|
||||
* **Marco D.T.** - *Artemis I-II programmer, DB parsing, Website*
|
||||
* **Alessandro C.** - *Artemis III lead programmer*
|
||||
* **Paolo R. (IZ1MLL)** - *Lead β Tester, RF specialist*
|
||||
* **Carl C.** - *Sigidwiki admin, β Tester, Signals expert*
|
||||
* **Marco B.** - *macOS deployment, β Tester*
|
||||
* **Francesco C., Pierpaolo P., Luca XYZ, Paolo XYZ, Daniele XYZ** - *β Tester*
|
||||
BIN
documentation/ArtemisLogoSmall.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
documentation/apple.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
documentation/linux.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
documentation/win.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
7
requirements/requirements.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
pandas>=0.24.2
|
||||
certifi>=2019.6.16
|
||||
aiohttp>=3.5.4
|
||||
urllib3>=1.25.3
|
||||
pygame>=1.9.6
|
||||
QtAwesome>=0.5.7
|
||||
PyQt5==5.12.2
|
||||
@@ -32,8 +32,7 @@ from constants import (Constants,
|
||||
Database,
|
||||
ChecksumWhat,
|
||||
Messages,
|
||||
Signal,
|
||||
MainTabs,)
|
||||
Signal,)
|
||||
from themesmanager import ThemeManager
|
||||
from utilities import (checksum_ok,
|
||||
uncheck_and_emit,
|
||||
@@ -541,8 +540,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
||||
|
||||
@pyqtSlot()
|
||||
def hide_show_right_widget(self):
|
||||
"""Hide or show the waterfall+audio widget based on the current tab."""
|
||||
if self.main_tab.currentIndex() == MainTabs.FORECAST:
|
||||
if self.main_tab.currentWidget() == self.forecast_tab:
|
||||
self.fixed_audio_and_image.setVisible(False)
|
||||
elif not self.fixed_audio_and_image.isVisible():
|
||||
self.fixed_audio_and_image.setVisible(True)
|
||||
@@ -1628,6 +1626,10 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# For executables running on Mac Os systems.
|
||||
if hasattr(sys, "_MEIPASS") and sys.platform == 'darwin':
|
||||
os.chdir(sys._MEIPASS)
|
||||
|
||||
my_app = QApplication(sys.argv)
|
||||
ARTEMIS_ICON = os.path.join(":", "icon", "default_pics", "Artemis3.500px.png")
|
||||
img = QPixmap(ARTEMIS_ICON)
|
||||
@@ -5410,7 +5410,7 @@ www.qrg.globaltuners.com</string>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab">
|
||||
<widget class="QWidget" name="forecast_tab">
|
||||
<attribute name="title">
|
||||
<string>Rx/Tx Conditions</string>
|
||||
</attribute>
|
||||
@@ -9194,7 +9194,8 @@ QWidget {
|
||||
QPushButton {
|
||||
border: 0px solid gray;
|
||||
border-color: #1d5eff;
|
||||
border-radius: 20px;
|
||||
border-radius: 25px;
|
||||
background-color: transparent;
|
||||
}</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
@@ -1,16 +1,6 @@
|
||||
from collections import namedtuple
|
||||
from enum import Enum, auto
|
||||
import os.path
|
||||
from enum import IntEnum
|
||||
|
||||
|
||||
class MainTabs(IntEnum):
|
||||
"""The main tabs indeces."""
|
||||
|
||||
SIGNAL = 0
|
||||
FILTERS = 1
|
||||
GFD = 2
|
||||
FORECAST = 3
|
||||
|
||||
|
||||
class Ftype:
|
||||
@@ -186,6 +176,8 @@ class Constants:
|
||||
UNKNOWN = "N/A"
|
||||
EXTRACTING_MSG = "Extracting..."
|
||||
EXTRACTING_CODE = -1
|
||||
ZERO_INITIAL_SPEED = -1
|
||||
ZERO_FINAL_SPEED = -2
|
||||
NOT_AVAILABLE = "spectrumnotavailable.png"
|
||||
NOT_SELECTED = "nosignalselected.png"
|
||||
FIELD_SEPARATOR = ";"
|
||||
BIN
src/default_pics/Artemis3.500px.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
BIN
src/default_pics/Artemis3.png
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
src/default_pics/nosignalselected.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/default_pics/spectrumnotavailable.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
@@ -21,9 +21,6 @@
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
@@ -56,6 +53,21 @@ Please wait...
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="speed_lbl">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Speed</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QProgressBar" name="progressBar">
|
||||
<property name="minimum">
|
||||
@@ -44,6 +44,7 @@ class DownloadWindow(QWidget, Ui_Download_window):
|
||||
self._download_thread = DownloadThread()
|
||||
self._download_thread.finished.connect(self._wait_close)
|
||||
self._download_thread.progress.connect(self._display_progress)
|
||||
self._download_thread.speed_progress.connect(self._display_speed)
|
||||
self.closed.connect(self._download_thread.set_exit)
|
||||
self.cancel_btn.clicked.connect(self._terminate_process)
|
||||
|
||||
@@ -51,28 +52,38 @@ class DownloadWindow(QWidget, Ui_Download_window):
|
||||
"""Start the download thread."""
|
||||
self._download_thread.start()
|
||||
|
||||
def _downlaod_format_str(self, n, speed):
|
||||
"""Return a well-formatted string with downloaded MB and speed."""
|
||||
ret = f"Downloaded: {n} MB\nSpeed: "
|
||||
if speed == 0.0:
|
||||
def _download_format_str(self, n):
|
||||
"""Return a well-formatted string with the downloaded MB."""
|
||||
return f"Downloaded: {n} MB"
|
||||
|
||||
@pyqtSlot(float)
|
||||
def _display_speed(self, speed):
|
||||
"""Display the download speed."""
|
||||
ret = "Speed: "
|
||||
if speed == Constants.ZERO_INITIAL_SPEED:
|
||||
ret += "Calculating..."
|
||||
elif speed == 0.0:
|
||||
ret += "VERY SLOW"
|
||||
elif speed == Constants.ZERO_FINAL_SPEED:
|
||||
ret = ""
|
||||
else:
|
||||
ret += f"{speed} MB/s"
|
||||
return ret
|
||||
self.speed_lbl.setText(ret)
|
||||
|
||||
@pyqtSlot(int)
|
||||
def _display_progress(self, progress):
|
||||
"""Display the downloaded MB."""
|
||||
if progress != Constants.EXTRACTING_CODE:
|
||||
self.status_lbl.setText(self._download_format_str(progress))
|
||||
elif progress == Constants.EXTRACTING_CODE:
|
||||
self.status_lbl.setText(Constants.EXTRACTING_MSG)
|
||||
|
||||
def show(self):
|
||||
"""Extends QWidget.show. Set downloaded MB and speed to zero."""
|
||||
self.status_lbl.setText(self._downlaod_format_str(0, 0))
|
||||
self._display_progress(0)
|
||||
self._display_speed(Constants.ZERO_INITIAL_SPEED)
|
||||
super().show()
|
||||
|
||||
@pyqtSlot(int, float)
|
||||
def _display_progress(self, progress, speed):
|
||||
"""Display the downloaded MB and speed."""
|
||||
if progress != Constants.EXTRACTING_CODE:
|
||||
self.status_lbl.setText(self._downlaod_format_str(progress, speed))
|
||||
elif progress == Constants.EXTRACTING_CODE:
|
||||
self.status_lbl.setText(Constants.EXTRACTING_MSG + '\n')
|
||||
|
||||
def _stop_thread(self):
|
||||
"""Ask the download thread to stop."""
|
||||
if self._download_thread.isRunning():
|
||||
631
src/themes/acqua/acqua.qss
Normal file
@@ -0,0 +1,631 @@
|
||||
/*
|
||||
Aqua Style Sheet for QT Applications
|
||||
Author: Jaime A. Quiroga P.
|
||||
Company: GTRONICK
|
||||
Last updated: 22/01/2019, 07:55.
|
||||
Available at: https://github.com/GTRONICK/QSS/blob/master/Aqua.qss
|
||||
*/
|
||||
/* QMainWindow {
|
||||
background-color:#ececec;
|
||||
} */
|
||||
|
||||
QWidget{
|
||||
background-color:#ececec;
|
||||
}
|
||||
|
||||
QTextEdit {
|
||||
}
|
||||
|
||||
QPlainTextEdit {
|
||||
border-style: solid;
|
||||
border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
}
|
||||
QToolButton {
|
||||
border-style: solid;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgb(215, 215, 215), stop:1 rgb(222, 222, 222));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0, y1:0.5, x2:1, y2:0.5, stop:0 rgb(217, 217, 217), stop:1 rgb(227, 227, 227));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0, y1:0.5, x2:1, y2:0.5, stop:0 rgb(227, 227, 227), stop:1 rgb(217, 217, 217));
|
||||
border-bottom-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgb(215, 215, 215), stop:1 rgb(222, 222, 222));
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: rgb(0,0,0);
|
||||
padding: 2px;
|
||||
background-color: rgb(255,255,255);
|
||||
}
|
||||
QToolButton:hover{
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: rgb(0,0,0);
|
||||
padding: 2px;
|
||||
background-color: rgb(255,255,255);
|
||||
}
|
||||
QToolButton:pressed{
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: rgb(0,0,0);
|
||||
padding: 2px;
|
||||
background-color: rgb(142,142,142);
|
||||
}
|
||||
QPushButton{
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: rgb(0,0,0);
|
||||
padding: 2px;
|
||||
border: 1px solid transparent;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:hover{
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: rgb(0,0,0);
|
||||
padding: 2px;
|
||||
border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
}
|
||||
QPushButton:pressed{
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: rgb(0,0,0);
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
QPushButton:checked{
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: #ffffff;
|
||||
padding: 2px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
}
|
||||
|
||||
QPushButton:disabled{
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
color: #808086;
|
||||
padding: 2px;
|
||||
background-color: transparent;
|
||||
}
|
||||
QLineEdit {
|
||||
border-width: 1px; border-radius: 4px;
|
||||
border-style: solid;
|
||||
border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
}
|
||||
QLabel {
|
||||
color: #000000;
|
||||
}
|
||||
QLCDNumber {
|
||||
color: rgb(0, 113, 255, 255);
|
||||
}
|
||||
QProgressBar {
|
||||
text-align: center;
|
||||
color: rgb(240, 240, 240);
|
||||
border-width: 1px;
|
||||
border-radius: 10px;
|
||||
border-color: rgb(230, 230, 230);
|
||||
border-style: solid;
|
||||
background-color:rgb(207,207,207);
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
border-radius: 10px;
|
||||
}
|
||||
QMenuBar {
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(207, 209, 207, 255), stop:1 rgba(230, 229, 230, 255));
|
||||
}
|
||||
QMenuBar::item {
|
||||
color: #000000;
|
||||
spacing: 3px;
|
||||
padding: 1px 4px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(207, 209, 207, 255), stop:1 rgba(230, 229, 230, 255));
|
||||
}
|
||||
|
||||
QMenuBar::item:selected {
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
color: #FFFFFF;
|
||||
}
|
||||
QMenu::item:selected {
|
||||
border-style: solid;
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
border-bottom-color: transparent;
|
||||
border-left-width: 2px;
|
||||
color: #000000;
|
||||
padding-left:15px;
|
||||
padding-top:4px;
|
||||
padding-bottom:4px;
|
||||
padding-right:7px;
|
||||
}
|
||||
QMenu::item {
|
||||
border-style: solid;
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: transparent;
|
||||
border-bottom-width: 1px;
|
||||
color: #000000;
|
||||
padding-left:17px;
|
||||
padding-top:4px;
|
||||
padding-bottom:4px;
|
||||
padding-right:7px;
|
||||
}
|
||||
QTabWidget {
|
||||
color:rgb(0,0,0);
|
||||
background-color:#000000;
|
||||
}
|
||||
|
||||
QTreeView {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QTreeView::item:hover {
|
||||
border-right: 2px solid #4545e5;
|
||||
color: rgba(0, 113, 255, 255)
|
||||
}
|
||||
|
||||
QTreeView::item:selected {
|
||||
color: rgba(0, 113, 255, 255)
|
||||
}
|
||||
|
||||
QTreeView::item:active{
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QTreeView::item:disabled{
|
||||
color: #808086;
|
||||
}
|
||||
|
||||
QTreeView::item:selected:disabled{
|
||||
color: #808086;
|
||||
}
|
||||
|
||||
QListWidget {
|
||||
background-color: transparent;
|
||||
border: 0px solid transparent;
|
||||
border-bottom: 2px solid #80CBC4;
|
||||
}
|
||||
|
||||
QListView {
|
||||
background-color: transparent;
|
||||
outline: 0;
|
||||
border: 0px solid transparent;
|
||||
}
|
||||
QListView::item:hover {
|
||||
color: rgba(0, 113, 255, 255);
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:selected {
|
||||
color: rgba(0, 113, 255, 255);
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:disabled {
|
||||
color: #808086;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:disabled:selected {
|
||||
color: rgba(0, 113, 255, 255);
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
|
||||
QTabWidget::pane {
|
||||
background-color:rgb(226,226,226);
|
||||
border-style: solid;
|
||||
border-radius: 6px;
|
||||
}
|
||||
QTabBar::tab:first {
|
||||
border-style: solid;
|
||||
border-left-width:1px;
|
||||
border-right-width:0px;
|
||||
border-top-width:1px;
|
||||
border-bottom-width:1px;
|
||||
border-top-color: rgb(209,209,209);
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229));
|
||||
border-bottom-color: rgb(229,229,229);
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
color: #000000;
|
||||
padding: 3px;
|
||||
margin-left:0px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(247, 247, 247, 255), stop:1 rgba(255, 255, 255, 255));
|
||||
}
|
||||
QTabBar::tab:last {
|
||||
border-style: solid;
|
||||
border-width:1px;
|
||||
border-top-color: rgb(209,209,209);
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229));
|
||||
border-bottom-color: rgb(229,229,229);
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
color: #000000;
|
||||
padding: 3px;
|
||||
margin-left:0px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(247, 247, 247, 255), stop:1 rgba(255, 255, 255, 255));
|
||||
}
|
||||
QTabBar::tab {
|
||||
border-style: solid;
|
||||
border-top-width:1px;
|
||||
border-bottom-width:1px;
|
||||
border-left-width:1px;
|
||||
border-top-color: rgb(209,209,209);
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229));
|
||||
border-bottom-color: rgb(229,229,229);
|
||||
color: #000000;
|
||||
padding: 3px;
|
||||
margin-left:0px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(247, 247, 247, 255), stop:1 rgba(255, 255, 255, 255));
|
||||
}
|
||||
QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover {
|
||||
border-style: solid;
|
||||
border-left-width:1px;
|
||||
border-right-color: transparent;
|
||||
border-top-color: rgb(209,209,209);
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229));
|
||||
border-bottom-color: rgb(229,229,229);
|
||||
color: #FFFFFF;
|
||||
padding: 3px;
|
||||
margin-left:0px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
}
|
||||
|
||||
QTabBar::tab:selected, QTabBar::tab:first:selected, QTabBar::tab:hover {
|
||||
border-style: solid;
|
||||
border-left-width:1px;
|
||||
border-bottom-width:1px;
|
||||
border-top-width:1px;
|
||||
border-right-color: transparent;
|
||||
border-top-color: rgb(209,209,209);
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229));
|
||||
border-bottom-color: rgb(229,229,229);
|
||||
color: #FFFFFF;
|
||||
padding: 3px;
|
||||
margin-left:0px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
}
|
||||
|
||||
|
||||
QRadioButton {
|
||||
color: 000000;
|
||||
padding: 1px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
border-style:solid;
|
||||
border-radius:5px;
|
||||
border-width: 1px;
|
||||
border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
color: #a9b7c6;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
}
|
||||
QRadioButton::indicator:!checked {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
border-style:solid;
|
||||
border-radius:5px;
|
||||
border-width: 1px;
|
||||
border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255));
|
||||
color: #a9b7c6;
|
||||
background-color: transparent;
|
||||
}
|
||||
QStatusBar {
|
||||
color:#027f7f;
|
||||
}
|
||||
|
||||
QSpinBox {
|
||||
background-color: transparent;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox:disabled {
|
||||
color: #808086;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox::up-button {
|
||||
subcontrol-origin: border;
|
||||
subcontrol-position: top right;
|
||||
width: 16px;
|
||||
image: url("./themes/acqua/icons/up-arrow.png");
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox::up-button:hover {
|
||||
image: url("./themes/acqua/icons/up-arrow_hover.png");
|
||||
}
|
||||
|
||||
QSpinBox::up-button:pressed {
|
||||
image: url("./themes/acqua/icons/up-arrow.png");
|
||||
}
|
||||
|
||||
QSpinBox::up-button:disabled {
|
||||
image: url("./themes/acqua/icons/up-arrow_off.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button {
|
||||
subcontrol-origin: border;
|
||||
subcontrol-position: bottom right;
|
||||
width: 16px;
|
||||
image: url("./themes/acqua/icons/down-arrow.png");
|
||||
border-width: 0px;
|
||||
border-top-width: 0;
|
||||
}
|
||||
|
||||
QSpinBox::down-button:hover {
|
||||
image: url("./themes/acqua/icons/down-arrow_hover.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button:pressed {
|
||||
image: url("./themes/acqua/icons/down-arrow.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button:disabled {
|
||||
image: url("./themes/acqua/icons/down-arrow_off.png");
|
||||
}
|
||||
|
||||
QComboBox {
|
||||
border: 0px solid transparent;
|
||||
border-radius: 2px;
|
||||
padding: 1px 6px 1px 6px;
|
||||
min-width: 2em;
|
||||
}
|
||||
|
||||
QComboBox:!editable {
|
||||
selection-background-color: transparent;
|
||||
selection-color: #FFFFFF;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QComboBox:disabled {
|
||||
color: #808086;
|
||||
}
|
||||
|
||||
QComboBox:!editable:on, QComboBox::drop-down:editable:on {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
}
|
||||
|
||||
QComboBox:on {
|
||||
padding-top: 3px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
QComboBox::drop-down {
|
||||
background-color: transparent;
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 20px;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:enabled {
|
||||
image: url("./themes/acqua/icons/down-arrow.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:disabled {
|
||||
image: url("./themes/acqua/icons/down-arrow_off.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:hover {
|
||||
image: url("./themes/acqua/icons/down-arrow_hover.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:on {
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
}
|
||||
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #ececec;
|
||||
}
|
||||
|
||||
QScrollArea {
|
||||
color: #FFFFFF;
|
||||
background-color:#000000;
|
||||
}
|
||||
QSlider::groove:horizontal {
|
||||
height: 5px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
}
|
||||
QSlider::groove:vertical {
|
||||
width: 5px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
}
|
||||
QSlider::handle:horizontal {
|
||||
background: rgb(253,253,253);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: rgb(207,207,207);
|
||||
width: 12px;
|
||||
margin: -5px 0;
|
||||
border-radius: 7px;
|
||||
}
|
||||
QSlider::handle:vertical {
|
||||
background: rgb(253,253,253);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: rgb(207,207,207);
|
||||
height: 12px;
|
||||
margin: 0 -5px;
|
||||
border-radius: 7px;
|
||||
}
|
||||
QSlider::add-page:horizontal {
|
||||
background: rgb(181,181,181);
|
||||
}
|
||||
QSlider::add-page:vertical {
|
||||
background: rgb(181,181,181);
|
||||
}
|
||||
QSlider::sub-page:horizontal {
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background-color: qlineargradient(spread:pad, y1:0.5, x1:1, y2:0.5, x2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255));
|
||||
}
|
||||
QScrollBar:horizontal {
|
||||
max-height: 20px;
|
||||
border: 1px transparent grey;
|
||||
margin: 0px 20px 0px 20px;
|
||||
}
|
||||
QScrollBar:vertical {
|
||||
max-width: 20px;
|
||||
border: 1px transparent grey;
|
||||
margin: 20px 0px 20px 0px;
|
||||
}
|
||||
QScrollBar::handle:horizontal {
|
||||
background: rgb(253,253,253);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: rgb(207,207,207);
|
||||
border-radius: 7px;
|
||||
min-width: 25px;
|
||||
}
|
||||
QScrollBar::handle:horizontal:hover {
|
||||
background: rgb(253,253,253);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: rgb(147, 200, 200);
|
||||
border-radius: 7px;
|
||||
min-width: 25px;
|
||||
}
|
||||
QScrollBar::handle:vertical {
|
||||
background: rgb(253,253,253);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: rgb(207,207,207);
|
||||
border-radius: 7px;
|
||||
min-height: 25px;
|
||||
}
|
||||
QScrollBar::handle:vertical:hover {
|
||||
background: rgb(253,253,253);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: rgb(147, 200, 200);
|
||||
border-radius: 7px;
|
||||
min-height: 25px;
|
||||
}
|
||||
QScrollBar::add-line:horizontal {
|
||||
border: 2px transparent grey;
|
||||
border-top-right-radius: 7px;
|
||||
border-bottom-right-radius: 7px;
|
||||
background: rgba(34, 142, 255, 255);
|
||||
width: 20px;
|
||||
subcontrol-position: right;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::add-line:horizontal:pressed {
|
||||
border: 2px transparent grey;
|
||||
border-top-right-radius: 7px;
|
||||
border-bottom-right-radius: 7px;
|
||||
background: rgb(181,181,181);
|
||||
width: 20px;
|
||||
subcontrol-position: right;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::add-line:vertical {
|
||||
border: 2px transparent grey;
|
||||
border-bottom-left-radius: 7px;
|
||||
border-bottom-right-radius: 7px;
|
||||
background: rgba(34, 142, 255, 255);
|
||||
height: 20px;
|
||||
subcontrol-position: bottom;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::add-line:vertical:pressed {
|
||||
border: 2px transparent grey;
|
||||
border-bottom-left-radius: 7px;
|
||||
border-bottom-right-radius: 7px;
|
||||
background: rgb(181,181,181);
|
||||
height: 20px;
|
||||
subcontrol-position: bottom;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::sub-line:horizontal {
|
||||
border: 2px transparent grey;
|
||||
border-top-left-radius: 7px;
|
||||
border-bottom-left-radius: 7px;
|
||||
background: rgba(34, 142, 255, 255);
|
||||
width: 20px;
|
||||
subcontrol-position: left;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::sub-line:horizontal:pressed {
|
||||
border: 2px transparent grey;
|
||||
border-top-left-radius: 7px;
|
||||
border-bottom-left-radius: 7px;
|
||||
background: rgb(181,181,181);
|
||||
width: 20px;
|
||||
subcontrol-position: left;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::sub-line:vertical {
|
||||
border: 2px transparent grey;
|
||||
border-top-left-radius: 7px;
|
||||
border-top-right-radius: 7px;
|
||||
background: rgba(34, 142, 255, 255);
|
||||
height: 20px;
|
||||
subcontrol-position: top;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::sub-line:vertical:pressed {
|
||||
border: 2px transparent grey;
|
||||
border-top-left-radius: 7px;
|
||||
border-top-right-radius: 7px;
|
||||
background: rgb(181,181,181);
|
||||
height: 20px;
|
||||
subcontrol-position: top;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
QScrollBar::left-arrow:horizontal {
|
||||
border: 1px transparent grey;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: white;
|
||||
}
|
||||
QScrollBar::right-arrow:horizontal {
|
||||
border: 1px transparent grey;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: white;
|
||||
}
|
||||
QScrollBar::up-arrow:vertical {
|
||||
border: 1px transparent grey;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: white;
|
||||
}
|
||||
QScrollBar::down-arrow:vertical {
|
||||
border: 1px transparent grey;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: white;
|
||||
}
|
||||
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
|
||||
background: none;
|
||||
}
|
||||
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
|
||||
background: none;
|
||||
}
|
||||
5
src/themes/acqua/colors.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
active=#228eff
|
||||
inactive=#808086
|
||||
off=#3a7bd5, #3a6073
|
||||
on=#00d2ff, #928dab
|
||||
text=#ffffff
|
||||
|
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 270 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 827 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
5
src/themes/console_style/colors.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
active= #ff9900
|
||||
inactive= #616161
|
||||
on=#fc4a1a, #f7b733
|
||||
off= #000000, #434343
|
||||
text=#ffffff
|
||||
413
src/themes/console_style/console_style.qss
Normal file
@@ -0,0 +1,413 @@
|
||||
/*
|
||||
Dark Console Style Sheet for QT Applications
|
||||
Author: Jaime A. Quiroga P.
|
||||
Company: GTRONICK
|
||||
Last updated: 24/05/2018, 17:12.
|
||||
Available at: https://github.com/GTRONICK/QSS/blob/master/ConsoleStyle.qss
|
||||
*/
|
||||
QWidget {
|
||||
background-color:rgb(0, 0, 0);
|
||||
color: rgb(240, 240, 240);
|
||||
border-color: rgb(58, 58, 58);
|
||||
}
|
||||
|
||||
QPlainTextEdit {
|
||||
background-color:rgb(0, 0, 0);
|
||||
color: rgb(200, 200, 200);
|
||||
selection-background-color: rgb(255, 153, 0);
|
||||
selection-color: rgb(0, 0, 0);
|
||||
}
|
||||
|
||||
QFrame[frameShape="4"],
|
||||
QFrame[frameShape="5"]
|
||||
{
|
||||
border: none;
|
||||
background: #FFFFFF;
|
||||
max-width: 1px;
|
||||
}
|
||||
|
||||
QSlider::sub-page:horizontal {
|
||||
background-color: #ff9900;
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background-color: #ff9900;
|
||||
}
|
||||
|
||||
QComboBox {
|
||||
border: 0px solid transparent;
|
||||
border-radius: 2px;
|
||||
padding: 1px 6px 1px 6px;
|
||||
min-width: 2em;
|
||||
}
|
||||
|
||||
QComboBox:!editable {
|
||||
selection-background-color: transparent;
|
||||
selection-color: #FFFFFF;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QComboBox:disabled {
|
||||
color: #616161;
|
||||
}
|
||||
|
||||
QComboBox:!editable:on, QComboBox::drop-down:editable:on {
|
||||
color: #ffffff;
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
}
|
||||
|
||||
QComboBox:on {
|
||||
padding-top: 3px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
QComboBox::drop-down {
|
||||
background-color: transparent;
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 20px;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:enabled {
|
||||
image: url("./themes/console_style/icons/down-arrow.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:disabled {
|
||||
image: url("./themes/console_style/icons/down-arrow_off.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:hover {
|
||||
image: url("./themes/console_style/icons/down-arrow_hover.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:on {
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
}
|
||||
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #232629;
|
||||
}
|
||||
|
||||
QListWidget {
|
||||
background-color: transparent;
|
||||
border: 0px solid transparent;
|
||||
border-bottom: 2px solid #ff9900;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
QListView {
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
outline: 0;
|
||||
border: 0px solid transparent;
|
||||
}
|
||||
QListView::item:hover {
|
||||
color: rgb(200, 200, 200);
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:selected {
|
||||
color: #ff9900;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:disabled {
|
||||
color: #616161;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:disabled:selected {
|
||||
color: #ff9900;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QScrollBar:horizontal {
|
||||
background: transparent;
|
||||
height: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
QScrollBar:vertical {
|
||||
background: transparent;
|
||||
width: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
QScrollBar::handle:horizontal {
|
||||
background: #616161;
|
||||
min-width: 16px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QScrollBar::handle:vertical {
|
||||
background: #616161;
|
||||
min-height: 16px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal,
|
||||
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
|
||||
background: none;
|
||||
}
|
||||
|
||||
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal,
|
||||
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
|
||||
QLineEdit {
|
||||
border-style: outset;
|
||||
border-radius: 10px;
|
||||
border-width: 1px;
|
||||
border-color: #ff9900;
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
QTreeView {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
QTreeView::item:hover {
|
||||
border-right: 2px solid #ff9900;
|
||||
color: rgb(200, 200, 200);
|
||||
}
|
||||
|
||||
QTreeView::item:selected {
|
||||
color: #ff9900;
|
||||
}
|
||||
|
||||
QTreeView::item:active{
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QTreeView::item:disabled{
|
||||
color: rgb(200, 200, 200);
|
||||
}
|
||||
|
||||
QTreeView::item:selected:disabled{
|
||||
color: #ff9900;
|
||||
}
|
||||
|
||||
QTabWidget::pane {
|
||||
border-top: 1px solid #000000;
|
||||
}
|
||||
|
||||
QSpinBox {
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox:disabled {
|
||||
color: #616161;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox::up-button {
|
||||
subcontrol-origin: border;
|
||||
subcontrol-position: top right;
|
||||
width: 16px;
|
||||
image: url("./themes/console_style/icons/up-arrow.png");
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox::up-button:hover {
|
||||
image: url("./themes/console_style/icons/up-arrow_hover.png");
|
||||
}
|
||||
|
||||
QSpinBox::up-button:pressed {
|
||||
image: url("./themes/console_style/icons/up-arrow.png");
|
||||
}
|
||||
|
||||
QSpinBox::up-button:disabled {
|
||||
image: url("./themes/console_style/icons/up-arrow_off.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button {
|
||||
subcontrol-origin: border;
|
||||
subcontrol-position: bottom right;
|
||||
width: 16px;
|
||||
image: url("./themes/console_style/icons/down-arrow.png");
|
||||
border-width: 0px;
|
||||
border-top-width: 0;
|
||||
}
|
||||
|
||||
QSpinBox::down-button:hover {
|
||||
image: url("./themes/console_style/icons/down-arrow_hover.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button:pressed {
|
||||
image: url("./themes/console_style/icons/down-arrow.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button:disabled {
|
||||
image: url("./themes/console_style/icons/down-arrow_off.png");
|
||||
}
|
||||
|
||||
QTabBar::tab {
|
||||
background-color:rgb(0, 0, 0);
|
||||
border-style: outset;
|
||||
border-width: 1px;
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-top-width: 0px;
|
||||
border-style: solid;
|
||||
color: rgb(255, 153, 0);
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
QTabBar::tab:selected, QTabBar::tab:hover {
|
||||
color: rgb(255, 255, 255);
|
||||
background-color:rgb(0, 0, 0);
|
||||
border-color:rgb(42, 42, 42);
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
border-bottom-right-radius:4px;
|
||||
border-bottom-left-radius:4px;
|
||||
}
|
||||
|
||||
QTabBar::tab:last:selected {
|
||||
background-color:rgb(0, 0, 0);
|
||||
border-color:rgb(42, 42, 42);
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
border-bottom-right-radius:4px;
|
||||
border-bottom-left-radius:4px;
|
||||
}
|
||||
|
||||
QTabBar::tab:!selected {
|
||||
margin-bottom: 4px;
|
||||
border-bottom-right-radius:4px;
|
||||
border-bottom-left-radius:4px;
|
||||
}
|
||||
|
||||
QPushButton{
|
||||
/* border-style: outset;
|
||||
border-width: 2px; */
|
||||
/* border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid; */
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 6px;
|
||||
/* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255)); */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:hover{
|
||||
/* border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255));
|
||||
border-bottom-color: rgb(115, 115, 115);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid; */
|
||||
color: rgb(200, 200, 200);
|
||||
padding: 6px;
|
||||
/* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(107, 107, 107, 255), stop:1 rgba(157, 157, 157, 255)); */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:pressed{
|
||||
/* border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(62, 62, 62, 255), stop:1 rgba(22, 22, 22, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid; */
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 6px;
|
||||
/* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255)); */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:disabled{
|
||||
/* border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid; */
|
||||
color: #616161;
|
||||
padding: 6px;
|
||||
/* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(57, 57, 57, 255), stop:1 rgba(77, 77, 77, 255)); */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:checked {
|
||||
color: #ff9900;
|
||||
}
|
||||
|
||||
QProgressBar {
|
||||
text-align: center;
|
||||
color: rgb(255, 255, 255);
|
||||
background-color: #616161;
|
||||
border-width: 1px;
|
||||
border-radius: 10px;
|
||||
border-color: #616161;
|
||||
border-style: inset;
|
||||
}
|
||||
|
||||
QProgressBar::chunk {
|
||||
background-color: #ff9900;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
QMenuBar {
|
||||
background:rgb(0, 0, 0);
|
||||
color: rgb(255, 153, 0);
|
||||
}
|
||||
|
||||
QMenuBar::item {
|
||||
spacing: 3px;
|
||||
padding: 1px 4px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QMenuBar::item:selected {
|
||||
background:rgb(115, 115, 115);
|
||||
}
|
||||
|
||||
QMenu {
|
||||
border-width: 2px;
|
||||
border-radius: 10px;
|
||||
border-color: rgb(255, 153, 0);
|
||||
border-style: outset;
|
||||
}
|
||||
|
||||
QMenu::item {
|
||||
spacing: 3px;
|
||||
padding: 3px 15px;
|
||||
}
|
||||
|
||||
QMenu::item:selected {
|
||||
spacing: 3px;
|
||||
padding: 3px 15px;
|
||||
background:rgb(115, 115, 115);
|
||||
color:rgb(255, 255, 255);
|
||||
border-width: 1px;
|
||||
border-radius: 10px;
|
||||
border-color: rgb(58, 58, 58);
|
||||
border-style: inset;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 270 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 827 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
@@ -109,6 +109,13 @@ QStackedWidget {
|
||||
background: #232629;
|
||||
}
|
||||
|
||||
QSlider::sub-page:horizontal {
|
||||
background-color: #4545e5;
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background-color: #4545e5;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
Progressbar
|
||||
**************************************/
|
||||
|
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 270 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 916 B After Width: | Height: | Size: 916 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 827 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
5
src/themes/elegant_dark/colors.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
active= #00ff00
|
||||
inactive= #9f9f9f
|
||||
on=#fdfc47, #24fe41
|
||||
off=#f2f2f2,#eaeaea
|
||||
text=#000000
|
||||
407
src/themes/elegant_dark/elegant_dark.qss
Normal file
@@ -0,0 +1,407 @@
|
||||
/*
|
||||
ElegantDark Style Sheet for QT Applications
|
||||
Author: Jaime A. Quiroga P.
|
||||
Company: GTRONICK
|
||||
Last updated: 17/04/2018
|
||||
Available at: https://github.com/GTRONICK/QSS/blob/master/ElegantDark.qss
|
||||
*/
|
||||
QMainWindow {
|
||||
background-color:rgb(82, 82, 82);
|
||||
}
|
||||
|
||||
QWidget{
|
||||
background-color: rgb(82, 82, 82)
|
||||
}
|
||||
|
||||
QTextEdit {
|
||||
background-color:rgb(42, 42, 42);
|
||||
color: rgb(0, 255, 0);
|
||||
}
|
||||
|
||||
QSplitter::handle {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QSlider::sub-page:horizontal {
|
||||
background-color: #00ff00;
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background-color: #00ff00;
|
||||
}
|
||||
|
||||
QTreeView {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
border: 0px;
|
||||
color: #AFBDC4;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QTreeView::item:hover {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
QTreeView::item:selected {
|
||||
color: #00ff00;
|
||||
}
|
||||
|
||||
QTreeView::item:active{
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QTreeView::item:disabled{
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
QTreeView::item:selected:disabled{
|
||||
color: #00ff00;
|
||||
}
|
||||
|
||||
QSpinBox {
|
||||
background-color: transparent;
|
||||
color: #AFBDC4;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox:disabled {
|
||||
color: #000000;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox::up-button {
|
||||
subcontrol-origin: border;
|
||||
subcontrol-position: top right;
|
||||
width: 16px;
|
||||
image: url("./themes/elegant_dark/icons/up-arrow.png");
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
QSpinBox::up-button:hover {
|
||||
image: url("./themes/elegant_dark/icons/up-arrow_hover.png");
|
||||
}
|
||||
|
||||
QSpinBox::up-button:pressed {
|
||||
image: url("./themes/elegant_dark/icons/up-arrow.png");
|
||||
}
|
||||
|
||||
QSpinBox::up-button:disabled {
|
||||
image: url("./themes/elegant_dark/icons/up-arrow_off.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button {
|
||||
subcontrol-origin: border;
|
||||
subcontrol-position: bottom right;
|
||||
width: 16px;
|
||||
image: url("./themes/elegant_dark/icons/down-arrow.png");
|
||||
border-width: 0px;
|
||||
border-top-width: 0;
|
||||
}
|
||||
|
||||
QSpinBox::down-button:hover {
|
||||
image: url("./themes/elegant_dark/icons/down-arrow_hover.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button:pressed {
|
||||
image: url("./themes/elegant_dark/icons/down-arrow.png");
|
||||
}
|
||||
|
||||
QSpinBox::down-button:disabled {
|
||||
image: url("./themes/elegant_dark/icons/down-arrow_off.png");
|
||||
}
|
||||
|
||||
QPushButton{
|
||||
border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 2px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255));
|
||||
}
|
||||
QPushButton:hover{
|
||||
border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255));
|
||||
border-bottom-color: rgb(115, 115, 115);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 2px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(107, 107, 107, 255), stop:1 rgba(157, 157, 157, 255));
|
||||
}
|
||||
QPushButton:pressed{
|
||||
border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(62, 62, 62, 255), stop:1 rgba(22, 22, 22, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 2px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255));
|
||||
}
|
||||
QPushButton:disabled{
|
||||
border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
color: rgb(0, 0, 0);
|
||||
padding: 2px;
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(57, 57, 57, 255), stop:1 rgba(77, 77, 77, 255));
|
||||
}
|
||||
QPushButton:checked {
|
||||
color: #00ff00;
|
||||
}
|
||||
|
||||
QLineEdit{
|
||||
border-width: 1px; border-radius: 4px;
|
||||
border-color: rgb(58, 58, 58);
|
||||
border-style: inset;
|
||||
padding: 0 8px;
|
||||
color: rgb(255, 255, 255);
|
||||
background:rgb(100, 100, 100);
|
||||
selection-background-color: rgb(187, 187, 187);
|
||||
selection-color: rgb(60, 63, 65);
|
||||
}
|
||||
|
||||
QLabel{
|
||||
color:rgb(255,255,255);
|
||||
}
|
||||
|
||||
QRadioButton{
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
QComboBox {
|
||||
border: 0px solid transparent;
|
||||
border-radius: 2px;
|
||||
padding: 1px 6px 1px 6px;
|
||||
min-width: 2em;
|
||||
}
|
||||
|
||||
QComboBox:!editable {
|
||||
selection-background-color: transparent;
|
||||
color: #AFBDC4;
|
||||
selection-color: #FFFFFF;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QComboBox:disabled {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
QComboBox:!editable:on, QComboBox::drop-down:editable:on {
|
||||
color: #AFBDC4;
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
}
|
||||
|
||||
QComboBox:on {
|
||||
padding-top: 3px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
QComboBox::drop-down {
|
||||
background-color: transparent;
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 20px;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:enabled {
|
||||
image: url("./themes/elegant_dark/icons/down-arrow.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:disabled {
|
||||
image: url("./themes/elegant_dark/icons/down-arrow_off.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:hover {
|
||||
image: url("./themes/elegant_dark/icons/down-arrow_hover.png");
|
||||
}
|
||||
|
||||
QComboBox::down-arrow:on {
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
}
|
||||
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: rgb(100,100,100);
|
||||
}
|
||||
|
||||
QProgressBar {
|
||||
text-align: center;
|
||||
color: rgb(240, 240, 240);
|
||||
border-width: 1px;
|
||||
border-radius: 10px;
|
||||
border-color: rgb(58, 58, 58);
|
||||
border-style: inset;
|
||||
background-color:rgb(77,77,77);
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: #00ff00;
|
||||
border-radius: 5px;
|
||||
}
|
||||
QMenuBar {
|
||||
background:rgb(82, 82, 82);
|
||||
}
|
||||
QMenuBar::item {
|
||||
color:rgb(223,219,210);
|
||||
spacing: 3px;
|
||||
padding: 1px 4px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QMenuBar::item:selected {
|
||||
background:rgb(115, 115, 115);
|
||||
}
|
||||
QMenu::item:selected {
|
||||
color:rgb(255,255,255);
|
||||
border-width:2px;
|
||||
border-style:solid;
|
||||
padding-left:18px;
|
||||
padding-right:8px;
|
||||
padding-top:2px;
|
||||
padding-bottom:3px;
|
||||
background:qlineargradient(spread:pad, x1:0.5, y1:0.7, x2:0.5, y2:0.3, stop:0 rgba(87, 97, 106, 255), stop:1 rgba(93, 103, 113, 255));
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255));
|
||||
border-bottom-color: rgb(58, 58, 58);
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
QMenu::item {
|
||||
color:rgb(223,219,210);
|
||||
background-color:rgb(78,78,78);
|
||||
padding-left:20px;
|
||||
padding-top:4px;
|
||||
padding-bottom:4px;
|
||||
padding-right:10px;
|
||||
}
|
||||
QMenu{
|
||||
background-color:rgb(78,78,78);
|
||||
}
|
||||
QTabWidget {
|
||||
color:rgb(0,0,0);
|
||||
background-color:rgb(247,246,246);
|
||||
}
|
||||
QTabWidget::pane {
|
||||
border-color: rgb(77,77,77);
|
||||
background-color:rgb(101,101,101);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
QTabBar::tab {
|
||||
padding:2px;
|
||||
color:rgb(250,250,250);
|
||||
background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255));
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
border-top-right-radius:4px;
|
||||
border-top-left-radius:4px;
|
||||
border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(95, 92, 93, 255));
|
||||
border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(95, 92, 93, 255));
|
||||
border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(95, 92, 93, 255));
|
||||
border-bottom-color: rgb(101,101,101);
|
||||
}
|
||||
QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover {
|
||||
background-color:rgb(101,101,101);
|
||||
margin-left: 0px;
|
||||
margin-right: 1px;
|
||||
}
|
||||
QTabBar::tab:!selected {
|
||||
margin-top: 1px;
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
QStatusBar {
|
||||
color:rgb(240,240,240);
|
||||
}
|
||||
|
||||
QTextBrowser {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QListWidget {
|
||||
background-color: transparent;
|
||||
border: 0px solid transparent;
|
||||
}
|
||||
|
||||
QListView {
|
||||
background-color: transparent;
|
||||
color: #AFBDC4;
|
||||
outline: 0;
|
||||
border: 0px solid transparent;
|
||||
}
|
||||
QListView::item:hover {
|
||||
color: #FFFFFF;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:selected {
|
||||
color: #00ff00;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:disabled {
|
||||
color: #9f9f9f;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QListView::item:disabled:selected {
|
||||
color: #00ff00;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QScrollBar:horizontal {
|
||||
background: transparent;
|
||||
height: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
QScrollBar:vertical {
|
||||
background: transparent;
|
||||
width: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
QScrollBar::handle:horizontal {
|
||||
background: rgb(101,101,101);
|
||||
min-width: 16px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QScrollBar::handle:vertical {
|
||||
background: rgb(101,101,101);
|
||||
min-height: 16px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal,
|
||||
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
|
||||
background: none;
|
||||
}
|
||||
|
||||
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal,
|
||||
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
BIN
src/themes/elegant_dark/icons/down-arrow.png
Normal file
|
After Width: | Height: | Size: 270 B |
BIN
src/themes/elegant_dark/icons/down-arrow_hover.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/elegant_dark/icons/down-arrow_off.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/elegant_dark/icons/search_icon.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/themes/elegant_dark/icons/up-arrow.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
src/themes/elegant_dark/icons/up-arrow_hover.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/elegant_dark/icons/up-arrow_off.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/elegant_dark/icons/volume.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/themes/material_design_dark/icons/down-arrow.png
Normal file
|
After Width: | Height: | Size: 270 B |
BIN
src/themes/material_design_dark/icons/down-arrow_hover.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/material_design_dark/icons/down-arrow_off.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 916 B After Width: | Height: | Size: 916 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
src/themes/material_design_dark/icons/search_icon.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/themes/material_design_dark/icons/up-arrow.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
src/themes/material_design_dark/icons/up-arrow_hover.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/material_design_dark/icons/up-arrow_off.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/material_design_dark/icons/volume.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
@@ -26,6 +26,13 @@ QSplitter::handle {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QSlider::sub-page:horizontal {
|
||||
background-color: #88cc00;
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background-color: #88cc00;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
Main menu (Bar)
|
||||
**************************************/
|
||||
BIN
src/themes/material_design_light/icons/down-arrow.png
Normal file
|
After Width: | Height: | Size: 270 B |
BIN
src/themes/material_design_light/icons/down-arrow_hover.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/material_design_light/icons/down-arrow_off.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 916 B After Width: | Height: | Size: 916 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
src/themes/material_design_light/icons/search_icon.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/themes/material_design_light/icons/up-arrow.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
src/themes/material_design_light/icons/up-arrow_hover.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/material_design_light/icons/up-arrow_off.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/themes/material_design_light/icons/volume.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
@@ -26,6 +26,13 @@ QSplitter::handle {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QSlider::sub-page:horizontal {
|
||||
background-color: #6ECE12;
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background-color: #6ECE12;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
Main menu (Bar)
|
||||
**************************************/
|
||||
@@ -12,6 +12,9 @@ from PyQt5.QtCore import QThread, pyqtSignal
|
||||
from constants import Constants, Database, ChecksumWhat
|
||||
from utilities import checksum_ok
|
||||
|
||||
# Needed for pyinstaller compilation.
|
||||
import encodings.idna
|
||||
|
||||
|
||||
class ThreadStatus(Enum):
|
||||
"""Possible thread status."""
|
||||
@@ -45,9 +48,11 @@ class BaseDownloadThread(QThread):
|
||||
class DownloadThread(BaseDownloadThread):
|
||||
"""Subclass BaseDownloadThread. Download the database, images and audio samples."""
|
||||
|
||||
progress = pyqtSignal(int, float)
|
||||
progress = pyqtSignal(int)
|
||||
speed_progress = pyqtSignal(float)
|
||||
_CHUNK = 128 * 1024
|
||||
_MEGA = 1024**2
|
||||
_DELTAT = 2
|
||||
|
||||
def __init__(self):
|
||||
"""Just call super().__init__."""
|
||||
@@ -80,6 +85,7 @@ class DownloadThread(BaseDownloadThread):
|
||||
self.status = ThreadStatus.UNDEFINED
|
||||
self._db = None
|
||||
raw_data = bytes(0)
|
||||
sub_data = bytes(0)
|
||||
try:
|
||||
self._db = urllib3.PoolManager().request(
|
||||
'GET',
|
||||
@@ -88,6 +94,7 @@ class DownloadThread(BaseDownloadThread):
|
||||
timeout=4.0
|
||||
)
|
||||
start = perf_counter()
|
||||
prev_downloaded = 0
|
||||
while True:
|
||||
try:
|
||||
data = self._db.read(self._CHUNK)
|
||||
@@ -98,10 +105,17 @@ class DownloadThread(BaseDownloadThread):
|
||||
if not data:
|
||||
break
|
||||
raw_data += data
|
||||
self.progress.emit(
|
||||
self._pretty_len(raw_data),
|
||||
self._get_download_speed(raw_data, delta)
|
||||
sub_data += data
|
||||
# Emit a progress signal only if at least 1 MB has been downloaded.
|
||||
if len(raw_data) - prev_downloaded >= self._MEGA:
|
||||
prev_downloaded = len(raw_data)
|
||||
self.progress.emit(self._pretty_len(raw_data))
|
||||
if delta >= self._DELTAT:
|
||||
self.speed_progress.emit(
|
||||
self._get_download_speed(sub_data, delta)
|
||||
)
|
||||
sub_data = bytes(0)
|
||||
start = perf_counter()
|
||||
if self._exit_call:
|
||||
self._exit_call = False
|
||||
self._db.release_conn()
|
||||
@@ -128,7 +142,8 @@ class DownloadThread(BaseDownloadThread):
|
||||
if os.path.exists(Constants.DATA_FOLDER):
|
||||
rmtree(Constants.DATA_FOLDER)
|
||||
try:
|
||||
self.progress.emit(Constants.EXTRACTING_CODE, 0.0)
|
||||
self.progress.emit(Constants.EXTRACTING_CODE)
|
||||
self.speed_progress.emit(Constants.ZERO_FINAL_SPEED)
|
||||
with ZipFile(BytesIO(raw_data)) as zipped:
|
||||
zipped.extractall()
|
||||
except Exception:
|
||||
@@ -147,7 +162,7 @@ class _AsyncDownloader:
|
||||
|
||||
|
||||
class UpdateSpaceWeatherThread(BaseDownloadThread, _AsyncDownloader):
|
||||
"""Subclass BaseDownloadThread. Downlaod the space weather data."""
|
||||
"""Subclass BaseDownloadThread. Download the space weather data."""
|
||||
|
||||
_PROPERTIES = ("xray", "prot_el", "ak_index", "sgas", "geo_storm")
|
||||
|
||||