From 29eaa19d952e4b8721fbed589efc65f7cb596681 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Sat, 4 Jan 2025 22:34:53 -0500 Subject: [PATCH] refactor: ActionDialog, use checkable list for screen selection --- .../deskflow-gui/dialogs/ActionDialog.cpp | 37 +++++++++++------ src/apps/deskflow-gui/dialogs/ActionDialog.ui | 40 +++++-------------- 2 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/apps/deskflow-gui/dialogs/ActionDialog.cpp b/src/apps/deskflow-gui/dialogs/ActionDialog.cpp index 7da18873c..9156c4586 100644 --- a/src/apps/deskflow-gui/dialogs/ActionDialog.cpp +++ b/src/apps/deskflow-gui/dialogs/ActionDialog.cpp @@ -48,15 +48,16 @@ ActionDialog::ActionDialog(QWidget *parent, const ServerConfig &config, Hotkey & ui->comboActionType->setCurrentIndex(m_action.type()); ui->comboTriggerOn->setCurrentIndex(m_action.activeOnRelease()); - ui->m_pGroupBoxScreens->setChecked(m_action.haveScreens()); - for (const Screen &screen : config.screens()) { if (screen.isNull()) continue; - QListWidgetItem *pListItem = new QListWidgetItem(screen.name()); - ui->m_pListScreens->addItem(pListItem); - if (m_action.typeScreenNames().indexOf(screen.name()) != -1) - ui->m_pListScreens->setCurrentItem(pListItem); + auto *newListItem = new QListWidgetItem(screen.name()); + newListItem->setCheckState(Qt::Checked); + if ((m_action.typeScreenNames().indexOf(screen.name()) == -1) && + (m_action.haveScreens() && !m_action.typeScreenNames().isEmpty())) + newListItem->setCheckState(Qt::Unchecked); + + ui->listScreens->addItem(newListItem); ui->m_pComboSwitchToScreen->addItem(screen.name()); if (screen.name() == m_action.switchScreenName()) @@ -72,13 +73,24 @@ void ActionDialog::accept() m_action.setKeySequence(ui->keySequenceWidget->keySequence()); m_action.setType(ui->comboActionType->currentIndex()); - m_action.setHaveScreens(ui->m_pGroupBoxScreens->isChecked()); m_action.typeScreenNames().clear(); - const auto &selection = ui->m_pListScreens->selectedItems(); - for (const QListWidgetItem *pItem : selection) - m_action.typeScreenNames().append(pItem->text()); + int screenCount = ui->listScreens->count(); + + for (int i = 0; i < ui->listScreens->count(); i++) { + const auto &item = ui->listScreens->item(i); + m_action.typeScreenNames().append(item->text()); + if (item->checkState() == Qt::Unchecked) { + screenCount--; + m_action.typeScreenNames().removeLast(); + } + } + + if (screenCount == ui->listScreens->count()) + m_action.typeScreenNames().clear(); + + m_action.setHaveScreens(screenCount); m_action.setSwitchScreenName(ui->m_pComboSwitchToScreen->currentText()); m_action.setSwitchDirection(ui->m_pComboSwitchInDirection->currentIndex()); @@ -91,14 +103,13 @@ void ActionDialog::accept() void ActionDialog::keySequenceChanged() { - ui->m_pGroupBoxScreens->setEnabled(!ui->keySequenceWidget->keySequence().isMouseButton()); - ui->m_pListScreens->setEnabled(!ui->keySequenceWidget->keySequence().isMouseButton()); + ui->listScreens->setEnabled(ui->keySequenceWidget->valid() && !ui->keySequenceWidget->keySequence().isMouseButton()); } void ActionDialog::actionTypeChanged(int index) { ui->keySequenceWidget->setEnabled(isKeyAction(index)); - ui->m_pListScreens->setEnabled(isKeyAction(index) && ui->m_pGroupBoxScreens->isChecked()); + ui->listScreens->setEnabled(isKeyAction(index)); ui->m_pComboSwitchToScreen->setEnabled(index == ActionTypes::SwitchTo); ui->m_pComboSwitchInDirection->setEnabled(index == ActionTypes::SwitchInDirection); ui->m_pComboLockCursorToScreen->setEnabled(index == ActionTypes::ModifyCursorLock); diff --git a/src/apps/deskflow-gui/dialogs/ActionDialog.ui b/src/apps/deskflow-gui/dialogs/ActionDialog.ui index 2603ed4f7..03838af1f 100644 --- a/src/apps/deskflow-gui/dialogs/ActionDialog.ui +++ b/src/apps/deskflow-gui/dialogs/ActionDialog.ui @@ -6,8 +6,8 @@ 0 0 - 375 - 528 + 521 + 428 @@ -97,40 +97,18 @@ - + - only on these screens + Computers to recieve this event - - true - - - true - - + - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 128 - 64 - + + + QAbstractScrollArea::AdjustToContents - QAbstractItemView::ExtendedSelection + QAbstractItemView::NoSelection