Rev 226 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "../StdAfx.h"#include "InstallPackageDialog.h"#undef GetTempPath#undef GetCurrentDirectorynamespace PluginManager {InstallPackageDialog::InstallPackageDialog(CPackages *p) : m_pPackages(p){InitializeComponent();this->UpdatePackages();}void InstallPackageDialog::UpdatePackages(){ListPackages->Items->Clear();ListPackages->Groups->Clear();ListPackages->SmallImageList = gcnew ImageList();ListPackages->LargeImageList = ListPackages->SmallImageList;int count = 0;for ( CListNode<CBaseFile> *node = m_pPackages->GetInstallPackageList()->Front(); node; node = node->next() ){CBaseFile *p = node->Data();ListViewItem ^item = gcnew ListViewItem(_US(p->name(m_pPackages->GetLanguage())));item->SubItems->Add(_US(p->author()));item->SubItems->Add(_US(p->version()));switch ( p->GetLoadError() ){case INSTALLCHECK_OLDVERSION:item->SubItems->Add("Newer version installed");break;case INSTALLCHECK_WRONGGAME:item->SubItems->Add("For Wrong Game");break;case INSTALLCHECK_WRONGVERSION:item->SubItems->Add("For Wrong Game Version");break;}ListPackages->Items->Add(item);item->Tag = _US(Utils::WString::Number(count));++count;if ( p->icon() ){//extract iconC_File *f = p->icon();f->setFullDir(_WS(System::IO::Path::GetTempPath()));if ( f->UncompressData() )f->writeFilePointer();PluginManager::DisplayListIcon(p, ListPackages, item);}C_File *gf = p->GetFirstFile(FILETYPE_ADVERT);if ( gf ){gf->setFullDir(_WS(System::IO::Path::GetTempPath()));if ( gf->UncompressData() )gf->writeFilePointer();}if ( count == 1 )item->Selected = true;item->Checked = (p->GetLoadError()) ? false : true;// select one with an error if there is anyif ( p->GetLoadError() )item->Selected = true;updateUI();}if ( ListPackages->Items->Count == 1 ){//this->GroupList->Hide();//this->Height = 250;this->DisplayPackage(m_pPackages->GetInstallPackageList()->Get(0));}}void InstallPackageDialog::DisplayPackage(CBaseFile *p){TextInstall->Hide();this->PanelRating->Hide();PicEase1->Hide();PicEase2->Hide();PicEase3->Hide();PicEase4->Hide();PicEase5->Hide();PicChange1->Hide();PicChange2->Hide();PicChange3->Hide();PicChange4->Hide();PicChange5->Hide();PicRec1->Hide();PicRec2->Hide();PicRec3->Hide();PicRec4->Hide();PicRec5->Hide();this->LabError->Text = "";if ( p ){this->GroupPackage->Text = _US(p->getFullPackageName(m_pPackages->GetLanguage(), false));this->TextDesc->Text = _US(p->description().findReplace(L"<br>", L"\n").stripHtml());// update graphicbool addedIcon = false;C_File *picFile = p->GetFirstFile(FILETYPE_ADVERT);if ( picFile ){System::String ^pic = _US(picFile->filePointer());if ( System::IO::File::Exists(pic) ){try {Bitmap ^myBitmap = gcnew Bitmap(pic);if ( myBitmap ){this->PictureDisplay->Image = dynamic_cast<Image ^>(myBitmap);addedIcon = true;}}catch (System::ArgumentException ^E) {}}}if ( !addedIcon ){System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(InstallPackageDialog::typeid));System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^ >(resources->GetObject(L"$this.Icon")));this->PictureDisplay->Image = icon->ToBitmap();}if ( !p->installText(m_pPackages->GetLanguage(), true).empty() ){this->TextInstall->Text = _US(p->installText(m_pPackages->GetLanguage(), true).stripHtml());this->TextInstall->Show();}this->LabDate->Text = _US(p->creationDate());this->LabVersion->Text = _US(p->version());if ( p->GetType() == TYPE_SPK ){this->LabType->Text = _US(((CSpkFile *)p)->scriptTypeString(m_pPackages->GetLanguage()));switch ( p->pluginType() ) {case PLUGIN_NORMAL: this->LabPluginType->Text = "Normal"; break;case PLUGIN_STABLE: this->LabPluginType->Text = "Stable"; break;case PLUGIN_EXPERIMENTAL: this->LabPluginType->Text = "Experimental"; break;case PLUGIN_CHEAT: this->LabPluginType->Text = "Cheat"; break;case PLUGIN_MOD: this->LabPluginType->Text = "Mod"; break;}}else if ( p->GetType() == TYPE_XSP ){this->LabType->Text = "Ship";this->LabPluginType->Text = "Ship";}else{this->LabType->Text = "Other";this->LabPluginType->Text = "Other";}if ( p->AnyGameCompatability() )this->LabGames->Text = _US(m_pPackages->getGameTypesString(p, true));elsethis->LabGames->Text = "All Games";if ( p->gameChanging() >= 1 || p->recommended() >= 1 || p->easeOfUse() >= 1 ){this->PanelRating->Show();// ease of use ratingif ( p->easeOfUse() >= 1 )PicEase1->Show();if ( p->easeOfUse() >= 2 )PicEase2->Show();if ( p->easeOfUse() >= 3 )PicEase3->Show();if ( p->easeOfUse() >= 4 )PicEase4->Show();if ( p->easeOfUse() >= 5 )PicEase5->Show();// game changing ratingif ( p->gameChanging() >= 1 )PicChange1->Show();if ( p->gameChanging() >= 2 )PicChange2->Show();if ( p->gameChanging() >= 3 )PicChange3->Show();if ( p->gameChanging() >= 4 )PicChange4->Show();if ( p->gameChanging() >= 5 )PicChange5->Show();// Recommanded ratingif ( p->recommended() >= 1 )PicRec1->Show();if ( p->recommended() >= 2 )PicRec2->Show();if ( p->recommended() >= 3 )PicRec3->Show();if ( p->recommended() >= 4 )PicRec4->Show();if ( p->recommended() >= 5 )PicRec5->Show();}switch ( p->GetLoadError() ){case INSTALLCHECK_OLDVERSION:{CBaseFile *oldPackage = m_pPackages->findPackage(p);if ( oldPackage )this->LabError->Text = "Newer version already installed: V" + _US(oldPackage->version()) + " - " + _US(oldPackage->creationDate());elsethis->LabError->Text = "Newer version already installed";}break;case INSTALLCHECK_WRONGGAME:this->LabError->Text = "For Wrong Game, Requires: " + _US(m_pPackages->getGameTypesString(p, false));break;case INSTALLCHECK_WRONGVERSION:this->LabError->Text = "For Wrong Game Version, Requires: " + _US(m_pPackages->getGameVersionString(p));break;}}else{this->LabType->Text = "";this->GroupPackage->Text = "";this->TextDesc->Text = "";this->PictureDisplay->Image = nullptr;}}void InstallPackageDialog::DoClose(){// remove any packages that are not selected// if only 1 package, we cant select the check box, so always checkedif ( ListPackages->Items->Count > 1 ){CLinkList<CBaseFile> removePackages;for ( int i = ListPackages->Items->Count - 1; i >= 0; i-- ){ListViewItem ^item = ListPackages->Items[i];if ( !item->Checked ){int num = Convert::ToInt32(item->Tag);removePackages.push_back(m_pPackages->GetInstallPackageList()->Get(num));}}for ( CBaseFile *p = removePackages.First(); p; p = removePackages.Next() )m_pPackages->RemovePreparedInstall(p);removePackages.MemoryClear();}m_pPackages->CheckPreparedInstallRequired(NULL);this->Close();}void InstallPackageDialog::updateUI(){bool anyChecked = false;for ( int i = 0; i < ListPackages->Items->Count; i++ ) {if ( ListPackages->Items[i]->Checked ) {anyChecked = true;break;}}this->ButInstall->Enabled = anyChecked;}}