From 217145a310ad05f4c3baabeca8d3c145ff1cd00e Mon Sep 17 00:00:00 2001 From: Ernie Pasveer Date: Sun, 24 Dec 2023 11:09:00 -0600 Subject: [PATCH] More work on register profiles. --- src/SeerRegisterProfileDialog.cpp | 21 ++++ src/SeerRegisterProfileDialog.h | 3 + src/SeerRegisterProfileDialog.ui | 18 ++++ src/SeerRegisterValuesBrowserWidget.cpp | 137 ++++++++++++++++++++++-- src/SeerRegisterValuesBrowserWidget.h | 9 +- src/SeerRegisterValuesBrowserWidget.ui | 7 +- 6 files changed, 181 insertions(+), 14 deletions(-) diff --git a/src/SeerRegisterProfileDialog.cpp b/src/SeerRegisterProfileDialog.cpp index 2ea9cde..45320b3 100644 --- a/src/SeerRegisterProfileDialog.cpp +++ b/src/SeerRegisterProfileDialog.cpp @@ -1,6 +1,8 @@ #include "SeerRegisterProfileDialog.h" #include "SeerRegisterTreeWidgetItem.h" #include +#include +#include #include #include #include @@ -17,6 +19,10 @@ SeerRegisterProfileDialog::SeerRegisterProfileDialog (QWidget* parent) : QDialog registersTreeWidget->resizeColumnToContents(2); // checkbox registersTreeWidget->clear(); + QRegularExpressionValidator* validator = new QRegularExpressionValidator(QRegularExpression("[a-z0-9]+")); + + profileNameLineEdit->setValidator(validator); + // Setup the widgets setRegisters(QStringList(), QVector()); @@ -87,6 +93,16 @@ QVector SeerRegisterProfileDialog::registerEnabled () const { return registerEnabled; } +void SeerRegisterProfileDialog::setProfileName (const QString& profileName) { + + profileNameLineEdit->setText(profileName); +} + +QString SeerRegisterProfileDialog::profileName () const { + + return profileNameLineEdit->text(); +} + void SeerRegisterProfileDialog::accept () { if (profileNameLineEdit->text() == "") { @@ -94,6 +110,11 @@ void SeerRegisterProfileDialog::accept () { return; } + if (profileNameLineEdit->text() == "allregisters") { + QMessageBox::warning(this, "Seer", "The register profile name of 'allregisters' is reserved.\n\nChoose a different name.", QMessageBox::Ok); + return; + } + QDialog::accept(); } diff --git a/src/SeerRegisterProfileDialog.h b/src/SeerRegisterProfileDialog.h index 23db347..bdf21eb 100644 --- a/src/SeerRegisterProfileDialog.h +++ b/src/SeerRegisterProfileDialog.h @@ -18,6 +18,9 @@ class SeerRegisterProfileDialog : public QDialog, protected Ui::SeerRegisterProf QStringList registerNames () const; QVector registerEnabled () const; + void setProfileName (const QString& profileName); + QString profileName () const; + public slots: void accept (); diff --git a/src/SeerRegisterProfileDialog.ui b/src/SeerRegisterProfileDialog.ui index 2eeefec..578cd00 100644 --- a/src/SeerRegisterProfileDialog.ui +++ b/src/SeerRegisterProfileDialog.ui @@ -51,13 +51,22 @@ + + Profile name (lowercase letters and numbers). + Profile name + + true + + + Enable selected items. + Enable Selected @@ -65,6 +74,9 @@ + + Disable selected items. + Disable Selected @@ -92,6 +104,9 @@ + + Import items from a file. + Import @@ -99,6 +114,9 @@ + + Export items to a file. + Export diff --git a/src/SeerRegisterValuesBrowserWidget.cpp b/src/SeerRegisterValuesBrowserWidget.cpp index 847df56..15c3890 100644 --- a/src/SeerRegisterValuesBrowserWidget.cpp +++ b/src/SeerRegisterValuesBrowserWidget.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -43,6 +44,8 @@ SeerRegisterValuesBrowserWidget::SeerRegisterValuesBrowserWidget (QWidget* paren registerFormatComboBox->addItem("Decimal", QVariant("d")); registerFormatComboBox->addItem("Raw", QVariant("r")); + registerProfileComboBox->addItem("allregisters"); + _needsRegisterNames = true; // Create edit delegate. @@ -71,6 +74,7 @@ SeerRegisterValuesBrowserWidget::SeerRegisterValuesBrowserWidget (QWidget* paren QObject::connect(registersTreeWidget->header(), &QHeaderView::sectionClicked, this, &SeerRegisterValuesBrowserWidget::handleColumnSelected); QObject::connect(_newProfileAction, &QAction::triggered, this, &SeerRegisterValuesBrowserWidget::handleNewProfile); QObject::connect(_deleteProfileAction, &QAction::triggered, this, &SeerRegisterValuesBrowserWidget::handleDeleteProfile); + QObject::connect(registerProfileComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &SeerRegisterValuesBrowserWidget::handleProfileChanged); // Restore settings. readSettings(); @@ -131,6 +135,8 @@ void SeerRegisterValuesBrowserWidget::handleText (const QString& text) { i++; } + handleShowHideRegisters(); + _needsRegisterNames = false; }else if (text.startsWith("^done,register-values=[") && text.endsWith("]")) { @@ -414,10 +420,26 @@ void SeerRegisterValuesBrowserWidget::handleNewProfile () { if (dlg.exec()) { + QString profileName = dlg.profileName(); + + if (profileName == "") { + return; + } + registerNames = dlg.registerNames(); registerEnabled = dlg.registerEnabled(); - handleShowHideRegisters(registerNames, registerEnabled); + registerProfileComboBox->addItem(profileName); + registerProfileComboBox->setCurrentText(profileName); + + writeProfileSettings(profileName, registerNames, registerEnabled); + writeSettings(); + + // Use them. + _registerNames = registerNames; + _registerEnabled = registerEnabled; + + handleShowHideRegisters(); } } @@ -426,16 +448,17 @@ void SeerRegisterValuesBrowserWidget::handleDeleteProfile () { QMessageBox::warning(this, "Seer", "There are no profiles to delete.", QMessageBox::Ok); } -void SeerRegisterValuesBrowserWidget::handleShowHideRegisters (const QStringList& registerNames, QVector& registerEnabled) { +void SeerRegisterValuesBrowserWidget::handleShowHideRegisters () { // If the list is empty, show all. - if (registerNames.count() == 0 || registerEnabled.count() == 0) { + if (_registerNames.count() == 0 || _registerEnabled.count() == 0) { for (int i=0; itopLevelItemCount(); i++) { QTreeWidgetItem* topItem = registersTreeWidget->topLevelItem(i); topItem->setHidden(false); } + return; } @@ -446,13 +469,13 @@ void SeerRegisterValuesBrowserWidget::handleShowHideRegisters (const QStringList topItem->setHidden(true); } - for (int i=0; i matches = registersTreeWidget->findItems(registerName, Qt::MatchExactly, 1); @@ -462,30 +485,122 @@ void SeerRegisterValuesBrowserWidget::handleShowHideRegisters (const QStringList } } +void SeerRegisterValuesBrowserWidget::handleProfileChanged (int index) { + + // Get the profile. + QString profileName = registerProfileComboBox->itemText(index); + + // Build a list of registers. + QStringList registerNames; + QVector registerEnabled; + + bool f = readProfileSettings(profileName, registerNames, registerEnabled); + + if (f == false) { + return; + } + + // Use them. + _registerNames = registerNames; + _registerEnabled = registerEnabled; + + handleShowHideRegisters(); + writeSettings(); +} + void SeerRegisterValuesBrowserWidget::writeSettings () { QSettings settings; - settings.beginGroup("registerswindow"); { - settings.setValue("sortcolumn", registersTreeWidget->header()->sortIndicatorSection()); - settings.setValue("sortorder", registersTreeWidget->header()->sortIndicatorOrder()); - }settings.endGroup(); + QStringList registerprofiles; + + for (int i=0; icount(); i++) { + if (registerProfileComboBox->itemText(i) == "allregisters") { + continue; + } + registerprofiles.push_back(registerProfileComboBox->itemText(i)); + } + + settings.beginGroup("registerwindow"); { + settings.setValue("sortcolumn", registersTreeWidget->header()->sortIndicatorSection()); + settings.setValue("sortorder", registersTreeWidget->header()->sortIndicatorOrder()); + settings.setValue("registerprofile", registerProfileComboBox->currentText()); + settings.setValue("registerprofiles", registerprofiles); + } settings.endGroup(); } void SeerRegisterValuesBrowserWidget::readSettings () { QSettings settings; - settings.beginGroup("registerswindow"); { + settings.beginGroup("registerwindow"); { int column = settings.value("sortcolumn", 0).toInt(); int order = settings.value("sortorder", Qt::AscendingOrder).toInt(); registersTreeWidget->header()->setSortIndicator(column, (Qt::SortOrder)order); + QString registerProfileName = settings.value("registerprofile").toString(); + QStringList registerProfiles = settings.value("registerprofiles").toStringList(); + + registerProfileComboBox->addItems(registerProfiles); + registerProfileComboBox->setCurrentText(registerProfileName); + } settings.endGroup(); } +void SeerRegisterValuesBrowserWidget::writeProfileSettings (const QString& profileName, const QStringList& registerNames, const QVector& registerEnabled) { + + QSettings settings; + QStringList registerEnabledFlags; + + for (int i=0; i& registerEnabled) { + + if (profileName == "" || profileName == "allregisters") { + + registerNames.resize(0); + registerEnabled.resize(0); + + return true; + } + + QSettings settings; + + settings.beginGroup("registerprofile_" + profileName); { + + QVariant registerNamesVariant = settings.value("registernames"); + QVariant registerEnabledVariant = settings.value("registerenabled"); + QStringList registerEnabledFlags; + + // Not found? Return with error. + if (registerNamesVariant == QVariant() || registerEnabledVariant == QVariant()) { + return false; + } + + // Okay, we found it. Populate the containters. + registerNames = registerNamesVariant.toStringList(); + registerEnabledFlags = registerEnabledVariant.toStringList(); + + registerEnabled.resize(0); + for (int i=0; i #include #include +#include +#include #include class SeerRegisterValuesBrowserWidget : public QWidget, protected Ui::SeerRegisterValuesBrowserWidgetForm { @@ -30,7 +32,8 @@ class SeerRegisterValuesBrowserWidget : public QWidget, protected Ui::SeerRegist void handleColumnSelected (int logicalIndex); void handleNewProfile (); void handleDeleteProfile (); - void handleShowHideRegisters (const QStringList& registerNames, QVector& registerEnabled); + void handleShowHideRegisters (); + void handleProfileChanged (int index); signals: void refreshRegisterNames (); @@ -41,9 +44,13 @@ class SeerRegisterValuesBrowserWidget : public QWidget, protected Ui::SeerRegist void showEvent (QShowEvent* event); void readSettings (); void writeSettings (); + bool readProfileSettings (const QString& profileName, QStringList& registerNames, QVector& registerEnabled); + void writeProfileSettings (const QString& profileName, const QStringList& registerNames, const QVector& registerEnabled); private: bool _needsRegisterNames; + QStringList _registerNames; + QVector _registerEnabled; QAction* _newProfileAction; QAction* _deleteProfileAction; diff --git a/src/SeerRegisterValuesBrowserWidget.ui b/src/SeerRegisterValuesBrowserWidget.ui index 5beebeb..9e2d71f 100644 --- a/src/SeerRegisterValuesBrowserWidget.ui +++ b/src/SeerRegisterValuesBrowserWidget.ui @@ -6,7 +6,7 @@ 0 0 - 794 + 733 528 @@ -47,13 +47,16 @@ - 0 + 50 0 Register Profile Selection. + + QComboBox::AdjustToContentsOnFirstShow +