| 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 |   | 
        
           |  |  | 28 | 			ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->GetLanguageName(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);
 | 
        
           |  |  | 44 | 			item->Tag = SystemStringFromCyString(CyString::Number(count));
 | 
        
           |  |  | 45 | 			++count;
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 | 			if ( p->GetIcon() )
 | 
        
           |  |  | 48 | 			{
 | 
        
           |  |  | 49 | 				//extract icon
 | 
        
           |  |  | 50 | 				C_File *f = p->GetIcon();
 | 
        
           |  |  | 51 | 				f->SetFullDir(CyStringFromSystemString(System::IO::Path::GetTempPath()));
 | 
        
           |  |  | 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 | 			{
 | 
        
           |  |  | 61 | 				gf->SetFullDir(CyStringFromSystemString(System::IO::Path::GetTempPath()));
 | 
        
           |  |  | 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 | 		{
 | 
        
           |  |  | 113 | 			this->GroupPackage->Text = SystemStringFromCyString(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 | 			{
 | 
        
           |  |  | 154 | 				this->LabType->Text = SystemStringFromCyString(((CSpkFile *)p)->GetScriptTypeString(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 | 					{
 | 
        
           |  |  | 224 | 						CBaseFile *oldPackage = m_pPackages->FindPackage(p);
 | 
        
           |  |  | 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:
 | 
        
           |  |  | 235 | 					this->LabError->Text = "For Wrong Game Version, Requires: " + SystemStringFromCyString(m_pPackages->GetGameVersionString(p));
 | 
        
           |  |  | 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 | }
 |