From 812e679c9befbfe98cc311723b8296df0384515e Mon Sep 17 00:00:00 2001
From: Mateusz Kaduk <mateusz.kaduk@gmail.com>
Date: Sun, 12 Dec 2004 17:51:50 +0000
Subject: Created setup class and changed to use guichan

---
 src/game.cpp            |   3 +-
 src/graphic/graphic.cpp |   7 +--
 src/gui/setup.cpp       | 162 +++++++++++++++---------------------------------
 src/gui/setup.h         |  30 ++++++++-
 4 files changed, 81 insertions(+), 121 deletions(-)

diff --git a/src/game.cpp b/src/game.cpp
index 7b15b9ea..cdf4f7c2 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -48,6 +48,7 @@ volatile int tick_time;
 volatile bool refresh = false, action_time = false;
 int current_npc, server_tick;
 extern unsigned char screen_mode;
+bool show_setup;
 
 #define MAX_TIME 10000
 
@@ -238,7 +239,7 @@ void do_input() {
 	  }    
 	
 	if(key[KEY_F11] && action_time==true)
-	    show_player_setup = true;
+	    show_setup = true;
 
   // Emotions, Skill dialog
 	if(key_shifts & KB_ALT_FLAG && action_time == true) {
diff --git a/src/graphic/graphic.cpp b/src/graphic/graphic.cpp
index 184ede63..efc0637f 100644
--- a/src/graphic/graphic.cpp
+++ b/src/graphic/graphic.cpp
@@ -54,6 +54,8 @@ bool show_skill_list_dialog = false;
 char npc_button[10] = "Close";
 
 gcn::TextField *chatInput;
+Setup *setup;
+extern bool show_setup;
 
 void ChatListener::action(const std::string& eventId)
 {
@@ -224,7 +226,7 @@ void init_graphic() {
     clear_to_color(chat_background, makecol(0,0,0));
 
     // Initialize gui
-
+    
     // Create chat input field
     chatInput = new gcn::TextField();
     chatInput->setPosition(0, SCREEN_H - chatInput->getHeight());
@@ -245,7 +247,6 @@ void init_graphic() {
 	sell_player = init_dialog(sell_dialog, -1);
 	skill_list_player = init_dialog(skill_list_dialog, -1);
 	npc_list_player = init_dialog(npc_list_dialog, -1);
-	init_setup();
   //gui_bitmap = vpage[page_num];
 	alfont_text_mode(-1);
 	inventory.create(100, 100);
@@ -587,8 +588,6 @@ new_tileset->spriteset[0]->draw(vbuffer, 0, 0);
 	// character status display
 	update_stats_dialog();
 	gui_update(stats_player);
-	update_setup();
-
 	
 	draw_sprite(vpage[page_num], mouse_sprite, mouse_x, mouse_y);
 #ifdef WIN32
diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp
index b88fc8cd..c8b677db 100644
--- a/src/gui/setup.cpp
+++ b/src/gui/setup.cpp
@@ -5,133 +5,69 @@
  *  setup dialog.
  */
 
-#include <allegro.h>
-#include "gui.h"
+#include "setup.h"
 
-#define CONFIG_FILE "tmw.ini"
-
-extern unsigned int screen_mode;
-
-DIALOG_PLAYER *player_setup;    /* Pointer to player's dialog */
-bool show_player_setup;         /* Switch for setup dialog */
-
-typedef struct { 
-  int width, height;
-  char* desc; 
-} LIST;                         /* New type for holding video modes */
-
-int apply_setup(int msg, DIALOG *d, int c);  /* Need this here in order to access dialog directly */
-
-/* 
- * Hard coded list cuz get_gfx_mode_list fails with AUTODETECT 
- */
-const LIST mode_list[] = {           
-  { 1024,768, "1024x768" },
-  { 800,600, "800x600" }, 
-  { 640,480, "640x480"} 
-};
+extern bool show_setup;
 
 /*
- * Get video modes list for setup
+ * Setup action listener
  */
-char *get_listbox_video_modes(int index, int *list_size)
-{ 
-  if (index < 0 & index < 4) {
-    *list_size = 3;
-    return NULL;
-  } else
-    return mode_list[index].desc;					  
-}
-
-/*
- * Calls orginal tmw_button_proc and If D_O_K was cliked calls function in dp3
- */
-int tmw_ok_button_proc(int msg, DIALOG *d, int c)
-{
-  int ret;
-  
-  ret = tmw_button_proc(msg, d, c); // returns D_CLOSE when D_O_K was clicked otherwise D_O_K
-  
-  if(ret == D_CLOSE && d->dp3 != NULL)
-    return ((int(*)(void))d->dp3)();
-  
-  return ret;
+void SetupActionListener::action(const std::string& eventId) {
+  if(eventId == "apply") {
+    puts("apply");
+    show_setup = false;
+  } else if (eventId == "cancel") {
+    puts("calncel");
+    show_setup = false;
+  }
 }
 
 /* 
- * Array for dialog objects and callbacks 
- */
-DIALOG setup_dialog[] =
-  {
-    /* Dialog proc*/
-    { tmw_dialog_proc,     300, 300,  300,  200,   0,  0,    0,      0,       0,   0,    (char *)"Setup",                NULL, NULL  },
-    
-    /* Descriptions */
-    { tmw_text_proc,       305, 320,    0,    0,   0,  0,    0,      0,       0,   0,    (char *)"Display",              NULL, NULL  },
-    { tmw_text_proc,       435, 320,    0,    0,   0,  0,    0,      0,       0,   0,    (char *)"Strech modes",         NULL, NULL  },
-    
-    /* List */
-    { tmw_list_proc,	   305, 345,  100,  100,   0,  0,    0,      0,       0,   0,    (char *)get_listbox_video_modes, NULL, NULL  },
-    
-    /* Radio buttons */
-    //{ tmw_radio_proc,      435, 339,  160,   19,   0,  0,    0,      0,       0,   0,    (char *)"Normal",               NULL, NULL  },
-    //{ tmw_radio_proc,      435, 358,  160,   19,   0,  0,    0,      0,       0,   0,    (char *)"2xSaI",                NULL, NULL  },
-    //{ tmw_radio_proc,      435, 377,  160,   19,   0,  0,    0,      0,       0,   0,    (char *)"SuperEagle",           NULL, NULL  },
-    
-    /* Buttons */
-    { tmw_ok_button_proc,  315, 470,   40,   20,   0,  0,    0,      D_EXIT,       0,   0,    (char *)"&Ok",             NULL, (int*)apply_setup },
-    { tmw_ok_button_proc,  535, 470,   40,   20,   0,  0,    0,      D_EXIT,       0,   0,    (char *)"&Cancel",         NULL, NULL  },
-    { NULL,                  0,   0,    0,    0,   0,  0,    0,      0,            0,   0,                 NULL,         NULL, NULL  }
-  };
-
-/*
- * Apply setup settings
+ * Display setup dialog
  */
-int apply_setup(int msg, DIALOG *d, int c) {
+Setup::Setup() {
+  visible = false;
+  setupDialog = new gcn::Container();
+  displayLabel = new gcn::Label("Display");
+  applyButton = new gcn::Button("Apply");
+  cancelButton = new gcn::Button("Cancel");
   
-  int index = 0;
-  int index_loaded = 0, value;
+  /* Set dialog elements */
+  setupDialog->setDimension(gcn::Rectangle(300,300,200,200));
+  displayLabel->setPosition(4,14);
+  applyButton->setPosition(30,162);
+  cancelButton->setPosition(146,162);
   
-  /* Load settings from file */
-  if(get_config_int("[settings]","selected_vmode",value) == 1)
-    index_loaded = value;
+  /* Set events */
+  applyButton->setEventId("apply");
+  cancelButton->setEventId("cancel");
   
-  /* Check if settings changed if so use and save them */
-  if((index = setup_dialog[3].d1) != index_loaded) {
-    set_config_int("[settings]","selected_vmode",index);
-    flush_config_file();
-  }
+  /* Listen for actions */
+  SetupActionListener *setupActionListener = new SetupActionListener();
+  applyButton->addActionListener(setupActionListener);
+  cancelButton->addActionListener(setupActionListener);
   
-  /* 
-     if(set_gfx_mode(screen_mode, list[index].width, list[index].height, 0, 0)) 
-     error(allegro_error);
-  */
-  return D_CLOSE;                   // closes the dialog
+  /* Assemble dialog */
+  setupDialog->add(displayLabel);
+  setupDialog->add(applyButton);
+  setupDialog->add(cancelButton);
+
+  setupDialog->setVisible(visible);
+  guiTop->add(setupDialog);
 }
 
-/*
- * Initialize setup dialog
- */
-void init_setup(void) {
-  int value = 0;
-  
-  show_player_setup = false;        // setup starts as hidden
-  
-  /* Initialize */
-  player_setup = init_dialog(setup_dialog, -1);
-  position_dialog(setup_dialog, 300, 200);
-  set_config_file(CONFIG_FILE);
-  
-  /* Set previous selections */
-  value = get_config_int("[settings]","selected_vmode",0);
-  setup_dialog[3].d1 = value;
+Setup::~Setup() {  
+  delete setupDialog;
+  delete displayLabel;
+  delete applyButton;
+  delete cancelButton;
 }
 
-/*
- * Update setup dialog 
- */
-void update_setup(void) {
-  if(show_player_setup) {
-    if(gui_update(player_setup) == 0) show_player_setup = false;
-  }    
+void Setup::toggleVisible(bool toggle) {
+  if(visible == false && toggle == true)
+    visible == true;
+    else
+  if(visible == true && toggle == false) visible == false;
+  
+  setupDialog->setVisible(visible);
 }
diff --git a/src/gui/setup.h b/src/gui/setup.h
index 35700afb..1d8b859f 100644
--- a/src/gui/setup.h
+++ b/src/gui/setup.h
@@ -6,9 +6,33 @@
 #ifndef tmw_included_setup_h
 #define tmw_included_setup_h
 
-void init_setup();
-void update_setup();
+#include <allegro.h>
+#ifdef WIN32
+#include <winallegro.h>
+#endif
+#include "gui.h"
+#include "../graphic/graphic.h"
+
+class Setup {
+ public:
+  Setup();
+  ~Setup();
+  void toggleVisible(bool toggle);
+  
+ private:
+  bool visible;
+  /* Dialog parts */
+  gcn::Container *setupDialog;
+  gcn::Label *displayLabel;
+  gcn::Button *applyButton;
+  gcn::Button *cancelButton;
+};
 
-extern bool show_player_setup;
+/* The action listener for setup dialog */
+class SetupActionListener : public gcn::ActionListener
+{
+ public:
+  void action(const std::string& eventId);
+};
 
 #endif
-- 
cgit v1.2.3-70-g09d2