Subversion Repositories spk

Rev

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