summaryrefslogtreecommitdiffstats
path: root/modules/player/src/player_gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/player/src/player_gui.c')
-rw-r--r--modules/player/src/player_gui.c946
1 files changed, 0 insertions, 946 deletions
diff --git a/modules/player/src/player_gui.c b/modules/player/src/player_gui.c
deleted file mode 100644
index fcbad71..0000000
--- a/modules/player/src/player_gui.c
+++ /dev/null
@@ -1,946 +0,0 @@
-/******************************************************************************
- * Copyright (C) 2015 Alejandro Colomar Andrés *
- ******************************************************************************/
-
-
-/******************************************************************************
- ******* headers **************************************************************
- ******************************************************************************/
- #include <math.h>
- #include <stdbool.h>
- #include <stdio.h>
-
- #include <gtk/gtk.h>
-
- #include "libalx/io/alx_input.h"
-
- #include "game_iface.h"
- #include "menu_gui.h"
- #include "player_iface.h"
-
- #include "player_gui.h"
-
-
-/******************************************************************************
- ******* macros ***************************************************************
- ******************************************************************************/
- # define LINE_SIZE (80)
- # define REFRESH_TIME_MS (100)
-
-
-/******************************************************************************
- ******* enums ****************************************************************
- ******************************************************************************/
- enum Buttons {
- BTN_CH_OFF = 0,
- BTN_CH_1,
- BTN_CH_2,
- BTN_SAVE,
- BTN_QUIT,
- BTN_QTTY
- };
-
- enum TButtons {
- TBTN_PAUSE,
- TBTN_QTTY
- };
-
-
-/******************************************************************************
- ******* structs **************************************************************
- ******************************************************************************/
- struct Label_Data {
- GtkWidget *ptr;
- char text [LINE_SIZE];
- };
-
- struct Field_Data {
- GtkWidget *ptr;
- char ch;
- int r;
- int c;
- int *row;
- int *col;
- int *act;
- };
-
- struct Button_Data {
- GtkWidget *ptr;
- char text [LINE_SIZE];
- int val;
- int *act;
- };
-
- struct TButton_Data {
- GtkWidget *ptr;
- char text [LINE_SIZE];
- char text2 [LINE_SIZE];
- int val;
- int val2;
- int *act;
- };
-
- struct Entry_fname_Data {
- GtkWidget *ptr;
- struct Label_Data lbl;
- const char *fpath;
- char *fname;
- };
-
- struct Entry_str_Data {
- GtkWidget *ptr;
- struct Label_Data lbl;
- char *str;
- int strsize;
- };
-
- struct PBar_Data {
- GtkWidget *ptr;
- double frac;
- char text [LINE_SIZE];
- };
-
- struct EBox_Data {
- GtkWidget *ptr;
- int val;
- int *act;
- };
-
- struct Timeout_Data {
- int id;
- int val;
- int *act;
- };
-
-
-/******************************************************************************
- ******* variables ************************************************************
- ******************************************************************************/
-static GtkWidget *box;
-static GtkWidget *box_help;
-static GtkWidget *box_help_in;
-static struct Button_Data button [BTN_QTTY];
-static struct TButton_Data tbutton [TBTN_QTTY];
-static struct Entry_str_Data entry_name;
-static struct Entry_fname_Data entry_fname;
-static GtkWidget *box_board;
-static GtkWidget *box_board_in;
-static struct PBar_Data pbar_board_tit;
-// static GtkWidget *box_board_tit;
-static GtkWidget *box_board_tab;
-static GtkWidget *table_board;
-static struct Field_Data field [ROWS_GUI_MAX] [COLS_GUI_MAX];
-static struct EBox_Data ebox_cheat;
-// static GtkWidget *box_board_stit;
-static struct Label_Data label_stit;
-static int last_help;
-static struct Timeout_Data timeout;
-
-static int state;
-
-
-/******************************************************************************
- ******* static functions *****************************************************
- ******************************************************************************/
- /* Start */
-static void board_init (const struct Player_Iface_Position *pos,
- int *action);
-static void show_board_start(const struct Player_Iface_Position *pos,
- const char *title, const char *subtitle);
-
-static void board_loop_start(const struct Player_Iface_Position *pos);
-
- /* Play */
-static void show_board (const struct Game_Iface_Out *board,
- const char *title, const char *subtitle);
-
-static void board_loop (const struct Game_Iface_Out *board);
-
-static char set_char (int game_iface_visible);
-static void show_char (const struct Field_Data *field);
- /* Help */
-static void help_init (int *action);
-static void show_help (const struct Game_Iface_Out *board);
-static void show_help_start (void);
-static void show_help_play (void);
-static void show_help_pause (void);
-static void show_help_xyzzy (void);
-static void show_help_cheat (void);
-static void show_help_safe (void);
-static void show_help_gameover (void);
- /* Input */
-static gboolean callback_field (GtkWidget *widget,
- GdkEventButton *event,
- void *data);
-static gboolean callback_ebox (GtkWidget *widget,
- GdkEventButton *event,
- void *data);
-static void callback_button (GtkWidget *widget, void *data);
-static gboolean callback_tbutton (GtkWidget *widget, void *data);
-static void callback_entry_fname (GtkWidget *widget, void *data);
-static void callback_entry_str (GtkWidget *widget, void *data);
-static gboolean callback_timeout (void *data);
-
-
-/******************************************************************************
- ******* main *****************************************************************
- ******************************************************************************/
-void player_gui_init (struct Player_Iface_Position *pos,
- int *action)
-{
- int i;
- int j;
-
- box = gtk_hbox_new(false, 0);
- gtk_container_add(GTK_CONTAINER(window_gui), box);
-
- /* Structure */
- GtkWidget *separator;
- box_help = gtk_vbox_new(true, 0);
- separator = gtk_vseparator_new();
- box_board = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box), box_help, false, false, 5);
- gtk_box_pack_start(GTK_BOX(box), separator, false, false, 5);
- gtk_box_pack_start(GTK_BOX(box), box_board, true, true, 5);
-
- help_init(action);
- board_init(pos, action);
-
- /* Board fields */
- for (i = 0; i < pos->rows; i++) {
- for (j = 0; j < pos->cols; j++) {
- field[i][j].r = i;
- field[i][j].c = j;
- field[i][j].row = &(pos->row);
- field[i][j].col = &(pos->col);
- field[i][j].act = action;
- field[i][j].ptr = gtk_button_new_with_label("NEW");
- g_signal_connect(field[i][j].ptr, "button-press-event",
- G_CALLBACK(callback_field), (void *)&field[i][j]);
- gtk_table_attach_defaults(GTK_TABLE(table_board), field[i][j].ptr,
- field[i][j].c, field[i][j].c + 1,
- field[i][j].r, field[i][j].r + 1);
- }
- }
-
- /* Refresh */
- gtk_widget_show_all(window_gui);
-}
-
-int player_gui_start (const struct Player_Iface_Position *pos,
- const char *title, const char *subtitle)
-{
-
- show_help_start();
- show_board_start(pos, title, subtitle);
-
- /* Refresh */
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
-
- gtk_main();
-
- return 0;
-}
-
-int player_gui (const struct Game_Iface_Out *board,
- const struct Player_Iface_Position *pos,
- const char *title, const char *subtitle)
-{
-
- state = board->state;
-
- show_help(board);
- show_board(board, title, subtitle);
-
- /* Refresh */
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
-
- gtk_main();
-
- return 0;
-}
-
-void player_gui_save_name (const char *fpath, char *fname, int destsize)
-{
-
- entry_fname.fpath = fpath;
- entry_fname.fname = fname;
-
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_hide(button[BTN_SAVE].ptr);
- gtk_widget_show(entry_fname.lbl.ptr);
- gtk_widget_show(entry_fname.ptr);
- gtk_widget_hide(button[BTN_QUIT].ptr);
-
- gtk_widget_hide(box_board);
-
- gtk_main();
-
- gtk_widget_show(box_board);
-
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
-
- /* Update last_help */
- last_help = GAME_IFACE_STATE_FOO;
-}
-
-void player_gui_score_name (char *player_name, int destsize)
-{
-
- entry_name.str = player_name;
- entry_name.strsize = destsize;
-
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_hide(button[BTN_SAVE].ptr);
- gtk_widget_show(entry_name.lbl.ptr);
- gtk_widget_show(entry_name.ptr);
- gtk_widget_hide(button[BTN_QUIT].ptr);
-
- gtk_widget_hide(box_board);
-
- gtk_main();
-
- gtk_widget_show(box_board);
-
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
-
- /* Update last_help */
- last_help = GAME_IFACE_STATE_FOO;
-}
-
-void player_gui_cleanup (void)
-{
-
- gtk_widget_destroy(box);
-}
-
-
-/******************************************************************************
- ******* static functions *****************************************************
- ******************************************************************************/
-/* * * * * * * * * *
- * * * Start * * * * * * *
- * * * * * * * * * */
-static void board_init (const struct Player_Iface_Position *pos,
- int *action)
-{
- GtkWidget *separator[2];
-
- /* Box */
- box_board_in = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_board), box_board_in, true, true, 5);
-
- /* Title (with progress bar) */
- pbar_board_tit.ptr = gtk_progress_bar_new();
-// box_board_tit = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_board_in), pbar_board_tit.ptr, false, false, 0);
-// gtk_box_pack_start(GTK_BOX(box_board_in), box_board_tit, false, false, 0);
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar_board_tit.ptr), "NEW");
-// gtk_box_pack_start(GTK_BOX(box_board_tit), label[0].ptr, false, false, 0);
-
- /* Pogress bar */
- gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(pbar_board_tit.ptr), GTK_PROGRESS_LEFT_TO_RIGHT);
-
- /* Separator */
- separator[0] = gtk_hseparator_new();
- gtk_box_pack_start(GTK_BOX(box_board_in), separator[0], false, false, 5);
-
- /* Board */
- box_board_tab = gtk_vbox_new(true, 0);
- gtk_box_pack_start(GTK_BOX(box_board_in), box_board_tab, true, true, 0);
- table_board = gtk_table_new(pos->rows, pos->cols, true);
- gtk_box_pack_start(GTK_BOX(box_board_tab), table_board, true, true, 5);
-
- /* Separator */
- separator[1] = gtk_hseparator_new();
- gtk_box_pack_start(GTK_BOX(box_board_in), separator[1], false, false, 5);
-
- /* Subtitle (with cheats) */
- ebox_cheat.ptr = gtk_event_box_new();
-// box_board_stit = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_board_in), ebox_cheat.ptr, false, false, 0);
-// gtk_box_pack_start(GTK_BOX(box_board_in), box_board_stit, false, false, 0);
- label_stit.ptr = gtk_label_new("NEW");
- gtk_container_add(GTK_CONTAINER(ebox_cheat.ptr), label_stit.ptr);
-// gtk_box_pack_start(GTK_BOX(box_board_stit), label_stit.ptr, false, false, 0);
-
- /* Cheats */
- ebox_cheat.val = PLAYER_IFACE_ACT_XYZZY_ON;
- ebox_cheat.act = action;
- g_signal_connect(ebox_cheat.ptr, "button-press-event",
- G_CALLBACK(callback_ebox), (void *)&ebox_cheat);
-
- /* Timeout */
- timeout.val = PLAYER_IFACE_ACT_FOO;
- timeout.act = action;
- timeout.id = 0;
-
- /* Refresh */
- gtk_widget_show_all(box_board);
-}
-
-static void show_board_start(const struct Player_Iface_Position *pos,
- const char *title, const char *subtitle)
-{
-
- /* Title */
- snprintf(pbar_board_tit.text, LINE_SIZE, title);
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar_board_tit.ptr), pbar_board_tit.text);
-
- /* Progress bar */
- pbar_board_tit.frac = 0;
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar_board_tit.ptr), pbar_board_tit.frac);
-
- /* Board */
- board_loop_start(pos);
-
- /* Subtitle */
- snprintf(label_stit.text, LINE_SIZE, subtitle);
- gtk_label_set_text(GTK_LABEL(label_stit.ptr), label_stit.text);
-
- /* Refresh */
- gtk_widget_show_all(box_board);
-}
-
-static void board_loop_start(const struct Player_Iface_Position *pos)
-{
- int i;
- int j;
- char c;
-
- c = PLAYER_GUI_CHAR_HIDDEN_FIELD;
-
- for (i = 0; i < pos->rows; i++) {
- for (j = 0; j < pos->cols; j++) {
- field[i][j].ch = c;
- show_char(&field[i][j]);
- }
- }
-}
-
-/* * * * * * * * * *
- * * * Play * * * * * *
- * * * * * * * * * */
-static void show_board (const struct Game_Iface_Out *board,
- const char *title, const char *subtitle)
-{
- /* Title */
- snprintf(pbar_board_tit.text, LINE_SIZE, title);
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar_board_tit.ptr), pbar_board_tit.text);
-
- /* Progress bar */
- if (board->flags % board->mines) {
- /* This is a trick to have (frac <= 1) instead of (frac < 1) */
- pbar_board_tit.frac = ((double)board->flags) / ((double)board->mines);
- pbar_board_tit.frac = fmod(pbar_board_tit.frac, 1);
- } else if (board->flags) {
- pbar_board_tit.frac = 1;
- } else {
- pbar_board_tit.frac = 0;
- }
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar_board_tit.ptr), pbar_board_tit.frac);
-
- /* Board */
- board_loop(board);
-
- /* Subtitle */
- snprintf(label_stit.text, LINE_SIZE, subtitle);
- gtk_label_set_text(GTK_LABEL(label_stit.ptr), label_stit.text);
-
- /* Timeout */
- if (board->state == GAME_IFACE_STATE_PLAYING)
- timeout.id = g_timeout_add_seconds(1, callback_timeout, (void *)&timeout);
-
- /* Refresh */
- gtk_widget_show_all(box_board);
-}
-
-static void board_loop (const struct Game_Iface_Out *board)
-{
- int i;
- int j;
-
- for (i = 0; i < board->rows; i++) {
- for (j = 0; j < board->cols; j++) {
- field[i][j].ch = set_char(board->visible[i][j]);
- show_char(&field[i][j]);
- }
- }
-}
-
-static char set_char (int game_iface_visible)
-{
- char c;
-
- switch (game_iface_visible) {
- case GAME_IFACE_VIS_KBOOM:
- c = PLAYER_GUI_CHAR_KBOOM;
- break;
- case GAME_IFACE_VIS_HIDDEN_FIELD:
- c = PLAYER_GUI_CHAR_HIDDEN_FIELD;
- break;
- case GAME_IFACE_VIS_HIDDEN_MINE:
- c = PLAYER_GUI_CHAR_HIDDEN_MINE;
- break;
- case GAME_IFACE_VIS_HIDDEN_SAFE:
- c = PLAYER_GUI_CHAR_HIDDEN_SAFE;
- break;
- case GAME_IFACE_VIS_SAFE_MINE:
- c = PLAYER_GUI_CHAR_SAFE_MINE;
- break;
- case GAME_IFACE_VIS_0:
- c = PLAYER_GUI_CHAR_0;
- break;
- case GAME_IFACE_VIS_1:
- c = PLAYER_GUI_CHAR_1;
- break;
- case GAME_IFACE_VIS_2:
- c = PLAYER_GUI_CHAR_2;
- break;
- case GAME_IFACE_VIS_3:
- c = PLAYER_GUI_CHAR_3;
- break;
- case GAME_IFACE_VIS_4:
- c = PLAYER_GUI_CHAR_4;
- break;
- case GAME_IFACE_VIS_5:
- c = PLAYER_GUI_CHAR_5;
- break;
- case GAME_IFACE_VIS_6:
- c = PLAYER_GUI_CHAR_6;
- break;
- case GAME_IFACE_VIS_7:
- c = PLAYER_GUI_CHAR_7;
- break;
- case GAME_IFACE_VIS_8:
- c = PLAYER_GUI_CHAR_8;
- break;
- case GAME_IFACE_VIS_FLAG:
- c = PLAYER_GUI_CHAR_FLAG;
- break;
- case GAME_IFACE_VIS_FLAG_FALSE:
- c = PLAYER_GUI_CHAR_FLAG_FALSE;
- break;
- case GAME_IFACE_VIS_POSSIBLE:
- c = PLAYER_GUI_CHAR_POSSIBLE;
- break;
- case GAME_IFACE_VIS_POSSIBLE_FALSE:
- c = PLAYER_GUI_CHAR_POSSIBLE_FALSE;
- break;
- default:
- c = PLAYER_GUI_CHAR_ERROR;
- break;
- }
-
- return c;
-}
-
-static void show_char (const struct Field_Data *field)
-{
- char text [2];
-
- sprintf(text, "%c", field->ch);
- gtk_button_set_label(GTK_BUTTON(field->ptr), text);
-}
-
-/* * * * * * * * * *
- * * * Help * * * * * * *
- * * * * * * * * * */
-static void help_init (int *action)
-{
-
- /* Box */
- box_help_in = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_help), box_help_in, false, false, 5);
-
- /* Text */
- snprintf(button[BTN_CH_OFF].text, LINE_SIZE, "[_0] Cheats off");
- snprintf(button[BTN_CH_1].text, LINE_SIZE, "Cheat _1");
- snprintf(button[BTN_CH_2].text, LINE_SIZE, "Cheat _2");
- snprintf(tbutton[TBTN_PAUSE].text, LINE_SIZE, "_Pause");
- snprintf(tbutton[TBTN_PAUSE].text2, LINE_SIZE, "[_P] Continue");
- snprintf(button[BTN_SAVE].text, LINE_SIZE, "_Save");
- snprintf(entry_fname.lbl.text, LINE_SIZE, "File name:");
- snprintf(entry_name.lbl.text, LINE_SIZE, "Your name:");
- snprintf(button[BTN_QUIT].text, LINE_SIZE, "_Quit");
-
- /* Data */
- /* L click */
- button[BTN_CH_OFF].val = PLAYER_IFACE_ACT_XYZZY_OFF;
- button[BTN_CH_1].val = PLAYER_IFACE_ACT_XYZZY_LIN;
- button[BTN_CH_2].val = PLAYER_IFACE_ACT_XYZZY_P;
- tbutton[TBTN_PAUSE].val = PLAYER_IFACE_ACT_PAUSE;
- button[BTN_SAVE].val = PLAYER_IFACE_ACT_SAVE;
- button[BTN_QUIT].val = PLAYER_IFACE_ACT_QUIT;
- /* R click */
- tbutton[TBTN_PAUSE].val2 = PLAYER_IFACE_ACT_PAUSE;
-
- /* Action */
- button[BTN_CH_OFF].act = action;
- button[BTN_CH_1].act = action;
- button[BTN_CH_2].act = action;
- tbutton[TBTN_PAUSE].act = action;
- button[BTN_SAVE].act = action;
- button[BTN_QUIT].act = action;
-
- /* Generate widgets */
- button[BTN_CH_OFF].ptr = gtk_button_new_with_mnemonic(button[BTN_CH_OFF].text);
- button[BTN_CH_1].ptr = gtk_button_new_with_mnemonic(button[BTN_CH_1].text);
- button[BTN_CH_2].ptr = gtk_button_new_with_mnemonic(button[BTN_CH_2].text);
- tbutton[TBTN_PAUSE].ptr = gtk_toggle_button_new_with_mnemonic(tbutton[TBTN_PAUSE].text);
- button[BTN_SAVE].ptr = gtk_button_new_with_mnemonic(button[BTN_SAVE].text);
- entry_fname.lbl.ptr = gtk_label_new(entry_fname.lbl.text);
- entry_fname.ptr = gtk_entry_new();
- entry_name.lbl.ptr = gtk_label_new(entry_name.lbl.text);
- entry_name.ptr = gtk_entry_new();
- button[BTN_QUIT].ptr = gtk_button_new_with_mnemonic(button[BTN_QUIT].text);
-
- /* Toggle buttons */
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tbutton[TBTN_PAUSE].ptr), false);
-
- /* Events */
- g_signal_connect(button[BTN_CH_OFF].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_CH_OFF]);
- g_signal_connect(button[BTN_CH_1].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_CH_1]);
- g_signal_connect(button[BTN_CH_2].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_CH_2]);
- g_signal_connect(tbutton[TBTN_PAUSE].ptr, "toggled",
- G_CALLBACK(callback_tbutton), (void *)&tbutton[TBTN_PAUSE]);
- g_signal_connect(button[BTN_SAVE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
- g_signal_connect(entry_fname.ptr, "activate",
- G_CALLBACK(callback_entry_fname), (void *)&entry_fname);
- g_signal_connect(entry_name.ptr, "activate",
- G_CALLBACK(callback_entry_str), (void *)&entry_name);
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
-
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_OFF].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_1].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_2].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), tbutton[TBTN_PAUSE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), entry_fname.lbl.ptr, true, true, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), entry_fname.ptr, true, true, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), entry_name.lbl.ptr, true, true, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), entry_name.ptr, true, true, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
-}
-
-static void show_help (const struct Game_Iface_Out *board)
-{
-
- if (last_help != board->state) {
- switch (board->state) {
- case GAME_IFACE_STATE_PLAYING:
- show_help_play();
- break;
- case GAME_IFACE_STATE_PAUSE:
- show_help_pause();
- break;
- case GAME_IFACE_STATE_XYZZY:
- show_help_xyzzy();
- break;
- case GAME_IFACE_STATE_CHEATED:
- show_help_cheat();
- break;
- case GAME_IFACE_STATE_SAFE:
- show_help_safe();
- break;
- case GAME_IFACE_STATE_GAMEOVER:
- show_help_gameover();
- break;
- }
-
- /* Update last_help */
- last_help = board->state;
-
- /* Refresh */
- gtk_widget_show(box_help_in);
- gtk_widget_show(box_help);
- }
-}
-
-static void show_help_start (void)
-{
-
- /* Show & hide */
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_hide(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-
- /* Update last_help */
- last_help = GAME_IFACE_STATE_FOO;
-
- /* Refresh */
- gtk_widget_show(box_help_in);
- gtk_widget_show(box_help);
-}
-
-static void show_help_play (void)
-{
-
- /* Show & hide */
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_show(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_show(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-}
-
-static void show_help_pause (void)
-{
-
- /* Show & hide */
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_show(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_show(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-}
-
-static void show_help_xyzzy (void)
-{
-
- /* Show & hide */
- gtk_widget_show(button[BTN_CH_OFF].ptr);
- gtk_widget_show(button[BTN_CH_1].ptr);
- gtk_widget_show(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_show(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-}
-
-static void show_help_cheat (void)
-{
-
- /* Show & hide */
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_show(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-}
-
-static void show_help_safe (void)
-{
-
- /* Show & hide */
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_show(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-}
-
-static void show_help_gameover (void)
-{
-
- /* Show & hide */
- gtk_widget_hide(button[BTN_CH_OFF].ptr);
- gtk_widget_hide(button[BTN_CH_1].ptr);
- gtk_widget_hide(button[BTN_CH_2].ptr);
- gtk_widget_hide(tbutton[TBTN_PAUSE].ptr);
- gtk_widget_hide(button[BTN_SAVE].ptr);
- gtk_widget_hide(entry_fname.lbl.ptr);
- gtk_widget_hide(entry_fname.ptr);
- gtk_widget_hide(entry_name.lbl.ptr);
- gtk_widget_hide(entry_name.ptr);
- gtk_widget_show(button[BTN_QUIT].ptr);
-}
-
-/* * * * * * * * * *
- * * * Input * * * * * * *
- * * * * * * * * * */
-static gboolean callback_field (GtkWidget *widget,
- GdkEventButton *event,
- void *data)
-{
- struct Field_Data *field_ij;
-
- if (state == GAME_IFACE_STATE_PLAYING && timeout.id)
- g_source_remove(timeout.id);
-
- field_ij = ((struct Field_Data *)data);
- *(field_ij->row) = field_ij->r;
- *(field_ij->col) = field_ij->c;
-
- switch (event->button) {
- case 1:
- //1 is left mouse btn
- if (event->type == GDK_BUTTON_PRESS)
- *(field_ij->act) = PLAYER_IFACE_ACT_STEP;
- break;
-
- case 3:
- //3 is right mouse btn
- if (event->type == GDK_BUTTON_PRESS)
- *(field_ij->act) = PLAYER_IFACE_ACT_FLAG;
- break;
- }
-
- gtk_main_quit();
-
- return false;
-}
-
-static gboolean callback_ebox (GtkWidget *widget,
- GdkEventButton *event,
- void *data)
-{
- struct EBox_Data *ebox;
-
- if ((state == GAME_IFACE_STATE_PLAYING) && timeout.id)
- g_source_remove(timeout.id);
-
- ebox = ((struct EBox_Data *)data);
-
- switch (event->button) {
- case 1:
- //1 is left mouse btn
- if (event->type == GDK_BUTTON_PRESS)
- *(ebox->act) = ebox->val;
- else if (event->type == GDK_2BUTTON_PRESS)
- ; /* TODO */
- break;
-
- case 3:
- //3 is right mouse btn
- break;
- }
-
- gtk_main_quit();
-
- return false;
-}
-
-static void callback_button (GtkWidget *widget, void *data)
-{
- struct Button_Data *button;
-
- if ((state == GAME_IFACE_STATE_PLAYING) && timeout.id)
- g_source_remove(timeout.id);
-
- button = ((struct Button_Data *)data);
- *(button->act) = button->val;
-
- gtk_main_quit();
-
-}
-
-static gboolean callback_tbutton (GtkWidget *widget, void *data)
-{
- struct TButton_Data *tbutton;
-
- if ((state == GAME_IFACE_STATE_PLAYING) && timeout.id)
- g_source_remove(timeout.id);
-
- tbutton = ((struct TButton_Data *)data);
-
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
- /* If control reaches here, the toggle button is down */
- *(tbutton->act) = tbutton->val;
- gtk_button_set_label(GTK_BUTTON(tbutton[TBTN_PAUSE].ptr), tbutton[TBTN_PAUSE].text2);
- } else {
- /* If control reaches here, the toggle button is up */
- *(tbutton->act) = tbutton->val2;
- gtk_button_set_label(GTK_BUTTON(tbutton[TBTN_PAUSE].ptr), tbutton[TBTN_PAUSE].text);
- }
-
- gtk_main_quit();
-
- return false;
-}
-
-static void callback_entry_fname (GtkWidget *widget, void *data)
-{
- struct Entry_fname_Data *entry;
- const char *str;
- int err;
- char buff [LINE_SIZE];
-
- entry = ((struct Entry_fname_Data *)data);
- str = gtk_entry_get_text(GTK_ENTRY(entry->ptr));
- err = alx_sscan_fname(entry->fpath, entry->fname, false, str);
-
- if (err) {
- snprintf(buff, LINE_SIZE, "Error %i", err);
- gtk_entry_set_text(GTK_ENTRY(entry->ptr), buff);
- gtk_editable_select_region(GTK_EDITABLE(entry->ptr),
- 0, GTK_ENTRY(entry->ptr)->text_length);
- }
-
- gtk_main_quit();
-}
-
-static void callback_entry_str (GtkWidget *widget, void *data)
-{
- struct Entry_str_Data *entry;
- const char *str;
-
- entry = ((struct Entry_str_Data *)data);
- str = gtk_entry_get_text(GTK_ENTRY(entry->ptr));
- snprintf(entry->str, entry->strsize, "%s", str);
-
- gtk_main_quit();
-}
-
-static gboolean callback_timeout (void *data)
-{
- struct Timeout_Data *tout;
-
- tout = ((struct Timeout_Data *)data);
- *(tout->act) = tout->val;
-
- gtk_main_quit();
-
- return false;
-}
-
-
-/******************************************************************************
- ******* end of file **********************************************************
- ******************************************************************************/