Subversion Repositories spk

Rev

Rev 228 | 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);
228 cycrow 44
			item->Tag = _US(Utils::WString::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));
226 cycrow 114
			this->TextDesc->Text = _US(p->description().findReplace(L"<br>", L"\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) {
299 cycrow 133
						(void)E;
53 cycrow 134
					}
1 cycrow 135
				}
136
			}
137
 
138
			if ( !addedIcon )
139
			{
140
				System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(InstallPackageDialog::typeid));
141
				System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
142
				this->PictureDisplay->Image = icon->ToBitmap();
143
			}
144
 
46 cycrow 145
			if ( !p->installText(m_pPackages->GetLanguage(), true).empty() )
1 cycrow 146
			{
48 cycrow 147
				this->TextInstall->Text = _US(p->installText(m_pPackages->GetLanguage(), true).stripHtml());
1 cycrow 148
				this->TextInstall->Show();
149
			}
150
 
50 cycrow 151
			this->LabDate->Text = _US(p->creationDate());
152
			this->LabVersion->Text = _US(p->version());
1 cycrow 153
			if ( p->GetType() == TYPE_SPK )
154
			{
214 cycrow 155
				this->LabType->Text = _US(((CSpkFile *)p)->scriptTypeString(m_pPackages->GetLanguage()));
48 cycrow 156
				switch ( p->pluginType() ) {
157
					case PLUGIN_NORMAL:			this->LabPluginType->Text = "Normal"; break;
158
					case PLUGIN_STABLE:			this->LabPluginType->Text = "Stable"; break;
159
					case PLUGIN_EXPERIMENTAL:	this->LabPluginType->Text = "Experimental";	break;
160
					case PLUGIN_CHEAT:			this->LabPluginType->Text = "Cheat"; break;
161
					case PLUGIN_MOD:			this->LabPluginType->Text = "Mod"; break;
1 cycrow 162
				}
163
			}
164
			else if ( p->GetType() == TYPE_XSP )
165
			{
166
				this->LabType->Text = "Ship";
167
				this->LabPluginType->Text = "Ship";
168
			}
169
			else
170
			{
171
				this->LabType->Text = "Other";
172
				this->LabPluginType->Text = "Other";
173
			}
174
 
175
			if ( p->AnyGameCompatability() )
152 cycrow 176
				this->LabGames->Text = _US(m_pPackages->getGameTypesString(p, true));
1 cycrow 177
			else
178
				this->LabGames->Text = "All Games";
179
 
46 cycrow 180
			if ( p->gameChanging() >= 1 || p->recommended() >= 1 || p->easeOfUse() >= 1 )
1 cycrow 181
			{
182
				this->PanelRating->Show();
183
 
184
				// ease of use rating
46 cycrow 185
				if ( p->easeOfUse() >= 1 )
1 cycrow 186
					PicEase1->Show();
46 cycrow 187
				if ( p->easeOfUse() >= 2 )
1 cycrow 188
					PicEase2->Show();
46 cycrow 189
				if ( p->easeOfUse() >= 3 )
1 cycrow 190
					PicEase3->Show();
46 cycrow 191
				if ( p->easeOfUse() >= 4 )
1 cycrow 192
					PicEase4->Show();
46 cycrow 193
				if ( p->easeOfUse() >= 5 )
1 cycrow 194
					PicEase5->Show();
195
 
196
				// game changing rating
46 cycrow 197
				if ( p->gameChanging() >= 1 )
1 cycrow 198
					PicChange1->Show();
46 cycrow 199
				if ( p->gameChanging() >= 2 )
1 cycrow 200
					PicChange2->Show();
46 cycrow 201
				if ( p->gameChanging() >= 3 )
1 cycrow 202
					PicChange3->Show();
46 cycrow 203
				if ( p->gameChanging() >= 4 )
1 cycrow 204
					PicChange4->Show();
46 cycrow 205
				if ( p->gameChanging() >= 5 )
1 cycrow 206
					PicChange5->Show();
207
 
208
				// Recommanded rating
46 cycrow 209
				if ( p->recommended() >= 1 )
1 cycrow 210
					PicRec1->Show();
46 cycrow 211
				if ( p->recommended() >= 2 )
1 cycrow 212
					PicRec2->Show();
46 cycrow 213
				if ( p->recommended() >= 3 )
1 cycrow 214
					PicRec3->Show();
46 cycrow 215
				if ( p->recommended() >= 4 )
1 cycrow 216
					PicRec4->Show();
46 cycrow 217
				if ( p->recommended() >= 5 )
1 cycrow 218
					PicRec5->Show();
219
			}
220
 
221
			switch ( p->GetLoadError() )
222
			{
223
				case INSTALLCHECK_OLDVERSION:
224
					{
182 cycrow 225
						CBaseFile *oldPackage = m_pPackages->findPackage(p);
1 cycrow 226
						if ( oldPackage )
50 cycrow 227
							this->LabError->Text = "Newer version already installed: V" + _US(oldPackage->version()) + " - " + _US(oldPackage->creationDate());
1 cycrow 228
						else
229
							this->LabError->Text = "Newer version already installed";
230
					}
231
					break;
232
				case INSTALLCHECK_WRONGGAME:
152 cycrow 233
					this->LabError->Text = "For Wrong Game, Requires: " + _US(m_pPackages->getGameTypesString(p, false));
1 cycrow 234
					break;
235
				case INSTALLCHECK_WRONGVERSION:
182 cycrow 236
					this->LabError->Text = "For Wrong Game Version, Requires: " + _US(m_pPackages->getGameVersionString(p));
1 cycrow 237
					break;
238
			}
239
		}
240
		else
241
		{
242
			this->LabType->Text = "";
243
			this->GroupPackage->Text = "";
244
			this->TextDesc->Text = "";
245
			this->PictureDisplay->Image = nullptr;
246
		}
247
	}
248
 
249
	void InstallPackageDialog::DoClose()
250
	{
251
		// remove any packages that are not selected
252
		// if only 1 package, we cant select the check box, so always checked
253
		if ( ListPackages->Items->Count > 1 )
254
		{
255
			CLinkList<CBaseFile> removePackages;
256
			for ( int i = ListPackages->Items->Count - 1; i >= 0; i-- )
257
			{
258
				ListViewItem ^item = ListPackages->Items[i];
259
				if ( !item->Checked )
260
				{
261
					int num = Convert::ToInt32(item->Tag);
262
					removePackages.push_back(m_pPackages->GetInstallPackageList()->Get(num));
263
				}			
264
			}
265
 
266
			for ( CBaseFile *p = removePackages.First(); p; p = removePackages.Next() )
267
				m_pPackages->RemovePreparedInstall(p);
268
			removePackages.MemoryClear();
269
		}
270
 
271
		m_pPackages->CheckPreparedInstallRequired(NULL);
272
		this->Close();
273
	}
105 cycrow 274
 
275
	void InstallPackageDialog::updateUI()
276
	{
277
		bool anyChecked = false;
278
		for ( int i = 0; i < ListPackages->Items->Count; i++ ) {
279
			if ( ListPackages->Items[i]->Checked ) {
280
				anyChecked = true;
281
				break;
282
			}
283
		}
284
 
285
		this->ButInstall->Enabled = anyChecked;
286
	}
1 cycrow 287
}