13 Commits

Author SHA1 Message Date
Marco Dalla Tiezza
2aa821ee65 Minor docs fix 2024-06-09 16:42:19 +02:00
Marco Dalla Tiezza
5ab0c39aa9 Rolling out v4.0.1 2024-06-09 16:31:21 +02:00
Marco Dalla Tiezza
f09bbd3311 Revert "Bump Nuitka 2.3.1"
This reverts commit 91589018a3.
2024-06-09 16:07:24 +02:00
Marco Dalla Tiezza
91589018a3 Bump Nuitka 2.3.1 2024-06-09 15:42:40 +02:00
Marco Dalla Tiezza
d41c9e1ed6 Added installer icon, bump version 4.0.1 2024-06-09 15:36:54 +02:00
Marco Dalla Tiezza
0cbd9a7a0b Updated documentation 2024-06-09 15:17:13 +02:00
Marco Dalla Tiezza
7db68ab2ad Integrity check for the configuration parser 2024-06-06 22:34:51 +02:00
Marco Dalla Tiezza
c7c53b5a68 Solved clipping of the scrollbar on different textareas 2024-06-06 20:12:29 +02:00
Marco Dalla Tiezza
9d2443b0f0 Updated docs 2024-06-06 19:20:03 +02:00
Marco Dalla Tiezza
2c3ffd5e66 Updated readme image 2024-06-06 19:15:46 +02:00
Marco Dalla Tiezza
485eccb373 Added DB autoload on startup option 2024-06-06 19:06:45 +02:00
Marco Dalla Tiezza
faf9a5293a Normalized K and A index lights to NOAA standard nomnclature 2024-06-06 18:11:15 +02:00
Marco Dalla Tiezza
e58cf4d206 Updated docs 2024-06-06 15:51:20 +02:00
26 changed files with 823 additions and 778 deletions

View File

@@ -3,7 +3,9 @@
> [!NOTE] > [!NOTE]
> This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). > This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] - 2024-05-28 ## [Unreleased]
## [4.0.1] - 2024-06-9
### Added ### Added
- Database format has been changed from .csv to a proper relational DB (sqlite) which is much easier handled thanks to the native library shipped with python - Database format has been changed from .csv to a proper relational DB (sqlite) which is much easier handled thanks to the native library shipped with python
- Possibility to create an arbitrary number of new databases for storing new custom signals - Possibility to create an arbitrary number of new databases for storing new custom signals
@@ -89,7 +91,8 @@ First release.
<!-- Links definitions --> <!-- Links definitions -->
[Unreleased]: https://github.com/AresValley/Artemis/compare/v3.2.4...HEAD [Unreleased]: https://github.com/AresValley/Artemis/compare/v4.0.1...HEAD
[4.0.1]: https://github.com/AresValley/Artemis/compare/v3.2.4...v4.0.1
[3.2.4]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.4 [3.2.4]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.4
[3.2.3]: https://github.com/AresValley/Artemis/compare/v3.2.2...v3.2.3 [3.2.3]: https://github.com/AresValley/Artemis/compare/v3.2.2...v3.2.3
[3.2.2]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.2 [3.2.2]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.2

View File

@@ -15,7 +15,7 @@
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease. **Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.
<div align="center"> <div align="center">
<img src="docs/assets/artemis_preview.png"> <img src="docs/assets/artemis_preview.webp">
</div> </div>
## Documentation ## Documentation

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,7 @@ from artemis.utils.path_utils import DATA_DIR
from artemis.utils.network_utils import NetworkManager from artemis.utils.network_utils import NetworkManager
from artemis.utils.generic_utils import generate_filter_query from artemis.utils.generic_utils import generate_filter_query
from artemis.utils.path_utils import normalize_dialog_path from artemis.utils.path_utils import normalize_dialog_path
from artemis.utils.config_utils import CONFIGURE_QT
from artemis.ui.preferences import UIPreferences from artemis.ui.preferences import UIPreferences
from artemis.ui.dbmanager import UIdbmanager from artemis.ui.dbmanager import UIdbmanager
@@ -69,6 +70,8 @@ class UIArtemis(QObject):
self.network_manager = NetworkManager(self) self.network_manager = NetworkManager(self)
self.autoload_db()
def _connect(self): def _connect(self):
# QML > Python connections # QML > Python connections
@@ -331,6 +334,13 @@ class UIArtemis(QObject):
self.cateditor.load_cateditor_ui() self.cateditor.load_cateditor_ui()
def autoload_db(self):
sig_id_path = DATA_DIR / 'SigID' / Constants.SQL_NAME
autoload = CONFIGURE_QT.value("Database", "autoload", 0)
if sig_id_path.exists() and int(autoload):
self.load_db('SigID')
def dialog_popup(self, message_type, title, message): def dialog_popup(self, message_type, title, message):
""" Opens a general dialog popup """ Opens a general dialog popup

