Subversion Repositories spk

Rev

Rev 126 | Rev 133 | Go to most recent revision | 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;
50 cycrow 34
				if ( p->IsMod() || m_pPackages->FindSpkPackage(p->name(), p->author()) )
1 cycrow 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
				{
50 cycrow 51
					if ( p->name().Compare(checkp->name()) && p->author().Compare(checkp->author()) )
1 cycrow 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();
50 cycrow 68
					p->GetIcon()->SetFilename(m_pPackages->GetTempDirectory().FindReplace("\\", "/") + "/" + p->author() + "_" + p->name() + "." + p->GetIconExt());
1 cycrow 69
					p->GetIcon()->SetFullDir(m_pPackages->GetTempDirectory());
70
					if ( p->GetIcon()->UncompressData() )
71
					{
129 cycrow 72
						if ( p->GetIcon()->writeFilePointer() )
1 cycrow 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
						{
129 cycrow 90
							if ( f->writeFilePointer() )
1 cycrow 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
121 cycrow 165
		this->FindPackages_Directory(_US((m_pPackages->getCurrentDirectory().findReplace("\\", "/") + "/ExtraContent").findReplace("//", "/")));
1 cycrow 166
 
167
		int num = 0;
168
		for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
169
		{
170
			p->SetNum(num);
171
			++num;
172
		}
173
	}
174
 
175
	bool PackageBrowser::CheckValidPackage(CBaseFile *p)
176
	{
177
		if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
178
			return false;
179
 
48 cycrow 180
		if ( !this->CheckCheat->Checked && p->pluginType() == PLUGIN_CHEAT )
1 cycrow 181
			return false;
48 cycrow 182
		if ( !this->CheckExperimental->Checked && p->pluginType() == PLUGIN_EXPERIMENTAL )
1 cycrow 183
			return false;
184
		if ( p->GetType() == TYPE_XSP && !this->CheckShips->Checked )
185
			return false;
186
		if ( this->CheckSigned->Checked && !p->IsSigned() )
187
			return false;
188
 
189
		return true;
190
	}
191
 
192
	bool PackageBrowser::CheckValidPackage(SAvailablePackage *p)
193
	{
194
		if ( p->iType == PACKAGETYPE_MOD )
195
			return false;
196
 
197
		if ( !p->lGames.empty() )
198
		{
199
			bool found = false;
200
			for ( SGameCompat *gc = p->lGames.First(); gc; gc = p->lGames.Next() ) {
201
				if ( gc->iGame == m_pPackages->GetGame() ) {
202
					found = true;
203
					break;
204
				}
205
			}
206
 
207
			if ( !found )
208
				return false;
209
		}
210
 
211
		if ( !this->CheckCheat->Checked && p->iPluginType == PLUGIN_CHEAT )
212
			return false;
213
		if ( !this->CheckExperimental->Checked && p->iPluginType == PLUGIN_EXPERIMENTAL )
214
			return false;
215
		if ( p->iType == PACKAGETYPE_SHIP && !this->CheckShips->Checked )
216
			return false;
217
		if ( this->CheckSigned->Checked && !p->bSigned )
218
			return false;
219
 
220
		return true;
221
	}
222
 
223
	ListViewItem ^PackageBrowser::CreateItem(CBaseFile *p)
224
	{
225
		ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->GetLanguageName(m_pPackages->GetLanguage())), -1);
50 cycrow 226
		item->SubItems->Add(_US(p->author()));
227
		item->SubItems->Add(_US(p->version()));
228
		item->SubItems->Add(_US(p->creationDate()));
1 cycrow 229
		if ( p->GetType() == TYPE_SPK )
230
			item->SubItems->Add(SystemStringFromCyString(((CSpkFile *)p)->GetScriptTypeString(m_pPackages->GetLanguage())));
231
		else if ( p->GetType() == TYPE_XSP )
232
			item->SubItems->Add("Ship");
233
 
234
		if ( p->IsSigned() )
235
			item->SubItems->Add("Yes");
236
		else
237
			item->SubItems->Add("No");
238
 
239
 
240
		return item;
241
	}
