15 #define GETTEXT_DOMAIN "wesnoth-lib" 42 #define DBG_CHAT_LOG LOG_STREAM(debug, log_chat_log) 43 #define LOG_CHAT_LOG LOG_STREAM(info, log_chat_log) 44 #define WRN_CHAT_LOG LOG_STREAM(warn, log_chat_log) 45 #define ERR_CHAT_LOG LOG_STREAM(err, log_chat_log) 60 , chat_log_history(r.build_chat_log())
77 static const int COUNT_PER_PAGE = 100;
92 int size = chat_log_history.size();
93 return (size % COUNT_PER_PAGE == 0) ? (size / COUNT_PER_PAGE)
94 : (size / COUNT_PER_PAGE) + 1;
107 LOG_CHAT_LOG <<
"entering chat_log::model::stream_log\n";
109 for(
const auto &
t : make_pair(chat_log_history.begin() + first,
110 chat_log_history.begin() + last))
115 if(!lcfilter.empty()) {
120 if(lcsample.find(lcfilter) == std::string::npos) {
125 const std::string me_prefix =
"/me";
126 const bool is_me =
t.text().compare(0, me_prefix.size(),
129 std::string nick_prefix, nick_suffix;
132 nick_prefix =
"<span color=\"" +
t.color() +
"\">";
133 nick_suffix =
"</span> ";
138 const std::string lbracket = raw ?
"<" :
"<";
139 const std::string rbracket = raw ?
">" :
">";
148 s << nick_prefix << lbracket;
162 s <<
t.text().substr(3);
164 s << rbracket << nick_suffix;
167 s << rbracket << nick_suffix;
181 std::ostringstream
s;
182 stream_log(s, first, last);
195 std::ostringstream
s;
196 stream_log(s, first, last,
true);
209 LOG_CHAT_LOG <<
"Entering chat_log::controller" << std::endl;
210 LOG_CHAT_LOG <<
"Exiting chat_log::controller" << std::endl;
215 LOG_CHAT_LOG <<
"Entering chat_log::controller::next_page" 223 LOG_CHAT_LOG <<
"Exiting chat_log::controller::next_page" << std::endl;
228 LOG_CHAT_LOG <<
"Entering chat_log::controller::previous_page" 236 LOG_CHAT_LOG <<
"Exiting chat_log::controller::previous_page" 242 LOG_CHAT_LOG <<
"Entering chat_log::controller::filter" << std::endl;
244 LOG_CHAT_LOG <<
"Exiting chat_log::controller::filter" << std::endl;
250 <<
"Entering chat_log::controller::handle_page_number_changed" 256 <<
"Exiting chat_log::controller::handle_page_number_changed" 268 LOG_CHAT_LOG <<
"Page: " << page + 1 <<
" of " << count_of_pages
271 const int first = page * page_size;
272 const int last = page < (count_of_pages - 1)
276 LOG_CHAT_LOG <<
"First " << first <<
", last " << last <<
'\n';
278 return std::pair(first, last);
283 LOG_CHAT_LOG <<
"Entering chat_log::controller::update_view_from_model" 287 LOG_CHAT_LOG <<
"Number of chat messages: " << size << std::endl;
290 if(select_last_page) {
297 const int first = range.first;
298 const int last = range.second;
300 bool has_next = page + 1 < count_of_pages;
301 bool has_previous = page > 0;
308 << count_of_pages << std::endl;
311 std::ostringstream cur_page_text;
312 cur_page_text << (page + 1) <<
'/' << std::max(1, count_of_pages);
315 LOG_CHAT_LOG <<
"Exiting chat_log::controller::update_view_from_model" 341 LOG_CHAT_LOG <<
"Entering chat_log::view::pre_show" << std::endl;
342 controller_.update_view_from_model(
true);
343 LOG_CHAT_LOG <<
"Exiting chat_log::view::pre_show" << std::endl;
348 controller_.handle_page_number_changed();
353 controller_.next_page();
358 controller_.previous_page();
363 controller_.filter();
368 controller_.handle_copy_button_clicked();
373 LOG_CHAT_LOG <<
"Entering chat_log::view::bind" << std::endl;
374 model_.
msg_label = find_widget<styled_widget>(&window,
"msg",
false,
true);
376 = find_widget<slider>(&window,
"page_number",
false,
true);
382 = find_widget<button>(&window,
"previous_page",
false,
true);
386 model_.
next_page = find_widget<button>(&window,
"next_page",
false,
true);
390 model_.
filter = find_widget<text_box>(&window,
"filter",
false,
true);
406 model_.
page_label = find_widget<styled_widget>(&window,
"page_label",
false,
true);
408 LOG_CHAT_LOG <<
"Exiting chat_log::view::bind" << std::endl;
419 LOG_CHAT_LOG <<
"Entering chat_log::chat_log" << std::endl;
420 view_ = std::make_shared<view>(cfg, r);
421 LOG_CHAT_LOG <<
"Exiting chat_log::chat_log" << std::endl;
431 LOG_CHAT_LOG <<
"Entering chat_log::pre_show" << std::endl;
434 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.
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
Inherited from modal_dialog.
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.
void connect_signal_notify_modified(dispatcher &dispatcher, const signal_notification_function &signal)
Connects a signal handler for getting a notification upon modification.
This file contains the settings handling of the widget library.
void connect_signal_mouse_left_click(dispatcher &dispatcher, const signal_function &signal)
Connects a signal handler for a left mouse button click.
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...
int count_of_pages() const