Shutdown project process on close.

looper
Ben Niemann 7 years ago
parent 60e233f305
commit 58480a53e2

@ -229,8 +229,10 @@ class ObjectPropertyBase(PropertyBase):
def create(self, state):
cls_name = state['__class__']
if cls_name == self.cls.__name__:
return self.cls(state=state)
return self.cls.get_subclass(cls_name)(state=state)
cls = self.cls
else:
cls = self.cls.get_subclass(cls_name)
return cls(state=state)
def to_state(self, instance):
raise NotImplementedError

@ -158,14 +158,14 @@ class BaseEditorApp(QApplication):
in self.project_registry.projects.values()
if project.path))
def addProject(self, project):
self.win.addProjectView(project)
def addProject(self, project_connection):
self.win.addProjectView(project_connection)
self._updateOpenedProjects()
def removeProject(self, project):
self.win.removeProjectView(project)
#self._projects.remove(project)
async def removeProject(self, project_connection):
self.win.removeProjectView(project_connection)
self._updateOpenedProjects()
await self.project_registry.close_project(project_connection)
class EditorApp(BaseEditorApp):

@ -354,9 +354,6 @@ class EditorWindow(ui_base.CommonMixin, QMainWindow):
def closeEvent(self, event):
logger.info("CloseEvent received")
event.ignore()
self.app.quit()
return
for idx in range(self._project_tabs.count()):
view = self._project_tabs.widget(idx)
@ -410,10 +407,10 @@ class EditorWindow(ui_base.CommonMixin, QMainWindow):
self._add_score_track_action.setEnabled(True)
self._main_area.setCurrentIndex(0)
def removeProjectView(self, project):
def removeProjectView(self, project_connection):
for idx in range(self._project_tabs.count()):
view = self._project_tabs.widget(idx)
if view.project is project:
if view.project_connection is project_connection:
self._project_tabs.removeTab(idx)
if self._project_tabs.count() == 0:
self._main_area.setCurrentIndex(1)
@ -429,7 +426,9 @@ class EditorWindow(ui_base.CommonMixin, QMainWindow):
view = self._project_tabs.currentWidget()
closed = view.close()
if closed:
self.app.removeProject(view.project)
self.event_loop.create_task(
self.call_with_exc(
self.app.removeProject(view.project_connection)))
def onCurrentProjectTabChanged(self, idx):
project_view = self._project_tabs.widget(idx)
@ -439,7 +438,9 @@ class EditorWindow(ui_base.CommonMixin, QMainWindow):
view = self._project_tabs.widget(idx)
closed = view.close()
if closed:
self.app.removeProject(view.project)
self.event_loop.create_task(
self.call_with_exc(
self.app.removeProject(view.project_connection)))
def getCurrentProject(self):
view = self._project_tabs.currentWidget()

@ -38,6 +38,10 @@ class Project(object):
await self.create_process()
await self.client.create(self.path)
async def close(self):
await self.client.close()
await self.client.shutdown()
class ProjectRegistry(object):
def __init__(self, event_loop, process_manager):
@ -56,3 +60,7 @@ class ProjectRegistry(object):
await project.create()
self.projects[path] = project
return project
async def close_project(self, project):
await project.close()
del self.projects[project.path]

@ -109,7 +109,6 @@ class ProjectViewImpl(QtWidgets.QWidget):
self._sheets_widget.removeWidget(sheet_view)
sheet_view.close()
#TODO: self._project.close()
event.accept()
def onSheetsChanged(self, action, *args):

Loading…
Cancel
Save