Subversion Repositories spk

Rev

Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#include "..\StdAfx.h"
2
#include "..\listviewsorter.h"
3
 
4
#include "PackageBrowser.h"
5
#include "CheckUpdate.h"
6
#include "MainGui.h"
7
 
8
using namespace System::IO;
9
 
10
#undef GetTempPath
11
#undef GetCurrentDirectory
12
 
13
namespace PluginManager {
14
 
15
	void PackageBrowser::FindPackages_Files(System::String ^dir)
16
	{
17
		for ( int type = 0; type < 2; type++ )
18
		{
19
			array <System::String ^> ^Files = nullptr;
20
			if ( type == 0 )
21
				Files = Directory::GetFiles(dir, "*.spk");
22
			else if ( type == 1 )
23
				Files = Directory::GetFiles(dir, "*.xsp");
24
			else
25
				break;
26
 
27
			for ( int i = 0; i < Files->Length; i++ )
28
			{
29
				CyString file = CyStringFromSystemString(Files[i]);
30
				int error = 0;
31
				CBaseFile *p = m_pPackages->OpenPackage(file, &error, 0, SPKREAD_NODATA);
32
				if ( !p )
33
					continue;
34
				if ( p->IsMod() || m_pPackages->FindSpkPackage(p->GetName(), p->GetAuthor()) )
35
				{
36
					delete p;
37
					continue;
38
				}
39
 
40
				// check its for the correct game
41
				if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
42
				{
43
					delete p;
44
					continue;
45
				}
46
 
47
				// check if its already on the list
48
				bool found = false;
49
				for ( CBaseFile *checkp = m_lAvailablePackages->First(); checkp; checkp = m_lAvailablePackages->Next() )
50
				{
51
					if ( p->GetName().Compare(checkp->GetName()) && p->GetAuthor().Compare(checkp->GetAuthor()) )
52
					{
53
						found = true;
54
						break;
55
					}
56
				}
57
 
58
				if ( found )
59
				{
60
					delete p;
61
					continue;
62
				}
63
 
64
				if ( p->GetIcon() )
65
				{
66
					bool addedIcon = false;
67
					p->ReadIconFileToMemory();
68
					p->GetIcon()->SetFilename(m_pPackages->GetTempDirectory().FindReplace("\\", "/") + "/" + p->GetAuthor() + "_" + p->GetName() + "." + p->GetIconExt());
69
					p->GetIcon()->SetFullDir(m_pPackages->GetTempDirectory());
70
					if ( p->GetIcon()->UncompressData() )
71
					{
72
						if ( p->GetIcon()->WriteFilePointer() )
73
							addedIcon = true;
74
					}
75
 
76
					if ( !addedIcon )
77
						p->SetIcon(NULL, "");
78
				}
79
 
80
				// get an advert to display
81
				if ( p->GetFirstFile(FILETYPE_ADVERT) )
82
				{
83
					bool done = false;
84
					C_File *f = p->GetFirstFile(FILETYPE_ADVERT);
85
					if ( p->ReadFileToMemory(f) )
86
					{
87
						f->SetFullDir(m_pPackages->GetTempDirectory());
88
						if ( f->UncompressData() )
89
						{
90
							if ( f->WriteFilePointer() )
91
								done = true;
92
						}
93
					}
94
 
95
					if ( !done )
96
						f->DeleteData();
97
				}
98
 
99
				m_lAvailablePackages->push_back(p);				
100
			}
101
		}
102
	}
103
 
104
	bool PackageBrowser::AnyPackages()
105
	{
106
		if ( m_lAvailablePackages && m_lAvailablePackages->size() )
107
			return true;
108
		if ( m_pPackages->AnyAvailablePackages() )
109
			return true;
110
		return false;
111
	}
112
 
113
	void PackageBrowser::FindPackages_Directory(String ^dir)
114
	{
115
		if ( Directory::Exists(dir) )
116
		{
117
			this->FindPackages_Files(dir);
118
 
119
			array <System::String ^> ^Dirs = Directory::GetDirectories(dir);
120
			if ( Dirs )
121
			{
122
				for ( int i = 0; i < Dirs->Length; i++ )
123
					this->FindPackages_Directory(Dirs[i]);
124
			}
125
		}
126
	}
127
 
128
	void PackageBrowser::FindPackages()
129
	{
130
		if ( !m_lAvailablePackages )
131
			m_lAvailablePackages = new CLinkList<CBaseFile>;
132
 
133
		String ^curDir = System::IO::FileInfo(System::Windows::Forms::Application::ExecutablePath).DirectoryName;
134
		this->FindPackages_Directory(curDir + "\\Addons");
135
		this->FindPackages_Directory(curDir + "\\Downloads");
136
		this->FindPackages_Directory(".\\Addons");
137
		this->FindPackages_Directory(".\\Downloads");
138
		this->FindPackages_Directory(m_sCurrentDir + "\\Addons");
139
		this->FindPackages_Directory(m_sCurrentDir + "\\Downloads");
140
 
141
		// find packages from registry key
142
		RegistryKey ^searchKey = Registry::CurrentUser->OpenSubKey("Software\\Egosoft\\SuperBox");
143
		if ( searchKey )
144
		{
145
			String ^dir = System::Convert::ToString(searchKey->GetValue("Addons"));
146
			if ( dir )
147
				this->FindPackages_Directory(dir);
148
		}
149
 
150
		// find packages from DVD
151
		cli::array<IO::DriveInfo ^> ^Drives = IO::DriveInfo::GetDrives();
152
		if ( Drives )
153
		{
154
			for ( int i = 0; i < Drives->Length; i++ )
155
			{
156
				IO::DriveInfo ^info = Drives[i];
157
				if ( info->DriveType != IO::DriveType::CDRom )
158
					continue;
159
				if ( info->IsReady )
160
					this->FindPackages_Directory(info->RootDirectory + "XPluginManager");
161
			}
162
		}
163
 
164
		// read all game directories extra content
165
		this->FindPackages_Directory(SystemStringFromCyString(m_pPackages->GetCurrentDirectoryW().FindReplace("/","\\")) + "\\ExtraContent");
166
 
167
 
168
		int num = 0;
169
		for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
170
		{
171
			p->SetNum(num);
172
			++num;
173
		}
174
	}
175
 
176
	bool PackageBrowser::CheckValidPackage(CBaseFile *p)
177
	{
178
		if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
179
			return false;
180
 
181
		if ( !this->CheckCheat->Checked && p->GetPluginType() == PLUGIN_CHEAT )
182
			return false;
183
		if ( !this->CheckExperimental->Checked && p->GetPluginType() == PLUGIN_EXPERIMENTAL )
184
			return false;
185
		if ( p->GetType() == TYPE_XSP && !this->CheckShips->Checked )
186
			return false;
187
		if ( this->CheckSigned->Checked && !p->IsSigned() )
188
			return false;
189
 
190
		return true;
191
	}
192
 
193
	bool PackageBrowser::CheckValidPackage(SAvailablePackage *p)
194
	{
195
		if ( p->iType == PACKAGETYPE_MOD )
196
			return false;
197
 
198
		if ( !p->lGames.empty() )
199
		{
200
			bool found = false;
201
			for ( SGameCompat *gc = p->lGames.First(); gc; gc = p->lGames.Next() ) {
202
				if ( gc->iGame == m_pPackages->GetGame() ) {
203
					found = true;
204
					break;
205
				}
206
			}
207
 
208
			if ( !found )
209
				return false;
210
		}
211
 
212
		if ( !this->CheckCheat->Checked && p->iPluginType == PLUGIN_CHEAT )
213
			return false;
214
		if ( !this->CheckExperimental->Checked && p->iPluginType == PLUGIN_EXPERIMENTAL )
215
			return false;
216
		if ( p->iType == PACKAGETYPE_SHIP && !this->CheckShips->Checked )
217
			return false;
218
		if ( this->CheckSigned->Checked && !p->bSigned )
219
			return false;
220
 
221
		return true;
222
	}
223
 
224
	ListViewItem ^PackageBrowser::CreateItem(CBaseFile *p)
225
	{
226
		ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->GetLanguageName(m_pPackages->GetLanguage())), -1);
