X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBEditingDialog.py;h=1b297d3879ce84d8015b984abb8f23c58954099b;hb=8485e3cfe2e7421e1313752f0b802e5ddd55e86b;hp=b2007fc647020fd54a2090882f1bdbae800289ed;hpb=eab2db56e117f2989b1ad70a44a6ccb025d55cd9;p=bertos.git diff --git a/wizard/BEditingDialog.py b/wizard/BEditingDialog.py index b2007fc6..1b297d38 100644 --- a/wizard/BEditingDialog.py +++ b/wizard/BEditingDialog.py @@ -39,10 +39,12 @@ import os from PyQt4.QtCore import * from PyQt4.QtGui import * -from bertos_utils import loadBertosProject, bertosVersion, getToolchainName -from toolchain_validation import validateToolchain +from bertos_utils import loadBertosProject, bertosVersion, getToolchainName, createBertosProject +from BToolchainPage import BToolchainPage +from BVersionPage import BVersionPage import qvariant_converter import BModulePage +import bertos_utils class BEditingDialog(QDialog): @@ -70,46 +72,101 @@ class BEditingDialog(QDialog): button_layout.addWidget(self.apply_button) layout.addLayout(button_layout) self.setLayout(layout) + self.setWindowTitle(self.tr("Edit \"%1\" project").arg(os.path.basename(self.module_page.projectInfo("PROJECT_PATH")))) def setupMenu(self): self.menu = QMenu(self.tr("Advanced options")) - self.setupToolchainMenu() - self.menu.addMenu(self.toolchain_menu) - self.setupVersionMenu() - self.menu.addMenu(self.version_menu) - - def setupToolchainMenu(self): - self.toolchain_menu = QMenu(self.tr("select toolchain")) - action_group = QActionGroup(self.toolchain_menu) - for toolchain in sorted(self.toolchains()): - info = validateToolchain(toolchain) - if info[0]: - name = getToolchainName(info[1]) - else: - name = toolchain - action = self.toolchain_menu.addAction(name) - action_group.addAction(action) - action.setCheckable(True) - action.setChecked(True if toolchain == self.currentToolchain()["path"] else False) - action.setData(qvariant_converter.convertString(toolchain)) - - def setupVersionMenu(self): - self.version_menu = QMenu(self.tr("select BeRTOS version")) - action_group = QActionGroup(self.version_menu) - versions = [(path, bertosVersion(path)) for path in self.versions()] - for path, version in versions: - action = self.version_menu.addAction(version) - action_group.addAction(action) - action.setCheckable(True) - action.setChecked(True if path == self.currentVersion() else False) - action.setData(qvariant_converter.convertString(path)) - self.connect(action, SIGNAL("triggered(bool)"), lambda: self.versionChanged(path)) - - def toolchainChanged(self, toolchain): - print toolchain - - def versionChanged(self, version): - print version + self.change_toolchain = QAction(self.tr("Change toolchain"), self) + self.change_bertos_version = QAction(self.tr("Change BeRTOS version"), self) + self.menu.addAction(self.change_toolchain) + self.menu.addAction(self.change_bertos_version) + + def connectSignals(self): + self.connect(self.change_toolchain, SIGNAL("triggered(bool)"), self.changeToolchain) + self.connect(self.change_bertos_version, SIGNAL("triggered(bool)"), self.changeBertosVersion) + self.connect(self.apply_button, SIGNAL("clicked()"), self.apply) + self.connect(self.cancel_button, SIGNAL("clicked()"), self.reject) + + def changeToolchain(self): + dialog = QDialog() + layout = QVBoxLayout() + toolchain_page = BToolchainPage() + current_toolchain = toolchain_page.projectInfo("TOOLCHAIN") + toolchain_page.reloadData() + # TODO: to be moved in BToolchainPage + for toolchain_row in range(toolchain_page.pageContent.toolchainList.count()): + toolchain = qvariant_converter.getStringDict(toolchain_page.pageContent.toolchainList.item(toolchain_row).data(Qt.UserRole)) + if toolchain["path"] == current_toolchain["path"]: + toolchain_page.pageContent.toolchainList.setCurrentRow(toolchain_row) + toolchain_page.selectionChanged() + break + layout.addWidget(toolchain_page) + button_layout = QHBoxLayout() + button_layout.addStretch() + cancel_button = QPushButton(self.tr("Cancel")) + button_layout.addWidget(cancel_button) + ok_button = QPushButton(self.tr("Ok")) + button_layout.addWidget(ok_button) + dialog.connect(cancel_button, SIGNAL("clicked()"), dialog.reject) + layout.addLayout(button_layout) + dialog.setLayout(layout) + dialog.connect(ok_button, SIGNAL("clicked()"), dialog.accept) + dialog.setWindowTitle(self.tr("Change toolchain")) + if dialog.exec_(): + toolchain = qvariant_converter.getStringDict(toolchain_page.currentItem().data(Qt.UserRole)) + toolchain_page.setProjectInfo("TOOLCHAIN", toolchain) + + def changeBertosVersion(self): + dialog = QDialog() + layout = QVBoxLayout() + version_page = BVersionPage() + version_page.reloadData() + layout.addWidget(version_page) + button_layout = QHBoxLayout() + button_layout.addStretch() + cancel_button = QPushButton(self.tr("Cancel")) + button_layout.addWidget(cancel_button) + ok_button = QPushButton(self.tr("Ok")) + button_layout.addWidget(ok_button) + dialog.connect(cancel_button, SIGNAL("clicked()"), dialog.reject) + layout.addLayout(button_layout) + dialog.setLayout(layout) + dialog.connect(ok_button, SIGNAL("clicked()"), dialog.accept) + current_version = version_page.projectInfo("SOURCES_PATH") + dialog.setWindowTitle(self.tr("Change BeRTOS version")) + if dialog.exec_(): + version = qvariant_converter.getString(version_page.currentItem().data(Qt.UserRole)) + if version != current_version: + if QMessageBox.question( + version_page, + self.tr("BeRTOS version update"), + self.tr("Changing the BeRTOS version will destroy all the modification done on the BeRTOS sources"), + QMessageBox.Ok | QMessageBox.Cancel + ) == QMessageBox.Ok: + version_page.setProjectInfo("SOURCES_PATH", version) + version_page.setProjectInfo("OLD_SOURCES_PATH", current_version) + enabled_modules = bertos_utils.enabledModules(version_page.project()) + old_configuration = version_page.projectInfo("CONFIGURATIONS") + bertos_utils.loadSourceTree(version_page.project()) + bertos_utils.loadModuleData(version_page.project()) + new_configuration = version_page.projectInfo("CONFIGURATIONS") + merged_configuration = {} + for conf in new_configuration: + if conf in old_configuration: + configuration = bertos_utils.updateConfigurationValues(new_configuration[conf], old_configuration[conf]) + else: + configuration = new_configuration[conf] + merged_configuration[conf] = configuration + version_page.setProjectInfo("CONFIGURATIONS", merged_configuration) + bertos_utils.setEnabledModules(version_page.project(), enabled_modules) + self.module_page.fillModuleTree() + else: + # Rollback version to the previous selected one. + version_page.setProjectInfo("SOURCES_PATH", current_version) + + def apply(self): + createBertosProject(self.module_page.project(), edit=True) + self.accept() def toolchains(self): return self.module_page.toolchains()