From d4c13f09a7de19c54b9e13395b170b42cc3610a5 Mon Sep 17 00:00:00 2001 From: alessandro90 Date: Sat, 16 Mar 2019 10:54:56 +0100 Subject: [PATCH] Implement themes --- .gitignore | 1 + audio_player.py | 25 +- download_db_window.ui | 39 +- main.py | 202 +++- main_window.ui | 1031 +++++++---------- themes/1-system/icons/nosignalselected.png | Bin 0 -> 21837 bytes themes/1-system/icons/search_icon.png | Bin 0 -> 5486 bytes .../1-system/icons/spectrumnotavailable.png | Bin 0 -> 22174 bytes themes/1-system/icons/volume.png | Bin 0 -> 34475 bytes themes/1-system/system.th | 0 themes/2-dark/dark.th | 239 ++++ themes/3-material_design/icons/down-arrow.png | Bin 0 -> 270 bytes .../icons/down-arrow_hover.png | Bin 0 -> 1732 bytes .../icons/down-arrow_off.png | Bin 0 -> 1737 bytes themes/3-material_design/icons/off.png | Bin 0 -> 820 bytes themes/3-material_design/icons/off_press.png | Bin 0 -> 2928 bytes themes/3-material_design/icons/on.png | Bin 0 -> 916 bytes themes/3-material_design/icons/on_press.png | Bin 0 -> 2987 bytes .../3-material_design/icons/search_icon.png | Bin 0 -> 2017 bytes themes/3-material_design/icons/up-arrow.png | Bin 0 -> 827 bytes .../icons/up-arrow_hover.png | Bin 0 -> 1725 bytes .../3-material_design/icons/up-arrow_off.png | Bin 0 -> 1734 bytes themes/3-material_design/icons/volume.png | Bin 0 -> 17580 bytes themes/3-material_design/material_design.th | 410 +++++++ utilities.py | 91 +- 25 files changed, 1298 insertions(+), 740 deletions(-) create mode 100644 themes/1-system/icons/nosignalselected.png create mode 100644 themes/1-system/icons/search_icon.png create mode 100644 themes/1-system/icons/spectrumnotavailable.png create mode 100644 themes/1-system/icons/volume.png create mode 100644 themes/1-system/system.th create mode 100644 themes/2-dark/dark.th create mode 100644 themes/3-material_design/icons/down-arrow.png create mode 100644 themes/3-material_design/icons/down-arrow_hover.png create mode 100644 themes/3-material_design/icons/down-arrow_off.png create mode 100644 themes/3-material_design/icons/off.png create mode 100644 themes/3-material_design/icons/off_press.png create mode 100644 themes/3-material_design/icons/on.png create mode 100644 themes/3-material_design/icons/on_press.png create mode 100644 themes/3-material_design/icons/search_icon.png create mode 100644 themes/3-material_design/icons/up-arrow.png create mode 100644 themes/3-material_design/icons/up-arrow_hover.png create mode 100644 themes/3-material_design/icons/up-arrow_off.png create mode 100644 themes/3-material_design/icons/volume.png create mode 100644 themes/3-material_design/material_design.th diff --git a/.gitignore b/.gitignore index c158ac8..660e8c3 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ wav_converter.py *.txt icons_imgs TestData +themes/.current_theme diff --git a/audio_player.py b/audio_player.py index 27754e7..2d4c2f5 100644 --- a/audio_player.py +++ b/audio_player.py @@ -3,9 +3,9 @@ import sys from pydub import AudioSegment from pygame import mixer from PyQt5.QtCore import QTimer, QTimer, pyqtSlot, QObject -import qtawesome as qta from utilities import Constants +import qtawesome as qta class AudioPlayer(QObject): # Maybe useless inheriting from QObject @@ -17,7 +17,7 @@ class AudioPlayer(QObject): # Maybe useless inheriting from QObject __time_step = 500 # Milliseconds. - def __init__(self, play, pause, stop, volume, audio_progress): + def __init__(self, play, pause, stop, volume, audio_progress, active_color, inactive_color): super().__init__() self.__paused = False self.__first_call = True @@ -33,18 +33,21 @@ class AudioPlayer(QObject): # Maybe useless inheriting from QObject self.__pause.clicked.connect(self.__pause_audio) self.__stop.clicked.connect(self.__stop_audio) self.__volume.valueChanged.connect(self.__set_volume) - self.__play.setIcon(qta.icon('fa5.play-circle', - color = "#4facf1", - color_disabled = '#7a7a7a')) self.__play.setIconSize(self.__play.size()) - self.__pause.setIcon(qta.icon('fa5.pause-circle', - color = "#4facf1", - color_disabled = '#7a7a7a')) self.__pause.setIconSize(self.__pause.size()) - self.__stop.setIcon(qta.icon('fa5.stop-circle', - color = "#4facf1", - color_disabled = '#7a7a7a')) self.__stop.setIconSize(self.__stop.size()) + self.refresh_btns_colors(active_color, inactive_color) + + def refresh_btns_colors(self, active_color, inactive_color): + self.__play.setIcon(qta.icon('fa5.play-circle', + color = active_color, + color_disabled = inactive_color)) + self.__pause.setIcon(qta.icon('fa5.pause-circle', + color = active_color, + color_disabled = inactive_color)) + self.__stop.setIcon(qta.icon('fa5.stop-circle', + color = active_color, + color_disabled = inactive_color)) @pyqtSlot() def __set_volume(self): diff --git a/download_db_window.ui b/download_db_window.ui index 2f17663..6f3c1f8 100644 --- a/download_db_window.ui +++ b/download_db_window.ui @@ -14,33 +14,7 @@ Download database - QWidget { - background-color: #464646 -} - -QLabel { - color: #ffffff; -} - -QProgressBar { - border: 2px #7a7a7a; - border-radius: 5px; - background-color: #7a7a7a; -} - -QProgressBar::chunk { - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff); - border-radius: 5px; -} - - -QMessageBox { - color: #ffffff; -} - -QPushButton { - color: #ffffff; -} + @@ -73,6 +47,9 @@ Please wait -1 + + false + @@ -83,13 +60,7 @@ Please wait - QPushButton { - background-color: rgb(52,52,52); - color: #FFFFFF; - border: 1px solid gray; - border-radius: 8px; -} - + Cancel diff --git a/main.py b/main.py index 1c584ff..7a14016 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ from collections import namedtuple from functools import partial +from glob import glob import webbrowser import os import sys @@ -7,12 +8,13 @@ import sys from pandas import read_csv from PyQt5.QtWidgets import (QMainWindow, QApplication, + QAction, QMessageBox, qApp, QDesktopWidget, QListWidgetItem, QTreeView, - QTreeWidgetItem) + QTreeWidgetItem,) from PyQt5.QtGui import QPixmap from PyQt5 import uic from PyQt5.QtCore import (QFileInfo, @@ -24,7 +26,12 @@ from audio_player import AudioPlayer from double_text_button import DoubleTextButton from download_window import DownloadWindow -from utilities import Constants, reset_apply_remove_btn + + +from utilities import (Constants, + reset_apply_remove_btn, + throwable_message, + is_valid_html_color,) qt_creator_file = "main_window.ui" Ui_MainWindow, _ = uic.loadUiType(qt_creator_file) @@ -42,6 +49,8 @@ class MyApp(QMainWindow, Ui_MainWindow): self.current_signal_name = '' self.signal_names = [] self.total_signals = 0 + self.active_color = Constants.ACTIVE_COLOR + self.inactive_color = Constants.INACTIVE_COLOR # Manage frequency filters. self.frequency_filters_btns = ( @@ -301,6 +310,13 @@ class MyApp(QMainWindow, Ui_MainWindow): self.reset_location_filters_btn.clicked.connect(self.reset_location_filters) self.locations_list.itemClicked.connect(self.remove_if_unselected_location) + # Find available themes. + self.default_images_folder = os.path.join(Constants.THEMES_FOLDER, + Constants.DEFAULT_THEME, + Constants.ICONS_FOLDER) + # self.find_themes() + # self.set_theme() + # ########################################################################################## self.load_db() @@ -309,16 +325,15 @@ class MyApp(QMainWindow, Ui_MainWindow): self.search_bar.textChanged.connect(self.display_signals) self.result_list.addItems(self.signal_names) self.result_list.currentItemChanged.connect(self.display_specs) - self.result_list.itemDoubleClicked.connect(lambda: self.main_tab.setCurrentWidget( - self.signal_properties_tab - ) - ) + self.result_list.itemDoubleClicked.connect(lambda: self.main_tab.setCurrentWidget(self.signal_properties_tab)) self.display_signals() self.audio_widget = AudioPlayer(self.play, self.pause, self.stop, self.volume, - self.audio_progress) + self.audio_progress, + self.active_color, + self.inactive_color) BandLabel = namedtuple("BandLabel", ["left", "center", "right"]) self.band_labels = [ @@ -334,8 +349,124 @@ class MyApp(QMainWindow, Ui_MainWindow): BandLabel(self.shf_left, self.shf, self.shf_right), BandLabel(self.ehf_left, self.ehf, self.ehf_right), ] + + self.find_themes() + self.set_theme() + self.show() + def find_themes(self): + themes = [] + for theme_folder in os.listdir(Constants.THEMES_FOLDER): + relative_folder = os.path.join(Constants.THEMES_FOLDER, theme_folder) + if os.path.isdir(os.path.abspath(relative_folder)): + relative_folder = os.path.join(Constants.THEMES_FOLDER, theme_folder) + themes.append(relative_folder) + for theme in themes: + theme_name = '&' + ' '.join( + map(lambda s: s.capitalize(), + os.path.basename(theme).split('-')[1].split('_') + ) + ) + new_theme = QAction(theme_name, self) + self.menu_themes.addAction(new_theme) + + @pyqtSlot() + def show_new_theme(theme): + self.change_theme(theme) + self.display_specs(self.result_list.currentItem(), None) + new_theme.triggered.connect(partial(show_new_theme, theme)) + + @pyqtSlot() + def change_theme(self, theme_path): + try: + with open(os.path.join( + theme_path, + os.path.basename(theme_path).split('-')[1] + Constants.THEME_EXTENSION) + ) as stylesheet: + style = stylesheet.read() + self.setStyleSheet(style) + self.download_window.setStyleSheet(style) + except FileNotFoundError: + throwable_message(self, title = "Theme not found", + text = f"Missing theme in {Constants.THEMES_FOLDER} folder.").show() + else: + icons_path = os.path.join(theme_path, Constants.ICONS_FOLDER) + default_icons_path = os.path.join(Constants.THEMES_FOLDER, Constants.DEFAULT_THEME, Constants.ICONS_FOLDER) + + if os.path.exists(os.path.join(icons_path, Constants.NOT_SELECTED)) and \ + os.path.exists(os.path.join(icons_path, Constants.NOT_AVAILABLE)): + self.default_images_folder = icons_path + else: + self.default_images_folder = default_icons_path + + path_to_search_label = os.path.join(icons_path, Constants.SEARCH_LABEL_IMG) + default_search_label = os.path.join(default_icons_path, Constants.SEARCH_LABEL_IMG) + + if os.path.exists(path_to_search_label): + self.search_label.setPixmap(QPixmap(path_to_search_label)) + self.modulation_search_label.setPixmap(QPixmap(path_to_search_label)) + self.location_search_label.setPixmap(QPixmap(path_to_search_label)) + else: + self.search_label.setPixmap(QPixmap(default_search_label)) + self.modulation_search_label.setPixmap(QPixmap(default_search_label)) + self.location_search_label.setPixmap(QPixmap(default_search_label)) + + self.search_label.setScaledContents(True) + self.modulation_search_label.setScaledContents(True) + self.location_search_label.setScaledContents(True) + + path_to_volume_label = os.path.join(icons_path, Constants.VOLUME_LABEL_IMG) + default_volume_label = os.path.join(default_icons_path, Constants.VOLUME_LABEL_IMG) + + if os.path.exists(path_to_volume_label): + self.volume_label.setPixmap(QPixmap(path_to_volume_label)) + else: + self.volume_label.setPixmap(QPixmap(default_volume_label)) + + self.volume_label.setScaledContents(True) + + path_to_colors = os.path.join(theme_path, Constants.THEME_COLORS) + active_color_ok = False + inactive_color_ok = False + valid_format = False + valid_file = False + if os.path.exists(path_to_colors): + valid_file = True + with open(path_to_colors, "r") as colors_file: + for line in colors_file: + if '=' in line: + valid_format = True + quality, color = line.split("=") + color = color.rstrip() + if quality == "active" and is_valid_html_color(color): + self.active_color = color + active_color_ok = True + if quality == "inactive" and is_valid_html_color(color): + self.inactive_color = color + inactive_color_ok = True + + if not all([valid_file, valid_format, active_color_ok, inactive_color_ok]): + self.active_color = Constants.ACTIVE_COLOR + self.inactive_color = Constants.INACTIVE_COLOR + + self.audio_widget.refresh_btns_colors(self.active_color, self.inactive_color) + + try: + with open(os.path.join(Constants.THEMES_FOLDER, + Constants.CURRENT_THEME), "w") as current_theme: + current_theme.write(theme_path) + except: + pass + + def set_theme(self): + current_theme_file = os.path.join(Constants.THEMES_FOLDER, Constants.CURRENT_THEME) + if os.path.exists(current_theme_file): + with open(current_theme_file) as current_theme: + theme = current_theme.read() + if theme != Constants.DEFAULT_THEME: + self.change_theme(theme) + @pyqtSlot(QListWidgetItem) def remove_if_unselected_modulation(self, item): if not item.isSelected(): @@ -440,42 +571,25 @@ class MyApp(QMainWindow, Ui_MainWindow): self.display_signals() def load_db(self): - names = ["name", - "inf_freq", - "sup_freq", - "mode", - "inf_band", - "sup_band", - "location", - "url", - "description", - "modulation", - "category_code", - "acf",] + names = Constants.DB_NAMES try: - self.db = read_csv(os.path.join(Constants.DATA_FOLDER, 'db.csv'), + self.db = read_csv(os.path.join(Constants.DATA_FOLDER, Constants.DB_NAME), sep = '*', header = None, index_col = 0, - dtype = {'inf_freq': str, - 'sup_freq': str, - 'mode': str, - 'inf_band': str, - 'sup_band': str, - 'category_code': str,}, + dtype = {name : str for name in Constants.DB_STRINGS}, names = names,) except FileNotFoundError: self.search_bar.setDisabled(True) box = QMessageBox(self) - box.setWindowTitle("No database") - box.setText("No database available.\n" - "Go to Updates->Update database.") + box.setWindowTitle(Constants.Messages.NO_DB) + box.setText(Constants.Messages.NO_DB_AVAIL) box.show() else: self.signal_names = self.db.index self.total_signals = len(self.signal_names) self.db.fillna(Constants.UNKNOWN, inplace = True) - self.db["url_clicked"] = False + self.db[Constants.DB_WIKI_CLICKED] = False self.update_status_tip(self.total_signals) @staticmethod @@ -530,13 +644,13 @@ class MyApp(QMainWindow, Ui_MainWindow): range_lbl): activate_low = False activate_high = False - color = Constants.INACTIVE_COLOR + color = self.inactive_color title = '' to_display = '' if activate_low_btn.isChecked(): to_display += str(lower_spinbox.value()) + ' ' + lower_unit.currentText() activate_low = True - color = Constants.ACTIVE_COLOR + color = self.active_color if lower_confidence.value() != 0: to_display += ' - ' + str(lower_confidence.value()) + ' %' else: @@ -545,7 +659,7 @@ class MyApp(QMainWindow, Ui_MainWindow): if activate_up_btn.isChecked(): to_display += str(upper_spinbox.value()) + ' ' + upper_unit.currentText() activate_high = True - color = Constants.ACTIVE_COLOR + color = self.active_color if upper_confidence.value() != 0: to_display += ' + ' + str(upper_confidence.value()) + ' %' else: @@ -591,7 +705,7 @@ class MyApp(QMainWindow, Ui_MainWindow): def update_status_tip(self, available_signals): if available_signals < self.total_signals: - self.statusbar.setStyleSheet(f'color: {Constants.ACTIVE_COLOR}') + self.statusbar.setStyleSheet(f'color: {self.active_color}') else: self.statusbar.setStyleSheet('color: #ffffff') self.statusbar.showMessage(f"{available_signals} out of {self.total_signals} signals displayed.") @@ -821,21 +935,21 @@ class MyApp(QMainWindow, Ui_MainWindow): self.description_text.setText(current_signal.at["description"]) for cat, cat_lab in zip(category_code, self.category_labels): if cat == '0': - cat_lab.setStyleSheet(f"color: {Constants.INACTIVE_COLOR};") + cat_lab.setStyleSheet(f"color: {self.inactive_color};") elif cat == '1': - cat_lab.setStyleSheet(f"color: {Constants.ACTIVE_COLOR};") + cat_lab.setStyleSheet(f"color: {self.active_color};") self.set_band_range(current_signal) self.audio_widget.set_audio_player(self.current_signal_name) else: self.url_button.setEnabled(False) self.url_button.setStyleSheet(f"color: {self.url_button.colors.inactive};") self.current_signal_name = '' - self.name_lab.setText("No signal") + self.name_lab.setText("No Signal") self.name_lab.setAlignment(Qt.AlignHCenter) for lab in self.property_labels: lab.setText(Constants.UNKNOWN) for lab in self.category_labels: - lab.setStyleSheet(f"color: {Constants.INACTIVE_COLOR};") + lab.setStyleSheet(f"color: {self.inactive_color};") self.set_band_range() self.audio_widget.set_audio_player() @@ -882,23 +996,21 @@ class MyApp(QMainWindow, Ui_MainWindow): return 10**9 def display_spectrogram(self): - default_pic = os.path.join(Constants.ICONS_FOLDER, "nosignalselected.png") + default_pic = os.path.join(self.default_images_folder, Constants.NOT_SELECTED) item = self.result_list.currentItem() if item: spectrogram_name = item.text() path_spectr = os.path.join(Constants.DATA_FOLDER, Constants.SPECTRA_FOLDER, - spectrogram_name + ".png") + spectrogram_name + Constants.SPECTRA_EXT) if not QFileInfo(path_spectr).exists(): - path_spectr = os.path.join(Constants.ICONS_FOLDER, - "spectrumnotavailable.png") + path_spectr = os.path.join(self.default_images_folder, Constants.NOT_AVAILABLE) else: path_spectr = default_pic self.spectrogram.setPixmap(QPixmap(path_spectr)) - @staticmethod - def activate_band_category(band_label, activate = True): - color = Constants.ACTIVE_COLOR if activate else Constants.INACTIVE_COLOR + def activate_band_category(self, band_label, activate = True): + color = self.active_color if activate else self.inactive_color for label in band_label: label.setStyleSheet(f"color: {color};") diff --git a/main_window.ui b/main_window.ui index 59ef163..6b9a454 100644 --- a/main_window.ui +++ b/main_window.ui @@ -20,135 +20,7 @@ ARTEMIS3 - QWidget { - background-color: #464646 -} - -QLabel { - color: #ffffff; -} - -QPushButton { - color: #FFFFFF -} - -QProgressBar { - border: 2px #7a7a7a; - border-radius: 3px; - background-color: #7a7a7a; -} - -QProgressBar::chunk { - /*background-color: #1d5eff;*/ - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff); - border-radius: 3px; -} - -QAbstractScrollArea::corner { - background: none; - border: none; -} - -QScrollBar:vertical, QScrollBar:horizontal{ - background-color:#343434; - border-radius: 5px; - /*background: none;*/ -} - -QScrollBar:vertical { - margin-top: 0px; - margin-bottom: 0px; - /*width: 10px;*/ -} -QScrollBar:horizontal{ - margin-left: 0px; - margin-right: 0px; - /*height: 10px;*/ -} - -QScrollBar::handle:vertical, QScrollBar::handle:horizontal{ - border-radius: 5px; - border-color: none; - border-width: 1px; - background-color: #999999; -} - -QScrollBar::add-line:vertical, QScrollBar::add-line:horizontal{ - width: 0px; - height: 0px; -} - -QScrollBar::sub-line:vertical, QScrollBar::sub-line:horizontal{ - width: 0px; - height: 0px; -} - -QScrollBar::add-page:vertical{ - border-left: 1px solid gray; - background: transparent; - border-radius: 5px; -/* - border: 1px#343434; - background-color: #343434;*/ -} -QScrollBar::add-page:horizontal{ - border-top: 1px solid gray; - background: transparent; - border-radius: 5px; -/* - border: 1px#343434; - background-color: #343434;*/ -} -QScrollBar::sub-page:vertical{ - border-left: 1px solid gray; - background: transparent; - border-radius: 5px; -/* border: 1px #343434; - background-color: #343434;*/ -} -QScrollBar::sub-page:horizontal{ - border-top: 1px solid gray; - background: transparent; - border-radius: 5px; -/* border: 1px #343434; - background-color: #343434;*/ -} - -QTextEdit{ - color: #ffffff; -} - -QMessageBox { - color: #ffffff; -} - -QToolTip { - color: #000000; -} - -QTextBrowser { - background-color: #464646; - color: #ffffff; - border: 0px; -} - -QRadioButton { - color: #ffffff; -} - -QListWidget { - background-color:rgb(52,52,52); - color: rgb(255, 255, 255); - border: 1px solid gray; - border-radius: 8px; -} - -QLineEdit { - background-color: #343434; - color: rgb(255, 255, 255); - border: 1px solid gray; - border-radius: 5px; -} + @@ -229,7 +101,7 @@ QLineEdit { - icons_imgs/search_icon.png + themes/1-default/icons/search_icon.png true @@ -293,40 +165,7 @@ QLineEdit { Qt::LeftToRight - QTabWidget::pane { /* The tab widget frame */ - /* border-left: 1px solid gray;*/ -} - - -QTabWidget::tab-bar { - left: 30px; /* move to the right by 5px */ -} - - -/* Style the tab using the tab sub-control. Note that - it reads QTabBar _not_ QTabWidget */ -QTabBar::tab { - background: #7a7a7a; - border-top-left-radius: 8px; - border-top-right-radius: 8px; - min-width: 16ex; - padding: 2px; - color: #FFFFFF -} - -QTabBar::tab:selected { - background: #999999; - color: #1d5eff -} - - -QTabBar::tab:!selected { - margin-top: 3px; /* make non-selected tabs look smaller */ -} - -QPushButton:!enabled { - color:#9f9f9f; -} + QTabWidget::North @@ -335,7 +174,7 @@ QPushButton:!enabled { QTabWidget::Rounded - 1 + 0 true @@ -1221,7 +1060,7 @@ p, li { white-space: pre-wrap; } <html><head/><body><p><span style=" color:#000000;">Go to the signal's wiki.</span></p></body></html> - color: #9f9f9f; + Signal's wiki @@ -1929,49 +1768,7 @@ p, li { white-space: pre-wrap; } - QComboBox { - background-color: rgb(52,52,52); - color: #ffffff; - border: 1px solid gray; - border-radius: 5px; -} - -QComboBox:!enabled { - color: #9f9f9f; -} - -QComboBox QAbstractItemView { - border: 1px solid gray; - selection-background-color: #999999; - selection-color: #1d5eff; - color: #ffffff; -} - -QSpinBox { - background-color: rgb(52,52,52); - color: #ffffff; - border: 1px solid gray; - border-radius: 5px; -} - -QSpinBox:!enabled { - color:#9f9f9f; -} - -QPushButton { - background-color: rgb(52,52,52); - border: 1px solid gray; - border-radius: 5px; -} - -QPushButton:!enabled { - color:#9f9f9f; -} - -QPushButton:checked { - color: #39eaff; -} - + 5 @@ -2262,15 +2059,7 @@ QPushButton:checked { - QWidget#freq_filter_container { - border: 1px solid gray; - background-color: rgb(52,52,52); - border-radius: 12px; -} - -QRadioButton, QLabel { - background-color: rgb(52,52,52); -} + @@ -2319,7 +2108,7 @@ QRadioButton, QLabel { - background-color: #464646; + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -2363,7 +2152,7 @@ QRadioButton, QLabel { - background-color: #464646; + MHz @@ -2451,7 +2240,7 @@ QRadioButton, QLabel { - background-color: #464646; + false @@ -2519,7 +2308,7 @@ QRadioButton, QLabel { - background-color: #464646; + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -2566,7 +2355,7 @@ QRadioButton, QLabel { - background-color: #464646; + MHz @@ -2645,7 +2434,7 @@ QRadioButton, QLabel { - background-color: #464646; + false @@ -2796,15 +2585,7 @@ Inactive - QWidget#band_filter_container { - border: 1px solid gray; - background-color: rgb(52,52,52); - border-radius: 12px; -} - -QRadioButton, QLabel { - background-color: rgb(52,52,52); -} + @@ -2836,7 +2617,7 @@ QRadioButton, QLabel { - background-color: #464646; + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -2881,7 +2662,7 @@ QRadioButton, QLabel { - background-color: #464646; + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -2943,7 +2724,7 @@ QRadioButton, QLabel { - background-color: #464646; + false @@ -3019,7 +2800,7 @@ QRadioButton, QLabel { - background-color: #464646; + MHz @@ -3084,7 +2865,7 @@ QRadioButton, QLabel { - background-color: #464646; + false @@ -3137,7 +2918,7 @@ QRadioButton, QLabel { - background-color: #464646; + MHz @@ -3225,7 +3006,7 @@ QRadioButton, QLabel { - color: #9f9f9f; + Selected range: @@ -3311,47 +3092,383 @@ Inactive Category - - - - - 12 - 75 - true - + + + + Qt::Horizontal - - <html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">at least</span> one of the selected categories.</p></body></html> - - - - - - At least one selected - - - true + + + 102 + 20 + + + + + + + + 50 + + + + + + 12 + 75 + true + + + + <html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">at least</span> one of the selected categories.</p></body></html> + + + + + + At least one selected + + + true + + + + + + + + 12 + 75 + true + + + + <html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">all </span>the selected categories.</p></body></html> + + + All selected + + + false + + + + - - - - 12 - 75 - true - + + + Qt::Horizontal - - <html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">all </span>the selected categories.</p></body></html> + + + 102 + 20 + - - All selected - - - false + + + + + + + 0 + 0 + + + + + + + 12 + 75 + true + + + + Number Stations + + + true + + + + + + + + 12 + 75 + true + + + + Time Signal + + + true + + + + + + + + 12 + 75 + true + + + + Interfering + + + true + + + + + + + + 12 + 75 + true + + + + Satellite + + + true + + + + + + + + 12 + 75 + true + + + + Navigation + + + true + + + + + + + + 12 + 75 + true + + + + Utility + + + true + + + + + + + + 12 + 75 + true + + + + Digital + + + true + + + + + + + + 12 + 75 + true + + + + Marine + + + true + + + + + + + + 12 + 75 + true + + + + Commercial + + + true + + + + + + + + 12 + 75 + true + + + + Inactive + + + true + + + + + + + + 12 + 75 + true + + + + Radar + + + true + + + + + + + + 12 + 75 + true + + + + Military + + + true + + + + + + + + 12 + 75 + true + + + + Active + + + true + + + + + + + + 12 + 75 + true + + + + HAM + + + true + + + + + + + + 12 + 75 + true + + + + Aviation + + + true + + + + + + + + 12 + 75 + true + + + + Analogue + + + true + + + + + + + + 12 + 75 + true + + + + Trunked + + + true + + + + @@ -3388,307 +3505,6 @@ Inactive - - - - - 0 - 0 - - - - - - - - 12 - 75 - true - - - - Military - - - true - - - - - - - - 12 - 75 - true - - - - Radar - - - true - - - - - - - - 12 - 75 - true - - - - Active - - - true - - - - - - - - 12 - 75 - true - - - - Inactive - - - true - - - - - - - - 12 - 75 - true - - - - HAM - - - true - - - - - - - - 12 - 75 - true - - - - Commercial - - - true - - - - - - - - 12 - 75 - true - - - - Aviation - - - true - - - - - - - - 12 - 75 - true - - - - Marine - - - true - - - - - - - - 12 - 75 - true - - - - Analogue - - - true - - - - - - - - 12 - 75 - true - - - - Digital - - - true - - - - - - - - 12 - 75 - true - - - - Trunked - - - true - - - - - - - - 12 - 75 - true - - - - Utility - - - true - - - - - - - - 12 - 75 - true - - - - Satellite - - - true - - - - - - - - 12 - 75 - true - - - - Navigation - - - true - - - - - - - - 12 - 75 - true - - - - Interfering - - - true - - - - - - - - 12 - 75 - true - - - - Time Signal - - - true - - - - - - - - 12 - 75 - true - - - - Number Stations - - - true - - - - - - @@ -3838,7 +3654,7 @@ Inactive - + 0 @@ -3965,7 +3781,7 @@ Inactive - + 0 @@ -4073,9 +3889,7 @@ Inactive - background-color: rgb(52,52,52); -border: 1px solid gray; -border-radius: 5px; + Reset all filters @@ -4108,25 +3922,7 @@ border-radius: 5px; - QWidget { -background-color:rgb(52,52,52); -border: 1px solid gray; -border-radius: 8px; -} -QProgressBar { - border: 2px #7a7a7a; - border-radius: 3px; - background-color: #7a7a7a; -} - -QProgressBar::chunk { - /*background-color: #1d5eff;*/ - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff); - border-radius: 3px; -} -QLabel, QPushButton, QSlider { - border: 0px; -} + @@ -4143,17 +3939,10 @@ QWidget { border: 0px; } QPushButton { - /*background-color: #1d5eff;*/ border: 0px solid gray; border-color: #1d5eff; border-radius: 20px; -} - -/* -QPushButton:disabled { - background-color: #7a7a7a; -} -*/ +} @@ -4259,7 +4048,7 @@ QPushButton:disabled { - + 0 @@ -4276,7 +4065,7 @@ QPushButton:disabled { - icons_imgs/volume.png + themes/1-default/icons/volume.png true @@ -4349,7 +4138,7 @@ QSlider::handle:horizontal { - icons_imgs/nosignalselected.png + themes/1-system/icons/nosignalselected.png true @@ -4371,23 +4160,7 @@ QSlider::handle:horizontal { - QMenuBar { - color: rgb(255, 255, 255); -} - -QMenuBar::item:selected { - background:#999999; - color: #1d5eff -} - -QMenu::item:selected { - background-color: #999999; - color: #1d5eff -} - -QMenu { - color: #ffffff; -} + @@ -4404,8 +4177,14 @@ QMenu { + + + Themes + + + diff --git a/themes/1-system/icons/nosignalselected.png b/themes/1-system/icons/nosignalselected.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e40f8e2090eca48f0d3c8a95404c6a16688c58 GIT binary patch literal 21837 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 literal 0 HcmV?d00001 diff --git a/themes/1-system/system.th b/themes/1-system/system.th new file mode 100644 index 0000000..e69de29 diff --git a/themes/2-dark/dark.th b/themes/2-dark/dark.th new file mode 100644 index 0000000..82622f4 --- /dev/null +++ b/themes/2-dark/dark.th @@ -0,0 +1,239 @@ +QMenuBar { + color: rgb(255, 255, 255); +} + +QMenuBar::item:selected { + background:#999999; + color: #1d5eff +} + +QMenu::item:selected { + background-color: #999999; + color: #1d5eff +} + +QMenu { + color: #ffffff; +} + +QWidget { + background-color: #464646 +} + +QLabel { + color: #ffffff; +} + +QPushButton { + color: #FFFFFF; + background-color: rgb(52,52,52); + border: 1px solid gray; + border-radius: 5px; +} + +QPushButton:!enabled { + color:#9f9f9f; +} + +QPushButton:checked { + color: #39eaff; +} + +QTabWidget::pane { /* The tab widget frame */ + /* border-left: 1px solid gray;*/ + border: 0px; +} + + +QTabWidget::tab-bar { + left: 30px; /* move to the right by 5px */ +} + + +/* Style the tab using the tab sub-control. Note that + it reads QTabBar _not_ QTabWidget */ +QTabBar::tab { + background: #7a7a7a; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + min-width: 16ex; + padding: 2px; + color: #FFFFFF +} + +QTabBar::tab:selected { + background: #999999; + color: #1d5eff +} + + +QTabBar::tab:!selected { + margin-top: 3px; /* make non-selected tabs look smaller */ +} + + + +QProgressBar { + border: 2px #7a7a7a; + border-radius: 3px; + background-color: #7a7a7a; +} + +QProgressBar::chunk { + /*background-color: #1d5eff;*/ + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff); + border-radius: 3px; +} + + +QAbstractScrollArea::corner { + background: none; + border: none; +} + +QScrollBar:vertical, QScrollBar:horizontal{ + background-color:#343434; + border-radius: 5px; + /*background: none;*/ +} + +QScrollBar:vertical { + margin-top: 0px; + margin-bottom: 0px; + /*width: 10px;*/ +} +QScrollBar:horizontal{ + margin-left: 0px; + margin-right: 0px; + /*height: 10px;*/ +} + +QScrollBar::handle:vertical, QScrollBar::handle:horizontal{ + border-radius: 5px; + border-color: none; + border-width: 1px; + background-color: #999999; +} + +QScrollBar::add-line:vertical, QScrollBar::add-line:horizontal{ + width: 0px; + height: 0px; +} + +QScrollBar::sub-line:vertical, QScrollBar::sub-line:horizontal{ + width: 0px; + height: 0px; +} + +QScrollBar::add-page:vertical{ + border-left: 1px solid gray; + background: transparent; + border-radius: 5px; +/* + border: 1px#343434; + background-color: #343434;*/ +} +QScrollBar::add-page:horizontal{ + border-top: 1px solid gray; + background: transparent; + border-radius: 5px; +/* + border: 1px#343434; + background-color: #343434;*/ +} +QScrollBar::sub-page:vertical{ + border-left: 1px solid gray; + background: transparent; + border-radius: 5px; +/* border: 1px #343434; + background-color: #343434;*/ +} +QScrollBar::sub-page:horizontal{ + border-top: 1px solid gray; + background: transparent; + border-radius: 5px; +/* border: 1px #343434; + background-color: #343434;*/ +} + +QTextEdit{ + color: #ffffff; +} + +QMessageBox { + color: #ffffff; +} + +QToolTip { + color: #000000; +} + +QTextBrowser { + background-color: #464646; + color: #ffffff; + border: 0px; +} + +QRadioButton { + color: #ffffff; +} + +QListWidget { + background-color:rgb(52,52,52); + color: rgb(255, 255, 255); + border: 1px solid gray; + border-radius: 8px; +} + +QLineEdit { + background-color: #343434; + color: rgb(255, 255, 255); + border: 1px solid gray; + border-radius: 5px; +} + +QComboBox { + background-color: rgb(52,52,52); + color: #ffffff; + border: 1px solid gray; + border-radius: 5px; +} + +QComboBox:!enabled { + color: #9f9f9f; +} + +QComboBox QAbstractItemView { + border: 1px solid gray; + selection-background-color: #999999; + selection-color: #1d5eff; + color: #ffffff; +} + +QSpinBox { + background-color: rgb(52,52,52); + color: #ffffff; + border: 1px solid gray; + border-radius: 5px; +} + +QSpinBox:!enabled { + color:#9f9f9f; +} + +/* SPECIAL WIDGETS */ +QPushButton#url_button { + color: #9f9f9f; + border: 0px; + background-color: #464646; +} + +QPushButton#play, QPushButton#pause, QPushButton#stop { + color: #464646; + border: 0px; + background-color: #464646; +} + +QLabel#band_range_lbl { + color: #9f9f9f; +} diff --git a/themes/3-material_design/icons/down-arrow.png b/themes/3-material_design/icons/down-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..b2cd4a52cf922c10bea9defbcf62c8fba414b23c GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF>t*I;7bhncr0V4trO$q6BL!5X7~m7) z`v3obhE-D;*3M*DJDp)25X}HF)&j{H5O%}PN&A3`xl4llf*E)mix(_B{`k|U&-W_2 zBZ0ymo-U3d9MQ=M2Y6c)rzkp4W9~?cJhtE-Q&NS9p+P7^Ys4*435hGwk`hW?4U2rH yGOoES>hS4Ru(BhQf?@|l0EZHTNE6osCI$^wt}EUB9{Yi2GI+ZBxvXsUDe literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/down-arrow_hover.png b/themes/3-material_design/icons/down-arrow_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ad171d7f16a110e14f720dbf7bd5e3d5e64ecd GIT binary patch literal 1732 zcmb7FOKjXk7fB$2C zpPQeX9X;^q0YMN(%cWwKzsIus{`>gzv1{9yzaEH6XA(geSw&$$EG?FCW|x$b=vSlTfFl1cOvjzTRdH;$d$;UO~14n(^IQ+ zHL|)$Ojn$G4jk)PoFJen2A!Z4CRWE5ySx@3XVa1hx{!3y7N;|VV4*S(92Qeh$Z3!u zRROx0Lz-+V>QSJ`NS9}A#IrS!^8t7 zb#Nr1oSeDT1-fL2iqH0CRW!05_-v!5)%;&J$EpnLI@TcaH0mLl7)Yms{Y6HWvI5BV z_s)XL2c6X>j=~mJcynK7%cbCYXqFuuO zTeJUPct0ehiNglvy;Tx3SEQ^9^%5fO&Q*79N5>k#c^k}z!~V-Zh8>)SoI2+Hxp3~4 zUwChSt6ZF}8RO)}_V(00Pn^fUjyAtqUH|0r-|yF}g|+K%UtfD<>zy0PWr}w^m5EV9GJ$rFt@=!Ff_Co&W zW>Fv6^foRFm&P{M|2%T|uoJz0zm`B?Gy6O)$ifUUp$%pXUa2k#fv9i GTl)ua11Sgq literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/down-arrow_off.png b/themes/3-material_design/icons/down-arrow_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e7f0af30cbf493e2adc6c41e8c1a865d0e135d47 GIT binary patch literal 1737 zcmb7F%WvF795x}KQizmXs?rO_rHI$~y?!YsBzDLy>ZW14Qo@POj>o%J)*fSfvzr_c zL`4FL14pPLf>2QlLi__1AtX?^6p0I{2P6a+Dh>#xhu*??A0`dy1538YGv9o_@AsIW z-&tB*m^gakD8n!lm9kr-@5%f=@*sUawz~)E>!G;(O3Ernqvdc=9WuUu^KzL6_hs;e0F28 zjy6`2>2Wj9v(r6`5`;K|Y%gp_snxT&KCeZ``Lw{XeMq)ybF;ZYcBQ(+IwZktiPr#< zRGHOHUeZKUR-a>KQPKrb7bFFUk|k=EVzR@Fqt+77w`%T-LtFIA=2}@6TY}K-cKNQt zlcXs~rfCYIEXXpT2#~Hv8SH^5Jvm}A;0BE@-247$zDp zp$B6@;>FyhKF~u2F771lzHtu;xQ#;`Whuo<1vYMxjHE4c8|q^D76UZ2)oNkmP%U9t zm`JnvHR{GNAcvyU`g)9o8cs8S6I)J#VMdZVA?;D3mPV3U$6=pZ4kC|q z)2H{ru?sV7b2MiLkR%}Lby=|_(~`|+^W=#GXq9+@zkUE})J55n4XdQz0;L7x!3^FN z>>*yD!N!6EUuC(FbA-4>>#cc_wq^_2Ko7bbYNNn>}H8We6PJ%wv`7JhGu94I;< z{J%B(|Ah}jf?6Ro* LMfZ!jbDRGF>dq>Q literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/off.png b/themes/3-material_design/icons/off.png new file mode 100644 index 0000000000000000000000000000000000000000..ef39d9e77ab00a309f33db4db5b492aa82803ee5 GIT binary patch literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!n2Vh}LpV4%Za?&Y0OWEOctjR6 zFz~y9Fk?orLK9F>vcxr_Bsf2(yEr+qAXP8FD1G)j8z}|`M)3fj z5ZC|z{{z)KI5?PldRn@NnmTw{y8D^B`nY;K}xCB_b23WcUn7aj7y7-v`*)Dz- zuKpIT0T!-)7HcYb6 z+Im~MC$>g}xAsnI>zmRZ5#HW6WzvkfiNXu!PIe)?8r8{=+KXB~ojhlC#zy0+2 zpW?QgV!#kh@N{tui8%arT6*{)1Ch4F_naeBogW|Bd$g4~?(FmTzx73pgOjDH{(!LOvSmd=lkb#hNq#hVys?DWdcm~5o5v2bzM0{4L+E>I z${Qxj$Hvc_Ro_esDzK4XYkg8DCujRJxA3no;_a?HXiG2GkLx(}{p`(2hF3WLKKmP* zSGU#Qji)c|%fVIm1)l8ex0jqyxGwz5$364d41Y8 zCFU%oi2h%zJ^*m^0i97XRKIcE{VBV({70)*<4A9N}`SU=kce8nDMKpW9&WE+U`*t4M oUjBnInaO<)r_3f6CdLN&D#tlb&P+bd3yc~DPgg&ebxsLQ0PsL*W&i*H literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/off_press.png b/themes/3-material_design/icons/off_press.png new file mode 100644 index 0000000000000000000000000000000000000000..3355d12c5bde1379b4ed8a5f0b4b63e4873f4eab GIT binary patch literal 2928 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 literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/on_press.png b/themes/3-material_design/icons/on_press.png new file mode 100644 index 0000000000000000000000000000000000000000..475450803b4d6b419a30a791c06f788956adabc4 GIT binary patch literal 2987 zcmb7G2UHW;8lLDPh=w34xcZP7JRT4xnS^vhkpLz@5CM?|3zNx&L`WtifdoNBln9Cq zEQqp#y1K3nb}jh8h7}IjyMn^5f(Qc7hNAc;h^+2$Th5u>JNJI~|GvN6|4dG3$TXt$ zSZe?Ph+>gn7(V)#AFCnw|4+)q27DN*5q+lv021H)5H|AeRRMrSlQJSoA0-LqBbbT` z%P=WQHL5f?8UO^|Mh%R_qk6IwjZ>;UDIFCjC}gF~lQN4Xfg~Css!)m+XwmQmArZ)e zc!VdTczclrMm}yph3a9lQI(+9@r|C8KD&H;ZeFHQ$bArfyeDOl88EBX^@j-$7|jT4Xml!McBv02Lk4h~ByB<;xeTG938)HH>vcGmK7iFI zFg>PIV1HtIVEYRKJhT$Y0LNFgs8jtlrLLLYoUx+1O zTAUKs0vd3iv2t(cu=TH zrHn6U$+>JPA_ZA=hyzMtrVQkIa1juJxe$!9*laF``RTkLh9sF&Z$AI=7RWFJxAD6? z4wDBl*oYkDAyPIdLzq$!hU6&7Kp6;~g}^*IeL&50trEY8aKh(S&8lQ(RdfbR&O%wB zoPlsb4~PkaTpq&%M7d0)_>8ezQKUN|TCKQl+2pS3+_x>w7J9FkYdW^sH>tRbeNzUm^i zw5=AX5S1j9gepc9O0u$@-Ulj_J0#ZvgsgOdEo-J<;QXLHhnRNm_PetqipdtQ^6QD> zg=Lep0>kaI{&2F%F^|x3TFl;j)bQ*BC+^vsf;|MF?!z7CD8Ryp5DI)bXp!B{b|B+s?D=!6}9}J8ggs)ItWk&ocpy!TgPo|n{4NV zv|&FsK0yhWV{SKV@=o1wO$ma}m6*}EUsRNvU4O9NdfZ_& zqhSm2$tw!fHHEB9weQ{N3QUN-K7_zB*;^EIo>#6Lnq9i`TyU(R&14G4gy%W8N_HI~ zrB~LIj=W9JeD?j^?%$r%O5WZO#+KfNovT8}SzW(d3S?YSr1`}+nVN`cr`FiScxW3R zmIaI%^KSJ0@g$>QZm02Bck0Cp9j-^FbuWC=%5rhplSwoU7x`-D6EdQmiXWeUOi4pRQr!?eW zN{Y1FKi)cPV$SNqamOZPBZXdyRSE0%1_GMb7C`m6+FfTDox>%lK-8# zlsf3R{m6W^=7yswDW=wKa_(;TjO%%6;#=EZB_-A`8u{Pe_-WINt(<~Gj-o487hY;! zw!b5l>~&ofsn6^IWk9zuH;<$ir_=S^>@U`_Xr7CUz}24Cwb zMx)L;3nK*d<0TRE=R*5WWtN23zKXv3oZo)IyXlwd z&(?;!*O39WarZD$%Y3g7S++OV0Y164kM2LsTj%lwtQ2&uM752cWFUQ>9UxDdwNqrHc;)S~IZ| zd4qL+*7v6cUbY1xR>1C|CR2xR;v<6l-VGav?yN{2WT=cNdpA{-<$U(Cq)Zfh@y^hq zIrR@;TW&bk_2yl=LU3*3sL1&(q*@2zT5WlBThq%Juv1$%4&t+IdVPEjcZYI^&zo~} zh$(o=P5a1~>rV%4@48|nj<6fiuoqi;ub?Kxa!KOrrCp-YE&lN*^rPFNLh`Eu*Av%@ zg4{U`K3DG~j_SyIzOUU^Ms6q_V`bM`RRXKTOV|w`ab)I{EhNnx~ClR+r45(_;S+zx}?kng0iC`FiF6 literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/search_icon.png b/themes/3-material_design/icons/search_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0ec52bfc9d027629b93b1cc6943da4da945ee4 GIT binary patch literal 2017 zcmb_dUu@e%9Cq8$ZtY4{%BpH~V0i)!QO7?2iDT2SbxGG`A|>jAT3)7}&*#KSVjJ6S z((YxNiYhdT|4$QQ>|v-v)5P|`3rOn&4~VML${QM*096`1OiUm^3?4WqY3NY)2Sg;t z=ezHIzwh_mcXzL5CntKl_jXeh)tgQwr^uTRpPilLf4cqmW%AnPre5+Xs%Id4+Nd+{ z4pCI+$5w78n8`e^A*URHhNI(1wd@i!MU5V;x)2p{KUE_Pp&YuWyG0jIm2h% z1TI*qMGqfaoXnxcB2o?J;B)k7RU-k)IDmAuT(W(w8fR*8HPQ~dIfkx5f?}K*3lq{a znJk@fJWR`xD2sq3(25!XQC=0K5nAAZ!tn|RM3x5{AJs&aZu}UM%`;4GDtV-li+shI zLJ+tb$5kqoNJWe|UY-N0s&c%*2?9$HtiNCfu*%y0{;dc}>?6-|1Iw}LFe22QxggFE zru7oaZZoXyH)JA$aaHJYAi{?w)qnf;ht;@R!ox6dyqx2d zwiYV8MVU?{=mXQ1Z8#PG>1}YFgaM8-WX)nM04yKNftV(!8W5fd7mu$)Gmc@I3$37{ zq)E{`pu{i+4B&mi2GUH&D??JQRfc)YxptnRn<8onr{s7fF<~ce?@uQZSfHuPEWSk+=L@dkDcv(lL$^#atF`hMbNoFB7RW>SM z$uN# z^O&5i9P{5xc`#4bIkqfi`}X_4O5wr-weBtMpSG)wZ99C)BG$Udi5@naR|)xOUPjm^ zDtY9pX}`oco>nz>tCgJ?znpM%9-37Cq5MRZFY=Y*xmJ7|8X;y8@}-n zx^TAb$VaC?K$m;^mUDwooLU(f-El7aY0sCBtfo?lnSo2cJv=}cf9P5Nx$@0Q?}6d$ zM)%U@pW0CB&2~!t`s9&u`p*JYBqf&5&My<+JzB{*-u! rdTMDewU7FqI@CpJ)YZ0IORK%R_MBLIapSwb@DfgsPbM!Oo;~#!GI@nY literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/up-arrow.png b/themes/3-material_design/icons/up-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0f09084c07abaefcb2695d8ead0df3c57c5f52 GIT binary patch literal 827 zcmV-B1H}A^P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+Kp6MlHDK-{O1%o0@_%P!&;RaL~7KqOwD*<@Y^Bv0-NFaR;bTc8R==D>P#yNYt1Bw@tBn3NR_Y!$Y8N7)&93nf? z1xj4^znqUD(8%;E-*? zANaeh7c99P&O!W8l<>UZoITAswt*H6n6+?C(Ot|51jCAZtRf7h=q3SwINKBeX~USt zi>9xj>>H7v#2|8D))ETTDB@HqWLuV?Px$Jfxk)H8voh0Qh5dkRoU1rppq{*OXCBC$ z{D6@nn9}$ext|(-M{}-eMS1D^*JwAJS6@)gYWvz@h9=Mr?UxyOEO9;^2h@GKpnHDo zTSwly)q;Ssw+op7(nfCHne8Wey3reQMh$UE) z1>CIxI)eNRq2tE;y}3R3^Qnp@Rk55}kx6W>Y_=9#Hv9Yhz#9tz0LEi1(hsz;>J0$z z*JBZx#L*!Epgvv3B06w$7Xw6xW literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/up-arrow_hover.png b/themes/3-material_design/icons/up-arrow_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..149eae09cd9d89aa607d65f722735edfda90fe1d GIT binary patch literal 1725 zcmb7FOKjXk81}XWLYqjSUP?J&xdMV(~r+M{fv#2dORv0+J8YT(rIc)aUm?Qv}< zyIG;Cs!$~k9N>haA|Xzk;0^}_2jI}C#~!$p3lbm%QZC^X#`_`-=>to)$1~r2|Mx%U z_xp|IOEag>pB4mRrdF-2@b@$MJ@q7izOZ+I`RnPp`gSS^XU^t#LD;!J!r0F zYxOq}VWEsY=2E#A#vCmObMw6zlMR}QE^P%-S^D$qZzM7B%F^XxU9HCsZ3oqULRb6C zP14^WwkOSB6z6(~6NEIwVlV7ODe9G_0Wad?d|Hvj0VLZfOAEO{ajo7E9hOkBD4T#l zLlaB33{BP6jMqd>g(XETDNqM0M5>8&TO3^yx0ZN5TB*D~vc`a1TW3g)u{grX&gCEMSqCGh&x*W@U*h9l8+46WS;pg^34D z>ET#`vYNXz0D5GCi#L>g+MywhvXo=t1RJ+m#?m%>0QF?~J_9_o_4>rdv0B1# zVj|6!wzwOkfEtK97G=L zrmq}=(+bXLS>idf0E9p-H8mYU8)^2ddGgdDw9dT1-#!AhnyQ9$6+z=ZC@&ZfXZVp| zk075VA?EG|A#PD6j#`p92_kY>hb7!FSEnDIuQ^U5VSdoz3+c+GMX|Qzn9w#&pviC` zw_ZoJD9vz0XsuF~cxdDx@R0678|$P9DD+j}S%wX4)%Ac|qy+j!-G`<<-d|y4GcSOA z|L`n$jBt*B6@@PW_vRU_;JLY!>qX~k27l6 zuw4sVz;|r}=p{o3F10P7`>Np=A;c~=^P(Tr5vm3$&+zu>7_HK)qfsXi2c?5B$&W-? zB6%%PPZ~`J$He2YERXhg+mw?&q)LX?Q|4z~oX~|9kKH3`Pn%1*q|KMQ${XUqw zwtM%E%olFnyE}dM2Qr0sPfdUO+26NM+$x;;$kE^H?OM}?^YJfM<1hWKoeyUUzZQO@ v?XUVfPyIOi(mVRx?d$#P{pW68^G^u-?_T+1b^lW*|H0IjmMdQ@Ub*oPW?Unv literal 0 HcmV?d00001 diff --git a/themes/3-material_design/icons/up-arrow_off.png b/themes/3-material_design/icons/up-arrow_off.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2217f10db8821aac2a37fa06d2dcc8f705f26b GIT binary patch literal 1734 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 literal 0 HcmV?d00001 diff --git a/themes/3-material_design/material_design.th b/themes/3-material_design/material_design.th new file mode 100644 index 0000000..e5b9d6e --- /dev/null +++ b/themes/3-material_design/material_design.th @@ -0,0 +1,410 @@ +/***************************************************************************** +MainWindow +*****************************************************************************/ +QWidget:window { + border: 0px solid #2e2f34; + background-color: #2e2f34; +} + +/***************************************************************************** +Search bar +*****************************************************************************/ +QLineEdit { + background-color: transparent; + border: 0px solid transparent; + border-bottom: 2px solid #669900; + color: #669900; +} + +/***************************************************************************** +Scroll Bars +*****************************************************************************/ +QScrollBar:horizontal { + background: transparent; /* Background where slider is not */ + height: 10px; + margin: 0; +} + +QScrollBar:vertical { + background: transparent; /* Background where slider is not */ + width: 10px; + margin: 0; +} + +QScrollBar::handle:horizontal { + background: #37474F; /* Slider color */ + min-width: 16px; + border-radius: 5px; +} + +QScrollBar::handle:vertical { + background: #37474F; /* Slider color */ + min-height: 16px; + border-radius: 5px; +} + +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + background: none; /* Removes the dotted background */ +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal, +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { /* Hides the slider arrows */ + border: none; + background: none; +} + +/***************************************************************************** +List +*****************************************************************************/ +QListWidget { + background-color: transparent; + border: 0px solid transparent; + border-bottom: 2px solid #80CBC4; + color: #c2cfd6; +} + +QListView::item:hover { + color: #669900; + background: transparent; +} + +QListView::item:selected { + color: #88cc00; + background: transparent; +} + +QListView { + background-color: transparent; + color: #c2cfd6; + outline: 0; + border: 0px solid transparent; +} + +/* === QTabBar === */ +QTabBar { + background: transparent; +} + +QTabWidget::pane { + background: transparent; /* Only at the very bottom of the tabs */ +} + +QTabBar::tab { + background: transparent; + border: 0px solid transparent; + border-bottom: 2px solid transparent; + color: #546E7A; + padding-left: 10px; + padding-right: 10px; + padding-top: 3px; + padding-bottom: 3px; +} + +QTabBar::tab:hover { + background-color: transparent; + border: 0px solid transparent; + border-bottom: 2px solid #88cc00; + color: #AFBDC4; +} + +QTabBar::tab:selected { + background-color: transparent; + border: 0px solid transparent; + border-top: none; + border-bottom: 2px solid #88cc00; + color: #FFFFFF; +} + +QStackedWidget { + background: #2e2f34;/* This covers a bunch of things, I was thinking about making it transparent, */ + /* but I would have to find all the other elements... but QTabWidget::pane may be it */ +} + +/* ==================== Dialog ==================== */ +QLabel { + background: transparent; + color: #CFD8DC; /* Not sure about this one */ +} + +QDialog { + background-color: #263238; + color: #546E7A; + outline: 0; + border: 2px solid transparent; +} + +/***************************************************************************** +Buttons +*****************************************************************************/ + +QToolTip { + background-color: #80CBC4; + color: black; + padding: 5px; + border-radius: 0; + opacity: 200; +} + +QPushButton { + background-color: transparent; + color: #c2cfd6; + border: 1px solid transparent; + padding: 4px 22px; +} + +QPushButton:hover { + border-left: 2px solid #88cc00; + border-right: 2px solid #88cc00; + color: #f0f3f5; +} + +QPushButton:pressed { + color: #efffcc; +} + +QPushButton:disabled { + color:#546E7A; +} + +QPushButton:checked { + color: #88cc00; +} + +/***************************************************************************** +Rich Text Box +*****************************************************************************/ +QTextBrowser { + background: transparent; + border: 0px solid transparent; + color: #546E7A; +} + +/***************************************************************************** +Main Menu (Upper part) +*****************************************************************************/ +QTreeView { + background-color: #263238; +} + +QMenu { + background-color: #263238; /* File Menu Background color */ + color: #546E7A; +} + +QMenu::item:selected { + color: #AFBDC4; +} + +QMenu::item:pressed { + color: #FFFFFF; +} + +QMenu::separator { + height: 1px; + background: transparent; /* Could change this to #546E7A and reduce the margin top and bottom to 1px */ + margin-left: 10px; + margin-right: 10px; + margin-top: 5px; + margin-bottom: 5px; +} + +/***************************************************************************** +Main Menu (Bar) +*****************************************************************************/ +QMenuBar { + background-color: transparent; + color: #546E7A; +} + +QMenuBar::item { + background: transparent; +} + +QMenuBar::item:disabled { + color: gray; +} + +QMenuBar::item:selected { + color: #AFBDC4; +} + +QMenuBar::item:pressed { + color: #FFFFFF; +} + +QToolBar { + background: transparent; + border: 1px solid transparent; +} + +QToolBar:handle { + background: transparent; + border-left: 2px dotted #80CBC4; /* Fix the 4 handle dots so it doesn't look crappy */ + color: transparent; +} + +QToolBar::separator { + border: 0; +} + +/***************************************************************************** +ComboBox +*****************************************************************************/ +QComboBox { + border: 0px solid gray; + border-radius: 2px; + padding: 1px 6px 1px 6px; + min-width: 2em; +} + +QComboBox:!editable, QComboBox::drop-down:editable { + color: #c2cfd6; + selection-color: #80CBC4; + background-color: transparent; + selection-background-color: transparent; +} + +QComboBox:disabled { + color: #546E7A; +} + +/* QComboBox gets the "on" state when the popup is open */ +QComboBox:!editable:on, +QComboBox::drop-down:editable:on { + color: #c2cfd6; + background-color: transparent; + selection-background-color: transparent; +} + +QComboBox:on { /* shift the text when the popup opens */ + 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/3-material_design/icons/down-arrow.png"); +} + +QComboBox::down-arrow:disabled { + image: url("./themes/3-material_design/icons/down-arrow_off.png"); +} + +QComboBox::down-arrow:hover { + image: url("./themes/3-material_design/icons/down-arrow_hover.png"); +} + +QComboBox::down-arrow:on { /* shift the arrow when popup is open */ + top: 1px; + left: 1px; +} + +QComboBox QAbstractItemView { +background-color: #2e2f34; +} + +/***************************************************************************** +RadioButton +*****************************************************************************/ + +QRadioButton{ + color: #c2cfd6; +} + +QRadioButton:disabled{ + color: #546E7A; +} + +QRadioButton::indicator{ + width: 50px; + height: 50px; +} + +QRadioButton::indicator::unchecked { + image: url("./themes/3-material_design/icons/off.png"); +} + +QRadioButton::indicator:unchecked:hover { + image: url("./themes/3-material_design/icons/off_press.png"); +} + +QRadioButton::indicator:unchecked:pressed { + image: url("./themes/3-material_design/icons/off_press.png"); +} + +QRadioButton::indicator::checked { + image: url("./themes/3-material_design/icons/on.png"); +} + +QRadioButton::indicator:checked:hover { + image: url("./themes/3-material_design/icons/on_press.png"); +} + +QRadioButton::indicator:checked:pressed { + image: url("./themes/3-material_design/icons/on_press.png"); +} + +/***************************************************************************** +SpinBox +*****************************************************************************/ +QSpinBox { + color: #c2cfd6; + border-width: 0px; + background: transparent; +} + +QSpinBox:disabled { + color: #546E7A; + border-width: 0px; + background: transparent; +} + +QSpinBox::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 16px; + image: url("./themes/3-material_design/icons/up-arrow.png"); + border-width: 0px; +} + +QSpinBox::up-button:hover { + image: url("./themes/3-material_design/icons/up-arrow_hover.png"); +} + +QSpinBox::up-button:pressed { + image: url("./themes/3-material_design/icons/up-arrow.png"); +} + +QSpinBox::up-button:disabled { + image: url("./themes/3-material_design/icons/up-arrow_off.png"); +} + +QSpinBox::down-button { + subcontrol-origin: border; + subcontrol-position: bottom right; /* position at bottom right corner */ + width: 16px; + image: url("./themes/3-material_design/icons/down-arrow.png"); + border-width: 0px; + border-top-width: 0; +} + +QSpinBox::down-button:hover { + image: url("./themes/3-material_design/icons/down-arrow_hover.png"); +} + +QSpinBox::down-button:pressed { + image: url("./themes/3-material_design/icons/down-arrow.png"); +} + +QSpinBox::down-button:disabled { + image: url("./themes/3-material_design/icons/down-arrow_off.png"); +} \ No newline at end of file diff --git a/utilities.py b/utilities.py index 9e1453a..3f58e4d 100644 --- a/utilities.py +++ b/utilities.py @@ -1,37 +1,70 @@ from collections import namedtuple import hashlib +import re from pandas import read_csv -class _ReadOnlyProperty(object): - def __init__(self, value): - self.__value = value +from PyQt5.QtWidgets import QMessageBox + +# class _ReadOnlyProperty(object): +# def __init__(self, value): +# self.__value = value - def __get__(self, obj, objtype): - return self.__value +# def __get__(self, obj, objtype): +# return self.__value - def __set__(self, obj, value): - return NotImplementedError("Cannot change a constant.") +# def __set__(self, obj, value): +# return NotImplementedError("Cannot change a constant.") - # def change_hardcoded_value(self, value): - # self.__value = value +# def __make_read_only(cls): +# for k, v in cls.__dict__.items(): +# if not callable(getattr(cls, k)) and '__' not in k: +# setattr(cls, k, _ReadOnlyProperty(v)) +# # def raise_err(self, attr, value): +# # raise NotImplementedError("Cannot add an attribute.") +# # setattr(cls, '__setattr__', raise_err) +# return cls -def __make_read_only(cls): - for k, v in cls.__dict__.items(): - if not callable(getattr(cls, k)) and '__' not in k: - setattr(cls, k, _ReadOnlyProperty(v)) - # def raise_err(self, attr, value): - # raise NotImplementedError("Cannot add an attribute.") - # setattr(cls, '__setattr__', raise_err) - return cls - -@__make_read_only -class __Constants(object): +# @__make_read_only +class Constants(object): + class Messages(object): + NO_DB_AVAIL = "No database available.\nGo to Updates->Update database." + NO_DB = "No database" DB_LOCATION = "https://aresvalley.com/Storage/Artemis/Database/data.zip" REF_LOC = "https://aresvalley.com/Storage/Artemis/Database/data.zip.log" + DB_NAME = "db.csv" + DB_NAMES = ("name", + "inf_freq", + "sup_freq", + "mode", + "inf_band", + "sup_band", + "location", + "url", + "description", + "modulation", + "category_code", + "acf",) + DB_WIKI_CLICKED = "url_clicked" + DB_STRINGS = ('inf_freq', + 'sup_freq', + 'mode', + 'inf_band', + 'sup_band', + 'category_code',) DATA_FOLDER = "Data" SPECTRA_FOLDER = "Spectra" + SPECTRA_EXT = ".png" AUDIO_FOLDER = "Audio" - ICONS_FOLDER = "icons_imgs" + THEMES_FOLDER = "themes" + THEME_EXTENSION = ".th" + ICONS_FOLDER = "icons" + DEFAULT_THEME = "1-system" + CURRENT_THEME = ".current_theme" + THEME_COLORS = "colors.txt" + NOT_AVAILABLE = "spectrumnotavailable.png" + NOT_SELECTED = "nosignalselected.png" + SEARCH_LABEL_IMG = "search_icon.png" + VOLUME_LABEL_IMG = "volume.png" __Band = namedtuple("Band", ["lower", "upper"]) __ELF = __Band(0, 30) # Formally it is (3, 30) Hz. __SLF = __Band(30, 300) @@ -88,7 +121,6 @@ class __Constants(object): "PSK", "QAM", "TDMA",) - LOCATIONS = (UNKNOWN, "Australia", "Canada", @@ -121,13 +153,21 @@ class __Constants(object): "World Wide", "Worldwide",) -Constants = __Constants() +# Constants = __Constants() def reset_apply_remove_btn(button): if button.isChecked(): button.setChecked(False) button.clicked.emit() +def throwable_message(cls, title, text, connection = None): + msg = QMessageBox(cls) + msg.setWindowTitle(title) + msg.setText(text) + if connection: + msg.setText(text).finished.connect(connection) + return msg + def checksum_ok(data, what): code = hashlib.sha256() code.update(data) @@ -141,4 +181,7 @@ def checksum_ok(data, what): reference = read_csv(Constants.REF_LOC, delimiter = '*').iat[-1, n] except HTTPError: return False - return code.hexdigest() == reference \ No newline at end of file + return code.hexdigest() == reference + +def is_valid_html_color(color): + return bool(re.match("#([a-zA-Z0-9]){6}", color))