frodo-wii/frodo_menu.cpp

146 lines
3.3 KiB
C++
Raw Normal View History

2009-11-28 09:22:19 +01:00
#include <SDL_image.h>
#include <SDL_ttf.h>
#include "menu.hh"
#include "frodo_menu.hh"
#include "sdl_ttf_font.hh"
#include "utils.hh"
extern SDL_Surface *screen;
class MainMenu : public Menu
{
public:
MainMenu(Font *font) : Menu(font)
{
static const char *messages[] = {
/*02*/ "File",
/*03*/ "^|Insert|Start",
/*04*/ "States",
/*05*/ "^|Load|Save|Delete",
/*06*/ "Keyboard",
/*07*/ "^|Type|Macro|Bind",
/*08*/ " ",
/*09*/ "Reset the C=64",
/*10*/ "Networking",
/*11*/ "Options",
/*12*/ "Advanced Options",
/*13*/ "Help",
/*15*/ "Quit",
NULL
};
this->setText(messages);
}
virtual void selectCallback(int which)
{
printf("entry %d selected: %s\n", which, this->pp_msgs[which]);
}
virtual void escapeCallback(int which)
{
printf("entry %d escaped: %s\n", which, this->pp_msgs[which]);
}
};
Gui::Gui()
{
this->focus = NULL;
this->bg_left = NULL;
this->bg_middle = NULL;
this->bg_right = NULL;
this->bg_submenu_left = NULL;
this->bg_submenu_middle = NULL;
this->bg_submenu_right = NULL;
this->main_font = NULL;
}
bool Gui::setTheme(const char *path)
{
this->bg_left = this->loadThemeImage(path, "bg_left.png");
this->bg_middle = this->loadThemeImage(path, "bg_middle.png");
this->bg_right = this->loadThemeImage(path, "bg_right.png");
this->bg_submenu_left = this->loadThemeImage(path, "bg_submenu_left.png");
this->bg_submenu_middle = this->loadThemeImage(path, "bg_submenu_middle.png");
this->bg_submenu_right = this->loadThemeImage(path, "bg_submenu_right.png");
this->main_font = this->loadThemeFont(path, "font.ttf");
if (!this->bg_left || !this->bg_right || !this->bg_middle ||
!this->bg_submenu_left || !this->bg_submenu_right ||
!this->bg_submenu_middle ||
!this->main_font)
{
SDL_FreeSurface(this->bg_left);
SDL_FreeSurface(this->bg_middle);
SDL_FreeSurface(this->bg_right);
SDL_FreeSurface(this->bg_submenu_left);
SDL_FreeSurface(this->bg_submenu_middle);
SDL_FreeSurface(this->bg_submenu_right);
if (this->main_font)
delete this->main_font;
return false;
}
this->main_menu->setSelectedBackground(bg_left, bg_middle, bg_right,
bg_submenu_left, bg_submenu_middle, bg_submenu_right);
return true;
}
void Gui::runLogic(void)
{
if (!this->is_active)
return;
}
void Gui::setView(GuiView view)
{
}
void Gui::pushEvent(SDL_Event *ev)
{
if (this->is_active && this->focus)
this->focus->pushEvent(ev);
}
void Gui::draw(SDL_Surface *where)
{
if (!this->is_active)
return;
}
const char *Gui::getThemePath(const char *dir, const char *what)
{
static char buf[255];
memset(buf, 0, sizeof(buf));
snprintf(buf, 254, "%s/%s",
dir, what);
return buf;
}
SDL_Surface *Gui::loadThemeImage(const char *dir, const char *what)
{
return IMG_Load(this->getThemePath(dir, what));
}
Font *Gui::loadThemeFont(const char *dir, const char *what)
{
TTF_Font *fnt;
fnt = read_and_alloc_font(this->getThemePath(dir, what), 18);
if (!fnt)
return NULL;
return new Font_TTF(fnt, 255,255,255);
}