Remove the trailing separator.
[bertos.git] / wizard / BVersionPage.py
index edda2092c3d748bc7abe69f4da12073e740f625c..bd78fe01ebb02c139395ee40659943f98b9b41db 100644 (file)
@@ -9,22 +9,86 @@
 # Author: Lorenzo Berni <duplo@develer.com>
 #
 
+import os
+
+from PyQt4.QtGui import *
 from BWizardPage import *
+import bertos_utils
+import qvariant_converter
+
+from const import *
 
 class BVersionPage(BWizardPage):
     
     def __init__(self):
-        BWizardPage.__init__(self, "bertos_versions.ui")
+        BWizardPage.__init__(self, UI_LOCATION + "/bertos_versions.ui")
         self._connectSignals()
+        self._fillVersionList()
         self._setupUi()
-        self.setTitle(self.tr("Select the beRTOS version needed"))
+        self.setTitle(self.tr("Select the BeRTOS version needed"))
     
     def _connectSignals(self):
-        self.connect(self.pageContent.updateButton, SIGNAL("clicked()"), self.updateClicked))
+        self.connect(self.pageContent.versionList, SIGNAL("itemSelectionChanged()"), self.rowChanged)
+        self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addVersion)
+        self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeVersion)
+        # Fake signal connection for the update button
+        self.connect(self.pageContent.updateButton, SIGNAL("clicked()"), self.updateClicked)
     
     def _setupUi(self):
-        self.pageContent.updateProgressBar.setVisible(False)
-        self.pageContent.statusLabel.setVisible(False)
+        self.pageContent.versionList.setCurrentRow(-1)
+    
+    def _storeVersion(self, directory):
+        versions = self.versions()
+        versions = set(versions + [directory])
+        self.setVersions(list(versions))
+    
+    def _deleteVersion(self, directory):
+        versions = self.versions()
+        versions.remove(directory)
+        self.setVersions(versions)
+        
+    def _insertListElement(self, directory):
+        if bertos_utils.isBertosDir(directory):
+            item = QListWidgetItem(QIcon(":/images/ok.png"), bertos_utils.bertosVersion(directory) + " (\"" + os.path.normpath(directory) + "\")")
+            item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
+            self.pageContent.versionList.addItem(item)
+        elif len(directory) > 0:
+            item = QListWidgetItem(QIcon(":/images/warning.png"), "UNKNOWN" + " (\"" + os.path.normpath(directory) + "\")")
+            item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
+            self.pageContent.versionList.addItem(item)
+    
+    def _fillVersionList(self):
+        versions = self.versions()
+        for directory in versions:
+            self._insertListElement(directory)
+
+    def isComplete(self):
+        if self.pageContent.versionList.currentRow() != -1:
+           # Remove trailing slash
+           sources_path = qvariant_converter.getString(self.pageContent.versionList.currentItem().data(Qt.UserRole))
+           if sources_path.endswith(os.sep):
+                 sources_path = sources_path[:-1]
+            self._projectInfoStore("SOURCES_PATH", sources_path)
+           return True
+        else:
+            return False
+    
+    def addVersion(self):
+        directory = QFileDialog.getExistingDirectory(self, self.tr("Choose a directory"), "", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
+        if not directory.isEmpty():
+            self._storeVersion(unicode(directory))
+            self.pageContent.versionList.clear()
+            self._fillVersionList()
+            self.emit(SIGNAL("completeChanged()"))
+    
+    def removeVersion(self):
+        item = self.pageContent.versionList.takeItem(self.pageContent.versionList.currentRow())
+        self._deleteVersion(qvariant_converter.getString(item.data(Qt.UserRole)))
+        self.emit(SIGNAL("completeChanged()"))
     
     def updateClicked(self):
-        print "fake update checking"
\ No newline at end of file
+        print "fake update checking"
+    
+    def rowChanged(self):
+        self.emit(SIGNAL("completeChanged()"))
+