242
 
243
	ListViewItem ^PackageBrowser::CreateItem(SAvailablePackage *p)
244
	{
245
		ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->sName), -1);
246
		item->SubItems->Add(SystemStringFromCyString(p->sAuthor));
247
		item->SubItems->Add(SystemStringFromCyString(p->sVersion));
248
		item->SubItems->Add(SystemStringFromCyString(p->sUpdated));
249
 
250
		switch (p->iType)
251
		{
252
			case PACKAGETYPE_SHIP:
253
				item->SubItems->Add("Ship");
254
				break;
255
			case PACKAGETYPE_LIBRARY:
256
				item->SubItems->Add("Library");
257
				break;
258
			case PACKAGETYPE_CUSTOMSTART:
259
				item->SubItems->Add("Custom Start");
260
				break;
261
			case PACKAGETYPE_PATCH:
262
				item->SubItems->Add("Patch");
263
				break;
264
			case PACKAGETYPE_UPDATE:
265
				item->SubItems->Add("Update");
266
				break;
267
			case PACKAGETYPE_MOD:
268
				item->SubItems->Add("Mod");
269
				break;
270
			case PACKAGETYPE_FAKEPATCH:
271
				item->SubItems->Add("Fake Patch");
272
				break;
273
			case PACKAGETYPE_NORMAL:
274
				if ( p->iScriptType > 0 )
275
					item->SubItems->Add(SystemStringFromCyString(CSpkFile::GetScriptTypeStringStatic(p->iScriptType)));
276
				else
277
					item->SubItems->Add("Package");
278
				break;
279
		}
280
 
281
		if ( p->bSigned )
282
			item->SubItems->Add("Yes");
283
		else
284
			item->SubItems->Add("No");
285
 
286
		return item;
287
	}
288
 
289
	void PackageBrowser::UpdatePackages()
