diff options
author | Simon Howard | 2008-11-21 18:03:06 +0000 |
---|---|---|
committer | Simon Howard | 2008-11-21 18:03:06 +0000 |
commit | ae18d8c4b6f7f918aa5ec496ca32899793cbe41e (patch) | |
tree | ed15c8dab41695f3b899590c4efbfec91a4426ee /src/setup/mainmenu.c | |
parent | 9646b03b13d875289ce0270cacab67657684bd58 (diff) | |
download | chocolate-doom-ae18d8c4b6f7f918aa5ec496ca32899793cbe41e.tar.gz chocolate-doom-ae18d8c4b6f7f918aa5ec496ca32899793cbe41e.tar.bz2 chocolate-doom-ae18d8c4b6f7f918aa5ec496ca32899793cbe41e.zip |
Move setup/ into src/ and merge with main codebase. Remove duplicated
code. Split out I_Endoom to separate i_endoom.c file.
Subversion-branch: /branches/raven-branch
Subversion-revision: 1384
Diffstat (limited to 'src/setup/mainmenu.c')
-rw-r--r-- | src/setup/mainmenu.c | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/src/setup/mainmenu.c b/src/setup/mainmenu.c new file mode 100644 index 00000000..1585c96b --- /dev/null +++ b/src/setup/mainmenu.c @@ -0,0 +1,218 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2006 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// + +#include <stdlib.h> + +#include "config.h" +#include "textscreen.h" + +#include "execute.h" + +#include "m_argv.h" +#include "m_config.h" + +#include "setup_icon.c" + +#include "compatibility.h" +#include "display.h" +#include "joystick.h" +#include "keyboard.h" +#include "mouse.h" +#include "multiplayer.h" +#include "sound.h" + +static void DoQuit(void *widget, void *dosave) +{ + if (dosave != NULL) + { + // DANGER: this is broken. Do not save. +// M_SaveDefaults(); + } + + exit(0); +} + +static void QuitConfirm(void *unused1, void *unused2) +{ + txt_window_t *window; + txt_label_t *label; + txt_button_t *yes_button; + txt_button_t *no_button; + + window = TXT_NewWindow(NULL); + + TXT_AddWidgets(window, + label = TXT_NewLabel("Exiting setup.\nSave settings?"), + TXT_NewStrut(24, 0), + yes_button = TXT_NewButton2(" Yes ", DoQuit, DoQuit), + no_button = TXT_NewButton2(" No ", DoQuit, NULL), + NULL); + + TXT_SetWidgetAlign(label, TXT_HORIZ_CENTER); + TXT_SetWidgetAlign(yes_button, TXT_HORIZ_CENTER); + TXT_SetWidgetAlign(no_button, TXT_HORIZ_CENTER); + + // Only an "abort" button in the middle. + TXT_SetWindowAction(window, TXT_HORIZ_LEFT, NULL); + TXT_SetWindowAction(window, TXT_HORIZ_CENTER, + TXT_NewWindowAbortAction(window)); + TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, NULL); +} + +static void LaunchDoom(void *unused1, void *unused2) +{ + execute_context_t *exec; + + // Save configuration first + + M_SaveDefaults(); + + // Shut down textscreen GUI + + TXT_Shutdown(); + + // Launch Doom + + exec = NewExecuteContext(); + AddConfigParameters(exec); + ExecuteDoom(exec); + + exit(0); +} + +void MainMenu(void) +{ + txt_window_t *window; + txt_window_action_t *quit_action; + + window = TXT_NewWindow("Main Menu"); + + TXT_AddWidgets(window, + TXT_NewButton2("Configure Display", + (TxtWidgetSignalFunc) ConfigDisplay, NULL), + TXT_NewButton2("Configure Joystick", + (TxtWidgetSignalFunc) ConfigJoystick, NULL), + TXT_NewButton2("Configure Keyboard", + (TxtWidgetSignalFunc) ConfigKeyboard, NULL), + TXT_NewButton2("Configure Mouse", + (TxtWidgetSignalFunc) ConfigMouse, NULL), + TXT_NewButton2("Configure Sound", + (TxtWidgetSignalFunc) ConfigSound, NULL), + TXT_NewButton2("Compatibility", + (TxtWidgetSignalFunc) CompatibilitySettings, NULL), + TXT_NewButton2("Save parameters and launch DOOM", LaunchDoom, NULL), + TXT_NewStrut(0, 1), + TXT_NewButton2("Start a Network Game", + (TxtWidgetSignalFunc) StartMultiGame, NULL), + TXT_NewButton2("Join a Network Game", + (TxtWidgetSignalFunc) JoinMultiGame, NULL), + TXT_NewButton2("Multiplayer Configuration", + (TxtWidgetSignalFunc) MultiplayerConfig, NULL), + NULL); + + quit_action = TXT_NewWindowAction(KEY_ESCAPE, "Quit"); + TXT_SignalConnect(quit_action, "pressed", QuitConfirm, NULL); + TXT_SetWindowAction(window, TXT_HORIZ_LEFT, quit_action); +} + +// +// Initialise all configuration variables, load config file, etc +// + +static void InitConfig(void) +{ + SetChatMacroDefaults(); + SetPlayerNameDefault(); + + M_SetConfigFilenames("default.cfg", "chocolate-doom.cfg"); + M_SetConfigDir(); + M_LoadDefaults(); +} + +// +// Application icon +// + +static void SetIcon(void) +{ + SDL_Surface *surface; + Uint8 *mask; + int i; + + // Generate the mask + + mask = malloc(setup_icon_w * setup_icon_h / 8); + memset(mask, 0, setup_icon_w * setup_icon_h / 8); + + for (i=0; i<setup_icon_w * setup_icon_h; ++i) + { + if (setup_icon_data[i * 3] != 0x00 + || setup_icon_data[i * 3 + 1] != 0x00 + || setup_icon_data[i * 3 + 2] != 0x00) + { + mask[i / 8] |= 1 << (7 - i % 8); + } + } + + + surface = SDL_CreateRGBSurfaceFrom(setup_icon_data, + setup_icon_w, + setup_icon_h, + 24, + setup_icon_w * 3, + 0xff << 0, + 0xff << 8, + 0xff << 16, + 0); + + SDL_WM_SetIcon(surface, mask); + SDL_FreeSurface(surface); + free(mask); +} + +// +// Initialise and run the textscreen GUI. +// + +static void RunGUI(void) +{ + SetDisplayDriver(); + + if (!TXT_Init()) + { + fprintf(stderr, "Failed to initialise GUI\n"); + exit(-1); + } + + TXT_SetDesktopTitle(PACKAGE_NAME " Setup ver " PACKAGE_VERSION); + SetIcon(); + + MainMenu(); + + TXT_GUIMainLoop(); +} + +void D_DoomMain(void) +{ + InitConfig(); + RunGUI(); +} + |