Skip to content

Commit

Permalink
#5745: ResourceTreeView Toolbar: Apply the filter text after a short …
Browse files Browse the repository at this point in the history
…delay
  • Loading branch information
codereader committed Oct 29, 2021
1 parent ebafb24 commit f5ec51c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 16 deletions.
46 changes: 31 additions & 15 deletions libs/wxutil/dataview/ResourceTreeViewToolbar.cpp
Expand Up @@ -10,12 +10,18 @@
namespace wxutil
{

namespace
{
constexpr const int APPLY_FILTER_TEXT_DELAY_MSEC = 400;
}

ResourceTreeViewToolbar::ResourceTreeViewToolbar(wxWindow* parent, ResourceTreeView* treeView) :
wxPanel(parent, wxID_ANY),
_treeView(nullptr),
_filterEntry(nullptr),
_showAll(nullptr),
_showFavourites(nullptr)
_showFavourites(nullptr),
_applyFilterTimer(this)
{
auto* grid = new wxFlexGridSizer(2);
grid->AddGrowableCol(1);
Expand Down Expand Up @@ -74,6 +80,8 @@ ResourceTreeViewToolbar::ResourceTreeViewToolbar(wxWindow* parent, ResourceTreeV
grid->Add(_rightSizer, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT, 6);

AssociateToTreeView(treeView);

Bind(wxEVT_TIMER, &ResourceTreeViewToolbar::_onFilterTimeoutReached, this);
}

wxSizer* ResourceTreeViewToolbar::GetLeftSizer()
Expand Down Expand Up @@ -106,6 +114,7 @@ void ResourceTreeViewToolbar::AssociateToTreeView(ResourceTreeView* treeView)

void ResourceTreeViewToolbar::ClearFilter()
{
_applyFilterTimer.Stop();
_filterEntry->SetValue("");

if (_treeView != nullptr)
Expand Down Expand Up @@ -166,20 +175,8 @@ void ResourceTreeViewToolbar::HandleFilterEntryChanged()
return;
}

auto filterText = _filterEntry->GetValue();
bool filterResult = _treeView->SetFilterText(filterText);

if (!filterText.empty() && !filterResult)
{
// No match, set the text to red for user feedback
_filterEntry->SetForegroundColour(wxColor(220, 0, 0));
}
else
{
_filterEntry->SetForegroundColour(wxNullColour);
}

_filterEntry->Refresh();
// Put in a slight delay before actually firing off the search (#5745)
_applyFilterTimer.Start(APPLY_FILTER_TEXT_DELAY_MSEC, true);
}

void ResourceTreeViewToolbar::_onFilterButtonToggled(wxCommandEvent& ev)
Expand All @@ -198,6 +195,7 @@ void ResourceTreeViewToolbar::_onTreeViewFilterTextCleared(wxCommandEvent& ev)
{
// Tree view cleared the filter, clear our entry box
_filterEntry->Clear();
_applyFilterTimer.Stop();
ev.Skip();
}

Expand All @@ -210,4 +208,22 @@ void ResourceTreeViewToolbar::UpdateFromTreeView()
_showFavourites->SetValue(mode == ResourceTreeView::TreeMode::ShowFavourites);
}

void ResourceTreeViewToolbar::_onFilterTimeoutReached(wxTimerEvent& ev)
{
auto filterText = _filterEntry->GetValue();
bool filterResult = _treeView->SetFilterText(filterText);

if (!filterText.empty() && !filterResult)
{
// No match, set the text to red for user feedback
_filterEntry->SetForegroundColour(wxColor(220, 0, 0));
}
else
{
_filterEntry->SetForegroundColour(wxNullColour);
}

_filterEntry->Refresh();
}

}
6 changes: 5 additions & 1 deletion libs/wxutil/dataview/ResourceTreeViewToolbar.h
Expand Up @@ -3,6 +3,7 @@
#include <wx/panel.h>
#include <wx/radiobut.h>
#include <wx/bmpbuttn.h>
#include <wx/timer.h>

#include "ResourceTreeView.h"

Expand All @@ -29,6 +30,8 @@ class ResourceTreeViewToolbar :
wxSizer* _leftSizer;
wxSizer* _rightSizer;

wxTimer _applyFilterTimer;

public:
ResourceTreeViewToolbar(wxWindow* parent, ResourceTreeView* treeView = nullptr);

Expand All @@ -52,7 +55,8 @@ class ResourceTreeViewToolbar :
void _onEntryText(wxCommandEvent& ev);
void _onFilterButtonToggled(wxCommandEvent& ev);
void _onTreeViewFilterTextCleared(wxCommandEvent& ev);

void _onFilterTimeoutReached(wxTimerEvent& ev);

void HandleFilterEntryChanged();
void UpdateFromTreeView();
};
Expand Down

0 comments on commit f5ec51c

Please sign in to comment.