Subversion Repositories spk

Rev

Rev 196 | Rev 212 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 196 Rev 197
Line 37... Line 37...
37
 
37
 
38
void DirectoryControl::AddFoundDir(const Utils::WString &dir)
38
void DirectoryControl::AddFoundDir(const Utils::WString &dir)
39
{
39
{
40
	if (CDirIO(dir).exists())
40
	if (CDirIO(dir).exists())
41
	{
41
	{
42
		Utils::WString gameName = _packages->GetGameExe()->GetGameName(dir.toString());
42
		Utils::WString gameName = _packages->GetGameExe()->gameName(dir);
43
		if (!gameName.empty())
43
		if (!gameName.empty())
44
		{
44
		{
45
			if (!_lFoundDirs->contains(dir, true) && !_lDirs->contains(dir, true) && !_lRemoveDirs->contains(dir, true))
45
			if (!_lFoundDirs->contains(dir, true) && !_lDirs->contains(dir, true) && !_lRemoveDirs->contains(dir, true))
46
			{
46
			{
47
				Utils::WString exe = dir.findReplace("\\", "/").findReplace("//", "/");
47
				Utils::WString exe = dir.findReplace(L"\\", L"/").findReplace(L"//", L"/");
48
				_lFoundDirs->pushBack(exe, _packages->GetGameExe()->GetGameName(exe.toString()));
48
				_lFoundDirs->pushBack(exe, _packages->GetGameExe()->gameName(exe));
49
			}
49
			}
50
		}
50
		}
51
	}
51
	}
52
}
52
}
53
 
53
 
