void ExploreFrame::OnReplaceClicked( wxCommandEvent& event ) { const WADArchiveEntry& entry = GetSelectedEntry(); wxFileName entryFN(entry.GetFileName()); wxFileDialog fileDlg(this, wxString::Format(_("Select file to replace %s"), entry.GetFileName()), wxString(), entryFN.GetFullName(), "*." + entryFN.GetExt(), wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST); if (fileDlg.ShowModal() == wxID_OK) { if (entryFN.GetExt().IsSameAs("png", false)) { wxString imgErrors; // Do some sanity checks on the replacement image wxImage replaceImage(fileDlg.GetPath()); if (replaceImage.IsOk()) { if (replaceImage.HasAlpha()) imgErrors += _("- Image may not have an alpha mask\n"); wxMemoryOutputStream oStr; m_archive->Extract(entry, oStr); wxStreamBuffer* buffer = oStr.GetOutputStreamBuffer(); wxMemoryInputStream iStr(buffer->GetBufferStart(), buffer->GetBufferSize()); wxImage orgImage(iStr); if (orgImage.GetSize() != replaceImage.GetSize()) imgErrors += wxString::Format(_("- Image has to be %dx%d in size\n"), orgImage.GetSize().x, orgImage.GetSize().y); if (orgImage.HasMask() != replaceImage.HasMask()) imgErrors += _("- Image must have transparency\n"); } else imgErrors = _("Image could not be loaded"); if (!imgErrors.empty()) { wxMessageDialog msgDlg(this, wxString::Format( _("Image Errors\n\nThe replacement image contains erros which might crash the game\n\n%s\n\nDo you want't to replace anyway?"), imgErrors), _("Warning"), wxICON_WARNING | wxYES_NO | wxNO_DEFAULT); msgDlg.SetYesNoLabels(_("Replace"), _("Don't Replace")); if (msgDlg.ShowModal() != wxID_YES) return; } } size_t index = (size_t) m_fileListCtrl->GetSelection().GetID() - 1; m_archive->ReplaceFiltered(index, fileDlg.GetPath()); static_cast<FileDataModel*>(m_fileListCtrl->GetModel())->RowChanged(index); wxDataViewEvent evt(wxEVT_DATAVIEW_SELECTION_CHANGED); OnFileListSelectionChanged(evt); UpdateTitle(); } }
//---------------------- void simpleXMLparser::getWordValue(std::string& returnWord, const char* attrName) { My_istringstream iStr(this->value(attrName)); iStr.getNextWord(returnWord); exitOnFormatError(iStr.fail()); }
void ExploreFrame::OnFileListSelectionChanged( wxDataViewEvent& event ) { m_menubar->Enable(ID_REPLACE, m_fileListCtrl->GetSelectedItemsCount() > 0 && !m_archive->GetReadOnly()); m_menubar->Enable(ID_EXTRACT, m_fileListCtrl->GetSelectedItemsCount() > 0); m_toolBar->EnableTool(ID_EXTRACT, m_fileListCtrl->GetSelectedItemsCount() > 0); m_menubar->Enable(wxID_DELETE, m_fileListCtrl->GetSelectedItemsCount() > 0 && !m_archive->GetReadOnly()); if (m_fileListCtrl->GetSelectedItemsCount() != 1) return; wxBusyCursor busyCursor; size_t index = (size_t)m_fileListCtrl->GetSelection().GetID() - 1; const WADArchiveEntry& entry = m_archive->GetFilteredEntry(index); m_menubar->Enable(wxID_DELETE, entry.GetStatus() == WADArchiveEntry::Entry_Added); wxLogDebug("Selected: %s", entry.GetFileName()); wxFileName fn(entry.GetFileName(), wxPATH_UNIX); wxString fileExt = fn.GetExt(); if (fileExt.IsSameAs("png", false) || fileExt.IsSameAs("jpg", false)) { m_previewBookCtrl->ChangeSelection(1); ImagePanel* imgPanel = (ImagePanel*) m_previewBookCtrl->GetCurrentPage(); imgPanel->m_previewBitmap->SetBitmap(m_archive->ExtractBitmap(entry)); imgPanel->Layout(); } else if (fileExt.IsSameAs("meta", false)) { m_previewBookCtrl->ChangeSelection(2); // Load texture pack wxMemoryOutputStream oStr; m_archive->Extract(entry, oStr); wxStreamBuffer* buffer = oStr.GetOutputStreamBuffer(); wxMemoryInputStream iStr(buffer->GetBufferStart(), buffer->GetBufferSize()); wxFileName imageFN(entry.GetFileName(), wxPATH_UNIX); imageFN.SetExt("png"); WADArchiveEntry imgEntry = m_archive->GetEntry(imageFN.GetFullPath(wxPATH_UNIX)); TexturePackPanel* texPanel = (TexturePackPanel*)m_previewBookCtrl->GetCurrentPage(); texPanel->LoadTexture(iStr, m_archive->ExtractBitmap(imgEntry)); } else if (fileExt.IsSameAs("fnt", false) || fileExt.IsSameAs("ini", false) || fileExt.IsSameAs("vsh", false) || fileExt.IsSameAs("fsh", false)) { m_previewBookCtrl->ChangeSelection(3); TextPanel* textPanel = (TextPanel*) m_previewBookCtrl->GetCurrentPage(); wxMemoryOutputStream oStr; m_archive->Extract(entry, oStr); wxStreamBuffer* buffer = oStr.GetOutputStreamBuffer(); wxString text((const char*)buffer->GetBufferStart(), buffer->GetBufferSize()); #if !defined(__WXMSW__) text.Replace("\r\n", "\n"); #endif textPanel->m_textCtrl->SetValue(text); } else if (fn.GetName().IsSameAs("hlm2_localization")) { m_previewBookCtrl->ChangeSelection(4); StringTablePanel* stringPanel = (StringTablePanel*) m_previewBookCtrl->GetCurrentPage(); wxMemoryOutputStream oStr; m_archive->Extract(entry, oStr); wxStreamBuffer* buffer = oStr.GetOutputStreamBuffer(); stringPanel->LoadStringTable(buffer->GetBufferStart(), buffer->GetBufferSize()); } else m_previewBookCtrl->ChangeSelection(0); }