changeset 472:30925590f392

Translator: implemented more functionalities of MsgForm. Added class MsgFormSource. Used for editing the source language file of the project. Added stub methods for showing context menus in ProjectTree. Added loadLangFile method to class Project. Renamed two widgets in msg_form.ui.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Tue, 06 Nov 2007 17:08:57 +0100
parents b6fa41e6f0b4
children e91b224c223b
files trunk/i18n/dil.tproj 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 6 files changed, 86 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/i18n/dil.tproj	Sun Nov 04 14:06:04 2007 +0100
+++ b/trunk/i18n/dil.tproj	Tue Nov 06 17:08:57 2007 +0100
@@ -1,6 +1,6 @@
 BuildScript: build.py
 CreationDate: '2007-10-12 09:41:17.868084'
-LangFiles: [en.cat, de.cat, tr.cat, fi.cat]
+LangFiles: [de.cat, tr.cat, fi.cat]
 MsgIDs:
 - {ID: 0, Name: IllegalCharacter, Order: 0}
 - {ID: 1, Name: InvalidUnicodeCharacter, Order: 1}
@@ -51,4 +51,4 @@
 - {ID: 46, Name: HelpGenerate, Order: 46}
 - {ID: 47, Name: HelpImportGraph, Order: 47}
 Name: dil
-SourceLangFile: ''
+SourceLangFile: en.cat
--- a/trunk/src/translator/langfile.py	Sun Nov 04 14:06:04 2007 +0100
+++ b/trunk/src/translator/langfile.py	Tue Nov 06 17:08:57 2007 +0100
@@ -15,6 +15,8 @@
 class LangFile:
   def __init__(self, filePath):
     self.filePath = filePath
+    self.isSource = False
+    self.source = None
     # Load language file and check data integrity.
     doc = yaml.load(open(filePath, "r"))
     self.doc = doc
@@ -55,6 +57,9 @@
     if not isinstance(var, type_):
       raise LoadingError(msg)
 
+  def setSource(self, sourceLangFile):
+    self.source = sourceLangFile
+
   def getMsg(self, ID):
     for msg in self.messages:
       if msg["ID"] == ID:
--- a/trunk/src/translator/msg_form.ui	Sun Nov 04 14:06:04 2007 +0100
+++ b/trunk/src/translator/msg_form.ui	Tue Nov 06 17:08:57 2007 +0100
@@ -81,7 +81,7 @@
           </widget>
          </item>
          <item>
-          <widget class="QTextEdit" name="destEdit" />
+          <widget class="QTextEdit" name="translEdit" />
          </item>
         </layout>
        </item>
@@ -95,7 +95,7 @@
           </widget>
          </item>
          <item>
-          <widget class="QTextEdit" name="destAnnotEdit" />
+          <widget class="QTextEdit" name="translAnnotEdit" />
          </item>
         </layout>
        </item>
--- a/trunk/src/translator/project.py	Sun Nov 04 14:06:04 2007 +0100
+++ b/trunk/src/translator/project.py	Tue Nov 06 17:08:57 2007 +0100
@@ -33,7 +33,7 @@
     self.checkType(doc, dict)
     try:
       self.name = str(doc["Name"])
-      self.source = str(doc["SourceLangFile"])
+      self.srcLangFilePath = str(doc["SourceLangFile"])
       self.langFilePaths = list(doc["LangFiles"])
       self.msgIDs = list(doc["MsgIDs"])
       self.creationDate = str(doc["CreationDate"])
@@ -60,20 +60,30 @@
     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.
-        projectDir = os.path.dirname(projectPath)
-        filePath2 = os.path.join(projectDir, filePath)
-        if not os.path.exists(filePath2):
-          raise LoadingError("Project: Language file '%s' doesn't exist"%filePath)
-        filePath = filePath2
-      langFile = langfile.LangFile(filePath)
+      langFile = self.loadLangFile(filePath)
       langFile.createMissingMessages(IDList)
       self.langFiles += [langFile]
+    self.srcLangFile = self.loadLangFile(self.srcLangFilePath)
+    self.srcLangFile.createMissingMessages(IDList)
+    self.srcLangFile.isSource = True
+    self.langFiles += [self.srcLangFile]
+
+    for langFile in self.langFiles:
+      langFile.setSource(self.srcLangFile)
 
   def checkType(self, var, type_):
     if not isinstance(var, type_):
       raise LoadingException("%s is not of type %s" % (str(var), str(type_)))
 
+  def loadLangFile(self, filePath):
+    if not os.path.exists(filePath):
+      # Look in project directory.
+      projectDir = os.path.dirname(self.projectPath)
+      filePath2 = os.path.join(projectDir, filePath)
+      if not os.path.exists(filePath2):
+        raise LoadingError("Project: Language file '%s' doesn't exist"%filePath)
+      filePath = filePath2
+    return langfile.LangFile(filePath)
+
   def save(self):
     pass
