diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2012-06-08 06:21:59 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2012-07-10 12:23:08 (GMT) |
commit | 498daa827c77d060f9ebad356317ab68160934df (patch) | |
tree | feaffcc34a449996a1e061d7f7ac120e4fd1a96a /develop-activity/develop_app.py | |
parent | 15e5faad1278c3ee6a609412407e0413f3f0fcd9 (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.py | 406 |
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 |