Change the loadBertosProject function to be a BProject method (and call it from the...
[bertos.git] / wizard / bertos.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 #
4 # This file is part of BeRTOS.
5 #
6 # Bertos is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19 #
20 # As a special exception, you may use this file as part of a free software
21 # library without restriction.  Specifically, if other files instantiate
22 # templates or use macros or inline functions from this file, or you compile
23 # this file and link it with other files to produce an executable, this
24 # file does not by itself cause the resulting executable to be covered by
25 # the GNU General Public License.  This exception does not however
26 # invalidate any other reasons why the executable file might be covered by
27 # the GNU General Public License.
28 #
29 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
30 #
31 # $Id$
32 #
33 # Author: Lorenzo Berni <duplo@develer.com>
34 #
35
36 import os
37 import sys
38 from distutils.dep_util import newer
39
40 from PyQt4.QtCore import *
41 from PyQt4.QtGui import *
42
43 import exception_handler
44
45 import BProject
46
47 import BStartPage
48 import BWizard
49
50 from BIntroPage import BIntroPage
51 from BFolderPage import BFolderPage
52 from BBoardPage import BBoardPage
53 from BOpenPage import BOpenPage
54 from BVersionPage import BVersionPage
55 from BCpuPage import BCpuPage
56 from BToolchainPage import BToolchainPage
57 from BModulePage import BModulePage
58 from BOutputPage import BOutputPage
59 from BCreationPage import BCreationPage
60 from BFinalPage import BFinalPage
61
62 from BEditingDialog import BEditingDialog, BVersionDialog, BToolchainDialog
63
64 import bertos_utils
65 import const
66
67 from LoadException import VersionException, ToolchainException
68
69 def newProject():
70     page_list = [BIntroPage, BFolderPage, BBoardPage, BVersionPage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage]
71     wizard = BWizard.BWizard(page_list)
72     wizard.show()
73     wizard.exec_()
74     project = QApplication.instance().project
75     to_be_opened = project.info("TO_BE_OPENED")
76     command_lines = project.info("COMMAND_LINES")
77     relevant_files = project.info("RELEVANT_FILES")
78     if to_be_opened:
79         for ide in to_be_opened:
80             command_line = command_lines[ide]
81             relevant_file = relevant_files[ide]
82             QProcess.startDetached(command_line, [relevant_file,])
83     sys.exit()
84
85 def editProject(project_file):
86     info_dict = {}
87     while(True):
88         try:
89             QApplication.instance().project = BProject.BProject(project_file, info_dict)
90         except VersionException:
91             QMessageBox.critical(
92                 None,
93                 QObject().tr("BeRTOS version not found!"),
94                 QObject().tr("The selected BeRTOS version is not found, please select an existing one...")
95             )
96             dialog = BVersionDialog()
97             if dialog.exec_():
98                 version = dialog.version_page.currentVersion()
99                 info_dict["SOURCES_PATH"] = version
100             continue
101         except ToolchainException, exc:
102             QMessageBox.critical(
103                 None,
104                 QObject().tr("Toolchain not found!"),
105                 QObject().tr("The selected toolchain is not found, please select an existing one...")
106             )
107             QApplication.instance().project = exc.partial_project
108             dialog = BToolchainDialog()
109             if dialog.exec_():
110                 toolchain = dialog.toolchain_page.currentToolchain()
111                 info_dict["TOOLCHAIN"] = toolchain
112             continue
113         break
114     dialog = BEditingDialog()
115     dialog.exec_()
116
117 def showStartPage():
118     QApplication.instance().dialog = BStartPage.BStartPage()
119     QApplication.instance().connect(QApplication.instance().dialog, SIGNAL("newProject"), newProject)
120     QApplication.instance().connect(QApplication.instance().dialog, SIGNAL("editProject"), editProject)
121     QApplication.instance().dialog.show()
122
123 def main():
124     app = QApplication(sys.argv)
125     app.settings = QSettings("Develer", "Bertos Configurator")
126     app.project = BProject.BProject()
127     # Development utility lines, to be removed for production
128     datadir = const.DATA_DIR
129     qrc, rcc = os.path.join(datadir, 'bertos.qrc'), os.path.join(datadir, 'bertos.rcc')
130     if not (hasattr(sys, "frozen") and sys.frozen) and newer(qrc, rcc):
131         os.system("rcc -binary %s -o %s" %(qrc, rcc))
132     QResource.registerResource(rcc)
133     if len(sys.argv) == 3 and sys.argv[1] == "--edit":
134         editProject(os.path.abspath(sys.argv[2]))
135     else:
136         newProject()
137
138
139 if __name__ == '__main__':
140     main()
141