Load db with correct names

This commit is contained in:
alessandro90
2018-09-29 14:45:54 +02:00
parent 70f234e7d3
commit b87efa57ad
2 changed files with 833 additions and 19 deletions

136
main.py
View File

@@ -8,6 +8,7 @@ from PyQt5.QtWidgets import (QMainWindow,
from PyQt5.QtGui import QPixmap
from PyQt5 import uic
from PyQt5.QtCore import QFileInfo, QSize
import webbrowser
from audio_player import AudioPlayer
@@ -22,10 +23,40 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.show()
self.actionExit.triggered.connect(qApp.quit)
self.db_version = None
self.db = None
self.current_signal_name = ''
self.signal_names = []
self.category_labels = [self.cat_mil,
self.cat_rad,
self.cat_active,
self.cat_inactive,
self.cat_ham,
self.cat_comm,
self.cat_avi,
self.cat_mar,
self.cat_ana,
self.cat_dig,
self.cat_trunked,
self.cat_utility,
self.cat_sat,
self.cat_navi,
self.cat_interf,
self.cat_num_stat,
self.cat_time_sig,]
self.property_labels = [self.name_lab,
self.freq_lab,
self.band_lab,
self.mode_lab,
self.modul_lab,
self.loc_lab,
self.acf_lab,
self.description_text,]
self.url_button.clicked.connect(self.go_to_web_page_signal)
self.load_db()
self.display_signals()
self.search_bar.textChanged.connect(self.display_signals)
self.result_list.itemSelectionChanged.connect(self.display_specs)
self.result_list.currentItemChanged.connect(self.display_specs)
self.audio_widget = AudioPlayer(self.play,
self.pause,
@@ -35,40 +66,53 @@ class MyApp(QMainWindow, Ui_MainWindow):
def load_db(self):
try:
db = read_csv(os.path.join('Data', 'db.csv'),
sep = '*',
header = None,
prefix = 'signal_')
self.db = read_csv(os.path.join('Data', 'db.csv'),
sep = '*',
header = None,
index_col = 0,
dtype = {'inf_freq': str,
'sup_freq': str,
'mode': str,
'inf_band': str,
'sup_band': str,
'category_code': str,},
names = ["name",
"inf_freq",
"sup_freq",
"mode",
"inf_band",
"sup_band",
"location",
"url",
"description",
"modulation",
"category_code",
"acf",],
)
self.db.fillna("N/A", inplace = True)
except FileNotFoundError:
self.signal_names = ''
self.search_bar.setDisabled(True)
box = QMessageBox(self)
box.setStyleSheet("""
color:#FFFFFF;
""")
box.setWindowTitle("No database")
box.setText("No database available.\n"
"Go to Updates->Download database.")
box.show()
else:
self.signal_names = db['signal_0']
self.signal_names = self.db.index
try:
with open(os.path.join('Data', 'verdb.ini'), 'r') as dbver:
self.db_version = int(dbver.read())
except (FileNotFoundError, ValueError):
box = QMessageBox(self)
box.setStyleSheet("""
color:#FFFFFF;
""")
box.setWindowTitle("No database version")
box.setText("Unable to detect database version.\n"
"Possible data curruption.\n"
"Go to Updates->Force Download.")
box.show()
self.setStatusTip(f"Database version: undefined.")
self.setStatusTip("Database version: undefined.")
else:
self.setStatusTip(f"Database version: {self.db_version}.")
self.setStatusTip(f"Database version: {self.db_version}")
def display_signals(self):
@@ -81,10 +125,65 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.display_spectrogram()
item = self.result_list.currentItem()
if item:
self.audio_widget.set_audio_player(item.text())
self.url_button.setEnabled(True)
self.url_button.setStyleSheet("color: #4c75ff;")
self.current_signal_name = item.text()
self.name_lab.setText(self.current_signal_name)
current_signal = self.db.loc[self.current_signal_name]
category_code = current_signal.loc["category_code"]
self.freq_lab.setText(self.format_numbers(
current_signal.loc["inf_freq"],
current_signal.loc["sup_freq"])
)
self.band_lab.setText(self.format_numbers(
current_signal.loc["inf_band"],
current_signal.loc["sup_band"])
)
self.mode_lab.setText(current_signal.loc["mode"])
self.modul_lab.setText(current_signal.loc["modulation"])
self.loc_lab.setText(current_signal.loc["location"])
self.acf_lab.setText(current_signal.loc["acf"])
self.description_text.setText(current_signal.loc["description"])
for cat, cat_lab in zip(category_code, self.category_labels):
if cat == '0':
cat_lab.setStyleSheet("color: #9f9f9f;")
elif cat == '1':
cat_lab.setStyleSheet("color: #39eaff;")
self.audio_widget.set_audio_player(self.current_signal_name)
else:
self.url_button.setEnabled(False)
self.url_button.setStyleSheet("color: #898989;")
self.current_signal_name = ''
for lab in self.property_labels:
lab.setText("N/A")
for lab in self.category_labels:
lab.setStyleSheet("""color: #9f9f9f;""")
self.audio_widget.set_audio_player()
@classmethod
def format_numbers(cls, lower, upper):
units = {1: 'Hz', 1000: 'kHz', 10**6: 'MHz', 10**9: 'GHz'}
lower_factor = cls.change_unit(lower)
upper_factor = cls.change_unit(upper)
if lower != upper:
lower = int(lower) / lower_factor
upper = int(upper) / upper_factor
return f"{lower} {units[lower_factor]} - {upper} {units[upper_factor]}"
else:
lower = int(lower) / lower_factor
return f"{lower} {units[lower_factor]}"
@staticmethod
def change_unit(num):
if len(num) < 4:
return 1
elif len(num) < 7:
return 1000
elif len(num) < 10:
return 10**6
else:
return 10**9
def display_spectrogram(self):
default_pic = os.path.join("icons_imgs", "image_not_found.png")
item = self.result_list.currentItem()
@@ -97,6 +196,11 @@ class MyApp(QMainWindow, Ui_MainWindow):
path_spectr = default_pic
self.spectrogram.setPixmap(QPixmap(path_spectr))
def go_to_web_page_signal(self):
if self.current_signal_name:
webbrowser.open(self.db.loc[self.current_signal_name].loc["url"])
if __name__ == '__main__':
my_app = QApplication(sys.argv)

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1000</width>
<height>800</height>
<width>942</width>
<height>568</height>
</rect>
</property>
<property name="sizePolicy">
@@ -24,6 +24,10 @@
background-color: #464646
}
QLabel {
color: #ffffff;
}
QPushButton {
color: #FFFFFF
}
@@ -108,6 +112,14 @@ QScrollBar::sub-page:horizontal{
border-radius: 5px;
/* border: 1px #343434;
background-color: #343434;*/
}
QTextEdit{
color: #ffffff;
}
QMessageBox {
color: #ffffff;
}</string>
</property>
<widget class="QWidget" name="centralwidget">
@@ -308,6 +320,701 @@ QTabBar::tab:!selected {
<attribute name="title">
<string>Main</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_11">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Categories</string>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
<widget class="QLabel" name="cat_mil">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Military</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_rad">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Radar</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_19">
<item>
<widget class="QLabel" name="cat_active">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Active</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_inactive">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Inactive</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_20">
<item>
<widget class="QLabel" name="cat_ham">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>HAM</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_comm">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Commercial</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_21">
<item>
<widget class="QLabel" name="cat_avi">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Aviation</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_mar">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Marine</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_22">
<item>
<widget class="QLabel" name="cat_ana">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Analogue</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_dig">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Digital</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_23">
<item>
<widget class="QLabel" name="cat_trunked">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Trunked</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_utility">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Utility</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_24">
<item>
<widget class="QLabel" name="cat_sat">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Sat</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_navi">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Navigation</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_25">
<item>
<widget class="QLabel" name="cat_interf">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Interfering</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="cat_time_sig">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Time Signal</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="cat_num_stat">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: #9f9f9f;</string>
</property>
<property name="text">
<string>Number Stations</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_9">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Description</string>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Name</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Frequency</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Bandwidth</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mode</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Modulation</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_7">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Location</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_8">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ACF</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="name_lab">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="freq_lab">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="band_lab">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="mode_lab">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="modul_lab">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="loc_lab">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="acf_lab">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<widget class="QPushButton" name="url_button">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
<underline>true</underline>
</font>
</property>
<property name="toolTip">
<string>Go to the signal's wiki.</string>
</property>
<property name="styleSheet">
<string notr="true">color: #898989;</string>
</property>
<property name="text">
<string>Signal's wiki</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<widget class="QTextEdit" name="description_text">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">border: 0px;
/*border-radius: 8px;*/</string>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
@@ -572,6 +1279,9 @@ QSlider::handle:horizontal {
<property name="toolTip">
<string>Signal waterfall</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
@@ -593,7 +1303,7 @@ QSlider::handle:horizontal {
<rect>
<x>0</x>
<y>0</y>
<width>1000</width>
<width>942</width>
<height>21</height>
</rect>
</property>