More work on register profiles.

This commit is contained in:
Ernie Pasveer
2023-12-24 11:09:00 -06:00
parent 313eef1ed4
commit 217145a310
6 changed files with 181 additions and 14 deletions
+21
View File
@@ -1,6 +1,8 @@
#include "SeerRegisterProfileDialog.h"
#include "SeerRegisterTreeWidgetItem.h"
#include <QtWidgets/QMessageBox>
#include <QtGui/QRegularExpressionValidator>
#include <QtCore/QRegularExpression>
#include <QtCore/QSettings>
#include <QtCore/QList>
#include <QtCore/QDebug>
@@ -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<bool>());
@@ -87,6 +93,16 @@ QVector<bool> 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();
}
+3
View File
@@ -18,6 +18,9 @@ class SeerRegisterProfileDialog : public QDialog, protected Ui::SeerRegisterProf
QStringList registerNames () const;
QVector<bool> registerEnabled () const;
void setProfileName (const QString& profileName);
QString profileName () const;
public slots:
void accept ();
+18
View File
@@ -51,13 +51,22 @@
<layout class="QVBoxLayout" name="verticalLayout_1">
<item>
<widget class="QLineEdit" name="profileNameLineEdit">
<property name="toolTip">
<string>Profile name (lowercase letters and numbers).</string>
</property>
<property name="placeholderText">
<string>Profile name</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="enablePushButton">
<property name="toolTip">
<string>Enable selected items.</string>
</property>
<property name="text">
<string>Enable Selected</string>
</property>
@@ -65,6 +74,9 @@
</item>
<item>
<widget class="QPushButton" name="disablePushButton">
<property name="toolTip">
<string>Disable selected items.</string>
</property>
<property name="text">
<string>Disable Selected</string>
</property>
@@ -92,6 +104,9 @@
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="importPushButton">
<property name="toolTip">
<string>Import items from a file.</string>
</property>
<property name="text">
<string>Import</string>
</property>
@@ -99,6 +114,9 @@
</item>
<item>
<widget class="QPushButton" name="exportPushButton">
<property name="toolTip">
<string>Export items to a file.</string>
</property>
<property name="text">
<string>Export</string>
</property>
+126 -11
View File
@@ -13,6 +13,7 @@
#include <QtGui/QClipboard>
#include <QtCore/QSettings>
#include <QtCore/QVector>
#include <QtCore/QByteArray>
#include <QtCore/QDebug>
@@ -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<int>::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<bool>& 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; i<registersTreeWidget->topLevelItemCount(); 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<registerNames.count(); i++) {
for (int i=0; i<_registerNames.count(); i++) {
if (registerEnabled[i] == false) {
if (_registerEnabled[i] == false) {
continue;
}
QString registerName = registerNames[i];
QString registerName = _registerNames[i];
QList<QTreeWidgetItem*> 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<bool> 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; i<registerProfileComboBox->count(); 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<bool>& registerEnabled) {
QSettings settings;
QStringList registerEnabledFlags;
for (int i=0; i<registerEnabled.count(); i++) {
registerEnabledFlags.append(registerEnabled[i] == true ? "T" : "F");
}
settings.beginGroup("registerprofile_" + profileName); {
settings.setValue("registernames", registerNames);
settings.setValue("registerenabled", registerEnabledFlags);
} settings.endGroup();
}
bool SeerRegisterValuesBrowserWidget::readProfileSettings (const QString& profileName, QStringList& registerNames, QVector<bool>& 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<registerEnabledFlags.count(); i++) {
registerEnabled.append(registerEnabledFlags[i] == "T" ? true : false);
}
} settings.endGroup();
return true;
}
void SeerRegisterValuesBrowserWidget::showEvent (QShowEvent* event) {
QWidget::showEvent(event);
+8 -1
View File
@@ -4,6 +4,8 @@
#include <QtWidgets/QWidget>
#include <QtWidgets/QMenu>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVector>
#include <QtCore/QDebug>
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<bool>& 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<bool>& registerEnabled);
void writeProfileSettings (const QString& profileName, const QStringList& registerNames, const QVector<bool>& registerEnabled);
private:
bool _needsRegisterNames;
QStringList _registerNames;
QVector<bool> _registerEnabled;
QAction* _newProfileAction;
QAction* _deleteProfileAction;
+5 -2
View File
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>794</width>
<width>733</width>
<height>528</height>
</rect>
</property>
@@ -47,13 +47,16 @@
<widget class="QComboBox" name="registerProfileComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<horstretch>50</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Register Profile Selection.</string>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContentsOnFirstShow</enum>
</property>
</widget>
</item>
<item>