290
	{
291
		m_pPackages->AssignPackageNumbers();
292
		ListPackages->Items->Clear();
293
		ListPackages->Groups->Clear();
294
 
295
		ListViewGroup ^gNormal = gcnew ListViewGroup("Normal", HorizontalAlignment::Left);
296
		ListPackages->Groups->Add(gNormal);
297
		ListViewGroup ^gStable = gcnew ListViewGroup("Stable", HorizontalAlignment::Left);
298
		ListPackages->Groups->Add(gStable);
299
		ListViewGroup ^gExperimental = gcnew ListViewGroup("Experimental", HorizontalAlignment::Left);
300
		ListPackages->Groups->Add(gExperimental);
301
		ListViewGroup ^gCheat = gcnew ListViewGroup("Cheat", HorizontalAlignment::Left);
302
		ListPackages->Groups->Add(gCheat);
303
		ListViewGroup ^gShip = gcnew ListViewGroup("Ships", HorizontalAlignment::Left);
304
		ListPackages->Groups->Add(gShip);
305
		ListViewGroup ^gMod = gcnew ListViewGroup("Mods", HorizontalAlignment::Left);
306
		ListPackages->Groups->Add(gMod);
307
 
308
		if ( m_lAvailablePackages )
309
		{
310
			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
311
			{
312
				// check if its already installed
313
				if ( m_pPackages->FindPackage(p) )
314
					continue;
315
 
316
				if ( !this->CheckValidPackage(p) )
317
					continue;
318
 
319
 
320
				ListViewItem ^item = this->CreateItem(p);
321
				item->Group = gNormal;
322
				if ( p->GetType() == TYPE_XSP )
323
					item->Group = gShip;
324
				else if ( p->GetType() == TYPE_SPK )
325
				{
48 cycrow 326
					switch ( p->pluginType() ) {
327
						case PLUGIN_STABLE:			item->Group = gStable; break;
328
						case PLUGIN_EXPERIMENTAL:	item->Group = gExperimental; break;
329
						case PLUGIN_CHEAT:			item->Group = gCheat; break;
330
						case PLUGIN_MOD:			item->Group = gMod;	break;
1 cycrow 331
					}
332
				}
333
 
334
				item->Tag = p->GetNum();
335
				ListPackages->Items->Add(item);
336
				if ( p->GetIcon() )
337
					PluginManager::DisplayListIcon(p, ListPackages, item);
338
				else
339
				{
340
					if ( p->GetType() == TYPE_XSP )
341
						item->ImageIndex = this->imageList1->Images->IndexOfKey("ship.png");
342
					else if ( p->IsMod() || p->IsFakePatch() )
343
						item->ImageIndex = this->imageList1->Images->IndexOfKey("fake.png");
344
					else if ( p->GetType() == TYPE_SPK && ((CSpkFile *)p)->IsLibrary() )
345
						item->ImageIndex = this->imageList1->Images->IndexOfKey("library.png");
346
					else
347
						item->ImageIndex = this->imageList1->Images->IndexOfKey("package.png");
348
				}
349
			}
350
		}
351
 
352
		if ( this->checkBox1->Checked )
353
		{
354
			for ( SAvailablePackage *p = m_pPackages->GetAvailablePackageList()->First(); p; p = m_pPackages->GetAvailablePackageList()->Next() )
355
			{
356
				if ( m_pPackages->FindPackage(p->sName, p->sAuthor) ) continue;
357
				if ( !this->CheckValidPackage(p) ) continue;
358
 
359
				ListViewItem ^item = this->CreateItem(p);
360
				item->Group = gNormal;
361
				if ( p->iType == PACKAGETYPE_SHIP )
362
					item->Group = gShip;
363
				else 
364
				{
365
					switch ( p->iPluginType )
366
					{
367
						case PLUGIN_STABLE:
368
							item->Group = gStable;
369
							break;
370
						case PLUGIN_EXPERIMENTAL:
371
							item->Group = gExperimental;
372
							break;
373
						case PLUGIN_CHEAT:
374
							item->Group = gCheat;
375
							break;
376
						case PLUGIN_MOD:
377
							item->Group = gMod;
378
							break;
379
					}
380
				}
381
 
382
				item->ImageIndex = this->imageList1->Images->IndexOfKey("download");
383
 
384
 
385
				item->Tag = SystemStringFromCyString(p->sFilename);
386
				ListPackages->Items->Add(item);
387
			}
388
		}
389
 
390
		ListPackages->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
391
		PackageSelected(ListPackages, gcnew System::EventArgs());
392
	}
393
 
394
	void PackageBrowser::RemovePackages()
395
	{
396
		if ( m_lAvailablePackages )
397
		{
398
			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
399
			{
400
				if ( p->GetIcon() )
129 cycrow 401
					CFileIO::Remove(p->GetIcon()->filePointer());
1 cycrow 402
				delete p;
403
			}
404
			m_lAvailablePackages->destroy();
405
			delete m_lAvailablePackages;
406
		}
407
		m_lAvailablePackages = NULL;
408
	}
409
 
410
	void PackageBrowser::UpdateControls()
411
	{
412
	}
413
 
414
	void PackageBrowser::SetupEvents()
415
	{
416
		ListPackages->SelectedIndexChanged += gcnew EventHandler(this, &PluginManager::PackageBrowser::PackageSelected);
417
		CheckCheat->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
418
		CheckShips->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
419
		CheckExperimental->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
420
		this->ListPackages->ColumnClick += gcnew ColumnClickEventHandler(this, &PluginManager::PackageBrowser::SortList);
421
	}
422
 
423
	void PackageBrowser::UpdateRatings(bool clear, int ease, int change, int rec)
