#include "SeerRegisterProfileDialog.h" #include "SeerRegisterTreeWidgetItem.h" #include #include #include #include #include #include #include SeerRegisterProfileDialog::SeerRegisterProfileDialog (QWidget* parent) : QDialog(parent) { // Set up the UI. setupUi(this); registersTreeWidget->setSortingEnabled(true); // We can sort on columns. registersTreeWidget->sortByColumn(0, Qt::AscendingOrder); registersTreeWidget->resizeColumnToContents(0); // index registersTreeWidget->resizeColumnToContents(1); // name registersTreeWidget->resizeColumnToContents(2); // checkbox registersTreeWidget->clear(); QRegularExpressionValidator* validator = new QRegularExpressionValidator(QRegularExpression("[a-z0-9\\.\\-\\_]+")); profileNameLineEdit->setValidator(validator); // Setup the widgets setRegisters(QStringList(), QVector()); // Connect things. QObject::connect(enablePushButton, &QPushButton::clicked, this, &SeerRegisterProfileDialog::handleEnableSelected); QObject::connect(disablePushButton, &QPushButton::clicked, this, &SeerRegisterProfileDialog::handleDisableSelected); QObject::connect(importPushButton, &QPushButton::clicked, this, &SeerRegisterProfileDialog::handleImportFile); QObject::connect(exportPushButton, &QPushButton::clicked, this, &SeerRegisterProfileDialog::handleExportFile); // Restore window settings. readSettings(); } SeerRegisterProfileDialog::~SeerRegisterProfileDialog () { } void SeerRegisterProfileDialog::setRegisters (const QStringList& registerNames, const QVector& registerEnabled) { registersTreeWidget->clear(); for (int i=0; isetText(0, QString::number(i)); topItem->setText(1, registerNames[i]); if (registerEnabled[i] == true) { topItem->setCheckState(2, Qt::Checked); }else{ topItem->setCheckState(2, Qt::Unchecked); } registersTreeWidget->addTopLevelItem(topItem); } registersTreeWidget->resizeColumnToContents(0); registersTreeWidget->resizeColumnToContents(1); registersTreeWidget->resizeColumnToContents(2); } QStringList SeerRegisterProfileDialog::registerNames () const { QStringList registerNames; for (int i=0; itopLevelItemCount(); i++) { QTreeWidgetItem* topItem = registersTreeWidget->topLevelItem(i); registerNames.push_back(topItem->text(1)); } return registerNames; } QVector SeerRegisterProfileDialog::registerEnabled () const { QVector registerEnabled; for (int i=0; itopLevelItemCount(); i++) { QTreeWidgetItem* topItem = registersTreeWidget->topLevelItem(i); if (topItem->checkState(2) == Qt::Checked) { registerEnabled.push_back(true); }else{ registerEnabled.push_back(false); } } return registerEnabled; } void SeerRegisterProfileDialog::setProfileName (const QString& profileName) { profileNameLineEdit->setText(profileName); } QString SeerRegisterProfileDialog::profileName () const { return profileNameLineEdit->text(); } void SeerRegisterProfileDialog::accept () { if (profileNameLineEdit->text() == "") { QMessageBox::warning(this, "Seer", "The register profile name is blank.", QMessageBox::Ok); 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(); } void SeerRegisterProfileDialog::handleEnableSelected () { QList selected = registersTreeWidget->selectedItems(); foreach (QTreeWidgetItem* item, selected) { item->setCheckState(2, Qt::Checked); } } void SeerRegisterProfileDialog::handleDisableSelected () { QList selected = registersTreeWidget->selectedItems(); foreach (QTreeWidgetItem* item, selected) { item->setCheckState(2, Qt::Unchecked); } } void SeerRegisterProfileDialog::handleImportFile () { // // Get the name of the file to import. // QFileDialog dialog(this, "Seer Register Profile File", "./", "Text files (*.txt);;All files (*.*)"); dialog.setAcceptMode(QFileDialog::AcceptOpen); dialog.setFileMode(QFileDialog::AnyFile); dialog.setDefaultSuffix("txt"); dialog.selectFile("registerprofile.txt"); if (dialog.exec() != QDialog::Accepted) { return; } QStringList files = dialog.selectedFiles(); if (files.size() == 0) { return; } if (files.size() > 1) { QMessageBox::critical(this, tr("Error"), tr("Select only 1 file.")); return; } // // Open the file and read from it. // A simple format of: // // QFile file(files[0]); if (file.open(QIODevice::ReadOnly)) { QStringList registerNames; QVector registerEnabled; QTextStream stream(&file); while (stream.atEnd() == false) { QString line = stream.readLine(); QStringList words = line.split(QRegularExpression("\\s+")); // Ignore empty lines. if (words.count() == 0) { continue; } // Ignore null lines. if (words.count() == 1 && words[0] == "") { continue; } // There should be only two words on each line. if (words.count() != 2) { QMessageBox::critical(this, tr("Error"), tr("Can't load register profile file.\nEncountered a line not the form of:\n\n ")); return; } // The second word must be 'enabled' or 'disabled'. if (words[1] != "enabled" && words[1] != "disabled") { QMessageBox::critical(this, tr("Error"), tr("Can't load register profile file.\nEncountered a line not the form of:\n\n ")); return; } registerNames.push_back(words[0]); registerEnabled.push_back(words[1] == "enabled" ? true : false); } // Populate the list with the imported values. setRegisters (registerNames, registerEnabled); QMessageBox::information(this, "Seer", "Loaded."); }else{ QMessageBox::critical(this, tr("Error"), tr("Can't open register profile file.")); return; } } void SeerRegisterProfileDialog::handleExportFile () { // // Get the name of the file to export. // QFileDialog dialog(this, "Seer Register Profile File", "./", "Text files (*.txt);;All files (*.*)"); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setFileMode(QFileDialog::AnyFile); dialog.setDefaultSuffix("txt"); dialog.selectFile("registerprofile.txt"); if (dialog.exec() != QDialog::Accepted) { return; } QStringList files = dialog.selectedFiles(); if (files.size() == 0) { return; } if (files.size() > 1) { QMessageBox::critical(this, tr("Error"), tr("Select only 1 file.")); return; } // // Create the file and write to it. // A simple format of: // // QFile file(files[0]); if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); QStringList names = registerNames(); QVector enabled = registerEnabled(); for (int i=0; i