Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/develop-activity/develop_app.py
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-06-08 06:21:59 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-07-10 12:23:08 (GMT)
commit498daa827c77d060f9ebad356317ab68160934df (patch)
treefeaffcc34a449996a1e061d7f7ac120e4fd1a96a /develop-activity/develop_app.py
parent15e5faad1278c3ee6a609412407e0413f3f0fcd9 (diff)
Pep8 fixes in develop_app.py
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
Diffstat (limited to 'develop-activity/develop_app.py')
-rw-r--r--develop-activity/develop_app.py406
1 files changed, 201 insertions, 205 deletions
diff --git a/develop-activity/develop_app.py b/develop-activity/develop_app.py
index 176ba67..62622cb 100644
--- a/develop-activity/develop_app.py
+++ b/develop-activity/develop_app.py
@@ -7,37 +7,33 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-
+
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
+
"""Develop Activity: A programming activity."""
from __future__ import with_statement
import gtk
import logging
logging.getLogger().setLevel(0)
import pango
-import os, os.path, shutil
+import os
+import os.path
+import shutil
import gobject
from gettext import gettext as _
-#from developableactivity import ViewSourceActivity, OPENFILE_SEPARATOR
from sugar import profile
-#from sugar.activity.activity import Activity
-#from sugar.activity import activity
from sugar.activity.bundlebuilder import XOPackager, Config, Builder
from sugar.activity import activity
- #import ActivityToolbox, \
- # EditToolbar, get_bundle_name, get_bundle_path
from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.menuitem import MenuItem
from sugar.graphics.alert import ConfirmationAlert, TimeoutAlert
from sugar.graphics import iconentry, notebook
from sugar.datastore import datastore
from sugar.bundle.activitybundle import ActivityBundle
-#from activitybundle import ActivityBundle
import logviewer
import sourceview_editor
S_WHERE = sourceview_editor.S_WHERE
@@ -50,39 +46,40 @@ IFACE = SERVICE
PATH = "/org/laptop/Develop"
WORKING_SOURCE_DIR = 'source'
-SEARCH_ICONS = {False:{S_WHERE.selection:"search-in-selection",
- S_WHERE.file:"system-search",
- S_WHERE.multifile:"multi-search",
+SEARCH_ICONS = {False: {S_WHERE.selection: "search-in-selection",
+ S_WHERE.file: "system-search",
+ S_WHERE.multifile: "multi-search",
},
- True:{S_WHERE.selection:"regex-in-selection",
- S_WHERE.file:"regex",
- S_WHERE.multifile:"multi-regex",
+ True: {S_WHERE.selection: "regex-in-selection",
+ S_WHERE.file: "regex",
+ S_WHERE.multifile: "multi-regex",
}}
-CAP_ICONS = {False:"use-caps",
- True:"ignore-caps"}
-REPLACE_ICONS = {False:"replace-and-find",
- True:"multi-replace"}
+CAP_ICONS = {False: "use-caps", True: "ignore-caps"}
+REPLACE_ICONS = {False: "replace-and-find", True: "multi-replace"}
TOOLBAR_SEARCH = 2
OPENFILE_SEPARATOR = u"@ @"
+
class Options:
- def __init__(self, template = None, **kw):
+
+ def __init__(self, template=None, **kw):
if template:
self.__dict__ = template.__dict__.copy()
else:
self.__dict__ = {}
self.__dict__.update(kw)
+
class SearchOptions(Options):
pass
-
+
class DevelopActivity(activity.Activity):
"""Develop Activity as specified in activity.info"""
external_working_dir = False
-
+
def __init__(self, handle):
"""Set up the Develop activity."""
self.dirty = False
@@ -91,7 +88,7 @@ class DevelopActivity(activity.Activity):
self._logger = logging.getLogger('develop-activity')
self._logger.setLevel(0)
self._logger.info(repr(handle.get_dict()))
-
+
# Source buffer
self.editor = sourceview_editor.GtkSourceview2Editor(self)
@@ -99,11 +96,11 @@ class DevelopActivity(activity.Activity):
toolbox = activity.ActivityToolbox(self)
self.set_toolbox(toolbox)
toolbox.show()
-
+
self.edittoolbar = DevelopEditToolbar(self, toolbox)
toolbox.add_toolbar(_("Edit"), self.edittoolbar)
self.edittoolbar.show()
-
+
self.edittoolbar = DevelopSearchToolbar(self, toolbox)
toolbox.add_toolbar(_("Search"), self.edittoolbar)
self.edittoolbar.show()
@@ -116,23 +113,22 @@ class DevelopActivity(activity.Activity):
hbox = gtk.HPaned()
vbox = gtk.VBox()
-
#The treeview and selected pane reflect each other.
self.numb = False
-
+
#Wait to save until first change, but save an unchanged
#backup copy when that happens.
self.save_unchanged = False
-
+
# The sidebar
sidebar = gtk.VBox()
self.treenotebook = notebook.Notebook(can_close_tabs=False)
sidebar.pack_start(self.treenotebook)
-
+
self.model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
self.treeview = gtk.TreeView(self.model)
cellrenderer = gtk.CellRendererText()
- self.treecolumn = gtk.TreeViewColumn(_("Activities"), cellrenderer,
+ self.treecolumn = gtk.TreeViewColumn(_("Activities"), cellrenderer,
text=1)
self.treeview.append_column(self.treecolumn)
self.treeview.set_size_request(220, 900)
@@ -144,7 +140,7 @@ class DevelopActivity(activity.Activity):
self.treenotebook.add_page(_("Activity"), scrolled)
hbox.pack1(sidebar, resize=True, shrink=True)
sidebar.show()
-
+
self._logger.info('finished check')
vbox.pack_start(self.editor)
self.editor.show()
@@ -155,44 +151,43 @@ class DevelopActivity(activity.Activity):
self._logger.critical('finished initialization')
self.activity_dir = None
self.show()
-
+
if not handle.object_id or not self.metadata.get('source'):
- #self._show_welcome()
- gobject.timeout_add(100,self._show_welcome)
-
+ gobject.timeout_add(100, self._show_welcome)
+
def is_foreign_dir(self):
"""is_foreign_dir: self.activity_dir should be treated as read-only?
-
+
Returns:
True: changes should not be saved in self.activity_dir,
and thus a change_base is necessary before saving changes.
-
- False: it is safe to save changes in self.activity_dir.
+
+ False: it is safe to save changes in self.activity_dir.
"""
return not (self.external_working_dir
- or not self.activity_dir
+ or not self.activity_dir
or self.activity_dir.startswith(self.get_workingdir()))
- def show_msg(self, text, title = ""):
+ def show_msg(self, text, title=""):
"""show_msg(text) shows text in a drop-down alert message.
"""
alert = ConfirmationAlert()
alert.props.title = title
- alert.props.msg = text
+ alert.props.msg = text
alert.connect('response', self.alert_cb)
self.add_alert(alert)
alert.show()
-
- def debug_msg(self, text, title = _("debug alert"), level=0):
+
+ def debug_msg(self, text, titl=_("debug alert"), level=0):
"""debug_msg(text, level=x): log text, and maybe show dialog.
"""
self._logger.debug(text)
if level >= DEBUG_FILTER_LEVEL:
self.show_msg(text, title)
-
+
def alert_cb(self, alert, response_id):
self.remove_alert(alert)
-
+
def _show_welcome(self):
"""_show_welcome: when opened without a bundle, ask open/new/cancel
"""
@@ -211,7 +206,7 @@ class DevelopActivity(activity.Activity):
def _create_new_activity(self):
"""create and open a new activity in working dir
"""
- dialog = gtk.Dialog(_("Name your Activity"), parent=self,
+ dialog = gtk.Dialog(_("Name your Activity"), parent=self,
flags=gtk.DIALOG_MODAL)
vbox = dialog.vbox
entry = gtk.Entry()
@@ -235,25 +230,25 @@ class DevelopActivity(activity.Activity):
self.user_path = os.path.expanduser('~/')
if "isolation" in self.user_path:
self.user_path = (
- os.path.join(*(["/"] + self.user_path.split("/")[0:3])))
+ os.path.join(*(["/"] + self.user_path.split("/")[0:3])))
return self.user_path
def _pick_existing_activity(self):
- root = os.path.join(self._get_user_path(),"Activities")
- chooser = gtk.FileChooserDialog(_("Choose an exisiting activity"), self,
- gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ root = os.path.join(self._get_user_path(), "Activities")
+ chooser = gtk.FileChooserDialog(_("Choose an exisiting activity"),
+ self, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
chooser.set_current_folder(root)
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
activity_dir = chooser.get_filename()
chooser.destroy()
self.first_open_activity(activity_dir)
else:
chooser.destroy()
self.destroy()
- del chooser
-
+ del chooser
+
def open_activity(self, activity_dir):
self._logger.info('opening %s' % activity_dir)
self.activity_dir = activity_dir + '/'
@@ -264,8 +259,9 @@ class DevelopActivity(activity.Activity):
self.treeview.get_selection().connect("changed", self.selection_cb)
return name
- def first_open_activity(self,activity_dir):
- """Open an activity for the first time. Subsequently, use open_activity.
+ def first_open_activity(self, activity_dir):
+ """Open an activity for the first time.
+ Subsequently, use open_activity.
"""
name = self.open_activity(activity_dir)
namefilter = ActivityBundle(activity_dir).get_bundle_id()
@@ -277,8 +273,8 @@ class DevelopActivity(activity.Activity):
"""
import activity_model
self.bundle = ActivityBundle(self.activity_dir)
- self.model = activity_model.DirectoryAndExtraModel(self.activity_dir,
- nodefilter = activity_model.inmanifestfn(self.bundle))
+ self.model = activity_model.DirectoryAndExtraModel(self.activity_dir,
+ nodefilter=activity_model.inmanifestfn(self.bundle))
self.treeview.set_model(self.model)
#self.treeview.redraw()
#self.show_msg("refresh_files")
@@ -297,7 +293,7 @@ class DevelopActivity(activity.Activity):
"""User selected an item in the treeview. Load it.
"""
if self.numb:
- #Choosing in the notebook selects in the list, and vice versa.
+ #Choosing in the notebook selects in the list, and vice versa.
#Avoid infinite recursion.
return
path = activity_model.get_selected_file_path(self.treeview)
@@ -306,18 +302,20 @@ class DevelopActivity(activity.Activity):
self.numb = True
self.load_file(path)
self.numb = False
-
- def save_source_jobject(self, activity_dir, file_path, filenames = None):
+
+ def save_source_jobject(self, activity_dir, file_path, filenames=None):
if not activity_dir:
raise NotImplementedError
-
+
#create bundle
dist_dir, dist_name = os.path.split(file_path)
- builder = XOPackager(Builder(Config(activity_dir, dist_dir, dist_name)))
+ builder = XOPackager(Builder(Config(activity_dir,
+ dist_dir, dist_name)))
builder.package()
-
- #fix up datastore object
- #FIXME: some of this is overkill, legacy from when I created a new jobject each save
+
+ # fix up datastore object
+ # FIXME: some of this is overkill,
+ # legacy from when I created a new jobject each save
jobject = self._jobject
if self._shared_activity is not None:
icon_color = self._shared_activity.props.color
@@ -331,42 +329,42 @@ class DevelopActivity(activity.Activity):
builder.config.version),
'icon-color': icon_color,
'mime_type': 'application/vnd.olpc-sugar',
- 'activity' : self.get_bundle_id(),
- 'activity_id' : self.get_id(),
- 'share-scope' : activity.SCOPE_PRIVATE,
- 'preview' : '',
- 'source' : activity_dir,
+ 'activity': self.get_bundle_id(),
+ 'activity_id': self.get_id(),
+ 'share-scope': activity.SCOPE_PRIVATE,
+ 'preview': '',
+ 'source': activity_dir,
}
for k, v in metadata.items():
- jobject.metadata[k] = v # dict.update method is missing =(
+ jobject.metadata[k] = v # dict.update method is missing =(
if filenames:
jobject.metadata['open_filenames'] = filenames
jobject.file_path = file_path
#datastore.write(jobject)
#jobject.destroy()
return jobject
-
+
def write_file(self, file_path):
"""Wrap up the activity as a bundle and save it to journal.
"""
if self.is_foreign_dir():
- self.debug_msg(u'write file from %s to %s; dirty is %s' %
+ self.debug_msg(u'write file from %s to %s; dirty is %s' %
(self.activity_dir, file_path, str(self.dirty)))
if not self.save_unchanged:
self.editor.save_all()
filenames = OPENFILE_SEPARATOR.join(self.editor.get_all_filenames())
- self.debug_msg('activity_dir %s, file_path %s, filenames %s' %
- (len(self.activity_dir),
+ self.debug_msg('activity_dir %s, file_path %s, filenames %s' %
+ (len(self.activity_dir),
len(file_path), len(filenames)))
- self._jobject = self.save_source_jobject(self.activity_dir,
+ self._jobject = self.save_source_jobject(self.activity_dir,
file_path, filenames)
self.metadata['source'] = self.activity_dir[:-1]
self.set_dirty(False)
-
+
def get_workingdir(self):
return os.path.join(activity.get_activity_root(), "instance",
WORKING_SOURCE_DIR)
-
+
def read_file(self, file_path):
if not os.path.isfile(file_path):
self._show_welcome()
@@ -380,19 +378,19 @@ class DevelopActivity(activity.Activity):
except AttributeError:
bundledir = ActivityBundle(file_path).unpack(workingdir)
self.first_open_activity(os.path.join(bundledir))
- self._logger.info(u'read_file. subfiles: %s' %
+ self._logger.info(u'read_file. subfiles: %s' %
self.metadata['open_filenames'])
for filename in self.metadata['open_filenames'].split(
OPENFILE_SEPARATOR):
if filename:
self.load_file(filename)
self.set_dirty(False)
-
+
def is_dirty(self):
return self.dirty
-
+
def set_dirty(self, dirty):
- self.debug_msg("Setting dirty to %s; activity_dir is %s" %
+ self.debug_msg("Setting dirty to %s; activity_dir is %s" %
(str(dirty), str(self.activity_dir)))
self.dirty = dirty
if dirty and self.activity_dir and self.is_foreign_dir():
@@ -404,19 +402,18 @@ class DevelopActivity(activity.Activity):
finally:
self.save_unchanged = False
self.dirty = dirty
-
+
def change_base(self):
targetdir = self.get_workingdir()
-
+
#if in an editable directory outside ~/Activities, edit in place
if (not self.activity_dir.startswith(
- os.path.join(os.path.expanduser("~"),
- "Activities"))
- and os.access(targetdir, os.W_OK)):
- self.debug_msg("Editing files in place: "+self.activity_dir)
+ os.path.join(os.path.expanduser("~"), "Activities"))
+ and os.access(targetdir, os.W_OK)):
+ self.debug_msg("Editing files in place: " + self.activity_dir)
self.external_working_dir = True
return
-
+
#otherwise, copy for editing
self.debug_msg("Copying files for editing")
if os.path.isdir(targetdir):
@@ -425,7 +422,7 @@ class DevelopActivity(activity.Activity):
shutil.copytree(olddir, targetdir)
self.open_activity(targetdir)
self.editor.reroot(olddir, targetdir)
-
+
def update_sidebar_to_page(self, page):
if self.numb:
#avoid infinite recursion
@@ -439,10 +436,10 @@ class DevelopActivity(activity.Activity):
self.numb = True
tree_selection.select_iter(tree_iter)
self.numb = False
-
-class DevelopEditToolbar(activity.EditToolbar):
+class DevelopEditToolbar(activity.EditToolbar):
+
def __init__(self, _activity, toolbox):
activity.EditToolbar.__init__(self)
@@ -456,7 +453,7 @@ class DevelopEditToolbar(activity.EditToolbar):
self.copy.connect('clicked', self._copy_cb)
self.paste.connect('clicked', self._paste_cb)
- # make expanded non-drawn visible separator to make
+ # make expanded non-drawn visible separator to make
#the search stuff right-align
separator = gtk.SeparatorToolItem()
separator.props.draw = False
@@ -464,16 +461,15 @@ class DevelopEditToolbar(activity.EditToolbar):
self.insert(separator, -1)
separator.show()
-
def _changed_cb(self, _buffer):
can_undo, can_redo = self._activity.editor.can_undo_redo()
self.undo.set_sensitive(can_undo)
self.redo.set_sensitive(can_redo)
-
+
def _undo_cb(self, button):
self._activity.editor.undo()
self._changed_cb(None)
-
+
def _redo_cb(self, button):
self._activity.editor.redo()
self._changed_cb(None)
@@ -483,7 +479,7 @@ class DevelopEditToolbar(activity.EditToolbar):
def _paste_cb(self, button):
self._activity.editor.paste()
-
+
# bad paul! this function was copied from sugar's activity.py via Write
def _add_widget(self, widget, expand=False):
tool_item = gtk.ToolItem()
@@ -494,10 +490,10 @@ class DevelopEditToolbar(activity.EditToolbar):
self.insert(tool_item, -1)
tool_item.show()
-
-class DevelopSearchToolbar(gtk.Toolbar):
-
+
+class DevelopSearchToolbar(gtk.Toolbar):
+
def __init__(self, _activity, toolbox):
gtk.Toolbar.__init__(self)
@@ -505,21 +501,19 @@ class DevelopSearchToolbar(gtk.Toolbar):
self._activity = _activity
# setup the search options
- self.s_opts = SearchOptions(where = S_WHERE.multifile,
- use_regex = False,
- ignore_caps = True,
- replace_all = False,
-
- #defaults to avoid creating
- #a new SearchOptions object for normal searches
- #should never be changed, just make a copy like:
- #SearchOptions(self.s_opts, forward=False)
- forward = True,
- stay = False
- )
+ self.s_opts = SearchOptions(where=S_WHERE.multifile,
+ use_regex=False,
+ ignore_caps=True,
+ replace_all=False,
+ #defaults to avoid creating
+ #a new SearchOptions object for normal searches
+ #should never be changed, just make a copy like:
+ #SearchOptions(self.s_opts, forward=False)
+ forward=True,
+ stay=False
+ )
self.safe_to_replace = False
-
-
+
self._search_entry = iconentry.IconEntry()
self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY,
SEARCH_ICONS[self.s_opts.use_regex][self.s_opts.where])
@@ -539,15 +533,15 @@ class DevelopSearchToolbar(gtk.Toolbar):
self.insert(self._findnext, -1)
self._findnext.show()
self._findnext.connect('clicked', self._findnext_cb)
-
+
self._settings = ToolButton(CAP_ICONS[self.s_opts.ignore_caps])
self._settings.set_tooltip(_('Search settings'))
self.insert(self._settings, -1)
self._settings.show()
self._settings.connect('clicked', self._settings_cb)
-
+
# Search settings menu
- # This menu should attach to something else beside findnext -
+ # This menu should attach to something else beside findnext -
#location is temporary.
palette = self._settings.get_palette()
sswo = self._set_where_options
@@ -575,15 +569,15 @@ class DevelopSearchToolbar(gtk.Toolbar):
menuitem.connect('activate', function, options)
palette.menu.append(menuitem)
menuitem.show()
-
- # make expanded non-drawn visible separator to make the replace
+
+ # make expanded non-drawn visible separator to make the replace
#stuff right-align
separator = gtk.SeparatorToolItem()
separator.props.draw = False
separator.set_expand(True)
self.insert(separator, -1)
separator.show()
-
+
# replace entry
self._replace_entry = iconentry.IconEntry()
self._replace_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY,
@@ -591,7 +585,7 @@ class DevelopSearchToolbar(gtk.Toolbar):
self._replace_entry.connect('changed', self._replace_entry_changed_cb)
self._replace_entry.add_clear_button()
self._add_widget(self._replace_entry, expand=True)
-
+
#replace button
self._replace_button = ToolButton(REPLACE_ICONS[
self.s_opts.replace_all])
@@ -599,7 +593,7 @@ class DevelopSearchToolbar(gtk.Toolbar):
self.insert(self._replace_button, -1)
self._replace_button.show()
self._replace_button.connect('clicked', self._replace_cb)
-
+
palette = self._replace_button.get_palette()
ssro = self._set_replace_options
#TODO: move data structure to a member and the logic to a function
@@ -614,11 +608,11 @@ class DevelopSearchToolbar(gtk.Toolbar):
menuitem.connect('activate', function, options)
palette.menu.append(menuitem)
menuitem.show()
-
+
self._activity.editor.connect('changed', self._changed_cb)
-
+
self._activity.connect('key_press_event', self._on_key_press_event)
-
+
def _on_key_press_event(self, widget, event):
keyname = gtk.gdk.keyval_name(event.keyval)
if "F5" <= keyname and keyname <= "F8":
@@ -631,7 +625,7 @@ class DevelopSearchToolbar(gtk.Toolbar):
elif keyname == "F8":
self._replace_or_go_to_replace_entry_cb()
return True
-
+
def _go_to_search_entry_cb(self):
entry = self._search_entry
text = self._activity.editor.get_selected()
@@ -645,7 +639,7 @@ class DevelopSearchToolbar(gtk.Toolbar):
entry.delete_text(0, 0)
entry.set_position(-1)
#for some reason, grab_focus doesn't work otherwise
-
+
def _replace_or_go_to_replace_entry_cb(self):
if self.safe_to_replace:
self._replace_cb()
@@ -653,53 +647,53 @@ class DevelopSearchToolbar(gtk.Toolbar):
self._replace_entry.select_region(0, -1)
self._replace_entry.grab_focus()
self.switch_to()
-
+
def switch_to(self):
self._toolbox.set_current_toolbar(TOOLBAR_SEARCH)
-
+
def _reset_search_icons(self):
self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY,
SEARCH_ICONS[self.s_opts.use_regex][self.s_opts.where])
self._settings.set_icon(CAP_ICONS[self.s_opts.ignore_caps])
self._replace_button.set_icon(REPLACE_ICONS[self.s_opts.replace_all])
self._reset_replace_sensitivity()
-
+
def _reset_replace_sensitivity(self):
- self._replace_button.set_sensitive(self.s_opts.where ==
- S_WHERE.selection
+ self._replace_button.set_sensitive(self.s_opts.where ==
+ S_WHERE.selection
or self.s_opts.replace_all)
-
+
def _set_where_options(self, menu, option):
- self.s_opts.where = option #IGNORE:W0201
+ self.s_opts.where = option # IGNORE:W0201
self._reset_search_icons()
-
+
def _set_how_options(self, menu, option):
- self.s_opts.use_regex = option #IGNORE:W0201
+ self.s_opts.use_regex = option # IGNORE:W0201
self._reset_search_icons()
-
+
def _set_cap_options(self, menu, option):
- self.s_opts.ignore_caps = option #IGNORE:W0201
+ self.s_opts.ignore_caps = option # IGNORE:W0201
self._reset_search_icons()
-
+
def _set_replace_options(self, menu, option):
- self.s_opts.replace_all = option #IGNORE:W0201
+ self.s_opts.replace_all = option # IGNORE:W0201
if option and self.s_opts.where == S_WHERE.multifile:
- self.s_opts.where = S_WHERE.file #for safety:
- #do not replace all in multifile except explicitly
+ self.s_opts.where = S_WHERE.file # for safety:
+ #do not replace all in multifile except explicitly
self._reset_search_icons()
-
+
def _changed_cb(self, _buffer):
self._reset_replace_sensitivity()
#if self.s_opts.where == S_WHERE.selection:
# self._set_where_options(None, S_WHERE.file)
-
+
def _settings_cb(self, button):
self._set_cap_options(None, not self.s_opts.ignore_caps)
-
+
def _replace_cb(self, button=None):
ftext = self._search_entry.props.text
rtext = self._replace_entry.props.text
- replaced, found = self._activity.editor.replace(ftext, rtext,
+ replaced, found = self._activity.editor.replace(ftext, rtext,
self.s_opts)
if found:
self._replace_button.set_sensitive(True)
@@ -707,7 +701,7 @@ class DevelopSearchToolbar(gtk.Toolbar):
def _search_entry_activated_cb(self, entry):
text = self._search_entry.props.text
if text:
- self._findnext_cb(None)
+ self._findnext_cb(None)
def _search_entry_changed_cb(self, entry):
self.safe_to_replace = False
@@ -718,34 +712,35 @@ class DevelopSearchToolbar(gtk.Toolbar):
else:
self._findprev.set_sensitive(True)
self._findnext.set_sensitive(True)
- if not self.s_opts.use_regex: #do not do partial searches for regex
- if self._activity.editor.find_next(text,
- SearchOptions(self.s_opts,
- stay=True,
- where=(self.s_opts.where if
+ if not self.s_opts.use_regex:
+ #do not do partial searches for regex
+ if self._activity.editor.find_next(text,
+ SearchOptions(self.s_opts,
+ stay=True,
+ where=(self.s_opts.where if
self.s_opts.where != S_WHERE.multifile
else S_WHERE.file))):
#no multifile, or focus gets grabbed
self._replace_button.set_sensitive(True)
-
+
def _replace_entry_changed_cb(self, entry):
if self._replace_entry.props.text:
self.safe_to_replace = True
-
+
def _findprev_cb(self, button=None):
ftext = self._search_entry.props.text
if ftext:
- if self._activity.editor.find_next(ftext,
+ if self._activity.editor.find_next(ftext,
SearchOptions(self.s_opts,
forward=False)):
self._replace_button.set_sensitive(True)
-
+
def _findnext_cb(self, button=None):
ftext = self._search_entry.props.text
if ftext:
if self._activity.editor.find_next(ftext, self.s_opts):
self._replace_button.set_sensitive(True)
-
+
# bad paul! this function was copied from sugar's activity.py via Write
def _add_widget(self, widget, expand=False):
tool_item = gtk.ToolItem()
@@ -757,71 +752,72 @@ class DevelopSearchToolbar(gtk.Toolbar):
self.insert(tool_item, -1)
tool_item.show()
+
class DevelopFileToolbar(gtk.Toolbar):
def __init__(self, activity):
gtk.Toolbar.__init__(self)
-
+
self.activity = activity
-
+
insert = ToolButton('insert-image')
insert.set_tooltip(_('Add a blank file...'))
insert.connect('clicked', self._add_file_cb)
-
+
palette = insert.get_palette()
-
+
dirmenu = MenuItem(_('Add a directory...'))
dirmenu.connect('activate', self._add_dir_cb)
palette.menu.append(dirmenu)
-
+
dirmenu.show()
insert.show()
-
+
self.insert(insert, -1)
-
+
remove = ToolButton('erase')
remove.set_tooltip(_('Erase a file...'))
remove.connect('clicked', self._erase_file_cb)
-
+
palette = remove.get_palette()
-
+
dirmenu = MenuItem(_('Erase a directory...'))
dirmenu.connect('activate', self._erase_dir_cb)
palette.menu.append(dirmenu)
dirmenu.show()
remove.show()
-
+
self.insert(remove, -1)
-
+
open = ToolButton('text-x-generic')
open.set_tooltip(_('View an external file...'))
open.connect('clicked', self._open_file_cb)
-
+
palette = open.get_palette()
-
+
dirmenu = MenuItem(_('Import an external file...'))
dirmenu.connect('activate', self._import_file_cb)
palette.menu.append(dirmenu)
dirmenu.show()
open.show()
-
+
self.insert(open, -1)
-
- def _add_file_cb(self, menu, sourcepath = None):
+
+ def _add_file_cb(self, menu, sourcepath=None):
self.activity.set_dirty(True)
- chooser = gtk.FileChooserDialog(_('Name your new file...'),
+ chooser = gtk.FileChooserDialog(_('Name your new file...'),
self.activity, gtk.FILE_CHOOSER_ACTION_SAVE,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
chooser.set_current_folder(self.activity.activity_dir)
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
-
+
if not filename.startswith(self.activity.activity_dir):
self.activity.show_msg(_("You cannot create a file "
"outside of the activity directory."),
- _("Error: Outside Activity"))
+ _("Error: Outside Activity"))
return
if not os.path.exists(filename):
if sourcepath:
@@ -833,25 +829,25 @@ class DevelopFileToolbar(gtk.Toolbar):
else:
chooser.destroy()
del chooser
-
+
def _add_dir_cb(self, menu):
self.activity.set_dirty(True)
- chooser = gtk.FileChooserDialog(_('Name your new directory...'),
+ chooser = gtk.FileChooserDialog(_('Name your new directory...'),
self.activity, gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
chooser.set_current_folder(self.activity.activity_dir)
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
dirname = chooser.get_filename()
chooser.destroy()
-
+
if not os.path.exists(filename):
os.mkdir(path)
self.activity.refresh_files()
-
+
if not os.path.isdir(filename):
self.activity.debug_msg(_("Error: directory creation failed."),
- DEBUG_FILTER_LEVEL)
+ DEBUG_FILTER_LEVEL)
else:
chooser.destroy()
del chooser
@@ -859,29 +855,29 @@ class DevelopFileToolbar(gtk.Toolbar):
def _prune_manifest(self):
act_dir = self.activity.activity_dir
bundle = self.activity.bundle = ActivityBundle(act_dir)
- manifestlines = bundle.manifest # trim MANIFEST
- with file(os.path.join(act_dir,"MANIFEST"), "wb") as manifest:
+ manifestlines = bundle.manifest # trim MANIFEST
+ with file(os.path.join(act_dir, "MANIFEST"), "wb") as manifest:
for line in manifestlines:
manifest.write(line + "\n")
-
- def _show_new_file(self,filename):
+
+ def _show_new_file(self, filename):
if os.path.isfile(filename):
with file(os.path.join(self.activity.activity_dir, "MANIFEST"),
"a") as manifest:
manifest.write(filename[len(os.path.join(
- self.activity.activity_dir,"")):]+"\n")
+ self.activity.activity_dir, "")):] + "\n")
self.activity.refresh_files()
else:
self.activity.debug_msg(_("Error: file creation failed."),
DEBUG_FILTER_LEVEL)
-
+
def _erase_file_cb(self, menu):
- chooser = gtk.FileChooserDialog(_('Pick the file to erase...'),
+ chooser = gtk.FileChooserDialog(_('Pick the file to erase...'),
self.activity, gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_DELETE, gtk.RESPONSE_OK))
chooser.set_current_folder(self.activity.activity_dir)
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
if os.path.isfile(filename):
@@ -890,25 +886,25 @@ class DevelopFileToolbar(gtk.Toolbar):
self.activity.refresh_files()
else:
self.activity.debug_msg(_("Error: file deletion failed."),
- DEBUG_FILTER_LEVEL)
-
+ DEBUG_FILTER_LEVEL)
else:
chooser.destroy()
del chooser
-
+
def _erase_dir_cb(self, menu):
- chooser = gtk.FileChooserDialog(_('Pick the directory to erase...'),
+ chooser = gtk.FileChooserDialog(_('Pick the directory to erase...'),
self.activity, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_DELETE, gtk.RESPONSE_OK))
chooser.set_current_folder(self.activity.activity_dir)
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
if os.listdir(filename):
alert = ConfirmationAlert()
name = filename[len(self.activity.activity_dir):]
- alert.props.title=_('Are you sure you want to erase %s?') % name
+ alert.props.title = \
+ _('Are you sure you want to erase %s?') % name
alert.connect('response', self._alert_response, filename)
self.activity.add_alert(alert)
else:
@@ -916,7 +912,7 @@ class DevelopFileToolbar(gtk.Toolbar):
else:
chooser.destroy()
del chooser
-
+
def _alert_response(self, alert, response, filename):
if alert:
self.activity.remove_alert(alert)
@@ -927,13 +923,13 @@ class DevelopFileToolbar(gtk.Toolbar):
self.activity.refresh_files()
def _open_file_cb(self, button):
- chooser = gtk.FileChooserDialog(_('Pick the file to open...'),
- self.activity,
+ chooser = gtk.FileChooserDialog(_('Pick the file to open...'),
+ self.activity,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
chooser.set_current_folder(os.path.expanduser("~"))
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
dso = datastore.create()
@@ -945,16 +941,16 @@ class DevelopFileToolbar(gtk.Toolbar):
del chooser
def _import_file_cb(self, button):
- chooser = gtk.FileChooserDialog(_('Pick the file to import...'),
- self.activity,
+ chooser = gtk.FileChooserDialog(_('Pick the file to import...'),
+ self.activity,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
chooser.set_current_folder(os.path.expanduser("~"))
- if chooser.run() == gtk.RESPONSE_OK:
+ if chooser.run() == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
- self._add_file_cb(None,filename)
+ self._add_file_cb(None, filename)
else:
chooser.destroy()
del chooser