54
void DirectoryControl::FindAllAddons(const Utils::WString &exe, bool checkBase)
54
void DirectoryControl::FindAllAddons(const Utils::WString &exe, bool checkBase)
55
{
55
{
56
	CDirIO Dir(exe);
56
	CDirIO Dir(exe);
57
 
57
 
58
	if (checkBase && _packages->GetGameExe()->isAddon(exe.toString()))
58
	if (checkBase && _packages->GetGameExe()->isAddon(exe))
59
	{
59
	{
60
		Utils::WString base = _packages->getGameRunExe(_packages->GetGameExe()->GetGameDir(exe.toString()));
60
		Utils::WString base = _packages->getGameRunExe(_packages->GetGameExe()->gameDir(exe));
61
		if (CFileIO::Exists(base))
61
		if (CFileIO::Exists(base))
62
		{
62
		{
63
			AddFoundDir(base);
63
			AddFoundDir(base);
64
			FindAllAddons(base, false);
64
			FindAllAddons(base, false);
65
			return;
65
			return;
Line 70... Line 70...
70
	{
70
	{
71
		CFileIO file(exe);
71
		CFileIO file(exe);
72
		if (file.exists())
72
		if (file.exists())
73
		{
73
		{
74
			// dont include addons, only the base game
74
			// dont include addons, only the base game
75
			if (!_packages->GetGameExe()->isAddon(exe.toString()))
75
			if (!_packages->GetGameExe()->isAddon(exe))
76
			{
76
			{
77
				CDirIO dir(file.dir());
77
				CDirIO dir(file.dir());
78
				Utils::CStringList list;
78
				Utils::WStringList list;
79
				// get all the addons from a base game
79
				// get all the addons from a base game
80
				if (_packages->getGameAddons(list, _packages->GetGameExe()->GetProperDir(exe.toString())))
80
				if (_packages->getGameAddons(list, _packages->GetGameExe()->properDir(exe)))
81
				{
81
				{
82
					for (Utils::SStringList *a_item = list.first(); a_item; a_item = list.next())
82
					for (Utils::WStringNode *a_item = list.first(); a_item; a_item = list.next())
83
					{
83
					{
84
						//check both the exe and the data directory exists
84
						//check both the exe and the data directory exists
85
						if (dir.exists(a_item->data) && dir.exists(a_item->str))
85
						if (dir.exists(a_item->data) && dir.exists(a_item->str))
86
						{
86
						{
87
							Utils::WString newFile = dir.file(a_item->str);
87
							Utils::WString newFile = dir.file(a_item->str);
Line 92... Line 92...
92
			}
92
			}
93
		}
93
		}
94
	}
94
	}
95
	else if (Dir.exists())
95
	else if (Dir.exists())
96
	{
96
	{
97
		Utils::CStringList list;
97
		Utils::WStringList list;
98
		// get all the addons from a base game
98
		// get all the addons from a base game
99
		if (_packages->getGameAddons(list, _packages->GetGameExe()->GetProperDir(exe.toString())))
99
		if (_packages->getGameAddons(list, _packages->GetGameExe()->properDir(exe)))
100
		{
100
		{
101
			for (Utils::SStringList *a_item = list.first(); a_item; a_item = list.next())
101
			for (Utils::WStringNode *a_item = list.first(); a_item; a_item = list.next())
102
			{
102
			{
103
				//check both the exe and the data directory exists
103
				//check both the exe and the data directory exists
104
				if (Dir.exists(a_item->data) && Dir.exists(a_item->str))
104
				if (Dir.exists(a_item->data) && Dir.exists(a_item->str))
105
				{
105
				{
106
					Utils::WString newFile = Dir.file(a_item->str);
106
					Utils::WString newFile = Dir.file(a_item->str);
Line 164... Line 164...
164
 
164
 
165
			if (searchKey)
165
			if (searchKey)
166
			{
166
			{
167
				System::String ^regRead = System::Convert::ToString(searchKey->GetValue(_US(strNode->data)));
167
				System::String ^regRead = System::Convert::ToString(searchKey->GetValue(_US(strNode->data)));
168
				if (regRead)
168
				if (regRead)
169
					AddFoundDir(_packages->GetGameExe()->GetGameRunExe(_S(regRead)));
169
					AddFoundDir(_packages->GetGameExe()->gameRunExe(_WS(regRead)));
170
			}
170
			}
171
		}
171
		}
172
		else if (sFirst.Compare("Steam"))
172
		else if (sFirst.Compare("Steam"))
173
		{
173
		{
174
			RegistryKey ^steamKey = Registry::CurrentUser->OpenSubKey("Software\\Valve\\Steam");
174
			RegistryKey ^steamKey = Registry::CurrentUser->OpenSubKey("Software\\Valve\\Steam");
175
			if (steamKey)
175
			if (steamKey)
176
			{
176
			{
177
				System::String ^regRead = System::Convert::ToString(steamKey->GetValue("SteamPath"));
177
				System::String ^regRead = System::Convert::ToString(steamKey->GetValue("SteamPath"));
178
				if (regRead)
178
				if (regRead)
179
				{
179
				{
180
					Utils::String steamDir = _S(regRead);
180
					Utils::WString steamDir = _WS(regRead);
181
					if (!steamDir.empty())
181
					if (!steamDir.empty())
182
					{
182
					{
183
						Utils::String dir = steamDir + "\\steamapps\\common\\" + sRest;
183
						Utils::WString dir = steamDir + L"\\steamapps\\common\\" + sRest.toWString();
184
						AddFoundDir(_packages->GetGameExe()->GetGameRunExe(dir.findReplace("\\", "/").findReplace("//", "/")));
184
						AddFoundDir(_packages->GetGameExe()->gameRunExe(dir.findReplace(L"\\", L"/").findReplace(L"//", L"/")));
185
					}
185
					}
186
				}
186
				}
187
			}
187
			}
188
		}
188
		}
189
		else
189
		else
190
		{
190
		{
191
			Utils::String dir = strNode->str;
191
			Utils::WString dir = strNode->str;
192
			dir = dir.findReplace("\\", "/").findReplace("//", "/");
192
			dir = dir.findReplace(L"\\", L"/").findReplace(L"//", L"/");
193
			dir = dir.findReplace("%PROGRAMFILES%", _S(progfile));
193
			dir = dir.findReplace(L"%PROGRAMFILES%", _WS(progfile));
194
			AddFoundDir(_packages->GetGameExe()->GetGameRunExe(dir));
194
			AddFoundDir(_packages->GetGameExe()->gameRunExe(dir));
195
		}
195
		}
196
	}
196
	}
197
 
197
 
198
	// now add all addons for already added dirs
198
	// now add all addons for already added dirs
199
	for(int i = _lFoundDirs->size() - 1; i >= 0; --i)
199
	for(int i = _lFoundDirs->size() - 1; i >= 0; --i)
Line 206... Line 206...
206
 
206
 
207
void DirectoryControl::UpdateGameDirs()
207
void DirectoryControl::UpdateGameDirs()
208
{
208
{
209
	this->listView1->Items->Clear();
209
	this->listView1->Items->Clear();
210
	for (Utils::WStringNode *s_item = _lDirs->first(); s_item; s_item = _lDirs->next()) {
210
	for (Utils::WStringNode *s_item = _lDirs->first(); s_item; s_item = _lDirs->next()) {
211
		Utils::String dir = _packages->GetGameExe()->GetProperDir(s_item->str.toString());
211
		Utils::WString dir = _packages->GetGameExe()->properDir(s_item->str);
212
		ListViewItem ^item = gcnew ListViewItem(_US(dir));
212
		ListViewItem ^item = gcnew ListViewItem(_US(dir));
213
		
213
		
214
		int iGame = _packages->GetGameExe()->GetGameType(s_item->str.toString());
214
		int iGame = _packages->GetGameExe()->getGameType(s_item->str);
215
		item->ImageIndex = iGame;
215
		item->ImageIndex = iGame;
216
 
216
 
217
		item->SubItems->Add(_US(s_item->data));
217
		item->SubItems->Add(_US(s_item->data));
218
		if (CFileIO::Exists(s_item->str))
218
		if (CFileIO::Exists(s_item->str))
219
		{
219
		{
220
			ListViewItem::ListViewSubItem ^i = _packages->isCurrentDir(dir) ? item->SubItems->Add("Active") : item->SubItems->Add("OK");
220
			ListViewItem::ListViewSubItem ^i = _packages->isCurrentDir(dir.toString()) ? item->SubItems->Add("Active") : item->SubItems->Add("OK");
221
			i->ForeColor = Color::Green;
221
			i->ForeColor = Color::Green;
222
			item->SubItems->Add(_US(_packages->ConvertLanguage(_packages->getGameLanguage(CFileIO(s_item->str).dir().toString()))));
222
			item->SubItems->Add(_US(_packages->ConvertLanguage(_packages->getGameLanguage(CFileIO(s_item->str).dir().toString()))));
223
		}
223
		}
224
		else
224
		else
225
		{
225
		{
226
			ListViewItem::ListViewSubItem ^i = item->SubItems->Add("Not Found");
226
			ListViewItem::ListViewSubItem ^i = item->SubItems->Add("Not Found");
227
			i->ForeColor = Color::Red;
227
			i->ForeColor = Color::Red;
228
			item->SubItems->Add("-");
228
			item->SubItems->Add("-");
229
		}
229
		}
230
 
230
 
231
		item->SubItems->Add(_US(_packages->GetGameExe()->isAddon(s_item->str.toString()) ? "Yes" : "No"));
231
		item->SubItems->Add(_US(_packages->GetGameExe()->isAddon(s_item->str) ? "Yes" : "No"));
232
		item->SubItems->Add(_US(s_item->str));
232
		item->SubItems->Add(_US(s_item->str));
233
		this->listView1->Items->Add(item);
233
		this->listView1->Items->Add(item);
234
 
234
 
235
	}
235
	}
236
 
236
 
Line 245... Line 245...
245
void DirectoryControl::UpdateFoundDirs()
245
void DirectoryControl::UpdateFoundDirs()
246
{
246
{
247
	this->listView2->Items->Clear();
247
	this->listView2->Items->Clear();
248
	for (Utils::WStringNode *s_item = _lRemoveDirs->first(); s_item; s_item = _lRemoveDirs->next()) {
248
	for (Utils::WStringNode *s_item = _lRemoveDirs->first(); s_item; s_item = _lRemoveDirs->next()) {
249
		if (CFileIO::Exists(s_item->str)) {
249
		if (CFileIO::Exists(s_item->str)) {
250
			ListViewItem ^item = gcnew ListViewItem(_US(_packages->GetGameExe()->GetProperDir(s_item->str.toString())));
250
			ListViewItem ^item = gcnew ListViewItem(_US(_packages->GetGameExe()->properDir(s_item->str)));
251
			int iGame = _packages->GetGameExe()->GetGameType(s_item->str.toString());
251
			int iGame = _packages->GetGameExe()->getGameType(s_item->str);
252
			item->ImageIndex = iGame;
252
			item->ImageIndex = iGame;
253
			item->SubItems->Add(_US(s_item->data));
253
			item->SubItems->Add(_US(s_item->data));
254
			item->SubItems->Add(_US(_packages->ConvertLanguage(_packages->getGameLanguage(CFileIO(s_item->str).dir().toString()))));
254
			item->SubItems->Add(_US(_packages->ConvertLanguage(_packages->getGameLanguage(CFileIO(s_item->str).dir().toString()))));
255
			item->SubItems->Add(_US(_packages->GetGameExe()->isAddon(s_item->str.toString()) ? "Yes" : "No"));
255
			item->SubItems->Add(_US(_packages->GetGameExe()->isAddon(s_item->str) ? "Yes" : "No"));
256
			item->SubItems->Add(_US(s_item->str));
256
			item->SubItems->Add(_US(s_item->str));
257
			this->listView2->Items->Add(item);
257
			this->listView2->Items->Add(item);
258
		}
258
		}
259
	}
259
	}
260
 
260
 
261
	for (Utils::WStringNode *s_item = _lFoundDirs->first(); s_item; s_item = _lFoundDirs->next()) {
261
	for (Utils::WStringNode *s_item = _lFoundDirs->first(); s_item; s_item = _lFoundDirs->next()) {
262
		if (CFileIO::Exists(s_item->str)) {
262
		if (CFileIO::Exists(s_item->str)) {
263
			ListViewItem ^item = gcnew ListViewItem(_US(_packages->GetGameExe()->GetProperDir(s_item->str.toString())));
263
			ListViewItem ^item = gcnew ListViewItem(_US(_packages->GetGameExe()->properDir(s_item->str)));
264
			int iGame = _packages->GetGameExe()->GetGameType(s_item->str.toString());
264
			int iGame = _packages->GetGameExe()->getGameType(s_item->str);
265
			item->ImageIndex = iGame;
265
			item->ImageIndex = iGame;
266
			item->SubItems->Add(_US(_packages->GetGameExe()->GetGameName(s_item->str.toString())));
266
			item->SubItems->Add(_US(_packages->GetGameExe()->gameName(s_item->str)));
267
			item->SubItems->Add(_US(_packages->ConvertLanguage(_packages->getGameLanguage(CFileIO(s_item->str).dir().toString()))));
267
			item->SubItems->Add(_US(_packages->ConvertLanguage(_packages->getGameLanguage(CFileIO(s_item->str).dir().toString()))));
268
			item->SubItems->Add(_US(_packages->GetGameExe()->isAddon(s_item->str.toString()) ? "Yes" : "No"));
268
			item->SubItems->Add(_US(_packages->GetGameExe()->isAddon(s_item->str) ? "Yes" : "No"));
269
			item->SubItems->Add(_US(s_item->str));
269
			item->SubItems->Add(_US(s_item->str));
270
			this->listView2->Items->Add(item);
270
			this->listView2->Items->Add(item);
271
		}
271
		}
272
	}
272
	}
273
 
273
 
Line 287... Line 287...
287
System::Void DirectoryControl::button1_Click(System::Object^  sender, System::EventArgs^  e)
287
System::Void DirectoryControl::button1_Click(System::Object^  sender, System::EventArgs^  e)
288
{
288
{
289
	OpenFileDialog ^ofd = gcnew OpenFileDialog();
289
	OpenFileDialog ^ofd = gcnew OpenFileDialog();
290
	ofd->Filter = "X-Universe Executable|";
290
	ofd->Filter = "X-Universe Executable|";
291
	String ^games = "";
291
	String ^games = "";
292
	for (int i = 0; i < _packages->GetGameExe()->GetNumGames(); i++)
292
	for (int i = 0; i < _packages->GetGameExe()->numGames(); i++)
293
	{
293
	{
294
		SGameExe *exe = _packages->GetGameExe()->GetGame(i);
294
		SGameExe *exe = _packages->GetGameExe()->game(i);
295
		if (i) ofd->Filter += ";";
295
		if (i) ofd->Filter += ";";
296
		ofd->Filter += _US(exe->sExe);
296
		ofd->Filter += _US(exe->sExe);
297
		games += "|" + _US(exe->sName) + "|" + _US(exe->sExe);
297
		games += "|" + _US(exe->sName) + "|" + _US(exe->sExe);
298
	}
298
	}
299
	ofd->Filter += games;
299
	ofd->Filter += games;
300
	ofd->FilterIndex = 1;
300
	ofd->FilterIndex = 1;
301
	ofd->RestoreDirectory = true;
301
	ofd->RestoreDirectory = true;
302
	if (ofd->ShowDialog(this) == System::Windows::Forms::DialogResult::OK)
302
	if (ofd->ShowDialog(this) == System::Windows::Forms::DialogResult::OK)
303
	{
303
	{
304
		Utils::String file = _S(ofd->FileName);
304
		Utils::WString file = _WS(ofd->FileName);
305
		Utils::String dir = _S(IO::FileInfo(ofd->FileName).DirectoryName);
305
		Utils::WString dir = _WS(IO::FileInfo(ofd->FileName).DirectoryName);
306
		// check its a valid directory
306
		// check its a valid directory
307
		if (!dir.empty())
307
		if (!dir.empty())
308
		{
308
		{
309
			Utils::String gameName = _packages->getGameName(file);
309
			Utils::WString gameName = _packages->getGameName(file);
310
			if (gameName.empty())
310
			if (gameName.empty())
311
				MessageBox::Show(this, "No X-Universe game found in folder:\n" + _US(dir), "Add Directory Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
311
				MessageBox::Show(this, "No X-Universe game found in folder:\n" + _US(dir), "Add Directory Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
312
			else
312
			else
313
			{
313
			{
314
				// lets check if theres an old folder
314
				// lets check if theres an old folder
315
				if (_packages->isOldDir(dir))
315
				if (_packages->isOldDir(dir.toString()))
316
				{
316
				{
317
					if (MessageBox::Show(this, "Game directory: " + _US(dir) + "\nIs currently being controled by the old plugin manager\nIf you continue, you will be unable to use the old version again\nDo you wish to continue?", "Update Game Directory", MessageBoxButtons::YesNo, MessageBoxIcon::Question) != System::Windows::Forms::DialogResult::Yes)
317
					if (MessageBox::Show(this, "Game directory: " + _US(dir) + "\nIs currently being controled by the old plugin manager\nIf you continue, you will be unable to use the old version again\nDo you wish to continue?", "Update Game Directory", MessageBoxButtons::YesNo, MessageBoxIcon::Question) != System::Windows::Forms::DialogResult::Yes)
318
						return;
318
						return;
319
				}
319
				}
320
				Utils::String properDir = _packages->getProperDir(file);
320
				Utils::WString properDir = _packages->getProperDir(file);
321
				_lRemoveDirs->remove(properDir, true);
321
				_lRemoveDirs->remove(properDir, true);
322
				_lDirs->pushBack(file.findReplace("\\", "/").findReplace("//", "/"), gameName);
322
				_lDirs->pushBack(file.findReplace("\\", "/").findReplace("//", "/"), gameName);
323
 
323
 
324
				// now add any connected dirs
324
				// now add any connected dirs
325
				if (_packages->GetGameExe()->isAddon(file))
325
				if (_packages->GetGameExe()->isAddon(file))
326
				{
326
				{
327
					Utils::String baseExe = _packages->getGameRunExe(_packages->GetGameExe()->GetGameDir(file));
327
					Utils::WString baseExe = _packages->getGameRunExe(_packages->GetGameExe()->gameDir(file));
328
					if (CFileIO::Exists(baseExe))
328
					if (CFileIO::Exists(baseExe))
329
					{
329
					{
330
						this->AddFoundDir(baseExe);
330
						this->AddFoundDir(baseExe);
331
						this->FindAllAddons(baseExe, false);
331
						this->FindAllAddons(baseExe, false);
332
					}
332
					}
Line 351... Line 351...
351
	bool anyDone = false;
351
	bool anyDone = false;
352
	for (int i = 0; i < this->listView1->SelectedItems->Count; ++i)
352
	for (int i = 0; i < this->listView1->SelectedItems->Count; ++i)
353
	{
353
	{
354
		String ^s = this->listView1->SelectedItems[i]->SubItems[this->listView1->SelectedItems[i]->SubItems->Count - 1]->Text;
354
		String ^s = this->listView1->SelectedItems[i]->SubItems[this->listView1->SelectedItems[i]->SubItems->Count - 1]->Text;
355
 
355
 
356
		Utils::String dir = _packages->getProperDir(_S(s));
356
		Utils::WString dir = _packages->getProperDir(_WS(s));
357
		if (_packages->isCurrentDir(dir))
357
		if (_packages->isCurrentDir(dir.toString()))
358
		{
358
		{
359
			if (MessageBox::Show(this, "The game directory: " + _US(dir) + "\nIs currently the active game directory, are you sure you want to remove it?", "Remove Game Directory", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == Windows::Forms::DialogResult::No)
359
			if (MessageBox::Show(this, "The game directory: " + _US(dir) + "\nIs currently the active game directory, are you sure you want to remove it?", "Remove Game Directory", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == Windows::Forms::DialogResult::No)
360
				continue;
360
				continue;
361
		}
361
		}
362
		anyDone = true;
362
		anyDone = true;
Line 379... Line 379...
379
System::Void DirectoryControl::ButtonAddFound_Click(System::Object^  sender, System::EventArgs^  e) 
379
System::Void DirectoryControl::ButtonAddFound_Click(System::Object^  sender, System::EventArgs^  e) 
380
{
380
{
381
	for (int i = 0; i < this->listView2->SelectedItems->Count; ++i)
381
	for (int i = 0; i < this->listView2->SelectedItems->Count; ++i)
382
	{
382
	{
383
		String ^s = this->listView2->SelectedItems[i]->SubItems[this->listView2->SelectedItems[i]->SubItems->Count - 1]->Text;
383
		String ^s = this->listView2->SelectedItems[i]->SubItems[this->listView2->SelectedItems[i]->SubItems->Count - 1]->Text;
384
		_lDirs->pushBack(_S(s), _packages->GetGameExe()->GetGameName(_S(s)));
384
		_lDirs->pushBack(_WS(s), _packages->GetGameExe()->gameName(_WS(s)));
385
		_lFoundDirs->remove(_S(s), false);
385
		_lFoundDirs->remove(_WS(s), false);
386
		_lRemoveDirs->remove(_S(s), false);
386
		_lRemoveDirs->remove(_WS(s), false);
387
	}
387
	}
388
 
388
 
389
	UpdateGameDirs();
389
	UpdateGameDirs();
390
	UpdateFoundDirs();
390
	UpdateFoundDirs();
391
}
391
}
Line 401... Line 401...
401
System::Void DirectoryControl::listView2_DoubleClick(System::Object^  sender, System::EventArgs^  e)
401
System::Void DirectoryControl::listView2_DoubleClick(System::Object^  sender, System::EventArgs^  e)
402
{
402
{
403
	String ^s = this->listView2->SelectedItems[0]->SubItems[this->listView2->SelectedItems[0]->SubItems->Count - 1]->Text;
403
	String ^s = this->listView2->SelectedItems[0]->SubItems[this->listView2->SelectedItems[0]->SubItems->Count - 1]->Text;
404
	if (s && s->Length > 0)
404
	if (s && s->Length > 0)
405
	{
405
	{
406
		_lDirs->pushBack(_S(s), _packages->GetGameExe()->GetGameName(_S(s)));
406
		_lDirs->pushBack(_WS(s), _packages->GetGameExe()->gameName(_S(s)));
407
		_lFoundDirs->remove(_S(s), false);
407
		_lFoundDirs->remove(_WS(s), false);
408
		_lRemoveDirs->remove(_S(s), false);
408
		_lRemoveDirs->remove(_WS(s), false);
409
 
409
 
410
		UpdateGameDirs();
410
		UpdateGameDirs();
411
		UpdateFoundDirs();
411
		UpdateFoundDirs();
412
	}
412
	}
413
}
413
}