objectify AGI menu.h/cpp
svn-id: r22757
This commit is contained in:
parent
7ff20a70a5
commit
163ed1afd3
6 changed files with 75 additions and 50 deletions
|
@ -314,7 +314,7 @@ int agi_init() {
|
|||
|
||||
init_words();
|
||||
|
||||
menu_init();
|
||||
menu = new Menu();
|
||||
init_pri_table();
|
||||
|
||||
/* clear string buffer */
|
||||
|
|
|
@ -273,7 +273,7 @@ int main_cycle() {
|
|||
setvar(V_key, 0); /* clear ENTER key */
|
||||
break;
|
||||
case INPUT_MENU:
|
||||
menu_keyhandler(key);
|
||||
menu->keyhandler(key);
|
||||
do_update();
|
||||
return false;
|
||||
case INPUT_NONE:
|
||||
|
@ -391,7 +391,8 @@ int run_game() {
|
|||
agi_deinit();
|
||||
} while (ec == err_RestartGame);
|
||||
|
||||
menu_deinit();
|
||||
delete menu;
|
||||
menu = 0;
|
||||
|
||||
release_image_stack();
|
||||
|
||||
|
|
|
@ -34,6 +34,10 @@
|
|||
|
||||
namespace Agi {
|
||||
|
||||
Menu* menu;
|
||||
|
||||
// TODO: add constructor/destructor for agi_menu, agi_menu_option
|
||||
|
||||
struct agi_menu_option {
|
||||
int enabled; /**< option is enabled or disabled */
|
||||
int event; /**< menu event */
|
||||
|
@ -41,8 +45,6 @@ struct agi_menu_option {
|
|||
char *text; /**< text of menu option */
|
||||
};
|
||||
|
||||
typedef Common::List<agi_menu_option*> MenuOptionList;
|
||||
|
||||
struct agi_menu {
|
||||
MenuOptionList down; /**< list head for menu options */
|
||||
int index; /**< number of menu in menubar */
|
||||
|
@ -53,14 +55,7 @@ struct agi_menu {
|
|||
char *text; /**< menu name */
|
||||
};
|
||||
|
||||
typedef Common::List<agi_menu*> MenuList;
|
||||
|
||||
static MenuList menubar;
|
||||
|
||||
static int h_cur_menu;
|
||||
static int v_cur_menu;
|
||||
|
||||
static agi_menu *get_menu(int i) {
|
||||
agi_menu *Menu::get_menu(int i) {
|
||||
MenuList::iterator iter;
|
||||
for (iter = menubar.begin(); iter != menubar.end(); ++iter) {
|
||||
agi_menu *m = *iter;
|
||||
|
@ -70,7 +65,7 @@ static agi_menu *get_menu(int i) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static agi_menu_option *get_menu_option(int i, int j) {
|
||||
agi_menu_option *Menu::get_menu_option(int i, int j) {
|
||||
agi_menu *m = get_menu(i);
|
||||
MenuOptionList::iterator iter;
|
||||
for (iter = m->down.begin(); iter != m->down.end(); ++iter) {
|
||||
|
@ -82,7 +77,7 @@ static agi_menu_option *get_menu_option(int i, int j) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void draw_menu_bar() {
|
||||
void Menu::draw_menu_bar() {
|
||||
clear_lines(0, 0, MENU_BG);
|
||||
flush_lines(0, 0);
|
||||
|
||||
|
@ -94,7 +89,7 @@ static void draw_menu_bar() {
|
|||
|
||||
}
|
||||
|
||||
static void draw_menu_hilite(int cur_menu) {
|
||||
void Menu::draw_menu_hilite(int cur_menu) {
|
||||
agi_menu *m = get_menu(cur_menu);
|
||||
debugC(6, kDebugLevelMenu, "[%s]", m->text);
|
||||
print_text(m->text, 0, m->col, 0, 40, MENU_BG, MENU_FG);
|
||||
|
@ -102,7 +97,7 @@ static void draw_menu_hilite(int cur_menu) {
|
|||
}
|
||||
|
||||
/* draw box and pulldowns. */
|
||||
static void draw_menu_option(int h_menu) {
|
||||
void Menu::draw_menu_option(int h_menu) {
|
||||
/* find which vertical menu it is */
|
||||
agi_menu *m = get_menu(h_menu);
|
||||
|
||||
|
@ -117,7 +112,7 @@ static void draw_menu_option(int h_menu) {
|
|||
}
|
||||
}
|
||||
|
||||
static void draw_menu_option_hilite(int h_menu, int v_menu) {
|
||||
void Menu::draw_menu_option_hilite(int h_menu, int v_menu) {
|
||||
agi_menu *m = get_menu(h_menu);
|
||||
agi_menu_option *d = get_menu_option(h_menu, v_menu);
|
||||
|
||||
|
@ -125,14 +120,14 @@ static void draw_menu_option_hilite(int h_menu, int v_menu) {
|
|||
MENU_BG, d->enabled ? MENU_FG : MENU_DISABLED);
|
||||
}
|
||||
|
||||
static void new_menu_selected(int i) {
|
||||
void Menu::new_menu_selected(int i) {
|
||||
show_pic();
|
||||
draw_menu_bar();
|
||||
draw_menu_hilite(i);
|
||||
draw_menu_option(i);
|
||||
}
|
||||
|
||||
static int mouse_over_text(unsigned int line, unsigned int col, char *s) {
|
||||
bool Menu::mouse_over_text(unsigned int line, unsigned int col, char *s) {
|
||||
if (mouse.x < col * CHAR_COLS)
|
||||
return false;
|
||||
|
||||
|
@ -148,12 +143,6 @@ static int mouse_over_text(unsigned int line, unsigned int col, char *s) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static int h_index;
|
||||
static int v_index;
|
||||
static int h_col;
|
||||
static int h_max_menu;
|
||||
static int v_max_menu[10];
|
||||
|
||||
#if 0
|
||||
static void add_about_option() {
|
||||
const char *text = "About AGI engine";
|
||||
|
@ -176,14 +165,14 @@ static void add_about_option() {
|
|||
* Public functions
|
||||
*/
|
||||
|
||||
void menu_init() {
|
||||
Menu::Menu() {
|
||||
h_index = 0;
|
||||
h_col = 1;
|
||||
h_cur_menu = 0;
|
||||
v_cur_menu = 0;
|
||||
}
|
||||
|
||||
void menu_deinit() {
|
||||
Menu::~Menu() {
|
||||
MenuList::iterator iterh;
|
||||
for (iterh = menubar.reverse_begin(); iterh != menubar.end(); ) {
|
||||
agi_menu *m = *iterh;
|
||||
|
@ -202,7 +191,7 @@ void menu_deinit() {
|
|||
}
|
||||
}
|
||||
|
||||
void menu_add(char *s) {
|
||||
void Menu::add(char *s) {
|
||||
agi_menu *m = new agi_menu;
|
||||
m->text = strdup(s);
|
||||
while (m->text[strlen(m->text) - 1] == ' ')
|
||||
|
@ -221,7 +210,7 @@ void menu_add(char *s) {
|
|||
menubar.push_back(m);
|
||||
}
|
||||
|
||||
void menu_add_item(char *s, int code) {
|
||||
void Menu::add_item(char *s, int code) {
|
||||
int l;
|
||||
|
||||
agi_menu_option* d = new agi_menu_option;
|
||||
|
@ -249,7 +238,7 @@ void menu_add_item(char *s, int code) {
|
|||
m->down.push_back(d);
|
||||
}
|
||||
|
||||
void menu_submit() {
|
||||
void Menu::submit() {
|
||||
debugC(3, kDebugLevelMenu, "Submitting menu");
|
||||
|
||||
/* add_about_option (); */
|
||||
|
@ -269,7 +258,7 @@ void menu_submit() {
|
|||
}
|
||||
}
|
||||
|
||||
int menu_keyhandler(int key) {
|
||||
bool Menu::keyhandler(int key) {
|
||||
static int clock_val;
|
||||
static int menu_active = false;
|
||||
static int button_used = 0;
|
||||
|
@ -435,7 +424,7 @@ exit_menu:
|
|||
return true;
|
||||
}
|
||||
|
||||
void menu_set_item(int event, int state) {
|
||||
void Menu::set_item(int event, int state) {
|
||||
/* scan all menus for event number # */
|
||||
|
||||
debugC(6, kDebugLevelMenu, "event = %d, state = %d", event, state);
|
||||
|
@ -453,7 +442,7 @@ void menu_set_item(int event, int state) {
|
|||
}
|
||||
}
|
||||
|
||||
void menu_enable_all() {
|
||||
void Menu::enable_all() {
|
||||
MenuList::iterator iterh;
|
||||
for (iterh = menubar.begin(); iterh != menubar.end(); ++iterh) {
|
||||
agi_menu *m = *iterh;
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#ifndef AGI_MENU_H
|
||||
#define AGI_MENU_H
|
||||
|
||||
#include "common/list.h"
|
||||
|
||||
namespace Agi {
|
||||
|
||||
#define MENU_BG 0x0f /* White */
|
||||
|
@ -33,14 +35,47 @@ namespace Agi {
|
|||
#define MENU_FG 0x00 /* Black */
|
||||
#define MENU_LINE 0x00 /* Black */
|
||||
|
||||
void menu_init(void);
|
||||
void menu_deinit(void);
|
||||
void menu_add(char *);
|
||||
void menu_add_item(char *, int);
|
||||
void menu_submit(void);
|
||||
void menu_set_item(int, int);
|
||||
int menu_keyhandler(int);
|
||||
void menu_enable_all(void);
|
||||
struct agi_menu;
|
||||
struct agi_menu_option;
|
||||
typedef Common::List<agi_menu*> MenuList;
|
||||
typedef Common::List<agi_menu_option*> MenuOptionList;
|
||||
|
||||
class Menu {
|
||||
public:
|
||||
Menu();
|
||||
~Menu();
|
||||
|
||||
void add(char *s);
|
||||
void add_item(char *s, int code);
|
||||
void submit();
|
||||
void set_item(int event, int state);
|
||||
bool keyhandler(int key);
|
||||
void enable_all();
|
||||
|
||||
private:
|
||||
MenuList menubar;
|
||||
|
||||
int h_cur_menu;
|
||||
int v_cur_menu;
|
||||
|
||||
int h_index;
|
||||
int v_index;
|
||||
int h_col;
|
||||
int h_max_menu;
|
||||
int v_max_menu[10];
|
||||
|
||||
agi_menu* get_menu(int i);
|
||||
agi_menu_option *get_menu_option(int i, int j);
|
||||
void draw_menu_bar();
|
||||
void draw_menu_hilite(int cur_menu);
|
||||
void draw_menu_option(int h_menu);
|
||||
void draw_menu_option_hilite(int h_menu, int v_menu);
|
||||
void new_menu_selected(int i);
|
||||
bool mouse_over_text(unsigned int line, unsigned int col, char *s);
|
||||
|
||||
};
|
||||
|
||||
extern Menu* menu;
|
||||
|
||||
} // End of namespace Agi
|
||||
|
||||
|
|
|
@ -420,15 +420,15 @@ cmd(menu_input) {
|
|||
}
|
||||
|
||||
cmd(enable_item) {
|
||||
menu_set_item(p0, true);
|
||||
menu->set_item(p0, true);
|
||||
}
|
||||
|
||||
cmd(disable_item) {
|
||||
menu_set_item(p0, false);
|
||||
menu->set_item(p0, false);
|
||||
}
|
||||
|
||||
cmd(submit_menu) {
|
||||
menu_submit();
|
||||
menu->submit();
|
||||
}
|
||||
|
||||
cmd(set_scan_start) {
|
||||
|
@ -874,13 +874,13 @@ cmd(pause) {
|
|||
cmd(set_menu) {
|
||||
debugC(4, kDebugLevelScripts, "text %02x of %02x", p0, cur_logic->num_texts);
|
||||
if (cur_logic->texts != NULL && p0 < cur_logic->num_texts)
|
||||
menu_add(cur_logic->texts[p0 - 1]);
|
||||
menu->add(cur_logic->texts[p0 - 1]);
|
||||
}
|
||||
|
||||
cmd(set_menu_item) {
|
||||
debugC(4, kDebugLevelScripts, "text %02x of %02x", p0, cur_logic->num_texts);
|
||||
if (cur_logic->texts != NULL && p0 <= cur_logic->num_texts)
|
||||
menu_add_item(cur_logic->texts[p0 - 1], p1);
|
||||
menu->add_item(cur_logic->texts[p0 - 1], p1);
|
||||
}
|
||||
|
||||
cmd(version) {
|
||||
|
@ -980,7 +980,7 @@ cmd(restart_game) {
|
|||
if (sel == 0) {
|
||||
game.quit_prog_now = 0xff;
|
||||
setflag(F_restart_game, true);
|
||||
menu_enable_all();
|
||||
menu->enable_all();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -732,7 +732,7 @@ int loadgame_simple() {
|
|||
if ((rc = load_game(path)) == err_OK) {
|
||||
message_box("Game restored.");
|
||||
game.exit_all_logics = 1;
|
||||
menu_enable_all();
|
||||
menu->enable_all();
|
||||
} else {
|
||||
message_box("Error restoring game.");
|
||||
}
|
||||
|
@ -775,7 +775,7 @@ int loadgame_dialog() {
|
|||
if ((rc = load_game(path)) == err_OK) {
|
||||
message_box("Game restored.");
|
||||
game.exit_all_logics = 1;
|
||||
menu_enable_all();
|
||||
menu->enable_all();
|
||||
} else {
|
||||
message_box("Error restoring game.");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue