From af27aa93c6dfae8aeb38b97b5f10c23a80816b29 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 16 May 2018 21:45:00 +0200 Subject: Open/activate instruent tab when double-clicking item in instrument list. --- src/audioextractor.cc | 3 ++- src/instrumentwidget.cc | 2 ++ src/mainwindow.cc | 54 +++++++++++++++++++++++++++++++++---------------- src/mainwindow.h | 3 +++ src/project.cc | 10 +++++++++ src/project.h | 1 + 6 files changed, 55 insertions(+), 18 deletions(-) diff --git a/src/audioextractor.cc b/src/audioextractor.cc index 98cbccb..962c267 100644 --- a/src/audioextractor.cc +++ b/src/audioextractor.cc @@ -316,8 +316,9 @@ void AudioExtractor::changeName(QString file, QString name) if(file == j->first) { j->second = name; - return; + break; } j++; } + instrument.setFileList(audiofiles); } diff --git a/src/instrumentwidget.cc b/src/instrumentwidget.cc index d081f6a..1fcc1cf 100644 --- a/src/instrumentwidget.cc +++ b/src/instrumentwidget.cc @@ -72,6 +72,8 @@ InstrumentWidget::InstrumentWidget(Settings& settings, Instrument& instrument) : settings(settings) , instrument(instrument) { + setProperty("id", instrument.getId()); + { int start = 44100 * 60; Selection p(start, start + 44100 * 60, 0, 0); // one minute selection diff --git a/src/mainwindow.cc b/src/mainwindow.cc index fa64a6a..e7d099d 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -50,21 +50,6 @@ MainWindow::MainWindow(Settings& settings) tab_widget->setTabsClosable(true); tab_widget->setMovable(true); - auto instr_id1 = project.createInstrument(); - auto instr_id2 = project.createInstrument(); - auto instr_id3 = project.createInstrument(); - - auto& instr1 = project.getInstrument(instr_id1); - auto& instr2 = project.getInstrument(instr_id2); - auto& instr3 = project.getInstrument(instr_id3); - - tab_widget->addTab(new InstrumentWidget(settings, instr1), - QPixmap(":icons/instrument.png"), "Snare"); - tab_widget->addTab(new InstrumentWidget(settings, instr2), - QPixmap(":icons/instrument.png"), "Kick-l"); - tab_widget->addTab(new InstrumentWidget(settings, instr3), - QPixmap(":icons/instrument.png"), "Floor Tom 1"); - setCentralWidget(tab_widget); QMenu* fileMenu = menuBar()->addMenu(tr("&File")); @@ -94,8 +79,9 @@ MainWindow::MainWindow(Settings& settings) instruments_dock->setObjectName("instruments_dock"); instruments_dock->setAllowedAreas(Qt::LeftDockWidgetArea); instruments_dock->setFeatures(QDockWidget::DockWidgetMovable); - QListWidget* instrument_list = new QListWidget(); - instrument_list->addItems({"Snare", "Kick-l", "Floor Tom 1"}); + instrument_list = new QListWidget(); + connect(instrument_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(itemDoubleClicked(QListWidgetItem*))); instruments_dock->setWidget(instrument_list); addDockWidget(Qt::LeftDockWidgetArea, instruments_dock); @@ -124,6 +110,28 @@ MainWindow::~MainWindow() { } +void MainWindow::itemDoubleClicked(QListWidgetItem *item) +{ + int id = item->data(Qt::UserRole).toInt(); + auto& instr = project.getInstrument(id); + + for(int i = 0; i < tab_widget->count(); ++i) + { + if(tab_widget->widget(i)->property("id").toInt() == id) + { + tab_widget->setCurrentIndex(i); + return; + } + } + + // Tab wasn't open already. Create it. + tab_widget->addTab(new InstrumentWidget(settings, instr), + QPixmap(":icons/instrument.png"), + instr.getInstrumentName()); + // Make new tab active + tab_widget->setCurrentIndex(tab_widget->count() - 1); +} + void MainWindow::updateWindowTitle() { auto project_string = project.getProjectName(); @@ -205,6 +213,18 @@ void MainWindow::loadProject() project_dirty = false; updateWindowTitle(); + instrument_list->clear(); + auto instrument_ids = project.getInstrumentList(); + for(auto id : instrument_ids) + { + auto& instrument = project.getInstrument(id); + auto item = new QListWidgetItem(); + item->setIcon(QPixmap(":icons/instrument.png")); + item->setText(instrument.getInstrumentName()); + item->setData(Qt::UserRole, id); + instrument_list->addItem(item); + } + statusBar()->showMessage(tr("Loaded")); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 49ff13f..ad9e2ed 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -30,6 +30,7 @@ #include #include #include +#include #include "project.h" @@ -44,6 +45,7 @@ public: ~MainWindow(); public slots: + void itemDoubleClicked(QListWidgetItem *item); void updateWindowTitle(); void newProject(); @@ -64,6 +66,7 @@ private: bool project_dirty{false}; QDockWidget* instruments_dock; + QListWidget* instrument_list; QDockWidget* channels_dock; QTabWidget* tab_widget; }; diff --git a/src/project.cc b/src/project.cc index 0baf67d..df1d266 100644 --- a/src/project.cc +++ b/src/project.cc @@ -197,6 +197,16 @@ void Project::deleteInstrument(int id) Q_ASSERT(false); // No such instrument id. } +QList Project::getInstrumentList() const +{ + QList instrument_list; + for(auto& instrument : instruments) + { + instrument_list.push_back(instrument.getId()); + } + return instrument_list; +} + void Project::reset() { RAIIBulkUpdate bulkUpdate(*this); diff --git a/src/project.h b/src/project.h index 27fa0b5..03d482b 100644 --- a/src/project.h +++ b/src/project.h @@ -99,6 +99,7 @@ public: Instrument& getInstrument(int id); int createInstrument(); void deleteInstrument(int id); + QList getInstrumentList() const; void reset(); -- cgit v1.2.3