Rev 224 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "../StdAfx.h"#include "AddDialog.h"namespace SpkExplorer {void AddDialog::AddFile(System::String ^file, System::String ^dir, int type, int game){SAddFile *af = new SAddFile;af->sFile = _WS(file);if ( dir && dir->Length )af->sDir = _WS(dir);af->iType = type;af->iGame = game;m_lFiles->push_back(af);if ( type == FILETYPE_MOD && !m_bRemove ){if ( !IO::FileInfo(file).Extension->CompareTo(".cat") ){String ^datFile = IO::Path::GetDirectoryName(file) + "\\" + IO::Path::GetFileNameWithoutExtension(file) + ".dat";if ( IO::File::Exists(datFile) ){SAddFile *af = new SAddFile;af->sFile = _WS(datFile);if ( dir && dir->Length )af->sDir = _WS(dir);af->iType = type;af->iGame = game;m_lFiles->push_back(af);}}}}void AddDialog::AddFileList(ArrayList ^list, System::String ^dir, int type, int game){for ( int i = 0; i < list->Count; i++ )this->AddFile(cli::safe_cast<System::String ^>(list[i]), dir, type, game);}void AddDialog::AddFileArray(cli::array<System::String ^> ^list, System::String ^dir, int type, int game){for ( int i = 0; i < list->Length; i++ )this->AddFile(list[i], dir, type, game);}void AddDialog::Background_Finished(System::Object ^Sender, RunWorkerCompletedEventArgs ^E){switch ( m_iStatus ){case ADDSTATUS_READ:if ( m_bRemove )m_iStatus = ADDSTATUS_REMOVE;elsem_iStatus = ADDSTATUS_ADD;m_lFiles->First();this->LabFile->Text = _US(m_lFiles->CurrentData()->sFile);this->progressBar1->Maximum = m_lFiles->size();this->progressBar1->Value = 0;this->backgroundWorker1->RunWorkerAsync();break;case ADDSTATUS_ADD:case ADDSTATUS_REMOVE:if ( !m_lFiles->Next() )m_iStatus = ADDSTATUS_SAVE;else{++this->progressBar1->Value;this->LabFile->Text = _US(m_lFiles->CurrentData()->sFile);}this->backgroundWorker1->RunWorkerAsync();break;case ADDSTATUS_SAVE:this->Close();break;}}void AddDialog::Background_DoWork(System::Object ^Sender, DoWorkEventArgs ^E){System::Threading::Thread::Sleep(5);switch ( m_iStatus ){case ADDSTATUS_READ:if ( m_pMultiPackage )m_pMultiPackage->readAllPackages(SPKREAD_ALL);else if ( m_pPackage )m_pPackage->ReadAllFilesToMemory();break;case ADDSTATUS_ADD:if ( m_lFiles->CurrentData()->iType < 0 && m_pMultiPackage ) // packagem_pMultiPackage->addFileNow(m_lFiles->CurrentData()->sFile, (m_lFiles->CurrentData()->iType == -1) ? true : false);else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 ){m_pPackage->addFileNow(m_lFiles->CurrentData()->sFile, m_lFiles->CurrentData()->sDir, static_cast<FileType>(m_lFiles->CurrentData()->iType));if ( m_pMultiPackage )m_bUpdatedPackage = true;}break;case ADDSTATUS_REMOVE:if ( m_lFiles->CurrentData()->iType < 0 && m_pMultiPackage ) // packagem_pMultiPackage->removeFile(m_lFiles->CurrentData()->sFile);else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 ){m_pPackage->removeFile(m_lFiles->CurrentData()->sFile, static_cast<FileType>(m_lFiles->CurrentData()->iType), m_lFiles->CurrentData()->sDir, m_lFiles->CurrentData()->iGame);if ( m_pMultiPackage )m_bUpdatedPackage = true;}break;case ADDSTATUS_SAVE:if ( m_pMultiPackage ){if ( m_bUpdatedPackage && m_pPackage )m_pMultiPackage->UpdatedPackage(m_pPackage);m_pMultiPackage->writeFile(m_pMultiPackage->filename());}else if ( m_pPackage )m_pPackage->writeFile(m_pPackage->filename());break;}}};