From 724c1c5872a1cacbd1fab9be31343d3c2536e60a Mon Sep 17 00:00:00 2001 From: mrbesen Date: Wed, 22 Dec 2021 13:39:19 +0100 Subject: [PATCH] editing samples --- include/buttonmanageritems.h | 2 ++ include/editsample.h | 3 +++ src/buttonmanager.cpp | 2 -- src/buttonmanageritems.cpp | 30 ++++++++++++++++++++++++------ src/editsample.cpp | 24 ++++++++++++++++-------- 5 files changed, 45 insertions(+), 16 deletions(-) diff --git a/include/buttonmanageritems.h b/include/buttonmanageritems.h index 3b55f64..d10f28f 100644 --- a/include/buttonmanageritems.h +++ b/include/buttonmanageritems.h @@ -76,8 +76,10 @@ public: const static int TYPE = 1002; + virtual bool hasEdit() const override; virtual bool hasRemove() const override; + virtual void edit() override; virtual void remove() override; Config::SampleConfig& getConfig(); diff --git a/include/editsample.h b/include/editsample.h index 31a5ffa..31d5111 100644 --- a/include/editsample.h +++ b/include/editsample.h @@ -19,6 +19,9 @@ public: uint64_t getStartTime() const; uint64_t getLength() const; + void setStartTime(uint64_t); + void setLength(uint64_t); + public slots: void play(); void stop(); diff --git a/src/buttonmanager.cpp b/src/buttonmanager.cpp index bc9a13f..fcb391c 100644 --- a/src/buttonmanager.cpp +++ b/src/buttonmanager.cpp @@ -158,7 +158,6 @@ void ButtonManager::itemSelected() { ButtonManagerItem* item = dynamic_cast(getSelectedItem()); if(item) { // set buttons - // ui->addButton->setEnabled(item->hasAdd()); ui->editButton->setEnabled(item->hasEdit()); ui->deleteButton->setEnabled(item->hasRemove()); ui->moveUpButton->setEnabled(item->hasMoveUp()); @@ -166,7 +165,6 @@ void ButtonManager::itemSelected() { } else { Log::info << "no valid item selected"; - // ui->addButton->setEnabled(false); ui->editButton->setEnabled(false); ui->deleteButton->setEnabled(false); ui->moveUpButton->setEnabled(false); diff --git a/src/buttonmanageritems.cpp b/src/buttonmanageritems.cpp index 3ed8df4..9d2fc05 100644 --- a/src/buttonmanageritems.cpp +++ b/src/buttonmanageritems.cpp @@ -2,10 +2,7 @@ #include -// itemtypes -const static int ROWTYPE = 1000; -const static int BUTTONTYPE = 1001; -const static int SAMPLETYPE = 1002; +#include "editsample.h" ButtonManagerItem::ButtonManagerItem(QTreeWidgetItem* parent, int type) : QTreeWidgetItem(parent, type), mparent(parent) { } @@ -164,13 +161,34 @@ Config::ButtonConfig& ButtonItem::getConfig() { SampleItem::SampleItem(ButtonItem* parent, uint8_t samplenr, Config::RootConfig& conf) : ButtonManagerItem(parent, TYPE), conf(conf), samplenr(samplenr), button(parent) { const Config::SampleConfig& sample = getConfig(); updatePosition(); - setData(3, Qt::ItemDataRole::DisplayRole, QVariant(QString::fromStdString(sample.file))); + setText(3, QString::fromStdString(sample.file)); + setToolTip(2, "Doubleclick to play"); +} + +bool SampleItem::hasEdit() const { + return true; } bool SampleItem::hasRemove() const { return true; } +void SampleItem::edit() { + Config::SampleConfig& sammpleConf = getConfig(); + EditSample editor(sammpleConf.file); + editor.setStartTime(sammpleConf.offset); + editor.setLength(sammpleConf.length); + editor.exec(); + + if(editor.result() == 0) { + Log::info << "Dialog failed"; + return; + } + + sammpleConf.offset = editor.getStartTime(); + sammpleConf.length = editor.getLength(); +} + void SampleItem::remove() { auto& btnconf = button->getConfig().samples; btnconf.erase(btnconf.begin() + samplenr); @@ -190,4 +208,4 @@ Config::SampleConfig& SampleItem::getConfig() { void SampleItem::updatePosition() { setData(2, Qt::ItemDataRole::DisplayRole, QVariant((int) samplenr+1)); -} \ No newline at end of file +} diff --git a/src/editsample.cpp b/src/editsample.cpp index 936d084..d013e65 100644 --- a/src/editsample.cpp +++ b/src/editsample.cpp @@ -41,6 +41,20 @@ uint64_t EditSample::getLength() const { return getTimeInfo(ui->lengthTime); } +void EditSample::setStartTime(uint64_t start) { + QTime time = timeFromMS(start); + ui->startTime->setTime(time); + + ui->graphicsView->updateStartPosition(start); +} + +void EditSample::setLength(uint64_t len) { + QTime time = timeFromMS(len); + ui->lengthTime->setTime(time); + + ui->graphicsView->updateEndPosition(len + getStartTime()); +} + void EditSample::play() { // get audio device std::string devicename = ui->soundOutputselect->currentText().toStdString(); @@ -61,20 +75,14 @@ void EditSample::stop() { } void EditSample::setStartToCurrent() { - QTime time = timeFromMS(currentposition); - ui->startTime->setTime(time); - - ui->graphicsView->updateEndPosition(currentposition); + setStartTime(currentposition); } void EditSample::setStopToCurrent() { uint64_t offset = getStartTime(); if(offset < currentposition) { // current position is behind startposition -> shorten length to match - QTime time = timeFromMS(currentposition-offset); - ui->lengthTime->setTime(time); - - ui->graphicsView->updateEndPosition(currentposition-offset); + setLength(currentposition-offset); } else { // TODO: // currentposition is before offset -> move entire section to match? do nothing?