Create views when the theme is loaded

This commit is contained in:
simon.kagstrom 2010-01-16 07:11:17 +00:00
parent 108f069478
commit 9b138afacc
11 changed files with 58 additions and 92 deletions

View File

@ -414,8 +414,8 @@ class BindKeysView : public GuiView
public:
BindKeysView() : GuiView()
{
this->help = new HelpBox(NULL, NULL);
this->menu = new BindKeysMenu(NULL, this->help);
this->help = new HelpBox(Gui::gui->small_font, NULL);
this->menu = new BindKeysMenu(Gui::gui->small_font, this->help);
}
~BindKeysView()
@ -424,15 +424,6 @@ public:
delete this->menu;
}
void updateTheme()
{
this->menu->setFont(Gui::gui->small_font);
this->help->setFont(Gui::gui->small_font);
this->menu->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void viewPushCallback()
{
this->menu->updateHelpMessages();

View File

@ -22,8 +22,6 @@ public:
void setDirectory(const char *path);
/* Inherited */
void updateTheme();
void runLogic();
void draw(SDL_Surface *where);
@ -79,6 +77,7 @@ public:
{
this->gi = NULL;
memset(this->gi_messages, 0, sizeof(this->gi_messages));
this->setSelectedBackground(NULL, NULL, NULL, NULL, NULL, NULL);
}
void loadGameInfo(const char *what)
@ -150,8 +149,8 @@ private:
DiscView::DiscView() : GuiView()
{
this->menu = new DiscMenu(NULL);
this->gameInfo = new GameInfoBox(NULL);
this->menu = new DiscMenu(Gui::gui->default_font);
this->gameInfo = new GameInfoBox(Gui::gui->default_font);
}
DiscView::~DiscView()
@ -170,15 +169,6 @@ void DiscView::setDirectory(const char *path)
this->menu->setDirectory(path);
}
void DiscView::updateTheme()
{
this->gameInfo->setFont(Gui::gui->small_font);
this->menu->setFont(Gui::gui->default_font);
this->menu->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void DiscView::runLogic()
{
this->menu->runLogic();

View File

@ -7,10 +7,13 @@
#include "utils.hh"
#define VERSION_BASE (0x1978)
#define VERSION_MAGIC (VERSION_BASE + 0)
#define VERSION_MAGIC (VERSION_BASE + 1)
GameInfo::GameInfo(const char *name, const char *author, SDL_Surface *image)
GameInfo::GameInfo(const char *filename,
const char *name, const char *author,
SDL_Surface *image)
{
this->filename = filename;
this->name = name;
this->author = author;
this->screenshot = image;

View File

@ -10,13 +10,17 @@ struct game_info
uint16_t author_off;
uint16_t name_off;
uint16_t screenshot_off; /* In PNG format */
uint16_t filename_off;
uint16_t flags;
uint8_t data[]; /* 4-byte aligned */
};
class GameInfo
{
public:
GameInfo(const char *name = NULL, const char *author = NULL, SDL_Surface *image = NULL);
GameInfo(const char *filename = NULL, const char *name = NULL,
const char *author = NULL,
SDL_Surface *image = NULL);
~GameInfo();
@ -33,6 +37,7 @@ public:
/* Should perhaps be protected but I trust you - just be careful! */
const char *name;
const char *author;
const char *filename;
SDL_Surface *screenshot;
};

40
gui.cpp
View File

@ -85,14 +85,12 @@ Gui::Gui()
this->dlg = NULL;
this->kbd = NULL;
/* Create the views */
this->mv = new MainView();
this->dv = new DiscView();
this->ov = new OptionsView();
this->nv = new NetworkView();
this->tv = new ThemeView();
this->bkv = new BindKeysView();
this->pushView(mv);
this->mv = NULL;
this->dv = NULL;
this->ov = NULL;
this->nv = NULL;
this->tv = NULL;
this->bkv = NULL;
}
bool Gui::setTheme(const char *path)
@ -150,12 +148,26 @@ bool Gui::setTheme(const char *path)
return false;
}
this->mv->updateTheme();
this->dv->updateTheme();
this->ov->updateTheme();
this->nv->updateTheme();
this->tv->updateTheme();
this->bkv->updateTheme();
/* Create the views */
if (!this->mv)
{
this->mv = new MainView();
this->dv = new DiscView();
this->ov = new OptionsView();
this->nv = new NetworkView();
this->tv = new ThemeView();
this->bkv = new BindKeysView();
this->pushView(mv);
}
else
{
this->mv->updateTheme();
this->dv->updateTheme();
this->ov->updateTheme();
this->nv->updateTheme();
this->tv->updateTheme();
this->bkv->updateTheme();
}
VirtualKeyboard::kbd->updateTheme();

View File

@ -9,6 +9,7 @@ public:
HelpBox(Font *font, const char ***all_messages) : Menu(font)
{
this->setHelpMessages(all_messages);
this->setSelectedBackground(NULL, NULL, NULL, NULL, NULL, NULL);
}
void setHelpMessages(const char ***all_messages)

View File

@ -122,8 +122,11 @@ class MainView : public GuiView
public:
MainView() : GuiView()
{
this->help = new HelpBox(NULL, main_menu_help);
this->menu = new MainMenu(NULL, this->help);
panic_if(!Gui::gui->default_font,
"Theme does not seem correctly loaded\n");
this->help = new HelpBox(Gui::gui->small_font, main_menu_help);
this->menu = new MainMenu(Gui::gui->default_font, this->help);
}
~MainView()
@ -132,15 +135,6 @@ public:
delete this->menu;
}
void updateTheme()
{
this->menu->setFont(Gui::gui->default_font);
this->help->setFont(Gui::gui->small_font);
this->menu->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void runLogic()
{
this->menu->runLogic();

View File

@ -15,6 +15,7 @@
#include "menu.hh"
#include "font.hh"
#include "utils.hh"
#include "gui.hh"
#define IS_SUBMENU(p_msg) ( (p_msg)[0] == '^' )
#define IS_EMPTY(p_msg) ( (p_msg)[0] == '#' )
@ -344,13 +345,6 @@ Menu::Menu(Font *font) : Widget()
this->setTextColor((SDL_Color){0xff,0xff,0xff,0});
this->font = font;
this->text_bg_left = NULL;
this->text_bg_middle = NULL;
this->text_bg_right = NULL;
this->submenu_bg_left = NULL;
this->submenu_bg_middle = NULL;
this->submenu_bg_right = NULL;
this->pp_msgs = NULL;
this->n_entries = 0;
this->p_submenus = NULL;
@ -359,6 +353,10 @@ Menu::Menu(Font *font) : Widget()
this->cur_sel = 0;
this->mouse_x = -1;
this->mouse_y = -1;
this->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void Menu::setTextColor(SDL_Color clr)

View File

@ -123,8 +123,8 @@ class NetworkView : public GuiView
public:
NetworkView() : GuiView()
{
this->help = new HelpBox(NULL, network_menu_help);
this->menu = new NetworkMenu(NULL, this->help);
this->help = new HelpBox(Gui::gui->small_font, network_menu_help);
this->menu = new NetworkMenu(Gui::gui->default_font, this->help);
}
~NetworkView()
@ -133,15 +133,6 @@ public:
delete this->menu;
}
void updateTheme()
{
this->menu->setFont(Gui::gui->default_font);
this->help->setFont(Gui::gui->small_font);
this->menu->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void runLogic()
{
this->menu->runLogic();

View File

@ -96,8 +96,8 @@ class OptionsView : public GuiView
public:
OptionsView() : GuiView()
{
this->help = new HelpBox(NULL, options_menu_help);
this->menu = new OptionsMenu(NULL, this->help);
this->help = new HelpBox(Gui::gui->small_font, options_menu_help);
this->menu = new OptionsMenu(Gui::gui->default_font, this->help);
}
~OptionsView()
@ -106,15 +106,6 @@ public:
delete this->menu;
}
void updateTheme()
{
this->menu->setFont(Gui::gui->default_font);
this->help->setFont(Gui::gui->small_font);
this->menu->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void viewPushCallback()
{
this->menu->updateSubmenus();

View File

@ -15,8 +15,6 @@ public:
void setDirectory(const char *path);
/* Inherited */
void updateTheme();
void runLogic();
void draw(SDL_Surface *where);
@ -63,7 +61,7 @@ public:
ThemeView::ThemeView() : GuiView()
{
this->menu = new ThemeMenu(NULL);
this->menu = new ThemeMenu(Gui::gui->default_font);
}
ThemeView::~ThemeView()
@ -76,14 +74,6 @@ void ThemeView::setDirectory(const char *path)
this->menu->setDirectory(path);
}
void ThemeView::updateTheme()
{
this->menu->setFont(Gui::gui->default_font);
this->menu->setSelectedBackground(Gui::gui->bg_left, Gui::gui->bg_middle,
Gui::gui->bg_right, Gui::gui->bg_submenu_left,
Gui::gui->bg_submenu_middle, Gui::gui->bg_submenu_right);
}
void ThemeView::runLogic()
{
this->menu->runLogic();