gui2/logging: Add filtering functionality
To make it easier to find log domains among the giant list.
This commit is contained in:
parent
d186a8ba15
commit
c9747c0db5
3 changed files with 88 additions and 7 deletions
|
@ -127,13 +127,42 @@ _ "Disable logging"#enddef
|
|||
[grid]
|
||||
[row]
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
[label]
|
||||
definition = "title"
|
||||
label = _ "Logging Options"
|
||||
[/label]
|
||||
horizontal_grow = true
|
||||
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
vertical_alignment = "top"
|
||||
|
||||
[label]
|
||||
definition = "title"
|
||||
label = _ "Logging Options"
|
||||
[/label]
|
||||
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "right"
|
||||
|
||||
[text_box]
|
||||
id = "filter_box"
|
||||
definition = "default"
|
||||
{FILTER_TEXT_BOX_HINT}
|
||||
[/text_box]
|
||||
|
||||
[/column]
|
||||
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
[/column]
|
||||
[/row]
|
||||
|
||||
|
|
|
@ -15,10 +15,12 @@
|
|||
|
||||
#include "gui/dialogs/log_settings.hpp"
|
||||
|
||||
#include "gettext.hpp"
|
||||
#include "gui/auxiliary/find_widget.hpp"
|
||||
#include "gui/widgets/grid.hpp"
|
||||
#include "gui/widgets/listbox.hpp"
|
||||
#include "gui/widgets/settings.hpp"
|
||||
#include "gui/widgets/text_box.hpp"
|
||||
#include "gui/widgets/toggle_button.hpp"
|
||||
#include "gui/widgets/window.hpp"
|
||||
|
||||
|
@ -32,6 +34,7 @@ namespace dialogs
|
|||
REGISTER_DIALOG(log_settings)
|
||||
|
||||
log_settings::log_settings()
|
||||
: last_words_()
|
||||
{
|
||||
//list of names must match those in logging.cfg
|
||||
widget_id_.push_back("none");
|
||||
|
@ -85,6 +88,49 @@ void log_settings::pre_show(window& window)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
text_box* filter = find_widget<text_box>(&window, "filter_box", false, true);
|
||||
filter->set_text_changed_callback(std::bind(&log_settings::filter_text_changed, this, _1, _2));
|
||||
|
||||
window.keyboard_capture(filter);
|
||||
window.add_to_keyboard_chain(&logger_box);
|
||||
}
|
||||
|
||||
void log_settings::filter_text_changed(text_box_base* textbox, const std::string& text)
|
||||
{
|
||||
window& window = *textbox->get_window();
|
||||
listbox& list = find_widget<listbox>(&window, "logger_listbox", false);
|
||||
|
||||
const std::vector<std::string> words = utils::split(text, ' ');
|
||||
|
||||
if(words == last_words_) {
|
||||
return;
|
||||
}
|
||||
|
||||
last_words_ = words;
|
||||
|
||||
boost::dynamic_bitset<> show_items;
|
||||
show_items.resize(list.get_item_count(), true);
|
||||
|
||||
if(!text.empty()) {
|
||||
for(unsigned int i = 0; i < list.get_item_count(); i++) {
|
||||
assert(i < domain_list_.size());
|
||||
|
||||
bool found = false;
|
||||
|
||||
for(const auto& word : words)
|
||||
{
|
||||
found = translation::ci_search(domain_list_[i], word);
|
||||
if(!found) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
show_items[i] = found;
|
||||
}
|
||||
}
|
||||
|
||||
list.set_row_shown(show_items);
|
||||
}
|
||||
|
||||
void log_settings::post_show(window& /*window*/)
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
namespace gui2
|
||||
{
|
||||
class text_box_base;
|
||||
|
||||
namespace dialogs
|
||||
{
|
||||
|
||||
|
@ -50,6 +52,10 @@ private:
|
|||
/** Inherited from modal_dialog. */
|
||||
virtual void post_show(window& window) override;
|
||||
|
||||
void filter_text_changed(text_box_base* textbox, const std::string& text);
|
||||
|
||||
std::vector<std::string> last_words_;
|
||||
|
||||
};
|
||||
|
||||
} // namespace dialogs
|
||||
|
|
Loading…
Add table
Reference in a new issue