424
	{
425
		if ( clear )
426
		{
427
			LabRecNA->Hide();
428
			LabChangeNA->Hide();
429
			LabEaseNA->Hide();
430
			PicEase1->Hide();
431
			PicEase2->Hide();
432
			PicEase3->Hide();
433
			PicEase4->Hide();
434
			PicEase5->Hide();
435
			PicChange1->Hide();
436
			PicChange2->Hide();
437
			PicChange3->Hide();
438
			PicChange4->Hide();
439
			PicChange5->Hide();
440
			PicRec1->Hide();
441
			PicRec2->Hide();
442
			PicRec3->Hide();
443
			PicRec4->Hide();
444
			PicRec5->Hide();
445
		}
446
 
447
		// ease of use rating
448
		if ( ease < 1 )
449
			LabEaseNA->Show();
450
		if ( ease >= 1 )
451
			PicEase1->Show();
452
		if ( ease >= 2 )
453
			PicEase2->Show();
454
		if ( ease >= 3 )
455
			PicEase3->Show();
456
		if ( ease >= 4 )
457
			PicEase4->Show();
458
		if ( ease >= 5 )
459
			PicEase5->Show();
460
 
461
		// game changing rating
462
		if ( change < 1 )
463
			LabChangeNA->Show();
464
		if ( change >= 1 )
465
			PicChange1->Show();
466
		if ( change >= 2 )
467
			PicChange2->Show();
468
		if ( change >= 3 )
469
			PicChange3->Show();
470
		if ( change >= 4 )
471
			PicChange4->Show();
472
		if ( change >= 5 )
473
			PicChange5->Show();
474
 
475
		// Recommanded rating
476
		if ( rec < 1 )
477
			LabRecNA->Show();
478
		if ( rec >= 1 )
479
			PicRec1->Show();
480
		if ( rec >= 2 )
481
			PicRec2->Show();
482
		if ( rec >= 3 )
483
			PicRec3->Show();
484
		if ( rec >= 4 )
485
			PicRec4->Show();
486
		if ( rec >= 5 )
487
			PicRec5->Show();
488
	}
489
 
490
	void PackageBrowser::PackageSelected(System::Object ^Sender, System::EventArgs ^E)
491
	{
492
		this->PictureBox->Image = nullptr;
493
 
494
		UpdateRatings(true, -1, -1, -1);
495
 
496
		this->button1->Visible = false;
497
		bool enabled = false;
498
		CBaseFile *p = NULL;
499
		SAvailablePackage *ap = NULL;
500
		if ( ListPackages->SelectedItems->Count )
501
		{
502
			ListViewItem ^item = ListPackages->SelectedItems[0];
503
			if ( item )
504
			{
126 cycrow 505
				Utils::String sNum = _S(Convert::ToString(item->Tag));
506
				if (sNum.isNumber())
1 cycrow 507
				{
508
					enabled = true;
509
					p = m_lAvailablePackages->Get(Convert::ToInt32(item->Tag));
510
				}
511
				else
512
				{
513
					this->button1->Visible = true;
514
					ap = m_pPackages->FindAvailablePackage(sNum);
515
				}
516
			}
517
		}
518
 
519
		// update package display
520
		if ( p )
521
		{
48 cycrow 522
			Utils::String desc = p->description();
523
			desc = desc.findReplace("<br>", "\n");
524
			desc = desc.findReplace("<br/>", "\n");
525
			desc = desc.findReplace("<p>", "\n\t");
526
			desc = desc.findReplace("<p/>", "\n");
527
			TextDesc->Text = _US(desc.stripHtml());
1 cycrow 528
			GroupPackage->Text = "Current Package (" + SystemStringFromCyString(p->GetLanguageName(m_pPackages->GetLanguage())) + ")";
529
 
46 cycrow 530
			UpdateRatings(true, p->easeOfUse(), p->gameChanging(), p->recommended());
1 cycrow 531
			// display an advert
532
			bool addedIcon = false;
533
			if ( p->GetFirstFile(FILETYPE_ADVERT) )
534
			{
535
				C_File *f = p->GetFirstFile(FILETYPE_ADVERT);
129 cycrow 536
				System::String ^aFile = _US(f->filePointer().findReplace("/", "\\").findReplace("\\\\", "\\"));
1 cycrow 537
				if ( System::IO::File::Exists(aFile) )
538
				{
539
					try 
540
					{
541
						Bitmap ^myBitmap = gcnew Bitmap(aFile);
542
						if ( myBitmap )
543
						{
544
							this->PictureBox->Image = dynamic_cast<Image ^>(myBitmap);
545
							addedIcon = true;
546
						}
547
					} catch (System::ArgumentException ^) {
548
					}
549
					if ( !addedIcon )
550
					{
551
						try 
552
						{
553
							Image ^myImage = Drawing::Image::FromFile(aFile);
554
							if ( myImage )
555
							{
556
								this->PictureBox->Image = myImage;
557
								addedIcon = true;
558
							}
559
						} catch (System::ArgumentException ^) {
560
						} catch (System::OutOfMemoryException ^) {
561
						}
562
					}
563
				}
564
			}
565
 
566
			if ( !addedIcon )
567
			{
568
				System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(PackageBrowser::typeid));
569
				System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
570
				this->PictureBox->Image = icon->ToBitmap();
571
			}
572
		}