227
		item->SubItems->Add(SystemStringFromCyString(p->GetAuthor()));
228
		item->SubItems->Add(SystemStringFromCyString(p->GetVersion()));
229
		item->SubItems->Add(SystemStringFromCyString(p->GetCreationDate()));
230
		if ( p->GetType() == TYPE_SPK )
231
			item->SubItems->Add(SystemStringFromCyString(((CSpkFile *)p)->GetScriptTypeString(m_pPackages->GetLanguage())));
232
		else if ( p->GetType() == TYPE_XSP )
233
			item->SubItems->Add("Ship");
234
 
235
		if ( p->IsSigned() )
236
			item->SubItems->Add("Yes");
237
		else
238
			item->SubItems->Add("No");
239
 
240
 
241
		return item;
242
	}
243
 
244
	ListViewItem ^PackageBrowser::CreateItem(SAvailablePackage *p)
245
	{
246
		ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->sName), -1);
247
		item->SubItems->Add(SystemStringFromCyString(p->sAuthor));
248
		item->SubItems->Add(SystemStringFromCyString(p->sVersion));
249
		item->SubItems->Add(SystemStringFromCyString(p->sUpdated));
250
 
251
		switch (p->iType)
252
		{
253
			case PACKAGETYPE_SHIP:
254
				item->SubItems->Add("Ship");
255
				break;
256
			case PACKAGETYPE_LIBRARY:
257
				item->SubItems->Add("Library");
258
				break;
259
			case PACKAGETYPE_CUSTOMSTART:
260
				item->SubItems->Add("Custom Start");
261
				break;
262
			case PACKAGETYPE_PATCH:
263
				item->SubItems->Add("Patch");
264
				break;
265
			case PACKAGETYPE_UPDATE:
266
				item->SubItems->Add("Update");
267
				break;
268
			case PACKAGETYPE_MOD:
269
				item->SubItems->Add("Mod");
270
				break;
271
			case PACKAGETYPE_FAKEPATCH:
272
				item->SubItems->Add("Fake Patch");
273
				break;
274
			case PACKAGETYPE_NORMAL:
275
				if ( p->iScriptType > 0 )
276
					item->SubItems->Add(SystemStringFromCyString(CSpkFile::GetScriptTypeStringStatic(p->iScriptType)));
277
				else
278
					item->SubItems->Add("Package");
279
				break;
280
		}
