def _update_available_project_menu(self): """ Discover all projects and generate an action for each one. Then connect this action to _on_open_project_triggered """ self.menu_available_projects.clear() self.action_available_project.clear() all_projects = {} # dict parent dir -> list of Project objects for project in projects(): all_projects.setdefault(project.projectdir, []).append(project) home = path(get_default_home_dir()) for projectdir, _projects in all_projects.iteritems(): relpath = home.relpathto(projectdir) label = unicode(relpath) menu = QtGui.QMenu(label, self.menu_available_projects) for project in sorted(_projects, key=lambda project: project.label): icon = obj_icon(project, default=DEFAULT_PROJECT_ICON, paths=[project.path]) action = QtGui.QAction(icon, project.label, self.menu_available_projects) action.triggered.connect(self._on_open_project_triggered) menu.addAction(action) self.action_available_project[action] = project self.menu_available_projects.addMenu(menu) return self.menu_available_projects
def __init__(self): super(GenericFileBrowser, self).__init__() self.model = QtGui.QFileSystemModel() self.tree = QtGui.QTreeView() self.tree.setModel(self.model) self.tree.header().setResizeMode(QtGui.QHeaderView.ResizeToContents) self._home_dir = settings.get_default_home_dir() self._cwd = Path(".").abspath() self.model.setRootPath(self._home_dir) self.tree.setRootIndex(self.model.index(self._home_dir)) layout = QtGui.QGridLayout(self) layout.addWidget(self.tree) self._create_actions() self._create_connections()
def groupby(self, **kwds): filter_name = kwds.get("filter_name", None) if filter_name == 'path': root = Path(get_default_home_dir()) def parent_path(project): return str(root.relpathto(project.path.parent)) self.groupby(function=parent_path) elif filter_name == 'authors': def label(criterion): if isinstance(criterion, list): return ', '.join(criterion) else: return str(criterion) self.groupby(criteria=filter_name, label=label) elif filter_name: self.groupby(criteria=filter_name) else: self._explorer.groupby(**kwds)