mirror of
https://github.com/epasveer/seer.git
synced 2026-08-29 16:40:42 +08:00
More work on register profiles.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user