From 2555595ce085e708f3c19170ee7d08e17ae7019e Mon Sep 17 00:00:00 2001 From: kleinfreund Date: Mon, 12 Feb 2018 19:43:17 +0100 Subject: [PATCH] Determine operator enum instead of comparing with magic numbers --- src/smartplaylists/searchtermwidget.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/smartplaylists/searchtermwidget.cpp b/src/smartplaylists/searchtermwidget.cpp index 7153e418f..b358e9e95 100644 --- a/src/smartplaylists/searchtermwidget.cpp +++ b/src/smartplaylists/searchtermwidget.cpp @@ -149,6 +149,9 @@ void SearchTermWidget::FieldChanged(int index) { // Show the correct value editor QWidget* page = nullptr; + SearchTerm::Operator op = static_cast( + ui_->op->itemData(ui_->op->currentIndex()).toInt() + ); switch (type) { case SearchTerm::Type_Time: page = ui_->page_time; @@ -163,7 +166,7 @@ void SearchTermWidget::FieldChanged(int index) { page = ui_->page_rating; break; case SearchTerm::Type_Text: - if (ui_->op->currentIndex() == 4 || ui_->op->currentIndex() == 5) { + if (op == SearchTerm::Op_Empty || op == SearchTerm::Op_NotEmpty) { page = ui_->page_empty; } else { page = ui_->page_text; @@ -193,27 +196,29 @@ void SearchTermWidget::FieldChanged(int index) { } void SearchTermWidget::OpChanged(int index) { + // Determine the currently selected operator + SearchTerm::Operator op = static_cast( + // This uses the operators’s index in the combobox to get its enum value + ui_->op->itemData(ui_->op->currentIndex()).toInt() + ); + + // We need to change the page only in the following case if ((ui_->value_stack->currentWidget() == ui_->page_text) || (ui_->value_stack->currentWidget() == ui_->page_empty)) { QWidget* page = nullptr; - // This assumes the operators always appear in the same order. - // Needs a better way for checking which is the current operator. - if (index == 4 || index == 5) { + if (op == SearchTerm::Op_Empty || op == SearchTerm::Op_NotEmpty) { page = ui_->page_empty; } else { page = ui_->page_text; } ui_->value_stack->setCurrentWidget(page); - } - - // We need to change the page only in the following case - else if ((ui_->value_stack->currentWidget() == ui_->page_date) || + } else if ((ui_->value_stack->currentWidget() == ui_->page_date) || (ui_->value_stack->currentWidget() == ui_->page_date_numeric) || (ui_->value_stack->currentWidget() == ui_->page_date_relative)) { QWidget* page = nullptr; - if (index == 4 || index == 5) { + if (op == SearchTerm::Op_NumericDate || op == SearchTerm::Op_NumericDateNot) { page = ui_->page_date_numeric; - } else if (index == 6) { + } else if (op == SearchTerm::Op_RelativeDate) { page = ui_->page_date_relative; } else { page = ui_->page_date;