kopia lustrzana https://github.com/ctjacobs/pyqso
Move the new/open/save log methods to the Logbook class.
rodzic
6c3f917355
commit
c3a674e373
|
@ -21,40 +21,30 @@
|
||||||
from gi.repository import Gtk, GObject
|
from gi.repository import Gtk, GObject
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from adif import AVAILABLE_FIELD_NAMES_TYPES
|
||||||
|
|
||||||
class DataEntryPanel(Gtk.VBox):
|
class DataEntryPanel(Gtk.VBox):
|
||||||
|
|
||||||
def __init__(self, parent, hbox):
|
def __init__(self, parent, hbox_parent):
|
||||||
logging.debug("New DataEntryPanel instance created!")
|
logging.debug("New DataEntryPanel instance created!")
|
||||||
|
|
||||||
Gtk.VBox.__init__(self, spacing=2)
|
Gtk.VBox.__init__(self, spacing=2)
|
||||||
|
|
||||||
self.source_call = Gtk.Entry()
|
self.sources = {}
|
||||||
temp_hbox = Gtk.HBox(spacing=2)
|
|
||||||
temp_hbox.pack_start(Gtk.Label("Call: "), False, False, 2)
|
|
||||||
temp_hbox.pack_start(self.source_call, expand=True, fill=True, padding=2)
|
|
||||||
self.pack_start(temp_hbox, False, False, 0)
|
|
||||||
|
|
||||||
self.source_date = Gtk.Entry()
|
field_names = parent.logbook.SELECTED_FIELD_NAMES_TYPES.keys()
|
||||||
temp_hbox = Gtk.HBox(spacing=2)
|
for i in range(0, len(field_names)):
|
||||||
temp_hbox.pack_start(Gtk.Label("Date: "), False, False, 2)
|
hbox_temp = Gtk.HBox(spacing=2)
|
||||||
temp_hbox.pack_start(self.source_date, expand=True, fill=True, padding=2)
|
hbox_temp.pack_start(Gtk.Label(field_names[i]), False, False, 0)
|
||||||
self.pack_start(temp_hbox, False, False, 0)
|
self.sources[field_names[i]] = Gtk.Entry()
|
||||||
|
hbox_temp.pack_start(self.sources[field_names[i]], True, True, 0)
|
||||||
self.source_freq = Gtk.Entry()
|
self.pack_start(hbox_temp, False, False, 0)
|
||||||
temp_hbox = Gtk.HBox(spacing=6)
|
|
||||||
temp_hbox.pack_start(Gtk.Label("Freq.: "), False, False, 2)
|
|
||||||
temp_hbox.pack_start(self.source_freq, expand=True, fill=True, padding=2)
|
|
||||||
self.pack_start(temp_hbox, False, False, 0)
|
|
||||||
|
|
||||||
self.sources = {"CALL":self.source_call,
|
|
||||||
"DATE":self.source_date,
|
|
||||||
"FREQ":self.source_freq}
|
|
||||||
|
|
||||||
self.store = Gtk.Button("Store Data")
|
self.store = Gtk.Button("Store Data")
|
||||||
self.store.connect("clicked", parent.edit_record_callback)
|
self.store.connect("clicked", parent.edit_record_callback)
|
||||||
self.pack_start(self.store, expand=False, fill=True, padding=2)
|
self.pack_start(self.store, expand=False, fill=True, padding=2)
|
||||||
|
|
||||||
hbox.pack_start(self, False, False, 0)
|
hbox_parent.pack_start(self, False, False, 0)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,63 @@ class Logbook(Gtk.ListStore):
|
||||||
|
|
||||||
logging.debug("New Logbook instance created!")
|
logging.debug("New Logbook instance created!")
|
||||||
|
|
||||||
|
|
||||||
|
def new_log(self, widget):
|
||||||
|
self.records = []
|
||||||
|
self.populate()
|
||||||
|
return
|
||||||
|
|
||||||
|
def open_log(self, widget):
|
||||||
|
dialog = Gtk.FileChooserDialog("Open File",
|
||||||
|
None,
|
||||||
|
Gtk.FileChooserAction.OPEN,
|
||||||
|
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
||||||
|
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
|
||||||
|
filter = Gtk.FileFilter()
|
||||||
|
filter.set_name("All ADIF files")
|
||||||
|
filter.add_pattern("*.adi")
|
||||||
|
dialog.add_filter(filter)
|
||||||
|
|
||||||
|
response = dialog.run()
|
||||||
|
if(response == Gtk.ResponseType.OK):
|
||||||
|
path = dialog.get_filename()
|
||||||
|
else:
|
||||||
|
path = None
|
||||||
|
dialog.destroy()
|
||||||
|
|
||||||
|
if(path is None):
|
||||||
|
logging.debug("No file path specified.")
|
||||||
|
return
|
||||||
|
|
||||||
|
adif = ADIF()
|
||||||
|
self.records = adif.read(path)
|
||||||
|
self.populate()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
def save_log(self, widget):
|
||||||
|
dialog = Gtk.FileChooserDialog("Save File",
|
||||||
|
None,
|
||||||
|
Gtk.FileChooserAction.SAVE,
|
||||||
|
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
||||||
|
Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
|
||||||
|
|
||||||
|
response = dialog.run()
|
||||||
|
if(response == Gtk.ResponseType.OK):
|
||||||
|
path = dialog.get_filename()
|
||||||
|
else:
|
||||||
|
path = None
|
||||||
|
dialog.destroy()
|
||||||
|
|
||||||
|
if(path is None):
|
||||||
|
logging.debug("No file path specified.")
|
||||||
|
return
|
||||||
|
|
||||||
|
adif = ADIF()
|
||||||
|
adif.write(self.records, path)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
def add_record(self):
|
def add_record(self):
|
||||||
# Adds a blank record to the end of the logbook,
|
# Adds a blank record to the end of the logbook,
|
||||||
# to be completed by the user.
|
# to be completed by the user.
|
||||||
|
|
|
@ -42,21 +42,21 @@ class Menu(Gtk.MenuBar):
|
||||||
|
|
||||||
# New ADIF log
|
# New ADIF log
|
||||||
mitem_new = Gtk.MenuItem("New Log")
|
mitem_new = Gtk.MenuItem("New Log")
|
||||||
mitem_new.connect("activate", parent.new_log)
|
mitem_new.connect("activate", parent.logbook.new_log)
|
||||||
key, mod = Gtk.accelerator_parse("<Control>N")
|
key, mod = Gtk.accelerator_parse("<Control>N")
|
||||||
mitem_new.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
mitem_new.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
||||||
subm_file.append(mitem_new)
|
subm_file.append(mitem_new)
|
||||||
|
|
||||||
# Open (for opening and reading ADIF files)
|
# Open (for opening and reading ADIF files)
|
||||||
mitem_open = Gtk.MenuItem("Open Log File...")
|
mitem_open = Gtk.MenuItem("Open Log File...")
|
||||||
mitem_open.connect("activate", parent.open_log)
|
mitem_open.connect("activate", parent.logbook.open_log)
|
||||||
key, mod = Gtk.accelerator_parse("<Control>O")
|
key, mod = Gtk.accelerator_parse("<Control>O")
|
||||||
mitem_open.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
mitem_open.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
||||||
subm_file.append(mitem_open)
|
subm_file.append(mitem_open)
|
||||||
|
|
||||||
# Save (for writing ADIF files)
|
# Save (for writing ADIF files)
|
||||||
mitem_save = Gtk.MenuItem("Save Log File...")
|
mitem_save = Gtk.MenuItem("Save Log File...")
|
||||||
mitem_save.connect("activate", parent.save_log)
|
mitem_save.connect("activate", parent.logbook.save_log)
|
||||||
key, mod = Gtk.accelerator_parse("<Control>S")
|
key, mod = Gtk.accelerator_parse("<Control>S")
|
||||||
mitem_save.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
mitem_save.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE)
|
||||||
subm_file.append(mitem_save)
|
subm_file.append(mitem_save)
|
||||||
|
|
65
src/pyqso.py
65
src/pyqso.py
|
@ -45,6 +45,9 @@ class PyQSO(Gtk.Window):
|
||||||
vbox_outer = Gtk.VBox()
|
vbox_outer = Gtk.VBox()
|
||||||
self.add(vbox_outer)
|
self.add(vbox_outer)
|
||||||
|
|
||||||
|
# Create a new Logbook so we can add/remove/edit Record objects
|
||||||
|
self.logbook = Logbook()
|
||||||
|
|
||||||
# Set up menu bar and populate it
|
# Set up menu bar and populate it
|
||||||
menu = Menu(self, vbox_outer)
|
menu = Menu(self, vbox_outer)
|
||||||
|
|
||||||
|
@ -53,8 +56,7 @@ class PyQSO(Gtk.Window):
|
||||||
hbox = Gtk.HBox()
|
hbox = Gtk.HBox()
|
||||||
vbox_outer.pack_start(hbox, True, True, 0)
|
vbox_outer.pack_start(hbox, True, True, 0)
|
||||||
|
|
||||||
# Create a new Logbook so we can add/remove/edit Record objects
|
# Render the logbook
|
||||||
self.logbook = Logbook()
|
|
||||||
self.treeview = Gtk.TreeView(self.logbook)
|
self.treeview = Gtk.TreeView(self.logbook)
|
||||||
self.treeview.set_grid_lines(Gtk.TreeViewGridLines.BOTH)
|
self.treeview.set_grid_lines(Gtk.TreeViewGridLines.BOTH)
|
||||||
|
|
||||||
|
@ -70,7 +72,6 @@ class PyQSO(Gtk.Window):
|
||||||
# The first column of the logbook will always be the unique record index.
|
# The first column of the logbook will always be the unique record index.
|
||||||
# Let's append this separately to the field names.
|
# Let's append this separately to the field names.
|
||||||
renderer = Gtk.CellRendererText()
|
renderer = Gtk.CellRendererText()
|
||||||
renderer.set_property("editable", False)
|
|
||||||
column = Gtk.TreeViewColumn("INDEX", renderer, text=0)
|
column = Gtk.TreeViewColumn("INDEX", renderer, text=0)
|
||||||
column.set_resizable(True)
|
column.set_resizable(True)
|
||||||
column.set_min_width(50)
|
column.set_min_width(50)
|
||||||
|
@ -80,9 +81,7 @@ class PyQSO(Gtk.Window):
|
||||||
field_names = self.logbook.SELECTED_FIELD_NAMES_TYPES.keys()
|
field_names = self.logbook.SELECTED_FIELD_NAMES_TYPES.keys()
|
||||||
for i in range(0, len(field_names)):
|
for i in range(0, len(field_names)):
|
||||||
renderer = Gtk.CellRendererText()
|
renderer = Gtk.CellRendererText()
|
||||||
renderer.set_property("editable", False)
|
|
||||||
column = Gtk.TreeViewColumn(field_names[i], renderer, text=i+1)
|
column = Gtk.TreeViewColumn(field_names[i], renderer, text=i+1)
|
||||||
|
|
||||||
column.set_resizable(True)
|
column.set_resizable(True)
|
||||||
column.set_min_width(50)
|
column.set_min_width(50)
|
||||||
self.treeview.append_column(column)
|
self.treeview.append_column(column)
|
||||||
|
@ -91,61 +90,6 @@ class PyQSO(Gtk.Window):
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def new_log(self, widget):
|
|
||||||
self.logbook.records = []
|
|
||||||
self.logbook.populate()
|
|
||||||
return
|
|
||||||
|
|
||||||
def open_log(self, widget):
|
|
||||||
dialog = Gtk.FileChooserDialog("Open File",
|
|
||||||
None,
|
|
||||||
Gtk.FileChooserAction.OPEN,
|
|
||||||
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
|
||||||
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
|
|
||||||
filter = Gtk.FileFilter()
|
|
||||||
filter.set_name("All ADIF files")
|
|
||||||
filter.add_pattern("*.adi")
|
|
||||||
dialog.add_filter(filter)
|
|
||||||
|
|
||||||
response = dialog.run()
|
|
||||||
if(response == Gtk.ResponseType.OK):
|
|
||||||
path = dialog.get_filename()
|
|
||||||
else:
|
|
||||||
path = None
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
if(path is None):
|
|
||||||
logging.debug("No file path specified.")
|
|
||||||
return
|
|
||||||
|
|
||||||
adif = ADIF()
|
|
||||||
self.logbook.records = adif.read(path)
|
|
||||||
self.logbook.populate()
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
def save_log(self, widget):
|
|
||||||
dialog = Gtk.FileChooserDialog("Save File",
|
|
||||||
None,
|
|
||||||
Gtk.FileChooserAction.SAVE,
|
|
||||||
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
|
||||||
Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
|
|
||||||
|
|
||||||
response = dialog.run()
|
|
||||||
if(response == Gtk.ResponseType.OK):
|
|
||||||
path = dialog.get_filename()
|
|
||||||
else:
|
|
||||||
path = None
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
if(path is None):
|
|
||||||
logging.debug("No file path specified.")
|
|
||||||
return
|
|
||||||
|
|
||||||
adif = ADIF()
|
|
||||||
adif.write(self.logbook.records, path)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
def add_record_callback(self, widget):
|
def add_record_callback(self, widget):
|
||||||
self.logbook.add_record()
|
self.logbook.add_record()
|
||||||
|
@ -232,3 +176,4 @@ if(__name__ == '__main__'):
|
||||||
|
|
||||||
application = PyQSO() # Populate the main window and show it
|
application = PyQSO() # Populate the main window and show it
|
||||||
Gtk.main() # Start up the event loop!
|
Gtk.main() # Start up the event loop!
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue