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
+
+
+
+ False
+ True
+ 2
+ 6
+
+
False
@@ -1774,8 +1791,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.vertical
2
-
+
+
+ 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 51e7fe4..ed794f3 100644
Binary files a/tests/res/test.db and b/tests/res/test.db differ