/* MapLine::stringProperty * Returns the value of the string property matching [key]. Can be * prefixed with 'side1.' or 'side2.' to get string properties from * the front and back sides respectively *******************************************************************/ string MapLine::stringProperty(string key) { if (key.StartsWith("side1.") && side1) return side1->stringProperty(key.Mid(6)); else if (key.StartsWith("side2.") && side2) return side2->stringProperty(key.Mid(6)); else return MapObject::stringProperty(key); }
SToolBarGroup::SToolBarGroup(wxWindow* parent, string name, bool force_name) : wxPanel(parent, -1) { // Init variables this->name = name; // Check if hidden string tb_hidden = toolbars_hidden; if (tb_hidden.Contains(S_FMT("[%s]", name))) hidden = true; else hidden = false; // Set colours SetBackgroundColour(Drawing::getPanelBGColour()); // Create sizer wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); SetSizer(sizer); // Create group label if necessary if (show_toolbar_names || force_name) { string showname = name; if (name.StartsWith("_")) showname.Remove(0, 1); wxStaticText* label = new wxStaticText(this, -1, S_FMT("%s:", showname)); label->SetForegroundColour(Drawing::getMenuTextColour()); sizer->AddSpacer(4); sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL); sizer->AddSpacer(2); } }
DirCreateDeleteUS(bool created, ArchiveTreeNode* dir) { this->created = created; this->archive = dir->getArchive(); this->path = dir->getPath(); cb_tree = NULL; if (path.StartsWith("/")) path.Remove(0, 1); // Backup child entries and subdirs if deleting if (!created) { // Get child entries vector<ArchiveEntry*> entries; for (unsigned a = 0; a < dir->numEntries(); a++) entries.push_back(dir->getEntry(a)); // Get subdirectories vector<ArchiveTreeNode*> subdirs; for (unsigned a = 0; a < dir->nChildren(); a++) subdirs.push_back((ArchiveTreeNode*)dir->getChild(a)); // Backup to clipboard item if (!entries.empty() || !subdirs.empty()) cb_tree = new EntryTreeClipboardItem(entries, subdirs); } }
/* MapLine::intProperty * Returns the value of the integer property matching [key]. Can be * prefixed with 'side1.' or 'side2.' to get int properties from the * front and back sides respectively *******************************************************************/ int MapLine::intProperty(string key) { if (key.StartsWith("side1.") && side1) return side1->intProperty(key.Mid(6)); else if (key.StartsWith("side2.") && side2) return side2->intProperty(key.Mid(6)); else if (key == "v1") return v1Index(); else if (key == "v2") return v2Index(); else if (key == "sidefront") return s1Index(); else if (key == "sideback") return s2Index(); else if (key == "special") return special; else return MapObject::intProperty(key); }
/* MapLine::setStringProperty * Sets the string value of the property [key] to [value]. Can be * prefixed with 'side1.' or 'side2.' to set string properties on the * front and back sides respectively. *******************************************************************/ void MapLine::setStringProperty(string key, string value) { // Front side property if (key.StartsWith("side1.")) { if (side1) return side1->setStringProperty(key.Mid(6), value); } // Back side property else if (key.StartsWith("side2.")) { if (side2) return side2->setStringProperty(key.Mid(6), value); } // Line property else MapObject::setStringProperty(key, value); }
/* TextureXPanel::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool TextureXPanel::handleAction(string id) { // Don't handle if hidden if (!tx_editor->IsShown() || !IsShown()) return false; // Only interested in "txed_" events if (!id.StartsWith("txed_")) return false; // Handle action if (id == "txed_new") newTexture(); else if (id == "txed_delete") removeTexture(); else if (id == "txed_new_patch") newTextureFromPatch(); else if (id == "txed_new_file") newTextureFromFile(); else if (id == "txed_up") moveUp(); else if (id == "txed_down") moveDown(); else if (id == "txed_sort") sort(); else if (id == "txed_copy") copy(); else if (id == "txed_cut") { copy(); removeTexture(); } else if (id == "txed_paste") paste(); else if (id == "txed_export") exportTexture(); else if (id == "txed_extract") extractTexture(); else if (id == "txed_rename") renameTexture(); else if (id == "txed_rename_each") renameTexture(true); else if (id == "txed_offsets") modifyOffsets(); else return false; // Not handled here return true; }
/* TextureEditorPanel::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool TextureEditorPanel::handleAction(string id) { // Don't handle actions if hidden if (!IsShown()) return false; // Only interested in actions beginning with txed_ if (!id.StartsWith("txed_")) return false; // Add Patch if (id == "txed_patch_add") addPatch(); // Remove Patch else if (id == "txed_patch_remove") removePatch(); // Send Patch Back else if (id == "txed_patch_back") patchBack(); // Bring Patch Forward else if (id == "txed_patch_forward") patchForward(); // Replace Patch else if (id == "txed_patch_replace") replacePatch(); // Duplicate Patch else if (id == "txed_patch_duplicate") duplicatePatch(); // Unknown action else return false; // Action was handled return true; }
/* SwitchesEntryPanel::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool SwitchesEntryPanel::handleAction(string id) { // Don't handle actions if hidden if (!isActivePanel()) return false; // We're only interested in "anim_" actions if (!id.StartsWith("swch_")) return false; if (id == "swch_new") { add(); } else if (id == "swch_delete") { remove(); } else if (id == "swch_up") { moveUp(); } else if (id == "swch_down") { moveDown(); } // Unknown action else return false; // Action handled return true; }
/* GfxEntryPanel::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool GfxEntryPanel::handleAction(string id) { // Don't handle actions if hidden if (!isActivePanel()) return false; // We're only interested in "pgfx_" actions if (!id.StartsWith("pgfx_")) return false; // Mirror if (id == "pgfx_mirror") { // Mirror X getImage()->mirror(false); // Update UI gfx_canvas->updateImageTexture(); gfx_canvas->Refresh(); // Update variables image_data_modified = true; setModified(); } // Flip else if (id == "pgfx_flip") { // Mirror Y getImage()->mirror(true); // Update UI gfx_canvas->updateImageTexture(); gfx_canvas->Refresh(); // Update variables image_data_modified = true; setModified(); } // Rotate else if (id == "pgfx_rotate") { // Prompt for rotation angle string angles[] = { "90", "180", "270" }; int choice = wxGetSingleChoiceIndex("Select rotation angle", "Rotate", 3, angles, 0); // Rotate image switch (choice) { case 0: getImage()->rotate(90); break; case 1: getImage()->rotate(180); break; case 2: getImage()->rotate(270); break; default: break; } // Update UI gfx_canvas->updateImageTexture(); gfx_canvas->Refresh(); // Update variables image_data_modified = true; setModified(); } // Translate else if (id == "pgfx_translate") { // Create translation editor dialog Palette8bit* pal = theMainWindow->getPaletteChooser()->getSelectedPalette(); TranslationEditorDialog ted(theMainWindow, pal, " Colour Remap", gfx_canvas->getImage()); // Create translation to edit ted.openTranslation(prev_translation); // Show the dialog if (ted.ShowModal() == wxID_OK) { // Apply translation to image getImage()->applyTranslation(&ted.getTranslation(), pal); // Update UI gfx_canvas->updateImageTexture(); gfx_canvas->Refresh(); // Update variables image_data_modified = true; gfx_canvas->updateImageTexture(); setModified(); prev_translation.copy(ted.getTranslation()); } } // Colourise else if (id == "pgfx_colourise") { Palette8bit* pal = theMainWindow->getPaletteChooser()->getSelectedPalette(); GfxColouriseDialog gcd(theMainWindow, entry, pal); gcd.setColour(last_colour); // Show colourise dialog if (gcd.ShowModal() == wxID_OK) { // Colourise image getImage()->colourise(gcd.getColour(), pal); // Update UI gfx_canvas->updateImageTexture(); gfx_canvas->Refresh(); // Update variables image_data_modified = true; Refresh(); setModified(); } rgba_t gcdcol = gcd.getColour(); last_colour = S_FMT("RGB(%d, %d, %d)", gcdcol.r, gcdcol.g, gcdcol.b); } // Tint else if (id == "pgfx_tint") { Palette8bit* pal = theMainWindow->getPaletteChooser()->getSelectedPalette(); GfxTintDialog gtd(theMainWindow, entry, pal); gtd.setValues(last_tint_colour, last_tint_amount); // Show tint dialog if (gtd.ShowModal() == wxID_OK) { // Tint image getImage()->tint(gtd.getColour(), gtd.getAmount(), pal); // Update UI gfx_canvas->updateImageTexture(); gfx_canvas->Refresh(); // Update variables image_data_modified = true; Refresh(); setModified(); } rgba_t gtdcol = gtd.getColour(); last_tint_colour = S_FMT("RGB(%d, %d, %d)", gtdcol.r, gtdcol.g, gtdcol.b); last_tint_amount = (int)(gtd.getAmount() * 100.0); } // Crop else if (id == "pgfx_crop") { Palette8bit* pal = theMainWindow->getPaletteChooser()->getSelectedPalette(); GfxCropDialog gcd(theMainWindow, entry, pal); // Show crop dialog if (gcd.ShowModal() == wxID_OK) { // stuff } } // alPh/tRNS else if (id == "pgfx_alph" || id == "pgfx_trns") { setModified(); Refresh(); } // Optimize PNG else if (id == "pgfx_pngopt") { // This is a special case. If we set the entry as modified, SLADE will prompt // to save it, rewriting the entry and cancelling the optimization done... if (EntryOperations::optimizePNG(entry)) setModified(false); else wxMessageBox("Warning: Couldn't optimize this image, check console log for info", "Warning", wxOK|wxCENTRE|wxICON_WARNING); Refresh(); } // Extract all else if (id == "pgfx_extract") { extractAll(); } // Convert else if (id == "pgfx_convert") { GfxConvDialog gcd(theMainWindow); gcd.CenterOnParent(); gcd.openEntry(entry); gcd.ShowModal(); if (gcd.itemModified(0)) { // Get image and conversion info SImage* image = gcd.getItemImage(0); SIFormat* format = gcd.getItemFormat(0); // Write converted image back to entry format->saveImage(*image, entry_data, gcd.getItemPalette(0)); // This makes the "save" button (and the setModified stuff) redundant and confusing! // The alternative is to save to entry effectively (uncomment the importMemChunk line) // but remove the setModified and image_data_modified lines, and add a call to refresh // to get the PNG tRNS status back in sync. //entry->importMemChunk(entry_data); image_data_modified = true; setModified(); // Fix tRNS status if we converted to paletted PNG int MENU_GFXEP_PNGOPT = theApp->getAction("pgfx_pngopt")->getWxId(); int MENU_GFXEP_ALPH = theApp->getAction("pgfx_alph")->getWxId(); int MENU_GFXEP_TRNS = theApp->getAction("pgfx_trns")->getWxId(); int MENU_ARCHGFX_EXPORTPNG = theApp->getAction("arch_gfx_exportpng")->getWxId(); if (format->getName() == "PNG") { ArchiveEntry temp; temp.importMemChunk(entry_data); temp.setType(EntryType::getType("png")); menu_custom->Enable(MENU_GFXEP_ALPH, true); menu_custom->Enable(MENU_GFXEP_TRNS, true); menu_custom->Check(MENU_GFXEP_TRNS, EntryOperations::gettRNSChunk(&temp)); menu_custom->Enable(MENU_ARCHGFX_EXPORTPNG, false); menu_custom->Enable(MENU_GFXEP_PNGOPT, true); toolbar->enableGroup("PNG", true); } else { menu_custom->Enable(MENU_GFXEP_ALPH, false); menu_custom->Enable(MENU_GFXEP_TRNS, false); menu_custom->Enable(MENU_ARCHGFX_EXPORTPNG, true); menu_custom->Enable(MENU_GFXEP_PNGOPT, false); toolbar->enableGroup("PNG", false); } // Refresh getImage()->open(entry_data, 0, format->getId()); gfx_canvas->Refresh(); } } // Unknown action else return false; // Action handled return true; }
/* MainWindow::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool MainWindow::handleAction(string id) { // We're only interested in "main_" actions if (!id.StartsWith("main_")) return false; // File->Exit if (id == "main_exit") { Close(); return true; } // Edit->Undo if (id == "main_undo") { panel_archivemanager->undo(); return true; } // Edit->Redo if (id == "main_redo") { panel_archivemanager->redo(); return true; } // Edit->Set Base Resource Archive if (id == "main_setbra") { wxDialog dialog_ebr(this, -1, "Edit Base Resource Archives", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER); BaseResourceArchivesPanel brap(&dialog_ebr); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(&brap, 1, wxEXPAND|wxALL, 4); sizer->Add(dialog_ebr.CreateButtonSizer(wxOK|wxCANCEL), 0, wxEXPAND|wxLEFT|wxRIGHT|wxDOWN, 4); dialog_ebr.SetSizer(sizer); dialog_ebr.Layout(); dialog_ebr.SetInitialSize(wxSize(500, 300)); dialog_ebr.CenterOnParent(); if (dialog_ebr.ShowModal() == wxID_OK) theArchiveManager->openBaseResource(brap.getSelectedPath()); return true; } // Edit->Preferences if (id == "main_preferences") { PreferencesDialog::openPreferences(this); return true; } // View->Archive Manager if (id == "main_showam") { wxAuiManager *m_mgr = wxAuiManager::GetManager(panel_archivemanager); wxAuiPaneInfo& p_inf = m_mgr->GetPane("archive_manager"); p_inf.Show(!p_inf.IsShown()); m_mgr->Update(); return true; } // View->Console if (id == "main_showconsole") { wxAuiManager *m_mgr = wxAuiManager::GetManager(panel_archivemanager); wxAuiPaneInfo& p_inf = m_mgr->GetPane("console"); p_inf.Show(!p_inf.IsShown()); p_inf.MinSize(200, 128); m_mgr->Update(); return true; } // View->Undo History if (id == "main_showundohistory") { wxAuiManager *m_mgr = wxAuiManager::GetManager(panel_archivemanager); wxAuiPaneInfo& p_inf = m_mgr->GetPane("undo_history"); p_inf.Show(!p_inf.IsShown()); m_mgr->Update(); return true; } // Help->About if (id == "main_about") { wxAboutDialogInfo info; info.SetName("SLADE"); info.SetVersion("v" + Global::version); info.SetWebSite("http://slade.mancubus.net"); info.SetDescription("It's a Doom Editor"); // Set icon string icon_filename = appPath("slade.ico", DIR_TEMP); theArchiveManager->programResourceArchive()->getEntry("slade.ico")->exportFile(icon_filename); info.SetIcon(wxIcon(icon_filename, wxBITMAP_TYPE_ICO)); wxRemoveFile(icon_filename); string year = wxNow().Right(4); info.SetCopyright(S_FMT("(C) 2008-%s Simon Judd <*****@*****.**>", year.c_str())); wxAboutBox(info); return true; } // Help->Online Documentation if (id == "main_onlinedocs") { wxLaunchDefaultBrowser("http://slade-editor.wikia.com"); return true; } // Unknown action return false; }
/* PaletteEntryPanel::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool PaletteEntryPanel::handleAction(string id) { // Ignore if hidden if (!isActivePanel()) return false; // Only interested in "ppal_" events if (!id.StartsWith("ppal_")) return false; // Add to custom palettes if (id == "ppal_addcustom") { addCustomPalette(); return true; } // Test palette else if (id == "ppal_test") { testPalette(); return true; } // Export As else if (id == "ppal_exportas") { exportAs(); return true; } // Import From else if (id == "ppal_importfrom") { importFrom(); return true; } // Generate Palettes if (id == "ppal_generate") { generatePalettes(); return true; } // Generate Colormaps if (id == "ppal_colormap") { generateColormaps(); return true; } // Colourise else if (id == "ppal_colourise") { colourise(); return true; } // Tint else if (id == "ppal_tint") { tint(); return true; } // Tweak else if (id == "ppal_tweak") { tweak(); return true; } // Invert else if (id == "ppal_invert") { invert(); return true; } // Move Up else if (id == "ppal_moveup") { move(true); return true; } // Move Down else if (id == "ppal_movedown") { move(false); return true; } // Duplicate else if (id == "ppal_duplicate") { duplicate(); return true; } // Remove else if (id == "ppal_remove") { clearOne(); return true; } // Remove Others else if (id == "ppal_removeothers") { clearOthers(); return true; } // Some debug/reverse engineering stuff else if (id == "ppal_report") { analysePalettes(); return true; } return false; }
// ---------------------------------------------------------------------------- // ArchiveEntryList::handleAction // // Handles the action [id]. // Returns true if the action was handled, false otherwise // ---------------------------------------------------------------------------- bool ArchiveEntryList::handleAction(string id) { // Don't handle action if hidden if (!IsShown()) return false; // Only interested in actions beginning with aelt_ if (!id.StartsWith("aelt_")) return false; if (id == "aelt_sizecol") { elist_colsize_show = !elist_colsize_show; setupColumns(); updateWidth(); updateList(); if (GetParent()) GetParent()->Layout(); } else if (id == "aelt_typecol") { elist_coltype_show = !elist_coltype_show; setupColumns(); updateWidth(); updateList(); if (GetParent()) GetParent()->Layout(); } else if (id == "aelt_indexcol") { elist_colindex_show = !elist_colindex_show; setupColumns(); updateWidth(); updateList(); if (GetParent()) GetParent()->Layout(); } else if (id == "aelt_hrules") { elist_hrules = !elist_hrules; SetSingleStyle(wxLC_HRULES, elist_hrules); Refresh(); } else if (id == "aelt_vrules") { elist_vrules = !elist_vrules; SetSingleStyle(wxLC_VRULES, elist_vrules); Refresh(); } else if (id == "aelt_bgcolour") { elist_type_bgcol = !elist_type_bgcol; Refresh(); } else if (id == "aelt_bgalt") { elist_alt_row_colour = !elist_alt_row_colour; Refresh(); } // Unknown action else return false; // Action handled, return true return true; }
/* MapLine::setIntProperty * Sets the integer value of the property [key] to [value]. Can be * prefixed with 'side1.' or 'side2.' to set int properties on the * front and back sides respectively. *******************************************************************/ void MapLine::setIntProperty(string key, int value) { MapVertex* vertex; // Front side property if (key.StartsWith("side1.")) { if (side1) return side1->setIntProperty(key.Mid(6), value); } // Back side property else if (key.StartsWith("side2.")) { if (side2) return side2->setIntProperty(key.Mid(6), value); } // Vertices else if (key == "v1") { if ((vertex = parent_map->getVertex(value))) { vertex1->disconnectLine(this); vertex1 = vertex; vertex1->connectLine(this); resetInternals(); } } else if (key == "v2") { if ((vertex = parent_map->getVertex(value))) { vertex2->disconnectLine(this); vertex2 = vertex; vertex2->connectLine(this); resetInternals(); } } // Sides else if (key == "sidefront") { if ((side1 = parent_map->getSide(value))) side1->parent = this; } else if (key == "sideback") { if ((side2 = parent_map->getSide(value))) side2->parent = this; } // Special else if (key == "special") { special = value; setModified(); } // Line property else MapObject::setIntProperty(key, value); }