From bd226279b5769a73887bdedc8d622a2ee515ebe5 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Sat, 2 Apr 2022 13:46:11 +0200 Subject: [PATCH] edit Shortcut in manager directly --- include/buttonmanageritems.h | 1 + include/keysequencevalidator.h | 11 +++++++++++ soundboard.pro | 2 ++ src/buttonmanager.cpp | 26 +++++++++++++++++--------- src/buttonmanageritems.cpp | 34 ++++++++++++++++++++++++++-------- src/editbutton.cpp | 15 ++------------- src/keysequencevalidator.cpp | 11 +++++++++++ 7 files changed, 70 insertions(+), 30 deletions(-) create mode 100644 include/keysequencevalidator.h create mode 100644 src/keysequencevalidator.cpp diff --git a/include/buttonmanageritems.h b/include/buttonmanageritems.h index 5abe98a..93e135b 100644 --- a/include/buttonmanageritems.h +++ b/include/buttonmanageritems.h @@ -91,6 +91,7 @@ public: // triggered from the view when the name was changed void nameWasChanged(); + void keyWasChanged(); Config::ButtonConfig& getConfig(); private: diff --git a/include/keysequencevalidator.h b/include/keysequencevalidator.h new file mode 100644 index 0000000..098953b --- /dev/null +++ b/include/keysequencevalidator.h @@ -0,0 +1,11 @@ +#pragma once + +#include + +class KeysequenceValidator : public QValidator { +public: + explicit KeysequenceValidator(QObject * parent = nullptr); + ~KeysequenceValidator(); + + virtual State validate(QString& str, [[maybe_unused]] int& pos) const override; +}; diff --git a/soundboard.pro b/soundboard.pro index ffc5f4b..86d5101 100644 --- a/soundboard.pro +++ b/soundboard.pro @@ -32,6 +32,7 @@ SOURCES += \ src/buttonmanager.cpp \ src/buttonmanageritems.cpp \ src/addnewwhat.cpp \ + src/keysequencevalidator.cpp \ Log/Log.cpp HEADERS += \ @@ -47,6 +48,7 @@ HEADERS += \ include/buttonmanager.h \ include/buttonmanageritems.h \ include/addnewwhat.h \ + include/keysequencevalidator.h \ miniaudio/miniaudio.h \ Log/Log.h diff --git a/src/buttonmanager.cpp b/src/buttonmanager.cpp index 367504e..ea6510c 100644 --- a/src/buttonmanager.cpp +++ b/src/buttonmanager.cpp @@ -16,12 +16,14 @@ ButtonManager::ButtonManager(Config& conf, MainWindow* parent) : QDialog(parent) loadConfig(); QStringList labels; - labels.push_back("Row"); - labels.push_back("Button"); - labels.push_back("Sample"); - labels.push_back("File"); + labels.push_back("Name"); + labels.push_back("Samples"); + labels.push_back("Shortcut"); ui->buttonTreeWidget->setHeaderLabels(labels); + ui->buttonTreeWidget->setColumnWidth(0, 420); + ui->buttonTreeWidget->header()->setStretchLastSection(false); + ui->buttonTreeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents); QShortcut* sc = new QShortcut(QKeySequence(QKeySequence::Save), this); @@ -71,7 +73,7 @@ void ButtonManager::addButton() { select(newButton); // start editing - ui->buttonTreeWidget->editItem(newButton, 1); + ui->buttonTreeWidget->editItem(newButton, 0); } else { Log::error << "no row selected"; } @@ -180,12 +182,15 @@ void ButtonManager::itemChanged(QTreeWidgetItem* item, int column) { if(!dynamic_cast(item)) return; if(ButtonItem* button = dynamic_cast(item)) { - if(column != 1) { + if(column == 0) { + // name + button->nameWasChanged(); + } else if(column == 2) { + //shortcut + button->keyWasChanged(); + } else { Log::warn << "column: " << column << " of button was edited"; - return; } - - button->nameWasChanged(); } } @@ -296,6 +301,9 @@ RowItem* ButtonManager::getCurrentRow(bool create, bool onlyIfSelected) { } ButtonItem* ButtonManager::getCurrentButton(bool create) const { + // currently unused + (void) create; + QTreeWidgetItem* selectedItem = getSelectedItem(); if(!selectedItem) { // no item selected diff --git a/src/buttonmanageritems.cpp b/src/buttonmanageritems.cpp index b96711f..833ddde 100644 --- a/src/buttonmanageritems.cpp +++ b/src/buttonmanageritems.cpp @@ -6,6 +6,8 @@ #include "editbutton.h" #include "editsample.h" +#include "keysequencevalidator.h" + ButtonManagerItem::ButtonManagerItem(QTreeWidgetItem* parent, int type, uint8_t pos) : QTreeWidgetItem(parent, type), mparent(parent), pos(pos) { } @@ -184,7 +186,7 @@ uint8_t RowItem::getRow() const { } void RowItem::updatePosition() { - setData(0, Qt::ItemDataRole::DisplayRole, QVariant((int) pos+1)); + setData(0, Qt::ItemDataRole::DisplayRole, QVariant(QString::fromStdString("Row " + std::to_string(pos+1)))); } std::vector& RowItem::getConfig() { @@ -196,7 +198,9 @@ std::vector& RowItem::getConfig() { ButtonItem::ButtonItem(RowItem* parent, uint8_t buttonnr, Config::RootConfig& conf) : ButtonManagerItem(parent, TYPE, buttonnr), conf(conf) { Config::ButtonConfig& btn = getConfig(); - setData(1, Qt::ItemDataRole::DisplayRole, QVariant(QString::fromStdString(btn.name))); + setData(0, Qt::ItemDataRole::DisplayRole, QString::fromStdString(btn.name)); + setData(1, Qt::ItemDataRole::DisplayRole, (int) btn.samples.size()); + setData(2, Qt::ItemDataRole::DisplayRole, QString::fromStdString(btn.key)); setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); // | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled // iterate samples in a button @@ -241,7 +245,7 @@ void ButtonItem::edit() { buttonConf.key = editor.getKey(); buttonConf.width = editor.getWidth(); - setData(1, Qt::ItemDataRole::DisplayRole, QVariant(QString::fromStdString(buttonConf.name))); + setData(0, Qt::ItemDataRole::DisplayRole, QVariant(QString::fromStdString(buttonConf.name))); } void ButtonItem::remove() { @@ -294,10 +298,23 @@ void ButtonItem::moveDown() { } void ButtonItem::nameWasChanged() { - std::string newName = data(1, Qt::ItemDataRole::DisplayRole).toString().toStdString(); + std::string newName = data(0, Qt::ItemDataRole::DisplayRole).toString().toStdString(); getConfig().name = newName; } +void ButtonItem::keyWasChanged() { + QString newShortcut = data(2, Qt::ItemDataRole::DisplayRole).toString(); + KeysequenceValidator validator; + int pos; + Config::ButtonConfig& btn = getConfig(); + if(validator.validate(newShortcut, pos) == QValidator::Acceptable) { + btn.key = newShortcut.toStdString(); + } else { + //reset to old + setData(2, Qt::ItemDataRole::DisplayRole, QString::fromStdString(btn.key)); + } +} + Config::ButtonConfig& ButtonItem::getConfig() { return getParent()->getConfig().at(pos); } @@ -372,8 +389,9 @@ void ButtonItem::moveToRowBelow() { SampleItem::SampleItem(ButtonItem* parent, uint8_t samplenr, Config::RootConfig& conf) : ButtonManagerItem(parent, TYPE, samplenr), conf(conf) { const Config::SampleConfig& sample = getConfig(); updatePosition(); - setText(3, QString::fromStdString(sample.file)); - setToolTip(2, "Doubleclick to play"); + setText(1, QString::fromStdString(sample.file)); + setToolTip(0, "Doubleclick to play"); + setToolTip(1, "Doubleclick to play"); } bool SampleItem::hasEdit() const { @@ -463,7 +481,7 @@ Config::SampleConfig& SampleItem::getConfig() { } void SampleItem::updatePosition() { - setData(2, Qt::ItemDataRole::DisplayRole, QVariant((int) pos+1)); + setData(0, Qt::ItemDataRole::DisplayRole, QVariant((int) pos+1)); } void SampleItem::moveToButtonAbove() { @@ -526,4 +544,4 @@ void SampleItem::moveToButtonBelow() { reenumerateAllSiblings(); expandTree(); -} \ No newline at end of file +} diff --git a/src/editbutton.cpp b/src/editbutton.cpp index 8b679ad..70ca259 100644 --- a/src/editbutton.cpp +++ b/src/editbutton.cpp @@ -2,26 +2,15 @@ #include "ui_editbutton.h" #include +#include "keysequencevalidator.h" #include -class MyKeysequenceValidtor : public QValidator { -public: - explicit MyKeysequenceValidtor(QObject * parent = nullptr) : QValidator(parent) {} - ~MyKeysequenceValidtor() {} - - virtual State validate(QString& str, [[maybe_unused]] int& pos) const override { - QKeySequence seq(str); - return (seq.toString().isEmpty() && !str.isEmpty()) ? State::Intermediate : State::Acceptable; - } -}; - - EditButton::EditButton(QWidget *parent) : QDialog(parent), ui(new Ui::EditButton) { ui->setupUi(this); ui->buttonName->setValidator(new QRegExpValidator(QRegExp("(\\w+ \\w+)|(\\w+)"))); - ui->buttonKey->setValidator(new MyKeysequenceValidtor()); + ui->buttonKey->setValidator(new KeysequenceValidator()); ui->buttonWidth->addItem("1/6", 1); ui->buttonWidth->addItem("1/3", 2); diff --git a/src/keysequencevalidator.cpp b/src/keysequencevalidator.cpp new file mode 100644 index 0000000..c3d0746 --- /dev/null +++ b/src/keysequencevalidator.cpp @@ -0,0 +1,11 @@ +#include "keysequencevalidator.h" + +#include + +KeysequenceValidator::KeysequenceValidator(QObject * parent) : QValidator(parent) {} +KeysequenceValidator::~KeysequenceValidator() {} + +QValidator::State KeysequenceValidator::validate(QString& str, [[maybe_unused]] int& pos) const { + QKeySequence seq(str); + return (seq.toString().isEmpty() && !str.isEmpty()) ? State::Intermediate : State::Acceptable; +}