import unittest from openalea.core.unittest_tools import TestCase, EventTracker from openalea.core.path import tempdir from openalea.core.path import path as Path from openalea.core.project.project import Project from openalea.core.project.manager import ProjectManager pm = ProjectManager() ev = EventTracker() # ev.debug = True pm.register_listener(ev) def get_data(filename): return Path(__file__).parent.abspath() / 'data' / filename class TestProjectManager(TestCase): def setUp(self): self.tmpdir = tempdir() self.tmpdir2 = tempdir() pm.clear() # Force to ignore default repositories pm.repositories = [self.tmpdir] ev.events # clear events def tearDown(self): self.tmpdir.rmtree()
from openalea.core.path import path as Path from openalea.core.path import tempdir from openalea.core.project.manager import ProjectManager from openalea.core.project.project import Project, _normpath from openalea.core.unittest_tools import TestCase, EventTracker # used to test symlinks only on unix systems win = 'win' in sys.platform pm = ProjectManager() pm.count = 0 ev = EventTracker() # ev.debug = True pm.register_listener(ev) def get_data(filename): return Path(__file__).parent.abspath() / 'data' / filename class TestProjectManager(TestCase): def setUp(self): self.tmpdir = tempdir() self.tmpdir2 = tempdir() pm.clear() # Force to ignore default repositories pm.repositories = [self.tmpdir] ev.events # clear events
class ProjectManagerWidget(QtGui.QWidget, AbstractListener): def __init__(self): QtGui.QWidget.__init__(self) AbstractListener.__init__(self) layout = QtGui.QVBoxLayout(self) self.view = ProjectManagerView() self.model = self.view.model() layout.addWidget(self.view) layout.setContentsMargins(0, 0, 0, 0) self.pm = ProjectManager() self.menu_available_projects = QtGui.QMenu(u'Available Projects') self.actionNewProj = self.view.actionNewProj self.actionOpenProj = self.view.actionOpenProj group = "Project" self._actions = [[group, "Manage Project", self.view.actionNewProj, 0], [group, "Manage Project", self.view.actionOpenProj, 0], [group, "Manage Project", self.view.actionSaveProj, 0], # [group, "Manage Project", self.view.actionSaveProjAs, 1], [group, "Manage Project", self.view.actionCloseProj, 0], # [group, "Manage Project", self.view.actionEditMeta, 1], # ["Project", "Manage Project", self.actionRenameProject, 1], ] self._actions += self.view._actions # Menu used to display all available projects. # This menu is filled dynamically each time this menu is opened self.menu_available_projects = QtGui.QMenu(u'Available Projects') self.menu_available_projects.aboutToShow.connect(self._update_available_project_menu) self.action_available_project = {} # Dict used to know what project corresponds to triggered action self.pm.register_listener(self) def initialize(self): self.view.initialize() self.pm.load_default() self.set_project(self.pm.cproject) def closeEvent(self, event): self.writeSettings() event.accept() def actions(self): return self._actions def toolbar_actions(self): return [ ["Project", "Manage", self.view.actionNewProj, 0], ["Project", "Manage", self.view.actionOpenProj, 0], ["Project", "Manage", self.view.actionSaveProj, 0], ["Project", "Manage", self.view.actionCloseProj, 0], ["Project", "Manage", self.view.actionSaveProjAs, 1], ["Project", "Manage", self.view.actionEditMeta, 1], ] def menus(self): actions = [action[2] for action in self.toolbar_actions()] menu = QtGui.QMenu('File', self) menu.addActions(actions) menu.addSeparator() menu.addMenu(self.menu_available_projects) return [menu] def project(self): if self.pm: return self.pm.cproject 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.pm.discover() self.menu_available_projects.clear() self.action_available_project.clear() all_projects = {} # dict parent dir -> list of Project objects for project in self.pm.projects: all_projects.setdefault(project.projectdir, []).append(project) for projectdir, projects in all_projects.iteritems(): title = unicode(projectdir.name) if title == 'data': title = 'Examples' menu = QtGui.QMenu(title, self.menu_available_projects) for project in projects: icon_path = project.icon_path icon_name = icon_path if icon_path else ":/images/resources/openalealogo.png" action = QtGui.QAction(QtGui.QIcon(icon_name), project.name, 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 _on_open_project_triggered(self): project = self.action_available_project[self.sender()] self.pm.cproject = project def notify(self, sender, event=None): signal, data = event if signal == 'project_changed': project = self.pm.cproject self.view.set_project(project=project) elif signal == 'project_updated': self.view.refresh() def set_project(self, project): self.view.set_project(project) #################################################################### # Settings #################################################################### def writeSettings(self): """ Register current settings (geometry and window state) in a setting file """ if self.pm.cproject: from openalea.core.settings import Settings last_proj = self.pm.cproject.name config = Settings() config.set("ProjectManager", "Last Project", last_proj) config.write()
class ProjectManagerWidget(QtGui.QWidget, AbstractListener): def __init__(self): QtGui.QWidget.__init__(self) AbstractListener.__init__(self) layout = QtGui.QVBoxLayout(self) self.view = ProjectManagerView() self.model = self.view.model() layout.addWidget(self.view) layout.setContentsMargins(0, 0, 0, 0) self.pm = ProjectManager() self.menu_available_projects = QtGui.QMenu(u'Available Projects') self.actionNewProj = self.view.actionNewProj self.actionOpenProj = self.view.actionOpenProj group = "Project" self._actions = [ [group, "Manage Project", self.view.actionNewProj, 0], [group, "Manage Project", self.view.actionOpenProj, 0], [group, "Manage Project", self.view.actionSaveProj, 0], # [group, "Manage Project", self.view.actionSaveProjAs, 1], [group, "Manage Project", self.view.actionCloseProj, 0], # [group, "Manage Project", self.view.actionEditMeta, 1], # ["Project", "Manage Project", self.actionRenameProject, 1], ] self._actions += self.view._actions # Menu used to display all available projects. # This menu is filled dynamically each time this menu is opened self.menu_available_projects = QtGui.QMenu(u'Available Projects') self.menu_available_projects.aboutToShow.connect( self._update_available_project_menu) self.action_available_project = { } # Dict used to know what project corresponds to triggered action self.pm.register_listener(self) def initialize(self): self.view.initialize() self.pm.load_default() self.set_project(self.pm.cproject) def closeEvent(self, event): self.writeSettings() event.accept() def actions(self): return self._actions def toolbar_actions(self): return [ ["Project", "Manage", self.view.actionNewProj, 0], ["Project", "Manage", self.view.actionOpenProj, 0], ["Project", "Manage", self.view.actionSaveProj, 0], ["Project", "Manage", self.view.actionCloseProj, 0], ["Project", "Manage", self.view.actionSaveProjAs, 1], ["Project", "Manage", self.view.actionEditMeta, 1], ] def menus(self): actions = [action[2] for action in self.toolbar_actions()] menu = QtGui.QMenu('File', self) menu.addActions(actions) menu.addSeparator() menu.addMenu(self.menu_available_projects) return [menu] def project(self): if self.pm: return self.pm.cproject 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.pm.discover() self.menu_available_projects.clear() self.action_available_project.clear() all_projects = {} # dict parent dir -> list of Project objects for project in self.pm.projects: all_projects.setdefault(project.projectdir, []).append(project) for projectdir, projects in all_projects.iteritems(): title = unicode(projectdir.name) if title == 'data': title = 'Examples' menu = QtGui.QMenu(title, self.menu_available_projects) for project in projects: icon_path = project.icon_path icon_name = icon_path if icon_path else ":/images/resources/openalealogo.png" action = QtGui.QAction(QtGui.QIcon(icon_name), project.name, 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 _on_open_project_triggered(self): project = self.action_available_project[self.sender()] self.pm.cproject = project def notify(self, sender, event=None): signal, data = event if signal == 'project_changed': project = self.pm.cproject self.view.set_project(project=project) elif signal == 'project_updated': self.view.refresh() def set_project(self, project): self.view.set_project(project) #################################################################### # Settings #################################################################### def writeSettings(self): """ Register current settings (geometry and window state) in a setting file """ if self.pm.cproject: from openalea.core.settings import Settings last_proj = self.pm.cproject.name config = Settings() config.set("ProjectManager", "Last Project", last_proj) config.write()