From 07a6fd8ee7b42599e1bdb317e6921f2163db7485 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Sun, 9 Feb 2014 14:30:50 +0100 Subject: [PATCH 1/4] Alternative testable tab based setting version. --- companion/src/apppreferencesdialog.ui | 1300 ++++++++++++++------- companion/src/mainwindow.cpp | 8 +- companion/src/old_apppreferencesdialog.ui | 505 ++++++++ 3 files changed, 1391 insertions(+), 422 deletions(-) create mode 100644 companion/src/old_apppreferencesdialog.ui diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui index bc1f734f3..dcf1e0ce3 100644 --- a/companion/src/apppreferencesdialog.ui +++ b/companion/src/apppreferencesdialog.ui @@ -7,7 +7,7 @@ 0 0 685 - 456 + 431 @@ -23,7 +23,7 @@ - Application Preferences + Edit Settings @@ -32,230 +32,7 @@ 6 - - - - Open Folder - - - - - - - Qt::Horizontal - - - - - - - Qt::Horizontal - - - - - - - - 0 - 0 - - - - Joystick - - - - - - - Simulator capture folder - - - - - - - Remember simulator switch values - - - - - - - - 0 - 0 - - - - User Splash Screens - - - - - - - - 0 - 0 - - - - Files to keep - - - - - - - Offer to use wizard for new models - - - true - - - - - - - Qt::Horizontal - - - - - - - - 100 - 16777215 - - - - - Blue - - - - - Green - - - - - Red - - - - - Orange - - - - - Yellow - - - - - - - - Automatic check for Companion updates - - - true - - - - - - - Qt::Horizontal - - - - - - - true - - - true - - - - - - - Only capture to clipboard - - - - - - - - 40 - 0 - - - - - 50 - 16777215 - - - - 15 - - - 10 - - - - - - - Qt::Horizontal - - - - - - - Qt::Horizontal - - - - - - - - 250 - 0 - - - - true - - - - - - - Calibrate - - - - - - - Automatic Backup Folder - - - - + Qt::Horizontal @@ -265,205 +42,892 @@ - - - - Open Folder - - - false - - - - - - - true - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - Simulator BackLight - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Enable automatic backup before writing firmware - - - - - - - Show splash screen when Companion starts - - - true - - - - - - - Find Executable - - - - - - - Open Folder - - - - - - - Enable - - - - - - - Google Earth Executable - - - - - - - Automatic check for OpenTX firmware updates - - - true - - - - - - - - 0 - 0 - - - - - Include companion splashes - - - - - Only user defined splashes - - - - - - - - - 0 - 0 - - - - Splash Screen Library - - - - - - - true - - - true + + + + 0 + + + Application Settings + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Automatic Backup Folder + + + + + + + + 40 + 0 + + + + + 50 + 16777215 + + + + 15 + + + 10 + + + + + + + + 0 + 0 + + + + User Splash Screens + + + + + + + + 0 + 0 + + + + + Include companion splashes + + + + + Only user defined splashes + + + + + + + + Google Earth Executable + + + + + + + Automatic check for OpenTX firmware updates + + + true + + + + + + + + 350 + 0 + + + + true + + + + + + + Open Folder + + + + + + + Qt::Horizontal + + + + + + + + 350 + 0 + + + + true + + + + + + + Find Executable + + + + + + + + 0 + 0 + + + + Files to keep + + + + + + + + 0 + 0 + + + + Splash Screen Library + + + + + + + Enable automatic backup before writing firmware + + + + + + + Open Folder + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + + + + Automatic check for Companion updates + + + true + + + + + + + Qt::Horizontal + + + + + + + Offer to use wizard for new models + + + true + + + + + + + Show splash screen when Companion starts + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + true + + + + + + + + Simulator Settings + + + + + + + 0 + 0 + + + + Simulator BackLight + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Enable + + + + + + + Open Folder + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 100 + 16777215 + + + + + Blue + + + + + Green + + + + + Red + + + + + Orange + + + + + Yellow + + + + + + + + + 0 + 0 + + + + Joystick + + + + + + + Only capture to clipboard + + + + + + + + 0 + 0 + + + + + + + + Calibrate + + + + + + + Remember simulator switch values + + + + + + + Simulator capture folder + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + true + + + + 350 + 0 + + + + true + + + + + + + + Radio Settings + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 128 + 64 + + + + + 128 + 64 + + + + QFrame::Panel + + + QFrame::Raised + + + + + + true + + + + + + + + 0 + 0 + + + + Channel Order + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + true + + + + 350 + 0 + + + + true + + + + + + + true + + + + 350 + 0 + + + + true + + + + + + + Offer to write FW to Tx after download + + + + + + + + 0 + 0 + + + + + + + + Save Profile + + + + + + + Open Folder + + + + + + + Clear Image + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + 0 + + + + R E T A + + + + + R E A T + + + + + R T E A + + + + + R T A E + + + + + R A E T + + + + + R A T E + + + + + E R T A + + + + + E R A T + + + + + E T R A + + + + + E T A R + + + + + E A R T + + + + + E A T R + + + + + T R E A + + + + + T R A E + + + + + T E R A + + + + + T E A R + + + + + T A R E + + + + + T A E R + + + + + A R E T + + + + + A R T E + + + + + A E R T + + + + + A E T R + + + + + A T R E + + + + + A T E R + + + + + + + + + 0 + 0 + + + + SD Structure path + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 200 + 16777215 + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + + + 1 + + + + Mode 1 (RUD ELE THR AIL) + + + + + Mode 2 (RUD THR ELE AIL) + + + + + Mode 3 (AIL ELE THR RUD) + + + + + Mode 4 (AIL THR ELE RUD) + + + + + + + + + 0 + 0 + + + + Default Stick Mode + + + + + + + + 0 + 0 + + + + Splash Screen + + + + + + + Append version number to FW file name + + + + + + + Edit Image + + + + + + + Settings Profile Name + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + - startupCheck_companion9x - backupEnable - line - backupPath - line_2 - startupCheck_fw - wizardEnable_ChkB - ge_label - label_5 - showSplash - line_3 - ge_pathButton - line_4 - backupPathButton - label_3 - backLightColor - snapshotPath - snapshotPathButton - snapshotClipboardCKB - label_11 - joystickCB - joystickcalButton - ge_lineedit - simuSW - buttonBox - line_5 - joystickChkB - label_17 - label_19 - historySize - label_9 - libraryPath - libraryPathButton - line_6 - splashincludeCB - label_10 buttonBox - ge_lineedit - ge_pathButton - historySize - showSplash - startupCheck_fw - startupCheck_companion9x - wizardEnable_ChkB - backupPath - backupPathButton - backupEnable - snapshotPath - snapshotPathButton - snapshotClipboardCKB - simuSW - backLightColor - joystickCB - joystickChkB - joystickcalButton diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index df57d182c..6f40c7c2d 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -1705,12 +1705,12 @@ void MainWindow::createActions() preferencesAct->setStatusTip(tr("Used the old Preferences Dialog")); connect(preferencesAct, SIGNAL(triggered()), this, SLOT(preferences())); - appPreferencesAct = new QAction(CompanionIcon("apppreferences.png"), tr("&Application Preferences..."), this); - appPreferencesAct->setStatusTip(tr("Edit application preferences")); + appPreferencesAct = new QAction(CompanionIcon("apppreferences.png"), tr("&Setting..."), this); + appPreferencesAct->setStatusTip(tr("Edit Settings")); connect(appPreferencesAct, SIGNAL(triggered()), this, SLOT(appPreferences())); - fwPreferencesAct = new QAction(CompanionIcon("fwpreferences.png"), tr("&Downloads and Profiles..."), this); - fwPreferencesAct->setStatusTip(tr("Firmware and voice file downloads as well as profile definition.")); + fwPreferencesAct = new QAction(CompanionIcon("fwpreferences.png"), tr("&Downloads..."), this); + fwPreferencesAct->setStatusTip(tr("Download firmware and voice files")); connect(fwPreferencesAct, SIGNAL(triggered()), this, SLOT(fwPreferences())); checkForUpdatesAct = new QAction(CompanionIcon("update.png"), tr("&Check for updates..."), this); diff --git a/companion/src/old_apppreferencesdialog.ui b/companion/src/old_apppreferencesdialog.ui new file mode 100644 index 000000000..bc1f734f3 --- /dev/null +++ b/companion/src/old_apppreferencesdialog.ui @@ -0,0 +1,505 @@ + + + appPreferencesDialog + + + + 0 + 0 + 685 + 456 + + + + + 0 + 0 + + + + + 685 + 0 + + + + Application Preferences + + + + 2 + + + 6 + + + + + Open Folder + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Joystick + + + + + + + Simulator capture folder + + + + + + + Remember simulator switch values + + + + + + + + 0 + 0 + + + + User Splash Screens + + + + + + + + 0 + 0 + + + + Files to keep + + + + + + + Offer to use wizard for new models + + + true + + + + + + + Qt::Horizontal + + + + + + + + 100 + 16777215 + + + + + Blue + + + + + Green + + + + + Red + + + + + Orange + + + + + Yellow + + + + + + + + Automatic check for Companion updates + + + true + + + + + + + Qt::Horizontal + + + + + + + true + + + true + + + + + + + Only capture to clipboard + + + + + + + + 40 + 0 + + + + + 50 + 16777215 + + + + 15 + + + 10 + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + + + + + 250 + 0 + + + + true + + + + + + + Calibrate + + + + + + + Automatic Backup Folder + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Open Folder + + + false + + + + + + + true + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Simulator BackLight + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Enable automatic backup before writing firmware + + + + + + + Show splash screen when Companion starts + + + true + + + + + + + Find Executable + + + + + + + Open Folder + + + + + + + Enable + + + + + + + Google Earth Executable + + + + + + + Automatic check for OpenTX firmware updates + + + true + + + + + + + + 0 + 0 + + + + + Include companion splashes + + + + + Only user defined splashes + + + + + + + + + 0 + 0 + + + + Splash Screen Library + + + + + + + true + + + true + + + + + startupCheck_companion9x + backupEnable + line + backupPath + line_2 + startupCheck_fw + wizardEnable_ChkB + ge_label + label_5 + showSplash + line_3 + ge_pathButton + line_4 + backupPathButton + label_3 + backLightColor + snapshotPath + snapshotPathButton + snapshotClipboardCKB + label_11 + joystickCB + joystickcalButton + ge_lineedit + simuSW + buttonBox + line_5 + joystickChkB + label_17 + label_19 + historySize + label_9 + libraryPath + libraryPathButton + line_6 + splashincludeCB + label_10 + + + buttonBox + ge_lineedit + ge_pathButton + historySize + showSplash + startupCheck_fw + startupCheck_companion9x + wizardEnable_ChkB + backupPath + backupPathButton + backupEnable + snapshotPath + snapshotPathButton + snapshotClipboardCKB + simuSW + backLightColor + joystickCB + joystickChkB + joystickcalButton + + + + + + + buttonBox + accepted() + appPreferencesDialog + accept() + + + 376 + 596 + + + 157 + 274 + + + + + buttonBox + rejected() + appPreferencesDialog + reject() + + + 396 + 596 + + + 286 + 274 + + + + + From c48e1781fd275e9b12d6d3a97cfea6c5708cd74a Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 10 Feb 2014 07:54:42 +0100 Subject: [PATCH 2/4] The profile tab is now functional --- companion/src/apppreferencesdialog.cpp | 159 +++- companion/src/apppreferencesdialog.h | 9 + companion/src/apppreferencesdialog.ui | 121 ++- companion/src/fwpreferencesdialog.cpp | 298 ++----- companion/src/fwpreferencesdialog.h | 8 +- companion/src/fwpreferencesdialog.ui | 775 +++++------------- .../classical icons/apppreferences.png | Bin 11170 -> 17379 bytes companion/src/mainwindow.cpp | 5 - companion/src/mainwindow.h | 1 - .../src/themes/classic/16/apppreferences.png | Bin 1122 -> 876 bytes .../src/themes/classic/24/apppreferences.png | Bin 1625 -> 1625 bytes .../src/themes/classic/32/apppreferences.png | Bin 2246 -> 2262 bytes .../src/themes/classic/48/apppreferences.png | Bin 3879 -> 4270 bytes 13 files changed, 521 insertions(+), 855 deletions(-) diff --git a/companion/src/apppreferencesdialog.cpp b/companion/src/apppreferencesdialog.cpp index 4b425a61b..cba2bda1e 100644 --- a/companion/src/apppreferencesdialog.cpp +++ b/companion/src/apppreferencesdialog.cpp @@ -14,7 +14,7 @@ appPreferencesDialog::appPreferencesDialog(QWidget *parent) : ui(new Ui::appPreferencesDialog) { ui->setupUi(this); - setWindowIcon(CompanionIcon("preferences.png")); + setWindowIcon(CompanionIcon("apppreferences.png")); initSettings(); connect(this, SIGNAL(accepted()), this, SLOT(writeValues())); #ifndef JOYSTICKS @@ -56,6 +56,18 @@ void appPreferencesDialog::writeValues() settings.remove("js_ctrl"); } + settings.setValue("default_channel_order", ui->channelorderCB->currentIndex()); + settings.setValue("default_mode", ui->stickmodeCB->currentIndex()); + settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked()); + settings.setValue("burnFirmware", ui->burnFirmware->isChecked()); + settings.setValue("profileId", ui->ProfSlot_SB->value()); + settings.setValue("sdPath", ui->sdPath->text()); + settings.setValue("SplashFileName", ui->SplashFileName->text()); + if (!ui->SplashFileName->text().isEmpty()) + settings.setValue("SplashImage", ""); + + saveProfile(); + MainWindow * mw = (MainWindow *)this->parent(); mw->unloadProfile(); } @@ -75,6 +87,7 @@ void appPreferencesDialog::initSettings() { QSettings settings; ui->snapshotClipboardCKB->setChecked(settings.value("snapshot_to_clipboard", false).toBool()); + ui->burnFirmware->setChecked(settings.value("burnFirmware", true).toBool()); QString Path=settings.value("snapshotPath", "").toString(); if (QDir(Path).exists()) { @@ -142,6 +155,24 @@ void appPreferencesDialog::initSettings() ui->joystickcalButton->setDisabled(true); } #endif +// Profile Tab Inits + ui->channelorderCB->setCurrentIndex(settings.value("default_channel_order", 0).toInt()); + ui->stickmodeCB->setCurrentIndex(settings.value("default_mode", 1).toInt()); + ui->renameFirmware->setChecked(settings.value("rename_firmware_files", false).toBool()); + Path=settings.value("sdPath", "").toString(); + if (QDir(Path).exists()) { + ui->sdPath->setText(Path); + } + ui->ProfSlot_SB->setValue(settings.value("profileId", 1).toInt()); + on_ProfSlot_SB_valueChanged(); + QString fileName=settings.value("SplashFileName","").toString(); + if (!fileName.isEmpty()) { + QFile file(fileName); + if (file.exists()){ + ui->SplashFileName->setText(fileName); + displayImage( fileName ); + } + } } void appPreferencesDialog::on_libraryPathButton_clicked() @@ -222,3 +253,129 @@ void appPreferencesDialog::on_joystickcalButton_clicked() { } #endif +// ******** Profile tab functions + +void appPreferencesDialog::on_sdPathButton_clicked() +{ + QSettings settings; + QString fileName = QFileDialog::getExistingDirectory(this,tr("Select the folder replicating your SD structure"), settings.value("sdPath").toString()); + if (!fileName.isEmpty()) { + ui->sdPath->setText(fileName); + } +} + +void appPreferencesDialog::on_ProfSlot_SB_valueChanged() +{ + QSettings settings; + settings.beginGroup("Profiles"); + QString profile=QString("profile%1").arg(ui->ProfSlot_SB->value()); + settings.beginGroup(profile); + QString name=settings.value("Name","").toString(); + ui->ProfName_LE->setText(name); +/* if (!(name.isEmpty())) { + QString firmwarename=settings.value("firmware", default_firmware_id).toString(); + FirmwareInfo * fw = getFirmware(firmwarename); + int i=0; + foreach(FirmwareInfo * firmware, firmwares) { + if (fw == firmware) { + qDebug() << fw->id; + qDebug() << firmware->id; + qDebug() << i; + ui->downloadVerCB->setCurrentIndex(i); + break; + } + i++; + } + baseFirmwareChanged(); + populateFirmwareOptions(fw); + }*/ + settings.endGroup(); + settings.endGroup(); +} + + +void appPreferencesDialog::saveProfile() +{ + QSettings settings; + QString profile=QString("profile%1").arg(ui->ProfSlot_SB->value()); + QString name=ui->ProfName_LE->text(); + if (name.isEmpty()) { + name = profile; + ui->ProfName_LE->setText(name); + } + settings.beginGroup("Profiles"); + settings.beginGroup(profile); + settings.setValue("Name",name); + settings.setValue("default_channel_order", ui->channelorderCB->currentIndex()); + settings.setValue("default_mode", ui->stickmodeCB->currentIndex()); + settings.setValue("burnFirmware", ui->burnFirmware->isChecked()); + settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked()); + settings.setValue("sdPath", ui->sdPath->text()); + settings.setValue("SplashFileName", ui->SplashFileName->text()); + settings.endGroup(); + settings.endGroup(); +} + +void appPreferencesDialog::on_removeProfileButton_clicked() +{ + QSettings settings; + QString profile=QString("profile%1").arg(ui->ProfSlot_SB->value()); + settings.remove(profile); +} + +bool appPreferencesDialog::displayImage( QString fileName ) +{ + QImage image(fileName); + if (image.isNull()) + { + QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); + return false; + } + + int width=ui->imageLabel->width(); + ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(width, 64))); + if (width==212) { + image=image.convertToFormat(QImage::Format_RGB32); + QRgb col; + int gray, height = image.height(); + for (int i = 0; i < width; ++i) { + for (int j = 0; j < height; ++j) { + col = image.pixel(i, j); + gray = qGray(col); + image.setPixel(i, j, qRgb(gray, gray, gray)); + } + } + ui->imageLabel->setPixmap(QPixmap::fromImage(image)); + } + else { + ui->imageLabel->setPixmap(QPixmap::fromImage(image.convertToFormat(QImage::Format_Mono))); + } + return true; +} + +void appPreferencesDialog::on_SplashSelect_clicked() +{ + QString supportedImageFormats; + for (int formatIndex = 0; formatIndex < QImageReader::supportedImageFormats().count(); formatIndex++) { + supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex]; + } + + QSettings settings; + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open Image to load"), settings.value("lastImagesDir").toString(), tr("Images (%1)").arg(supportedImageFormats)); + + if (!fileName.isEmpty()) { + settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath()); + + if (displayImage(fileName)) + ui->SplashFileName->setText(fileName); + } +} + +void appPreferencesDialog::on_clearImageButton_clicked() { + ui->imageLabel->clear(); + ui->SplashFileName->clear(); +} + + + diff --git a/companion/src/apppreferencesdialog.h b/companion/src/apppreferencesdialog.h index d47682512..5934d79d2 100644 --- a/companion/src/apppreferencesdialog.h +++ b/companion/src/apppreferencesdialog.h @@ -23,6 +23,8 @@ public: private: Ui::appPreferencesDialog *ui; void initSettings(); + bool displayImage( QString fileName ); + void saveProfile(); private slots: void writeValues(); @@ -31,6 +33,13 @@ private slots: void on_snapshotClipboardCKB_clicked(); void on_backupPathButton_clicked(); void on_ge_pathButton_clicked(); + + void on_sdPathButton_clicked(); + void on_ProfSlot_SB_valueChanged(); + void on_removeProfileButton_clicked(); + void on_SplashSelect_clicked(); + void on_clearImageButton_clicked(); + #ifdef JOYSTICKS void on_joystickChkB_clicked(); void on_joystickcalButton_clicked(); diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui index dcf1e0ce3..73faa9bbd 100644 --- a/companion/src/apppreferencesdialog.ui +++ b/companion/src/apppreferencesdialog.ui @@ -7,7 +7,7 @@ 0 0 685 - 431 + 462 @@ -493,14 +493,14 @@ Radio Settings - + Qt::Horizontal - + @@ -534,7 +534,7 @@ - + @@ -550,7 +550,7 @@ - + true @@ -566,7 +566,7 @@ - + true @@ -582,7 +582,7 @@ - + Offer to write FW to Tx after download @@ -599,35 +599,35 @@ - - + + - Save Profile + Remove Profile - + Open Folder - + Clear Image - + Qt::Horizontal - + @@ -777,7 +777,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -793,7 +793,7 @@ This is used by the templated to determine which channel goes to what number out - + Qt::Horizontal @@ -806,7 +806,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -860,7 +860,7 @@ Mode 4: - + @@ -873,7 +873,14 @@ Mode 4: - + + + + Select Image + + + + @@ -886,20 +893,13 @@ Mode 4: - + Append version number to FW file name - - - - Edit Image - - - @@ -907,7 +907,7 @@ Mode 4: - + Qt::Vertical @@ -920,6 +920,29 @@ Mode 4: + + + + + 50 + 16777215 + + + + 1 + + + 10 + + + + + + + Profile Index + + + @@ -927,7 +950,41 @@ Mode 4: + tabWidget + ge_lineedit + ge_pathButton + historySize + showSplash + startupCheck_fw + startupCheck_companion9x + wizardEnable_ChkB + backupPath + backupPathButton + backupEnable + splashincludeCB + libraryPath + libraryPathButton buttonBox + snapshotPath + snapshotPathButton + snapshotClipboardCKB + simuSW + backLightColor + joystickCB + joystickChkB + joystickcalButton + ProfName_LE + ProfSlot_SB + sdPath + sdPathButton + SplashFileName + SplashSelect + clearImageButton + stickmodeCB + channelorderCB + renameFirmware + burnFirmware + removeProfileButton @@ -940,8 +997,8 @@ Mode 4: accept() - 376 - 596 + 382 + 455 157 @@ -956,8 +1013,8 @@ Mode 4: reject() - 396 - 596 + 402 + 455 286 diff --git a/companion/src/fwpreferencesdialog.cpp b/companion/src/fwpreferencesdialog.cpp index 2dfce0e73..832262ef2 100644 --- a/companion/src/fwpreferencesdialog.cpp +++ b/companion/src/fwpreferencesdialog.cpp @@ -12,7 +12,7 @@ fwPreferencesDialog::fwPreferencesDialog(QWidget *parent) : updateLock(false) { ui->setupUi(this); - setWindowIcon(CompanionIcon("preferences.png")); + setWindowIcon(CompanionIcon("fwpreferences.png")); QCheckBox * OptionCheckBox[]= { ui->optionCheckBox_1, ui->optionCheckBox_2, ui->optionCheckBox_3, ui->optionCheckBox_4, ui->optionCheckBox_5, ui->optionCheckBox_6, ui->optionCheckBox_7, @@ -38,7 +38,7 @@ fwPreferencesDialog::fwPreferencesDialog(QWidget *parent) : connect(ui->downloadVerCB, SIGNAL(currentIndexChanged(int)), this, SLOT(baseFirmwareChanged())); connect(this, SIGNAL(accepted()), this, SLOT(writeValues())); - resize(0,0); + shrink(); } @@ -47,32 +47,43 @@ fwPreferencesDialog::~fwPreferencesDialog() delete ui; } +void fwPreferencesDialog::showVoice(bool show) +{ + if (show) + showVoice(); + else + hideVoice(); +} + +void fwPreferencesDialog::showVoice() +{ + ui->voiceLine->show(); + ui->voiceLabel->show(); + ui->voiceCombo->show(); + ui->voice_dnld->show(); +} + +void fwPreferencesDialog::hideVoice() +{ + ui->voiceLine->hide(); + ui->voiceLabel->hide(); + ui->voiceCombo->hide(); + ui->voice_dnld->hide(); + QTimer::singleShot(0, this, SLOT(shrink())); +} + +void fwPreferencesDialog::shrink() +{ + resize(0,0); +} + void fwPreferencesDialog::baseFirmwareChanged() { QVariant selected_firmware = ui->downloadVerCB->itemData(ui->downloadVerCB->currentIndex()); voice=NULL; foreach(FirmwareInfo * firmware, firmwares) { if (firmware->id == selected_firmware) { - if (firmware->voice) { - ui->voiceLabel->show(); - ui->voiceCombo->show(); - ui->voice_dnld->show(); - ui->sdPathButton->show(); - ui->sdPath->show(); - ui->sdPathLabel->show(); - ui->voiceLabel->setEnabled(true); - ui->voiceCombo->setEnabled(true); - ui->voice_dnld->setEnabled(true); - ui->sdPathButton->setEnabled(true); - ui->sdPath->setEnabled(true); - } else { - ui->voiceLabel->hide(); - ui->voiceCombo->hide(); - ui->voice_dnld->hide(); - ui->sdPathButton->hide(); - ui->sdPath->hide(); - ui->sdPathLabel->hide(); - } + showVoice(firmware->voice); populateFirmwareOptions(firmware); break; } @@ -109,11 +120,6 @@ FirmwareVariant fwPreferencesDialog::getFirmwareVariant() return default_firmware_variant; } -void fwPreferencesDialog::firmwareLangChanged() -{ - firmwareChanged(); -} - void fwPreferencesDialog::firmwareOptionChanged(bool state) { QCheckBox *cb = qobject_cast(sender()); @@ -134,19 +140,7 @@ void fwPreferencesDialog::firmwareOptionChanged(bool state) } } if (voice) { - if (voice->isChecked()) { - ui->voiceLabel->setEnabled(true); - ui->voiceCombo->setEnabled(true); - ui->voice_dnld->setEnabled(true); - ui->sdPathButton->setEnabled(true); - ui->sdPath->setEnabled(true); - } else { - ui->voiceLabel->setDisabled(true); - ui->voiceCombo->setDisabled(true); - ui->voice_dnld->setDisabled(true); - ui->sdPathButton->setDisabled(true); - ui->sdPath->setDisabled(true); - } + showVoice(voice->isChecked()); } return firmwareChanged(); @@ -157,37 +151,24 @@ void fwPreferencesDialog::firmwareOptionChanged(bool state) } } else if (cb && !state) { if (cb->text()=="voice") { - ui->voiceLabel->setDisabled(true); - ui->voiceCombo->setDisabled(true); - ui->voice_dnld->setDisabled(true); - ui->sdPathButton->setEnabled(true); - ui->sdPath->setEnabled(true); + hideVoice(); } } - if (voice ) { - if (voice->isChecked()) { - ui->voiceLabel->setEnabled(true); - ui->voiceCombo->setEnabled(true); - ui->voice_dnld->setEnabled(true); - } else { - ui->voiceLabel->setDisabled(true); - ui->voiceCombo->setDisabled(true); - ui->voice_dnld->setDisabled(true); - ui->sdPathButton->setDisabled(true); - ui->sdPath->setDisabled(true); - } + if (voice) { + showVoice(voice->isChecked()); } else if (firmware) { if (firmware->voice) { - ui->voiceLabel->setEnabled(true); - ui->voiceCombo->setEnabled(true); - ui->voice_dnld->setEnabled(true); - ui->sdPathButton->setEnabled(true); - ui->sdPath->setEnabled(true); + showVoice(); } } return firmwareChanged(); } +void fwPreferencesDialog::firmwareLangChanged() +{ + firmwareChanged(); +} + void fwPreferencesDialog::firmwareChanged() { if (updateLock) @@ -233,18 +214,10 @@ void fwPreferencesDialog::firmwareChanged() void fwPreferencesDialog::writeValues() { QSettings settings; - settings.setValue("default_channel_order", ui->channelorderCB->currentIndex()); - settings.setValue("default_mode", ui->stickmodeCB->currentIndex()); + settings.setValue("cpu_id", ui->CPU_ID_LE->text()); - settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked()); - settings.setValue("burnFirmware", ui->burnFirmware->isChecked()); current_firmware_variant = getFirmwareVariant(); settings.setValue("firmware", current_firmware_variant.id); - settings.setValue("profileId", ui->ProfSlot_SB->value()); - settings.setValue("sdPath", ui->sdPath->text()); - settings.setValue("SplashFileName", ui->SplashFileName->text()); - if (!ui->SplashFileName->text().isEmpty()) - settings.setValue("SplashImage", ""); MainWindow * mw = (MainWindow *)this->parent(); mw->unloadProfile(); @@ -269,14 +242,7 @@ void fwPreferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware) ui->voiceCombo->setCurrentIndex(ui->voiceCombo->count() - 1); } - if (ui->langCombo->count()) { - ui->langCombo->show(); - ui->langLabel->show(); - } - else { - ui->langCombo->hide(); - ui->langLabel->hide(); - } + showVoice(ui->langCombo->count()!=0); int index = 0; foreach(QList @@ -32,181 +32,13 @@ 6 - - - - Download Voice + + + + Qt::Horizontal - - - - - - Offer to write FW to Tx after download - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - Download FW - - - - - - - Options - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - Processor ID - - - - - - - - 0 - 0 - - - - CheckBox - - - - - - - - 0 - 0 - - - - FwInfo - - - - - - - - 0 - 0 - - - - CheckBox + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok @@ -223,6 +55,19 @@ + + + + + 0 + 0 + + + + CheckBox + + + @@ -246,35 +91,6 @@ - - - - - 0 - 0 - - - - Default Stick Mode - - - - - - - - 0 - 0 - - - - Channel Order - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - @@ -301,60 +117,6 @@ - - - - - 190 - 16777215 - - - - Mode selection: - -Mode 1: - Left stick: Elevator, Rudder - Right stick: Throttle, Aileron - -Mode 2: - Left stick: Throttle, Rudder - Right stick: Elevator, Aileron - -Mode 3: - Left stick: Elevator, Aileron - Right stick: Throttle, Rudder - -Mode 4: - Left stick: Throttle, Aileron - Right stick: Elevator, Rudder - - - - - 1 - - - - Mode 1 (RUD ELE THR AIL) - - - - - Mode 2 (RUD THR ELE AIL) - - - - - Mode 3 (AIL ELE THR RUD) - - - - - Mode 4 (AIL THR ELE RUD) - - - - @@ -394,6 +156,9 @@ Mode 4: + + + @@ -410,8 +175,8 @@ Mode 4: - - + + @@ -436,159 +201,6 @@ Mode 4: - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 75 - 16777215 - - - - Channel order - -This is used by the templated to determine which channel goes to what number output. - - - 0 - - - - R E T A - - - - - R E A T - - - - - R T E A - - - - - R T A E - - - - - R A E T - - - - - R A T E - - - - - E R T A - - - - - E R A T - - - - - E T R A - - - - - E T A R - - - - - E A R T - - - - - E A T R - - - - - T R E A - - - - - T R A E - - - - - T E R A - - - - - T E A R - - - - - T A R E - - - - - T A E R - - - - - A R E T - - - - - A R T E - - - - - A E R T - - - - - A E T R - - - - - A T R E - - - - - A T E R - - - - @@ -641,19 +253,6 @@ This is used by the templated to determine which channel goes to what number out - - - - - 0 - 0 - - - - CheckBox - - - @@ -914,40 +513,6 @@ This is used by the templated to determine which channel goes to what number out - - - - Append version number to FW file name - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - Sans Serif - 75 - true - - - - Profile - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - @@ -961,37 +526,6 @@ This is used by the templated to determine which channel goes to what number out - - - - true - - - true - - - - - - - - 50 - 16777215 - - - - Set language of voice. -May be different from firmware language - - - - - - - Open Image - - - @@ -1006,109 +540,202 @@ May be different from firmware language - - - - - 0 - 0 - - - - Splash Screen - - - - - - - Clear Image - - - - - - - - - - - 0 - 0 - - + + - 16777215 + 50 16777215 - - 1 - - - 10 + + Set language of voice. +May be different from firmware language - - - - Qt::Horizontal - - - - - - - Qt::Horizontal - - - - - - - Qt::Horizontal - - - - - + + - Open Folder + Download Voice - - - - true - - - true - - - - - + + - + 0 0 - SD Structure path - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + CheckBox - - + + + + + 0 + 0 + + - Save Profile + CheckBox + + + + + + + Download FW + + + + + + + Options + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + Processor ID + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + + 0 + 0 + + + + FwInfo + + + + + + + + 0 + 0 + + + + CheckBox + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal @@ -1161,10 +788,6 @@ May be different from firmware language optionCheckBox_40 optionCheckBox_41 optionCheckBox_42 - stickmodeCB - channelorderCB - renameFirmware - burnFirmware diff --git a/companion/src/images/originals/classical icons/apppreferences.png b/companion/src/images/originals/classical icons/apppreferences.png index 1f6613e4061cb2e049cff729bdc56cbc24e74f2e..d24ef0ad7270d58ad184090d5b3e13942733cef1 100644 GIT binary patch literal 17379 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≧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
P^cj$B1pqIM5%~1(ZFYQzhsHnv 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"Open log file")); connect(logsAct, SIGNAL(triggered()), this, SLOT(logFile())); - preferencesAct = new QAction(tr("&Old Preferences Dialog..."), this); - preferencesAct->setStatusTip(tr("Used the old Preferences Dialog")); - connect(preferencesAct, SIGNAL(triggered()), this, SLOT(preferences())); - appPreferencesAct = new QAction(CompanionIcon("apppreferences.png"), tr("&Setting..."), this); appPreferencesAct->setStatusTip(tr("Edit Settings")); connect(appPreferencesAct, SIGNAL(triggered()), this, SLOT(appPreferences())); @@ -1977,7 +1973,6 @@ void MainWindow::createMenus() settingsMenu->addSeparator(); settingsMenu->addAction(appPreferencesAct); settingsMenu->addAction(customizeSplashAct); - settingsMenu->addAction(preferencesAct); settingsMenu->addAction(burnConfigAct); burnMenu = menuBar()->addMenu(tr("&Read/Write")); diff --git a/companion/src/mainwindow.h b/companion/src/mainwindow.h index 34472d123..c39e8175a 100644 --- a/companion/src/mainwindow.h +++ b/companion/src/mainwindow.h @@ -224,7 +224,6 @@ private: QAction *saveAct; QAction *saveAsAct; QAction *exitAct; - QAction *preferencesAct; QAction *appPreferencesAct; QAction *fwPreferencesAct; QAction *checkForUpdatesAct; diff --git a/companion/src/themes/classic/16/apppreferences.png b/companion/src/themes/classic/16/apppreferences.png index dae98ee8ae8b57af058cf163bbfa8be153866944..afcc0a5326153df965bcb833254fae3ef2dcd5bf 100644 GIT binary patch delta 864 zcmV-m1E2ij2Xe9xtglST zTI!_CT|O#zFmv&!tffxM`pT4uh@^izC6$c}NdP62`gr`2fsvow||0d{DNh@LN2?>V)7$~A|XJS zk5@Q2{yw1)G>mTvJn6S27fa-_Dnkc4Sxmmmk@3BVA|Nmr?O^%F zS$YnAMK-IV<$QEK)Qvx2zubO(&1o1;i;JPM+>I9Yg<% zH{M>rAAdg0m3W;!E~DLzU7(<~6EUHq0}usqbg&zMf*`G^oE=*6f@y-LgV=docD=AY z@pOVM^*GaC_R`ls!rI><#3>?90h}V@6e(8Q>FgTi!r5N7)Yo}yB0;0BmE3hpyX^Ni z-i-7qDAchmgXbpBv9kOg-Ja_Jlp6bZZ2vhb6@P=#Xq`ykHe&Cfi2DlW>Ts-*_R3bu zD>welxm?yoL`2uFi>|5n+>q+a01N|yPp(ikVQX=iNEoVBNUy@d zXIcEWf@8Jl17oT#wM|RYeC-bZQGEwZgA*@)_TTzk!I{8V<@o=u5x`vTjWrvk4?$i= q>_=NFPY(FOTZFpn;Zv8(yVz&v;naX7V0000Xl^fs&0N zN(e5d2{<6#K-9QN5gZfP06|y~7!}5=&=v~P0)78}cR%J|p5*(^J?FdUCf_X&4GD7C z?X(*J9QeF|aDw-3*Df2PySnX-Ajmd}9n1!pw4J&yCli{K6&}QaJI~%y6XHlbFFY6^ zp9WC;9e|mzid6vFbbw_M0IL?@VEV20Fh2nDzR=Gixx@uUHLTZz?k8BU19dG7=E8ad zm}D-NKR?wrzw^8V#37(>wKsR4nyMggwAfgBS;LoL;0M5akFGW!{G0|#DKy8zQVTpT z0L5LB>|4@oy^SP{)Kv;8o^Zk$UN-M~5WBqtfto}x%JvTB?-YKxEvsTd^NUS)CWsi@ zl7N5#_r);RK>Di~Dnr2a%~$qzwg!0?W-;iL9bAjzwCP{=V!IGoSI|l|QdZ(a4CDAk!|F7q z@kLsuVb%}FEc(7vnznZrI?7c2b%y0eqdL@}`og&O`19`uv8 z2F=Xo+zq4xGy~Xk8#GEmNDwGaHw>QmoU5Hzq$?9d|*<+iFb0F#|#&2)U}CI-BGk*2Rwzo@_N%EcI3? z`zjEA6>WW~>v3Q2cGM0XTkEGTwUSZ<_)+3p{l(!S5kQN{5l0^u3}WqGp0!@Sa7Xxvd(c>I@&l~%M=Jp*-^oT`dhLMKjn!t zZC~9hqm9I#m9qpj?&luIE&e>#o^L+VDSeh&9!5p7IH?Ek))dq$iPD?ZPP&pb~Mc+eSMZghqlgBi*2VRKYU p%`D-(7D&68kerzJTELs-<;|jdzX~j^-IyQ(z~_bp+~J5y{sX1c8*l&s diff --git a/companion/src/themes/classic/24/apppreferences.png b/companion/src/themes/classic/24/apppreferences.png index ebca2028c30848c31d6d90edbbcbad88194e105c..f979f3c96b217fbafde644bc42ff489cd35627ef 100644 GIT binary patch delta 1608 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 jIaDz+SgG401!J# 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 Rlh*(M002ovPDHLkV1l8aCJO)n From b74d7f0f32fe6d1082becc707a85defeb201506b Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 10 Feb 2014 18:01:43 +0100 Subject: [PATCH 3/4] Added code for creating new profiles. --- companion/src/mainwindow.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 4a134983f..35fce6fff 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -2203,6 +2203,28 @@ void MainWindow::updateProfilesActions() void MainWindow::createProfile() { + int firstFreeIndex = 0; + QSettings settings; + settings.beginGroup("Profiles"); + for (int i=0; firstFreeIndex ==0 && i Date: Tue, 11 Feb 2014 08:37:07 +0100 Subject: [PATCH 4/4] Profiles can now be added and removed in a proper way. --- companion/src/CMakeLists.txt | 3 - companion/src/apppreferencesdialog.cpp | 86 ++-- companion/src/apppreferencesdialog.h | 3 +- companion/src/apppreferencesdialog.ui | 686 ++++++++++++------------- companion/src/eeprominterface.cpp | 2 +- companion/src/fwpreferencesdialog.cpp | 3 - companion/src/mainwindow.cpp | 136 ++--- companion/src/mainwindow.h | 5 +- 8 files changed, 428 insertions(+), 496 deletions(-) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 3a8dd26b7..20c86879c 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -155,7 +155,6 @@ SET( companion_SRCS modelslist.cpp mountlist.cpp avroutputdialog.cpp - preferencesdialog.cpp apppreferencesdialog.cpp fwpreferencesdialog.cpp burnconfigdialog.cpp @@ -178,7 +177,6 @@ SET( companion_SRCS SET( companion_MOC_HDRS avroutputdialog.h - preferencesdialog.h apppreferencesdialog.h fwpreferencesdialog.h burnconfigdialog.h @@ -214,7 +212,6 @@ SET( companion_UIS comparedialog.ui fusesdialog.ui logsdialog.ui - preferencesdialog.ui apppreferencesdialog.ui fwpreferencesdialog.ui simulatordialog.ui diff --git a/companion/src/apppreferencesdialog.cpp b/companion/src/apppreferencesdialog.cpp index cba2bda1e..ebbb5bb55 100644 --- a/companion/src/apppreferencesdialog.cpp +++ b/companion/src/apppreferencesdialog.cpp @@ -60,16 +60,13 @@ void appPreferencesDialog::writeValues() settings.setValue("default_mode", ui->stickmodeCB->currentIndex()); settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked()); settings.setValue("burnFirmware", ui->burnFirmware->isChecked()); - settings.setValue("profileId", ui->ProfSlot_SB->value()); + settings.setValue("profileId", ui->profileIndexLE->text()); settings.setValue("sdPath", ui->sdPath->text()); settings.setValue("SplashFileName", ui->SplashFileName->text()); if (!ui->SplashFileName->text().isEmpty()) settings.setValue("SplashImage", ""); saveProfile(); - - MainWindow * mw = (MainWindow *)this->parent(); - mw->unloadProfile(); } void appPreferencesDialog::on_snapshotPathButton_clicked() @@ -163,8 +160,8 @@ void appPreferencesDialog::initSettings() if (QDir(Path).exists()) { ui->sdPath->setText(Path); } - ui->ProfSlot_SB->setValue(settings.value("profileId", 1).toInt()); - on_ProfSlot_SB_valueChanged(); + ui->profileIndexLE->setText(settings.value("profileId", "").toString()); + QString fileName=settings.value("SplashFileName","").toString(); if (!fileName.isEmpty()) { QFile file(fileName); @@ -264,40 +261,11 @@ void appPreferencesDialog::on_sdPathButton_clicked() } } -void appPreferencesDialog::on_ProfSlot_SB_valueChanged() -{ - QSettings settings; - settings.beginGroup("Profiles"); - QString profile=QString("profile%1").arg(ui->ProfSlot_SB->value()); - settings.beginGroup(profile); - QString name=settings.value("Name","").toString(); - ui->ProfName_LE->setText(name); -/* if (!(name.isEmpty())) { - QString firmwarename=settings.value("firmware", default_firmware_id).toString(); - FirmwareInfo * fw = getFirmware(firmwarename); - int i=0; - foreach(FirmwareInfo * firmware, firmwares) { - if (fw == firmware) { - qDebug() << fw->id; - qDebug() << firmware->id; - qDebug() << i; - ui->downloadVerCB->setCurrentIndex(i); - break; - } - i++; - } - baseFirmwareChanged(); - populateFirmwareOptions(fw); - }*/ - settings.endGroup(); - settings.endGroup(); -} - - void appPreferencesDialog::saveProfile() { QSettings settings; - QString profile=QString("profile%1").arg(ui->ProfSlot_SB->value()); + + QString profile=QString("profile") + settings.value("profileId").toString(); QString name=ui->ProfName_LE->text(); if (name.isEmpty()) { name = profile; @@ -316,11 +284,51 @@ void appPreferencesDialog::saveProfile() settings.endGroup(); } +void appPreferencesDialog::loadProfileString(QString profile, QString label) +{ + QSettings settings; + QString value; + + settings.beginGroup("Profiles"); + settings.beginGroup(profile); + value = settings.value(label).toString(); + settings.endGroup(); + settings.endGroup(); + + settings.setValue( label, value ); +} + +void appPreferencesDialog::loadProfile() +{ + QSettings settings; + QString profile=QString("profile") + settings.value("profileId").toString(); + + loadProfileString( profile, "Name" ); + loadProfileString( profile, "default_channel_order" ); + loadProfileString( profile, "default_mode" ); + loadProfileString( profile, "burnFirmware" ); + loadProfileString( profile, "rename_firmware_files" ); + loadProfileString( profile, "sdPath" ); + loadProfileString( profile, "SplashFileName" ); +} + void appPreferencesDialog::on_removeProfileButton_clicked() { QSettings settings; - QString profile=QString("profile%1").arg(ui->ProfSlot_SB->value()); - settings.remove(profile); + QString profileId = settings.value("profileId").toString(); + if ( profileId == "1" ) + QMessageBox::information(this, tr("Not possible to remove profile"), tr("The default profile can not be removed.")); + else + { + QString profile=QString("profile") + profileId; + settings.beginGroup("Profiles"); + settings.remove(profile); + settings.endGroup(); + settings.setValue("profileId", "1"); + + loadProfile(); + initSettings(); + } } bool appPreferencesDialog::displayImage( QString fileName ) diff --git a/companion/src/apppreferencesdialog.h b/companion/src/apppreferencesdialog.h index 5934d79d2..b6f6c3896 100644 --- a/companion/src/apppreferencesdialog.h +++ b/companion/src/apppreferencesdialog.h @@ -25,6 +25,8 @@ private: void initSettings(); bool displayImage( QString fileName ); void saveProfile(); + void loadProfileString(QString profile, QString label); + void loadProfile(); private slots: void writeValues(); @@ -35,7 +37,6 @@ private slots: void on_ge_pathButton_clicked(); void on_sdPathButton_clicked(); - void on_ProfSlot_SB_valueChanged(); void on_removeProfileButton_clicked(); void on_SplashSelect_clicked(); void on_clearImageButton_clicked(); diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui index 73faa9bbd..cea4246f6 100644 --- a/companion/src/apppreferencesdialog.ui +++ b/companion/src/apppreferencesdialog.ui @@ -7,7 +7,7 @@ 0 0 685 - 462 + 431 @@ -493,324 +493,11 @@ Radio Settings - - - - Qt::Horizontal - - - - - - - - 0 - 0 - - - - - 128 - 64 - - - - - 128 - 64 - - - - QFrame::Panel - - - QFrame::Raised - - - - - - true - - - - - - - - 0 - 0 - - - - Channel Order - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - true - - - - 350 - 0 - - - - true - - - - - - - true - - - - 350 - 0 - - - - true - - - - - - - Offer to write FW to Tx after download - - - - - - - - 0 - 0 - - - - - - - - Remove Profile - - - - - - - Open Folder - - - - - - - Clear Image - - - - - - - Qt::Horizontal - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 100 - 16777215 - - - - Channel order - -This is used by the templated to determine which channel goes to what number output. - - - 0 - - - - R E T A - - - - - R E A T - - - - - R T E A - - - - - R T A E - - - - - R A E T - - - - - R A T E - - - - - E R T A - - - - - E R A T - - - - - E T R A - - - - - E T A R - - - - - E A R T - - - - - E A T R - - - - - T R E A - - - - - T R A E - - - - - T E R A - - - - - T E A R - - - - - T A R E - - - - - T A E R - - - - - A R E T - - - - - A R T E - - - - - A E R T - - - - - A E T R - - - - - A T R E - - - - - A T E R - - - - - - - - - 0 - 0 - - - - SD Structure path - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + - 200 + 16777215 16777215 @@ -860,7 +547,164 @@ Mode 4:
- + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + 0 + + + + R E T A + + + + + R E A T + + + + + R T E A + + + + + R T A E + + + + + R A E T + + + + + R A T E + + + + + E R T A + + + + + E R A T + + + + + E T R A + + + + + E T A R + + + + + E A R T + + + + + E A T R + + + + + T R E A + + + + + T R A E + + + + + T E R A + + + + + T E A R + + + + + T A R E + + + + + T A E R + + + + + A R E T + + + + + A R T E + + + + + A E R T + + + + + A E T R + + + + + A T R E + + + + + A T E R + + + + + + + + Qt::Horizontal + + + + @@ -873,13 +717,26 @@ Mode 4: - - + + - Select Image + Settings Profile + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -893,53 +750,186 @@ Mode 4: - + + + + + 0 + 0 + + + + Channel Order + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + Append version number to FW file name - - + + + + + 0 + 0 + + - Settings Profile Name + SD Structure path + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + + + true + + + + 350 + 0 + + + + true + + + + + + + Select Image + + + + + + + + 0 + 0 + + + + + 128 + 64 + + + + + 128 + 64 + + + + QFrame::Panel + + + QFrame::Raised + + + + + + true + + + + + - Qt::Vertical + Qt::Horizontal - 20 - 40 + 40 + 20 - - - - - 50 - 16777215 - - - - 1 - - - 10 + + + + Offer to write FW to Tx after download - - + + - Profile Index + Remove Profile + + + + + + + Clear Image + + + + + + + Open Folder + + + + + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + + + + + true + + + + 0 + 0 + + + + true + + + + + + + false + + + + 30 + 16777215 + @@ -973,18 +963,12 @@ Mode 4: joystickCB joystickChkB joystickcalButton - ProfName_LE - ProfSlot_SB sdPath - sdPathButton SplashFileName - SplashSelect - clearImageButton stickmodeCB channelorderCB renameFirmware burnFirmware - removeProfileButton diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 3864b9f41..6a3806b21 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -734,7 +734,7 @@ GeneralSettings::GeneralSettings() QSettings settings; templateSetup = settings.value("default_channel_order", 0).toInt(); stickMode = settings.value("default_mode", 1).toInt(); - int profile_id = settings.value("ActiveProfile", 0).toInt(); + int profile_id = settings.value("profileId", 0).toInt(); if (profile_id>0) { settings.beginGroup("Profiles"); QString profile=QString("profile%1").arg(profile_id); diff --git a/companion/src/fwpreferencesdialog.cpp b/companion/src/fwpreferencesdialog.cpp index 832262ef2..735e18acc 100644 --- a/companion/src/fwpreferencesdialog.cpp +++ b/companion/src/fwpreferencesdialog.cpp @@ -218,9 +218,6 @@ void fwPreferencesDialog::writeValues() settings.setValue("cpu_id", ui->CPU_ID_LE->text()); current_firmware_variant = getFirmwareVariant(); settings.setValue("firmware", current_firmware_variant.id); - - MainWindow * mw = (MainWindow *)this->parent(); - mw->unloadProfile(); } void fwPreferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 35fce6fff..f43b7f2c1 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -124,12 +124,6 @@ MainWindow::MainWindow(): updateMenus(); readSettings(); - FirmwareInfo *firmware = GetCurrentFirmware(); - if (ActiveProfile) { - setWindowTitle(tr("Companion - Models and Settings Editor - %1 - profile %2").arg(firmware->name).arg(ActiveProfileName)); - } else { - setWindowTitle(tr("Companion - Models and Settings Editor - %1").arg(firmware->name)); - } setUnifiedTitleAndToolBarOnMac(true); this->setWindowIcon(QIcon(":/icon.png")); this->setIconSize(QSize(32,32)); @@ -758,11 +752,10 @@ void MainWindow::loadProfile() if (action) { int profnum=action->data().toInt(); QSettings settings; - settings.setValue("ActiveProfile",profnum); + settings.setValue("profileId",profnum); settings.beginGroup("Profiles"); QString profile=QString("profile%1").arg(profnum); settings.beginGroup(profile); - ActiveProfile=profnum; ActiveProfileName=settings.value("Name", "").toString(); chord=settings.value("default_channel_order", 0).toInt(); defmod=settings.value("default_mode", 0).toInt(); @@ -785,46 +778,15 @@ void MainWindow::loadProfile() settings.setValue("SplashFileName", SplashFileName); settings.setValue("SplashImage", SplashImage); settings.setValue("firmware", firmware_id); - settings.setValue("profileId", profnum); current_firmware_variant = GetFirmwareVariant(firmware_id); - FirmwareInfo *firmware = GetCurrentFirmware(); - setWindowTitle(tr("Companion - Models and Settings Editor - %1").arg(firmware->name)); - // settings.setValue("lastDir", QFileInfo(fileName).dir().absolutePath()); + foreach (QMdiSubWindow *window, mdiArea->subWindowList()) { MdiChild *mdiChild = qobject_cast(window->widget()); mdiChild->eepromInterfaceChanged(); } - setWindowTitle(tr("Companion - Models and Settings Editor - %1 - profile %2").arg(firmware->name).arg(ActiveProfileName)); - } -} -void MainWindow::unloadProfile() -{ - ActiveProfile=0; - ActiveProfileName=""; - QSettings settings; - settings.setValue("ActiveProfile", 0); - FirmwareInfo *firmware = GetCurrentFirmware(); - setWindowTitle(tr("Companion - Models and Settings Editor - %1").arg(firmware->name)); -} - -void MainWindow::preferences() -{ - preferencesDialog *pd = new preferencesDialog(this); - pd->exec(); - FirmwareInfo *firmware = GetCurrentFirmware(); - if (ActiveProfile) { - setWindowTitle(tr("Companion - Models and Settings Editor - %1 - profile %2").arg(firmware->name).arg(ActiveProfileName)); + updateMenus(); } - else { - setWindowTitle(tr("Companion - Models and Settings Editor - %1").arg(firmware->name)); - } - - foreach (QMdiSubWindow *window, mdiArea->subWindowList()) { - MdiChild *mdiChild = qobject_cast(window->widget()); - mdiChild->eepromInterfaceChanged(); - } - updateMenus(); } void MainWindow::appPreferences() @@ -838,14 +800,6 @@ void MainWindow::fwPreferences() { fwPreferencesDialog *pd = new fwPreferencesDialog(this); pd->exec(); - FirmwareInfo *firmware = GetCurrentFirmware(); - if (ActiveProfile) { - setWindowTitle(tr("Companion - Models and Settings Editor - %1 - profile %2").arg(firmware->name).arg(ActiveProfileName)); - } - else { - setWindowTitle(tr("Companion - Models and Settings Editor - %1").arg(firmware->name)); - } - foreach (QMdiSubWindow *window, mdiArea->subWindowList()) { MdiChild *mdiChild = qobject_cast(window->widget()); mdiChild->eepromInterfaceChanged(); @@ -1640,19 +1594,9 @@ void MainWindow::updateMenus() compareAct->setEnabled(activeMdiChild()); updateRecentFileActions(); updateProfilesActions(); - bool notfound=true; + QSettings settings; - settings.beginGroup("Profiles"); - for (int i=0; isetDisabled(notfound); + setWindowTitle(tr("OpenTX Companion - FW: %1 - Profile: %2").arg(GetCurrentFirmware()->name).arg(settings.value("profileId").toString())); } MdiChild *MainWindow::createMdiChild() @@ -2015,8 +1959,12 @@ QMenu *MainWindow::createRecentFileMenu() QMenu *MainWindow::createProfilesMenu() { QMenu *profilesMenu=new QMenu(tr("Radio Settings Profiles")); - for ( int i = 0; i < MAX_PROFILES; ++i) + int i; + for ( i = 0; i < MAX_PROFILES; ++i) { profilesMenu->addAction(profileActs[i]); + } + if ( i>0 ) + profilesMenu->addSeparator(); profilesMenu->addAction(createProfileAct); profilesMenu->setIcon(CompanionIcon("profiles.png")); return profilesMenu; @@ -2034,11 +1982,14 @@ void MainWindow::createToolBars() case 1: size=QSize(24,24); break; + case 2: + size=QSize(32,32); + break; case 3: size=QSize(48,48); break; default: - size=QSize(32,32); + size=QSize(24,24); break; } fileToolBar = addToolBar(tr("File")); @@ -2046,11 +1997,11 @@ void MainWindow::createToolBars() fileToolBar->setObjectName("File"); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); - QToolButton * recentToolButton = new QToolButton; - recentToolButton->setPopupMode(QToolButton::InstantPopup); - recentToolButton->setMenu(createRecentFileMenu()); - recentToolButton->setIcon(CompanionIcon("recentdocument.png")); - recentToolButton->setToolTip(tr("Recent Files")); + QToolButton * recentToolButton = new QToolButton; + recentToolButton->setPopupMode(QToolButton::InstantPopup); + recentToolButton->setMenu(createRecentFileMenu()); + recentToolButton->setIcon(CompanionIcon("recentdocument.png")); + recentToolButton->setToolTip(tr("Recent Files")); fileToolBar->addWidget(recentToolButton); fileToolBar->addAction(saveAct); fileToolBar->addAction(logsAct); @@ -2058,24 +2009,12 @@ void MainWindow::createToolBars() fileToolBar->addAction(appPreferencesAct); fileToolBar->addAction(fwPreferencesAct); fileToolBar->addAction(customizeSplashAct); - profileButton = new QToolButton; - profileButton->setPopupMode(QToolButton::InstantPopup); - profileButton->setMenu(createProfilesMenu()); - profileButton->setIcon(CompanionIcon("profiles.png")); - profileButton->setToolTip(tr("Firmware Profiles")); + profileButton = new QToolButton; + profileButton->setPopupMode(QToolButton::InstantPopup); + profileButton->setMenu(createProfilesMenu()); + profileButton->setIcon(CompanionIcon("profiles.png")); + profileButton->setToolTip(tr("Firmware Profiles")); fileToolBar->addWidget(profileButton); - bool notfound=true; - settings.beginGroup("Profiles"); - for (int i=0; isetDisabled(notfound); fileToolBar->addSeparator(); fileToolBar->addAction(simulateAct); fileToolBar->addAction(printAct); @@ -2087,7 +2026,6 @@ void MainWindow::createToolBars() editToolBar->addAction(cutAct); editToolBar->addAction(copyAct); editToolBar->addAction(pasteAct); - burnToolBar = new QToolBar(tr("Write")); addToolBar( Qt::LeftToolBarArea, burnToolBar ); @@ -2123,15 +2061,18 @@ void MainWindow::readSettings() checkCompanion9x = settings.value("startup_check_companion", true).toBool(); checkFW = settings.value("startup_check_fw", true).toBool(); MaxRecentFiles =settings.value("history_size",10).toInt(); - ActiveProfile=settings.value("activeprofile",0).toInt(); - if (ActiveProfile) { - settings.beginGroup("Profiles"); - QString profile=QString("profile%1").arg(ActiveProfile); - settings.beginGroup(profile); - ActiveProfileName=settings.value("Name","").toString(); - settings.endGroup(); - settings.endGroup(); + if (settings.value("profileId",0).toInt() == 0) + { + createProfile(); + settings.setValue("profileId", "1"); } + int activeProfile=settings.value("profileId",0).toInt(); + settings.beginGroup("Profiles"); + QString profile=QString("profile%1").arg(activeProfile); + settings.beginGroup(profile); + ActiveProfileName=settings.value("Name","").toString(); + settings.endGroup(); + settings.endGroup(); } MdiChild *MainWindow::activeMdiChild() @@ -2184,6 +2125,8 @@ void MainWindow::updateProfilesActions() { int i; QSettings settings; + int activeProfile = settings.value("profileId").toInt(); + settings.beginGroup("Profiles"); for (i=0; isetText(text); profileActs[i]->setData(i+1); profileActs[i]->setVisible(true); + if ((i+1) == activeProfile) + profileActs[i]->setIcon(CompanionIcon("arrow-right.png")); + else + profileActs[i]->setIcon(CompanionIcon("")); + } else { profileActs[i]->setVisible(false); } diff --git a/companion/src/mainwindow.h b/companion/src/mainwindow.h index e3e082b90..e5b7eecce 100644 --- a/companion/src/mainwindow.h +++ b/companion/src/mainwindow.h @@ -63,7 +63,6 @@ QT_END_NAMESPACE class MainWindow : public QMainWindow { - friend class preferencesDialog; friend class fwPreferencesDialog; friend class MdiChild; // TODO GetAvrdudeArgs could be external to this class @@ -80,7 +79,6 @@ protected: public slots: void downloadLatestFW(FirmwareInfo *firmware, const QString & firmwareId); - void unloadProfile(); private slots: void openDocumentURL(); @@ -146,7 +144,6 @@ private slots: void compare(); void print(); void loadBackup(); - void preferences(); void appPreferences(); void fwPreferences(); void updateMenus(); @@ -200,7 +197,7 @@ private: bool needRename; bool showcheckForUpdatesResult; int MaxRecentFiles; - int ActiveProfile; +// int ActiveProfile; int currentFWrev; int currentFWrev_temp; int NewFwRev;