diff --git a/src/cutter.pro b/src/cutter.pro index 6da848b3..50fc62e3 100644 --- a/src/cutter.pro +++ b/src/cutter.pro @@ -84,7 +84,8 @@ SOURCES += \ widgets/GraphView.cpp \ dialogs/preferences/PreferencesDialog.cpp \ dialogs/preferences/GeneralOptionsWidget.cpp \ - dialogs/preferences/GraphOptionsWidget.cpp + dialogs/preferences/GraphOptionsWidget.cpp \ + widgets/QuickFilterView.cpp HEADERS += \ cutter.h \ @@ -139,7 +140,8 @@ HEADERS += \ widgets/GraphView.h \ dialogs/preferences/PreferencesDialog.h \ dialogs/preferences/GeneralOptionsWidget.h \ - dialogs/preferences/GraphOptionsWidget.h + dialogs/preferences/GraphOptionsWidget.h \ + widgets/QuickFilterView.h FORMS += \ dialogs/AboutDialog.ui \ @@ -171,7 +173,8 @@ FORMS += \ dialogs/SaveProjectDialog.ui \ dialogs/preferences/PreferencesDialog.ui \ dialogs/preferences/GeneralOptionsWidget.ui \ - dialogs/preferences/GraphOptionsWidget.ui + dialogs/preferences/GraphOptionsWidget.ui \ + widgets/QuickFilterView.ui RESOURCES += \ resources.qrc diff --git a/src/widgets/FunctionsWidget.cpp b/src/widgets/FunctionsWidget.cpp index 56da363a..325adcbc 100644 --- a/src/widgets/FunctionsWidget.cpp +++ b/src/widgets/FunctionsWidget.cpp @@ -334,12 +334,12 @@ FunctionsWidget::FunctionsWidget(MainWindow *main, QWidget *parent) : // Ctrl-F to show/hide the filter entry QShortcut *search_shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_F), this); - connect(search_shortcut, SIGNAL(activated()), this, SLOT(show_filter())); + connect(search_shortcut, &QShortcut::activated, ui->quickFilterView, &QuickFilterView::showFilter); search_shortcut->setContext(Qt::WidgetWithChildrenShortcut); // Esc to clear the filter entry QShortcut *clear_shortcut = new QShortcut(QKeySequence(Qt::Key_Escape), this); - connect(clear_shortcut, SIGNAL(activated()), this, SLOT(clear_filter())); + connect(clear_shortcut, &QShortcut::activated, ui->quickFilterView, &QuickFilterView::clearFilter); clear_shortcut->setContext(Qt::WidgetWithChildrenShortcut); QFontInfo font_info = ui->functionsTreeView->fontInfo(); @@ -348,16 +348,21 @@ FunctionsWidget::FunctionsWidget(MainWindow *main, QWidget *parent) : function_model = new FunctionModel(&functions, &import_addresses, false, default_font, highlight_font, this); function_proxy_model = new FunctionSortFilterProxyModel(function_model, this); - connect(ui->filterLineEdit, SIGNAL(textChanged(const QString &)), function_proxy_model, SLOT(setFilterWildcard(const QString &))); ui->functionsTreeView->setModel(function_proxy_model); ui->functionsTreeView->sortByColumn(FunctionModel::NameColumn, Qt::AscendingOrder); nested_function_model = new FunctionModel(&functions, &import_addresses, true, default_font, highlight_font, this); nested_function_proxy_model = new FunctionSortFilterProxyModel(nested_function_model, this); - connect(ui->filterLineEdit, SIGNAL(textChanged(const QString &)), nested_function_proxy_model, SLOT(setFilterWildcard(const QString &))); ui->nestedFunctionsTreeView->setModel(nested_function_proxy_model); ui->nestedFunctionsTreeView->sortByColumn(0, Qt::AscendingOrder); + connect(ui->quickFilterView, SIGNAL(filterTextChanged(const QString &)), function_proxy_model, SLOT(setFilterWildcard(const QString &))); + connect(ui->quickFilterView, SIGNAL(filterTextChanged(const QString &)), nested_function_proxy_model, SLOT(setFilterWildcard(const QString &))); + connect(ui->quickFilterView, &QuickFilterView::filterClosed, this, [this]() + { + getCurrentTreeView()->setFocus(); + }); + setScrollMode(); // Set Functions context menu @@ -565,32 +570,4 @@ void FunctionsWidget::resizeEvent(QResizeEvent *event) void FunctionsWidget::setScrollMode() { qhelpers::setVerticalScrollMode(ui->functionsTreeView); -} - -void FunctionsWidget::show_filter() -{ - ui->filterLineEdit->setVisible(true); - ui->closeFilterButton->setVisible(true); - ui->filterLineEdit->setFocus(); -} - -void FunctionsWidget::clear_filter() -{ - if (ui->filterLineEdit->text() == "") - { - ui->filterLineEdit->setVisible(false); - ui->closeFilterButton->setVisible(false); - ui->functionsTreeView->setFocus(); - } - else - { - ui->filterLineEdit->setText(""); - } -} - -void FunctionsWidget::on_closeFilterButton_clicked() -{ - ui->filterLineEdit->setVisible(false); - ui->closeFilterButton->setVisible(false); - ui->functionsTreeView->setFocus(); -} +} \ No newline at end of file diff --git a/src/widgets/FunctionsWidget.h b/src/widgets/FunctionsWidget.h index af6c2f43..42187417 100644 --- a/src/widgets/FunctionsWidget.h +++ b/src/widgets/FunctionsWidget.h @@ -100,12 +100,6 @@ private slots: void on_actionHorizontal_triggered(); void on_actionVertical_triggered(); - void show_filter(); - - void clear_filter(); - - void on_closeFilterButton_clicked(); - void showTitleContextMenu(const QPoint &pt); void refreshTree(); diff --git a/src/widgets/FunctionsWidget.ui b/src/widgets/FunctionsWidget.ui index 6ad53cc9..3048b587 100644 --- a/src/widgets/FunctionsWidget.ui +++ b/src/widgets/FunctionsWidget.ui @@ -197,71 +197,7 @@ QToolTip { - - - 0 - - - QLayout::SetNoConstraint - - - 2 - - - - - - 0 - 0 - - - - Quick Filter - - - true - - - - - - - - 75 - false - true - - - - QToolButton { /* all types of tool button */ - border: 2px solid #333; - border-left: 2px solid #333; - border-right: 2px solid #333; - background-color: #333; - color: rgb(255, 255, 255) -} - -QToolButton:hover { - border: 2px solid rgb(128, 128, 128); - border-left: 2px solid rgb(128, 128, 128); - border-right: 2px solid rgb(128, 128, 128); - background-color: rgb(128, 128, 128); - color: rgb(255, 255, 255) - } - -QToolButton:pressed { - border: 2px solid #2180a9; - border-left: 2px solid #2180a9; - border-right: 2px solid #2180a9; - background-color: #2180a9; -} - - - X - - - - + @@ -305,6 +241,14 @@ QToolButton:pressed { + + + QuickFilterView + QWidget +
widgets/QuickFilterView.h
+ 1 +
+
diff --git a/src/widgets/QuickFilterView.cpp b/src/widgets/QuickFilterView.cpp new file mode 100644 index 00000000..d8284f32 --- /dev/null +++ b/src/widgets/QuickFilterView.cpp @@ -0,0 +1,44 @@ + +#include "QuickFilterView.h" +#include "ui_QuickFilterView.h" + +QuickFilterView::QuickFilterView(QWidget *parent) : + QWidget(parent), + ui(new Ui::QuickFilterView()) +{ + ui->setupUi(this); + + connect(ui->closeFilterButton, &QAbstractButton::clicked, this, &QuickFilterView::closeFilter); + + connect(ui->filterLineEdit, &QLineEdit::textChanged, this, [this](const QString &text) + { + emit filterTextChanged(text); + }); +} + +QuickFilterView::~QuickFilterView() {} + + +void QuickFilterView::showFilter() +{ + show(); + ui->filterLineEdit->setFocus(); +} + +void QuickFilterView::clearFilter() +{ + if (ui->filterLineEdit->text().isEmpty()) + { + closeFilter(); + } + else + { + ui->filterLineEdit->setText(""); + } +} + +void QuickFilterView::closeFilter() +{ + hide(); + emit filterClosed(); +} diff --git a/src/widgets/QuickFilterView.h b/src/widgets/QuickFilterView.h new file mode 100644 index 00000000..34d89b15 --- /dev/null +++ b/src/widgets/QuickFilterView.h @@ -0,0 +1,35 @@ + +#ifndef QUICKFILTERVIEW_H +#define QUICKFILTERVIEW_H + +#include + +#include + +namespace Ui +{ + class QuickFilterView; +} + +class QuickFilterView : public QWidget +{ + Q_OBJECT + +public: + explicit QuickFilterView(QWidget *parent = nullptr); + ~QuickFilterView(); + +public slots: + void showFilter(); + void closeFilter(); + void clearFilter(); + +signals: + void filterTextChanged(const QString &text); + void filterClosed(); + +private: + std::unique_ptr ui; +}; + +#endif //QUICKFILTERVIEW_H diff --git a/src/widgets/QuickFilterView.ui b/src/widgets/QuickFilterView.ui new file mode 100644 index 00000000..65bd5f85 --- /dev/null +++ b/src/widgets/QuickFilterView.ui @@ -0,0 +1,90 @@ + + + QuickFilterView + + + + 0 + 0 + 327 + 25 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Quick Filter + + + true + + + + + + + + 75 + false + true + + + + QToolButton { /* all types of tool button */ + border: 2px solid #333; + border-left: 2px solid #333; + border-right: 2px solid #333; + background-color: #333; + color: rgb(255, 255, 255) +} + +QToolButton:hover { + border: 2px solid rgb(128, 128, 128); + border-left: 2px solid rgb(128, 128, 128); + border-right: 2px solid rgb(128, 128, 128); + background-color: rgb(128, 128, 128); + color: rgb(255, 255, 255) + } + +QToolButton:pressed { + border: 2px solid #2180a9; + border-left: 2px solid #2180a9; + border-right: 2px solid #2180a9; + background-color: #2180a9; +} + + + X + + + + + + + +