1.1 --- a/tools/installer/ChooseMethod.cpp Fri Jul 11 06:51:21 2008 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,235 +0,0 @@
1.4 -#include "InstallerMain.h"
1.5 -#include "InstallerUtil.h"
1.6 -#include "ChooseMethod.h"
1.7 -#include "Welcome.h"
1.8 -#include "GamesList.h"
1.9 -#include "SelectGame.h"
1.10 -#include "PerformInstall.h"
1.11 -#include "LocalCopyMethod.h"
1.12 -
1.13 -game_group_t *g_game_group = NULL;
1.14 -unsigned int method_chosen = 0;
1.15 -TCHAR method_path[MAX_PATH];
1.16 -
1.17 -bool SelectFolder(HWND hOwner)
1.18 -{
1.19 - BROWSEINFO info;
1.20 - LPITEMIDLIST pidlist;
1.21 - TCHAR path[MAX_PATH];
1.22 -
1.23 - if (FAILED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
1.24 - {
1.25 - return false;
1.26 - }
1.27 -
1.28 - info.hwndOwner = hOwner;
1.29 - info.pidlRoot = NULL;
1.30 - info.pszDisplayName = path;
1.31 - info.lpszTitle = _T("Select a game/mod folder");
1.32 - info.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
1.33 - info.lpfn = NULL;
1.34 - info.lParam = 0;
1.35 - info.iImage = 0;
1.36 -
1.37 - if ((pidlist = SHBrowseForFolder(&info)) == NULL)
1.38 - {
1.39 - CoUninitialize();
1.40 - return false;
1.41 - }
1.42 -
1.43 - /* This hellish code is from MSDN and translate shortcuts to real targets.
1.44 - * God almighty, I wish Window used real symlinks.
1.45 - */
1.46 - bool acquire_success = false;
1.47 - bool is_link = false;
1.48 - IShellFolder *psf = NULL;
1.49 - LPCITEMIDLIST new_item_list;
1.50 - HRESULT hr;
1.51 -
1.52 - hr = SHBindToParent(pidlist, IID_IShellFolder, (void **)&psf, &new_item_list);
1.53 - if (SUCCEEDED(hr))
1.54 - {
1.55 - IShellLink *psl = NULL;
1.56 -
1.57 - hr = psf->GetUIObjectOf(hOwner, 1, &new_item_list, IID_IShellLink, NULL, (void **)&psl);
1.58 - if (SUCCEEDED(hr))
1.59 - {
1.60 - LPITEMIDLIST new_item_list;
1.61 -
1.62 - hr = psl->GetIDList(&new_item_list);
1.63 - if (SUCCEEDED(hr))
1.64 - {
1.65 - is_link = true;
1.66 -
1.67 - hr = SHGetPathFromIDList(new_item_list, method_path);
1.68 - if (SUCCEEDED(hr))
1.69 - {
1.70 - acquire_success = true;
1.71 - }
1.72 -
1.73 - CoTaskMemFree(new_item_list);
1.74 - }
1.75 - psl->Release();
1.76 - }
1.77 - psf->Release();
1.78 - }
1.79 -
1.80 - if (!acquire_success && !is_link)
1.81 - {
1.82 - hr = SHGetPathFromIDList(pidlist, method_path);
1.83 - if (SUCCEEDED(hr))
1.84 - {
1.85 - acquire_success = true;
1.86 - }
1.87 - }
1.88 -
1.89 - /* That was awful. shoo, shoo, COM */
1.90 - CoTaskMemFree(pidlist);
1.91 - CoUninitialize();
1.92 -
1.93 - return acquire_success;
1.94 -}
1.95 -
1.96 -INT_PTR CALLBACK ChooseMethodHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
1.97 -{
1.98 - switch (message)
1.99 - {
1.100 - case WM_COMMAND:
1.101 - {
1.102 - if (LOWORD(wParam) == ID_METHOD_BACK)
1.103 - {
1.104 - UpdateGlobalPosition(hDlg);
1.105 - EndDialog(hDlg, (INT_PTR)DisplayWelcome);
1.106 - return (INT_PTR)TRUE;
1.107 - }
1.108 - else if (LOWORD(wParam) == ID_METHOD_EXIT
1.109 - || LOWORD(wParam) == ID_CLOSE)
1.110 - {
1.111 - return AskToExit(hDlg);
1.112 - }
1.113 - else if (LOWORD(wParam) == IDC_METHOD_DED_SERVER
1.114 - || LOWORD(wParam) == IDC_METHOD_ALONE_SERVER
1.115 - || LOWORD(wParam) == IDC_METHOD_LISTEN_SERVER
1.116 - || LOWORD(wParam) == IDC_METHOD_UPLOAD_FTP
1.117 - || LOWORD(wParam) == IDC_METHOD_CUSTOM_FOLDER)
1.118 - {
1.119 - method_chosen = LOWORD(wParam);
1.120 - HWND button = GetDlgItem(hDlg, ID_METHOD_NEXT);
1.121 - EnableWindow(button, TRUE);
1.122 - break;
1.123 - }
1.124 - else if (LOWORD(wParam) == ID_METHOD_NEXT)
1.125 - {
1.126 - unsigned int game_type = 0;
1.127 -
1.128 - switch (method_chosen)
1.129 - {
1.130 - case IDC_METHOD_DED_SERVER:
1.131 - {
1.132 - game_type = GAMES_DEDICATED;
1.133 - break;
1.134 - }
1.135 - case IDC_METHOD_ALONE_SERVER:
1.136 - {
1.137 - game_type = GAMES_STANDALONE;
1.138 - break;
1.139 - }
1.140 - case IDC_METHOD_LISTEN_SERVER:
1.141 - {
1.142 - game_type = GAMES_LISTEN;
1.143 - break;
1.144 - }
1.145 - case IDC_METHOD_UPLOAD_FTP:
1.146 - {
1.147 - break;
1.148 - }
1.149 - case IDC_METHOD_CUSTOM_FOLDER:
1.150 - {
1.151 - int val;
1.152 -
1.153 - if (!SelectFolder(hDlg))
1.154 - {
1.155 - break;
1.156 - }
1.157 -
1.158 - val = IsValidFolder(method_path);
1.159 - if (val != GAMEINFO_IS_USABLE)
1.160 - {
1.161 - DisplayBadFolderDialog(hDlg, val);
1.162 - break;
1.163 - }
1.164 -
1.165 - g_LocalCopier.SetOutputPath(method_path);
1.166 - SetInstallMethod(&g_LocalCopier);
1.167 -
1.168 - UpdateGlobalPosition(hDlg);
1.169 - EndDialog(hDlg, (INT_PTR)DisplayPerformInstall);
1.170 - }
1.171 - }
1.172 -
1.173 - if (game_type != 0)
1.174 - {
1.175 - g_game_group = NULL;
1.176 -
1.177 - BuildGameDB();
1.178 -
1.179 - if (game_type == GAMES_DEDICATED)
1.180 - {
1.181 - g_game_group = &g_games.dedicated;
1.182 - }
1.183 - else if (game_type == GAMES_LISTEN)
1.184 - {
1.185 - g_game_group = &g_games.listen;
1.186 - }
1.187 - else if (game_type == GAMES_STANDALONE)
1.188 - {
1.189 - g_game_group = &g_games.standalone;
1.190 - }
1.191 -
1.192 - if (g_game_group == NULL)
1.193 - {
1.194 - return (INT_PTR)TRUE;
1.195 - }
1.196 -
1.197 - if (g_game_group->list_count == 0)
1.198 - {
1.199 - DisplayBadGamesDialog(hDlg, g_game_group->error_code);
1.200 - return (INT_PTR)TRUE;
1.201 - }
1.202 -
1.203 - /* If we got a valid games list, we can display the next
1.204 - * dialog box.
1.205 - */
1.206 - UpdateGlobalPosition(hDlg);
1.207 - EndDialog(hDlg, (INT_PTR)DisplaySelectGame);
1.208 - return (INT_PTR)TRUE;
1.209 - }
1.210 - }
1.211 - break;
1.212 - }
1.213 - case WM_INITDIALOG:
1.214 - {
1.215 - SetToGlobalPosition(hDlg);
1.216 - return (INT_PTR)TRUE;
1.217 - }
1.218 - }
1.219 -
1.220 - return (INT_PTR)FALSE;
1.221 -}
1.222 -
1.223 -void *DisplayChooseMethod(HWND hWnd)
1.224 -{
1.225 - INT_PTR val;
1.226 -
1.227 - if ((val = DialogBox(
1.228 - g_hInstance,
1.229 - MAKEINTRESOURCE(IDD_CHOOSE_METHOD),
1.230 - hWnd,
1.231 - ChooseMethodHandler)) == -1)
1.232 - {
1.233 - return NULL;
1.234 - }
1.235 -
1.236 - return (void *)val;
1.237 -}
1.238 -