Use univoc name for low level init module. Fixed include.
[bertos.git] / wizard / BToolchainPage.py
index f85dbb1f30c44b417d01fb7c8b88eda138e65c81..e3fd825a68eef42cf4c99bab26290b8f87bae169 100644 (file)
@@ -37,10 +37,14 @@ import os
 import collections
 
 from BWizardPage import *
 import collections
 
 from BWizardPage import *
+from BOutputPage import BOutputPage
+
 import BToolchainSearch
 import bertos_utils
 import qvariant_converter
 
 import BToolchainSearch
 import bertos_utils
 import qvariant_converter
 
+from toolchain_manager import ToolchainManager
+
 from const import *
 
 class BToolchainPage(BWizardPage):
 from const import *
 
 class BToolchainPage(BWizardPage):
@@ -54,6 +58,7 @@ class BToolchainPage(BWizardPage):
         self.setTitle(self.tr("Select toolchain"))
         self._validation_process = None
         self._valid_items = []
         self.setTitle(self.tr("Select toolchain"))
         self._validation_process = None
         self._valid_items = []
+        self._toolchain_manager = ToolchainManager()
 
     ## Overloaded QWizardPage methods. ##
 
 
     ## Overloaded QWizardPage methods. ##
 
@@ -68,6 +73,16 @@ class BToolchainPage(BWizardPage):
         else:
             return False
 
         else:
             return False
 
+    def nextId(self):
+        """
+        Overload of the QWizardPage nextId method.
+        """
+        # Route to Output page if it's a predefined easy project.
+        if self.projectInfo("PROJECT_FROM_PRESET") and self.projectInfo("BASE_MODE"):
+            return self.wizard().pageIndex(BOutputPage)
+        else:
+            return QWizardPage.nextId(self)
+
     ####
 
     ## Overloaded BWizardPage methods. ##
     ####
 
     ## Overloaded BWizardPage methods. ##
@@ -126,9 +141,7 @@ class BToolchainPage(BWizardPage):
             item = QListWidgetItem(sel_toolchain)
             item.setData(Qt.UserRole, qvariant_converter.convertStringDict({"path": sel_toolchain}))
             self.pageContent.toolchainList.addItem(item)
             item = QListWidgetItem(sel_toolchain)
             item.setData(Qt.UserRole, qvariant_converter.convertStringDict({"path": sel_toolchain}))
             self.pageContent.toolchainList.addItem(item)
-            toolchains = self.toolchains()
-            toolchains[sel_toolchain] = False
-            self.setToolchains(toolchains)
+            self._toolchain_manager.addToolchain(sel_toolchain)
 
     def removeToolchain(self):
         """
 
     def removeToolchain(self):
         """
@@ -137,9 +150,7 @@ class BToolchainPage(BWizardPage):
         if self.pageContent.toolchainList.currentRow() != -1:
             item = self.pageContent.toolchainList.takeItem(self.pageContent.toolchainList.currentRow())
             toolchain = qvariant_converter.getStringDict(item.data(Qt.UserRole))["path"]
         if self.pageContent.toolchainList.currentRow() != -1:
             item = self.pageContent.toolchainList.takeItem(self.pageContent.toolchainList.currentRow())
             toolchain = qvariant_converter.getStringDict(item.data(Qt.UserRole))["path"]
-            toolchains = self.toolchains()
-            del toolchains[toolchain]
-            self.setToolchains(toolchains)
+            self._toolchain_manager.removeToolchain(toolchain)
 
     def searchToolchain(self):
         """
 
     def searchToolchain(self):
         """
@@ -155,10 +166,12 @@ class BToolchainPage(BWizardPage):
         Slot called when the user clicks on the validate button. It starts the
         toolchain validation procedure for all the toolchains.
         """
         Slot called when the user clicks on the validate button. It starts the
         toolchain validation procedure for all the toolchains.
         """
-        QApplication.instance().setOverrideCursor(Qt.WaitCursor)
-        for i in range(self.pageContent.toolchainList.count()):
-            self.validateToolchain(i)
-        QApplication.instance().restoreOverrideCursor()
+        try:
+            QApplication.instance().setOverrideCursor(Qt.WaitCursor)
+            for i in range(self.pageContent.toolchainList.count()):
+                self.validateToolchain(i)
+        finally:
+            QApplication.instance().restoreOverrideCursor()
 
     ####
 
 
     ####
 
@@ -166,21 +179,25 @@ class BToolchainPage(BWizardPage):
         """
         Fills the toolchain list with the toolchains stored in the QSettings.
         """
         """
         Fills the toolchain list with the toolchains stored in the QSettings.
         """
-        toolchains = self.toolchains()
-        if os.name == "nt":
-            import winreg_importer
-            stored_toolchains = winreg_importer.getBertosToolchains()
-            for toolchain in stored_toolchains:
-                toolchains[toolchain] = True
+        self.pageContent.toolchainList.clear()
+        toolchains = self._toolchain_manager.predefined_toolchains + self._toolchain_manager.toolchains
         sel_toolchain = self.projectInfo("TOOLCHAIN")
         sel_toolchain = self.projectInfo("TOOLCHAIN")
