diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2014-07-07 18:18:46 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2014-07-07 20:46:37 (GMT) |
commit | 91348529878942cf13c7584f617702326dfa9209 (patch) | |
tree | 362589be61f33354b2b58ce010b6193def569341 | |
parent | bc81cba11430aae91f9b17b1d18a89bdf76ebf5f (diff) |
Add the empty screen
This si a empty screen with a message for the case
where the user crete a new project
-rw-r--r-- | emptypanel.py | 42 | ||||
-rw-r--r-- | finance.py | 78 | ||||
-rw-r--r-- | registerscreen.py | 34 |
3 files changed, 96 insertions, 58 deletions
diff --git a/emptypanel.py b/emptypanel.py new file mode 100644 index 0000000..d893155 --- /dev/null +++ b/emptypanel.py @@ -0,0 +1,42 @@ +from gi.repository import Gtk + +from sugar3.graphics import style +from sugar3.graphics.icon import Icon + + +def create_empty_panel(icon_name, message, btn_label, btn_callback): + empty_widgets = Gtk.EventBox() + empty_widgets.modify_bg(Gtk.StateType.NORMAL, + style.COLOR_WHITE.get_gdk_color()) + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + mvbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + vbox.pack_start(mvbox, True, False, 0) + + image_icon = Icon(pixel_size=style.LARGE_ICON_SIZE, + icon_name=icon_name, + stroke_color=style.COLOR_BUTTON_GREY.get_svg(), + fill_color=style.COLOR_BUTTON_GREY.get_svg()) + mvbox.pack_start(image_icon, False, False, style.DEFAULT_PADDING) + + label = Gtk.Label('<span foreground="%s"><b>%s</b></span>' % + (style.COLOR_BUTTON_GREY.get_html(), + message)) + label.set_use_markup(True) + mvbox.pack_start(label, False, False, style.DEFAULT_PADDING) + + hbox = Gtk.Box() + open_image_btn = Gtk.Button() + open_image_btn.connect('clicked', btn_callback) + add_image = Gtk.Image.new_from_stock(Gtk.STOCK_ADD, + Gtk.IconSize.BUTTON) + buttonbox = Gtk.Box() + buttonbox.pack_start(add_image, False, True, 0) + buttonbox.pack_end(Gtk.Label(btn_label), True, True, 5) + open_image_btn.add(buttonbox) + hbox.pack_start(open_image_btn, True, False, 0) + mvbox.pack_start(hbox, False, False, style.DEFAULT_PADDING) + + empty_widgets.add(vbox) + empty_widgets.show_all() + return empty_widgets @@ -44,6 +44,7 @@ import budgetscreen from helpbutton import HelpButton import colors from filtertoolitem import FilterToolItem +import emptypanel # Set up localization. locale.setlocale(locale.LC_ALL, '') @@ -104,7 +105,6 @@ class Finance(Activity): self.build_toolbox() - self.screens = [] self.screenbox = Gtk.VBox() self.headerbox = self.build_header() @@ -140,13 +140,16 @@ class Finance(Activity): vbox = Gtk.VBox() vbox.pack_start(self.headerbox, False, False, 0) - vbox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.VERTICAL), - False, False, 0) vbox.pack_start(self.screenbox, True, True, 0) vbox.pack_start(summary_evbox, False, False, 0) - # Start with the main screen. - self.push_screen(self.register) + # Start with the empty screen. + empty_panel = emptypanel.create_empty_panel( + 'row-insert-credit', + _('Add some credit or debit to get started!'), + _('Add credit'), self.__empty_panel_btn_cb) + + self._set_internal_panel(empty_panel) # This has to happen last, because it calls the read_file # method when restoring from the Journal. @@ -238,17 +241,17 @@ class Finance(Activity): self.newcreditbtn = ToolButton('row-insert-credit') self.newcreditbtn.set_tooltip(_("New Credit")) self.newcreditbtn.props.accelerator = '<Ctrl>A' - self.newcreditbtn.connect('clicked', self.register.newcredit_cb) + self.newcreditbtn.connect('clicked', self.__newcredit_cb) self.newdebitbtn = ToolButton('row-insert-debit') self.newdebitbtn.set_tooltip(_("New Debit")) self.newdebitbtn.props.accelerator = '<Ctrl>D' - self.newdebitbtn.connect('clicked', self.register.newdebit_cb) + self.newdebitbtn.connect('clicked', self.__newdebit_cb) - self.eraseitembtn = ToolButton('row-remove-transaction') + self.eraseitembtn = ToolButton('basket') self.eraseitembtn.set_tooltip(_("Erase Transaction")) self.eraseitembtn.props.accelerator = '<Ctrl>E' - self.eraseitembtn.connect('clicked', self.register.eraseitem_cb) + self.eraseitembtn.connect('clicked', self.__eraseitem_cb) headerbox.insert(self.newcreditbtn, -1) headerbox.insert(self.newdebitbtn, -1) @@ -297,45 +300,51 @@ class Finance(Activity): child.hide() def register_cb(self, widget): - self.pop_screen() - self.push_screen(self.register) + self._set_internal_panel(self.register) self.show_header_controls() def budget_cb(self, widget): - self.pop_screen() - self.push_screen(self.budget) + self._set_internal_panel(self.budget) self.hide_header_controls() def chart_cb(self, widget): - self.pop_screen() - self.push_screen(self.chart) + self._set_internal_panel(self.chart) self.hide_header_controls() - def push_screen(self, screen): - if len(self.screens): - self.screenbox.remove(self.screens[-1]) - - self.screenbox.pack_start(screen, True, True, 0) - self.screens.append(screen) - + def _set_internal_panel(self, widget): + if self.screenbox.get_children(): + self.screenbox.remove(self.screenbox.get_children()[0]) + self.screenbox.pack_start(widget, True, True, 0) + widget.show_all() + self._active_panel = widget self.build_screen() - def pop_screen(self): - self.screenbox.remove(self.screens[-1]) - self.screens.pop() - if len(self.screens): - self.screenbox.pack_start(self.screens[-1], True, True, 0) - def build_screen(self): self.build_visible_transactions() - if len(self.screens): - self.screens[-1].build() + if hasattr(self._active_panel, 'build'): + self._active_panel.build() self.update_header() self.update_summary() self.update_toolbar() + def __empty_panel_btn_cb(self, button): + self._set_internal_panel(self.register) + self.register.new_debit() + + def __newcredit_cb(self, widget): + self._set_internal_panel(self.register) + self.register.new_credit() + + def __newdebit_cb(self, widget): + self._set_internal_panel(self.register) + self.register.new_debit() + + def __eraseitem_cb(self, widget): + self.register.erase_item() + self.build_screen() + def update_header(self): if self.period == DAY: # TRANS: representation of the "Day" period @@ -442,12 +451,6 @@ class Finance(Activity): self.thisperiodbtn.set_tooltip(text_this_period) self.nextperiodbtn.set_tooltip(text_next_period) - # Only add and delete transactions on register screen. - add_del = self.screens[-1] == self.register - self.newcreditbtn.set_sensitive(add_del) - self.newdebitbtn.set_sensitive(add_del) - self.eraseitembtn.set_sensitive(add_del) - def get_this_period(self): today = datetime.date.today() @@ -775,6 +778,9 @@ class Finance(Activity): finally: fd.close() + if self.data['transactions']: + self._set_internal_panel(self.register) + self.build_transaction_map() self.build_names() self.build_screen() diff --git a/registerscreen.py b/registerscreen.py index 462b3e1..7d93d3e 100644 --- a/registerscreen.py +++ b/registerscreen.py @@ -19,6 +19,7 @@ import time import datetime import locale from gettext import gettext as _ +import logging from gi.repository import Gtk from gi.repository import GObject @@ -213,44 +214,33 @@ class RegisterScreen(Gtk.VBox): if new_text != '': self.activity.category_names[new_text] = 1 - def newcredit_cb(self, widget): - # Automatically display the register screen. - if self.activity.screens[-1] != self.activity.register: - self.activity.pop_screen() - self.activity.push_screen(self) - + def new_credit(self): id = self.activity.create_transaction(_('New Credit'), 'credit', 0) iter = self.liststore.append((id,)) # Set cursor and begin editing the description. self.treeview.set_cursor(self.liststore.get_path(iter), self.treeview.get_column(0), True) - def newdebit_cb(self, widget): - # Automatically display the register screen. - if self.activity.screens[-1] != self.activity.register: - self.activity.pop_screen() - self.activity.push_screen(self) - + def new_debit(self): id = self.activity.create_transaction(_('New Debit'), 'debit', 0) iter = self.liststore.append((id,)) # Set cursor and begin editing the description. self.treeview.set_cursor(self.liststore.get_path(iter), self.treeview.get_column(0), True) - def eraseitem_cb(self, widget): - # Ignore unless on the register screen. - if self.activity.screens[-1] != self.activity.register: - return - + def erase_item(self): sel = self.treeview.get_selection() - model, iter = sel.get_selected() - if iter: - id = model.get_value(iter, 0) + logging.error('erase item selection %s', sel) + model, iterator = sel.get_selected() + logging.error('erase item %s', iterator) + if iterator: + id = model.get_value(iterator, 0) + logging.error('erase item id %s', id) self.activity.destroy_transaction(id) self.activity.update_summary() - path = model.get_path(iter) - model.remove(iter) + path = model.get_path(iterator) + model.remove(iterator) # Select the next item, or else the last item. sel.select_path(path) |