281
 
282
		if ( p->bSigned )
283
			item->SubItems->Add("Yes");
284
		else
285
			item->SubItems->Add("No");
286
 
287
		return item;
288
	}
289
 
290
	void PackageBrowser::UpdatePackages()
291
	{
292
		m_pPackages->AssignPackageNumbers();
293
		ListPackages->Items->Clear();
294
		ListPackages->Groups->Clear();
295
 
296
		ListViewGroup ^gNormal = gcnew ListViewGroup("Normal", HorizontalAlignment::Left);
297
		ListPackages->Groups->Add(gNormal);
298
		ListViewGroup ^gStable = gcnew ListViewGroup("Stable", HorizontalAlignment::Left);
299
		ListPackages->Groups->Add(gStable);
300
		ListViewGroup ^gExperimental = gcnew ListViewGroup("Experimental", HorizontalAlignment::Left);
301
		ListPackages->Groups->Add(gExperimental);
302
		ListViewGroup ^gCheat = gcnew ListViewGroup("Cheat", HorizontalAlignment::Left);
303
		ListPackages->Groups->Add(gCheat);
304
		ListViewGroup ^gShip = gcnew ListViewGroup("Ships", HorizontalAlignment::Left);
305
		ListPackages->Groups->Add(gShip);
306
		ListViewGroup ^gMod = gcnew ListViewGroup("Mods", HorizontalAlignment::Left);
307
		ListPackages->Groups->Add(gMod);
308
 
309
		if ( m_lAvailablePackages )
310
		{
311
			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
312
			{
313
				// check if its already installed
314
				if ( m_pPackages->FindPackage(p) )
315
					continue;
316
 
317
				if ( !this->CheckValidPackage(p) )
318
					continue;
319
 
320
 
321
				ListViewItem ^item = this->CreateItem(p);
322
				item->Group = gNormal;
323
				if ( p->GetType() == TYPE_XSP )
324
					item->Group = gShip;
325
				else if ( p->GetType() == TYPE_SPK )
326
				{
327
					switch ( p->GetPluginType() )
328
					{
329
						case PLUGIN_STABLE:
330
							item->Group = gStable;
331
							break;
332
						case PLUGIN_EXPERIMENTAL:
333
							item->Group = gExperimental;
334
							break;
335
						case PLUGIN_CHEAT:
336
							item->Group = gCheat;
337
							break;
338
						case PLUGIN_MOD:
339
							item->Group = gMod;
340
							break;
341
					}
342
				}
343
 
344
				item->Tag = p->GetNum();
345
				ListPackages->Items->Add(item);
346
				if ( p->GetIcon() )
347
					PluginManager::DisplayListIcon(p, ListPackages, item);
348
				else
349
				{
350
					if ( p->GetType() == TYPE_XSP )
351
						item->ImageIndex = this->imageList1->Images->IndexOfKey("ship.png");
352
					else if ( p->IsMod() || p->IsFakePatch() )
353
						item->ImageIndex = this->imageList1->Images->IndexOfKey("fake.png");
354
					else if ( p->GetType() == TYPE_SPK && ((CSpkFile *)p)->IsLibrary() )
355
						item->ImageIndex = this->imageList1->Images->IndexOfKey("library.png");
356
					else
357
						item->ImageIndex = this->imageList1->Images->IndexOfKey("package.png");
358
				}
359
			}
360
		}
361
 
362
		if ( this->checkBox1->Checked )
363
		{
364
			for ( SAvailablePackage *p = m_pPackages->GetAvailablePackageList()->First(); p; p = m_pPackages->GetAvailablePackageList()->Next() )
365
			{
366
				if ( m_pPackages->FindPackage(p->sName, p->sAuthor) ) continue;
367
				if ( !this->CheckValidPackage(p) ) continue;
368
 
369
				ListViewItem ^item = this->CreateItem(p);
370
				item->Group = gNormal;
371
				if ( p->iType == PACKAGETYPE_SHIP )
372
					item->Group = gShip;
373
				else 
374
				{
375
					switch ( p->iPluginType )
376
					{
377
						case PLUGIN_STABLE:
378
							item->Group = gStable;
379
							break;
380
						case PLUGIN_EXPERIMENTAL:
381
							item->Group = gExperimental;
382
							break;
383
						case PLUGIN_CHEAT:
384
							item->Group = gCheat;
385
							break;
386
						case PLUGIN_MOD:
387
							item->Group = gMod;
388
							break;
389
					}
390
				}
391
 
392
				item->ImageIndex = this->imageList1->Images->IndexOfKey("download");
393
 
394
 
395
				item->Tag = SystemStringFromCyString(p->sFilename);
396
				ListPackages->Items->Add(item);
397
			}
398
		}
399
 
400
		ListPackages->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
401
		PackageSelected(ListPackages, gcnew System::EventArgs());
402
	}
