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;
108 LOG_CHAT_LOG <<
"entering chat_log::model::stream_log\n";
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);
210 LOG_CHAT_LOG <<
"Entering chat_log::controller" << std::endl;
211 LOG_CHAT_LOG <<
"Exiting chat_log::controller" << std::endl;
216 LOG_CHAT_LOG <<
"Entering chat_log::controller::next_page" 224 LOG_CHAT_LOG <<
"Exiting chat_log::controller::next_page" << std::endl;
229 LOG_CHAT_LOG <<
"Entering chat_log::controller::previous_page" 237 LOG_CHAT_LOG <<
"Exiting chat_log::controller::previous_page" 243 LOG_CHAT_LOG <<
"Entering chat_log::controller::filter" << std::endl;
245 LOG_CHAT_LOG <<
"Exiting chat_log::controller::filter" << std::endl;
251 <<
"Entering chat_log::controller::handle_page_number_changed" 257 <<
"Exiting chat_log::controller::handle_page_number_changed" 269 LOG_CHAT_LOG <<
"Page: " << page + 1 <<
" of " << count_of_pages
272 const int first = page * page_size;
273 const int last = page < (count_of_pages - 1)
277 LOG_CHAT_LOG <<
"First " << first <<
", last " << last <<
'\n';
279 return std::pair(first, last);
284 LOG_CHAT_LOG <<
"Entering chat_log::controller::update_view_from_model" 288 LOG_CHAT_LOG <<
"Number of chat messages: " << size << std::endl;
291 if(select_last_page) {
298 const int first = range.first;
299 const int last = range.second;
301 bool has_next = page + 1 < count_of_pages;
302 bool has_previous = page > 0;
309 << count_of_pages << std::endl;
312 std::ostringstream cur_page_text;
313 cur_page_text << (page + 1) <<
'/' << std::max(1, count_of_pages);
316 LOG_CHAT_LOG <<
"Exiting chat_log::controller::update_view_from_model" 342 LOG_CHAT_LOG <<
"Entering chat_log::view::pre_show" << std::endl;
343 controller_.update_view_from_model(
true);
344 LOG_CHAT_LOG <<
"Exiting chat_log::view::pre_show" << std::endl;
349 controller_.handle_page_number_changed();
354 controller_.next_page();
359 controller_.previous_page();
364 controller_.filter();
369 controller_.handle_copy_button_clicked();
374 LOG_CHAT_LOG <<
"Entering chat_log::view::bind" << std::endl;
375 model_.
msg_label = find_widget<styled_widget>(&window,
"msg",
false,
true);
377 = find_widget<slider>(&window,
"page_number",
false,
true);
383 = find_widget<button>(&window,
"previous_page",
false,
true);
387 model_.
next_page = find_widget<button>(&window,
"next_page",
false,
true);
391 model_.
filter = find_widget<text_box>(&window,
"filter",
false,
true);
407 model_.
page_label = find_widget<styled_widget>(&window,
"page_label",
false,
true);
409 LOG_CHAT_LOG <<
"Exiting chat_log::view::bind" << std::endl;
420 LOG_CHAT_LOG <<
"Entering chat_log::chat_log" << std::endl;
421 view_ = std::make_shared<view>(cfg, r);
422 LOG_CHAT_LOG <<
"Exiting chat_log::chat_log" << std::endl;
432 LOG_CHAT_LOG <<
"Entering chat_log::pre_show" << std::endl;
435 LOG_CHAT_LOG <<
"Exiting chat_log::pre_show" << std::endl;
#define REGISTER_DIALOG(window_id)
Wrapper for REGISTER_DIALOG2.
void set_text_changed_callback(std::function< void(text_box_base *textbox, const std::string text)> cb)
Set the text_changed callback.
std::shared_ptr< view > view_
void handle_copy_button_clicked(window &)
bool available()
Whether wesnoth was compiled with support for a clipboard.
void connect_signal_mouse_left_click(dispatcher &dispatcher, const signal &signal)
Connects a signal handler for a left mouse button click.
std::string get_value() const
void chat_message_list_to_clipboard(int first, int last)
static lg::log_domain log_chat_log("chat_log")
std::pair< int, int > calculate_log_line_range()
static std::string _(const char *str)
virtual void pre_show(window &window) override
Actions to be taken before showing the window.
styled_widget * msg_label
static const int COUNT_PER_PAGE
Class for a single line text area.
styled_widget * page_label
virtual void set_active(const bool active) override
See styled_widget::set_active.
void populate_chat_message_list(int first, int last)
void set_value_range(int min_value, int max_value)
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.
model(const vconfig &c, const replay &r)
std::shared_ptr< view > get_view() const
void handle_page_number_changed()
std::string escape_text(const std::string &text)
Escapes the pango markup characters in a text.
void clear_chat_msg_list()
view(const vconfig &cfg, const replay &r)
static map_location::DIRECTION s
const std::vector< chat_msg > & chat_log_history
std::string lowercase(const std::string &s)
Returns a lowercased version of the string.
virtual int get_value() const override
Inherited from integer_selector.
std::string get_chat_timestamp(const std::time_t &t)
void update_view_from_model(bool select_last_page=false)
void bind(window &window)
void copy_to_clipboard(const std::string &text, const bool)
Copies text to the clipboard.
void stream_log(std::ostringstream &s, int first, int last, bool raw=false)
chat_log(const vconfig &cfg, const replay &replay)
A slider is a control that can select a value by moving a grip on a groove.
A variable-expanding proxy for the config class.
Standard logging facilities (interface).
virtual void set_value(int value) override
Inherited from integer_selector.
void handle_page_number_changed()
void handle_copy_button_clicked()
base class of top level items, the only item which needs to store the final canvases to draw on...
void connect_signal_notify_modified(dispatcher &dispatcher, const signal_notification &signal)
Connects a signal handler for getting a notification upon modification.
int count_of_pages() const