diff options
author | Dennis van der Schagt <dennisschagt@gmail.com> | 2024-01-21 18:45:22 +0100 |
---|---|---|
committer | Dennis van der Schagt <dennisschagt@gmail.com> | 2024-03-31 21:07:38 +0200 |
commit | b1f26395661ad8719e96dc12d1694fd73536fef2 (patch) | |
tree | fd3067dd7fc1118d664f7adf0e023866842f4a66 | |
parent | 9c2718ad18586b23d0fa8ced89275949a783eaca (diff) |
Pass StflRichText into ListWidgetBackend
-rw-r--r-- | include/dirbrowserformaction.h | 3 | ||||
-rw-r--r-- | include/filebrowserformaction.h | 3 | ||||
-rw-r--r-- | include/listwidgetbackend.h | 7 | ||||
-rw-r--r-- | include/pbview.h | 3 | ||||
-rw-r--r-- | src/dialogsformaction.cpp | 5 | ||||
-rw-r--r-- | src/dirbrowserformaction.cpp | 4 | ||||
-rw-r--r-- | src/feedlistformaction.cpp | 9 | ||||
-rw-r--r-- | src/filebrowserformaction.cpp | 4 | ||||
-rw-r--r-- | src/itemlistformaction.cpp | 9 | ||||
-rw-r--r-- | src/listwidgetbackend.cpp | 9 | ||||
-rw-r--r-- | src/pbview.cpp | 7 | ||||
-rw-r--r-- | src/selectformaction.cpp | 11 | ||||
-rw-r--r-- | src/urlviewformaction.cpp | 5 | ||||
-rw-r--r-- | test/listwidget.cpp | 9 |
14 files changed, 50 insertions, 38 deletions
diff --git a/include/dirbrowserformaction.h b/include/dirbrowserformaction.h index 787145e8..35749625 100644 --- a/include/dirbrowserformaction.h +++ b/include/dirbrowserformaction.h @@ -9,6 +9,7 @@ #include "formaction.h" #include "listformatter.h" #include "listwidget.h" +#include "stflrichtext.h" namespace newsboat { @@ -41,7 +42,7 @@ private: void add_directory(std::vector<file_system::FileSystemEntry>& id_at_position, std::string dirname); std::vector<file_system::FileSystemEntry> id_at_position; - std::vector<std::string> lines; + std::vector<StflRichText> lines; std::string get_formatted_dirname(std::string dirname, mode_t mode); diff --git a/include/filebrowserformaction.h b/include/filebrowserformaction.h index 2fb70c60..b8508ecc 100644 --- a/include/filebrowserformaction.h +++ b/include/filebrowserformaction.h @@ -9,6 +9,7 @@ #include "formaction.h" #include "listformatter.h" #include "listwidget.h" +#include "stflrichtext.h" namespace newsboat { @@ -47,7 +48,7 @@ private: std::string filename); std::string get_filename_suggestion(const std::string& s); std::vector<file_system::FileSystemEntry> id_at_position; - std::vector<std::string> lines; + std::vector<StflRichText> lines; std::string get_formatted_filename(std::string filename, mode_t mode); diff --git a/include/listwidgetbackend.h b/include/listwidgetbackend.h index f148eb97..5136dda1 100644 --- a/include/listwidgetbackend.h +++ b/include/listwidgetbackend.h @@ -9,6 +9,7 @@ #include "listformatter.h" #include "regexmanager.h" #include "stflpp.h" +#include "stflrichtext.h" namespace newsboat { @@ -26,7 +27,7 @@ public: std::uint32_t get_num_lines(); void invalidate_list_content(std::uint32_t num_lines, - std::function<std::string(std::uint32_t, std::uint32_t)> get_line_method); + std::function<StflRichText(std::uint32_t, std::uint32_t)> get_line_method); protected: virtual void on_list_changed() = 0; @@ -40,8 +41,8 @@ private: ListFormatter listfmt; std::uint32_t num_lines; std::uint32_t scroll_offset; - std::map<std::uint32_t, std::string> line_cache; - std::function<std::string(std::uint32_t, std::uint32_t)> get_formatted_line; + std::map<std::uint32_t, StflRichText> line_cache; + std::function<StflRichText(std::uint32_t, std::uint32_t)> get_formatted_line; }; } // namespace newsboat diff --git a/include/pbview.h b/include/pbview.h index 53feb789..b2fbf7f1 100644 --- a/include/pbview.h +++ b/include/pbview.h @@ -6,6 +6,7 @@ #include "listwidget.h" #include "textviewwidget.h" #include "stflpp.h" +#include "stflrichtext.h" namespace newsboat { class KeyMap; @@ -36,7 +37,7 @@ private: std::pair<double, std::string> get_speed_human_readable(double kbps); void handle_resize(); - std::string format_line(const std::string& podlist_format, + StflRichText format_line(const std::string& podlist_format, const Download& dl, unsigned int pos, unsigned int width); diff --git a/src/dialogsformaction.cpp b/src/dialogsformaction.cpp index 9654a87c..7e6a2f80 100644 --- a/src/dialogsformaction.cpp +++ b/src/dialogsformaction.cpp @@ -6,6 +6,7 @@ #include "config.h" #include "fmtstrformatter.h" #include "listformatter.h" +#include "stflrichtext.h" #include "strprintf.h" #include "utils.h" #include "view.h" @@ -31,13 +32,13 @@ void DialogsFormAction::prepare() if (do_redraw) { update_heading(); - auto render_line = [this](std::uint32_t line, std::uint32_t width) -> std::string { + auto render_line = [this](std::uint32_t line, std::uint32_t width) -> StflRichText { (void)width; const auto formaction_names = v.get_formaction_names(); const auto& fa = formaction_names[line]; const bool is_current_formaction = v.get_formaction(fa.first) == get_parent_formaction(); - return utils::quote_for_stfl( + return StflRichText::from_plaintext_string( strprintf::fmt("%4u %s %s", line + 1, is_current_formaction ? "*" : " ", diff --git a/src/dirbrowserformaction.cpp b/src/dirbrowserformaction.cpp index 0f1527b1..7cd58de6 100644 --- a/src/dirbrowserformaction.cpp +++ b/src/dirbrowserformaction.cpp @@ -247,7 +247,7 @@ void DirBrowserFormAction::prepare() add_directory(id_at_position, directory); } - auto render_line = [this](std::uint32_t line, std::uint32_t width) -> std::string { + auto render_line = [this](std::uint32_t line, std::uint32_t width) -> StflRichText { (void)width; return lines[line]; }; @@ -330,7 +330,7 @@ void DirBrowserFormAction::add_directory( group, sizestr, formatteddirname); - lines.push_back(utils::quote_for_stfl(line)); + lines.push_back(StflRichText::from_plaintext_string(line)); id_at_position.push_back(file_system::FileSystemEntry{ftype, dirname}); } } diff --git a/src/feedlistformaction.cpp b/src/feedlistformaction.cpp index d65b6aca..cab02e74 100644 --- a/src/feedlistformaction.cpp +++ b/src/feedlistformaction.cpp @@ -19,6 +19,7 @@ #include "reloader.h" #include "rssfeed.h" #include "scopemeasure.h" +#include "stflrichtext.h" #include "strprintf.h" #include "utils.h" #include "view.h" @@ -624,13 +625,15 @@ void FeedListFormAction::set_feedlist( update_visible_feeds(feeds); auto render_line = [this, feedlist_format](std::uint32_t line, - std::uint32_t width) -> std::string { + std::uint32_t width) -> StflRichText { if (line >= visible_feeds.size()) { - return "ERROR"; + return StflRichText::from_plaintext_string("ERROR"); } auto& feed = visible_feeds[line]; - return format_line(feedlist_format, feed.first, feed.second, width); + const auto formatted_line = format_line(feedlist_format, feed.first, feed.second, width); + // TODO: Propagate usage of StflRichText + return StflRichText::from_quoted(formatted_line); }; list.invalidate_list_content(visible_feeds.size(), render_line); diff --git a/src/filebrowserformaction.cpp b/src/filebrowserformaction.cpp index 4266492d..2deaeb5a 100644 --- a/src/filebrowserformaction.cpp +++ b/src/filebrowserformaction.cpp @@ -273,7 +273,7 @@ void FileBrowserFormAction::prepare() } - auto render_line = [this](std::uint32_t line, std::uint32_t width) -> std::string { + auto render_line = [this](std::uint32_t line, std::uint32_t width) -> StflRichText { (void)width; return lines[line]; }; @@ -354,7 +354,7 @@ void FileBrowserFormAction::add_file( group, sizestr, formattedfilename); - lines.push_back(utils::quote_for_stfl(line)); + lines.push_back(StflRichText::from_plaintext_string(line)); id_at_position.push_back(file_system::FileSystemEntry{ftype, filename}); } } diff --git a/src/itemlistformaction.cpp b/src/itemlistformaction.cpp index f3aa10b1..d012f853 100644 --- a/src/itemlistformaction.cpp +++ b/src/itemlistformaction.cpp @@ -21,6 +21,7 @@ #include "matcherexception.h" #include "rssfeed.h" #include "scopemeasure.h" +#include "stflrichtext.h" #include "strprintf.h" #include "utils.h" #include "view.h" @@ -1072,13 +1073,15 @@ void ItemListFormAction::draw_items() cfg->get_configvalue("articlelist-format"); auto render_line = [this, itemlist_format, datetime_format](std::uint32_t line, - std::uint32_t width) -> std::string { + std::uint32_t width) -> StflRichText { if (line >= visible_items.size()) { - return "ERROR"; + return StflRichText::from_plaintext_string("ERROR"); } auto& item = visible_items[line]; - return item2formatted_line(item, width, itemlist_format, datetime_format); + const auto formatted_line = item2formatted_line(item, width, itemlist_format, datetime_format); + // TODO: Propagate usage of StflRichText + return StflRichText::from_quoted(formatted_line); }; list.invalidate_list_content(visible_items.size(), render_line); diff --git a/src/listwidgetbackend.cpp b/src/listwidgetbackend.cpp index 31331992..ca7549a3 100644 --- a/src/listwidgetbackend.cpp +++ b/src/listwidgetbackend.cpp @@ -55,7 +55,7 @@ std::uint32_t ListWidgetBackend::get_num_lines() } void ListWidgetBackend::invalidate_list_content(std::uint32_t line_count, - std::function<std::string(std::uint32_t, std::uint32_t)> get_line_method) + std::function<StflRichText(std::uint32_t, std::uint32_t)> get_line_method) { line_cache.clear(); get_formatted_line = get_line_method; @@ -85,15 +85,14 @@ void ListWidgetBackend::render() listfmt.clear(); for (std::uint32_t i = 0; i < visible_content_lines; ++i) { const std::uint32_t line = scroll_offset + i; - std::string formatted_line = "NO FORMATTER DEFINED"; + auto formatted_line = StflRichText::from_plaintext_string("NO FORMATTER DEFINED"); if (line_cache.count(line) >= 1) { - formatted_line = line_cache[line]; + formatted_line = line_cache.at(line); } else if (get_formatted_line) { formatted_line = get_formatted_line(line, viewport_width); line_cache.insert({line, formatted_line}); } - // TODO: Propagate usage of StflRichText - listfmt.add_line(StflRichText::from_quoted(formatted_line)); + listfmt.add_line(formatted_line); } form.modify(list_name, "replace_inner", listfmt.format_list()); diff --git a/src/pbview.cpp b/src/pbview.cpp index 1f2926dc..8fe483e8 100644 --- a/src/pbview.cpp +++ b/src/pbview.cpp @@ -90,7 +90,7 @@ void PbView::run(bool auto_download, bool wrap_scroll) dllist_form.run(-3); // compute all widget dimensions auto render_line = [this, line_format](std::uint32_t line, - std::uint32_t width) -> std::string { + std::uint32_t width) -> StflRichText { const auto& downloads = ctrl.downloads(); const auto& dl = downloads.at(line); return format_line(line_format, dl, line, width); @@ -395,7 +395,7 @@ void PbView::set_dllist_keymap_hint() dllist_form.set("help", keymap_hint); } -std::string PbView::format_line(const std::string& podlist_format, +StflRichText PbView::format_line(const std::string& podlist_format, const Download& dl, unsigned int pos, unsigned int width) @@ -419,8 +419,7 @@ std::string PbView::format_line(const std::string& podlist_format, fmt.register_fmt('b', strprintf::fmt("%s", dl.basename())); auto formattedLine = fmt.do_format(podlist_format, width); - formattedLine = utils::quote_for_stfl(formattedLine); - return formattedLine; + return StflRichText::from_plaintext_string(formattedLine); } } // namespace podboat diff --git a/src/selectformaction.cpp b/src/selectformaction.cpp index 0bf153fe..43e98365 100644 --- a/src/selectformaction.cpp +++ b/src/selectformaction.cpp @@ -9,6 +9,7 @@ #include "controller.h" #include "fmtstrformatter.h" #include "listformatter.h" +#include "stflrichtext.h" #include "strprintf.h" #include "utils.h" #include "view.h" @@ -143,15 +144,15 @@ void SelectFormAction::prepare() const auto selecttag_format = cfg->get_configvalue("selecttag-format"); std::uint32_t num_lines = 0; - std::function<std::string(std::uint32_t, std::uint32_t)> render_line; + std::function<StflRichText(std::uint32_t, std::uint32_t)> render_line; switch (type) { case SelectionType::TAG: num_lines = tags.size(); render_line = [this, selecttag_format](std::uint32_t line, - std::uint32_t width) -> std::string { + std::uint32_t width) -> StflRichText { const auto& tag = tags[line]; - return utils::quote_for_stfl( + return StflRichText::from_plaintext_string( format_line(selecttag_format, tag, line + 1, @@ -160,10 +161,10 @@ void SelectFormAction::prepare() break; case SelectionType::FILTER: num_lines = filters.size(); - render_line = [this](std::uint32_t line, std::uint32_t width) -> std::string { + render_line = [this](std::uint32_t line, std::uint32_t width) -> StflRichText { (void)width; const auto& filter = filters[line]; - return utils::quote_for_stfl( + return StflRichText::from_plaintext_string( strprintf::fmt( "%4u %s", line + 1, diff --git a/src/urlviewformaction.cpp b/src/urlviewformaction.cpp index 398a7172..79453ef8 100644 --- a/src/urlviewformaction.cpp +++ b/src/urlviewformaction.cpp @@ -7,6 +7,7 @@ #include "fmtstrformatter.h" #include "listformatter.h" #include "rssfeed.h" +#include "stflrichtext.h" #include "strprintf.h" #include "utils.h" #include "view.h" @@ -125,10 +126,10 @@ void UrlViewFormAction::prepare() if (do_redraw) { update_heading(); - auto render_line = [this](std::uint32_t line, std::uint32_t width) -> std::string { + auto render_line = [this](std::uint32_t line, std::uint32_t width) -> StflRichText { (void)width; const auto& link = links[line]; - return utils::quote_for_stfl(strprintf::fmt("%2u %s", line + 1, link.url)); + return StflRichText::from_plaintext_string(strprintf::fmt("%2u %s", line + 1, link.url)); }; urls_list.invalidate_list_content(links.size(), render_line); diff --git a/test/listwidget.cpp b/test/listwidget.cpp index 3a76fbc4..9d374103 100644 --- a/test/listwidget.cpp +++ b/test/listwidget.cpp @@ -1,6 +1,7 @@ #include "listwidget.h" #include "stflpp.h" +#include "stflrichtext.h" #include "utils.h" #include "3rd-party/catch.hpp" @@ -17,9 +18,9 @@ const static std::string stflListForm = " pos[list-name_pos]:0\n" " offset[list-name_offset]:0"; -std::string render_empty_line(std::uint32_t, std::uint32_t) +StflRichText render_empty_line(std::uint32_t, std::uint32_t) { - return ""; + return StflRichText::from_plaintext_string(""); } @@ -101,9 +102,9 @@ TEST_CASE("invalidate_list_content() clears internal caches", "[ListWidget]") ListWidget listWidget("list-name", listForm, scrolloff); std::set<std::uint32_t> requested_lines; - auto render_line = [&](std::uint32_t line, std::uint32_t) -> std::string { + auto render_line = [&](std::uint32_t line, std::uint32_t) -> StflRichText { requested_lines.insert(line); - return ""; + return StflRichText::from_plaintext_string(""); }; GIVEN("a ListWidget with 3 lines") { |