changeset 471:b6fa41e6f0b4

Translator: implemented some functionality of MsgForm.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 04 Nov 2007 14:06:04 +0100
parents e48a011e687a
children 30925590f392
files trunk/src/translator/langfile.py trunk/src/translator/msg_form.ui trunk/src/translator/project.py trunk/src/translator/translator.py trunk/src/translator/ui_msg_form.py
diffstat 5 files changed, 85 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/translator/langfile.py	Wed Oct 31 23:03:56 2007 +0200
+++ b/trunk/src/translator/langfile.py	Sun Nov 04 14:06:04 2007 +0100
@@ -39,7 +39,7 @@
         authors += [unicode(author[0]), unicode(author[1])]
     self.authors = authors
 
-    messages = []
+    self.msgDict = {} # {ID : msg, ...}
     for msg in self.messages:
       self.checkType(msg, dict, "LangFile: messages must be of type dict.")
       try:
@@ -49,12 +49,27 @@
         msg["LastEd"] = unicode(msg["LastEd"])
       except KeyError, e:
         raise LoadingError("LangFile: a message is missing the '%s' key." % str(e))
-      messages += [msg]
-    self.messages = messages
+      self.msgDict[msg["ID"]] = msg
 
   def checkType(self, var, type_, msg=""):
     if not isinstance(var, type_):
       raise LoadingError(msg)
 
+  def getMsg(self, ID):
+    for msg in self.messages:
+      if msg["ID"] == ID:
+        return msg
+    return None
+
+  def createMissingMessages(self, IDs):
+    for ID in IDs:
+      if not self.msgDict.has_key(ID):
+        msg = self.createEmptyMsg(ID)
+        self.msgDict[ID] = msg
+        self.messages += [msg]
+
+  def createEmptyMsg(self, ID):
+    return {"ID":ID,"Text":"","Annot":"","LastEd":""}
+
   def save(self):
     pass
--- a/trunk/src/translator/msg_form.ui	Wed Oct 31 23:03:56 2007 +0200
+++ b/trunk/src/translator/msg_form.ui	Sun Nov 04 14:06:04 2007 +0100
@@ -15,6 +15,9 @@
   <layout class="QVBoxLayout" >
    <item>
     <widget class="QSplitter" name="splitter" >
+     <property name="frameShape" >
+      <enum>QFrame::StyledPanel</enum>
+     </property>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
      </property>
@@ -28,11 +31,17 @@
         </widget>
        </item>
        <item>
-        <widget class="QListWidget" name="listWidget" />
+        <widget class="QTreeWidget" name="treeWidget" >
+         <column>
+          <property name="text" >
+           <string>1</string>
+          </property>
+         </column>
+        </widget>
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="" >
+     <widget class="QWidget" name="layoutWidget" >
       <layout class="QGridLayout" >
        <item row="0" column="0" >
         <layout class="QVBoxLayout" >
--- a/trunk/src/translator/project.py	Wed Oct 31 23:03:56 2007 +0200
+++ b/trunk/src/translator/project.py	Sun Nov 04 14:06:04 2007 +0100
@@ -58,6 +58,7 @@
 
     # Load language files.
     self.langFiles = []
+    IDList = [msg["ID"] for msgID in self.msgIDs]
     for filePath in self.langFilePaths:
       if not os.path.exists(filePath):
         # Look in project directory.
@@ -66,7 +67,9 @@
         if not os.path.exists(filePath2):
           raise LoadingError("Project: Language file '%s' doesn't exist"%filePath)
         filePath = filePath2
-      self.langFiles += [langfile.LangFile(filePath)]
+      langFile = langfile.LangFile(filePath)
+      langFile.createMissingMessages(IDList)
+      self.langFiles += [langFile]
 
   def checkType(self, var, type_):
     if not isinstance(var, type_):
--- a/trunk/src/translator/translator.py	Wed Oct 31 23:03:56 2007 +0200
+++ b/trunk/src/translator/translator.py	Sun Nov 04 14:06:04 2007 +0100
@@ -29,6 +29,8 @@
 
     self.project = None
     # Modifications
+    self.pages = QtGui.QStackedWidget()
+    self.setCentralWidget(self.pages)
     self.disableMenuItems()
     self.projectDock = QtGui.QDockWidget("Project", self)
     self.projectTree = ProjectTree(self)
@@ -116,12 +118,15 @@
     self.action_Close_Project.setEnabled(False)
     self.menubar.removeAction(self.menu_Project.menuAction())
 
