Attempt to fix the BeRTOS Wizard running directory-related issue.
[bertos.git] / wizard / bertos.py
index 54f2885b59ec544666b7891fbdd8d54809909750..e4255177a62557bcab7a05d8b93225df8e0479c8 100755 (executable)
@@ -47,6 +47,7 @@ import BProject
 import BStartPage
 import BWizard
 
+from BIntroPage import BIntroPage
 from BFolderPage import BFolderPage
 from BOpenPage import BOpenPage
 from BVersionPage import BVersionPage
@@ -57,12 +58,15 @@ from BOutputPage import BOutputPage
 from BCreationPage import BCreationPage
 from BFinalPage import BFinalPage
 
-from BEditingDialog import BEditingDialog
+from BEditingDialog import BEditingDialog, BVersionDialog, BToolchainDialog
 
 import bertos_utils
+import const
+
+from LoadException import VersionException, ToolchainException
 
 def newProject():
-    page_list = [BFolderPage, BVersionPage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage]
+    page_list = [BIntroPage, BFolderPage, BVersionPage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage]
     wizard = BWizard.BWizard(page_list)
     wizard.show()
     wizard.exec_()
@@ -76,9 +80,36 @@ def newProject():
             relevant_file = relevant_files[ide]
             QProcess.startDetached(command_line, [relevant_file,])
     sys.exit()
-    
+
 def editProject(project_file):
-    QApplication.instance().project = bertos_utils.loadBertosProject(project_file)
+    info_dict = {}
+    while(True):
+        try:
+            QApplication.instance().project = bertos_utils.loadBertosProject(project_file, info_dict)
+        except VersionException:
+            QMessageBox.critical(
+                None,
+                QObject().tr("BeRTOS version not found!"),
+                QObject().tr("The selected BeRTOS version is not found, please select an existing one...")
+            )
+            dialog = BVersionDialog()
+            if dialog.exec_():
+                version = dialog.version_page.currentVersion()
+                info_dict["SOURCES_PATH"] = version
+            continue
+        except ToolchainException, exc:
+            QMessageBox.critical(
+                None,
+                QObject().tr("Toolchain not found!"),
+                QObject().tr("The selected toolchain is not found, please select an existing 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()
     dialog.exec_()
 
@@ -89,19 +120,20 @@ def showStartPage():
     QApplication.instance().dialog.show()
 
 def main():
-    os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
     app = QApplication(sys.argv)
     app.settings = QSettings("Develer", "Bertos Configurator")
     app.project = BProject.BProject()
     # 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")
+    datadir = const.DATA_DIR
+    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(sys.argv[2])
     else:
         newProject()
+
 
 if __name__ == '__main__':
     main()