View File

@@ -9,6 +9,7 @@ class UIPreferences(QObject):
show_ui = Signal() show_ui = Signal()
load_material_accent = Signal(str) load_material_accent = Signal(str)
load_material_theme = Signal(str) load_material_theme = Signal(str)
load_autoload = Signal(int)
def __init__(self, parent): def __init__(self, parent):
@@ -27,18 +28,21 @@ class UIPreferences(QObject):
# QML > Python connections # QML > Python connections
self._window.saveMaterialAccent.connect(self.save_material_accent) self._window.saveMaterialAccent.connect(self.save_material_accent)
self._window.saveMaterialTheme.connect(self.save_material_theme) self._window.saveMaterialTheme.connect(self.save_material_theme)
self._window.saveAutoload.connect(self.save_autoload)
# Python > QML connections # Python > QML connections
self.show_ui.connect(self._window.show) self.show_ui.connect(self._window.show)
self.load_material_accent.connect(self._window.loadMaterialAccent) self.load_material_accent.connect(self._window.loadMaterialAccent)
self.load_material_theme.connect(self._window.loadMaterialTheme) self.load_material_theme.connect(self._window.loadMaterialTheme)
self.load_autoload.connect(self._window.loadAutoload)
def load_preferences_ui(self): def load_preferences_ui(self):
""" Loading all the initial preferences from the conf file to the UI """ Loading all the initial preferences from the conf file to the UI
""" """
self.load_material_accent.emit(CONFIGURE_QT.get_or_default("Material", "Accent", "Green")) self.load_material_accent.emit(CONFIGURE_QT.value("Material", "Accent", "Green"))
self.load_material_theme.emit(CONFIGURE_QT.get_or_default("Material", "Theme", "System")) self.load_material_theme.emit(CONFIGURE_QT.value("Material", "Theme", "System"))
self.load_autoload.emit(int(CONFIGURE_QT.value("Database", "autoload", 0)))
self.show_ui.emit() self.show_ui.emit()
@@ -54,3 +58,10 @@ class UIPreferences(QObject):
""" Saving material theme setting """ Saving material theme setting
""" """
CONFIGURE_QT.set("Material", "Theme", material_theme) CONFIGURE_QT.set("Material", "Theme", material_theme)
@Slot(int)
def save_autoload(self, autoload):
""" Saving autoload setting
"""
CONFIGURE_QT.set("Database", "autoload", str(autoload))

View File

