summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDennis van der Schagt <dennisschagt@gmail.com>2024-01-21 18:45:22 +0100
committerDennis van der Schagt <dennisschagt@gmail.com>2024-03-31 21:07:38 +0200
commitb1f26395661ad8719e96dc12d1694fd73536fef2 (patch)
treefd3067dd7fc1118d664f7adf0e023866842f4a66
parent9c2718ad18586b23d0fa8ced89275949a783eaca (diff)
Pass StflRichText into ListWidgetBackend
-rw-r--r--include/dirbrowserformaction.h3
-rw-r--r--include/filebrowserformaction.h3
-rw-r--r--include/listwidgetbackend.h7
-rw-r--r--include/pbview.h3
-rw-r--r--src/dialogsformaction.cpp5
-rw-r--r--src/dirbrowserformaction.cpp4
-rw-r--r--src/feedlistformaction.cpp9
-rw-r--r--src/filebrowserformaction.cpp4
-rw-r--r--src/itemlistformaction.cpp9
-rw-r--r--src/listwidgetbackend.cpp9
-rw-r--r--src/pbview.cpp7
-rw-r--r--src/selectformaction.cpp11
-rw-r--r--src/urlviewformaction.cpp5
-rw-r--r--test/listwidget.cpp9
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") {