soundboard/src/buttonmanager.cpp

138 lines
3.4 KiB
C++

#include "buttonmanager.h"
#include "ui_buttonmanager.h"
#include <Log.h>
ButtonManager::ButtonManager(Config& conf, MainWindow* parent) : QDialog(parent), ui(new Ui::ButtonManager), mainW(parent), mainConfig(conf) {
ui->setupUi(this);
loadConfig();
QStringList labels;
labels.push_back("Row");
labels.push_back("Button");
labels.push_back("Sample");
labels.push_back("File");
ui->buttonTreeWidget->setHeaderLabels(labels);
}
ButtonManager::~ButtonManager() {
delete ui;
}
void ButtonManager::accept() {
saveChanges();
QDialog::accept();
}
void ButtonManager::reject() {
// nothing?
QDialog::reject();
}
void ButtonManager::addButton() {
perform<&ButtonManagerItem::add>();
}
void ButtonManager::editButton() {
perform<&ButtonManagerItem::edit>();
}
void ButtonManager::deleteButton() {
perform<&ButtonManagerItem::remove>();
}
void ButtonManager::upButton() {
QTreeWidgetItem* currentSelectedItem = getSelectedItem();
perform<&ButtonManagerItem::moveUp>();
select(currentSelectedItem);
}
void ButtonManager::downButton() {
perform<&ButtonManagerItem::moveDown>();
}
void ButtonManager::itemSelected() {
Log::debug << "item selected";
ButtonManagerItem* item = dynamic_cast<ButtonManagerItem*>(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());
ui->moveDownButton->setEnabled(item->hasMoveDown());
} else {
Log::info << "no valid item selected";
ui->addButton->setEnabled(false);
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);
Log::trace << "btn: " << (int) role;
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";
}
}