Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2014-07-07 18:18:46 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2014-07-07 20:46:37 (GMT)
commit91348529878942cf13c7584f617702326dfa9209 (patch)
tree362589be61f33354b2b58ce010b6193def569341
parentbc81cba11430aae91f9b17b1d18a89bdf76ebf5f (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.py42
-rw-r--r--finance.py78
-rw-r--r--registerscreen.py34
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
diff --git a/finance.py b/finance.py
index b4f2dfe..a2fdb3a 100644
--- a/finance.py
+++ b/finance.py
@@ -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)