Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pippy_app.py
diff options
context:
space:
mode:
Diffstat (limited to 'pippy_app.py')
-rw-r--r--pippy_app.py84
1 files changed, 29 insertions, 55 deletions
diff --git a/pippy_app.py b/pippy_app.py
index 13303c0..a440e4c 100644
--- a/pippy_app.py
+++ b/pippy_app.py
@@ -52,6 +52,8 @@ from activity import TARGET_TYPE_TEXT
import groupthink.sugar_tools
import groupthink.gtk_tools
+from FileDialog import FileDialog
+
text_buffer = None
# magic prefix to use utf-8 source encoding
PYTHON_PREFIX = """#!/usr/bin/python
@@ -169,6 +171,13 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
actions_toolbar.insert(clearbutton, -1)
activity_toolbar.show()
+
+ examples = ToolButton("pippy-create_bundle")
+ examples.set_tooltip(_("Load example"))
+ examples.connect("clicked", self.load_example)
+
+ self.get_toolbar_box().toolbar.insert(Gtk.SeparatorToolItem(), -1)
+ self.get_toolbar_box().toolbar.insert(examples, -1)
separator = Gtk.SeparatorToolItem()
separator.props.draw = False
@@ -180,27 +189,10 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self.get_toolbar_box().toolbar.insert(stop, -1)
# Main layout.
- self.hpane = Gtk.Paned.new(orientation=Gtk.Orientation.HORIZONTAL)
- self.hpane.set_position(300) # setting initial position
self.vpane = Gtk.Paned.new(orientation=Gtk.Orientation.VERTICAL)
self.vpane.set_position(400) # setting initial position
- # The sidebar.
- self.sidebar = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
- self.model = Gtk.TreeStore(GObject.TYPE_PYOBJECT, GObject.TYPE_STRING)
- treeview = Gtk.TreeView(self.model)
- cellrenderer = Gtk.CellRendererText()
- treecolumn = Gtk.TreeViewColumn(_("Examples"), cellrenderer, text=1)
- treeview.get_selection().set_select_function(self._select_func_cb, None)
- treeview.get_selection().connect("changed", self.selection_cb)
- treeview.append_column(treecolumn)
- treeview.set_size_request(int(SIZE_X * 0.3), int(SIZE_Y * 0.3))
-
- # Create scrollbars around the view.
- scrolled = Gtk.ScrolledWindow()
- scrolled.add(treeview)
- self.sidebar.pack_start(scrolled, True, True, 0)
- self.hpane.add1(self.sidebar)
+ self.paths = []
root = os.path.join(get_bundle_path(), 'data')
for d in sorted(os.listdir(root)):
@@ -208,34 +200,11 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
continue # skip non-dirs
direntry = {"name": _(d.capitalize()),
"path": os.path.join(root, d) + "/"}
- olditer = self.model.insert_before(None, None)
- self.model.set_value(olditer, 0, direntry)
- self.model.set_value(olditer, 1, direntry["name"])
- for _file in sorted(os.listdir(os.path.join(root, d))):
- if _file.endswith('~'):
- continue # skip emacs backups
- entry = {"name": _(_file.capitalize()),
- "path": os.path.join(root, d, _file)}
- _iter = self.model.insert_before(olditer, None)
- self.model.set_value(_iter, 0, entry)
- self.model.set_value(_iter, 1, entry["name"])
+ self.paths.append([direntry['name'], direntry['path']])
# Adding local examples
root = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data')
- direntry_examples = {"name": _("My examples"),
- "path": root + "/"}
- self.example_iter = self.model.insert_before(None, None)
- self.model.set_value(self.example_iter, 0, direntry_examples)
- self.model.set_value(self.example_iter, 1, direntry_examples["name"])
- for _file in sorted(os.listdir(root)):
- file_name = os.path.join(root, _file)
- if os.path.isfile(file_name):
- entry = {"name": _file, "path": file_name}
- _iter = self.model.insert_before(self.example_iter, None)
- self.model.set_value(_iter, 0, entry)
- self.model.set_value(_iter, 1, entry["name"])
-
- treeview.expand_all()
+ self.paths.append([_('My examples'), root])
# Source buffer
from gi.repository import GtkSource
@@ -313,11 +282,16 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
outsb.show()
outbox.pack_start(outsb, False, False, 0)
self.vpane.add2(outbox)
- self.hpane.add2(self.vpane)
- return self.hpane
+ return self.vpane
+
+ def load_example(self, widget):
+ dialog = FileDialog(self.paths, self)
+ dialog.run()
+ path = dialog.get_path()
+ if path:
+ self._select_func_cb(path)
def when_shared(self):
- self.hpane.remove(self.hpane.get_child1())
global text_buffer
self.cloud.sharefield = \
groupthink.gtk_tools.TextBufferSharePoint(text_buffer)
@@ -331,10 +305,8 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
if targetType == TARGET_TYPE_TEXT:
self._vte.feed_child(selection.data)
- def selection_cb(self, column):
+ def selection_cb(self, value):
self.save()
- model, _iter = column.get_selected()
- value = model.get_value(_iter, 0)
self._logger.debug("clicked! %s" % value['path'])
_file = open(value['path'], 'r')
lines = _file.readlines()
@@ -346,7 +318,7 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self._reset_vte()
self.text_view.grab_focus()
- def _select_func_cb(self, selection, model, path, path_currently_selected, data):
+ def _select_func_cb(self, path):
global text_buffer
if text_buffer.get_modified():
from sugar3.graphics.alert import ConfirmationAlert
@@ -354,20 +326,22 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
alert.props.title = _('Example selection Warning')
alert.props.msg = _('You have modified the currently selected file. \
Discard changes?')
- tree_iter = model.get_iter_from_string(path.to_string())
- alert.connect('response', self._discard_changes_cb, selection, tree_iter)
+ alert.connect('response', self._discard_changes_cb, path)
self.add_alert(alert)
return False
return True
- def _discard_changes_cb(self, alert, response_id, selection, tree_iter):
+ def _discard_changes_cb(self, alert, response_id, path):
self.remove_alert(alert)
if response_id is Gtk.ResponseType.OK:
+ values = {}
+ values['name'] = os.path.basename(path)
+ values['path'] = path
+ self.selection_cb(values)
global text_buffer
text_buffer.set_modified(False)
- selection.select_iter(tree_iter)
-
+
def timer_cb(self, button, icons):
button.set_icon_widget(icons['bw'])
button.show_all()