-  def projectTreeItemChanged(self, item, column):
-    if item == None:
+  def projectTreeItemChanged(self, current, previous):
+    if current == None:
       return
-    # TODO: set centralwidget to the form corresponding to the item.
-    if isinstance(item, LangFileItem):
-      print "LangFileItem"
+
+    if isinstance(current, LangFileItem):
+      index = self.pages.indexOf(current.msgForm)
+      if index == -1:
+        index = self.pages.addWidget(current.msgForm)
+      self.pages.setCurrentIndex(index)
 
   def closeEvent(self, event):
     if self.closeProject() == False:
@@ -166,17 +171,37 @@
     yaml.dump(g_settings, open(g_settingsFile, "w")) #default_flow_style=False
 
 class MsgForm(QtGui.QWidget, Ui_MsgForm):
-  def __init__(self):
+  def __init__(self, langFile):
     QtGui.QWidget.__init__(self)
     self.setupUi(self)
 
+    self.langFile = langFile
+    self.treeWidget.setColumnCount(2)
+    self.treeWidget.setHeaderLabels(["ID", "Text"])
+    for msg in self.langFile.messages:
+      item = QtGui.QTreeWidgetItem([str(msg["ID"]), msg["Text"]])
+      self.treeWidget.addTopLevelItem(item)
+
+    QtCore.QObject.connect(self.treeWidget, QtCore.SIGNAL("currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)"), self.treeItemChanged)
+
+  def treeItemChanged(self, current, previous):
+    msg = self.langFile.getMsg(int(current.text(0)))
+    self.destEdit.setText(msg["Text"])
+    self.destAnnotEdit.setText(msg["Annot"])
+
 class MsgIDItem(QtGui.QTreeWidgetItem):
   def __init__(self, parent, text):
     QtGui.QTreeWidgetItem.__init__(self, parent, [text])
 
 class LangFileItem(QtGui.QTreeWidgetItem):
-  def __init__(self, parent, text):
-    QtGui.QTreeWidgetItem.__init__(self, parent, [text])
+  def __init__(self, parent, langFile):
+    QtGui.QTreeWidgetItem.__init__(self, parent, [langFile.langCode])
+    self.langFile = langFile
+    self.msgForm = MsgForm(langFile)
+
+class ProjectItem(QtGui.QTreeWidgetItem):
+  def __init__(self, text):
+    QtGui.QTreeWidgetItem.__init__(self, [text])
 
 class ProjectTree(QtGui.QTreeWidget):
   def __init__(self, parent):
@@ -188,11 +213,11 @@
   def setProject(self, project):
     self.project = project
 
-    self.topItem = QtGui.QTreeWidgetItem([self.project.name])
+    self.topItem = ProjectItem(self.project.name)
     self.addTopLevelItem(self.topItem)
 
     for langFile in self.project.langFiles:
-      langFileItem = LangFileItem(self.topItem, langFile.langCode)
+      langFileItem = LangFileItem(self.topItem, langFile)
 
     self.msgIDsItem = QtGui.QTreeWidgetItem(self.topItem, ["Message IDs"])
     for msgID in self.project.msgIDs:
--- a/trunk/src/translator/ui_msg_form.py	Wed Oct 31 23:03:56 2007 +0200
+++ b/trunk/src/translator/ui_msg_form.py	Sun Nov 04 14:06:04 2007 +0100
@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'msg_form.ui'
 #
-# Created: Sun Oct 21 17:33:29 2007
+# Created: Thu Nov  1 10:10:41 2007
 #      by: PyQt4 UI code generator 4.1
 #
 # WARNING! All changes made in this file will be lost!
@@ -19,6 +19,7 @@
         self.vboxlayout.setObjectName("vboxlayout")
 
         self.splitter = QtGui.QSplitter(MsgForm)
+        self.splitter.setFrameShape(QtGui.QFrame.StyledPanel)
         self.splitter.setOrientation(QtCore.Qt.Vertical)
         self.splitter.setObjectName("splitter")
 
@@ -32,24 +33,24 @@
         self.label.setObjectName("label")
         self.vboxlayout1.addWidget(self.label)
 
-        self.listWidget = QtGui.QListWidget(self.layoutWidget)
-        self.listWidget.setObjectName("listWidget")
-        self.vboxlayout1.addWidget(self.listWidget)
+        self.treeWidget = QtGui.QTreeWidget(self.layoutWidget)
+        self.treeWidget.setObjectName("treeWidget")
+        self.vboxlayout1.addWidget(self.treeWidget)
 