403
 
404
	void PackageBrowser::RemovePackages()
405
	{
406
		if ( m_lAvailablePackages )
407
		{
408
			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
409
			{
410
				if ( p->GetIcon() )
411
					CFileIO(p->GetIcon()->GetFilePointer()).Remove();
412
				delete p;
413
			}
414
			m_lAvailablePackages->destroy();
415
			delete m_lAvailablePackages;
416
		}
417
		m_lAvailablePackages = NULL;
418
	}
419
 
420
	void PackageBrowser::UpdateControls()
421
	{
422
	}
423
 
424
	void PackageBrowser::SetupEvents()
425
	{
426
		ListPackages->SelectedIndexChanged += gcnew EventHandler(this, &PluginManager::PackageBrowser::PackageSelected);
427
		CheckCheat->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
428
		CheckShips->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
429
		CheckExperimental->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
430
		this->ListPackages->ColumnClick += gcnew ColumnClickEventHandler(this, &PluginManager::PackageBrowser::SortList);
431
	}
432
 
433
	void PackageBrowser::UpdateRatings(bool clear, int ease, int change, int rec)
434
	{
435
		if ( clear )
436
		{
437
			LabRecNA->Hide();
438
			LabChangeNA->Hide();
439
			LabEaseNA->Hide();
440
			PicEase1->Hide();
441
			PicEase2->Hide();
442
			PicEase3->Hide();
443
			PicEase4->Hide();
444
			PicEase5->Hide();
445
			PicChange1->Hide();
446
			PicChange2->Hide();
447
			PicChange3->Hide();
448
			PicChange4->Hide();
449
			PicChange5->Hide();
450
			PicRec1->Hide();
451
			PicRec2->Hide();
452
			PicRec3->Hide();
453
			PicRec4->Hide();
454
			PicRec5->Hide();
455
		}
456
 
457
		// ease of use rating
458
		if ( ease < 1 )
459
			LabEaseNA->Show();
460
		if ( ease >= 1 )
461
			PicEase1->Show();
462
		if ( ease >= 2 )
463
			PicEase2->Show();
464
		if ( ease >= 3 )
465
			PicEase3->Show();
466
		if ( ease >= 4 )
467
			PicEase4->Show();
468
		if ( ease >= 5 )
469
			PicEase5->Show();
470
 
471
		// game changing rating
472
		if ( change < 1 )
473
			LabChangeNA->Show();
474
		if ( change >= 1 )
475
			PicChange1->Show();
476
		if ( change >= 2 )
477
			PicChange2->Show();
478
		if ( change >= 3 )
479
			PicChange3->Show();
480
		if ( change >= 4 )
481
			PicChange4->Show();
482
		if ( change >= 5 )
483
			PicChange5->Show();
484
 
485
		// Recommanded rating
486
		if ( rec < 1 )
487
			LabRecNA->Show();
488
		if ( rec >= 1 )
489
			PicRec1->Show();
490
		if ( rec >= 2 )
491
			PicRec2->Show();
492
		if ( rec >= 3 )
493
			PicRec3->Show();
494
		if ( rec >= 4 )
495
			PicRec4->Show();
496
		if ( rec >= 5 )
497
			PicRec5->Show();
498
	}
