Subversion Repositories spk

Rev

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