From 5068d34c08f951a7ea6257d305a1627b09a95817 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 19:44:55 +0200 Subject: Adding upstream version 0.11.1. Signed-off-by: Daniel Baumann --- src/breadcrumb_curses.hh | 107 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/breadcrumb_curses.hh (limited to 'src/breadcrumb_curses.hh') diff --git a/src/breadcrumb_curses.hh b/src/breadcrumb_curses.hh new file mode 100644 index 0000000..06218c3 --- /dev/null +++ b/src/breadcrumb_curses.hh @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2022, Timothy Stack + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Timothy Stack nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef lnav_breadcrumb_curses_hh +#define lnav_breadcrumb_curses_hh + +#include +#include +#include + +#include "plain_text_source.hh" +#include "textview_curses.hh" +#include "view_curses.hh" + +class breadcrumb_curses : public view_curses { +public: + breadcrumb_curses(); + + void set_y(int y) + { + this->bc_y = y; + this->bc_match_view.set_y(y + 1); + } + + int get_y() const { return this->bc_y; } + + void set_window(WINDOW* win) + { + this->bc_window = win; + this->bc_match_view.set_window(win); + } + + void set_line_source(std::function()> ls) + { + this->bc_line_source = std::move(ls); + } + + void focus(); + void blur(); + + bool handle_key(int ch); + + void do_update() override; + + void reload_data(); + +private: + class search_overlay_source : public list_overlay_source { + public: + bool list_value_for_overlay(const listview_curses& lv, + int y, + int bottom, + vis_line_t line, + attr_line_t& value_out) override; + + breadcrumb_curses* sos_parent{nullptr}; + }; + + enum class perform_behavior_t { + always, + if_different, + }; + + void perform_selection(perform_behavior_t behavior); + + WINDOW* bc_window{nullptr}; + std::function()> bc_line_source; + int bc_y{0}; + std::vector bc_focused_crumbs; + nonstd::optional bc_selected_crumb; + nonstd::optional bc_last_selected_crumb; + std::vector bc_possible_values; + std::vector bc_similar_values; + std::string bc_current_search; + + plain_text_source bc_match_source; + search_overlay_source bc_match_search_overlay; + textview_curses bc_match_view; +}; + +#endif -- cgit v1.2.3