#!/usr/bin/env python # File: pyqso.py # Copyright (C) 2012 Christian Jacobs. # This file is part of PyQSO. # PyQSO is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # PyQSO is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with PyQSO. If not, see . from gi.repository import Gtk, GObject, Gdk, GdkPixbuf import logging import optparse import os import os.path import sys # This will help Python find the PyQSO modules # that need to be imported below. pyqso_path = os.path.join(os.path.realpath(os.path.dirname(__file__)), os.pardir) sys.path.insert(0, pyqso_path) # PyQSO modules from pyqso.adif import * from pyqso.logbook import * from pyqso.menu import * from pyqso.toolbar import * from pyqso.toolbox import * class PyQSO(Gtk.Window): def __init__(self, logbook_path): # Call the constructor of the super class (Gtk.Window) Gtk.Window.__init__(self, title="PyQSO 0.1a.dev") self.set_size_request(800, 600) self.set_position(Gtk.WindowPosition.CENTER) possible_icon_paths = [os.path.join(pyqso_path, "icons", "log_64x64.png")] for icon_path in possible_icon_paths: try: self.set_icon_from_file(icon_path) except Exception, error: print error.message # Kills the application if the close button is clicked on the main window itself. self.connect("delete-event", Gtk.main_quit) vbox_outer = Gtk.VBox() self.add(vbox_outer) self.statusbar = Gtk.Statusbar() context_id = self.statusbar.get_context_id("Status") self.statusbar.push(context_id, "Not connected to a Logbook.") # Create a Logbook so we can add/remove/edit logs and records, # once connected to the SQLite database. self.logbook = Logbook(self) self.logbook.set_scrollable(True) self.toolbox = Toolbox(self) # Set up menu and tool bars # These classes depend on the Logbook class, # so pack the logbook after the menu and toolbar. self.menu = Menu(self) self.toolbar = Toolbar(self) if(logbook_path is not None): self.logbook.db_connect(path=logbook_path) vbox_outer.pack_start(self.menu, False, False, 0) vbox_outer.pack_start(self.toolbar, False, False, 0) vbox_outer.pack_start(self.logbook, True, True, 0) vbox_outer.pack_start(self.toolbox, True, True, 0) vbox_outer.pack_start(self.statusbar, False, False, 0) self.show_all() # Hide the Toolbox by default self.toolbox.toggle_visible_callback() return def show_about(self, widget): about = Gtk.AboutDialog() about.set_program_name("PyQSO") about.set_version("0.1a.dev") about.set_authors(["Christian Jacobs"]) about.set_license('''This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .''') about.set_comments("PyQSO: A Python-based contact logging tool for amateur radio operators") possible_icon_paths = [os.path.join(pyqso_path, "icons", "log_64x64.png")] for icon_path in possible_icon_paths: try: about.set_logo(GdkPixbuf.Pixbuf.new_from_file_at_scale(icon_path, 64, 64, False)) except Exception, error: print error.message about.run() about.destroy() return if(__name__ == '__main__'): # Get any command line arguments parser = optparse.OptionParser() parser.add_option('-d', '--debug', action="store_true", default=False, help='Enable debugging. All debugging messages will be written to pyqso.debug.') parser.add_option('-l', '--logbook', action="store", type="string", dest="logbook", default=None, help='Path to the Logbook file.') (options, args) = parser.parse_args() # Set up debugging output if(options.debug): logging.basicConfig(level=logging.DEBUG, filename="pyqso.debug", format="%(asctime)s %(levelname)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S") application = PyQSO(options.logbook) # Populate the main window and show it Gtk.main() # Start up the event loop!