-        self.widget = QtGui.QWidget(self.splitter)
-        self.widget.setObjectName("widget")
+        self.layoutWidget1 = QtGui.QWidget(self.splitter)
+        self.layoutWidget1.setObjectName("layoutWidget1")
 
-        self.gridlayout = QtGui.QGridLayout(self.widget)
+        self.gridlayout = QtGui.QGridLayout(self.layoutWidget1)
         self.gridlayout.setObjectName("gridlayout")
 
         self.vboxlayout2 = QtGui.QVBoxLayout()
         self.vboxlayout2.setObjectName("vboxlayout2")
 
-        self.label_2 = QtGui.QLabel(self.widget)
+        self.label_2 = QtGui.QLabel(self.layoutWidget1)
         self.label_2.setObjectName("label_2")
         self.vboxlayout2.addWidget(self.label_2)
 
-        self.sourceEdit = QtGui.QTextEdit(self.widget)
+        self.sourceEdit = QtGui.QTextEdit(self.layoutWidget1)
         self.sourceEdit.setObjectName("sourceEdit")
         self.vboxlayout2.addWidget(self.sourceEdit)
         self.gridlayout.addLayout(self.vboxlayout2,0,0,1,1)
@@ -57,11 +58,11 @@
         self.vboxlayout3 = QtGui.QVBoxLayout()
         self.vboxlayout3.setObjectName("vboxlayout3")
 
-        self.label_3 = QtGui.QLabel(self.widget)
+        self.label_3 = QtGui.QLabel(self.layoutWidget1)
         self.label_3.setObjectName("label_3")
         self.vboxlayout3.addWidget(self.label_3)
 
-        self.sourceAnnotEdit = QtGui.QTextEdit(self.widget)
+        self.sourceAnnotEdit = QtGui.QTextEdit(self.layoutWidget1)
         self.sourceAnnotEdit.setObjectName("sourceAnnotEdit")
         self.vboxlayout3.addWidget(self.sourceAnnotEdit)
         self.gridlayout.addLayout(self.vboxlayout3,0,1,1,1)
@@ -69,11 +70,11 @@
         self.vboxlayout4 = QtGui.QVBoxLayout()
         self.vboxlayout4.setObjectName("vboxlayout4")
 
-        self.label_4 = QtGui.QLabel(self.widget)
+        self.label_4 = QtGui.QLabel(self.layoutWidget1)
         self.label_4.setObjectName("label_4")
         self.vboxlayout4.addWidget(self.label_4)
 
-        self.destEdit = QtGui.QTextEdit(self.widget)
+        self.destEdit = QtGui.QTextEdit(self.layoutWidget1)
         self.destEdit.setObjectName("destEdit")
         self.vboxlayout4.addWidget(self.destEdit)
         self.gridlayout.addLayout(self.vboxlayout4,1,0,1,1)
@@ -81,11 +82,11 @@
         self.vboxlayout5 = QtGui.QVBoxLayout()
         self.vboxlayout5.setObjectName("vboxlayout5")
 
-        self.label_5 = QtGui.QLabel(self.widget)
+        self.label_5 = QtGui.QLabel(self.layoutWidget1)
         self.label_5.setObjectName("label_5")
         self.vboxlayout5.addWidget(self.label_5)
 
-        self.destAnnotEdit = QtGui.QTextEdit(self.widget)
+        self.destAnnotEdit = QtGui.QTextEdit(self.layoutWidget1)
         self.destAnnotEdit.setObjectName("destAnnotEdit")
         self.vboxlayout5.addWidget(self.destAnnotEdit)
         self.gridlayout.addLayout(self.vboxlayout5,1,1,1,1)
@@ -97,6 +98,7 @@
     def retranslateUi(self, MsgForm):
         MsgForm.setWindowTitle(QtGui.QApplication.translate("MsgForm", "Form", None, QtGui.QApplication.UnicodeUTF8))
         self.label.setText(QtGui.QApplication.translate("MsgForm", "Messages:", None, QtGui.QApplication.UnicodeUTF8))
+        self.treeWidget.headerItem().setText(0,QtGui.QApplication.translate("MsgForm", "1", None, QtGui.QApplication.UnicodeUTF8))
         self.label_2.setText(QtGui.QApplication.translate("MsgForm", "Source string:", None, QtGui.QApplication.UnicodeUTF8))
         self.label_3.setText(QtGui.QApplication.translate("MsgForm", "Source annotation:", None, QtGui.QApplication.UnicodeUTF8))
         self.label_4.setText(QtGui.QApplication.translate("MsgForm", "Translation:", None, QtGui.QApplication.UnicodeUTF8))