From 4550f841f715f1bfe6bac0126350ef5ae33f0934 Mon Sep 17 00:00:00 2001 From: "Christian T. Jacobs" Date: Mon, 4 Sep 2017 15:48:50 +0100 Subject: [PATCH] Add support for satellite QSOs. Addresses issue #55. --- pyqso/adif.py | 18 ++- pyqso/record_dialog.py | 21 +++ pyqso/res/pyqso.glade | 355 ++++++++++++++++++++++++++++++++++++----- tests/res/test.db | Bin 4096 -> 5120 bytes 4 files changed, 352 insertions(+), 42 deletions(-) diff --git a/pyqso/adif.py b/pyqso/adif.py index a23d8e5..6b1c14a 100644 --- a/pyqso/adif.py +++ b/pyqso/adif.py @@ -35,6 +35,7 @@ AVAILABLE_FIELD_NAMES_TYPES = {"CALL": "S", "BAND": "E", "MODE": "E", "SUBMODE": "E", + "PROP_MODE": "E", "TX_PWR": "N", "RST_SENT": "S", "RST_RCVD": "S", @@ -48,12 +49,15 @@ AVAILABLE_FIELD_NAMES_TYPES = {"CALL": "S", "DXCC": "N", "CQZ": "N", "ITUZ": "N", - "IOTA": "C"} + "IOTA": "C", + "GRIDSQUARE": "S", + "SAT_NAME": "S", + "SAT_MODE": "S"} # Note: The logbook uses the ADIF field names for the database column names. # This list is used to display the columns in a logical order. -AVAILABLE_FIELD_NAMES_ORDERED = ["CALL", "QSO_DATE", "TIME_ON", "FREQ", "BAND", "MODE", "SUBMODE", "TX_PWR", +AVAILABLE_FIELD_NAMES_ORDERED = ["CALL", "QSO_DATE", "TIME_ON", "FREQ", "BAND", "MODE", "SUBMODE", "PROP_MODE", "TX_PWR", "RST_SENT", "RST_RCVD", "QSL_SENT", "QSL_RCVD", "NOTES", "NAME", - "ADDRESS", "STATE", "COUNTRY", "DXCC", "CQZ", "ITUZ", "IOTA"] + "ADDRESS", "STATE", "COUNTRY", "DXCC", "CQZ", "ITUZ", "IOTA", "GRIDSQUARE", "SAT_NAME", "SAT_MODE"] # Define the more user-friendly versions of the field names. AVAILABLE_FIELD_NAMES_FRIENDLY = {"CALL": "Callsign", "QSO_DATE": "Date", @@ -62,6 +66,7 @@ AVAILABLE_FIELD_NAMES_FRIENDLY = {"CALL": "Callsign", "BAND": "Band", "MODE": "Mode", "SUBMODE": "Submode", + "PROP_MODE": "Propagation Mode", "TX_PWR": "TX Power (W)", "RST_SENT": "RST Sent", "RST_RCVD": "RST Received", @@ -75,7 +80,10 @@ AVAILABLE_FIELD_NAMES_FRIENDLY = {"CALL": "Callsign", "DXCC": "DXCC", "CQZ": "CQ Zone", "ITUZ": "ITU Zone", - "IOTA": "IOTA Designator"} + "IOTA": "IOTA Designator", + "GRIDSQUARE": "Grid Square", + "SAT_NAME": "Satellite Name", + "SAT_MODE": "Satellite Mode"} # A: AwardList # B: Boolean @@ -186,6 +194,8 @@ BANDS = ["", "2190m", "630m", "560m", "160m", "80m", "60m", "40m", "30m", "20m", # The lower and upper frequency bounds (in MHz) for each band in BANDS. BANDS_RANGES = [(None, None), (0.136, 0.137), (0.472, 0.479), (0.501, 0.504), (1.8, 2.0), (3.5, 4.0), (5.102, 5.4065), (7.0, 7.3), (10.0, 10.15), (14.0, 14.35), (18.068, 18.168), (21.0, 21.45), (24.890, 24.99), (28.0, 29.7), (50.0, 54.0), (70.0, 71.0), (144.0, 148.0), (222.0, 225.0), (420.0, 450.0), (902.0, 928.0), (1240.0, 1300.0), (2300.0, 2450.0), (3300.0, 3500.0), (5650.0, 5925.0), (10000.0, 10500.0), (24000.0, 24250.0), (47000.0, 47200.0), (75500.0, 81000.0), (119980.0, 120020.0), (142000.0, 149000.0), (241000.0, 250000.0)] +PROPAGATION_MODES = ["", "AS", "AUE", "AUR", "BS", "ECH", "EME", "ES", "F2", "FAI", "INTERNET", "ION", "IRL", "MS", "RPT", "RS", "SAT", "TEP", "TR"] + ADIF_VERSION = "3.0.4" diff --git a/pyqso/record_dialog.py b/pyqso/record_dialog.py index 4c9d383..c6f7fc1 100644 --- a/pyqso/record_dialog.py +++ b/pyqso/record_dialog.py @@ -115,6 +115,12 @@ class RecordDialog: self.sources["SUBMODE"].append_text("") self.sources["SUBMODE"].set_active(0) # Set an empty string initially. As soon as the user selects a particular MODE, the available SUBMODES will appear. + # PROP_MODE + self.sources["PROP_MODE"] = self.builder.get_object("qso_propagation_mode_combo") + for propagation_mode in PROPAGATION_MODES: + self.sources["PROP_MODE"].append_text(propagation_mode) + self.sources["PROP_MODE"].set_active(0) # Set an empty string as the default option. + # POWER self.sources["TX_PWR"] = self.builder.get_object("qso_power_entry") @@ -167,6 +173,17 @@ class RecordDialog: # IOTA self.sources["IOTA"] = self.builder.get_object("station_iota_entry") + # GRIDSQUARE + self.sources["GRIDSQUARE"] = self.builder.get_object("station_gridsquare_entry") + + # SATELLITE INFORMATION + + # SAT_NAME + self.sources["SAT_NAME"] = self.builder.get_object("satellite_name_entry") + + # SAT_MODE + self.sources["SAT_MODE"] = self.builder.get_object("satellite_mode_entry") + # Populate various fields, if possible. if(index is not None): # The record already exists, so display its current data in the input boxes. @@ -191,6 +208,8 @@ class RecordDialog: elif(field_names[i] == "SUBMODE"): # Skip, because this has been (or will be) handled when populating the MODE field. continue + elif(field_names[i] == "PROP_MODE"): + self.sources[field_names[i]].set_active(PROPAGATION_MODES.index(data)) elif(field_names[i] == "QSL_SENT"): self.sources[field_names[i]].set_active(qsl_sent_options.index(data)) elif(field_names[i] == "QSL_RCVD"): @@ -269,6 +288,8 @@ class RecordDialog: return self.sources["MODE"].get_active_text() elif(field_name == "SUBMODE"): return self.sources["SUBMODE"].get_active_text() + elif(field_name == "PROP_MODE"): + return self.sources["PROP_MODE"].get_active_text() elif(field_name == "BAND" or field_name == "QSL_SENT" or field_name == "QSL_RCVD"): return self.sources[field_name].get_active_text() elif(field_name == "NOTES"): diff --git a/pyqso/res/pyqso.glade b/pyqso/res/pyqso.glade index 8e809fc..d942461 100644 --- a/pyqso/res/pyqso.glade +++ b/pyqso/res/pyqso.glade @@ -1759,6 +1759,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.5 + + + Submode + True + True + False + 0 + True + True + + + False + True + 2 + 6 + + False @@ -1774,8 +1791,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.vertical 2 - - Submode + + Propagation Mode True True False @@ -1875,6 +1892,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.5 + + + Notes + True + True + False + 0 + True + True + + + False + True + 2 + 6 + + False @@ -1889,23 +1923,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.False vertical 2 - - - Notes - True - True - False - 0 - True - True - - - False - True - 2 - 0 - - Name @@ -1920,7 +1937,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.False True 2 - 1 + 0 @@ -1937,7 +1954,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.False True 2 - 2 + 1 @@ -1954,7 +1971,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.False True 2 - 3 + 2 @@ -1971,7 +1988,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.False True 2 - 4 + 3 @@ -1984,6 +2001,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.True True + + False + True + 2 + 4 + + + + + CQ Zone + True + True + False + 0 + True + True + False True @@ -1991,6 +2025,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.5 + + + ITU Zone + True + True + False + 0 + True + True + + + False + True + 2 + 6 + + False @@ -2006,8 +2057,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.vertical 2 - - CQ Zone + + IOTA Designator True True False @@ -2023,8 +2074,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. - - ITU Zone + + Grid Square True True False @@ -2040,8 +2091,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. - - IOTA Designator + + Satellite Name True True False @@ -2057,13 +2108,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. - - - - - - - + + Satellite Mode + True + True + False + 0 + True + True + + + False + True + 2 + 4 + @@ -2903,7 +2962,7 @@ Base64-encoded plain text in the configuration file. False True end - 2 + 3 @@ -3273,6 +3332,45 @@ Base64-encoded plain text in the configuration file. 6 + + + True + False + + + True + False + Propagation Mode + 15 + 0 + + + False + True + 2 + 0 + + + + + True + False + + + False + True + 2 + 1 + + + + + False + True + 2 + 7 + + True @@ -3310,7 +3408,7 @@ Base64-encoded plain text in the configuration file. False True 2 - 7 + 8 @@ -3914,6 +4012,46 @@ Base64-encoded plain text in the configuration file. 3 + + + True + False + + + True + False + Grid Square + 15 + 0 + + + False + True + 2 + 0 + + + + + True + True + 15 + + + False + True + 2 + 1 + + + + + False + True + 2 + 4 + + True @@ -3940,6 +4078,147 @@ Base64-encoded plain text in the configuration file. 1 + + + True + False + 0 + + + True + False + + + True + False + 2 + True + + + True + False + vertical + 2 + + + True + False + + + True + False + Satellite Name + 15 + 0 + + + False + True + 2 + 0 + + + + + True + True + 15 + + + False + True + 2 + 1 + + + + + False + True + 2 + 0 + + + + + True + True + 2 + 0 + + + + + True + False + vertical + 2 + + + True + False + + + True + False + Satellite Mode + 15 + 0 + + + False + True + 2 + 0 + + + + + True + True + 15 + + + False + True + 2 + 1 + + + + + False + True + 2 + 0 + + + + + True + True + 2 + 1 + + + + + + + + + True + False + Satellite Information + + + + + True + True + 2 + + diff --git a/tests/res/test.db b/tests/res/test.db index 51e7fe45dcde469f02ad6932c099bf5f73171ac9..ed794f39eb91699e02d802f347a1bccdcdf10780 100644 GIT binary patch delta 347 zcmZorXwaA-EvU-Cz`zQ`Fu*-g#~3K6`*8=B80`npk9tB;o*adC0Rw#<#+f*9*{6bg#+3*vM0Q&JT|Tq8mhTwL88Lw!ONl$3N7(u*=v ziVI5dFLHFYhUZ4;&!y5*s*-V}cZzdL2aWzFTvx|$1 mGqwtERuBkcoP1X>n5!v?kzHI=l(AKPvz1U3BctXb79Ifn?h;)9