Mercurial > projects > dil
diff trunk/src/translator/translator.py @ 479:044b5393f8bc
Translator: added ClosingProjectDialog.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Mon, 12 Nov 2007 17:18:30 +0100 |
parents | 3b5421d40f9b |
children | 04adc4e3fdda |
line wrap: on
line diff
--- a/trunk/src/translator/translator.py Sun Nov 11 16:43:37 2007 +0200 +++ b/trunk/src/translator/translator.py Mon Nov 12 17:18:30 2007 +0100 @@ -12,6 +12,7 @@ from ui_new_project import Ui_NewProjectDialog from ui_project_properties import Ui_ProjectProperties from ui_msg_form import Ui_MsgForm +from ui_closing_project import Ui_ClosingProjectDialog from project import Project, newProjectData @@ -29,9 +30,9 @@ Qt.SLOT = QtCore.SLOT def QTabWidgetCloseAll(self): - for i in range(0, self.count()): - widget = self.widget(0) - self.removeTab(0) + for i in range(self.count()-1,-1,-1): + widget = self.widget(i) + self.removeTab(i) widget.close() QtGui.QTabWidget.closeAll = QTabWidgetCloseAll @@ -50,17 +51,18 @@ self.projectDock.setWidget(self.projectTree) self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.projectDock) # Custom connections - Qt.connect(self.action_About, Qt.SIGNAL("triggered()"), self.showAboutDialog) - Qt.connect(self.action_New_Project, Qt.SIGNAL("triggered()"), self.createNewProject) - Qt.connect(self.action_Open_Project, Qt.SIGNAL("triggered()"), self.openProjectAction) - Qt.connect(self.action_Close_Project, Qt.SIGNAL("triggered()"), self.closeProject) - Qt.connect(self.action_Save, Qt.SIGNAL("triggered()"), self.saveForm) - Qt.connect(self.action_Save_All, Qt.SIGNAL("triggered()"), self.saveAllForms) - Qt.connect(self.action_Close, Qt.SIGNAL("triggered()"), self.closeForm) - Qt.connect(self.action_Close_All, Qt.SIGNAL("triggered()"), self.closeAllForms) - Qt.connect(self.action_Properties, Qt.SIGNAL("triggered()"), self.showProjectProperties) - Qt.connect(self.action_Add_Catalogue, Qt.SIGNAL("triggered()"), self.addCatalogue) - Qt.connect(self.action_Add_New_Catalogue, QtCore.SIGNAL("triggered()"), self.addNewCatalogue) + triggered = Qt.SIGNAL("triggered()") + Qt.connect(self.action_About, triggered, self.showAboutDialog) + Qt.connect(self.action_New_Project, triggered, self.createNewProject) + Qt.connect(self.action_Open_Project, triggered, self.openProjectAction) + Qt.connect(self.action_Close_Project, triggered, self.closeProjectAction) + Qt.connect(self.action_Save, triggered, self.saveForm) + Qt.connect(self.action_Save_All, triggered, self.saveAllForms) + Qt.connect(self.action_Close, triggered, self.closeForm) + Qt.connect(self.action_Close_All, triggered, self.closeAllForms) + Qt.connect(self.action_Properties, triggered, self.showProjectProperties) + Qt.connect(self.action_Add_Catalogue, triggered, self.addCatalogue) + Qt.connect(self.action_Add_New_Catalogue, triggered, self.addNewCatalogue) Qt.connect(self.projectTree, Qt.SIGNAL("itemDoubleClicked(QTreeWidgetItem*,int)"), self.projectTreeItemDblClicked) Qt.connect(self.projectTree, Qt.SIGNAL("onKeyEnter"), self.projectTreeItemActivated) Qt.connect(self.projectTree, Qt.SIGNAL("onKeyDelete"), self.projectTreeItemDeleted) @@ -78,19 +80,21 @@ dialog.exec_() def createNewProject(self): - if self.cantCloseProjectIfOpen(): + if self.rejectClosingProject(): return dialog = NewProjectDialog() code = dialog.exec_() if code == QtGui.QDialog.Accepted: + self.closeProject() self.openProject(str(dialog.projectFilePath.text())) def openProjectAction(self): - if self.cantCloseProjectIfOpen(): + if self.rejectClosingProject(): return filePath = QtGui.QFileDialog.getOpenFileName(self, "Select Project File", g_CWD, "Translator Project (*%s)" % g_projectExt); filePath = str(filePath) if filePath: + self.closeProject() self.openProject(filePath) def openProject(self, filePath): @@ -103,6 +107,10 @@ self.enableMenuItems() self.projectTree.setProject(self.project) + def closeProjectAction(self): + if not self.rejectClosingProject(): + self.closeProject() + def addCatalogue(self): filePath = QtGui.QFileDialog.getOpenFileName(self, "Select Project File", g_CWD, "Catalogue (*%s)" % g_catExt); filePath = str(filePath) @@ -110,25 +118,37 @@ def addNewCatalogue(self): pass - def cantCloseProjectIfOpen(self): + def rejectClosingProject(self): if self.project == None: return False - return self.closeProject() + + modifiedDocs = [] + # Check if any open document is modified. + for i in range(0, self.pages.count()): + if self.pages.widget(i).isModified: + modifiedDocs += [self.pages.widget(i)] + # Display dialog if so. + if len(modifiedDocs): + dialog = ClosingProjectDialog(modifiedDocs) + code = dialog.exec_() + if code == dialog.Accepted: + for doc in dialog.getSelectedDocs(): + self.saveDocument(doc) + elif code == dialog.Rejected: + return True + elif code == dialog.DiscardAll: + pass + + return False def closeProject(self): if self.project == None: - return True - MB = QtGui.QMessageBox - button = MB.question(self, "Closing", "Close the current project?", MB.Ok | MB.Cancel, MB.Cancel) - if button == MB.Cancel: - return False - + return del self.project self.project = None self.disableMenuItems() self.projectTree.clear() self.pages.closeAll() - return True def enableMenuItems(self): #self.action_Close_Project.setEnabled(True) @@ -184,9 +204,11 @@ def saveDocument(self, form): if form.isModified: + # Reset tab text. index = self.pages.indexOf(form) text = form.getDocumentTitle() self.pages.setTabText(index, text) + form.save() def closeForm(self): @@ -194,7 +216,7 @@ self.closeDocument(self.pages.currentWidget()) def closeAllForms(self): - for i in range(0, self.pages.count()): + for i in range(self.pages.count()-1, -1, -1): self.closeDocument(self.pages.widget(i)) def closeDocument(self, form): @@ -211,7 +233,7 @@ return True def closeEvent(self, event): - if self.closeProject() == False: + if self.rejectClosingProject(): event.ignore() return self.writeSettings() @@ -439,7 +461,6 @@ return self.msgForm def docClosed(self): - print "docClosed()" self.msgForm = None class ProjectItem(QtGui.QTreeWidgetItem): @@ -502,6 +523,34 @@ self.msgIDsItem = None QtGui.QTreeWidget.clear(self) + +class ClosingProjectDialog(QtGui.QDialog, Ui_ClosingProjectDialog): + DiscardAll = 2 + def __init__(self, docs): + QtGui.QDialog.__init__(self) + self.setupUi(self) + Qt.connect(self.button_Discard_All, Qt.SIGNAL("clicked()"), self.discardAll) + + self.items = [] + for doc in docs: + title = doc.getDocumentTitle() + path = doc.getDocumentFullPath() + item = QtGui.QTreeWidgetItem([title, path]) + item.doc = doc + item.setFlags(item.flags()|Qt.ItemIsUserCheckable); + item.setCheckState(0, Qt.Checked) + self.items += [item] + self.treeWidget.addTopLevelItems(self.items) + + self.button_Cancel.setFocus() + + def getSelectedDocs(self): + return [item.doc for item in self.items if item.checkState(0)] + + def discardAll(self): + self.done(self.DiscardAll) + + class NewProjectDialog(QtGui.QDialog, Ui_NewProjectDialog): def __init__(self): QtGui.QDialog.__init__(self) @@ -522,11 +571,12 @@ projectName = str(self.projectName.text()) filePath = str(self.projectFilePath.text()) + MB = QtGui.QMessageBox if projectName == "": - QtGui.QMessageBox.warning(self, "Warning", "Please, enter a name for the project.") + MB.warning(self, "Warning", "Please, enter a name for the project.") return if filePath == "": - QtGui.QMessageBox.warning(self, "Warning", "Please, choose or enter a path for the project file.") + MB.warning(self, "Warning", "Please, choose or enter a path for the project file.") return projectData = newProjectData(projectName) @@ -537,7 +587,7 @@ try: yaml.dump(projectData, open(filePath, "w"), default_flow_style=False) except Exception, e: - QtGui.QMessageBox.critical(self, "Error", str(e)) + MB.critical(self, "Error", str(e)) return # Accept and close dialog.