tools/installer/SelectGame.cpp
author David Anderson <dvander@alliedmods.net>
Sun Nov 25 04:46:18 2007 +0000 (2007-11-25)
changeset 1722 2c16f160f5dd
parent 1651 077571ea8942
child 1723 befc8cfb4f3c
permissions -rw-r--r--
file copying now works, dialogs re-display at their last location, fixed up a bunch of interface mistakes, etc
dvander@1651
     1
#include "InstallerMain.h"
dvander@1651
     2
#include "InstallerUtil.h"
dvander@1651
     3
#include "SelectGame.h"
dvander@1651
     4
#include "GamesList.h"
dvander@1651
     5
#include "ChooseMethod.h"
dvander@1651
     6
#include "PerformInstall.h"
dvander@1651
     7
#include "LocalCopyMethod.h"
dvander@1651
     8
dvander@1651
     9
int selected_game_index = -1;
dvander@1651
    10
mod_info_t **game_sel_list = NULL;
dvander@1651
    11
unsigned int game_sel_count = 0;
dvander@1651
    12
dvander@1651
    13
void AppendSelectableGame(mod_info_t *mod)
dvander@1651
    14
{
dvander@1651
    15
	if (game_sel_list == NULL)
dvander@1651
    16
	{
dvander@1651
    17
		game_sel_list = 
dvander@1651
    18
			(mod_info_t **)malloc(sizeof(mod_info_t *) * (game_sel_count + 1));
dvander@1651
    19
	}
dvander@1651
    20
	else
dvander@1651
    21
	{
dvander@1651
    22
		game_sel_list = 
dvander@1651
    23
			(mod_info_t **)realloc(game_sel_list, 
dvander@1651
    24
			sizeof(mod_info_t *) * (game_sel_count + 1));
dvander@1651
    25
	}
dvander@1651
    26
dvander@1651
    27
	game_sel_list[game_sel_count++] = mod;
dvander@1651
    28
}
dvander@1651
    29
dvander@1651
    30
INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
dvander@1651
    31
{
dvander@1651
    32
	switch (message)
dvander@1651
    33
	{
dvander@1651
    34
	case WM_INITDIALOG:
dvander@1651
    35
		{
dvander@1651
    36
			HWND lbox = GetDlgItem(hDlg, IDC_SELGAME_LIST);
dvander@1651
    37
dvander@1651
    38
			for (unsigned int i = 0; i < g_mod_count; i++)
dvander@1651
    39
			{
dvander@1651
    40
				LRESULT res = SendMessage(lbox,
dvander@1651
    41
					LB_ADDSTRING,
dvander@1651
    42
					0,
dvander@1651
    43
					(LPARAM)g_mod_list[i].name);
dvander@1651
    44
dvander@1651
    45
				if (res == LB_ERR || res == LB_ERRSPACE)
dvander@1651
    46
				{
dvander@1651
    47
					continue;
dvander@1651
    48
				}
dvander@1651
    49
dvander@1651
    50
				AppendSelectableGame(&g_mod_list[i]);
dvander@1651
    51
			}
dvander@1651
    52
dvander@1651
    53
			UpdateWindow(lbox);
dvander@1722
    54
dvander@1722
    55
			SetToGlobalPosition(hDlg);
dvander@1651
    56
			
dvander@1651
    57
			return (INT_PTR)TRUE;
dvander@1651
    58
		}
dvander@1651
    59
	case WM_COMMAND:
dvander@1651
    60
		{
dvander@1651
    61
			if (LOWORD(wParam) == ID_SELGAME_EXIT
dvander@1651
    62
				|| LOWORD(wParam) == ID_CLOSE)
dvander@1651
    63
			{
dvander@1651
    64
				return AskToExit(hDlg);
dvander@1651
    65
			}
dvander@1651
    66
			else if (LOWORD(wParam) == ID_SELGAME_BACK)
dvander@1651
    67
			{
dvander@1722
    68
				UpdateGlobalPosition(hDlg);
dvander@1651
    69
				EndDialog(hDlg, (INT_PTR)DisplayChooseMethod);
dvander@1651
    70
				return (INT_PTR)TRUE;
dvander@1651
    71
			}
dvander@1651
    72
			else if (LOWORD(wParam) == IDC_SELGAME_LIST)
dvander@1651
    73
			{
dvander@1651
    74
				if (HIWORD(wParam) == LBN_SELCHANGE)
dvander@1651
    75
				{
dvander@1651
    76
					HWND lbox = (HWND)lParam;
dvander@1651
    77
					LRESULT cursel = SendMessage(lbox, LB_GETCURSEL, 0, 0);
dvander@1651
    78
dvander@1651
    79
					selected_game_index = -1;
dvander@1651
    80
dvander@1651
    81
					if (cursel == LB_ERR)
dvander@1651
    82
					{
dvander@1651
    83
						break;
dvander@1651
    84
					}
dvander@1651
    85
dvander@1651
    86
					if (cursel >= (LRESULT)g_mod_count)
dvander@1651
    87
					{
dvander@1651
    88
						break;
dvander@1651
    89
					}
dvander@1651
    90
dvander@1651
    91
					selected_game_index = (int)cursel;
dvander@1651
    92
dvander@1651
    93
					HWND button = GetDlgItem(hDlg, ID_SELGAME_NEXT);
dvander@1651
    94
					EnableWindow(button, TRUE);
dvander@1651
    95
				}
dvander@1651
    96
			}
dvander@1651
    97
			else if (LOWORD(wParam) == ID_SELGAME_NEXT)
dvander@1651
    98
			{
dvander@1651
    99
				if (selected_game_index == -1)
dvander@1651
   100
				{
dvander@1651
   101
					break;
dvander@1651
   102
				}
dvander@1651
   103
dvander@1651
   104
				g_LocalCopier.SetOutputPath(game_sel_list[selected_game_index]->mod_path);
dvander@1651
   105
				SetInstallMethod(&g_LocalCopier);
dvander@1651
   106
dvander@1722
   107
				UpdateGlobalPosition(hDlg);
dvander@1651
   108
				EndDialog(hDlg, (INT_PTR)DisplayPerformInstall);
dvander@1651
   109
dvander@1651
   110
				return (INT_PTR)TRUE;
dvander@1651
   111
			}
dvander@1651
   112
			break;
dvander@1651
   113
		}
dvander@1651
   114
	case WM_DESTROY:
dvander@1651
   115
		{
dvander@1651
   116
			ReleaseGamesList();
dvander@1651
   117
			free(game_sel_list);
dvander@1651
   118
			game_sel_list = NULL;
dvander@1651
   119
			game_sel_count = 0;
dvander@1651
   120
			break;
dvander@1651
   121
		}
dvander@1651
   122
	}
dvander@1651
   123
dvander@1651
   124
	return (INT_PTR)FALSE;
dvander@1651
   125
}
dvander@1651
   126
dvander@1651
   127
void *DisplaySelectGame(HWND hWnd)
dvander@1651
   128
{
dvander@1651
   129
	INT_PTR val;
dvander@1651
   130
	
dvander@1651
   131
	if ((val = DialogBox(
dvander@1651
   132
		g_hInstance, 
dvander@1651
   133
		MAKEINTRESOURCE(IDD_SELECT_GAME),
dvander@1651
   134
		hWnd,
dvander@1651
   135
		ChooseGameHandler)) == -1)
dvander@1651
   136
	{
dvander@1651
   137
		return NULL;
dvander@1651
   138
	}
dvander@1651
   139
dvander@1651
   140
	return (void *)val;
dvander@1651
   141
}
dvander@1651
   142