Subversion Repositories spk

Rev

Rev 214 | Rev 226 | 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 "InstallPackageDialog.h"
3
 
4
#undef GetTempPath
5
#undef GetCurrentDirectory
6
 
7
namespace PluginManager {
8
 
105 cycrow 9
	InstallPackageDialog::InstallPackageDialog(CPackages *p) : m_pPackages(p)
10
	{
11
		InitializeComponent();
12
 
13
		this->UpdatePackages();
14
	}
15
 
1 cycrow 16
	void InstallPackageDialog::UpdatePackages()
17
	{
18
		ListPackages->Items->Clear();
19
		ListPackages->Groups->Clear();
20
		ListPackages->SmallImageList = gcnew ImageList();
21
		ListPackages->LargeImageList = ListPackages->SmallImageList;
22
 
23
		int count = 0;
24
		for ( CListNode<CBaseFile> *node = m_pPackages->GetInstallPackageList()->Front(); node; node = node->next() )
25
		{
26
			CBaseFile *p = node->Data();
27
 
171 cycrow 28
			ListViewItem ^item = gcnew ListViewItem(_US(p->name(m_pPackages->GetLanguage())));
50 cycrow 29
			item->SubItems->Add(_US(p->author()));
30
			item->SubItems->Add(_US(p->version()));
1 cycrow 31
			switch ( p->GetLoadError() )
32
			{
33
				case INSTALLCHECK_OLDVERSION:
34
					item->SubItems->Add("Newer version installed");
35
					break;
36
				case INSTALLCHECK_WRONGGAME:
37
					item->SubItems->Add("For Wrong Game");
38
					break;
39
				case INSTALLCHECK_WRONGVERSION:
40
					item->SubItems->Add("For Wrong Game Version");
41
					break;
42
			}
43
			ListPackages->Items->Add(item);
170 cycrow 44
			item->Tag = _US(Utils::String::Number(count));
1 cycrow 45
			++count;
46
 
170 cycrow 47
			if ( p->icon() )
1 cycrow 48
			{
49
				//extract icon
170 cycrow 50
				C_File *f = p->icon();
224 cycrow 51
				f->setFullDir(_WS(System::IO::Path::GetTempPath()));
1 cycrow 52
				if ( f->UncompressData() )
129 cycrow 53
					f->writeFilePointer();
1 cycrow 54
 
55
				PluginManager::DisplayListIcon(p, ListPackages, item);
56
			}
57
 
58
			C_File *gf = p->GetFirstFile(FILETYPE_ADVERT);
59
			if ( gf )
60
			{
224 cycrow 61
				gf->setFullDir(_WS(System::IO::Path::GetTempPath()));
1 cycrow 62
				if ( gf->UncompressData() )
129 cycrow 63
					gf->writeFilePointer();
1 cycrow 64
			}
65
 
66
 
67
			if ( count == 1 )
68
				item->Selected = true;
69
			item->Checked = (p->GetLoadError()) ? false : true;
70
 
71
			// select one with an error if there is any
72
			if ( p->GetLoadError() )
73
				item->Selected = true;
105 cycrow 74
 
75
			updateUI();
1 cycrow 76
		}
77
 
78
		if ( ListPackages->Items->Count == 1 )
79
		{
74 cycrow 80
			//this->GroupList->Hide();
81
			//this->Height = 250;
1 cycrow 82
			this->DisplayPackage(m_pPackages->GetInstallPackageList()->Get(0));
83
		}
84
	}
85
 
86
	void InstallPackageDialog::DisplayPackage(CBaseFile *p)
87
	{
88
		TextInstall->Hide();
89
		this->PanelRating->Hide();
90
 
91
		PicEase1->Hide();
92
		PicEase2->Hide();
93
		PicEase3->Hide();
94
		PicEase4->Hide();
95
		PicEase5->Hide();
96
 
97
		PicChange1->Hide();
98
		PicChange2->Hide();
99
		PicChange3->Hide();
100
		PicChange4->Hide();
101
		PicChange5->Hide();
102
 
103
		PicRec1->Hide();
104
		PicRec2->Hide();
105
		PicRec3->Hide();
106
		PicRec4->Hide();
107
		PicRec5->Hide();
108
 
109
		this->LabError->Text = "";
110
 
111
		if ( p )
112
		{
170 cycrow 113
			this->GroupPackage->Text = _US(p->getFullPackageName(m_pPackages->GetLanguage(), false));
48 cycrow 114
			this->TextDesc->Text = _US(p->description().findReplace("<br>", "\n").stripHtml());
1 cycrow 115
 
116
			// update graphic
117
			bool addedIcon = false;
118
			C_File *picFile = p->GetFirstFile(FILETYPE_ADVERT);
119
			if ( picFile )
120
			{
129 cycrow 121
				System::String ^pic = _US(picFile->filePointer());
1 cycrow 122
				if ( System::IO::File::Exists(pic) )
123
				{
53 cycrow 124
					try {
125
						Bitmap ^myBitmap = gcnew Bitmap(pic);
126
						if ( myBitmap )
127
						{
128
							this->PictureDisplay->Image = dynamic_cast<Image ^>(myBitmap);
129
							addedIcon = true;
130
						}
1 cycrow 131
					}
53 cycrow 132
					catch (System::ArgumentException ^E) {
133
					}
1 cycrow 134
				}
135
			}
136
 
137
			if ( !addedIcon )
138
			{
139
				System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(InstallPackageDialog::typeid));
140
				System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
141
				this->PictureDisplay->Image = icon->ToBitmap();
142
			}
143
 
46 cycrow 144
			if ( !p->installText(m_pPackages->GetLanguage(), true).empty() )
1 cycrow 145
			{
48 cycrow 146
				this->TextInstall->Text = _US(p->installText(m_pPackages->GetLanguage(), true).stripHtml());
1 cycrow 147
				this->TextInstall->Show();
148
			}
149
 
50 cycrow 150
			this->LabDate->Text = _US(p->creationDate());
151
			this->LabVersion->Text = _US(p->version());
1 cycrow 152
			if ( p->GetType() == TYPE_SPK )
153
			{
214 cycrow 154
				this->LabType->Text = _US(((CSpkFile *)p)->scriptTypeString(m_pPackages->GetLanguage()));
48 cycrow 155
				switch ( p->pluginType() ) {
156
					case PLUGIN_NORMAL:			this->LabPluginType->Text = "Normal"; break;
157
					case PLUGIN_STABLE:			this->LabPluginType->Text = "Stable"; break;
158
					case PLUGIN_EXPERIMENTAL:	this->LabPluginType->Text = "Experimental";	break;
159
					case PLUGIN_CHEAT:			this->LabPluginType->Text = "Cheat"; break;
160
					case PLUGIN_MOD:			this->LabPluginType->Text = "Mod"; break;
1 cycrow 161
				}
162
			}
163
			else if ( p->GetType() == TYPE_XSP )
164
			{
165
				this->LabType->Text = "Ship";
166
				this->LabPluginType->Text = "Ship";
167
			}
168
			else
169
			{
170
				this->LabType->Text = "Other";
171
				this->LabPluginType->Text = "Other";
172
			}
173
 
174
			if ( p->AnyGameCompatability() )
152 cycrow 175
				this->LabGames->Text = _US(m_pPackages->getGameTypesString(p, true));
1 cycrow 176
			else
177
				this->LabGames->Text = "All Games";
178
 
46 cycrow 179
			if ( p->gameChanging() >= 1 || p->recommended() >= 1 || p->easeOfUse() >= 1 )
1 cycrow 180
			{
181
				this->PanelRating->Show();
182
 
183
				// ease of use rating
46 cycrow 184
				if ( p->easeOfUse() >= 1 )
1 cycrow 185
					PicEase1->Show();
46 cycrow 186
				if ( p->easeOfUse() >= 2 )
1 cycrow 187
					PicEase2->Show();
46 cycrow 188
				if ( p->easeOfUse() >= 3 )
1 cycrow 189
					PicEase3->Show();
46 cycrow 190
				if ( p->easeOfUse() >= 4 )
1 cycrow 191
					PicEase4->Show();
46 cycrow 192
				if ( p->easeOfUse() >= 5 )
1 cycrow 193
					PicEase5->Show();
194
 
195
				// game changing rating
46 cycrow 196
				if ( p->gameChanging() >= 1 )
1 cycrow 197
					PicChange1->Show();
46 cycrow 198
				if ( p->gameChanging() >= 2 )
1 cycrow 199
					PicChange2->Show();
46 cycrow 200
				if ( p->gameChanging() >= 3 )
1 cycrow 201
					PicChange3->Show();
46 cycrow 202
				if ( p->gameChanging() >= 4 )
1 cycrow 203
					PicChange4->Show();
46 cycrow 204
				if ( p->gameChanging() >= 5 )
1 cycrow 205
					PicChange5->Show();
206
 
207
				// Recommanded rating
46 cycrow 208
				if ( p->recommended() >= 1 )
1 cycrow 209
					PicRec1->Show();
46 cycrow 210
				if ( p->recommended() >= 2 )
1 cycrow 211
					PicRec2->Show();
46 cycrow 212
				if ( p->recommended() >= 3 )
1 cycrow 213
					PicRec3->Show();
46 cycrow 214
				if ( p->recommended() >= 4 )
1 cycrow 215
					PicRec4->Show();
46 cycrow 216
				if ( p->recommended() >= 5 )
1 cycrow 217
					PicRec5->Show();
218
			}
219
 
220
			switch ( p->GetLoadError() )
221
			{
222
				case INSTALLCHECK_OLDVERSION:
223
					{
182 cycrow 224
						CBaseFile *oldPackage = m_pPackages->findPackage(p);
1 cycrow 225
						if ( oldPackage )
50 cycrow 226
							this->LabError->Text = "Newer version already installed: V" + _US(oldPackage->version()) + " - " + _US(oldPackage->creationDate());
1 cycrow 227
						else
228
							this->LabError->Text = "Newer version already installed";
229
					}
230
					break;
231
				case INSTALLCHECK_WRONGGAME:
152 cycrow 232
					this->LabError->Text = "For Wrong Game, Requires: " + _US(m_pPackages->getGameTypesString(p, false));
1 cycrow 233
					break;
234
				case INSTALLCHECK_WRONGVERSION:
182 cycrow 235
					this->LabError->Text = "For Wrong Game Version, Requires: " + _US(m_pPackages->getGameVersionString(p));
1 cycrow 236
					break;
237
			}
238
		}
239
		else
240
		{
241
			this->LabType->Text = "";
242
			this->GroupPackage->Text = "";
243
			this->TextDesc->Text = "";
244
			this->PictureDisplay->Image = nullptr;
245
		}
246
	}
