|
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 |
|