added theme dialog

This commit is contained in:
John W. C. McNabb 2005-03-25 18:52:55 +00:00
parent 1ed408dc7c
commit bd7e59d6b1
5 changed files with 49 additions and 3 deletions

View file

@ -1,4 +1,5 @@
CVS HEAD: CVS HEAD:
* Added theme dialog. started with ":theme"
* Added UNIT, UNDEAD_UNIT, and PLACE_IMAGE macros to utils.cfg * Added UNIT, UNDEAD_UNIT, and PLACE_IMAGE macros to utils.cfg
* terrain improvements * terrain improvements
* fixed swamp transition (NW, SE) graphics * fixed swamp transition (NW, SE) graphics

View file

@ -391,6 +391,7 @@ LEVEL_RESULT play_level(const game_data& gameinfo, const config& game_config,
LOG_NG << "initializing display... " << (SDL_GetTicks() - ticks) << "\n"; LOG_NG << "initializing display... " << (SDL_GetTicks() - ticks) << "\n";
const config dummy_cfg; const config dummy_cfg;
display gui(units,video,map,status,teams,theme_cfg != NULL ? *theme_cfg : dummy_cfg, game_config, *level); display gui(units,video,map,status,teams,theme_cfg != NULL ? *theme_cfg : dummy_cfg, game_config, *level);
theme::set_known_themes(&game_config);
LOG_NG << "done initializing display... " << (SDL_GetTicks() - ticks) << "\n"; LOG_NG << "done initializing display... " << (SDL_GetTicks() - ticks) << "\n";

View file

@ -2410,7 +2410,19 @@ void turn_info::do_command(const std::string& str)
} }
} else if (teams_[index].is_ai()) { } else if (teams_[index].is_ai()) {
teams_[index].make_human(); teams_[index].make_human();
}
} else if (cmd == "theme") {
int action = 0;
std::vector<std::string> options=theme::get_known_themes();
std::string current_theme=_("Saved Theme Preference: ")+preferences::theme();
action = gui::show_dialog(gui_,NULL,"",current_theme,gui::OK_CANCEL,&options);
if(action >-1){
preferences::set_theme(options[action]);
//it would be preferable for the new theme to take effect
//immediately, however, this will have to do for now.
gui::show_dialog(gui_,NULL,"",_("New theme will take effect on next new or loaded game."),gui::MESSAGE);
} }
} else if(cmd == "ban") { } else if(cmd == "ban") {
config cfg; config cfg;
config& ban = cfg.add_child("ban"); config& ban = cfg.add_child("ban");

View file

@ -424,8 +424,7 @@ const std::string& theme::menu::image() const { return image_; }
const std::vector<std::string>& theme::menu::items() const { return items_; } const std::vector<std::string>& theme::menu::items() const { return items_; }
theme::theme(const config& cfg, const SDL_Rect& screen) : cfg_(resolve_rects(cfg)) theme::theme(const config& cfg, const SDL_Rect& screen):cfg_(resolve_rects(cfg)){
{
set_resolution(screen); set_resolution(screen);
} }
@ -553,3 +552,30 @@ const SDL_Rect& theme::mini_map_location(const SDL_Rect& screen) const
{ {
return mini_map_.location(screen); return mini_map_.location(screen);
} }
std::map<std::string, config> theme::known_themes;
void theme::set_known_themes(const config* cfg){
known_themes.clear();
if(cfg == NULL)
return;
const config& v = *cfg;
const config::child_list& known_themes_cfg = v.get_children("theme");
for(config::child_list::const_iterator thm = known_themes_cfg.begin(); thm != known_themes_cfg.end(); ++thm) {
std::string thm_name=(**thm)["name"];
if(thm_name!="null" && thm_name!="editor"){
known_themes[thm_name]=(**thm);
}
}
}
std::vector<std::string> theme::get_known_themes(){
std::vector<std::string> names;
for(std::map<std::string, config>::iterator p_thm=known_themes.begin();p_thm!=known_themes.end();p_thm++){
names.push_back(p_thm->first);
}
return(names);
}

View file

@ -4,6 +4,7 @@
#include <map> #include <map>
#include <string> #include <string>
#include <vector> #include <vector>
#include <map>
class config; class config;
@ -132,8 +133,13 @@ public:
const SDL_Rect& main_map_location(const SDL_Rect& screen) const; const SDL_Rect& main_map_location(const SDL_Rect& screen) const;
const SDL_Rect& mini_map_location(const SDL_Rect& screen) const; const SDL_Rect& mini_map_location(const SDL_Rect& screen) const;
static void set_known_themes(const config* cfg);
static std::vector<std::string> get_known_themes();
private: private:
const config& cfg_; static std::map<std::string, config> theme::known_themes;
std::string cur_theme;
const config& cfg_;
std::vector<panel> panels_; std::vector<panel> panels_;
std::vector<label> labels_; std::vector<label> labels_;
std::vector<menu> menus_; std::vector<menu> menus_;