def StartViewer(entry, key, stringuri, parent=None, document=None): if not is_interactive(): return from Pyblio.GnomeUI import Utils uri = Fields.URL(stringuri) scheme, location, path, parameters, query, fragment = uri.url fileuri = uri.get_url() if uri.invalid or uri.inexact: message = Utils.Callback( _("Warning: This URL is marked as Invalid or Approximate: %s\nContinue?" ) % fileuri) if not message.answer(): return if document: document.statusbar.push(document.context_id, _(u"Determining Mime Type… ")) try: mimetype = gio.content_type_guess(fileuri) except RuntimeError, mesg: Utils.error_dialog( _("Cannot determine mime type for item %s ") % entry.key.key, _("URL in question is: %s\n" "You should check the url or path given for errors.\n" "Details: %s") % (fileuri, mesg)) if document: document.statusbar.pop(document.context_id) return
def clear_entries (self, * arg): if len (self.data) == 0: return if not Utils.Callback (_("Really remove all the entries?"), parent = self.w).answer (): return keys = self.data.keys () for key in keys: del self.data [key] self.redisplay_index (1) return
def drag_received (self, entries): for entry in entries: if self.data.would_have_key (entry.key): if not Utils.Callback (_(u"An entry called “%s” already exists.\nRename and add it anyway?") % entry.key.key, parent = self.w).answer (): continue self.changed = 1 self.data.add (entry) self.redisplay_index () self.index.set_scroll (entries [-1]) return
def modification_check (self): """Check for external modification, if necessary, ask user for permission to save. Returns True if no modifications or overwrite accepted by user.""" if self.modification_date: mod_date = os.stat (self.data.key.url [2]) [stat.ST_MTIME] if mod_date > self.modification_date: return Utils.Callback ( _("The database has been externally modified.\nOverwrite changes?"), self.w).answer () return True
def confirm (self): ''' eventually ask for modification cancellation ''' if not self.changed: return True result = Utils.Callback (_("The database has been modified.\nSave changes?"), self.w, cancel_add=True).answer() if result == 2: return False elif result and self.modification_check (): self.save_document () return True else: return True
def create_field(self, *arg): text = string.strip(string.lower(self.newfield.get_text())) if not re.match(r"[a-z][\w_-]*$", text): if not Utils.Callback( "The fieldname '%s' looks invalid.\nReally proceed?" % text, parent=self.w.get_toplevel()).answer(): return # update the current entry current = self.update(self.database, copy.deepcopy(self.entry)) if current is None: return self.entry = current newtype = Types.get_field(text).type self.entry[text] = newtype(_newcontent[newtype]) self.update_notebook()
def edit_entry (self, entries): if not (type (entries) is types.ListType): entries = self.index.selection () l = len (entries) if l == 0: return if l > 5: if not Utils.Callback (_("Really edit %d entries?") % l, parent = self.w).answer (): return for entry in entries: edit = Editor.Editor (self.data, entry, self.w) edit.Subscribe ('commit-edition', self.commit_edition) return
def save_document_as (self, * arg): # get a new file name (url, how) = FileSelector.URLFileSelection(_(u"Save As…"), has_auto=False, is_save=True, parent=self.w).run () if url is None: return if os.path.exists (url): if not Utils.Callback ( _(u"The file “%s” already exists.\nOverwrite it?") % url, parent = self.w).answer (): return try: file = open (url, 'w') except IOError, error: Utils.error_dialog_s(_("During opening:\n%s") % error [1]) return
def delete_entry (self, * arg): ''' removes the selected list of items after confirmation ''' entries = self.index.selection () l = len (entries) if l == 0: return offset = self.index.get_item_position (entries [-1]) if l > 1: question = _("Remove all the %d entries?") % len (entries) else: question = _(u"Remove entry “%s”?") % entries [0].key.key if not Utils.Callback (question, parent = self.w).answer (): return for entry in entries: del self.data [entry.key] self.redisplay_index (1) self.index.select_item (offset) return
def open_document (self, url, how = None, no_name = False): Utils.set_cursor (self.w, 'clock') orig_url = Fields.URL (url) url = orig_url.get_url () restore = False if orig_url.url [0] == 'file': name = orig_url.url [2] auto_save = os.path.join (os.path.dirname (name), 'x-pyblio-save-' + os.path.basename (name)) if os.path.exists (auto_save): mod_date = os.stat (name) [stat.ST_MTIME] mod_date_auto = os.stat (auto_save) [stat.ST_MTIME] if mod_date < mod_date_auto: restore = Utils.Callback (_("An autosave file was found which is newer than the original file.\nDo you want to restore it?"), self.w).answer () if restore: url = auto_save try: data = Open.bibopen (url, how = how) except (Exceptions.ParserError, Exceptions.FormatError, Exceptions.FileError, Exceptions.DateError), error: Utils.set_cursor (self.w, 'normal') Utils.error_dialog (_("Open error"), error, parent = self.w) return