tools/installer/SelectGame.cpp
author David Anderson <dvander@alliedmods.net>
Sun Oct 28 20:15:51 2007 +0000 (2007-10-28)
changeset 1651 077571ea8942
child 1722 2c16f160f5dd
permissions -rw-r--r--
initial import of incomplete installer
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@1651
    54
			
dvander@1651
    55
			return (INT_PTR)TRUE;
dvander@1651
    56
		}
dvander@1651
    57
	case WM_COMMAND:
dvander@1651
    58
		{
dvander@1651
    59
			if (LOWORD(wParam) == ID_SELGAME_EXIT
dvander@1651
    60
				|| LOWORD(wParam) == ID_CLOSE)
dvander@1651
    61
			{
dvander@1651
    62
				return AskToExit(hDlg);
dvander@1651
    63
			}
dvander@1651
    64
			else if (LOWORD(wParam) == ID_SELGAME_BACK)
dvander@1651
    65
			{
dvander@1651
    66
				EndDialog(hDlg, (INT_PTR)DisplayChooseMethod);
dvander@1651
    67
				return (INT_PTR)TRUE;
dvander@1651
    68
			}
dvander@1651
    69
			else if (LOWORD(wParam) == IDC_SELGAME_LIST)
dvander@1651
    70
			{
dvander@1651
    71
				if (HIWORD(wParam) == LBN_SELCHANGE)
dvander@1651
    72
				{
dvander@1651
    73
					HWND lbox = (HWND)lParam;
dvander@1651
    74
					LRESULT cursel = SendMessage(lbox, LB_GETCURSEL, 0, 0);
dvander@1651
    75
dvander@1651
    76
					selected_game_index = -1;
dvander@1651
    77
dvander@1651
    78
					if (cursel == LB_ERR)
dvander@1651
    79
					{
dvander@1651
    80
						break;
dvander@1651
    81
					}
dvander@1651
    82
dvander@1651
    83
					if (cursel >= (LRESULT)g_mod_count)
dvander@1651
    84
					{
dvander@1651
    85
						break;
dvander@1651
    86
					}
dvander@1651
    87
dvander@1651
    88
					selected_game_index = (int)cursel;
dvander@1651
    89
dvander@1651
    90
					HWND button = GetDlgItem(hDlg, ID_SELGAME_NEXT);
dvander@1651
    91
					EnableWindow(button, TRUE);
dvander@1651
    92
				}
dvander@1651
    93
			}
dvander@1651
    94
			else if (LOWORD(wParam) == ID_SELGAME_NEXT)
dvander@1651
    95
			{
dvander@1651
    96
				if (selected_game_index == -1)
dvander@1651
    97
				{
dvander@1651
    98
					break;
dvander@1651
    99
				}
dvander@1651
   100
dvander@1651
   101
				g_LocalCopier.SetOutputPath(game_sel_list[selected_game_index]->mod_path);
dvander@1651
   102
				SetInstallMethod(&g_LocalCopier);
dvander@1651
   103
dvander@1651
   104
				EndDialog(hDlg, (INT_PTR)DisplayPerformInstall);
dvander@1651
   105
dvander@1651
   106
				return (INT_PTR)TRUE;
dvander@1651
   107
			}
dvander@1651
   108
			break;
dvander@1651
   109
		}
dvander@1651
   110
	case WM_DESTROY:
dvander@1651
   111
		{
dvander@1651
   112
			ReleaseGamesList();
dvander@1651
   113
			free(game_sel_list);
dvander@1651
   114
			game_sel_list = NULL;
dvander@1651
   115
			game_sel_count = 0;
dvander@1651
   116
			break;
dvander@1651
   117
		}
dvander@1651
   118
	}
dvander@1651
   119
dvander@1651
   120
	return (INT_PTR)FALSE;
dvander@1651
   121
}
dvander@1651
   122
dvander@1651
   123
void *DisplaySelectGame(HWND hWnd)
dvander@1651
   124
{
dvander@1651
   125
	INT_PTR val;
dvander@1651
   126
	
dvander@1651
   127
	if ((val = DialogBox(
dvander@1651
   128
		g_hInstance, 
dvander@1651
   129
		MAKEINTRESOURCE(IDD_SELECT_GAME),
dvander@1651
   130
		hWnd,
dvander@1651
   131
		ChooseGameHandler)) == -1)
dvander@1651
   132
	{
dvander@1651
   133
		return NULL;
dvander@1651
   134
	}
dvander@1651
   135
dvander@1651
   136
	return (void *)val;
dvander@1651
   137
}
dvander@1651
   138