Add clickable progress bar class. Few changes of main screen. Round floating point numbers to 2 decimanl digits in man screen. Hide border in mode screen for themes
This commit is contained in:
@@ -27,7 +27,7 @@ from audio_player import AudioPlayer
|
||||
from space_weather_data import SpaceWeatherData
|
||||
from double_text_button import DoubleTextButton
|
||||
from download_window import DownloadWindow
|
||||
from switchable_label import SwitchableLabel, SwitchableLabelsIterable
|
||||
from switchable_label import SwitchableLabelsIterable
|
||||
from constants import (Constants,
|
||||
Ftype,
|
||||
GfdType,
|
||||
@@ -376,7 +376,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
||||
|
||||
# Space weather
|
||||
self.info_now_btn.clicked.connect(lambda : webbrowser.open(Constants.FORECAST_INFO))
|
||||
self.update_now_btn.clicked.connect(self.start_update_space_weather)
|
||||
self.update_now_bar.clicked.connect(self.start_update_space_weather)
|
||||
self.update_now_bar.set_idle()
|
||||
self.space_weather_data = SpaceWeatherData()
|
||||
self.space_weather_data.update_complete.connect(self.update_space_weather)
|
||||
self.switchable_r_labels = SwitchableLabelsIterable(self.r0_now_lbl,
|
||||
@@ -464,12 +465,12 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
||||
@pyqtSlot()
|
||||
def start_update_space_weather(self):
|
||||
if not self.space_weather_data.is_updating:
|
||||
self.update_now_bar.setMaximum(self.update_now_bar.minimum())
|
||||
self.update_now_bar.set_updating()
|
||||
self.space_weather_data.update()
|
||||
|
||||
@pyqtSlot(bool)
|
||||
def update_space_weather(self, status_ok):
|
||||
self.update_now_bar.setMaximum(self.update_now_bar.minimum() + 1)
|
||||
self.update_now_bar.set_idle()
|
||||
if status_ok:
|
||||
xray_long = float(self.space_weather_data.xray[-1][7])
|
||||
format_text = lambda letter, power : letter + f"{xray_long * 10**power:.1f}"
|
||||
|
||||
966
artemis.ui
966
artemis.ui
File diff suppressed because it is too large
Load Diff
31
clickable_progress_bar.py
Normal file
31
clickable_progress_bar.py
Normal file
@@ -0,0 +1,31 @@
|
||||
from PyQt5.QtWidgets import QProgressBar
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from constants import Constants
|
||||
|
||||
class ClickableProgressBar(QProgressBar):
|
||||
|
||||
clicked = pyqtSignal()
|
||||
|
||||
def __init__(self, parent = None):
|
||||
self.__text = ''
|
||||
super().__init__(parent)
|
||||
|
||||
def __set_text(self, text):
|
||||
self.__text = text
|
||||
|
||||
def text(self):
|
||||
return self.__text
|
||||
|
||||
def set_idle(self):
|
||||
self.__set_text(Constants.CLICK_TO_UPDATE_STR)
|
||||
self.setMaximum(self.minimum() + 1)
|
||||
|
||||
def set_updating(self):
|
||||
self.__set_text(Constants.UPDATING_STR)
|
||||
self.setMaximum(self.minimum())
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
if event.button() == Qt.LeftButton:
|
||||
self.clicked.emit()
|
||||
else:
|
||||
super().mousePressEvent(event)
|
||||
182
constants.py
182
constants.py
@@ -91,65 +91,67 @@ class Colors(object):
|
||||
YELLOW_LIGHT = "#ffff33"
|
||||
|
||||
class Constants(object):
|
||||
ACF_DOCS = "https://aresvalley.com/documentation/"
|
||||
FORECAST_XRAY = "https://services.swpc.noaa.gov/text/goes-xray-flux-primary.txt"
|
||||
FORECAST_PROT = "https://services.swpc.noaa.gov/text/goes-particle-flux-primary.txt"
|
||||
FORECAST_AK_IND = "https://services.swpc.noaa.gov/text/wwv.txt"
|
||||
FORECAST_SGAS = "https://services.swpc.noaa.gov/text/sgas.txt"
|
||||
FORECAST_G = "https://services.swpc.noaa.gov/text/3-day-forecast.txt"
|
||||
FORECAST_INFO = "https://www.swpc.noaa.gov/sites/default/files/images/NOAAscales.pdf"
|
||||
FORECAST_IMG_0 = "http://www.mmmonvhf.de/eme/eme.png"
|
||||
FORECAST_IMG_1 = "http://www.mmmonvhf.de/ms/ms.png"
|
||||
FORECAST_IMG_2 = "http://www.mmmonvhf.de/es/es.png"
|
||||
FORECAST_IMG_3 = "http://www.mmmonvhf.de/solar/solar.png"
|
||||
FORECAST_IMG_4 = "http://amunters.home.xs4all.nl/eskipstatusNA.gif"
|
||||
FORECAST_IMG_5 = "http://amunters.home.xs4all.nl/aurorastatus.gif"
|
||||
FORECAST_IMG_6 = "http://amunters.home.xs4all.nl/eskipstatus.gif"
|
||||
FORECAST_IMG_7 = "http://amunters.home.xs4all.nl/eskip50status.gif"
|
||||
FORECAST_IMG_8 = "http://amunters.home.xs4all.nl/eskip70status.gif"
|
||||
SEARCH_LABEL_IMG = "search_icon.png"
|
||||
VOLUME_LABEL_IMG = "volume.png"
|
||||
DATA_FOLDER = "Data"
|
||||
SPECTRA_FOLDER = "Spectra"
|
||||
SPECTRA_EXT = ".png"
|
||||
AUDIO_FOLDER = "Audio"
|
||||
ACTIVE = "active"
|
||||
INACTIVE = "inactive"
|
||||
NOT_AVAILABLE = "spectrumnotavailable.png"
|
||||
NOT_SELECTED = "nosignalselected.png"
|
||||
__Band = namedtuple("Band", ["lower", "upper"])
|
||||
__ELF = __Band(0, 30) # Formally it is (3, 30) Hz.
|
||||
__SLF = __Band(30, 300)
|
||||
__ULF = __Band(300, 3000)
|
||||
__VLF = __Band(3000, 30000)
|
||||
__LF = __Band(30 * 10**3, 300 * 10**3)
|
||||
__MF = __Band(300 * 10 ** 3, 3000 * 10**3)
|
||||
__HF = __Band(3 * 10**6, 30 * 10**6)
|
||||
__VHF = __Band(30 * 10**6, 300 * 10**6)
|
||||
__UHF = __Band(300 * 10**6, 3000 * 10**6)
|
||||
__SHF = __Band(3 * 10**9, 30 * 10**9)
|
||||
__EHF = __Band(30 * 10**9, 300 * 10**9)
|
||||
BANDS = (__ELF, __SLF, __ULF, __VLF, __LF, __MF, __HF, __VHF, __UHF, __SHF, __EHF)
|
||||
MAX_DIGITS = 3
|
||||
RANGE_SEPARATOR = ' ÷ '
|
||||
GFD_SITE = "http://qrg.globaltuners.com/"
|
||||
CONVERSION_FACTORS = {"Hz" : 1,
|
||||
"kHz": 1000,
|
||||
"MHz": 1000000,
|
||||
"GHz": 1000000000}
|
||||
MODES = {"FM": ("NFM", "WFM"),
|
||||
"AM": (),
|
||||
"CW": (),
|
||||
"SK": ("FSK", "PSK", "MSK"),
|
||||
"SB": ("LSB", "USB", "DSB"),
|
||||
"Chirp Spread Spectrum": (),
|
||||
"FHSS-TDM": (),
|
||||
"RAW": (),
|
||||
"SC-FDMA": (),}
|
||||
APPLY = "Apply"
|
||||
REMOVE = "Remove"
|
||||
UNKNOWN = "N/A"
|
||||
MODULATIONS = ("8VSB",
|
||||
CLICK_TO_UPDATE_STR = "Click to update"
|
||||
UPDATING_STR = "Updating..."
|
||||
ACF_DOCS = "https://aresvalley.com/documentation/"
|
||||
FORECAST_XRAY = "https://services.swpc.noaa.gov/text/goes-xray-flux-primary.txt"
|
||||
FORECAST_PROT = "https://services.swpc.noaa.gov/text/goes-particle-flux-primary.txt"
|
||||
FORECAST_AK_IND = "https://services.swpc.noaa.gov/text/wwv.txt"
|
||||
FORECAST_SGAS = "https://services.swpc.noaa.gov/text/sgas.txt"
|
||||
FORECAST_G = "https://services.swpc.noaa.gov/text/3-day-forecast.txt"
|
||||
FORECAST_INFO = "https://www.swpc.noaa.gov/sites/default/files/images/NOAAscales.pdf"
|
||||
FORECAST_IMG_0 = "http://www.mmmonvhf.de/eme/eme.png"
|
||||
FORECAST_IMG_1 = "http://www.mmmonvhf.de/ms/ms.png"
|
||||
FORECAST_IMG_2 = "http://www.mmmonvhf.de/es/es.png"
|
||||
FORECAST_IMG_3 = "http://www.mmmonvhf.de/solar/solar.png"
|
||||
FORECAST_IMG_4 = "http://amunters.home.xs4all.nl/eskipstatusNA.gif"
|
||||
FORECAST_IMG_5 = "http://amunters.home.xs4all.nl/aurorastatus.gif"
|
||||
FORECAST_IMG_6 = "http://amunters.home.xs4all.nl/eskipstatus.gif"
|
||||
FORECAST_IMG_7 = "http://amunters.home.xs4all.nl/eskip50status.gif"
|
||||
FORECAST_IMG_8 = "http://amunters.home.xs4all.nl/eskip70status.gif"
|
||||
SEARCH_LABEL_IMG = "search_icon.png"
|
||||
VOLUME_LABEL_IMG = "volume.png"
|
||||
DATA_FOLDER = "Data"
|
||||
SPECTRA_FOLDER = "Spectra"
|
||||
SPECTRA_EXT = ".png"
|
||||
AUDIO_FOLDER = "Audio"
|
||||
ACTIVE = "active"
|
||||
INACTIVE = "inactive"
|
||||
NOT_AVAILABLE = "spectrumnotavailable.png"
|
||||
NOT_SELECTED = "nosignalselected.png"
|
||||
__Band = namedtuple("Band", ["lower", "upper"])
|
||||
__ELF = __Band(0, 30) # Formally it is (3, 30) Hz.
|
||||
__SLF = __Band(30, 300)
|
||||
__ULF = __Band(300, 3000)
|
||||
__VLF = __Band(3000, 30000)
|
||||
__LF = __Band(30 * 10**3, 300 * 10**3)
|
||||
__MF = __Band(300 * 10 ** 3, 3000 * 10**3)
|
||||
__HF = __Band(3 * 10**6, 30 * 10**6)
|
||||
__VHF = __Band(30 * 10**6, 300 * 10**6)
|
||||
__UHF = __Band(300 * 10**6, 3000 * 10**6)
|
||||
__SHF = __Band(3 * 10**9, 30 * 10**9)
|
||||
__EHF = __Band(30 * 10**9, 300 * 10**9)
|
||||
BANDS = (__ELF, __SLF, __ULF, __VLF, __LF, __MF, __HF, __VHF, __UHF, __SHF, __EHF)
|
||||
MAX_DIGITS = 3
|
||||
RANGE_SEPARATOR = ' ÷ '
|
||||
GFD_SITE = "http://qrg.globaltuners.com/"
|
||||
CONVERSION_FACTORS = {"Hz" : 1,
|
||||
"kHz": 1000,
|
||||
"MHz": 1000000,
|
||||
"GHz": 1000000000}
|
||||
MODES = {"FM": ("NFM", "WFM"),
|
||||
"AM": (),
|
||||
"CW": (),
|
||||
"SK": ("FSK", "PSK", "MSK"),
|
||||
"SB": ("LSB", "USB", "DSB"),
|
||||
"Chirp Spread Spectrum": (),
|
||||
"FHSS-TDM": (),
|
||||
"RAW": (),
|
||||
"SC-FDMA": (),}
|
||||
APPLY = "Apply"
|
||||
REMOVE = "Remove"
|
||||
UNKNOWN = "N/A"
|
||||
MODULATIONS = ("8VSB",
|
||||
"AFSK",
|
||||
"AM",
|
||||
"BFSK",
|
||||
@@ -174,34 +176,34 @@ class Constants(object):
|
||||
"PSK",
|
||||
"QAM",
|
||||
"TDMA",)
|
||||
LOCATIONS = (UNKNOWN,
|
||||
"Australia",
|
||||
"Canada",
|
||||
"Central Europe",
|
||||
"China",
|
||||
"Cyprus",
|
||||
"Eastern Europe",
|
||||
"Europe",
|
||||
"Europe, japan and Asia",
|
||||
"Exmouth, Australia",
|
||||
"Finland",
|
||||
"France",
|
||||
"Germany",
|
||||
"Home Base Mobile , AL",
|
||||
"Hungary",
|
||||
"Iran",
|
||||
"Israel",
|
||||
"Japan",
|
||||
"LaMour, North Dakota",
|
||||
"Lualualei, Hawaii",
|
||||
"North America",
|
||||
"North Korea",
|
||||
"Poland",
|
||||
"Romania",
|
||||
"Ruda, Sweden",
|
||||
"UK",
|
||||
"United Kingdom",
|
||||
"United States",
|
||||
"Varberg, Sweden",
|
||||
"World Wide",
|
||||
"Worldwide",)
|
||||
LOCATIONS = (UNKNOWN,
|
||||
"Australia",
|
||||
"Canada",
|
||||
"Central Europe",
|
||||
"China",
|
||||
"Cyprus",
|
||||
"Eastern Europe",
|
||||
"Europe",
|
||||
"Europe, japan and Asia",
|
||||
"Exmouth, Australia",
|
||||
"Finland",
|
||||
"France",
|
||||
"Germany",
|
||||
"Home Base Mobile , AL",
|
||||
"Hungary",
|
||||
"Iran",
|
||||
"Israel",
|
||||
"Japan",
|
||||
"LaMour, North Dakota",
|
||||
"Lualualei, Hawaii",
|
||||
"North America",
|
||||
"North Korea",
|
||||
"Poland",
|
||||
"Romania",
|
||||
"Ruda, Sweden",
|
||||
"UK",
|
||||
"United Kingdom",
|
||||
"United States",
|
||||
"Varberg, Sweden",
|
||||
"World Wide",
|
||||
"Worldwide",)
|
||||
|
||||
@@ -137,7 +137,7 @@ QLabel {
|
||||
QDialog {
|
||||
background-color: transparent;
|
||||
color: #949a9c;
|
||||
}
|
||||
}
|
||||
|
||||
QTextBrowser {
|
||||
background-color: transparent;
|
||||
@@ -157,15 +157,15 @@ QLineEdit {
|
||||
QLineEdit:hover {
|
||||
border-width: 1px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
border-color: #4545e5 ;
|
||||
border-style: solid;
|
||||
border-color: #4545e5 ;
|
||||
}
|
||||
|
||||
QLineEdit:focus {
|
||||
border-width: 1px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
border-color: #4545e5 ;
|
||||
border-style: solid;
|
||||
border-color: #4545e5 ;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@@ -307,7 +307,7 @@ QComboBox::drop-down {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 20px;
|
||||
border-top-right-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
@@ -433,6 +433,7 @@ TreeViewMenu (Mode)
|
||||
QTreeView {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
|
||||
@@ -158,7 +158,7 @@ QLabel {
|
||||
QDialog {
|
||||
background-color: transparent;
|
||||
color: #949a9c;
|
||||
}
|
||||
}
|
||||
|
||||
QTextBrowser {
|
||||
background-color: transparent;
|
||||
@@ -172,19 +172,19 @@ QLineEdit {
|
||||
background-color: transparent;
|
||||
selection-background-color: #669900;
|
||||
color: #669900;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #669900 transparent;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #669900 transparent;
|
||||
}
|
||||
|
||||
QLineEdit:hover {
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #88cc00 transparent;
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #88cc00 transparent;
|
||||
}
|
||||
|
||||
QLineEdit:focus {
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #88cc00 transparent;
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #88cc00 transparent;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@@ -326,7 +326,7 @@ QComboBox::drop-down {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 20px;
|
||||
border-top-right-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
@@ -452,6 +452,7 @@ TreeViewMenu (Mode)
|
||||
QTreeView {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
|
||||
@@ -158,7 +158,7 @@ QLabel {
|
||||
QDialog {
|
||||
background-color: transparent;
|
||||
color: #29353B;
|
||||
}
|
||||
}
|
||||
|
||||
QTextBrowser {
|
||||
background-color: transparent;
|
||||
@@ -172,19 +172,19 @@ QLineEdit {
|
||||
background-color: transparent;
|
||||
selection-background-color: #669900;
|
||||
color: #669900;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #669900 transparent;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #669900 transparent;
|
||||
}
|
||||
|
||||
QLineEdit:hover {
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #6ECE12 transparent;
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #6ECE12 transparent;
|
||||
}
|
||||
|
||||
QLineEdit:focus {
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #6ECE12 transparent;
|
||||
border-width: 2px;
|
||||
border-color: transparent transparent #6ECE12 transparent;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@@ -326,7 +326,7 @@ QComboBox::drop-down {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: top right;
|
||||
width: 20px;
|
||||
border-top-right-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
@@ -452,6 +452,7 @@ TreeViewMenu (Mode)
|
||||
QTreeView {
|
||||
background-color: transparent;
|
||||
selection-background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
|
||||
@@ -97,8 +97,12 @@ def format_numbers(lower, upper):
|
||||
upper = int(upper) / upper_factor
|
||||
if lower.is_integer():
|
||||
lower = int(lower)
|
||||
else:
|
||||
lower = round(lower, 2)
|
||||
if upper.is_integer():
|
||||
upper = int(upper)
|
||||
else:
|
||||
upper = round(upper, 2)
|
||||
if pre_lower != pre_upper:
|
||||
return f"{lower:,} {units[lower_factor]} - {upper:,} {units[upper_factor]}"
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user