#include "buttonmanager.h" #include "ui_buttonmanager.h" #include "addnewwhat.h" #include 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() { AddNewWhat whatshouldbeadded(this); whatshouldbeadded.exec(); AddNewWhat::ReturnCode type = whatshouldbeadded.returnCode; if(type == AddNewWhat::ReturnCode::Row) { // create new row //TODO: when a row is selected: add after the selected row workingConfig.buttons.push_back({}); // create a empty vector RowItem* row = new RowItem(ui->buttonTreeWidget->invisibleRootItem(), workingConfig.buttons.size()-1, workingConfig); return; } if(type == AddNewWhat::ReturnCode::Button) { // create new button return; } if(type == AddNewWhat::ReturnCode::Sample) { // create new sample return; } } void ButtonManager::editButton() { perform<&ButtonManagerItem::edit>(); } void ButtonManager::deleteButton() { QTreeWidgetItem* currentSelectedItem = getSelectedItem(); perform<&ButtonManagerItem::remove>(); delete currentSelectedItem; } void ButtonManager::upButton() { QTreeWidgetItem* currentSelectedItem = getSelectedItem(); perform<&ButtonManagerItem::moveUp>(); select(currentSelectedItem); } void ButtonManager::downButton() { QTreeWidgetItem* currentSelectedItem = getSelectedItem(); perform<&ButtonManagerItem::moveDown>(); select(currentSelectedItem); } void ButtonManager::itemSelected() { Log::debug << "item selected"; 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()); 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); 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 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 ButtonManager::perform() { ButtonManagerItem* item = dynamic_cast(getSelectedItem()); if(item) { (item->*T)(); } else { Log::info << "no valid item selected"; } }