summaryrefslogtreecommitdiff
path: root/src/editexecutablesdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/editexecutablesdialog.cpp')
-rw-r--r--src/editexecutablesdialog.cpp87
1 files changed, 54 insertions, 33 deletions
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp
index 9747a86f..e2772757 100644
--- a/src/editexecutablesdialog.cpp
+++ b/src/editexecutablesdialog.cpp
@@ -64,7 +64,7 @@ EditExecutablesDialog::EditExecutablesDialog(OrganizerCore& oc, QWidget* parent)
if (ui->list->count() > 0) {
ui->list->item(0)->setSelected(true);
} else {
- updateUI(nullptr);
+ updateUI(nullptr, nullptr);
}
}
@@ -184,23 +184,40 @@ QListWidgetItem* EditExecutablesDialog::createListItem(const Executable& exe)
return newItem;
}
-void EditExecutablesDialog::updateUI(const Executable* e)
+void EditExecutablesDialog::updateUI(
+ const QListWidgetItem* item, const Executable* e)
{
// the ui is currently being set, ignore changes
m_settingUI = true;
if (e) {
setEdits(*e);
- ui->remove->setEnabled(e->isCustom());
} else {
clearEdits();
- ui->remove->setEnabled(false);
}
+ setButtons(item, e);
+
// any changes from now on are from the user
m_settingUI = false;
}
+void EditExecutablesDialog::setButtons(
+ const QListWidgetItem* item, const Executable* e)
+{
+ // add is always enabled
+
+ if (item) {
+ ui->remove->setEnabled(e->isCustom());
+ ui->up->setEnabled(canMove(item, -1));
+ ui->down->setEnabled(canMove(item, +1));
+ } else {
+ ui->remove->setEnabled(false);
+ ui->up->setEnabled(false);
+ ui->down->setEnabled(false);
+ }
+}
+
void EditExecutablesDialog::clearEdits()
{
ui->title->clear();
@@ -348,47 +365,41 @@ void EditExecutablesDialog::save()
}
}
-void EditExecutablesDialog::moveSelection(int by)
+bool EditExecutablesDialog::canMove(const QListWidgetItem* item, int direction)
{
- auto* item = selectedItem();
if (!item) {
- return;
+ return false;
}
- // moving down the list
- while (by > 0) {
- const auto row = ui->list->row(item);
+ if (direction < 0) {
+ // moving up
+ return (ui->list->row(item) > 0);
- if (row >= (ui->list->count() - 1)) {
- break;
- }
-
- ui->list->takeItem(row);
- ui->list->insertItem(row + 1, item);
- item->setSelected(true);
-
- --by;
+ } else if (direction > 0) {
+ // moving down
+ return (ui->list->row(item) < (ui->list->count() - 1));
}
- // moving up the list
- while (by < 0) {
- const auto row = ui->list->row(item);
+ return false;
+}
- if (row <= 0) {
- break;
- }
+void EditExecutablesDialog::move(QListWidgetItem* item, int direction)
+{
+ if (!canMove(item, direction)) {
+ return;
+ }
- ui->list->takeItem(row);
- ui->list->insertItem(row - 1, item);
- item->setSelected(true);
+ const auto row = ui->list->row(item);
- ++by;
- }
+ // removing item
+ ui->list->takeItem(row);
+ ui->list->insertItem(row + (direction > 0 ? 1 : -1), item);
+ item->setSelected(true);
}
void EditExecutablesDialog::on_list_itemSelectionChanged()
{
- updateUI(selectedExe());
+ updateUI(selectedItem(), selectedExe());
}
void EditExecutablesDialog::on_add_clicked()
@@ -448,12 +459,22 @@ void EditExecutablesDialog::on_remove_clicked()
void EditExecutablesDialog::on_up_clicked()
{
- moveSelection(-1);
+ auto* item = selectedItem();
+ if (!item) {
+ return;
+ }
+
+ move(item, -1);
}
void EditExecutablesDialog::on_down_clicked()
{
- moveSelection(+1);
+ auto* item = selectedItem();
+ if (!item) {
+ return;
+ }
+
+ move(item, +1);
}
bool EditExecutablesDialog::isTitleConflicting(const QString& s)