Update preset.
[bertos.git] / wizard / bertos.py
index 4bd6af676b3b2c5c3ed471b3fc23b28d4759bf6f..1608334c57c2904a32362d09194982cae1c72f2d 100755 (executable)
@@ -28,7 +28,6 @@
 #
 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
 #
 #
 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
 #
-# $Id$
 #
 # Author: Lorenzo Berni <duplo@develer.com>
 #
 #
 # Author: Lorenzo Berni <duplo@develer.com>
 #
@@ -40,26 +39,34 @@ from distutils.dep_util import newer
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-import BProject
+import exception_handler
 
 
-import BStartPage
-import BWizard
+from BProject import BProject
 
 
+from BWizard import BWizard
+
+from BIntroPage import BIntroPage
 from BFolderPage import BFolderPage
 from BFolderPage import BFolderPage
+from BBoardPage import BBoardPage
+from BProjectPresets import BProjectPresets
 from BOpenPage import BOpenPage
 from BVersionPage import BVersionPage
 from BCpuPage import BCpuPage
 from BToolchainPage import BToolchainPage
 from BModulePage import BModulePage
 from BOpenPage import BOpenPage
 from BVersionPage import BVersionPage
 from BCpuPage import BCpuPage
 from BToolchainPage import BToolchainPage
 from BModulePage import BModulePage
-from BOutputPage import BOutputPage
 from BCreationPage import BCreationPage
 from BFinalPage import BFinalPage
 
 from BCreationPage import BCreationPage
 from BFinalPage import BFinalPage
 
-import bertos_utils
+from BEditingDialog import BEditingDialog, BVersionDialog, BToolchainDialog
+
+from const import DATA_DIR
+
+from LoadException import VersionException, ToolchainException
 
 def newProject():
 
 def newProject():
-    page_list = [BFolderPage, BVersionPage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage]
-    wizard = BWizard.BWizard(page_list)
+    QApplication.instance().project = BProject()
+    page_list = [BIntroPage, BFolderPage, BVersionPage, BBoardPage, BProjectPresets, BCpuPage, BToolchainPage, BModulePage, BCreationPage, BFinalPage]
+    wizard = BWizard(page_list)
     wizard.show()
     wizard.exec_()
     project = QApplication.instance().project
     wizard.show()
     wizard.exec_()
     project = QApplication.instance().project
@@ -70,43 +77,75 @@ def newProject():
         for ide in to_be_opened:
             command_line = command_lines[ide]
             relevant_file = relevant_files[ide]
         for ide in to_be_opened:
             command_line = command_lines[ide]
             relevant_file = relevant_files[ide]
-            import subprocess
-            subprocess.call(command_line + " \"" + relevant_file + "\"")
+            QProcess.startDetached(command_line, [relevant_file,])
     sys.exit()
     sys.exit()
-    
-def editProject():
-    page_list = [BOpenPage, BVersionPage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage]
-    wizard = BWizard.BWizard(page_list)
-    wizard.show()
-    wizard.exec_()
 
 
-def showStartPage():
-    QApplication.instance().dialog = BStartPage.BStartPage()
-    QApplication.instance().connect(QApplication.instance().dialog, SIGNAL("newProject"), newProject)
-    QApplication.instance().connect(QApplication.instance().dialog, SIGNAL("editProject"), editProject)
-    QApplication.instance().dialog.show()
+def editProject(project_file):
+    info_dict = {}
+    # Progress dialog.
+    p_dialog = QProgressDialog(QApplication.instance().tr("Wait project loading"), QApplication.instance().tr("Cancel"), 0, 0)
+    while(True):
+        p_dialog.show()
+        # Empty project is the default fallback.
+        QApplication.instance().project = BProject()
+        try:
+            QApplication.instance().project = BProject(project_file, info_dict)
+        except VersionException:
+            p_dialog.hide()
+            QMessageBox.critical(
+                None,
+                QObject().tr("BeRTOS version not found!"),
+                QObject().tr("The selected BeRTOS version was not found, please select another one...")
+            )
+            dialog = BVersionDialog()
+            if dialog.exec_():
+                version = dialog.version_page.currentVersion()
+                info_dict["BERTOS_PATH"] = version
+            continue
+        except ToolchainException, exc:
+            p_dialog.hide()
+            QMessageBox.critical(
+                None,
+                QObject().tr("Toolchain not found!"),
+                QObject().tr("The selected toolchain was not found, please select another one...")
+            )
+            QApplication.instance().project = exc.partial_project
+            dialog = BToolchainDialog()
+            if dialog.exec_():
+                toolchain = dialog.toolchain_page.currentToolchain()
+                info_dict["TOOLCHAIN"] = toolchain
+            continue
+        break
+    dialog = BEditingDialog()
+    p_dialog.hide()
+    dialog.exec_()
 
 def main():
 
 def main():
-    os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
     app = QApplication(sys.argv)
     app.settings = QSettings("Develer", "Bertos Configurator")
     app = QApplication(sys.argv)
     app.settings = QSettings("Develer", "Bertos Configurator")
-    app.project = BProject.BProject()
     # Development utility lines, to be removed for production
     # Development utility lines, to be removed for production
-    if not (hasattr(sys, "frozen") and sys.frozen) and newer("bertos.qrc", "bertos.rcc"):
-        os.system("rcc -binary bertos.qrc -o bertos.rcc")
-    QResource.registerResource("bertos.rcc")
-    if "--create" in sys.argv and "--edit" not in sys.argv:
-        newProject()
-    elif "--edit" in sys.argv and "--create" not in sys.argv:
-        editProject()
-    elif "--create" in sys.argv and "--edit" in sys.argv:
-        # TODO need an explaining message
-        print " ".join(sys.argv)
-        print "Invalid usage!"
-        pass
+    datadir = DATA_DIR
+
+    # Something seems to not work, on Windows, using pyrcc4 with BeRTOS Wizard
+    # resources. So I'm restoring the old rcc-based resource generation
+    # system.
+    #
+    # qrc, bertos_rc = os.path.join(datadir, 'bertos.qrc'), os.path.join(datadir, 'bertos_rc.py')
+    # if not (hasattr(sys, "frozen") and sys.frozen) and newer(qrc, bertos_rc):
+    #     os.system("pyrcc4 \"%s\" -o \"%s\"" %(qrc, bertos_rc))
+    # import bertos_rc
+
+    qrc, rcc = os.path.join(datadir, 'bertos.qrc'), os.path.join(datadir, 'bertos.rcc') 
+    if not (hasattr(sys, "frozen") and sys.frozen) and newer(qrc, rcc): 
+        os.system("rcc -binary \"%s\" -o \"%s\"" %(qrc, rcc)) 
+    QResource.registerResource(rcc) 
+    
+    if len(sys.argv) == 3 and sys.argv[1] == "--edit":
+        editProject(os.path.abspath(sys.argv[2]))
     else:
         newProject()
 
     else:
         newProject()
 
+
 if __name__ == '__main__':
     main()
 
 if __name__ == '__main__':
     main()