--- a/trunk/src/translator/translator.py	Sun Nov 04 14:06:04 2007 +0100
+++ b/trunk/src/translator/translator.py	Tue Nov 06 17:08:57 2007 +0100
@@ -185,9 +185,33 @@
     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"])
+    if current == None:
+      return
+    ID = int(current.text(0))
+    self.setTranslMsg(self.langFile.getMsg(ID))
+    self.setSourceMsg(self.langFile.source.getMsg(ID))
+
+  def setTranslMsg(self, msg):
+    self.translEdit.setText(msg["Text"])
+    self.translAnnotEdit.setText(msg["Annot"])
+
+  def setSourceMsg(self, msg):
+    self.sourceEdit.setText(msg["Text"])
+    self.sourceAnnotEdit.setText(msg["Annot"])
+
+class MsgFormSource(MsgForm):
+  def __init__(self, langFile):
+    MsgForm.__init__(self, langFile)
+
+    for x in [self.translEdit,
+              self.translAnnotEdit,
+              self.label_4,
+              self.label_5]:
+      x.close()
+
+  def treeItemChanged(self, current, previous):
+    ID = int(current.text(0))
+    self.setSourceMsg(self.langFile.getMsg(ID))
 
 class MsgIDItem(QtGui.QTreeWidgetItem):
   def __init__(self, parent, text):
@@ -197,7 +221,10 @@
   def __init__(self, parent, langFile):
     QtGui.QTreeWidgetItem.__init__(self, parent, [langFile.langCode])
     self.langFile = langFile
-    self.msgForm = MsgForm(langFile)
+    if langFile.isSource:
+      self.msgForm = MsgFormSource(langFile)
+    else:
+      self.msgForm = MsgForm(langFile)
 
 class ProjectItem(QtGui.QTreeWidgetItem):
   def __init__(self, text):
@@ -226,6 +253,26 @@
     for x in [self.topItem, self.msgIDsItem]:
       x.setExpanded(True)
 
+  def contextMenuEvent(self, event):
+    item = self.itemAt(event.pos())
+    func_map = {
+      None : lambda item: None,
+      QtGui.QTreeWidgetItem : lambda item: None,
+      ProjectItem : self.showMenuProjectItem,
+      LangFileItem : self.showMenuLangFileItem,
+      MsgIDItem : self.showMenuMsgIDItem
+    }
+    func_map[type(item)](item)
+
+  def showMenuProjectItem(self, item):
+    print "ProjectItem"
+
+  def showMenuLangFileItem(self, item):
+    print "LangFileItem"
+
+  def showMenuMsgIDItem(self, item):
+    print "MsgIDItem"
+
   def clear(self):
     self.topItem = None
     self.msgIDsItem = None
--- a/trunk/src/translator/ui_msg_form.py	Sun Nov 04 14:06:04 2007 +0100
+++ b/trunk/src/translator/ui_msg_form.py	Tue Nov 06 17:08:57 2007 +0100
@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'msg_form.ui'
 #
-# Created: Thu Nov  1 10:10:41 2007
+# Created: Tue Nov  6 12:15:01 2007
 #      by: PyQt4 UI code generator 4.1
 #
 # WARNING! All changes made in this file will be lost!
@@ -74,9 +74,9 @@
         self.label_4.setObjectName("label_4")
         self.vboxlayout4.addWidget(self.label_4)
 
-        self.destEdit = QtGui.QTextEdit(self.layoutWidget1)
-        self.destEdit.setObjectName("destEdit")
-        self.vboxlayout4.addWidget(self.destEdit)
+        self.translEdit = QtGui.QTextEdit(self.layoutWidget1)
+        self.translEdit.setObjectName("translEdit")
+        self.vboxlayout4.addWidget(self.translEdit)
         self.gridlayout.addLayout(self.vboxlayout4,1,0,1,1)
 
         self.vboxlayout5 = QtGui.QVBoxLayout()
@@ -86,9 +86,9 @@
         self.label_5.setObjectName("label_5")
         self.vboxlayout5.addWidget(self.label_5)
 
-        self.destAnnotEdit = QtGui.QTextEdit(self.layoutWidget1)
-        self.destAnnotEdit.setObjectName("destAnnotEdit")
-        self.vboxlayout5.addWidget(self.destAnnotEdit)
+        self.translAnnotEdit = QtGui.QTextEdit(self.layoutWidget1)
+        self.translAnnotEdit.setObjectName("translAnnotEdit")
+        self.vboxlayout5.addWidget(self.translAnnotEdit)
         self.gridlayout.addLayout(self.vboxlayout5,1,1,1,1)
         self.vboxlayout.addWidget(self.splitter)