From c3a674e37341c374d4ec2f2cd80a0e028df8e80a Mon Sep 17 00:00:00 2001 From: Christian Jacobs Date: Sat, 23 Mar 2013 21:05:20 +0000 Subject: [PATCH] Move the new/open/save log methods to the Logbook class. --- src/data_entry_panel.py | 34 ++++++++------------- src/logbook.py | 57 ++++++++++++++++++++++++++++++++++++ src/menu.py | 6 ++-- src/pyqso.py | 65 ++++------------------------------------- 4 files changed, 77 insertions(+), 85 deletions(-) diff --git a/src/data_entry_panel.py b/src/data_entry_panel.py index 99e08fd..b26fc25 100644 --- a/src/data_entry_panel.py +++ b/src/data_entry_panel.py @@ -21,40 +21,30 @@ from gi.repository import Gtk, GObject import logging +from adif import AVAILABLE_FIELD_NAMES_TYPES + class DataEntryPanel(Gtk.VBox): - def __init__(self, parent, hbox): + def __init__(self, parent, hbox_parent): logging.debug("New DataEntryPanel instance created!") Gtk.VBox.__init__(self, spacing=2) - self.source_call = Gtk.Entry() - 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.sources = {} - self.source_date = Gtk.Entry() - temp_hbox = Gtk.HBox(spacing=2) - temp_hbox.pack_start(Gtk.Label("Date: "), False, False, 2) - temp_hbox.pack_start(self.source_date, expand=True, fill=True, padding=2) - self.pack_start(temp_hbox, False, False, 0) - - self.source_freq = Gtk.Entry() - 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} + field_names = parent.logbook.SELECTED_FIELD_NAMES_TYPES.keys() + for i in range(0, len(field_names)): + hbox_temp = Gtk.HBox(spacing=2) + hbox_temp.pack_start(Gtk.Label(field_names[i]), False, False, 0) + self.sources[field_names[i]] = Gtk.Entry() + hbox_temp.pack_start(self.sources[field_names[i]], True, True, 0) + self.pack_start(hbox_temp, False, False, 0) self.store = Gtk.Button("Store Data") self.store.connect("clicked", parent.edit_record_callback) 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 diff --git a/src/logbook.py b/src/logbook.py index d24dce1..fd81364 100644 --- a/src/logbook.py +++ b/src/logbook.py @@ -47,6 +47,63 @@ class Logbook(Gtk.ListStore): 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): # Adds a blank record to the end of the logbook, # to be completed by the user. diff --git a/src/menu.py b/src/menu.py index 1bba48a..fec6b33 100644 --- a/src/menu.py +++ b/src/menu.py @@ -42,21 +42,21 @@ class Menu(Gtk.MenuBar): # New ADIF 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("N") mitem_new.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE) subm_file.append(mitem_new) # Open (for opening and reading ADIF files) 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("O") mitem_open.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE) subm_file.append(mitem_open) # Save (for writing ADIF files) 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("S") mitem_save.add_accelerator("activate", agrp, key, mod, Gtk.AccelFlags.VISIBLE) subm_file.append(mitem_save) diff --git a/src/pyqso.py b/src/pyqso.py index d918923..e24f652 100644 --- a/src/pyqso.py +++ b/src/pyqso.py @@ -45,6 +45,9 @@ class PyQSO(Gtk.Window): vbox_outer = Gtk.VBox() 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 menu = Menu(self, vbox_outer) @@ -53,8 +56,7 @@ class PyQSO(Gtk.Window): hbox = Gtk.HBox() vbox_outer.pack_start(hbox, True, True, 0) - # Create a new Logbook so we can add/remove/edit Record objects - self.logbook = Logbook() + # Render the logbook self.treeview = Gtk.TreeView(self.logbook) 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. # Let's append this separately to the field names. renderer = Gtk.CellRendererText() - renderer.set_property("editable", False) column = Gtk.TreeViewColumn("INDEX", renderer, text=0) column.set_resizable(True) column.set_min_width(50) @@ -80,9 +81,7 @@ class PyQSO(Gtk.Window): field_names = self.logbook.SELECTED_FIELD_NAMES_TYPES.keys() for i in range(0, len(field_names)): renderer = Gtk.CellRendererText() - renderer.set_property("editable", False) column = Gtk.TreeViewColumn(field_names[i], renderer, text=i+1) - column.set_resizable(True) column.set_min_width(50) self.treeview.append_column(column) @@ -91,61 +90,6 @@ class PyQSO(Gtk.Window): 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): self.logbook.add_record() @@ -232,3 +176,4 @@ if(__name__ == '__main__'): application = PyQSO() # Populate the main window and show it Gtk.main() # Start up the event loop! +