def __really_delete_db(self): """ Delete the selected database. If the database is open, close it first. Then scan the database directory, deleting the files, and finally removing the directory. """ # close the database if the user has requested to delete the # active database if self.data_to_delete[PATH_COL] == self.active: self.dbstate.no_database() store, node = self.selection.get_selected() path = store.get_path(node) node = self.model.get_iter(path) filename = self.model.get_value(node, FILE_COL) try: name_file = open(filename, "r") file_name_to_delete = name_file.read() name_file.close() RecentFiles.remove_filename(file_name_to_delete) for (top, dirs, files) in os.walk(self.data_to_delete[1]): for filename in files: os.unlink(os.path.join(top, filename)) os.rmdir(self.data_to_delete[1]) except (IOError, OSError), msg: DbManager.ERROR(_("Could not delete family tree"), str(msg))
def __rename_database(self, path, new_text): """ Renames the database by writing the new value to the name.txt file """ new_text = new_text.strip() node = self.model.get_iter(path) filename = self.model.get_value(node, FILE_COL) if self.existing_name(new_text, skippath=path): DbManager.ERROR( _("Could not rename the Family Tree."), _("Family Tree already exists, choose a unique name.")) return old_text, new_text = self.rename_database(filename, new_text) if not (old_text is None): RecentFiles.rename_filename(old_text, new_text) self.model.set_value(node, NAME_COL, new_text)
def handle_args_gui(self): """ method to handle the arguments that can be given for a GUI session. Returns the filename of the family tree that should be opened if user just passed a famtree or a filename 1/no options: a family tree can be given, if so, this name is tested and returned. If a filename, it is imported in a new db and name of new db returned 2/an open and/or import option can have been given, if so, this is handled, and None is returned """ if self.open_gui: # First check if a Gramps database was provided # (either a database path or a database name) db_path = self.__deduce_db_path(self.open_gui) if not db_path: # Apparently it is not a database. See if it is a file that # can be imported. db_path, title = self.dbman.import_new_db(self.open_gui, None) if db_path: # Test if not locked or problematic if not self.check_db(db_path, self.force_unlock): sys.exit(0) # Add the file to the recent items path = os.path.join(db_path, "name.txt") try: ifile = open(path) title = ifile.readline().strip() ifile.close() except: title = db_path RecentFiles.recent_files(db_path, title) self.open = db_path self.__open_action() else: sys.exit(0) return db_path # if not open_gui, parse any command line args. We can only have one # open argument, and perhaps some import arguments self.__open_action() self.__import_action() return None
def _post_load_newdb_nongui(self, filename, title=None): """ Called after a new database is loaded. """ if not filename: return if filename[-1] == os.path.sep: filename = filename[:-1] name = os.path.basename(filename) if title: name = title # This method is for UI stuff when the database has changed. # Window title, recent files, etc related to new file. self.dbstate.db.set_save_path(filename) # apply preferred researcher if loaded file has none res = self.dbstate.db.get_researcher() owner = get_researcher() if res.get_name() == "" and owner.get_name() != "": self.dbstate.db.set_researcher(owner) name_displayer.set_name_format(self.dbstate.db.name_formats) fmt_default = config.get('preferences.name-format') if fmt_default < 0: name_displayer.set_default_format(fmt_default) self.dbstate.db.enable_signals() self.dbstate.signal_change() config.set('paths.recent-file', filename) try: initial_person = self.dbstate.db.find_initial_person().get_handle() self.uistate.set_active(initial_person, 'Person') except: pass RecentFiles.recent_files(filename, name) self.file_loaded = True
def _post_load_newdb_nongui(self, filename, title=None): """ Called after a new database is loaded. """ if not filename: return if filename[-1] == os.path.sep: filename = filename[:-1] name = os.path.basename(filename) self.dbstate.db.db_name = title if title: name = title # This method is for UI stuff when the database has changed. # Window title, recent files, etc related to new file. self.dbstate.db.set_save_path(filename) # apply preferred researcher if loaded file has none res = self.dbstate.db.get_researcher() owner = get_researcher() # If the DB Owner Info is empty and # [default] Researcher is not empty and # database is empty, then copy default researcher to DB owner if res.is_empty() and not owner.is_empty() and self.dbstate.db.is_empty(): self.dbstate.db.set_researcher(owner) name_displayer.set_name_format(self.dbstate.db.name_formats) fmt_default = config.get('preferences.name-format') name_displayer.set_default_format(fmt_default) self.dbstate.db.enable_signals() self.dbstate.signal_change() config.set('paths.recent-file', filename) RecentFiles.recent_files(filename, name) self.file_loaded = True
def build(self): buf = StringIO() buf.write(_RCT_TOP) gramps_rf = RecentFiles.RecentFiles() count = 0 if self.active != DISABLED: self.uimanager.remove_ui(self.active) self.uimanager.remove_action_group(self.action_group) self.action_group = gtk.ActionGroup('RecentFiles') self.active = DISABLED actions = [] rfiles = gramps_rf.gramps_recent_files rfiles.sort(by_time) new_menu = gtk.Menu() for item in rfiles: try: title = item.get_name() filename = os.path.basename(item.get_path()) action_id = "RecentMenu%d" % count buf.write('<menuitem action="%s"/>' % action_id) actions.append((action_id, None, title, None, None, make_callback(item, self.load))) mitem = gtk.MenuItem(title, use_underline=False) mitem.connect('activate', make_callback(item, self.load)) mitem.show() new_menu.append(mitem) except RuntimeError: _LOG.info("Ignoring the RecentItem %s (%s)" % (title, filename)) pass # ignore no longer existing files count += 1 buf.write(_RCT_BTM) self.action_group.add_actions(actions) self.uimanager.insert_action_group(self.action_group, 1) self.active = self.uimanager.add_ui_from_string(buf.getvalue()) self.uimanager.ensure_update() buf.close() if len(rfiles) > 0: new_menu.show() self.uistate.set_open_recent_menu(new_menu)
def make_variables(self): self.db = Db.Db() self.path = self.export_path = QStandardPaths.writableLocation( QStandardPaths.DocumentsLocation) self.recent_files = RecentFiles.get(RECENT_FILES_MAX) self.closing = False