573
		else if ( ap )
574
		{
575
			CyString desc = ap->sDesc;
576
			desc = desc.FindReplace("<br>", "\n");
577
			desc = desc.FindReplace("<br/>", "\n");
578
			desc = desc.FindReplace("<p>", "\n\t");
579
			desc = desc.FindReplace("<p/>", "\n");
580
			TextDesc->Text = SystemStringFromCyString(desc.StripHTML());
581
			GroupPackage->Text = "Current Package (" + SystemStringFromCyString(ap->sName) + ") [DOWNLOAD REQUIRED]";
582
 
583
			UpdateRatings(true, ap->iEase, ap->iChanging, ap->iRec);
584
 
585
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(PackageBrowser::typeid));
586
			System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
587
			this->PictureBox->Image = icon->ToBitmap();
588
		}
589
		// clear package display
590
		else
591
		{
592
			GroupPackage->Text = "Current Package (None)";
593
			TextDesc->Text = "";
594
		}
595
 
596
		m_pSelectedMod = p;
597
		m_pSelectedPackage = ap;
598
 
599
		ButInstall->Enabled = enabled;
600
	}
601
 
602
	void PackageBrowser::SortList(System::Object ^Sender, ColumnClickEventArgs ^E)
603
	{
604
		if ( E->Column == m_iLastCol )
605
		{
606
			m_bReverse = !m_bReverse;
607
			this->ListPackages->ListViewItemSorter = gcnew ListViewItemComparer(E->Column, m_bReverse);
608
		}
609
		else
610
		{
611
			m_bReverse = false;
612
			this->ListPackages->ListViewItemSorter = gcnew ListViewItemComparer(E->Column, m_bReverse);
613
		}
614
		this->ListPackages->Sort();
615
		m_iLastCol = E->Column;
616
 
617
	}
618
 
619
	void PackageBrowser::DownloadPackage()
620
	{
621
		if ( !m_pSelectedPackage ) 
622
		{
623
			this->button1->Visible = false;
624
			return;
625
		}
626
 
627
		CheckUpdate ^update = gcnew CheckUpdate(m_pPackages, m_pImageList);
628
		update->SetDownloader();
629
		update->OnePackage(m_pSelectedPackage);
630
		if ( update->ShowDialog(this) == Windows::Forms::DialogResult::OK )
631
		{
632
			this->DialogResult = Windows::Forms::DialogResult::Yes;
633
			for ( int i = 0; i < update->GetInstallList()->Count; i++ )
634
				cli::safe_cast<MainGui ^>(this->Owner)->InstallPackage(Convert::ToString(update->GetInstallList()[i]), false, false, true);
635
			this->Close();
636
		}
637
	}
638
 
639
}