16 #define GETTEXT_DOMAIN "wesnoth-lib"
43 #define DBG_CHAT_LOG LOG_STREAM(debug, log_chat_log)
44 #define LOG_CHAT_LOG LOG_STREAM(info, log_chat_log)
45 #define WRN_CHAT_LOG LOG_STREAM(warn, log_chat_log)
46 #define ERR_CHAT_LOG LOG_STREAM(err, log_chat_log)
61 , chat_log_history(r.build_chat_log())
78 static const int COUNT_PER_PAGE = 100;
93 int size = chat_log_history.size();
94 return (
size % COUNT_PER_PAGE == 0) ? (
size / COUNT_PER_PAGE)
95 : (
size / COUNT_PER_PAGE) + 1;
110 for(
const auto &
t : make_pair(chat_log_history.begin() + first,
111 chat_log_history.begin() + last))
116 if(!lcfilter.empty()) {
121 if(lcsample.find(lcfilter) == std::string::npos) {
126 const std::string me_prefix =
"/me";
127 const bool is_me =
t.text().compare(0, me_prefix.size(),
130 std::string nick_prefix, nick_suffix;
133 nick_prefix =
"<span color=\"" +
t.color() +
"\">";
134 nick_suffix =
"</span> ";
139 const std::string lbracket = raw ?
"<" :
"<";
140 const std::string rbracket = raw ?
">" :
">";
149 s << nick_prefix << lbracket;
163 s <<
t.text().substr(3);
165 s << rbracket << nick_suffix;
168 s << rbracket << nick_suffix;
182 std::ostringstream
s;
183 stream_log(
s, first, last);
196 std::ostringstream
s;
197 stream_log(
s, first, last,
true);
216 LOG_CHAT_LOG <<
"Entering chat_log::controller::next_page";
223 LOG_CHAT_LOG <<
"Exiting chat_log::controller::next_page";
228 LOG_CHAT_LOG <<
"Entering chat_log::controller::previous_page";
235 LOG_CHAT_LOG <<
"Exiting chat_log::controller::previous_page";
240 LOG_CHAT_LOG <<
"Entering chat_log::controller::filter";
248 <<
"Entering chat_log::controller::handle_page_number_changed";
253 <<
"Exiting chat_log::controller::handle_page_number_changed";
264 LOG_CHAT_LOG <<
"Page: " << page + 1 <<
" of " << count_of_pages;
266 const int first = page * page_size;
267 const int last = page < (count_of_pages - 1)
273 return std::pair(first, last);
279 <<
"Entering chat_log::controller::update_view_from_model";
285 if(select_last_page) {
292 const int first = range.first;
293 const int last = range.second;
295 bool has_next = page + 1 < count_of_pages;
296 bool has_previous = page > 0;
303 <<
"Maximum value of page number slider: " << count_of_pages;
306 std::ostringstream cur_page_text;
307 cur_page_text << (page + 1) <<
'/' << std::max(1, count_of_pages);
311 <<
"Exiting chat_log::controller::update_view_from_model";
371 = find_widget<slider>(&
window,
"page_number",
false,
true);
377 = find_widget<button>(&
window,
"previous_page",
false,
true);
417 view_ = std::make_shared<view>(cfg, r);
void handle_page_number_changed()
void update_view_from_model(bool select_last_page=false)
void handle_copy_button_clicked()
std::pair< int, int > calculate_log_line_range()
static const int COUNT_PER_PAGE
styled_widget * page_label
void populate_chat_message_list(int first, int last)
void chat_message_list_to_clipboard(int first, int last)
void clear_chat_msg_list()
model(const vconfig &c, const replay &r)
const std::vector< chat_msg > & chat_log_history
int count_of_pages() const
void stream_log(std::ostringstream &s, int first, int last, bool raw=false)
styled_widget * msg_label
void handle_copy_button_clicked(window &)
void handle_page_number_changed()
view(const vconfig &cfg, const replay &r)
void bind(window &window)
std::shared_ptr< view > get_view() const
chat_log(const vconfig &cfg, const replay &replay)
virtual void pre_show(window &window) override
Actions to be taken before showing the window.
std::shared_ptr< view > view_
Abstract base class for all modal dialogs.
virtual void set_active(const bool active) override
See styled_widget::set_active.
A slider is a control that can select a value by moving a grip on a groove.
virtual void set_value(int value) override
Inherited from integer_selector.
void set_value_range(int min_value, int max_value)
virtual int get_value() const override
Inherited from integer_selector.
std::string get_value() const
void set_text_changed_callback(std::function< void(text_box_base *textbox, const std::string text)> cb)
Set the text_changed callback.
Class for a single line text area.
base class of top level items, the only item which needs to store the final canvases to draw on.
void keyboard_capture(widget *widget)
A variable-expanding proxy for the config class.
static std::string _(const char *str)
static lg::log_domain log_chat_log("chat_log")
Standard logging facilities (interface).
#define REGISTER_DIALOG(window_id)
Wrapper for REGISTER_DIALOG2.
void copy_to_clipboard(const std::string &text, const bool)
Copies text to the clipboard.
bool available()
Whether wesnoth was compiled with support for a clipboard.
std::string escape_text(const std::string &text)
Escapes the pango markup characters in a text.
void connect_signal_notify_modified(dispatcher &dispatcher, const signal_notification &signal)
Connects a signal handler for getting a notification upon modification.
void connect_signal_mouse_left_click(dispatcher &dispatcher, const signal &signal)
Connects a signal handler for a left mouse button click.
std::string get_chat_timestamp(const std::time_t &t)
std::string lowercase(const std::string &s)
Returns a lowercased version of the string.
std::size_t size(const std::string &str)
Length in characters of a UTF-8 string.
This file contains the settings handling of the widget library.
static map_location::DIRECTION s