@@ -6,7 +6,7 @@ from artemis.utils.sys_utils import copy_file
class Config(ConfigParser): class Config(ConfigParser):
""" Custom configuration class derived from ConfigParser. """ Custom configuration class derived from ConfigParser.
Used to get, set, save and remove any configuration from the conf file Used to get value, set, save and remove any configuration from the conf file
""" """
def __init__(self, config_file_path, space_around_delimiters=False): def __init__(self, config_file_path, space_around_delimiters=False):
@@ -15,11 +15,13 @@ class Config(ConfigParser):
self.read(self._config_file_path) self.read(self._config_file_path)
self._space_around_delimiters = space_around_delimiters self._space_around_delimiters = space_around_delimiters
def get_or_default(self, section, option, default_value): def value(self, section, option, default_value):
value = super().get(section, option) value = super().get(section, option, fallback=default_value)
return value if value else default_value return value
def set(self, section, option, value=None): def set(self, section, option, value=None):
if not self.has_section(section):
self.add_section(section)
super().set(section, option, value) super().set(section, option, value)
self.save() self.save()
@@ -32,10 +34,42 @@ class Config(ConfigParser):
self.write(f, space_around_delimiters=self._space_around_delimiters) self.write(f, space_around_delimiters=self._space_around_delimiters)
if not (PREFERENCES_DIR / 'qtquickcontrols2.conf').exists(): def merge_config_files(old_config_path, template_config_path):
copy_file( """ Merge two configuration files: if the old one lacks some
BASE_DIR / 'config' / 'qtquickcontrols2.conf', sections or options from a comparison with a template,
PREFERENCES_DIR / 'qtquickcontrols2.conf' this function will add what is missing to the old conf file
) """
old_config = ConfigParser()
old_config.read(old_config_path)
new_config = ConfigParser()
new_config.read(template_config_path)
for section in new_config.sections():
if not old_config.has_section(section):
old_config.add_section(section)
for option in new_config.options(section):
if not old_config.has_option(section, option):
old_config.set(section, option, new_config.get(section, option))
with open(old_config_path, 'w') as f:
old_config.write(f)
def check_conf_file():
""" Check the integrity of the used conf file.
If it is not present it will add a copy to the PREF_DIR
and if it is different in structure (different section/options)
it will merge the conf file with the new template one
"""
active_conf = PREFERENCES_DIR / 'qtquickcontrols2.conf'
template_conf = BASE_DIR / 'config' / 'qtquickcontrols2.conf'
if not active_conf.exists():
copy_file(template_conf, active_conf)
else:
merge_config_files(active_conf, template_conf)
check_conf_file()
CONFIGURE_QT = Config((PREFERENCES_DIR / 'qtquickcontrols2.conf').resolve().as_posix()) CONFIGURE_QT = Config((PREFERENCES_DIR / 'qtquickcontrols2.conf').resolve().as_posix())

View File

@@ -10,7 +10,7 @@ class Constants():
APPLICATION_NAME = 'Artemis' APPLICATION_NAME = 'Artemis'
ORGANIZATION_NAME = 'AresValley' ORGANIZATION_NAME = 'AresValley'
ORGANIZATION_DOMAIN = 'aresvalley.com' ORGANIZATION_DOMAIN = 'aresvalley.com'
APPLICATION_VERSION = '4.0.0' APPLICATION_VERSION = '4.0.1'
SQL_NAME = 'data.sqlite' SQL_NAME = 'data.sqlite'

View File

@@ -5,10 +5,10 @@ from artemis.utils.config_utils import CONFIGURE_QT
def set_ui(): def set_ui():
os.environ['QT_QUICK_CONTROLS_STYLE'] = CONFIGURE_QT.get_or_default('Controls', 'style', 'Material') os.environ['QT_QUICK_CONTROLS_STYLE'] = CONFIGURE_QT.value('Controls', 'style', 'Material')
os.environ['QT_QUICK_CONTROLS_MATERIAL_VARIANT'] = CONFIGURE_QT.get_or_default('Material', 'variant', 'Dense') os.environ['QT_QUICK_CONTROLS_MATERIAL_VARIANT'] = CONFIGURE_QT.value('Material', 'variant', 'Dense')
os.environ['QT_QUICK_CONTROLS_MATERIAL_THEME'] = CONFIGURE_QT.get_or_default('Material', 'theme', 'System') os.environ['QT_QUICK_CONTROLS_MATERIAL_THEME'] = CONFIGURE_QT.value('Material', 'theme', 'System')
os.environ['QT_QUICK_CONTROLS_MATERIAL_ACCENT'] = CONFIGURE_QT.get_or_default('Material', 'accent', 'Green') os.environ['QT_QUICK_CONTROLS_MATERIAL_ACCENT'] = CONFIGURE_QT.value('Material', 'accent', 'Green')
if is_windows(): if is_windows():
os.environ['QSG_RHI_BACKEND'] = 'opengl' os.environ['QSG_RHI_BACKEND'] = 'opengl'

View File

@@ -19,8 +19,8 @@ python -m nuitka app.py `
--include-data-files=.\config\qtquickcontrols2.conf=.\config\qtquickcontrols2.conf ` --include-data-files=.\config\qtquickcontrols2.conf=.\config\qtquickcontrols2.conf `
--windows-company-name=Aresvalley.com ` --windows-company-name=Aresvalley.com `
--windows-product-name=Artemis ` --windows-product-name=Artemis `
--windows-file-version=4.0.0 ` --windows-file-version=4.0.1 `
--windows-product-version=4.0.0 ` --windows-product-version=4.0.1 `
--windows-file-description=Artemis ` --windows-file-description=Artemis `
--windows-icon-from-ico=images\artemis_icon.ico --windows-icon-from-ico=images\artemis_icon.ico

View File

@@ -1,5 +1,5 @@
#define MyAppName "Artemis" #define MyAppName "Artemis"
#define MyAppVersion "4.0.0" #define MyAppVersion "4.0.1"
#define MyAppPublisher "AresValley" #define MyAppPublisher "AresValley"
#define MyAppURL "https://www.aresvalley.com/" #define MyAppURL "https://www.aresvalley.com/"
#define MyAppExeName "artemis.exe" #define MyAppExeName "artemis.exe"
@@ -18,7 +18,7 @@ LicenseFile=..\..\LICENSE
PrivilegesRequiredOverridesAllowed=dialog PrivilegesRequiredOverridesAllowed=dialog
OutputDir=..\ OutputDir=..\
OutputBaseFilename=Artemis OutputBaseFilename=Artemis
SetupIconFile=..\..\images\artemis_icon.ico SetupIconFile=..\..\images\installer_icon.ico
Compression=lzma2/ultra64 Compression=lzma2/ultra64
SolidCompression=yes SolidCompression=yes
VersionInfoVersion={#MyAppVersion} VersionInfoVersion={#MyAppVersion}

View File

@@ -23,6 +23,6 @@ python -m nuitka app.py \
--macos-app-name=Artemis \ --macos-app-name=Artemis \
--macos-app-mode=gui \ --macos-app-mode=gui \
--macos-sign-identity=ad-hoc \ --macos-sign-identity=ad-hoc \
--macos-app-version=4.0.0 --macos-app-version=4.0.1
echo "Building Linux target finished." echo "Building Linux target finished."

View File

@@ -5,3 +5,6 @@ style=Material
variant=Dense variant=Dense
theme=System theme=System
accent=Green accent=Green
[Database]
autoload=0

View File

@@ -6,10 +6,10 @@
"total_bytes": 244449280 "total_bytes": 244449280
}, },
"windows": { "windows": {
"version": "4.0.0" "version": "4.0.1"
}, },
"linux": { "linux": {
"version": "4.0.0" "version": "4.0.1"
}, },
"mac": { "mac": {
"version": "4.0.0" "version": "4.0.0"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

View File

@@ -12,65 +12,3 @@ Artemis is maintained by Marco Dalla Tiezza and released under the [GPLv3](https
* [**Eric Wiessner (KI7POL)**](https://github.com/WheezyE "GitHub profile") - *ARM port (Raspberry Pi3B+ and Pi4B)* * [**Eric Wiessner (KI7POL)**](https://github.com/WheezyE "GitHub profile") - *ARM port (Raspberry Pi3B+ and Pi4B)*
* [**Pierpaolo Pravatto**](https://github.com/ppravatto "GitHub profile") - *Wiki page, β Tester* * [**Pierpaolo Pravatto**](https://github.com/ppravatto "GitHub profile") - *Wiki page, β Tester*
* [**Francesco Capostagno**](https://github.com/fcapostagno "GitHub profile"), **Luca**, **Pietro** - *β Tester* * [**Francesco Capostagno**](https://github.com/fcapostagno "GitHub profile"), **Luca**, **Pietro** - *β Tester*
## Donators
* Eric Hahn
* Alan Lawrence
* Diego Gil Fernandez
* Torsten Teichert
* Charles Preston
* Brad Hein
* Paolo Romani
* Michelle Corbani
* Martin van Duinen
* Valentino Zardi
* Emmanuel Fabre
* Oscar Nilsson
* Pierre Declercq
* Detlef Jahn
* Oliver Schellenberg
* Stephane Imbertone
* Roel Ketelaars
* Timothy Ehrhart
* George Mager
* Gerhard Amon
* Gerald Schmidt
* Carlos Rocha
* Joshua Frohberg
* Bill Riches
* Jeffrey Krehbiel
* Володимир Багмет
* Philip Hamlin
* David Davies
* Nigel P. Lawrence
* Marco Rissi (PP5ZX)
* Martin van Duinen
* Alex Diamantopulo
* Joseph Winter
* Mark Bender
* Rolf Gerhardt
* Denese Harris
* Benjamin Steele
* Alexander Irmscher
* Jonathan Chang
* Torsten Lipke
* Massimo Petrantoni
* William Arcand
* Jon Carp
* Robert Crone
* William Houston
* Richard Quasne
* Tom Krugliakov
* Francisco Neira Basso
* Alistair Macrae
* Kevin Arburn
* Marek Barłóg
* Gabriel Glösmann
* Corbin Williams
* Ton Machielsen
* Ivan Rancic
* Alipio Fernandez
* Matt Eisele
* Martin Dudel
* Harald Geier

View File

@@ -9,3 +9,7 @@ title: Documentation
</p> </p>
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease. **Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.
<p align="center" markdown>
[Artemis Homepage](https://www.aresvalley.com){ .md-button }
</p>

View File

@@ -12,7 +12,12 @@
--- ---
## :simple-linux: Linux ## :simple-linux: Linux
1. Download `Artemis-Linux-x86_64-4.x.x.tar` in the Assets menu from the [:material-download: LATEST RELEASE](https://github.com/AresValley/Artemis/releases) and extract the tarball archive in a folder of your choice and run the executable `app.bin`. 1. Download `Artemis-Linux-x86_64-4.x.x.tar` in the Assets menu from the [:material-download: LATEST RELEASE](https://github.com/AresValley/Artemis/releases) and extract the tarball archive in a folder of your choice.
2. Before running `app.bin`, be sure to have the executable permissions to the binary file with:
```
chmod 700 app.bin
```
### Create a Shortcut ### Create a Shortcut
@@ -38,5 +43,5 @@ The support for the macOS compiled version of the program is temporarily limited
* **Run the program directly from the source:** Follow the instructions provided in [this chapter](run_from_source.md) to launch the program from the source code. * **Run the program directly from the source:** Follow the instructions provided in [this chapter](run_from_source.md) to launch the program from the source code.
* **Compile the Artemis 4 binaries on your machine:** In this case, you can contribute by reporting any issues you encounter by [opening an Issue](https://github.com/AresValley/Artemis/issues). * **Compile the Artemis 4 binaries on your machine:** In this case, you can contribute by reporting any issues you encounter by [opening an Issue](https://github.com/AresValley/Artemis/issues).
* **Use the last available compiled version (3.2.1):** Although this version is no longer officially supported, it remains available for use: [:material-download: Artemis-3.2.1.dmg](https://aresvalley.com/download/11/). * **Use the last available compiled version (3.2.1):** Although this version is no longer officially supported, it remains available for use: [:material-download: Artemis-3.2.1.dmg](https://www.aresvalley.com/?sdm_process_download=1&download_id=377).

View File

@@ -5,8 +5,21 @@
## 1. Kp Index ## 1. Kp Index
The **K index** is a number (from 0 to 9) that shows how much Earth's magnetic field is disturbed. A K index of 1 means things are calm, while a K index of 5 or higher indicates a geomagnetic storm. These disturbances are measured with magnetometers that track changes in Earth's magnetic field every three hours. The K itself comes from a German word "Kennziffer" meaning "characteristic digit". To get a big picture of what's happening around the world, an official planetary **Kp index** is calculated. This is done by averaging the K indices from a special network of 13 geomagnetic observatories located around the globe at mid-latitudes. The **K index** is a number (from 0 to 9) that shows how much Earth's magnetic field is disturbed. A K index of 1 means things are calm, while a K index of 5 or higher indicates a geomagnetic storm. These disturbances are measured with magnetometers that track changes in Earth's magnetic field every three hours. The K itself comes from a German word "Kennziffer" meaning "characteristic digit". To get a big picture of what's happening around the world, an official planetary **Kp index** is calculated. This is done by averaging the K indices from a special network of 13 geomagnetic observatories located around the globe at mid-latitudes.
## 2. A Index |Index|Activity Level|High Latitudes|Low Latitudes|Possible Source|
The **A index** represents the three-hourly equivalent amplitude of geomagnetic activity at a specific magnetometer station, derived from the station-specific K index. Due to the quasi-logarithmic nature of the K-scale in relation to magnetometer fluctuations, directly averaging a set of K indices is not really meaningful. Instead each K is converted back into a linear scale. The **Ap index** is determined by averaging the eight daily A values, providing a measure of geomagnetic activity for a specific day. Days with higher levels of geomagnetic activity correspond to higher daily Ap values. |-|-|-|-|-|
|**Kp 0**|Inactive|Weak & slow aurora possible|Aurora extremely unlikely|Small influx of particles due to some reconnections mostly at the magnetotail|
|**Kp 1**|Very Quiet|Weak & slow aurora likely|Aurora very unlikely|Vide supra|
|**Kp 2**|Quiet|Moderate auroral display|Aurora unlikely|Vide supra|
|**Kp 3**|Unsettled|Active auroral display, sporadic substorm possible|Weak aurora display possible|Coronal hole sending fast winds or remains after days of storming, enhanced solar wind|
|**Kp 4**|Active|Active auroral display, multiple sporadic substorms possible|Weak Aurora Display Possible|Vide supra|
|**Kp 5**|Minor Storm (G1)|Very active auroral display, multiple substorms likely|Aurora display likely|Coronal hole sending fast winds or coronal mass ejection (CME), enhanced solar wind|
|**Kp 6**|Moderate Storm (G2)|Strong auroral display, longer substorms|Active auroral display very likely|Vide supra|
|**Kp 7**|Strong Storm (G3)|Very strong auroral display|Strong auroral display extremely likely|Large CMEs caused by solar storms or flares, very enhanced solar wind with strong shock wave|
|**Kp 8**|Severe Storm (G4)|Extremely strong aurora, long periods of substorming|Strong auroral display extremely likely|Vide supra|
|**Kp 9**|Extreme Storm (G5)|Extremely strong aurora, long periods of substorming|Very strong auroral display, overhead aurora possible|Super CMEs, Carrington-class events, devastating solar wind with extreme shock waves|
## 2. Ap Index
The **A index** represents the three-hourly equivalent amplitude of geomagnetic activity at a specific magnetometer station, derived from the station-specific K index. Due to the quasi-logarithmic nature of the K-scale in relation to magnetometer fluctuations, directly averaging a set of K indices is not really meaningful. Instead each K is converted back into a linear scale. The **Ap index** is determined by averaging the eight daily Ap values (3-hour) and using the same stations grid explained for the Kp index in the previous section. This provides a measure of geomagnetic activity for a specific day. Days with higher levels of geomagnetic activity correspond to higher daily Ap values.
## 3. NOAA Space Weather Scale ## 3. NOAA Space Weather Scale

BIN
images/installer_icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

View File

@@ -82,18 +82,6 @@ Window {
} }
} }
function contentChanged() {
if (listView.currentIndex !== -1) {
myModel.set(
listView.currentIndex,
{
'name': nameField.text,
'description': descriptionField.text,
}
)
}
}
function lockMenu(toggle) { function lockMenu(toggle) {
if (toggle) { if (toggle) {
openButton.enabled = false openButton.enabled = false
@@ -236,16 +224,18 @@ Window {
} }
} }
ScrollView { Flickable {
Layout.fillHeight: true
Layout.fillWidth: true Layout.fillWidth: true
ScrollBar.vertical.interactive: true Layout.fillHeight: true
TextArea.flickable: TextArea {
TextArea {
id: newDescriptionField id: newDescriptionField
placeholderText: qsTr("Description") placeholderText: qsTr("Description")
font.pointSize: 10
wrapMode: TextEdit.WordWrap wrapMode: TextEdit.WordWrap
} }
ScrollBar.vertical: ScrollBar {
width: 10
}
} }
} }
@@ -293,16 +283,18 @@ Window {
} }
} }
ScrollView { Flickable {
Layout.fillHeight: true
Layout.fillWidth: true Layout.fillWidth: true
ScrollBar.vertical.interactive: true Layout.fillHeight: true
TextArea.flickable: TextArea {
TextArea {
id: editDescriptionField id: editDescriptionField
placeholderText: qsTr("Description") placeholderText: qsTr("Description")
font.pointSize: 10
wrapMode: TextEdit.WordWrap wrapMode: TextEdit.WordWrap
} }
ScrollBar.vertical: ScrollBar {
width: 10
}
} }
} }
@@ -446,9 +438,7 @@ Window {
id: nameField id: nameField
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: qsTr("Name") placeholderText: qsTr("Name")
onTextChanged: { readOnly: true
contentChanged()
}
} }
TextField { TextField {
@@ -458,18 +448,18 @@ Window {
readOnly: true readOnly: true
} }
ScrollView { Flickable {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
ScrollBar.vertical.interactive: true TextArea.flickable: TextArea {
TextArea {
id: descriptionField id: descriptionField
wrapMode: TextEdit.WordWrap placeholderText: qsTr("Description")
readOnly: true
font.pointSize: 10 font.pointSize: 10
onTextChanged: { wrapMode: TextEdit.WordWrap
contentChanged() }
} ScrollBar.vertical: ScrollBar {
width: 10
} }
} }

View File

@@ -23,10 +23,12 @@ Window {
signal saveMaterialAccent(string arg) signal saveMaterialAccent(string arg)
signal saveMaterialTheme(string arg) signal saveMaterialTheme(string arg)
signal saveAutoload(int arg)
function saveAll() { function saveAll() {
saveMaterialAccent(comboBoxAccent.currentText) saveMaterialAccent(comboBoxAccent.currentText)
saveMaterialTheme(comboBoxTheme.currentText) saveMaterialTheme(comboBoxTheme.currentText)
saveAutoload(checkBoxAutoload.checked)
} }
function loadMaterialAccent(accent) { function loadMaterialAccent(accent) {
@@ -47,6 +49,14 @@ Window {
} }
} }
function loadAutoload(toggle) {
if (toggle) {
checkBoxAutoload.checked = true
} else {
checkBoxAutoload.checked = false
}
}
DialogMessage { DialogMessage {
id: dialogPreferencesSaved id: dialogPreferencesSaved
modal: true modal: true
@@ -132,6 +142,21 @@ Window {
} }
} }
RowLayout {
Layout.fillWidth: true
Label {
text: "Auto-load SigID Database on Startup"
font.pixelSize: 12
clip: true
Layout.fillWidth: true
}
CheckBox {
id: checkBoxAutoload
}
}
Item { Item {
Layout.fillHeight: true Layout.fillHeight: true
} }

View File

@@ -154,17 +154,18 @@ Window {
} }
} }
ScrollView { Flickable {
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: 5
Layout.fillHeight: true Layout.fillHeight: true
ScrollBar.vertical.interactive: true Layout.topMargin: 5
TextArea.flickable: TextArea {
TextArea {
id: paramDescription id: paramDescription
placeholderText: qsTr("Description") placeholderText: qsTr("Description")
wrapMode: TextEdit.WordWrap
font.pointSize: 10 font.pointSize: 10
wrapMode: TextEdit.WordWrap
}
ScrollBar.vertical: ScrollBar {
width: 10
} }
} }

View File

@@ -573,19 +573,21 @@ Page {
} }
} }
ScrollView { Flickable {
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: 5
Layout.fillHeight: true Layout.fillHeight: true
ScrollBar.vertical.interactive: true Layout.topMargin: 5
TextArea.flickable: TextArea {
TextArea {
id: descriptionTextArea id: descriptionTextArea
placeholderText: qsTr("Description")
font.pointSize: 10
wrapMode: TextEdit.WordWrap wrapMode: TextEdit.WordWrap
textFormat: Text.MarkdownText textFormat: Text.MarkdownText
font.pointSize: 10
readOnly: true readOnly: true
} }
ScrollBar.vertical: ScrollBar {
width: 10
}
} }
} }

View File

@@ -62,7 +62,7 @@ Item {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
Label { Label {
text: qsTr("MAJOR STORM") text: qsTr("STRONG STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@@ -78,7 +78,7 @@ Item {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
Label { Label {
text: qsTr("MINOR STORM") text: qsTr("MODERATE STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@@ -94,7 +94,7 @@ Item {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
Label { Label {
text: qsTr("ACTIVE") text: qsTr("ACTIVE-STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter

View File

@@ -58,7 +58,7 @@ Item {
topLeftRadius: 10 topLeftRadius: 10
topRightRadius: 10 topRightRadius: 10
Label { Label {
text: qsTr("SUPER STORM") text: qsTr("EXTREME STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@@ -74,7 +74,7 @@ Item {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
Label { Label {
text: qsTr("EXTREME STORM") text: qsTr("SEVERE STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@@ -90,7 +90,7 @@ Item {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
Label { Label {
text: qsTr("SEVERE STORM") text: qsTr("STRONG STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@@ -106,7 +106,7 @@ Item {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
Label { Label {
text: qsTr("MAJOR STORM") text: qsTr("MODERATE STORM")
anchors.fill: parent anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter