Add the option to add an icon to a toggle button...

...and wire that in for the mp  selection dialog.
This commit is contained in:
Mark de Wever 2008-05-24 13:56:45 +00:00
parent 27e77fa3f9
commit 5230f12157
10 changed files with 228 additions and 39 deletions

View file

@ -1,6 +1,7 @@
###
### Definition of the listbox text toggle button.
### It's meant as line of text in a listbox
### It's meant as line of text in a listbox note this
### version doesn't support icons.
###
# FIXME we should use a background image instead of a filled rect.

View file

@ -0,0 +1,148 @@
###
### Definition of the listbox text toggle button.
### It's meant as line of text in a listbox note this
### version supports icons with size 72 x 72.
###
# FIXME we should use a background image instead of a filled rect.
#define RECT BORDER_COLOUR FILL_COLOUR
[rectangle]
x = 0
y = 0
w = "(width)"
h = "(height)"
border_thickness = 1
border_colour = {BORDER_COLOUR}
fill_colour = {FILL_COLOUR}
[/rectangle]
#enddef
#define ICON
[image]
x = 4
y = 4
name = "(icon)"
[/image]
#enddef
#define TEXT
[text]
x = 80
y = {TEXT_V_CENTRE}
w = "(width - 80)"
h = "(text_height)"
font_size = {FONT_SIZE_NORMAL__NORMAL}
colour = {FONT_COLOUR_ENABLED}
text = "(text)"
[/text]
#enddef
[toggle_button_definition]
id = "listbox_text_with_icon"
description = "This toggle button is meant to be used in a listbox and as list box with only text."
[resolution]
min_width = 100
min_height = 80
default_width = 100
default_height = 80
max_width = 0
max_height = 80
text_extra_width = 80
text_font_size = {FONT_SIZE_NORMAL__NORMAL}
[state_enabled]
full_redraw = "true"
[draw]
{RECT "" "0, 0, 0, 255"}
{ICON}
{TEXT}
[/draw]
[/state_enabled]
[state_disabled]
full_redraw = "true"
[draw]
{RECT "" "128, 128, 128, 255"}
{ICON}
{TEXT}
[/draw]
[/state_disabled]
[state_focussed]
full_redraw = "true"
[draw]
{RECT "" "0, 0, 0, 255"}
{ICON}
{TEXT}
[/draw]
[/state_focussed]
###
### Selected
###
[state_enabled_selected]
full_redraw = "true"
[draw]
{RECT "170, 136, 67, 255" "9, 33, 54, 255"}
{ICON}
{TEXT}
[/draw]
[/state_enabled_selected]
[state_disabled_selected]
full_redraw = "true"
[draw]
{RECT "170, 136, 67, 255" "128, 128, 128, 255"}
{ICON}
{TEXT}
[/draw]
[/state_disabled_selected]
[state_focussed_selected]
full_redraw = "true"
[draw]
{RECT "170, 136, 67, 255" "9, 33, 54, 255"}
{ICON}
{TEXT}
[/draw]
[/state_focussed_selected]
[/resolution]
[/toggle_button_definition]
#undef RECT
#undef ICON
#undef TEXT

View file

@ -114,7 +114,7 @@
horizontal_grow = "true"
[toggle_button]
definition = "listbox_text" # listbox_text_with_icon
definition = "listbox_text_with_icon"
[/toggle_button]
[/column]

View file

@ -80,7 +80,7 @@ msgid ""
"(Expert level, 14 scenarios.)"
msgstr ""
"Für die Bewohner der Stadt Zwergenpforte barg das Leben ein hartes Los: "
"Entweder schufteten sie als wertlose Sklaven der Orks bis ans Ende ihres "
"Entweder schufteten sie als wertlose Sklaven der Orks bis am Ende ihres "
"kurzen und jämmerlichen Lebens oder aber alles für die Freiheit zu riskieren "
"und sich gegen ihre grausamen Unterdrücker zu erheben. Sie ahnten nicht, "
"dass ihr Aufstand der Beginn großer Abenteuer wurde, die die Nordlande zu "
@ -929,7 +929,7 @@ msgid ""
"of them to hell! Oh, and just between me and you, it is actually good fun - "
"more fun anyway then sitting on your backside studying all day..."
msgstr ""
"Indem ich jedem Ork, Troll oder Untoten der mit über den Weg lief, Feuer "
"Indem ich jedem Ork, Troll oder Untoten der mir über den Weg lief, Feuer "
"unter dem Hintern machte. Diese Missgeburten haben mein Lebenswerk "
"geschändet, dafür sollen sie in der Hölle schmoren! Außerdem, aber behalte "
"dass für dich, macht es unverschämt viel Spaß - mehr als nur herum zu sitzen "
@ -1283,7 +1283,7 @@ msgid ""
msgstr ""
"Von Monstern befreit sind Tunnel und Höhle, und lauschend hört ich offenen "
"Ohres zeternder Zwerge tobend Geschrei - nie tönte es mir lieblicher und "
"süßer als heute. Los Männer, dies ist unserer Rettung. "
"süßer als heute. Los Männer, dies ist unsere Rettung. "
#. [message]: role=Messenger
#: data/campaigns/Northern_Rebirth/scenarios/02_Infested_Caves.cfg:683
@ -1356,8 +1356,8 @@ msgid ""
"very wide berth by now. So just be polite, give him some room and you'll "
"find he is relatively harmless..."
msgstr ""
"Wundert Euch nicht, das ist Camerin. Er war unser Schulmagier und er kam "
"hier hoch um in der Einsamkeit zum Studieren. Seid der Invasion wurde er ein "
"Wundert Euch nicht, dass ist Camerin. Er war unser Schulmagier und er kam "
"hier hoch um in der?? needed Einsamkeit zum Studieren. Seit der Invasion wurde er ein "
"wenig.., ähhh.. eigen. Ich glaube ja, dass einige Orks seine Unterlagen "
"verbrannten. Auf jeden Fall nahm er das sehr übel und er warf seinen Zorn "
"über diese Ungeheuer und vernichtet sie, wo er ihnen habhaft werden kann. "
@ -1980,7 +1980,7 @@ msgstr "FLEIIIIIIISCH!"
#. [message]: role=Supporter
#: data/campaigns/Northern_Rebirth/scenarios/04_Clearing_the_Mines.cfg:653
msgid "Holly Lords of Light, what kind of vile creation are those things!"
msgstr "Ihr Götter des Lichts - was ist das denn für eine üble Kreatur?"
msgstr "Ihr Götter des Lichtes - was ist das denn für eine üble Kreatur?"
#. [message]: speaker=Camerin
#: data/campaigns/Northern_Rebirth/scenarios/04_Clearing_the_Mines.cfg:659
@ -2845,7 +2845,7 @@ msgstr "800 Goldstücke! Wir sind reich!"
#. [message]: speaker=unit
#: data/campaigns/Northern_Rebirth/scenarios/05a_The_Pursuit.cfg:1377
msgid "What a hoard! 2 000 gold!"
msgstr "Was für ein Schatz! 2.000 Goldstücke!"
msgstr "Was für einen Schatz! 2.000 Goldstücke!"
#. [message]: speaker=unit
#: data/campaigns/Northern_Rebirth/scenarios/05a_The_Pursuit.cfg:1399
@ -2971,7 +2971,7 @@ msgid ""
msgstr ""
"Dies, mein Junge, ist der Stab der Gerechtigkeit. Er ist alt, und war schon "
"alt als ich ein kleiner Junge war. Die Götter selbst sollen ihn erschaffen "
"haben und übereigneten ihn den Anführen der Menschen, auf das Friede, Glück "
"haben und übereigneten ihn den Anführen der Menschen, auf dem Friede, Glück "
"und als wichtigstes - Gerechtigkeit herrschen möge. Jahrhunderte des "
"Wohlstands folgten, edle Anführer sprachen Recht im Namen des Volkes und für "
"das Volk, und weder das Böse noch Kriege überzogen das glückliche Land."
@ -3863,7 +3863,7 @@ msgstr "Verlockungen"
#: data/campaigns/Northern_Rebirth/scenarios/05b_Compelled.cfg:9
msgid "Note: The work on this branch of the campaign is in progress."
msgstr ""
"Hinweis: Die Arbeit an diesem Zweig der Kampagne ist noch nicht abgeschlossen"
"Hinweis: Die Arbeit an diesem Zweig der Kampagne ist noch nicht abgeschlossen."
#. [part]
#: data/campaigns/Northern_Rebirth/scenarios/05b_Compelled.cfg:13
@ -4695,7 +4695,7 @@ msgstr ".........."
#: data/campaigns/Northern_Rebirth/scenarios/06b_Slave_of_the_Undead.cfg:302
msgid "Tallin, break free! Don't let that lich control you!"
msgstr ""
"Tallin befreie dich von dem Bösen! Lass deinen Geist nicht von diesem Lich "
"Tallin befreie dich vom Böse! Lass deinen Geist nicht von diesem Lich "
"verwirren!"
#. [message]: speaker=Tallin
@ -5689,7 +5689,7 @@ msgid ""
"confusion. Your gryphons will be of use, but I think you should retain "
"command of your trolls and ogres, until they are needed."
msgstr ""
"Habt Dank, Stalrag und Ro'Arthian. Derzeit habe befehlige ich ausreichende "
"Habt Dank, Stalrag und Ro'Arthian. Derzeit befehlige ich ausreichende "
"Truppen und ich denke, wir erzeugen nur Verwirrung, wenn wir die "
"verschiedenen Streitkräfte unter ein einziges Kommando stellen würden. Eure "
"Greifen werden sehr hilfreich sein, aber ich denke, dass ihr weiterhin die "
@ -5732,7 +5732,7 @@ msgid ""
"and hating what he had become - he received an urgent summons from his "
"Master."
msgstr ""
"Tallin starrte ungläubig auf den Leichnam seines Freundes und hasste von "
"Tallin starrte ungläubig auf dem Leichnam seines Freundes und hasste von "
"ganzem Herzen das, was er geworden war. In diesem Moment spürte er den "
"Hilferuf seines Meisters. "
@ -5757,10 +5757,10 @@ msgid ""
"Tallin and his minions took up positions outside Malifor's study door."
msgstr ""
"Seine Seele bäumte sich wieder einmal auf, und doch banden Mallifors "
"Zauberkräfte ihn immer noch an seinem dunklen Meister und er eilte ihm zu "
"Zauberkräfte ihn immer noch an seinem dunklen Meister und er eilte ihm zum "
"Hilfe. Die Außenposten waren durch schiere Zahl der Feinde überrannt und "
"Malifor hatte sich in seinem Studierzimmer verschanzt. Ganz der dunkle "
"Adept, warf sich Tallin mit seinen Gefolge zwischen Studierzimmer und Feind, "
"Malifor hatte sich in seinem Studierzimmer verschanzt. Ganz der dunklen "
"AdeptXXX, warf sich Tallin mit seinen Gefolge zwischen Studierzimmer und Feind, "
"um den Meister zu schützen. "
#. [objective]: condition=win
@ -6070,7 +6070,7 @@ msgid ""
"weapons for the orcs, worse news for us."
msgstr ""
"In einem gebe ich euch jedoch recht, Stalrag. Das Lösegeld wird die orkische "
"Kriegskasse füllen - mehr Truppen, besser Waffen - schlechte Neuigkeiten für "
"Kriegskasse füllen - mehr Truppen, bessere Waffen - schlechte Neuigkeiten für "
"uns."
#. [part]
@ -6089,7 +6089,7 @@ msgid ""
"wouldna ally themsel' with the likes o' us."
msgstr ""
"Verbündete? Hör ich recht? Wir stapfen also zu ihnen, und fragen, ob sie "
"sich »geneigt sehen, uns zu helfen«, sofern wir ihr Prinzessin retten? Ihr "
"sich »geneigt sehen, uns zu helfen«, sofern wir ihre Prinzessin retten? Ihr "
"hörtet doch ihre Worte - diese Elfen tragen ihre Nasen so hoch, dass sie den "
"Boden gar nicht mehr sehen! Die würden sich nie mit uns gemein machen!"
@ -6409,7 +6409,7 @@ msgid ""
"within its depths, and he stumbled blindy towards the oblivion offered by "
"both."
msgstr ""
"Der Tod schien ihm wie ein Befreiung, ein Gnade. Tallin zog seinen Dolch und "
"Der Tod schien ihm wie eine Befreiung, eine Gnade. Tallin zog seinen Dolch und "
"versenkte ihn mit einem Ruck tief in sein ehemals düsteres Herz. Doch es "
"half nichts - sein zitternder Kadaver versagte ihm den letzten Gehorsam und "
"weigerte sich, zu sterben. Selbstzerstörerisch suchte Tallin andere Wege zu "
@ -6944,7 +6944,7 @@ msgid ""
"Ah ha! That's what he is after. I bet he is having delusions of using it to "
"conquer the world or something."
msgstr ""
"Aha! Darum geht es Ihm also! Ich wette, er spinnt sich eine Zukunft "
"Aha! Darum geht es ihm also! Ich wette, er spinnt sich eine Zukunft "
"zusammen, in der er die Welt erobert oder so was."
#. [message]: speaker=Hekkna
@ -7097,7 +7097,7 @@ msgid ""
"in line. I don't know why you bothered going down that passage in the first "
"place - nothing there but a bunch of bats."
msgstr ""
"Wenn Ihr fertig seid, die Aussicht zu genießen, dann bekommt eure verkorkste "
"Wenn ihr fertig seid, die Aussicht zu genießen, dann bekommt eure verkorkste "
"Seele wieder ins Lot. Wozu rennt ihr überhaupt da hinunter? Da gibt es nur "
"ein paar vertrocknete Fledermäuse. "
@ -7107,7 +7107,7 @@ msgid ""
"I found a way to the surface - that is if you feel like climbing straight up "
"for miles on end..."
msgstr ""
"Ich fand einen Weg an die Oberfläche, naja, sofern es euch zusagt, "
"Ich fand einen Weg an der Oberfläche, naja, sofern es euch zusagt, "
"meilenweit geradewegs nach oben zu laufen."
#. [message]: speaker=unit
@ -8495,7 +8495,7 @@ msgstr ""
#. [message]: speaker=Sister Theta
#: data/campaigns/Northern_Rebirth/scenarios/10a_Stolen_Gold.cfg:716
msgid "Awww, what a darling!"
msgstr "Was für ein Schatz!"
msgstr "Was für einen Schatz!"
#. [message]: role=Supporter
#: data/campaigns/Northern_Rebirth/scenarios/10a_Stolen_Gold.cfg:720
@ -10582,7 +10582,7 @@ msgid ""
"their fortitude, valor, and wisdom - brought the Northlands out of the "
"darkness and restored them to their former glory."
msgstr ""
"So schufen die Einwohner der kleinen, versklavten Gemeinschaft von "
"So schufen die Einwohner der kleinen versklavten Gemeinschaft von "
"Zwergenpforte durch Tapferkeit, Klugheit und Ehre nicht nur eine große "
"Stadt, sondern ließen die Nordlande wieder in alter Schönheit erstrahlen."

View file

@ -51,9 +51,9 @@ void tmp_method_selection::show(CVideo& video)
tlistbox* list = dynamic_cast<tlistbox*>(window.find_widget("method_list", false));
VALIDATE(list, "No list defined.");
list->add_item("Join Official Server");
list->add_item("Connect to Server");
list->add_item("Local Game");
list->add_item("Join Official Server", "icons/icon-server.png");
list->add_item("Connect to Server", "icons/icon-serverother.png");
list->add_item("Local Game", "icons/icon-hotseat.png");
list->select_row(0);
window.recalculate_size();

View file

@ -410,11 +410,11 @@ const twidget* tlistbox::find_widget(const tpoint& coordinate, const bool must_b
return result;
}
void tlistbox::add_item(const t_string& label)
void tlistbox::add_item(const t_string& label, const std::string& icon)
{
assert(list_builder_);
trow row(*list_builder_, label);
trow row(*list_builder_, label, icon);
assert(row.grid());
row.grid()->set_parent(this);
@ -499,16 +499,16 @@ void tlistbox::set_row_active(const unsigned row, const bool active)
rows_[row].grid()->set_active(active);
}
tlistbox::trow::trow(const tbuilder_grid& list_builder_,const t_string& label) :
tlistbox::trow::trow(const tbuilder_grid& list_builder_,const t_string& label, const std::string& icon) :
grid_(dynamic_cast<tgrid*>(list_builder_.build())),
height_(0),
selected_(false)
{
assert(grid_);
init_in_grid(grid_, label);
init_in_grid(grid_, label, icon);
}
void tlistbox::trow::init_in_grid(tgrid* grid, const t_string& label)
void tlistbox::trow::init_in_grid(tgrid* grid, const t_string& label, const std::string& icon)
{
for(unsigned row = 0; row < grid->get_rows(); ++row) {
for(unsigned col = 0; col < grid->get_cols(); ++col) {
@ -522,8 +522,9 @@ void tlistbox::trow::init_in_grid(tgrid* grid, const t_string& label)
if(btn) {
btn->set_callback_mouse_left_click(callback_select_list_item);
btn->set_label(label);
btn->set_icon_name(icon);
} else if(grid) {
init_in_grid(child_grid, label);
init_in_grid(child_grid, label, icon);
} else {
std::cerr << "Widget type " << typeid(*widget).name() << ".\n";
assert(false);

View file

@ -106,7 +106,7 @@ public:
*
* Probably the hardcoded list will disappear as well at some point
*/
void add_item(const t_string& label);
void add_item(const t_string& label, const std::string& icon = "");
unsigned get_item_count() const { return rows_.size(); }
@ -197,7 +197,8 @@ private:
class trow {
public:
trow(const tbuilder_grid& list_builder_, const t_string& label);
trow(const tbuilder_grid& list_builder_,
const t_string& label, const std::string& icon);
void select(const bool sel = true);
@ -221,7 +222,8 @@ private:
bool selected_;
void init_in_grid(tgrid* grid, const t_string& label);
void init_in_grid(tgrid* grid,
const t_string& label, const std::string& icon);
void select_in_grid(tgrid* grid, const bool sel);
};

View file

@ -14,6 +14,9 @@
#include "gui/widgets/toggle_button.hpp"
#include "foreach.hpp"
#include "gui/widgets/canvas.hpp"
#include "log.hpp"
#define DBG_G LOG_STREAM_INDENT(debug, gui)
@ -114,5 +117,16 @@ void ttoggle_button::set_state(tstate state)
}
}
void ttoggle_button::set_canvas_text()
{
// Inherit.
tcontrol::set_canvas_text();
// set icon in canvases
foreach(tcanvas& canvas, tcontrol::canvas()) {
canvas.set_variable("icon", variant(icon_name_));
}
}
} // namespace gui2

View file

@ -26,7 +26,8 @@ public:
ttoggle_button() :
tcontrol(COUNT),
state_(ENABLED),
callback_mouse_left_click_(0)
callback_mouse_left_click_(0),
icon_name_()
{
}
@ -48,6 +49,13 @@ public:
void set_callback_mouse_left_click(void (*callback) (twidget*))
{ callback_mouse_left_click_ = callback; }
/** Inherited from tcontrol. */
void set_canvas_text();
void set_icon_name(const std::string& icon_name)
{ icon_name_ = icon_name; set_canvas_text(); }
const std::string& icon_name() const { return icon_name_; }
private:
//! Note the order of the states must be the same as defined in settings.hpp.
@ -64,6 +72,12 @@ private:
/** This callback is used when the control gets a left click. */
void (*callback_mouse_left_click_) (twidget*);
/**
* The toggle button can contain an icon next to the text.
* Maybe this will move the the tcontrol class if deemed needed.
*/
std::string icon_name_;
//! Inherited from tcontrol.
const std::string& get_control_type() const
{ static const std::string type = "toggle_button"; return type; }

View file

@ -215,12 +215,19 @@ public:
*
* A toggle button has no special fields.
*
* @start_table = config
* icon (f_string = "") The name of the icon file to show.
* @end_table
*/
tbuilder_toggle_button(const config& cfg) :
tbuilder_control(cfg)
tbuilder_control(cfg),
icon_name_(cfg["icon"])
{}
twidget* build () const;
private:
std::string icon_name_;
};
struct tbuilder_vertical_scrollbar : public tbuilder_control
@ -927,6 +934,8 @@ twidget* tbuilder_toggle_button::build() const
init_control(toggle_button);
toggle_button->set_icon_name(icon_name_);
DBG_G << "Window builder: placed toggle button '" << id << "' with defintion '"
<< definition << "'.\n";