soundboard/src/buttonmanager.cpp

157 lines
3.9 KiB
C++
Raw Normal View History

2021-12-21 01:30:18 +01:00
#include "buttonmanager.h"
#include "ui_buttonmanager.h"
2021-12-21 18:04:28 +01:00
#include "addnewwhat.h"
2021-12-21 15:44:51 +01:00
#include <Log.h>
2021-12-21 02:11:44 +01:00
2021-12-21 15:44:51 +01:00
ButtonManager::ButtonManager(Config& conf, MainWindow* parent) : QDialog(parent), ui(new Ui::ButtonManager), mainW(parent), mainConfig(conf) {
2021-12-21 01:30:18 +01:00
ui->setupUi(this);
2021-12-21 15:44:51 +01:00
loadConfig();
2021-12-21 01:30:18 +01:00
QStringList labels;
labels.push_back("Row");
labels.push_back("Button");
labels.push_back("Sample");
2021-12-21 02:11:44 +01:00
labels.push_back("File");
2021-12-21 01:30:18 +01:00
ui->buttonTreeWidget->setHeaderLabels(labels);
}
ButtonManager::~ButtonManager() {
delete ui;
}
2021-12-21 15:44:51 +01:00
void ButtonManager::accept() {
saveChanges();
QDialog::accept();
}
void ButtonManager::reject() {
// nothing?
QDialog::reject();
}
void ButtonManager::addButton() {
2021-12-21 18:04:28 +01:00
AddNewWhat whatshouldbeadded(this);
whatshouldbeadded.exec();
AddNewWhat::ReturnCode type = whatshouldbeadded.returnCode;
if(type == AddNewWhat::ReturnCode::Row) {
// create new row
return;
}
if(type == AddNewWhat::ReturnCode::Button) {
// create new button
return;
}
if(type == AddNewWhat::ReturnCode::Sample) {
// create new sample
return;
}
2021-12-21 15:44:51 +01:00
}
void ButtonManager::editButton() {
perform<&ButtonManagerItem::edit>();
}
void ButtonManager::deleteButton() {
2021-12-21 16:21:34 +01:00
QTreeWidgetItem* currentSelectedItem = getSelectedItem();
2021-12-21 15:44:51 +01:00
perform<&ButtonManagerItem::remove>();
2021-12-21 16:21:34 +01:00
delete currentSelectedItem;
2021-12-21 15:44:51 +01:00
}
void ButtonManager::upButton() {
QTreeWidgetItem* currentSelectedItem = getSelectedItem();
perform<&ButtonManagerItem::moveUp>();
select(currentSelectedItem);
}
void ButtonManager::downButton() {
2021-12-21 16:02:04 +01:00
QTreeWidgetItem* currentSelectedItem = getSelectedItem();
2021-12-21 15:44:51 +01:00
perform<&ButtonManagerItem::moveDown>();
2021-12-21 16:02:04 +01:00
select(currentSelectedItem);
2021-12-21 15:44:51 +01:00
}
void ButtonManager::itemSelected() {
Log::debug << "item selected";
ButtonManagerItem* item = dynamic_cast<ButtonManagerItem*>(getSelectedItem());
if(item) {
// set buttons
2021-12-21 18:04:28 +01:00
// ui->addButton->setEnabled(item->hasAdd());
2021-12-21 15:44:51 +01:00
ui->editButton->setEnabled(item->hasEdit());
ui->deleteButton->setEnabled(item->hasRemove());
ui->moveUpButton->setEnabled(item->hasMoveUp());
ui->moveDownButton->setEnabled(item->hasMoveDown());
} else {
Log::info << "no valid item selected";
2021-12-21 18:04:28 +01:00
// ui->addButton->setEnabled(false);
2021-12-21 15:44:51 +01:00
ui->editButton->setEnabled(false);
ui->deleteButton->setEnabled(false);
ui->moveUpButton->setEnabled(false);
ui->moveDownButton->setEnabled(false);
}
}
void ButtonManager::dialogButtonPressed(QAbstractButton* btn) {
QDialogButtonBox::ButtonRole role = ui->buttonBox->buttonRole(btn);
if(role == QDialogButtonBox::ButtonRole::ResetRole) {
// reset
loadConfig();
} else if(role == QDialogButtonBox::ButtonRole::ApplyRole) {
// apply
saveChanges();
}
}
void ButtonManager::loadConfig() {
workingConfig = mainConfig.rootConfig;
while(ui->buttonTreeWidget->invisibleRootItem()->childCount()) {
auto kid = ui->buttonTreeWidget->invisibleRootItem()->takeChild(0);
delete kid;
}
QTreeWidgetItem* root = ui->buttonTreeWidget->invisibleRootItem();
for(uint8_t rownr = 0; rownr < workingConfig.buttons.size(); ++rownr) {
RowItem* row = new RowItem(root, rownr, workingConfig);
}
}
void ButtonManager::saveChanges() {
// store working config to main config and save
mainConfig.rootConfig = workingConfig;
mainConfig.save();
mainW->reloadButtonConfig();
}
void ButtonManager::select(QTreeWidgetItem* item) {
QList<QTreeWidgetItem*> selected = ui->buttonTreeWidget->selectedItems();
for(QTreeWidgetItem* selectedItem : selected) {
ui->buttonTreeWidget->setItemSelected(selectedItem, false);
}
ui->buttonTreeWidget->setItemSelected(item, true);
}
QTreeWidgetItem* ButtonManager::getSelectedItem() const {
QList items = ui->buttonTreeWidget->selectedItems();
if(items.size() != 1) {
return nullptr; // not exectly one selected
}
return items.at(0);
}
template<void (ButtonManagerItem::*T)()>
void ButtonManager::perform() {
ButtonManagerItem* item = dynamic_cast<ButtonManagerItem*>(getSelectedItem());
if(item) {
(item->*T)();
} else {
Log::info << "no valid item selected";
}
}