-        for key, value in toolchains.items():
-            item = QListWidgetItem(key)
-            item.setData(Qt.UserRole, qvariant_converter.convertStringDict({"path": key}))
-            self.pageContent.toolchainList.addItem(item)
-            if sel_toolchain and sel_toolchain["path"] == key:
-                self.pageContent.toolchainList.setCurrentItem(item)
-            if value:
-                self.validateToolchain(self.pageContent.toolchainList.row(item))
+        for key, value in toolchains:
+            if os.path.exists(key):
+                item = QListWidgetItem(key)
+                item_data = {"path":key}
+                if value:
+                    item_data.update(value)
+                item.setData(Qt.UserRole, qvariant_converter.convertStringDict(item_data))
+                self.pageContent.toolchainList.addItem(item)
+                if sel_toolchain and sel_toolchain["path"] == key:
+                    self.pageContent.toolchainList.setCurrentItem(item)
+                if value is not None:
+                    self.validateToolchain(self.pageContent.toolchainList.row(item))
+
+    def currentToolchain(self):
+        selected_toolchain = qvariant_converter.getStringDict(self.pageContent.toolchainList.currentItem().data(Qt.UserRole))
+        return selected_toolchain
 
     def _clearList(self):
         """
 
     def _clearList(self):
         """
@@ -196,16 +213,12 @@ class BToolchainPage(BWizardPage):
         dir_list = self.searchDirList()
         if self.pathSearch():
             dir_list += [element for element in bertos_utils.getSystemPath()]
         dir_list = self.searchDirList()
         if self.pathSearch():
             dir_list += [element for element in bertos_utils.getSystemPath()]
+        _toolchain_dict = self._toolchain_manager.storedToolchainDict()
         toolchain_list = bertos_utils.findToolchains(dir_list)
         toolchain_list = bertos_utils.findToolchains(dir_list)
-        stored_toolchains = self.toolchains()
-        for element in toolchain_list:
-            if not element in stored_toolchains:
-                item = QListWidgetItem(element)
-                item.setData(Qt.UserRole, qvariant_converter.convertStringDict({"path": element}))
-                self.pageContent.toolchainList.addItem(item)
-                stored_toolchains[element] = False
-        self.setToolchains(stored_toolchains)
-        self.showMessage(self.tr("Toolchain search result."), self.tr("%1 toolchains founded").arg(len(stored_toolchains)))
+        for toolchain in toolchain_list:
+            self._toolchain_manager.addToolchain(toolchain, _toolchain_dict.get(toolchain, False))
+        self._populateToolchainList()
+        self.showMessage(self.tr("Toolchain search result."), self.tr("%1 toolchains founded").arg(len(self._toolchain_manager.toolchains)))
 
     def _validItem(self, index, infos):
         """
 
     def _validItem(self, index, infos):
         """
@@ -236,46 +249,19 @@ class BToolchainPage(BWizardPage):
         Toolchain validation procedure.
         """
         filename = qvariant_converter.getStringDict(self.pageContent.toolchainList.item(i).data(Qt.UserRole))["path"]
         Toolchain validation procedure.
         """
         filename = qvariant_converter.getStringDict(self.pageContent.toolchainList.item(i).data(Qt.UserRole))["path"]
-        valid = False
-        info = {}
-        # Check for the other tools of the toolchain
-        for tool in TOOLCHAIN_ITEMS:
-            if os.path.exists(filename.replace("gcc", tool)):
-                valid = True
-            else:
-                valid = False
-                break
-        # Try to retrieve the informations about the toolchain only for the valid toolchains
-        if valid:
-            self._validation_process = QProcess()
-            self._validation_process.start(filename, ["-v"])
-            self._validation_process.waitForStarted(1000)
-            if self._validation_process.waitForFinished(200):
-                description = unicode(self._validation_process.readAllStandardError())
-                info = bertos_utils.getToolchainInfo(description)
-                if len(info) >= 4:
-                    valid = True
-            else:
-                self._validation_process.kill()
+        info = self._toolchain_manager.validateToolchain(filename)
+
         # Add the item in the list with the appropriate associate data.
         # Add the item in the list with the appropriate associate data.
-        if valid:
+        if info:
             self._validItem(i, info)
         else:
             self._invalidItem(i)
             self._validItem(i, info)
         else:
             self._invalidItem(i)
-        toolchains = self.toolchains()
-        toolchains[filename] = True
-        self.setToolchains(toolchains)
     
     def isDefaultToolchain(self, toolchain):
         """
         Returns True if the given toolchain is one of the default toolchains.
         """
     
     def isDefaultToolchain(self, toolchain):
         """
         Returns True if the given toolchain is one of the default toolchains.
         """
-        if os.name == "nt":
-            import winreg_importer
-            stored_toolchains = winreg_importer.getBertosToolchains()
-            if toolchain["path"] in stored_toolchains:
-                return True
-        return False
+        return toolchain["path"] in self._toolchain_manager._predefined_toolchain_set
     
     def disableRemoveButton(self):
         """
     
     def disableRemoveButton(self):
         """
@@ -288,4 +274,6 @@ class BToolchainPage(BWizardPage):
         Enable the remove button.
         """
         self.pageContent.removeButton.setEnabled(True)
         Enable the remove button.
         """
         self.pageContent.removeButton.setEnabled(True)
-        
\ No newline at end of file
+        
+    def currentItem(self):
+        return self.pageContent.toolchainList.currentItem()