diff trunk/src/translator/translator.py @ 460:77c17bbe9d20

Translator: added new modules; applied fixes. Added a new directory i18n. It contains the translator project file and the language catalogue files. The translator main window has a dock widget on the left hand-side now, with a project tree widget.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Tue, 30 Oct 2007 18:12:01 +0100
parents 5968e273449b
children b6fa41e6f0b4
line wrap: on
line diff
--- a/trunk/src/translator/translator.py	Tue Oct 30 16:58:17 2007 +0200
+++ b/trunk/src/translator/translator.py	Tue Oct 30 18:12:01 2007 +0100
@@ -11,12 +11,14 @@
 from ui_about import Ui_AboutDialog
 from ui_new_project import Ui_NewProjectDialog
 from ui_project_properties import Ui_ProjectProperties
+from ui_msg_form import Ui_MsgForm
 
-from project import Project
+from project import Project, newProjectData
 
 g_scriptDir = sys.path[0]
 g_CWD = os.getcwd()
 g_projectExt = ".tproj"
+g_catExt = ".cat"
 g_settingsFile = os.path.join(g_scriptDir, "settings.yaml")
 g_settings = {}
 
@@ -28,12 +30,19 @@
     self.project = None
     # Modifications
     self.disableMenuItems()
+    self.projectDock = QtGui.QDockWidget("Project", self)
+    self.projectTree = ProjectTree(self)
+    self.projectDock.setWidget(self.projectTree)
+    self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.projectDock)
     # Custom connections
     QtCore.QObject.connect(self.action_About, QtCore.SIGNAL("triggered()"), self.showAboutDialog)
     QtCore.QObject.connect(self.action_New_Project, QtCore.SIGNAL("triggered()"), self.createNewProject)
     QtCore.QObject.connect(self.action_Open_Project, QtCore.SIGNAL("triggered()"), self.openProjectAction)
     QtCore.QObject.connect(self.action_Close_Project, QtCore.SIGNAL("triggered()"), self.closeProject)
     QtCore.QObject.connect(self.action_Properties, QtCore.SIGNAL("triggered()"), self.showProjectProperties)
+    QtCore.QObject.connect(self.action_Add_Catalogue, QtCore.SIGNAL("triggered()"), self.addCatalogue)
+    QtCore.QObject.connect(self.action_Add_New_Catalogue, QtCore.SIGNAL("triggered()"), self.addNewCatalogue)
+    QtCore.QObject.connect(self.projectTree, QtCore.SIGNAL("currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)"), self.projectTreeItemChanged)
 
     self.readSettings()
 
@@ -48,14 +57,20 @@
     dialog.exec_()
 
   def createNewProject(self):
-    NewProjectDialog().exec_()
+    if self.cantCloseProjectIfOpen():
+      return
+    dialog = NewProjectDialog()
+    code = dialog.exec_()
+    if code == QtGui.QDialog.Accepted:
+      self.openProject(str(dialog.projectFilePath.text()))
 
   def openProjectAction(self):
-    if self.closeProjectIfOpen():
+    if self.cantCloseProjectIfOpen():
       return
     filePath = QtGui.QFileDialog.getOpenFileName(self, "Select Project File", g_CWD, "Translator Project (*%s)" % g_projectExt);
+    filePath = str(filePath)
     if filePath:
-      self.openProject(str(filePath))
+      self.openProject(filePath)
 
   def openProject(self, filePath):
     from errors import LoadingError
@@ -65,11 +80,16 @@
       QtGui.QMessageBox.critical(self, "Error", u"Couldn't load project file:\n\n"+str(e))
       return
     self.enableMenuItems()
-    self.projectTree = ProjectTree(self)
     self.projectTree.setProject(self.project)
-    self.vboxlayout.addWidget(self.projectTree)
+
+  def addCatalogue(self):
+    filePath = QtGui.QFileDialog.getOpenFileName(self, "Select Project File", g_CWD, "Catalogue (*%s)" % g_catExt);
+    filePath = str(filePath)
 
-  def closeProjectIfOpen(self):
+  def addNewCatalogue(self):
+    pass
+
+  def cantCloseProjectIfOpen(self):
     if self.project == None:
       return False
     return self.closeProject()
@@ -85,8 +105,7 @@
     del self.project
     self.project = None
     self.disableMenuItems()
-    self.vboxlayout.removeWidget(self.projectTree)
-    self.projectTree.close()
+    self.projectTree.clear()
     return True
 
   def enableMenuItems(self):
@@ -97,6 +116,13 @@
     self.action_Close_Project.setEnabled(False)
     self.menubar.removeAction(self.menu_Project.menuAction())
 
+  def projectTreeItemChanged(self, item, column):
+    if item == None:
+      return
+    # TODO: set centralwidget to the form corresponding to the item.
+    if isinstance(item, LangFileItem):
+      print "LangFileItem"
+
   def closeEvent(self, event):
     if self.closeProject() == False:
       event.ignore()
@@ -139,6 +165,11 @@
     }
     yaml.dump(g_settings, open(g_settingsFile, "w")) #default_flow_style=False
 
+class MsgForm(QtGui.QWidget, Ui_MsgForm):
+  def __init__(self):
+    QtGui.QWidget.__init__(self)
+    self.setupUi(self)
+
 class MsgIDItem(QtGui.QTreeWidgetItem):
   def __init__(self, parent, text):
     QtGui.QTreeWidgetItem.__init__(self, parent, [text])
@@ -152,22 +183,28 @@
     QtGui.QTreeWidget.__init__(self, parent)
     self.topItem = None
     self.msgIDsItem = None
+    self.headerItem().setHidden(True)
 
   def setProject(self, project):
-   self.project = project
+    self.project = project
 
-   self.topItem = QtGui.QTreeWidgetItem([self.project.name])
-   self.addTopLevelItem(self.topItem)
+    self.topItem = QtGui.QTreeWidgetItem([self.project.name])
+    self.addTopLevelItem(self.topItem)
+
+    for langFile in self.project.langFiles:
+      langFileItem = LangFileItem(self.topItem, langFile.langCode)
 
-   self.msgIDsItem = QtGui.QTreeWidgetItem(self.topItem, ["Message IDs"])
-   for msgID in self.project.msgIDs:
-     MsgIDItem(self.msgIDsItem, msgID["Name"])
+    self.msgIDsItem = QtGui.QTreeWidgetItem(self.topItem, ["Message IDs"])
+    for msgID in self.project.msgIDs:
+      MsgIDItem(self.msgIDsItem, msgID["Name"])
 
-   for langFile in self.project.langFiles:
-     langFileItem = LangFileItem(self.topItem, langFile.langCode)
+    for x in [self.topItem, self.msgIDsItem]:
+      x.setExpanded(True)
 
-   for x in [self.topItem, self.msgIDsItem]:
-     x.setExpanded(True)
+  def clear(self):
+    self.topItem = None
+    self.msgIDsItem = None
+    QtGui.QTreeWidget.clear(self)
 
 class NewProjectDialog(QtGui.QDialog, Ui_NewProjectDialog):
   def __init__(self):
@@ -196,7 +233,7 @@
       QtGui.QMessageBox.warning(self, "Warning", "Please, choose or enter a path for the project file.")
       return
 
-    projectData = Project.newProjectData(projectName)
+    projectData = newProjectData(projectName)
 
     if os.path.splitext(filePath)[1] != g_projectExt:
       filePath += g_projectExt