499
 
500
	void PackageBrowser::PackageSelected(System::Object ^Sender, System::EventArgs ^E)
501
	{
502
		this->PictureBox->Image = nullptr;
503
 
504
		UpdateRatings(true, -1, -1, -1);
505
 
506
		this->button1->Visible = false;
507
		bool enabled = false;
508
		CBaseFile *p = NULL;
509
		SAvailablePackage *ap = NULL;
510
		if ( ListPackages->SelectedItems->Count )
511
		{
512
			ListViewItem ^item = ListPackages->SelectedItems[0];
513
			if ( item )
514
			{
515
				CyString sNum = CyStringFromSystemString(Convert::ToString(item->Tag));
516
				if ( sNum.IsNumber() )
517
				{
518
					enabled = true;
519
					p = m_lAvailablePackages->Get(Convert::ToInt32(item->Tag));
520
				}
521
				else
522
				{
523
					this->button1->Visible = true;
524
					ap = m_pPackages->FindAvailablePackage(sNum);
525
				}
526
			}
527
		}
528
 
529
		// update package display
530
		if ( p )
531
		{
532
			CyString desc = p->GetDescription();
533
			desc = desc.FindReplace("<br>", "\n");
534
			desc = desc.FindReplace("<br/>", "\n");
535
			desc = desc.FindReplace("<p>", "\n\t");
536
			desc = desc.FindReplace("<p/>", "\n");
537
			TextDesc->Text = SystemStringFromCyString(desc.StripHTML());
538
			GroupPackage->Text = "Current Package (" + SystemStringFromCyString(p->GetLanguageName(m_pPackages->GetLanguage())) + ")";
539
 
540
			UpdateRatings(true, p->GetEaseOfUse(), p->GetGameChanging(), p->GetRecommended());
541
			// display an advert
542
			bool addedIcon = false;
543
			if ( p->GetFirstFile(FILETYPE_ADVERT) )
544
			{
545
				C_File *f = p->GetFirstFile(FILETYPE_ADVERT);
546
				System::String ^aFile = SystemStringFromCyString(f->GetFilePointer().FindReplace("/", "\\").FindReplace("\\\\", "\\"));
547
				if ( System::IO::File::Exists(aFile) )
548
				{
549
					try 
550
					{
551
						Bitmap ^myBitmap = gcnew Bitmap(aFile);
552
						if ( myBitmap )
553
						{
554
							this->PictureBox->Image = dynamic_cast<Image ^>(myBitmap);
555
							addedIcon = true;
556
						}
557
					} catch (System::ArgumentException ^) {
558
					}
559
					if ( !addedIcon )
560
					{
561
						try 
562
						{
563
							Image ^myImage = Drawing::Image::FromFile(aFile);
564
							if ( myImage )
565
							{
566
								this->PictureBox->Image = myImage;
567
								addedIcon = true;
568
							}
569
						} catch (System::ArgumentException ^) {
570
						} catch (System::OutOfMemoryException ^) {
571
						}
572
					}
573
				}
574
			}
575
 
576
			if ( !addedIcon )
577
			{
578
				System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(PackageBrowser::typeid));
579
				System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
580
				this->PictureBox->Image = icon->ToBitmap();
581
			}
582
		}
