Ticket #3740: 0001-Port-to-Gtk3-SL-3740.patch

File 0001-Port-to-Gtk3-SL-3740.patch, 28.9 KB (added by humitos, 12 years ago)
  • budgetscreen.py

    From 224070408488b79498c5c68dafee3f27a5f2c54a Mon Sep 17 00:00:00 2001
    From: Manuel Kaufmann <humitos@gmail.com>
    Date: Mon, 2 Jul 2012 13:41:15 -0300
    Subject: [PATCH Finance] Port to Gtk3 SL #3740
    
    Migrated completely to Gtk3.
    
    There is only one thing related to the Gtk3 theme that it's not
    working properly. It happens when the mouse is over the icon selected
    on the toolbar, view subtoolbar icons for example (SL #3739)
    
    Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
    ---
     budgetscreen.py   |   58 ++++++++---------
     chartscreen.py    |   58 +++++++++--------
     finance.py        |  184 ++++++++++++++++++++++-------------------------------
     registerscreen.py |   52 +++++++--------
     setup.py          |    2 +-
     5 files changed, 161 insertions(+), 193 deletions(-)
    
    diff --git a/budgetscreen.py b/budgetscreen.py
    index 41a1dbd..c38617e 100644
    a b from gettext import gettext as _ 
    2121# Set up localization.
    2222locale.setlocale(locale.LC_ALL, '')
    2323
    24 # Import PyGTK.
    25 import gobject, pygtk, gtk, pango, cairo
     24from gi.repository import Gtk
     25from gi.repository import Gdk
     26from gi.repository import GObject
    2627
    2728# Import Sugar UI modules.
    28 import sugar.activity.activity
    29 from sugar.graphics import *
     29import sugar3.activity.activity
     30from sugar3.graphics import *
    3031
    3132# Import activity module
    3233import finance
    3334
    3435BUDGET_HELP = _('The Budget view allows you to set a monthly budget for each expense category, and to keep track of your\nbudgets.  To set a budget, type the amount in the box to the right of the category.')
    3536
    36 class BudgetScreen(gtk.VBox):
     37class BudgetScreen(Gtk.VBox):
    3738    def __init__(self, activity):
    38         gtk.VBox.__init__(self)
     39        GObject.GObject.__init__(self)
    3940
    4041        self.activity = activity
    4142
    4243        self.category_total = {}
    4344        self.sorted_categories = []
    4445 
    45         self.budgetbox = gtk.VBox()
     46        self.budgetbox = Gtk.VBox()
    4647
    47         scroll = gtk.ScrolledWindow()
    48         scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
     48        scroll = Gtk.ScrolledWindow()
     49        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
    4950        scroll.add_with_viewport(self.budgetbox)
    5051
    5152        self.pack_start(scroll, True, True, 0)
    class BudgetScreen(gtk.VBox): 
    7273            self.budgetbox.remove(w)
    7374
    7475        # Build header.
    75         catlabel = gtk.Label()
     76        catlabel = Gtk.Label()
    7677        catlabel.set_markup('<b><big>'+_('Category')+'</big></b>')
    77         spentlabel = gtk.Label()
     78        spentlabel = Gtk.Label()
    7879        spentlabel.set_markup('<b><big>'+_('Spent')+'</big></b>')
    79         budgetlabel = gtk.Label()
     80        budgetlabel = Gtk.Label()
    8081        budgetlabel.set_markup('<b><big>'+_('Budget')+'</big></b>')
    8182       
    82         headerbox = gtk.HBox()
     83        headerbox = Gtk.HBox()
    8384        headerbox.pack_start(catlabel, False, True, 20)
    8485        headerbox.pack_start(spentlabel, True, True, 10)
    8586        headerbox.pack_start(budgetlabel, False, True, 20)
    8687        self.budgetbox.pack_start(headerbox, False, False, 10)
    8788
    88         catgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
     89        catgroup = Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL)
    8990        catgroup.add_widget(catlabel)
    9091
    91         spentgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
     92        spentgroup = Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL)
    9293        spentgroup.add_widget(spentlabel)
    9394
    94         budgetgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
     95        budgetgroup = Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL)
    9596        budgetgroup.add_widget(budgetlabel)
    9697       
    9798        # Build categories.
    class BudgetScreen(gtk.VBox): 
    100101            # If there is no category, display as Unknown
    101102            if c is '':
    102103                description = _('Unknown')
    103             catbox = gtk.Label(description)
     104            catbox = Gtk.Label(label=description)
    104105            catbox.set_padding(10, 0)
    105106
    106107            color = finance.get_category_color_str(c)
    107108
    108             ebox = gtk.EventBox()
    109             ebox.modify_bg(gtk.STATE_NORMAL, ebox.get_colormap().alloc_color(color))
     109            ebox = Gtk.EventBox()
     110            parse, color = Gdk.Color.parse(color)
     111            ebox.modify_bg(Gtk.StateType.NORMAL, color)
    110112            ebox.add(catbox)
    111113
    112114            catgroup.add_widget(ebox)
    113115
    114             bar = gtk.DrawingArea()
    115             bar.connect('expose-event', self.bar_expose_cb, c)
     116            bar = Gtk.DrawingArea()
     117            bar.connect('draw', self.bar_draw_cb, c)
    116118            spentgroup.add_widget(bar)
    117119
    118             budgetentry = gtk.Entry()
     120            budgetentry = Gtk.Entry()
    119121            budgetentry.connect('changed', self.budget_changed_cb, c)
    120122            budgetentry.set_width_chars(10)
    121123            if self.activity.data['budgets'].has_key(c):
    class BudgetScreen(gtk.VBox): 
    123125                budgetentry.set_text(locale.currency(b['amount'], False))
    124126            budgetgroup.add_widget(budgetentry)
    125127
    126             #freqcombo = gtk.combo_box_new_text()
     128            #freqcombo = Gtk.ComboBoxText()
    127129            #freqcombo.append_text(_('Daily'))
    128130            #freqcombo.append_text(_('Weekly'))
    129131            #freqcombo.append_text(_('Monthly'))
    130132            #freqcombo.append_text(_('Annually'))
    131133            #freqcombo.set_active(2)
    132134
    133             hbox = gtk.HBox()
     135            hbox = Gtk.HBox()
    134136            hbox.pack_start(ebox, False, False, 20)
    135137            hbox.pack_start(bar, True, True, 10)
    136138            hbox.pack_start(budgetentry, False, False, 20)
    137             #hbox.pack_start(freqcombo)
     139            #hbox.pack_start(freqcombo, True, True, 0)
    138140
    139141            self.budgetbox.pack_start(hbox, False, False, 5)
    140142
    class BudgetScreen(gtk.VBox): 
    142144           
    143145        self.activity.set_help(BUDGET_HELP)
    144146
    145     def bar_expose_cb(self, widget, event, category):
    146         cr = widget.window.cairo_create()
    147         cr.rectangle(event.area.x, event.area.y, event.area.width, event.area.height)
    148         cr.clip()
    149 
     147    def bar_draw_cb(self, widget, cr, category):
    150148        bounds = widget.get_allocation()
    151149
    152150        # Draw amount of time spent in period if sensible.
  • chartscreen.py

    diff --git a/chartscreen.py b/chartscreen.py
    index b984b33..cf1a412 100644
    a b from gettext import gettext as _ 
    2121# Set up localization.
    2222locale.setlocale(locale.LC_ALL, '')
    2323
    24 # Import PyGTK.
    25 import gobject, pygtk, gtk, pango, cairo
     24from gi.repository import Gtk
     25from gi.repository import Gdk
     26from gi.repository import GObject
    2627
    2728# Import Sugar UI modules.
    28 import sugar.activity.activity
    29 from sugar.graphics import *
     29import sugar3.activity.activity
     30from sugar3.graphics import *
    3031
    3132# Import activity module
    3233import finance
    3334
    3435CHART_HELP = _('The Chart view shows the proportion of your expenses that is in each category.\nYou can categorize transactions in the Register view.')
    3536
    36 class ChartScreen(gtk.HBox):
     37class ChartScreen(Gtk.HBox):
    3738    def __init__(self, activity):
    38         gtk.HBox.__init__(self)
     39        GObject.GObject.__init__(self)
    3940
    4041        self.activity = activity
    4142
    4243        self.category_total = {}
    4344        self.sorted_categories = []
    4445
    45         self.area = gtk.DrawingArea()
    46         self.area.connect('expose-event', self.chart_expose_cb)
     46        self.area = Gtk.DrawingArea()
     47        self.area.connect('draw', self.chart_draw_cb)
    4748
    48         label = gtk.Label()
     49        label = Gtk.Label()
    4950        label.set_markup('<b>'+_('Debit Categories')+'</b>')
    5051
    51         self.catbox = gtk.VBox()
     52        self.catbox = Gtk.VBox()
    5253
    53         box = gtk.VBox()
    54         box.pack_start(gtk.VBox(), False, False, 40)
    55         box.pack_start(label, False, False)
    56         box.pack_start(gtk.HSeparator(), False, False)
     54        box = Gtk.VBox()
     55        box.pack_start(Gtk.Box(orientation=Gtk.Orientation.VERTICAL),
     56                       False, False, 40)
     57        box.pack_start(label, False, False, 0)
     58        box.pack_start(Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL),
     59                       False, False, 0)
    5760        box.pack_start(self.catbox, False, False, 10)
    58         box.pack_start(gtk.VBox(), True, True)
     61        box.pack_start(Gtk.Box(orientation=Gtk.Orientation.VERTICAL),
     62                       True, True, 0)
    5963 
    60         self.pack_start(self.area, True, True)
     64        self.pack_start(self.area, True, True, 0)
    6165        self.pack_start(box, False, False, 40)
    6266
    6367        self.show_all()
    class ChartScreen(gtk.HBox): 
    8387        for w in self.catbox.get_children():
    8488            self.catbox.remove(w)
    8589
    86         catgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
    87         amountgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
     90        catgroup = Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL)
     91        amountgroup = Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL)
    8892       
    8993        for c in self.sorted_categories:
    90             hbox = gtk.HBox()
     94            hbox = Gtk.HBox()
    9195
    9296            description = c
    9397            # If there is no category, display as Unknown
    9498            if c is '':
    9599                description = _('Unknown')
    96             catlabel = gtk.Label(description)
     100            catlabel = Gtk.Label(label=description)
    97101            catgroup.add_widget(catlabel)
    98102
    99103            color = finance.get_category_color_str(c)
    100104
    101             amountlabel = gtk.Label()
     105            amountlabel = Gtk.Label()
    102106            amountlabel.set_markup(locale.currency(self.category_total[c]))
    103107            amountgroup.add_widget(amountlabel)
    104108
    105109            hbox.pack_start(amountlabel, True, True, 20)
    106110            hbox.pack_start(catlabel, True, True, 20)
    107111
    108             ebox = gtk.EventBox()
    109             ebox.modify_bg(gtk.STATE_NORMAL, ebox.get_colormap().alloc_color(color))
     112            ebox = Gtk.EventBox()
     113
     114            parse, color = Gdk.Color.parse(color)
     115            ebox.modify_bg(Gtk.StateType.NORMAL, color)
    110116            ebox.add(hbox)
    111117
    112118            self.catbox.pack_end(ebox, False, False, 5)
    class ChartScreen(gtk.HBox): 
    116122        # Update the help text.
    117123        self.activity.set_help(CHART_HELP)
    118124
    119     def chart_expose_cb(self, widget, event):
    120         context = widget.window.cairo_create()
    121         context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height)
    122         context.clip()
    123 
     125    def chart_draw_cb(self, widget, context):
    124126        # Draw pie chart.
    125127        bounds = widget.get_allocation()
    126128
  • finance.py

    diff --git a/finance.py b/finance.py
    index a5626b8..3720873 100644
    a b from port import json 
    2525# Set up localization.
    2626locale.setlocale(locale.LC_ALL, '')
    2727
    28 # Import PyGTK.
    29 import gobject, pygtk, gtk, pango, cairo
     28from gi.repository import Gtk
     29from gi.repository import Gdk
    3030
    3131# Import Sugar UI modules.
    32 import sugar.activity.activity
    33 from sugar.graphics.toggletoolbutton import ToggleToolButton
    34 from sugar.graphics.toolbutton import ToolButton
    35 from sugar.graphics.toolcombobox import ToolComboBox
    36 from sugar.graphics import *
    37 
    38 OLD_TOOLBAR = False
    39 try:
    40     from sugar.graphics.toolbarbox import ToolbarBox
    41     from sugar.graphics.toolbarbox import ToolbarButton
    42     from sugar.graphics.radiotoolbutton import RadioToolButton
    43     from sugar.activity.widgets import StopButton
    44     from sugar.activity.widgets import ActivityToolbarButton
    45 except ImportError:
    46     OLD_TOOLBAR = True
     32import sugar3.activity.activity
     33from sugar3.graphics.toggletoolbutton import ToggleToolButton
     34from sugar3.graphics.toolbutton import ToolButton
     35from sugar3.graphics.toolcombobox import ToolComboBox
     36from sugar3.graphics import *
     37
     38from sugar3.graphics.toolbarbox import ToolbarBox
     39from sugar3.graphics.toolbarbox import ToolbarButton
     40from sugar3.graphics.radiotoolbutton import RadioToolButton
     41from sugar3.activity.widgets import StopButton
     42from sugar3.activity.widgets import ActivityToolbarButton
    4743
    4844# Initialize logging.
    4945log = logging.getLogger('Finance')
    def get_category_color_str(catname): 
    9490#
    9591# It owns the main application window, and all the various toolbars and options.
    9692# Screens are stored in a stack, with the currently active screen on top.
    97 class Finance(sugar.activity.activity.Activity):
     93class Finance(sugar3.activity.activity.Activity):
    9894    def __init__ (self, handle):
    99         sugar.activity.activity.Activity.__init__(self, handle)
     95        sugar3.activity.activity.Activity.__init__(self, handle)
    10096        self.set_title(_("Finance"))
    10197        self.max_participants = 1
    10298
    class Finance(sugar.activity.activity.Activity): 
    133129        self.build_toolbox()
    134130 
    135131        self.screens = []
    136         self.screenbox = gtk.VBox()
     132        self.screenbox = Gtk.VBox()
    137133
    138134        # Add the context sensitive help.
    139         self.helplabel = gtk.Label()
     135        self.helplabel = Gtk.Label()
    140136        self.helplabel.set_padding(10, 10)
    141         self.helpbox = gtk.EventBox()
    142         self.helpbox.modify_bg(gtk.STATE_NORMAL, self.helpbox.get_colormap().alloc_color('#000000'))
     137        self.helpbox = Gtk.EventBox()
     138        parse, color = Gdk.Color.parse('#000000')
     139        self.helpbox.modify_bg(Gtk.StateType.NORMAL, color)
    143140        self.helpbox.add(self.helplabel)
    144141
    145142        # Add the header.
    146         self.periodlabel = gtk.Label()
     143        self.periodlabel = Gtk.Label()
    147144        self.periodlabel.set_padding(10, 0)
    148145
    149         headerbox = gtk.HBox()
    150         headerbox.pack_end(self.periodlabel, False, False)
     146        headerbox = Gtk.HBox()
     147        headerbox.pack_end(self.periodlabel, False, False, 0)
    151148
    152149        # Add the summary data.
    153         self.startlabel = gtk.Label()
    154         self.creditslabel = gtk.Label()
    155         self.debitslabel = gtk.Label()
    156         self.balancelabel = gtk.Label()
     150        self.startlabel = Gtk.Label()
     151        self.creditslabel = Gtk.Label()
     152        self.debitslabel = Gtk.Label()
     153        self.balancelabel = Gtk.Label()
    157154
    158         summarybox = gtk.HBox()
    159         summarybox.pack_start(self.startlabel, True, False)
    160         summarybox.pack_start(self.creditslabel, True, False)
    161         summarybox.pack_start(self.debitslabel, True, False)
    162         summarybox.pack_start(self.balancelabel, True, False)
     155        summarybox = Gtk.HBox()
     156        summarybox.pack_start(self.startlabel, True, False, 0)
     157        summarybox.pack_start(self.creditslabel, True, False, 0)
     158        summarybox.pack_start(self.debitslabel, True, False, 0)
     159        summarybox.pack_start(self.balancelabel, True, False, 0)
    163160
    164         vbox = gtk.VBox()
     161        vbox = Gtk.VBox()
    165162
    166163        vbox.pack_start(self.helpbox, False, False, 10)
    167164        vbox.pack_start(headerbox, False, False, 10)
    168         vbox.pack_start(gtk.HSeparator(), False, False, 0)
     165        vbox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.VERTICAL),
     166                        False, False, 0)
    169167        vbox.pack_start(self.screenbox, True, True, 0)
    170168        vbox.pack_start(summarybox, False, False, 10)
    171169
    class Finance(sugar.activity.activity.Activity): 
    177175
    178176        self.show_all()
    179177
    180         if OLD_TOOLBAR:
    181             # Hide the sharing button from the activity toolbar since
    182             # we don't support it.
    183             activity_toolbar = self.tbox.get_activity_toolbar()
    184             activity_toolbar.share.props.visible = False
    185 
    186178    def build_toolbox(self):
    187179        self.newcreditbtn = ToolButton('row-insert-credit')
    188180        self.newcreditbtn.set_tooltip(_("New Credit"))
    class Finance(sugar.activity.activity.Activity): 
    199191        self.eraseitembtn.props.accelerator = '<Ctrl>E'
    200192        self.eraseitembtn.connect('clicked', self.register.eraseitem_cb)
    201193
    202         transactionbar = gtk.Toolbar()
     194        transactionbar = Gtk.Toolbar()
    203195        transactionbar.insert(self.newcreditbtn, -1)
    204196        transactionbar.insert(self.newdebitbtn, -1)
    205197        transactionbar.insert(self.eraseitembtn, -1)
    class Finance(sugar.activity.activity.Activity): 
    216208        self.nextperiodbtn.props.accelerator = '<Ctrl>Right'
    217209        self.nextperiodbtn.connect('clicked', self.nextperiod_cb)
    218210
    219         periodsep = gtk.SeparatorToolItem()
     211        periodsep = Gtk.SeparatorToolItem()
    220212        periodsep.set_expand(True)
    221213        periodsep.set_draw(False)
    222214
    223         periodlabel = gtk.Label(_('Period: '))
    224         periodlabelitem = gtk.ToolItem()
     215        periodlabel = Gtk.Label(label=_('Period: '))
     216        periodlabelitem = Gtk.ToolItem()
    225217        periodlabelitem.add(periodlabel)
    226218
    227         periodcombo = gtk.combo_box_new_text()
     219        periodcombo = Gtk.ComboBoxText()
    228220        periodcombo.append_text(_('Day'))
    229221        periodcombo.append_text(_('Week'))
    230222        periodcombo.append_text(_('Month'))
    class Finance(sugar.activity.activity.Activity): 
    261253        chartbtn.props.accelerator = '<Ctrl>3'
    262254        chartbtn.connect('clicked', self.chart_cb)
    263255
    264         viewbar = gtk.Toolbar()
     256        viewbar = Gtk.Toolbar()
    265257        viewbar.insert(registerbtn, -1)
    266258        viewbar.insert(budgetbtn, -1)
    267259        viewbar.insert(chartbtn, -1)
    class Finance(sugar.activity.activity.Activity): 
    271263        helpbtn.set_tooltip(_("Show Help"))
    272264        helpbtn.connect('clicked', self.help_cb)
    273265
    274         if OLD_TOOLBAR:
    275             periodbar = gtk.Toolbar()
    276             periodbar.insert(self.prevperiodbtn, -1)
    277             periodbar.insert(self.nextperiodbtn, -1)
    278             periodbar.insert(self.thisperiodbtn, -1)
    279             periodbar.insert(periodsep, -1)
    280             periodbar.insert(periodlabelitem, -1)
    281             periodbar.insert(perioditem, -1)
    282 
    283             self.tbox = sugar.activity.activity.ActivityToolbox(self)
    284             self.tbox.add_toolbar(_('Transaction'), transactionbar)
    285             self.tbox.add_toolbar(_('Period'), periodbar)
    286             self.tbox.add_toolbar(_('View'), viewbar)
    287             self.tbox.show_all()
    288 
    289             # Add help button in place of share:
    290             activity_toolbar = self.tbox.get_activity_toolbar()
    291             share_idx = activity_toolbar.get_item_index(activity_toolbar.share)
    292             activity_toolbar.insert(helpbtn, share_idx)
    293             helpbtn.show_all()
    294 
    295             self.set_toolbox(self.tbox)
    296 
    297         else:
    298             self.toolbar_box = ToolbarBox()
     266        self.toolbar_box = ToolbarBox()
    299267
    300             activity_button = ActivityToolbarButton(self)
    301             self.toolbar_box.toolbar.insert(activity_button, 0)
    302             activity_button.show()
     268        activity_button = ActivityToolbarButton(self)
     269        self.toolbar_box.toolbar.insert(activity_button, 0)
     270        activity_button.show()
    303271
    304             transaction_toolbar_button = ToolbarButton(
    305                     page=transactionbar,
    306                     icon_name='transaction')
    307             transactionbar.show_all()
     272        transaction_toolbar_button = ToolbarButton(
     273            page=transactionbar,
     274            icon_name='transaction')
     275        transactionbar.show_all()
    308276
    309             view_toolbar_button = ToolbarButton(
    310                     page=viewbar,
    311                     icon_name='toolbar-view')
    312             viewbar.show_all()
     277        view_toolbar_button = ToolbarButton(
     278            page=viewbar,
     279            icon_name='toolbar-view')
     280        viewbar.show_all()
    313281
    314             self.toolbar_box.toolbar.insert(transaction_toolbar_button, -1)
    315             transaction_toolbar_button.show()
     282        self.toolbar_box.toolbar.insert(transaction_toolbar_button, -1)
     283        transaction_toolbar_button.show()
    316284
    317             self.toolbar_box.toolbar.view = view_toolbar_button
    318             self.toolbar_box.toolbar.insert(view_toolbar_button, -1)
    319             view_toolbar_button.show()
     285        self.toolbar_box.toolbar.view = view_toolbar_button
     286        self.toolbar_box.toolbar.insert(view_toolbar_button, -1)
     287        view_toolbar_button.show()
    320288
    321             separator = gtk.SeparatorToolItem()
    322             separator.set_draw(True)
    323             self.toolbar_box.toolbar.insert(separator, -1)
     289        separator = Gtk.SeparatorToolItem()
     290        separator.set_draw(True)
     291        self.toolbar_box.toolbar.insert(separator, -1)
    324292
    325             self.toolbar_box.toolbar.insert(periodlabelitem, -1)
    326             self.toolbar_box.toolbar.insert(perioditem, -1)
    327             self.toolbar_box.toolbar.insert(self.prevperiodbtn, -1)
    328             self.toolbar_box.toolbar.insert(self.nextperiodbtn, -1)
    329             self.toolbar_box.toolbar.insert(self.thisperiodbtn, -1)
     293        self.toolbar_box.toolbar.insert(periodlabelitem, -1)
     294        self.toolbar_box.toolbar.insert(perioditem, -1)
     295        self.toolbar_box.toolbar.insert(self.prevperiodbtn, -1)
     296        self.toolbar_box.toolbar.insert(self.nextperiodbtn, -1)
     297        self.toolbar_box.toolbar.insert(self.thisperiodbtn, -1)
    330298
    331             separator = gtk.SeparatorToolItem()
    332             separator.props.draw = False
    333             separator.set_expand(True)
    334             self.toolbar_box.toolbar.insert(separator, -1)
     299        separator = Gtk.SeparatorToolItem()
     300        separator.props.draw = False
     301        separator.set_expand(True)
     302        self.toolbar_box.toolbar.insert(separator, -1)
    335303
    336             self.toolbar_box.toolbar.insert(helpbtn, -1)
    337             self.toolbar_box.toolbar.insert(StopButton(self), -1)
    338             self.set_toolbar_box(self.toolbar_box)
    339             self.toolbar_box.show_all()
     304        self.toolbar_box.toolbar.insert(helpbtn, -1)
     305        self.toolbar_box.toolbar.insert(StopButton(self), -1)
     306        self.set_toolbar_box(self.toolbar_box)
     307        self.toolbar_box.show_all()
    340308
    341309    def set_help(self, text):
    342310        if self.helplabel != None:
    class Finance(sugar.activity.activity.Activity): 
    364332        if len(self.screens):
    365333            self.screenbox.remove(self.screens[-1])
    366334 
    367         self.screenbox.pack_start(screen, True, True)
     335        self.screenbox.pack_start(screen, True, True, 0)
    368336        self.screens.append(screen)
    369337
    370338        self.build_screen()
    class Finance(sugar.activity.activity.Activity): 
    373341        self.screenbox.remove(self.screens[-1])
    374342        self.screens.pop()
    375343        if len(self.screens):
    376             self.screenbox.pack_start(self.screens[-1])
     344            self.screenbox.pack_start(self.screens[-1], True, True, 0)
    377345
    378346    def build_screen(self):
    379347        self.build_visible_transactions()
  • registerscreen.py

    diff --git a/registerscreen.py b/registerscreen.py
    index b7336d6..969a474 100644
    a b from gettext import gettext as _ 
    2121# Set up localization.
    2222locale.setlocale(locale.LC_ALL, '')
    2323
    24 # Import PyGTK.
    25 import gobject, pygtk, gtk, pango, cairo
     24from gi.repository import Gtk
     25from gi.repository import GObject
    2626
    2727# Import Sugar UI modules.
    28 import sugar.activity.activity
    29 from sugar.graphics import *
     28import sugar3.activity.activity
     29from sugar3.graphics import *
    3030
    3131# Import activity module
    3232import finance
    3333
    3434REGISTER_HELP = _('<b>Welcome to Finance!</b>   This activity keeps track of income and expenses for anything that earns\nor spends money, like a school club.  To get started, use the Transaction box to add credits and debits.\nOnce you have entered some transactions, visit the Chart and Budget views to see more.')
    3535
    36 class RegisterScreen(gtk.VBox):
     36class RegisterScreen(Gtk.VBox):
    3737    def __init__(self, activity):
    38         gtk.VBox.__init__(self)
     38        GObject.GObject.__init__(self)
    3939
    4040        self.activity = activity
    4141
    4242        # Build the transaction list.
    43         self.treeview = gtk.TreeView()
     43        self.treeview = Gtk.TreeView()
    4444        self.treeview.set_rules_hint(True)
    4545        self.treeview.set_enable_search(False)
    4646
    4747        # Note that the only thing we store in our liststore is the transaction id.
    4848        # All the actual data is in the activity database.
    49         self.liststore = gtk.ListStore(gobject.TYPE_INT)
     49        self.liststore = Gtk.ListStore(GObject.TYPE_INT)
    5050        self.treeview.set_model(self.liststore)
    5151
    5252        # Construct the columns.
    53         renderer = gtk.CellRendererText()
     53        renderer = Gtk.CellRendererText()
    5454        renderer.props.editable = True
    5555        renderer.connect('editing-started', self.description_editing_started_cb)
    5656        renderer.connect('edited', self.description_edit_cb)
    57         col = gtk.TreeViewColumn(_('Description'), renderer)
     57        col = Gtk.TreeViewColumn(_('Description'), renderer)
    5858        col.set_cell_data_func(renderer, self.description_render_cb)
    5959        col.set_expand(True)
    6060        self.treeview.append_column(col)
    6161
    62         renderer = gtk.CellRendererText()
     62        renderer = Gtk.CellRendererText()
    6363        renderer.props.editable = True
    6464        renderer.connect('edited', self.amount_edit_cb)
    65         col = gtk.TreeViewColumn(_('Amount'), renderer)
     65        col = Gtk.TreeViewColumn(_('Amount'), renderer)
    6666        col.set_cell_data_func(renderer, self.amount_render_cb)
    6767        col.set_alignment(0.5)
    6868        col.set_min_width(120)
    6969        self.treeview.append_column(col)
    7070
    71         renderer = gtk.CellRendererText()
     71        renderer = Gtk.CellRendererText()
    7272        renderer.props.editable = True
    7373        renderer.connect('edited', self.date_edit_cb)
    74         col = gtk.TreeViewColumn(_('Date'), renderer)
     74        col = Gtk.TreeViewColumn(_('Date'), renderer)
    7575        col.set_alignment(0.5)
    7676        col.set_cell_data_func(renderer, self.date_render_cb)
    7777        col.set_min_width(150)
    7878        self.treeview.append_column(col)
    7979
    80         renderer = gtk.CellRendererText()
     80        renderer = Gtk.CellRendererText()
    8181        renderer.props.editable = True
    8282        renderer.connect('editing-started', self.category_editing_started_cb)
    8383        renderer.connect('edited', self.category_edit_cb)
    84         col = gtk.TreeViewColumn(_('Category'), renderer)
     84        col = Gtk.TreeViewColumn(_('Category'), renderer)
    8585        col.set_cell_data_func(renderer, self.category_render_cb)
    8686        col.set_alignment(0.5)
    8787        col.set_min_width(300)
    8888        self.treeview.append_column(col)
    8989
    90         scroll = gtk.ScrolledWindow()
    91         scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
     90        scroll = Gtk.ScrolledWindow()
     91        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
    9292        scroll.add(self.treeview)
    9393
    9494        self.pack_start(scroll, True, True, 0)
    class RegisterScreen(gtk.VBox): 
    102102        # Update the help text.
    103103        self.activity.set_help(REGISTER_HELP)
    104104
    105     def description_render_cb(self, column, cell_renderer, model, iter):
     105    def description_render_cb(self, column, cell_renderer, model, iter, data):
    106106        id = model.get_value(iter, 0)
    107107        t = self.activity.transaction_map[id]
    108108        cell_renderer.set_property('text', t['name'])
    109109
    110110    def description_editing_started_cb(self, cell_renderer, editable, path):
    111         completion = gtk.EntryCompletion()
     111        completion = Gtk.EntryCompletion()
    112112        completion.set_inline_completion(True)
    113113        completion.set_popup_completion(True)
    114114        completion.set_minimum_key_length(0)
    115         store = gtk.ListStore(str)
     115        store = Gtk.ListStore(str)
    116116        for c in self.activity.transaction_names.keys():
    117117            store.append([c])
    118118        completion.set_model(store)
    class RegisterScreen(gtk.VBox): 
    130130                if ct['name'] == new_text and ct['category'] != '':
    131131                    t['category'] = ct['category']
    132132
    133     def amount_render_cb(self, column, cell_renderer, model, iter):
     133    def amount_render_cb(self, column, cell_renderer, model, iter, data):
    134134        id = model.get_value(iter, 0)
    135135        t = self.activity.transaction_map[id]
    136136        cell_renderer.set_property('xalign', 1.0)
    class RegisterScreen(gtk.VBox): 
    147147        t['amount'] = abs(locale.atof(new_text))
    148148        self.activity.update_summary()
    149149
    150     def date_render_cb(self, column, cell_renderer, model, iter):
     150    def date_render_cb(self, column, cell_renderer, model, iter, data):
    151151        id = model.get_value(iter, 0)
    152152        t = self.activity.transaction_map[id]
    153153        when = datetime.date.fromordinal(t['date'])
    class RegisterScreen(gtk.VBox): 
    162162        t['date'] = when.toordinal()
    163163        self.activity.build_screen()
    164164
    165     def category_render_cb(self, column, cell_renderer, model, iter):
     165    def category_render_cb(self, column, cell_renderer, model, iter, data):
    166166        id = model.get_value(iter, 0)
    167167        t = self.activity.transaction_map[id]
    168168        cell_renderer.set_property('text', t['category'])
    169169        cell_renderer.set_property('background', finance.get_category_color_str(t['category']))
    170170
    171171    def category_editing_started_cb(self, cell_renderer, editable, path):
    172         completion = gtk.EntryCompletion()
     172        completion = Gtk.EntryCompletion()
    173173        completion.set_inline_completion(True)
    174174        completion.set_popup_completion(True)
    175175        completion.set_minimum_key_length(0)
    176         store = gtk.ListStore(str)
     176        store = Gtk.ListStore(str)
    177177        for c in self.activity.category_names.keys():
    178178            store.append([c])
    179179        completion.set_model(store)
  • setup.py

    diff --git a/setup.py b/setup.py
    index 77fda74..c17ead5 100755
    a b  
    11#!/usr/bin/env python
    2 from sugar.activity import bundlebuilder
     2from sugar3.activity import bundlebuilder
    33if __name__ == "__main__":
    44    bundlebuilder.start()