| 1 | cycrow | 1 | #include "../StdAfx.h"
 | 
        
           |  |  | 2 | #include "ModSelector.h"
 | 
        
           |  |  | 3 | #include "CheckUpdate.h"
 | 
        
           |  |  | 4 | #include "MainGui.h"
 | 
        
           |  |  | 5 |   | 
        
           |  |  | 6 | #undef GetTempPath
 | 
        
           |  |  | 7 | #undef GetCurrentDirectory
 | 
        
           |  |  | 8 |   | 
        
           |  |  | 9 | using namespace System::IO;
 | 
        
           |  |  | 10 |   | 
        
           |  |  | 11 | namespace PluginManager {
 | 
        
           |  |  | 12 |   | 
        
           |  |  | 13 | 	void ModSelector::Update()
 | 
        
           |  |  | 14 | 	{
 | 
        
           |  |  | 15 | 		// update the mod display
 | 
        
           |  |  | 16 | 		this->PictureBox->Image = nullptr;
 | 
        
           |  |  | 17 | 		if ( m_pPackages->GetEnabledMod() )
 | 
        
           |  |  | 18 | 		{
 | 
        
           |  |  | 19 | 			m_bFoundPackages = true;
 | 
        
           |  |  | 20 | 			CBaseFile *p = m_pPackages->GetEnabledMod();
 | 
        
           | 170 | cycrow | 21 | 			this->TextMod->Text = _US(p->getLanguageName(m_pPackages->GetLanguage()));
 | 
        
           | 50 | cycrow | 22 | 			this->TextAuthor->Text = _US(p->author());
 | 
        
           |  |  | 23 | 			this->TextVersion->Text = _US(p->version());
 | 
        
           | 48 | cycrow | 24 | 			this->TextDesc->Text = _US(p->description().findReplace("<br>", "\n").stripHtml());
 | 
        
           | 50 | cycrow | 25 | 			this->TextCreated->Text = _US(p->creationDate());
 | 
        
           | 1 | cycrow | 26 | 			ButNoMod->Enabled = true;
 | 
        
           |  |  | 27 |   | 
        
           |  |  | 28 | 			// update graphic
 | 
        
           |  |  | 29 | 			bool addedIcon = false;
 | 
        
           |  |  | 30 | 			C_File *picFile = p->GetFirstFile(FILETYPE_ADVERT);
 | 
        
           |  |  | 31 | 			if ( picFile )
 | 
        
           |  |  | 32 | 			{
 | 
        
           | 129 | cycrow | 33 | 				System::String ^pic = _US(picFile->filePointer());
 | 
        
           | 1 | cycrow | 34 | 				if ( System::IO::File::Exists(pic) )
 | 
        
           |  |  | 35 | 				{
 | 
        
           |  |  | 36 | 					Bitmap ^myBitmap = gcnew Bitmap(pic);
 | 
        
           |  |  | 37 | 					if ( myBitmap )
 | 
        
           |  |  | 38 | 					{
 | 
        
           |  |  | 39 | 						this->PictureBox->Image = dynamic_cast<Image ^>(myBitmap);
 | 
        
           |  |  | 40 | 						addedIcon = true;
 | 
        
           |  |  | 41 | 					}
 | 
        
           |  |  | 42 | 				}
 | 
        
           |  |  | 43 | 			}
 | 
        
           |  |  | 44 |   | 
        
           |  |  | 45 | 			if ( !addedIcon )
 | 
        
           |  |  | 46 | 			{
 | 
        
           |  |  | 47 | 				System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(ModSelector::typeid));
 | 
        
           |  |  | 48 | 				System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
 | 
        
           |  |  | 49 | 				this->PictureBox->Image = icon->ToBitmap();
 | 
        
           |  |  | 50 | 			}
 | 
        
           |  |  | 51 | 		}
 | 
        
           |  |  | 52 | 		else
 | 
        
           |  |  | 53 | 		{
 | 
        
           |  |  | 54 | 			this->TextMod->Text = "N/A";
 | 
        
           |  |  | 55 | 			this->TextAuthor->Text = "";
 | 
        
           |  |  | 56 | 			this->TextVersion->Text = "";
 | 
        
           |  |  | 57 | 			this->TextCreated->Text = "";
 | 
        
           |  |  | 58 | 			this->TextDesc->Text = "";
 | 
        
           |  |  | 59 | 			this->PictureBox->Image = nullptr;
 | 
        
           |  |  | 60 | 			ButNoMod->Enabled = false;
 | 
        
           |  |  | 61 | 		}
 | 
        
           |  |  | 62 |   | 
        
           |  |  | 63 | 		// now update the mods list
 | 
        
           |  |  | 64 | 		// first any installed mods
 | 
        
           |  |  | 65 | 		this->UpdatePackages();
 | 
        
           |  |  | 66 | 	}
 | 
        
           |  |  | 67 |   | 
        
           |  |  | 68 | 	void ModSelector::UpdatePackages()
 | 
        
           |  |  | 69 | 	{
 | 
        
           |  |  | 70 | 		m_pPackages->AssignPackageNumbers();
 | 
        
           |  |  | 71 | 		ListAvailable->Items->Clear();
 | 
        
           |  |  | 72 | 		ListAvailable->Groups->Clear();
 | 
        
           |  |  | 73 | 		ListAvailable->SmallImageList = gcnew ImageList();
 | 
        
           |  |  | 74 | 		ListAvailable->LargeImageList = ListAvailable->SmallImageList;
 | 
        
           |  |  | 75 |   | 
        
           |  |  | 76 | 		// display the installed mods
 | 
        
           |  |  | 77 | 		ListViewGroup ^group = gcnew ListViewGroup("Installed Mods", HorizontalAlignment::Left);
 | 
        
           |  |  | 78 | 		ListAvailable->Groups->Add(group);
 | 
        
           |  |  | 79 |   | 
        
           |  |  | 80 | 		for ( CBaseFile *p = m_pPackages->FirstPackage(); p; p = m_pPackages->NextPackage() )
 | 
        
           |  |  | 81 | 		{
 | 
        
           |  |  | 82 | 			if ( !p->IsMod() )
 | 
        
           |  |  | 83 | 				continue;
 | 
        
           |  |  | 84 | 			if ( p == m_pPackages->GetEnabledMod() )
 | 
        
           |  |  | 85 | 				continue;
 | 
        
           |  |  | 86 |   | 
        
           |  |  | 87 | 			m_bFoundPackages = true;
 | 
        
           | 170 | cycrow | 88 | 			ListViewItem ^item = gcnew ListViewItem(_US(p->getLanguageName(m_pPackages->GetLanguage())));
 | 
        
           | 50 | cycrow | 89 | 			item->SubItems->Add(_US(p->author()));
 | 
        
           |  |  | 90 | 			item->SubItems->Add(_US(p->version()));
 | 
        
           |  |  | 91 | 			item->SubItems->Add(_US(p->creationDate()));
 | 
        
           | 1 | cycrow | 92 | 			ListAvailable->Items->Add(item);
 | 
        
           | 170 | cycrow | 93 | 			item->Tag = _US(Utils::String::Number(p->GetNum()));
 | 
        
           | 1 | cycrow | 94 |   | 
        
           |  |  | 95 | 			item->Group = group;
 | 
        
           | 170 | cycrow | 96 | 			if ( p->icon() )
 | 
        
           | 1 | cycrow | 97 | 				PluginManager::DisplayListIcon(p, ListAvailable, item);
 | 
        
           |  |  | 98 | 		}
 | 
        
           |  |  | 99 |   | 
        
           |  |  | 100 | 		if ( m_lAvailablePackages )
 | 
        
           |  |  | 101 | 		{
 | 
        
           |  |  | 102 | 			// display the available mods
 | 
        
           |  |  | 103 | 			ListViewGroup ^availGroup = gcnew ListViewGroup("Available Mods", HorizontalAlignment::Left);
 | 
        
           |  |  | 104 | 			ListAvailable->Groups->Add(availGroup);
 | 
        
           |  |  | 105 |   | 
        
           |  |  | 106 | 			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
 | 
        
           |  |  | 107 | 			{
 | 
        
           |  |  | 108 | 				if ( !p->IsMod() )
 | 
        
           |  |  | 109 | 					continue;
 | 
        
           |  |  | 110 |   | 
        
           |  |  | 111 | 				// check if its already installed
 | 
        
           | 50 | cycrow | 112 | 				if ( m_pPackages->FindSpkPackage(p->name(), p->author()) )
 | 
        
           | 1 | cycrow | 113 | 					continue;
 | 
        
           |  |  | 114 |   | 
        
           |  |  | 115 | 				m_bFoundPackages = true;
 | 
        
           | 170 | cycrow | 116 | 				ListViewItem ^item = gcnew ListViewItem(_US(p->getLanguageName(m_pPackages->GetLanguage())));
 | 
        
           |  |  | 117 | 				item->SubItems->Add(_US(p->author()));
 | 
        
           | 50 | cycrow | 118 | 				item->SubItems->Add(_US(p->version()));
 | 
        
           |  |  | 119 | 				item->SubItems->Add(_US(p->creationDate()));
 | 
        
           | 1 | cycrow | 120 | 				ListAvailable->Items->Add(item);
 | 
        
           | 170 | cycrow | 121 | 				item->Tag = _US(Utils::String::Number(p->GetNum()));
 | 
        
           | 1 | cycrow | 122 |   | 
        
           |  |  | 123 | 				item->Group = availGroup;
 | 
        
           | 170 | cycrow | 124 | 				if ( p->icon() )
 | 
        
           | 1 | cycrow | 125 | 					PluginManager::DisplayListIcon(p, ListAvailable, item);
 | 
        
           |  |  | 126 | 			}
 | 
        
           |  |  | 127 | 		}
 | 
        
           |  |  | 128 |   | 
        
           |  |  | 129 | 		if ( m_pPackages->AnyAvailablePackages(PACKAGETYPE_MOD) )
 | 
        
           |  |  | 130 | 		{
 | 
        
           |  |  | 131 | 			// display the available mods
 | 
        
           |  |  | 132 | 			ListViewGroup ^availGroup = gcnew ListViewGroup("Downloadable Mods", HorizontalAlignment::Left);
 | 
        
           |  |  | 133 | 			ListAvailable->Groups->Add(availGroup);
 | 
        
           |  |  | 134 |   | 
        
           | 161 | cycrow | 135 | 			for (const SAvailablePackage *ap = m_pPackages->getAvailablePackageList()->First(); ap; ap = m_pPackages->getAvailablePackageList()->Next() )
 | 
        
           | 1 | cycrow | 136 | 			{
 | 
        
           |  |  | 137 | 				if ( ap->iType != PACKAGETYPE_MOD ) continue; // only display mods
 | 
        
           |  |  | 138 | 				m_bFoundPackages = true;
 | 
        
           | 161 | cycrow | 139 | 				ListViewItem ^item = gcnew ListViewItem(_US(ap->sName));
 | 
        
           |  |  | 140 | 				item->SubItems->Add(_US(ap->sAuthor));
 | 
        
           |  |  | 141 | 				item->SubItems->Add(_US(ap->sVersion));
 | 
        
           |  |  | 142 | 				item->SubItems->Add(_US(ap->sUpdated));
 | 
        
           |  |  | 143 | 				item->Tag = _US(ap->sFilename);
 | 
        
           | 1 | cycrow | 144 | 				item->Group = availGroup;
 | 
        
           |  |  | 145 | 				ListAvailable->Items->Add(item);
 | 
        
           |  |  | 146 | 			}
 | 
        
           |  |  | 147 | 		}
 | 
        
           |  |  | 148 |   | 
        
           |  |  | 149 | 		ListAvailable->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
 | 
        
           |  |  | 150 | 		ModSelected(ListAvailable, gcnew System::EventArgs());
 | 
        
           |  |  | 151 | 	}
 | 
        
           |  |  | 152 |   | 
        
           |  |  | 153 | 	void ModSelector::UpdateControls()
 | 
        
           |  |  | 154 | 	{
 | 
        
           |  |  | 155 | 		ListAvailable->FullRowSelect = true;
 | 
        
           |  |  | 156 | 	}
 | 
        
           |  |  | 157 |   | 
        
           |  |  | 158 | 	void ModSelector::FindPackages_Directory(String ^dir)
 | 
        
           |  |  | 159 | 	{
 | 
        
           |  |  | 160 | 		if ( Directory::Exists(dir) )
 | 
        
           |  |  | 161 | 		{
 | 
        
           |  |  | 162 | 			this->FindPackages(dir);
 | 
        
           |  |  | 163 |   | 
        
           |  |  | 164 | 			array <System::String ^> ^Dirs = Directory::GetDirectories(dir);
 | 
        
           |  |  | 165 | 			if ( Dirs )
 | 
        
           |  |  | 166 | 			{
 | 
        
           |  |  | 167 | 				for ( int i = 0; i < Dirs->Length; i++ )
 | 
        
           |  |  | 168 | 					this->FindPackages_Directory(Dirs[i]);
 | 
        
           |  |  | 169 | 			}
 | 
        
           |  |  | 170 | 		}
 | 
        
           |  |  | 171 | 	}
 | 
        
           |  |  | 172 |   | 
        
           |  |  | 173 | 	void ModSelector::FindPackages(String ^dir)
 | 
        
           |  |  | 174 | 	{
 | 
        
           |  |  | 175 | 		if ( !Directory::Exists(dir) )
 | 
        
           |  |  | 176 | 			return;
 | 
        
           |  |  | 177 |   | 
        
           |  |  | 178 | 		array <System::String ^> ^Files = Directory::GetFiles(dir, "*.spk");
 | 
        
           |  |  | 179 |   | 
        
           |  |  | 180 | 		for ( int i = 0; i < Files->Length; i++ )
 | 
        
           |  |  | 181 | 		{
 | 
        
           |  |  | 182 | 			CyString file = CyStringFromSystemString(Files[i]);
 | 
        
           |  |  | 183 | 			int error = 0;
 | 
        
           |  |  | 184 | 			CBaseFile *p = m_pPackages->OpenPackage(file, &error, 0, SPKREAD_NODATA);
 | 
        
           |  |  | 185 | 			if ( !p )
 | 
        
           |  |  | 186 | 				continue;
 | 
        
           | 50 | cycrow | 187 | 			if ( !p->IsMod() || m_pPackages->FindSpkPackage(p->name(), p->author()) )
 | 
        
           | 1 | cycrow | 188 | 			{
 | 
        
           |  |  | 189 | 				delete p;
 | 
        
           |  |  | 190 | 				continue;
 | 
        
           |  |  | 191 | 			}
 | 
        
           |  |  | 192 |   | 
        
           |  |  | 193 | 			// check its for the correct game
 | 
        
           |  |  | 194 | 			if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
 | 
        
           |  |  | 195 | 			{
 | 
        
           |  |  | 196 | 				delete p;
 | 
        
           |  |  | 197 | 				continue;
 | 
        
           |  |  | 198 | 			}
 | 
        
           |  |  | 199 |   | 
        
           |  |  | 200 | 			// check if its already on the list
 | 
        
           |  |  | 201 | 			bool found = false;
 | 
        
           |  |  | 202 | 			for ( CBaseFile *checkp = m_lAvailablePackages->First(); checkp; checkp = m_lAvailablePackages->Next() )
 | 
        
           |  |  | 203 | 			{
 | 
        
           | 50 | cycrow | 204 | 				if ( p->name().Compare(checkp->name()) && p->author().Compare(checkp->author()) )
 | 
        
           | 1 | cycrow | 205 | 				{
 | 
        
           |  |  | 206 | 					found = true;
 | 
        
           |  |  | 207 | 					break;
 | 
        
           |  |  | 208 | 				}
 | 
        
           |  |  | 209 | 			}
 | 
        
           |  |  | 210 |   | 
        
           |  |  | 211 | 			if ( found )
 | 
        
           |  |  | 212 | 			{
 | 
        
           |  |  | 213 | 				delete p;
 | 
        
           |  |  | 214 | 				continue;
 | 
        
           |  |  | 215 | 			}
 | 
        
           |  |  | 216 |   | 
        
           | 170 | cycrow | 217 | 			if ( p->icon() )
 | 
        
           | 1 | cycrow | 218 | 			{
 | 
        
           |  |  | 219 | 				bool addedIcon = false;
 | 
        
           |  |  | 220 | 				p->ReadIconFileToMemory();
 | 
        
           | 170 | cycrow | 221 | 				p->icon()->setFilename(m_pPackages->tempDirectory().findReplace("\\", "/") + "/" + p->author() + "_" + p->name() + "." + p->iconExt());
 | 
        
           |  |  | 222 | 				p->icon()->setFullDir(m_pPackages->tempDirectory());
 | 
        
           |  |  | 223 | 				if ( p->icon()->UncompressData() )
 | 
        
           | 1 | cycrow | 224 | 				{
 | 
        
           | 170 | cycrow | 225 | 					if ( p->icon()->writeFilePointer() )
 | 
        
           | 1 | cycrow | 226 | 						addedIcon = true;
 | 
        
           |  |  | 227 | 				}
 | 
        
           |  |  | 228 |   | 
        
           |  |  | 229 | 				if ( !addedIcon )
 | 
        
           | 170 | cycrow | 230 | 					p->setIcon(NULL, "");
 | 
        
           | 1 | cycrow | 231 | 			}
 | 
        
           |  |  | 232 | 			// get an advert to display
 | 
        
           |  |  | 233 | 			if ( p->GetFirstFile(FILETYPE_ADVERT) )
 | 
        
           |  |  | 234 | 			{
 | 
        
           |  |  | 235 | 				bool done = false;
 | 
        
           |  |  | 236 | 				C_File *f = p->GetFirstFile(FILETYPE_ADVERT);
 | 
        
           |  |  | 237 | 				if ( p->ReadFileToMemory(f) )
 | 
        
           |  |  | 238 | 				{
 | 
        
           | 158 | cycrow | 239 | 					f->setFullDir(m_pPackages->tempDirectory());
 | 
        
           | 1 | cycrow | 240 | 					if ( f->UncompressData() )
 | 
        
           |  |  | 241 | 					{
 | 
        
           | 129 | cycrow | 242 | 						if ( f->writeFilePointer() )
 | 
        
           | 1 | cycrow | 243 | 							done = true;
 | 
        
           |  |  | 244 | 					}
 | 
        
           |  |  | 245 | 				}
 | 
        
           |  |  | 246 |   | 
        
           |  |  | 247 | 				if ( !done )
 | 
        
           |  |  | 248 | 					f->DeleteData();
 | 
        
           |  |  | 249 | 			}
 | 
        
           |  |  | 250 |   | 
        
           |  |  | 251 | 			m_lAvailablePackages->push_back(p);				
 | 
        
           |  |  | 252 | 		}
 | 
        
           |  |  | 253 | 	}
 | 
        
           |  |  | 254 |   | 
        
           |  |  | 255 | 	void ModSelector::FindPackages_Current(String ^curDir)
 | 
        
           |  |  | 256 | 	{
 | 
        
           |  |  | 257 | 		this->FindPackages(curDir + "\\Addons\\Mods");
 | 
        
           |  |  | 258 |   | 
        
           |  |  | 259 | 		if ( Directory::Exists(curDir + "\\Addons") )
 | 
        
           |  |  | 260 | 		{
 | 
        
           |  |  | 261 | 			if ( Directory::Exists(curDir + "\\Addons\\Mods") )
 | 
        
           |  |  | 262 | 				this->FindPackages_Directory(curDir + "\\Addons\\Mods");
 | 
        
           |  |  | 263 | 		}
 | 
        
           |  |  | 264 |   | 
        
           |  |  | 265 | 		if ( Directory::Exists(curDir + "\\Downloads") )
 | 
        
           |  |  | 266 | 			this->FindPackages_Directory(curDir + "\\Downloads");
 | 
        
           |  |  | 267 | 	}
 | 
        
           |  |  | 268 |   | 
        
           |  |  | 269 | 	void ModSelector::FindPackages()
 | 
        
           |  |  | 270 | 	{
 | 
        
           |  |  | 271 | 		if ( !m_lAvailablePackages )
 | 
        
           |  |  | 272 | 			m_lAvailablePackages = new CLinkList<CBaseFile>;
 | 
        
           |  |  | 273 |   | 
        
           |  |  | 274 | 		FindPackages_Current(System::IO::FileInfo(System::Windows::Forms::Application::ExecutablePath).DirectoryName);
 | 
        
           |  |  | 275 | 		FindPackages_Current(Directory::GetCurrentDirectory());
 | 
        
           |  |  | 276 |   | 
        
           |  |  | 277 | 		// find packages from registry key
 | 
        
           |  |  | 278 | 		RegistryKey ^searchKey = Registry::CurrentUser->OpenSubKey("Software\\Egosoft\\SuperBox");
 | 
        
           |  |  | 279 | 		if ( searchKey )
 | 
        
           |  |  | 280 | 		{
 | 
        
           |  |  | 281 | 			String ^dir = System::Convert::ToString(searchKey->GetValue("Addons"));
 | 
        
           |  |  | 282 | 			if ( dir )
 | 
        
           |  |  | 283 | 				this->FindPackages_Directory(dir);
 | 
        
           |  |  | 284 | 		}
 | 
        
           |  |  | 285 |   | 
        
           |  |  | 286 | 		// find packages from DVD
 | 
        
           |  |  | 287 | 		cli::array<IO::DriveInfo ^> ^Drives = IO::DriveInfo::GetDrives();
 | 
        
           |  |  | 288 | 		if ( Drives )
 | 
        
           |  |  | 289 | 		{
 | 
        
           |  |  | 290 | 			for ( int i = 0; i < Drives->Length; i++ )
 | 
        
           |  |  | 291 | 			{
 | 
        
           |  |  | 292 | 				IO::DriveInfo ^info = Drives[i];
 | 
        
           |  |  | 293 | 				if ( info->DriveType != IO::DriveType::CDRom )
 | 
        
           |  |  | 294 | 					continue;
 | 
        
           |  |  | 295 | 				if ( info->IsReady )
 | 
        
           |  |  | 296 | 					this->FindPackages_Directory(info->RootDirectory + "XPluginManager");
 | 
        
           |  |  | 297 | 			}
 | 
        
           |  |  | 298 | 		}
 | 
        
           |  |  | 299 |   | 
        
           |  |  | 300 | 		// read all game directories extra content
 | 
        
           | 121 | cycrow | 301 | 		this->FindPackages_Directory(_US((m_pPackages->getCurrentDirectory().findReplace("\\","/") + "/ExtraContent").findReplace("//", "/")));
 | 
        
           | 1 | cycrow | 302 |   | 
        
           |  |  | 303 | 		int num = -1;
 | 
        
           |  |  | 304 | 		for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
 | 
        
           |  |  | 305 | 		{
 | 
        
           |  |  | 306 | 			p->SetNum(num);
 | 
        
           |  |  | 307 | 			--num;
 | 
        
           |  |  | 308 | 		}
 | 
        
           |  |  | 309 | 	}
 | 
        
           |  |  | 310 |   | 
        
           |  |  | 311 | 	void ModSelector::RemovePackages()
 | 
        
           |  |  | 312 | 	{
 | 
        
           |  |  | 313 | 		if ( m_lAvailablePackages )
 | 
        
           |  |  | 314 | 		{
 | 
        
           |  |  | 315 | 			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
 | 
        
           |  |  | 316 | 			{
 | 
        
           | 170 | cycrow | 317 | 				if ( p->icon() )
 | 
        
           |  |  | 318 | 					CFileIO::Remove(p->icon()->filePointer());
 | 
        
           | 1 | cycrow | 319 | 				delete p;
 | 
        
           |  |  | 320 | 			}
 | 
        
           |  |  | 321 | 			m_lAvailablePackages->destroy();
 | 
        
           |  |  | 322 | 			delete m_lAvailablePackages;
 | 
        
           |  |  | 323 | 		}
 | 
        
           |  |  | 324 | 		m_lAvailablePackages = NULL;
 | 
        
           |  |  | 325 | 	}
 | 
        
           |  |  | 326 |   | 
        
           |  |  | 327 | 	//
 | 
        
           |  |  | 328 | 	// Events
 | 
        
           |  |  | 329 | 	//
 | 
        
           |  |  | 330 | 	void ModSelector::SetupEvents()
 | 
        
           |  |  | 331 | 	{
 | 
        
           |  |  | 332 | 		ListAvailable->SelectedIndexChanged += gcnew EventHandler(this, &PluginManager::ModSelector::ModSelected);
 | 
        
           |  |  | 333 | 		ButSelect->Click += gcnew EventHandler(this, &PluginManager::ModSelector::SelectModEvent);
 | 
        
           |  |  | 334 | 		ButNoMod->Click += gcnew EventHandler(this, &PluginManager::ModSelector::NoModEvent);
 | 
        
           |  |  | 335 | 		ButUninstall->Click += gcnew EventHandler(this, &PluginManager::ModSelector::UninstallModEvent);
 | 
        
           |  |  | 336 | 	}
 | 
        
           |  |  | 337 |   | 
        
           |  |  | 338 | 	void ModSelector::UpdateEaseOfUse(bool disable, int value)
 | 
        
           |  |  | 339 | 	{
 | 
        
           |  |  | 340 | 		if ( disable )
 | 
        
           |  |  | 341 | 		{
 | 
        
           |  |  | 342 | 			this->PicEase1->Visible = false;
 | 
        
           |  |  | 343 | 			this->PicEase2->Visible = false;
 | 
        
           |  |  | 344 | 			this->PicEase3->Visible = false;
 | 
        
           |  |  | 345 | 			this->PicEase4->Visible = false;
 | 
        
           |  |  | 346 | 			this->PicEase5->Visible = false;
 | 
        
           |  |  | 347 | 		}
 | 
        
           |  |  | 348 |   | 
        
           |  |  | 349 | 		if ( value > -1 )
 | 
        
           |  |  | 350 | 		{
 | 
        
           |  |  | 351 | 			// ease of use rating
 | 
        
           |  |  | 352 | 			if ( value < 1 )
 | 
        
           |  |  | 353 | 				LabEaseNA->Show();
 | 
        
           |  |  | 354 | 			if ( value >= 1 )
 | 
        
           |  |  | 355 | 				PicEase1->Show();
 | 
        
           |  |  | 356 | 			if ( value >= 2 )
 | 
        
           |  |  | 357 | 				PicEase2->Show();
 | 
        
           |  |  | 358 | 			if ( value >= 3 )
 | 
        
           |  |  | 359 | 				PicEase3->Show();
 | 
        
           |  |  | 360 | 			if ( value >= 4 )
 | 
        
           |  |  | 361 | 				PicEase4->Show();
 | 
        
           |  |  | 362 | 			if ( value >= 5 )
 | 
        
           |  |  | 363 | 				PicEase5->Show();
 | 
        
           |  |  | 364 | 		}
 | 
        
           |  |  | 365 | 	}
 | 
        
           |  |  | 366 |   | 
        
           |  |  | 367 | 	void ModSelector::UpdateRecommended(bool disable, int value)
 | 
        
           |  |  | 368 | 	{
 | 
        
           |  |  | 369 | 		if ( disable )
 | 
        
           |  |  | 370 | 		{
 | 
        
           |  |  | 371 | 			this->PicRec1->Visible = false;
 | 
        
           |  |  | 372 | 			this->PicRec2->Visible = false;
 | 
        
           |  |  | 373 | 			this->PicRec3->Visible = false;
 | 
        
           |  |  | 374 | 			this->PicRec4->Visible = false;
 | 
        
           |  |  | 375 | 			this->PicRec5->Visible = false;
 | 
        
           |  |  | 376 | 		}
 | 
        
           |  |  | 377 |   | 
        
           |  |  | 378 | 		if ( value > -1 )
 | 
        
           |  |  | 379 | 		{
 | 
        
           |  |  | 380 | 			// Recommanded rating
 | 
        
           |  |  | 381 | 			if ( value < 1 )
 | 
        
           |  |  | 382 | 				LabelRecNA->Show();
 | 
        
           |  |  | 383 | 			if ( value >= 1 )
 | 
        
           |  |  | 384 | 				PicRec1->Show();
 | 
        
           |  |  | 385 | 			if ( value >= 2 )
 | 
        
           |  |  | 386 | 				PicRec2->Show();
 | 
        
           |  |  | 387 | 			if ( value >= 3 )
 | 
        
           |  |  | 388 | 				PicRec3->Show();
 | 
        
           |  |  | 389 | 			if ( value >= 4 )
 | 
        
           |  |  | 390 | 				PicRec4->Show();
 | 
        
           |  |  | 391 | 			if ( value >= 5 )
 | 
        
           |  |  | 392 | 				PicRec5->Show();
 | 
        
           |  |  | 393 | 		}
 | 
        
           |  |  | 394 | 	}
 | 
        
           |  |  | 395 |   | 
        
           |  |  | 396 | 	void ModSelector::UpdateGameChanging(bool disable, int value)
 | 
        
           |  |  | 397 | 	{
 | 
        
           |  |  | 398 | 		if ( disable )
 | 
        
           |  |  | 399 | 		{
 | 
        
           |  |  | 400 | 			this->PicChange1->Visible = false;
 | 
        
           |  |  | 401 | 			this->PicChange2->Visible = false;
 | 
        
           |  |  | 402 | 			this->PicChange3->Visible = false;
 | 
        
           |  |  | 403 | 			this->PicChange4->Visible = false;
 | 
        
           |  |  | 404 | 			this->PicChange5->Visible = false;
 | 
        
           |  |  | 405 | 		}
 | 
        
           |  |  | 406 |   | 
        
           |  |  | 407 | 		if ( value > -1 )
 | 
        
           |  |  | 408 | 		{
 | 
        
           |  |  | 409 | 			// game changing rating
 | 
        
           |  |  | 410 | 			if ( value < 1 )
 | 
        
           |  |  | 411 | 				LabelChangeNA->Show();
 | 
        
           |  |  | 412 | 			if ( value >= 1 )
 | 
        
           |  |  | 413 | 				PicChange1->Show();
 | 
        
           |  |  | 414 | 			if ( value >= 2 )
 | 
        
           |  |  | 415 | 				PicChange2->Show();
 | 
        
           |  |  | 416 | 			if ( value >= 3 )
 | 
        
           |  |  | 417 | 				PicChange3->Show();
 | 
        
           |  |  | 418 | 			if ( value >= 4 )
 | 
        
           |  |  | 419 | 				PicChange4->Show();
 | 
        
           |  |  | 420 | 			if ( value >= 5 )
 | 
        
           |  |  | 421 | 				PicChange5->Show();
 | 
        
           |  |  | 422 | 		}
 | 
        
           |  |  | 423 | 	}
 | 
        
           |  |  | 424 |   | 
        
           |  |  | 425 | 	void ModSelector::ModSelected(System::Object ^Sender, System::EventArgs ^E)
 | 
        
           |  |  | 426 | 	{
 | 
        
           |  |  | 427 | 		bool enabled = false;
 | 
        
           |  |  | 428 |   | 
        
           |  |  | 429 | 		m_pSelectedMod = NULL;
 | 
        
           |  |  | 430 | 		m_pSelectedPackage = NULL;
 | 
        
           |  |  | 431 |   | 
        
           |  |  | 432 | 		ButUninstall->Visible = false;
 | 
        
           |  |  | 433 | 		button1->Visible = false;
 | 
        
           |  |  | 434 | 		this->PictureSelected->Image = nullptr;
 | 
        
           |  |  | 435 | 		UpdateEaseOfUse(true, -1);
 | 
        
           |  |  | 436 | 		UpdateGameChanging(true, -1);
 | 
        
           |  |  | 437 | 		UpdateRecommended(true, -1);
 | 
        
           |  |  | 438 | 		this->LabEaseNA->Visible = false;
 | 
        
           |  |  | 439 | 		this->LabelChangeNA->Visible = false;
 | 
        
           |  |  | 440 | 		this->LabelRecNA->Visible = false;
 | 
        
           |  |  | 441 |   | 
        
           |  |  | 442 | 		bool dontEnable = false;
 | 
        
           |  |  | 443 | 		if ( ListAvailable->SelectedItems->Count )
 | 
        
           |  |  | 444 | 		{
 | 
        
           |  |  | 445 | 			ListViewItem ^item = ListAvailable->SelectedItems[0];
 | 
        
           |  |  | 446 | 			if ( item )
 | 
        
           |  |  | 447 | 			{
 | 
        
           |  |  | 448 | 				CyString sNum = CyStringFromSystemString(System::Convert::ToString(item->Tag));
 | 
        
           |  |  | 449 | 				int num = sNum.ToInt();
 | 
        
           |  |  | 450 |   | 
        
           |  |  | 451 | 				CBaseFile *p = NULL;
 | 
        
           |  |  | 452 | 				if ( num || sNum == "0" )
 | 
        
           |  |  | 453 | 				{
 | 
        
           |  |  | 454 | 					// its an installed mod
 | 
        
           |  |  | 455 | 					if ( num >= 0 )
 | 
        
           |  |  | 456 | 					{
 | 
        
           |  |  | 457 | 						p = m_pPackages->GetPackageAt(num);
 | 
        
           |  |  | 458 | 						ButUninstall->Visible = true;
 | 
        
           |  |  | 459 | 					}
 | 
        
           |  |  | 460 | 					//else its from a file
 | 
        
           |  |  | 461 | 					else
 | 
        
           |  |  | 462 | 					{
 | 
        
           |  |  | 463 | 						p = m_lAvailablePackages->Get(-1 - num);
 | 
        
           |  |  | 464 | 					}
 | 
        
           |  |  | 465 |   | 
        
           |  |  | 466 | 					if ( p )
 | 
        
           |  |  | 467 | 					{
 | 
        
           |  |  | 468 | 						enabled = true;
 | 
        
           | 48 | cycrow | 469 | 						this->TextDescSelected->Text = _US(p->description().findReplace("<br>", "\n").stripHtml());
 | 
        
           | 1 | cycrow | 470 | 						m_pSelectedMod = p;
 | 
        
           |  |  | 471 |   | 
        
           |  |  | 472 | 						// update graphic
 | 
        
           |  |  | 473 | 						bool addedIcon = false;
 | 
        
           |  |  | 474 | 						C_File *picFile = p->GetFirstFile(FILETYPE_ADVERT);
 | 
        
           |  |  | 475 | 						if ( picFile )
 | 
        
           |  |  | 476 | 						{
 | 
        
           | 129 | cycrow | 477 | 							System::String ^pic = _US(picFile->filePointer());
 | 
        
           | 1 | cycrow | 478 | 							if ( System::IO::File::Exists(pic) )
 | 
        
           |  |  | 479 | 							{
 | 
        
           |  |  | 480 | 								Bitmap ^myBitmap = gcnew Bitmap(pic);
 | 
        
           |  |  | 481 | 								if ( myBitmap )
 | 
        
           |  |  | 482 | 								{
 | 
        
           |  |  | 483 | 									this->PictureSelected->Image = dynamic_cast<Image ^>(myBitmap);
 | 
        
           |  |  | 484 | 									addedIcon = true;
 | 
        
           |  |  | 485 | 								}
 | 
        
           |  |  | 486 | 							}
 | 
        
           |  |  | 487 | 						}
 | 
        
           |  |  | 488 |   | 
        
           |  |  | 489 | 						if ( !addedIcon )
 | 
        
           |  |  | 490 | 						{
 | 
        
           |  |  | 491 | 							System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(ModSelector::typeid));
 | 
        
           |  |  | 492 | 							System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
 | 
        
           |  |  | 493 | 							this->PictureSelected->Image = icon->ToBitmap();
 | 
        
           |  |  | 494 | 						}
 | 
        
           |  |  | 495 |   | 
        
           |  |  | 496 | 						// ratings display
 | 
        
           | 46 | cycrow | 497 | 						UpdateEaseOfUse(false, p->easeOfUse());
 | 
        
           |  |  | 498 | 						UpdateGameChanging(false, p->gameChanging());
 | 
        
           |  |  | 499 | 						UpdateRecommended(false, p->recommended());
 | 
        
           | 1 | cycrow | 500 | 					}
 | 
        
           |  |  | 501 | 				}
 | 
        
           |  |  | 502 | 				else // otherwise its a name (download package)
 | 
        
           |  |  | 503 | 				{
 | 
        
           | 161 | cycrow | 504 | 					const SAvailablePackage *p = m_pPackages->findAvailablePackage(sNum.ToString());
 | 
        
           | 1 | cycrow | 505 | 					if ( p )
 | 
        
           |  |  | 506 | 					{
 | 
        
           |  |  | 507 | 						enabled = true;
 | 
        
           |  |  | 508 | 						dontEnable = true;
 | 
        
           |  |  | 509 | 						this->button1->Visible = true;
 | 
        
           | 126 | cycrow | 510 | 						this->TextDescSelected->Text = SystemStringFromCyString(p->sDesc.findReplace("<br>", "\n").stripHtml());
 | 
        
           | 1 | cycrow | 511 |   | 
        
           |  |  | 512 | 						// ratings display
 | 
        
           |  |  | 513 | 						UpdateEaseOfUse(false, p->iEase);
 | 
        
           |  |  | 514 | 						UpdateGameChanging(false, p->iChanging);
 | 
        
           |  |  | 515 | 						UpdateRecommended(false, p->iRec);
 | 
        
           |  |  | 516 |   | 
        
           |  |  | 517 | 						// default display image
 | 
        
           |  |  | 518 | 						System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(ModSelector::typeid));
 | 
        
           |  |  | 519 | 						System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
 | 
        
           |  |  | 520 | 						this->PictureSelected->Image = icon->ToBitmap();
 | 
        
           |  |  | 521 |   | 
        
           |  |  | 522 | 						m_pSelectedPackage = p;
 | 
        
           |  |  | 523 | 					}
 | 
        
           |  |  | 524 | 				}
 | 
        
           |  |  | 525 | 			}
 | 
        
           |  |  | 526 | 		}
 | 
        
           |  |  | 527 |   | 
        
           |  |  | 528 | 		// nothing selected
 | 
        
           |  |  | 529 | 		if ( !enabled )
 | 
        
           |  |  | 530 | 			TextDescSelected->Text = "";
 | 
        
           |  |  | 531 |   | 
        
           |  |  | 532 | 		ButSelect->Enabled = (dontEnable) ? false : enabled;
 | 
        
           |  |  | 533 | 	}
 | 
        
           |  |  | 534 |   | 
        
           |  |  | 535 | 	void ModSelector::SelectModEvent(System::Object ^Sender, System::EventArgs ^E)
 | 
        
           |  |  | 536 | 	{
 | 
        
           |  |  | 537 | 	}
 | 
        
           |  |  | 538 |   | 
        
           |  |  | 539 | 	void ModSelector::NoModEvent(System::Object ^Sender, System::EventArgs ^E)
 | 
        
           |  |  | 540 | 	{
 | 
        
           |  |  | 541 | 	}
 | 
        
           |  |  | 542 |   | 
        
           |  |  | 543 | 	void ModSelector::UninstallModEvent(System::Object ^Sender, System::EventArgs ^E)
 | 
        
           |  |  | 544 | 	{
 | 
        
           |  |  | 545 | 	}
 | 
        
           |  |  | 546 |   | 
        
           |  |  | 547 | 	void ModSelector::UpdateDetails()
 | 
        
           |  |  | 548 | 	{
 | 
        
           |  |  | 549 | 		if ( m_bDetails )
 | 
        
           |  |  | 550 | 		{
 | 
        
           |  |  | 551 | 			ButDetails->Text = "Hide Details <<<";
 | 
        
           |  |  | 552 | 			this->PanelDetails->Show();
 | 
        
           |  |  | 553 | 		}
 | 
        
           |  |  | 554 | 		else
 | 
        
           |  |  | 555 | 		{
 | 
        
           |  |  | 556 | 			ButDetails->Text = "Show Details >>>";
 | 
        
           |  |  | 557 | 			this->PanelDetails->Hide();
 | 
        
           |  |  | 558 | 		}
 | 
        
           |  |  | 559 | 	}
 | 
        
           |  |  | 560 |   | 
        
           |  |  | 561 | 	void ModSelector::DownloadPackage()
 | 
        
           |  |  | 562 | 	{
 | 
        
           |  |  | 563 | 		if ( !m_pSelectedPackage ) 
 | 
        
           |  |  | 564 | 		{
 | 
        
           |  |  | 565 | 			this->button1->Visible = false;
 | 
        
           |  |  | 566 | 			return;
 | 
        
           |  |  | 567 | 		}
 | 
        
           |  |  | 568 |   | 
        
           |  |  | 569 | 		CheckUpdate ^update = gcnew CheckUpdate(m_pPackages, m_pImageList);
 | 
        
           |  |  | 570 | 		update->SetDownloader();
 | 
        
           |  |  | 571 | 		update->OnePackage(m_pSelectedPackage);
 | 
        
           |  |  | 572 | 		if ( update->ShowDialog(this) == Windows::Forms::DialogResult::OK )
 | 
        
           |  |  | 573 | 		{
 | 
        
           |  |  | 574 | 			this->DialogResult = Windows::Forms::DialogResult::Yes;
 | 
        
           |  |  | 575 | 			for ( int i = 0; i < update->GetInstallList()->Count; i++ )
 | 
        
           |  |  | 576 | 				cli::safe_cast<MainGui ^>(this->Owner)->InstallPackage(Convert::ToString(update->GetInstallList()[i]), false, false, true);
 | 
        
           |  |  | 577 | 			this->Close();
 | 
        
           |  |  | 578 | 		}
 | 
        
           |  |  | 579 | 	}
 | 
        
           |  |  | 580 |   | 
        
           |  |  | 581 | }
 |