583
		else if ( ap )
584
		{
585
			CyString desc = ap->sDesc;
586
			desc = desc.FindReplace("<br>", "\n");
587
			desc = desc.FindReplace("<br/>", "\n");
588
			desc = desc.FindReplace("<p>", "\n\t");
589
			desc = desc.FindReplace("<p/>", "\n");
590
			TextDesc->Text = SystemStringFromCyString(desc.StripHTML());
591
			GroupPackage->Text = "Current Package (" + SystemStringFromCyString(ap->sName) + ") [DOWNLOAD REQUIRED]";
592
 
593
			UpdateRatings(true, ap->iEase, ap->iChanging, ap->iRec);
594
 
595
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(PackageBrowser::typeid));
596
			System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
597
			this->PictureBox->Image = icon->ToBitmap();
598
		}
599
		// clear package display
600
		else
601
		{
602
			GroupPackage->Text = "Current Package (None)";
603
			TextDesc->Text = "";
604
		}
605
 
606
		m_pSelectedMod = p;
607
		m_pSelectedPackage = ap;
608
 
609
		ButInstall->Enabled = enabled;
610
	}
611
 
612
	void PackageBrowser::SortList(System::Object ^Sender, ColumnClickEventArgs ^E)
613
	{
614
		if ( E->Column == m_iLastCol )
615
		{
616
			m_bReverse = !m_bReverse;
617
			this->ListPackages->ListViewItemSorter = gcnew ListViewItemComparer(E->Column, m_bReverse);
618
		}
619
		else
620
		{
621
			m_bReverse = false;
622
			this->ListPackages->ListViewItemSorter = gcnew ListViewItemComparer(E->Column, m_bReverse);
623
		}
624
		this->ListPackages->Sort();
625
		m_iLastCol = E->Column;
626
 
627
	}
628
 
629
	void PackageBrowser::DownloadPackage()
630
	{
631
		if ( !m_pSelectedPackage ) 
632
		{
633
			this->button1->Visible = false;
634
			return;
635
		}
636
 
637
		CheckUpdate ^update = gcnew CheckUpdate(m_pPackages, m_pImageList);
638
		update->SetDownloader();
639
		update->OnePackage(m_pSelectedPackage);
640
		if ( update->ShowDialog(this) == Windows::Forms::DialogResult::OK )
641
		{
642
			this->DialogResult = Windows::Forms::DialogResult::Yes;
643
			for ( int i = 0; i < update->GetInstallList()->Count; i++ )
644
				cli::safe_cast<MainGui ^>(this->Owner)->InstallPackage(Convert::ToString(update->GetInstallList()[i]), false, false, true);
645
			this->Close();
646
		}
647
	}
648
 
649
}