import sys
import logging
import threading
import pkg_resources
from functools import wraps
from datetime import datetime
from gi.repository import Gtk
from gi.repository import GLib
from gi.repository import GObject
from accounting.client import Client
_log = logging.getLogger(__name__)
def indicate_activity(func_or_str):
description = None
def decorator(func):
@wraps(func)
def wrapper(self, *args, **kw):
self.status_description.set_text(description)
self.activity_description.set_text(description)
self.activity_indicator.show()
self.activity_indicator.start()
return func(self, *args, **kw)
return wrapper
if callable(func_or_str):
description = 'Working'
return decorator(func_or_str)
else:
description = func_or_str
return decorator
def indicate_activity_done(func):
self.status_description.set_text('')
self.activity_description.set_text('')
self.activity_indicator.stop()
self.activity_indicator.hide()
class AccountingApplication:
def __init__(self):
#Gtk.Window.__init__(self, title='Accounting Client')
self.client = Client()
self.load_ui(pkg_resources.resource_filename(
'accounting', 'res/client-ui.glade'))
self.about_dialog.set_transient_for(self.accounting_window)
self.accounting_window.connect('delete-event', Gtk.main_quit)
self.accounting_window.set_border_width(0)
self.accounting_window.set_default_geometry(640, 360)
self.accounting_window.show_all()
self.transaction_detail.hide()
def load_ui(self, path):
_log.debug('Loading UI...')
builder = Gtk.Builder()
builder.add_from_file(path)
builder.connect_signals(self)
for element in builder.get_objects():
try:
setattr(self, Gtk.Buildable.get_name(element), element)
_log.debug('Loaded %s', Gtk.Buildable.get_name(element))
except TypeError as exc:
_log.error('%s could not be loaded: %s', element, exc)
_log.debug('UI loaded')
def on_transaction_view_cursor_changed(self, widget):
selection = self.transaction_view.get_selection()
selection.set_mode(Gtk.SelectionMode.SINGLE)
xact_store, xact_iter = selection.get_selected()
xact_id = xact_store.get_value(xact_iter, 0)
_log.debug('selection: %s', xact_id)