247
 
248
	void InstallPackageDialog::DoClose()
249
	{
250
		// remove any packages that are not selected
251
		// if only 1 package, we cant select the check box, so always checked
252
		if ( ListPackages->Items->Count > 1 )
253
		{
254
			CLinkList<CBaseFile> removePackages;
255
			for ( int i = ListPackages->Items->Count - 1; i >= 0; i-- )
256
			{
257
				ListViewItem ^item = ListPackages->Items[i];
258
				if ( !item->Checked )
259
				{
260
					int num = Convert::ToInt32(item->Tag);
261
					removePackages.push_back(m_pPackages->GetInstallPackageList()->Get(num));
262
				}			
263
			}
264
 
265
			for ( CBaseFile *p = removePackages.First(); p; p = removePackages.Next() )
266
				m_pPackages->RemovePreparedInstall(p);
267
			removePackages.MemoryClear();
268
		}
269
 
270
		m_pPackages->CheckPreparedInstallRequired(NULL);
271
		this->Close();
272
	}
105 cycrow 273
 
274
	void InstallPackageDialog::updateUI()
275
	{
276
		bool anyChecked = false;
277
		for ( int i = 0; i < ListPackages->Items->Count; i++ ) {
278
			if ( ListPackages->Items[i]->Checked ) {
279
				anyChecked = true;
280
				break;
281
			}
282
		}
283
 
284
		this->ButInstall->Enabled = anyChecked;
285
	}
1 cycrow 286
}