Activities/Abacus: Difference between revisions
No edit summary |
No edit summary |
||
| Line 8: | Line 8: | ||
[[File:Abacus.jpg]] | [[File:Abacus.jpg]] | ||
[[File:Abacus-activity.png]] | |||
== Where to get Abacus == | == Where to get Abacus == | ||
| Line 123: | Line 125: | ||
File:Abacus-fractions.png|20 + 1 + 1/2 + 1/3 + 1/6 = 22 | File:Abacus-fractions.png|20 + 1 + 1/2 + 1/3 + 1/6 = 22 | ||
</gallery> | </gallery> | ||
=== The toolbars === | === The toolbars === | ||
| Line 249: | Line 206: | ||
* Abacus also supports copy, so you can take a sum calculated on an abacus and export it into SimpleGraph or some other data-visualization Activities. | * Abacus also supports copy, so you can take a sum calculated on an abacus and export it into SimpleGraph or some other data-visualization Activities. | ||
== Modifying Abacus == | |||
Abacus is under GPL license. You are free to use it and learn with it. You are also encouraged to modify it to suit your needs or just for a further opportunity to learn. | |||
Most changes can be confined to three modules: <code>AbacusActivity.py</code>, <code>abacus.py</code> and <code>abacus_window.py</code>. The former define the Sugar and GNOME toolbars; the latter defines what code is executed by each type of abacus. | |||
'''Note: since a recent refactoring, these instructions are deprecated''' | |||
For instance, to add a menu item such as 'Reset' you would do the following in <code>abacus.py</code>: | |||
* Add these lines to the menu items list: | |||
menu_items = gtk.MenuItem(_("Reset")) | |||
menu.append(menu_items) | |||
menu_items.connect("activate", self._reset) | |||
* The _reset() method is trivial: | |||
def _reset(self, event, data=None): | |||
""" Reset """ | |||
self.abacus.mode.reset_abacus() | |||
Similarly, you can add another button to the Sugar toolbar in <code>AbacusActivity.py</code>: | |||
* Add these lines to the toolbar block: | |||
# Reset the beads on the abacus to the initial cleared position | |||
self.reset_button = ToolButton( "reset" ) | |||
self.reset_button.set_tooltip(_('Reset')) | |||
self.reset_button.props.sensitive = True | |||
self.reset_button.connect('clicked', self._reset_button_cb) | |||
toolbar_box.toolbar.insert(self.reset_button, -1) | |||
self.reset_button.show() | |||
* The _reset_button_cb() method is trivial: | |||
def _reset_button_cb(self, event, data=None): | |||
""" Reset the beads on the abacus to the initial cleared position """ | |||
self.abacus.mode.reset_abacus() | |||
* You'll have to create an icon for the button (<code>reset.svg</code>) and put it into the <code>icon</code> subdirectory of the bundle. | |||
This will complete the changes in the <code>abacus.py</code>. The method <code>reset_abacus()</code> will have to be defined for each abacus in the <code>abacus_window.py</code>. This can be done by creating that method in the <code>AbacusGeneric</code> class used by all the varieties of abacus. The method may have to be overridden in some abacus subclasses for customization reasons. For instance, <code>reset_abacus()</code> was defined in <code>AbacusGeneric</code> class and then overridden in <code>Schety</code>. | |||
If the changes involve modifying the graphics, then other methods may need to be modified as well. For instance, in order to introduce a reset button that can be clicked to reset the bead positions to the beginning, the following methods had to be modified – all in <code>abacus_window.py</code>: | |||
# in the <code>class Abacus</code>, method <code>_button_press_cb()</code> to activate reset button; | |||
# in the <code>class AbacusGeneric</code>, method <code>create()</code> to create the graphics for reset button; | |||
# methods <code>hide()</code> and <code>show()</code> to make the button visible. | |||
== Reporting problems == | == Reporting problems == | ||