本文整理汇总了C++中twindow::add_to_keyboard_chain方法的典型用法代码示例。如果您正苦于以下问题:C++ twindow::add_to_keyboard_chain方法的具体用法?C++ twindow::add_to_keyboard_chain怎么用?C++ twindow::add_to_keyboard_chain使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类twindow
的用法示例。
在下文中一共展示了twindow::add_to_keyboard_chain方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pre_show
void tmp_method_selection::pre_show(CVideo& /*video*/, twindow& window)
{
user_name_ = preferences::login();
ttext_box* user_widget = find_widget<ttext_box>(
&window, "user_name", false, true);
user_widget->set_value(user_name_);
user_widget->set_maximum_length(mp::max_login_size);
window.keyboard_capture(user_widget);
tlistbox* list = find_widget<tlistbox>(&window, "method_list", false, true);
window.add_to_keyboard_chain(list);
}
示例2: pre_show
/**
* @todo This function enables the wml markup for all items, but the interface
* is a bit hacky. Especially the fiddling in the internals of the listbox is
* ugly. There needs to be a clean interface to set whether a widget has a
* markup and what kind of markup. These fixes will be post 1.6.
*/
void twml_message_::pre_show(CVideo& /*video*/, twindow& window)
{
window.canvas(1).set_variable("portrait_image", variant(portrait_));
window.canvas(1).set_variable("portrait_mirror", variant(mirror_));
// Set the markup
tlabel& title = find_widget<tlabel>(&window, "title", false);
title.set_label(title_);
title.set_use_markup(true);
title.set_can_wrap(true);
tcontrol& message = find_widget<tcontrol>(&window, "message", false);
message.set_label(message_);
message.set_use_markup(true);
// The message label might not always be a scroll_label but the capturing
// shouldn't hurt.
window.keyboard_capture(&message);
// Find the input box related fields.
tlabel& caption = find_widget<tlabel>(&window, "input_caption", false);
ttext_box& input = find_widget<ttext_box>(&window, "input", true);
if(has_input_) {
caption.set_label(input_caption_);
caption.set_use_markup(true);
input.set_value(*input_text_);
input.set_maximum_length(input_maximum_length_);
window.keyboard_capture(&input);
window.set_click_dismiss(false);
window.set_escape_disabled(true);
} else {
caption.set_visible(twidget::tvisible::invisible);
input.set_visible(twidget::tvisible::invisible);
}
// Find the option list related fields.
tlistbox& options = find_widget<tlistbox>(&window, "input_list", true);
if(!option_list_.empty()) {
std::map<std::string, string_map> data;
for(size_t i = 0; i < option_list_.size(); ++i) {
/**
* @todo This syntax looks like a bad hack, it would be nice to write
* a new syntax which doesn't use those hacks (also avoids the problem
* with special meanings for certain characters.
*/
tlegacy_menu_item item(option_list_[i]);
if(item.is_default()) {
// Number of items hasn't been increased yet so i is ok.
*chosen_option_ = i;
}
// Add the data.
data["icon"]["label"] = item.icon();
data["label"]["label"] = item.label();
data["label"]["use_markup"] = "true";
data["description"]["label"] = item.description();
data["description"]["use_markup"] = "true";
options.add_row(data);
}
// Avoid negative and 0 since item 0 is already selected.
if(*chosen_option_ > 0
&& static_cast<size_t>(*chosen_option_)
< option_list_.size()) {
options.select_row(*chosen_option_);
}
if(!has_input_) {
window.keyboard_capture(&options);
window.set_click_dismiss(false);
window.set_escape_disabled(true);
} else {
window.add_to_keyboard_chain(&options);
// click_dismiss has been disabled due to the input.
}
} else {
options.set_visible(twidget::tvisible::invisible);
}
window.set_click_dismiss(!has_input_ && option_list_.empty());
}
示例3: pre_show
void tunit_create::pre_show(twindow& window)
{
ttoggle_button& male_toggle
= find_widget<ttoggle_button>(&window, "male_toggle", false);
ttoggle_button& female_toggle
= find_widget<ttoggle_button>(&window, "female_toggle", false);
gender_toggle.add_member(&male_toggle, unit_race::MALE);
gender_toggle.add_member(&female_toggle, unit_race::FEMALE);
gender_toggle.set_member_states(last_gender);
gender_toggle.set_callback_on_value_change(
dialog_callback<tunit_create, &tunit_create::gender_toggle_callback>);
tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);
ttext_box* filter
= find_widget<ttext_box>(&window, "filter_box", false, true);
filter->set_text_changed_callback(
std::bind(&tunit_create::filter_text_changed, this, _1, _2));
window.keyboard_capture(filter);
window.add_to_keyboard_chain(&list);
#ifdef GUI2_EXPERIMENTAL_LISTBOX
connect_signal_notify_modified(*list,
std::bind(&tunit_create::list_item_clicked,
*this,
std::ref(window)));
#else
list.set_callback_value_change(
dialog_callback<tunit_create, &tunit_create::list_item_clicked>);
#endif
list.clear();
for(const auto & i : unit_types.types())
{
if(i.second.do_not_list())
continue;
// Make sure this unit type is built with the data we need.
unit_types.build_unit_type(i.second, unit_type::FULL);
units_.push_back(&i.second);
std::map<std::string, string_map> row_data;
string_map column;
column["label"] = units_.back()->race()->plural_name();
row_data.emplace("race", column);
column["label"] = units_.back()->type_name();
row_data.emplace("unit_type", column);
list.add_row(row_data);
// Select the previous choice, if any.
if(choice_.empty() != true && choice_ == i.first) {
list.select_row(list.get_item_count() - 1);
}
}
if(units_.empty()) {
ERR_GUI_G << "no unit types found for unit create dialog; not good"
<< std::endl;
}
list.register_sorting_option(0, [this](const int i) { return (*units_[i]).race()->plural_name().str(); });
list.register_sorting_option(1, [this](const int i) { return (*units_[i]).type_name().str(); });
list_item_clicked(window);
}
示例4: pre_show
//.........这里部分代码省略.........
if(has_input_) {
caption.set_label(input_caption_);
caption.set_use_markup(true);
input.set_value(*input_text_);
input.set_maximum_length(input_maximum_lenght_);
window.keyboard_capture(&input);
window.set_click_dismiss(false);
window.set_escape_disabled(true);
} else {
caption.set_visible(twidget::INVISIBLE);
input.set_visible(twidget::INVISIBLE);
}
// Find the option list related fields.
tlistbox& options = find_widget<tlistbox>(&window, "input_list", true);
/*
* The options have some special markup:
* A line starting with a * means select that line.
* A line starting with a & means more special markup.
* - The part until the = is the name of an image.
* - The part until the second = is the first column.
* - The rest is the third column (the wiki only specifies two columns
* so only implement two of them).
*/
/**
* @todo This syntax looks like a bad hack, it would be nice to write
* a new syntax which doesn't use those hacks (also avoids the problem
* with special meanings for certain characters.
*/
if(!option_list_.empty()) {
std::map<std::string, string_map> data;
for(size_t i = 0; i < option_list_.size(); ++i) {
std::string icon;
std::string label = option_list_[i];
std::string description;
// Handle selection.
if(!label.empty() && label[0] == '*') {
// Number of items hasn't been increased yet so i is ok.
*chosen_option_ = i;
label.erase(0, 1);
}
// Handle the special case with an image.
std::string::size_type pos = label.find('=');
if (pos != std::string::npos && (label[0] == '&' || pos == 0)) {
if (pos) icon = label.substr(1, pos - 1);
label.erase(0, pos + 1);
}
// Search for an '=' symbol that is not inside markup.
std::string::size_type prev = 0;
bool open = false;
while ((pos = label.find('=', prev)) != std::string::npos) {
for (std::string::size_type i = prev; i != pos; ++i) {
switch (label[i]) {
case '<': open = true; break;
case '>': open = false; break;
}
}
if (!open) break;
prev = pos + 1;
}
if (pos != std::string::npos) {
description = label.substr(pos + 1);
label.erase(pos);
}
// Add the data.
data["icon"]["label"] = icon;
data["label"]["label"] = label;
data["label"]["use_markup"] = "true";
data["description"]["label"] = description;
data["description"]["use_markup"] = "true";
options.add_row(data);
}
// Avoid negetive and 0 since item 0 is already selected.
if(*chosen_option_ > 0
&& static_cast<size_t>(*chosen_option_)
< option_list_.size()) {
options.select_row(*chosen_option_);
}
if(!has_input_) {
window.keyboard_capture(&options);
window.set_click_dismiss(false);
window.set_escape_disabled(true);
} else {
window.add_to_keyboard_chain(&options);
// click_dismiss has been disabled due to the input.
}
} else {
options.set_visible(twidget::INVISIBLE);
}
window.set_click_dismiss(!has_input_ && option_list_.empty());
}
示例5: pre_show
void tunit_recall::pre_show(twindow& window)
{
tlabel& title = find_widget<tlabel>(&window, "title", true);
title.set_label(title.label() + get_title_suffix(team_.side()));
ttext_box* filter
= find_widget<ttext_box>(&window, "filter_box", false, true);
filter->set_text_changed_callback(
std::bind(&tunit_recall::filter_text_changed, this, _1, _2));
tlistbox& list = find_widget<tlistbox>(&window, "recall_list", false);
#ifdef GUI2_EXPERIMENTAL_LISTBOX
connect_signal_notify_modified(*list,
std::bind(&tunit_recall::list_item_clicked,
*this, std::ref(window)));
#else
list.set_callback_value_change(
dialog_callback<tunit_recall, &tunit_recall::list_item_clicked>);
#endif
list.clear();
window.keyboard_capture(filter);
window.add_to_keyboard_chain(&list);
connect_signal_mouse_left_click(
find_widget<tbutton>(&window, "dismiss", false),
std::bind(&tunit_recall::dismiss_unit, this, std::ref(window)));
connect_signal_mouse_left_click(
find_widget<tbutton>(&window, "show_help", false),
std::bind(&tunit_recall::show_help, this, std::ref(window)));
for(const unit_const_ptr& unit : recall_list_) {
std::map<std::string, string_map> row_data;
string_map column;
std::string mods = unit->image_mods();
if(unit->can_recruit()) {
mods += "~BLIT(" + unit::leader_crown() + ")";
}
for(const std::string& overlay : unit->overlays()) {
mods += "~BLIT(" + overlay + ")";
}
column["use_markup"] = "true";
column["label"] = unit->absolute_image() + mods;
row_data.emplace("unit_image", column);
column["label"] = unit->type_name();
row_data.emplace("unit_type", column);
column["label"] = format_cost_string(unit->recall_cost(), team_.recall_cost());
row_data.emplace("unit_recall_cost", column);
const std::string& name = !unit->name().empty() ? unit->name().str() : utils::unicode_en_dash;
column["label"] = name;
row_data.emplace("unit_name", column);
column["label"] = format_level_string(unit->level());
row_data.emplace("unit_level", column);
std::stringstream exp_str;
exp_str << font::span_color(unit->xp_color()) << unit->experience() << "/"
<< (unit->can_advance() ? std::to_string(unit->max_experience()) : utils::unicode_en_dash) << "</span>";
column["label"] = exp_str.str();
row_data.emplace("unit_experience", column);
// Since the table widgets use heavy formatting, we save a bare copy
// of certain options to filter on.
std::string filter_text = unit->type_name() + " " + name + " " + std::to_string(unit->level());
std::string traits;
for(const std::string& trait : unit->trait_names()) {
traits += (traits.empty() ? "" : "\n") + trait;
filter_text += " " + trait;
}
column["label"] = !traits.empty() ? traits : utils::unicode_en_dash;
row_data.emplace("unit_traits", column);
list.add_row(row_data);
filter_options_.push_back(filter_text);
}
list.register_sorting_option(0, [this](const int i) { return recall_list_[i]->type_name().str(); });
list.register_sorting_option(1, [this](const int i) { return recall_list_[i]->name().str(); });
list.register_sorting_option(2, [this](const int i) { return recall_list_[i]->level(); });
list.register_sorting_option(3, [this](const int i) { return recall_list_[i]->experience(); });
list.register_sorting_option(4, [this](const int i) {
return !recall_list_[i]->trait_names().empty() ? recall_list_[i]->trait_names().front().str() : "";
});
list_item_clicked(window);
//.........这里部分代码省略.........
示例6: pre_show
/**
* @todo This function enables the wml markup for all items, but the interface
* is a bit hacky. Especially the fiddling in the internals of the listbox is
* ugly. There needs to be a clean interface to set whether a widget has a
* markup and what kind of markup. These fixes will be post 1.6.
*/
void twml_message_::pre_show(twindow& window)
{
set_restore(true);
window.canvas(1).set_variable("portrait_image", variant(portrait_));
window.canvas(1).set_variable("portrait_mirror", variant(mirror_));
// Set the markup
tlabel& title = find_widget<tlabel>(&window, "title", false);
title.set_label(title_);
title.set_use_markup(true);
title.set_can_wrap(true);
tcontrol& message = find_widget<tcontrol>(&window, "message", false);
message.set_label(message_);
message.set_use_markup(true);
// The message label might not always be a scroll_label but the capturing
// shouldn't hurt.
window.keyboard_capture(&message);
// Find the input box related fields.
tlabel& caption = find_widget<tlabel>(&window, "input_caption", false);
ttext_box& input = find_widget<ttext_box>(&window, "input", true);
if(has_input_) {
caption.set_label(input_caption_);
caption.set_use_markup(true);
input.set_value(*input_text_);
input.set_maximum_length(input_maximum_length_);
window.keyboard_capture(&input);
window.set_click_dismiss(false);
window.set_escape_disabled(true);
} else {
caption.set_visible(twidget::tvisible::invisible);
input.set_visible(twidget::tvisible::invisible);
}
// Find the option list related fields.
tlistbox& options = find_widget<tlistbox>(&window, "input_list", true);
if(!option_list_.empty()) {
std::map<std::string, string_map> data;
for(const twml_message_option& item : option_list_) {
// Add the data.
data["icon"]["label"] = item.image();
data["label"]["label"] = item.label();
data["label"]["use_markup"] = "true";
data["description"]["label"] = item.description();
data["description"]["use_markup"] = "true";
options.add_row(data);
}
// Avoid negative and 0 since item 0 is already selected.
if(*chosen_option_ > 0 && static_cast<size_t>(*chosen_option_)
< option_list_.size()) {
options.select_row(*chosen_option_);
}
if(!has_input_) {
window.keyboard_capture(&options);
window.set_click_dismiss(false);
window.set_escape_disabled(true);
} else {
window.add_to_keyboard_chain(&options);
// click_dismiss has been disabled due to the input.
}
} else {
options.set_visible(twidget::tvisible::invisible);
}
window.set_click_dismiss(!has_input_ && option_list_.empty());
}