/* 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; }
/* TextureXPanel::onBtnNewTextureFromFile * Called when the 'New Texture from File' button is clicked *******************************************************************/ void TextureXPanel::onBtnNewTextureFromFile(wxCommandEvent& e) { newTextureFromFile(); }
/* TextureXPanel::onTextureListKeyDown * Called when a key is pressed in the texture list *******************************************************************/ void TextureXPanel::onTextureListKeyDown(wxKeyEvent& e) { // Check if keypress matches any keybinds wxArrayString binds = KeyBind::getBinds(KeyBind::asKeyPress(e.GetKeyCode(), e.GetModifiers())); // Go through matching binds for (unsigned a = 0; a < binds.size(); a++) { string name = binds[a]; // Copy if (name == "copy") { copy(); return; } // Cut else if (name == "cut") { copy(); removeTexture(); return; } // Paste else if (name == "paste") { paste(); return; } // Move texture up else if (name == "txed_tex_up") { moveUp(); return; } // Move texture down else if (name == "txed_tex_down") { moveDown(); return; } // New texture else if (name == "txed_tex_new") { newTexture(); return; } // New texture from patch else if (name == "txed_tex_new_patch") { newTextureFromPatch(); return; } // New texture from file else if (name == "txed_tex_new_file") { newTextureFromFile(); return; } // Delete texture else if (name == "txed_tex_delete") { removeTexture(); return; } } // Not handled here, send off to be handled by a parent window e.Skip(); }
// ----------------------------------------------------------------------------- // TextureXPanel class constructor // ----------------------------------------------------------------------------- TextureXPanel::TextureXPanel(wxWindow* parent, TextureXEditor& tx_editor) : wxPanel{ parent, -1 }, tx_editor_{ &tx_editor }, undo_manager_{ tx_editor.getUndoManager() } { // Setup sizer wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); SetSizer(sizer); // Add textures list wxStaticBox* frame = new wxStaticBox(this, -1, "Textures"); wxStaticBoxSizer* framesizer = new wxStaticBoxSizer(frame, wxVERTICAL); wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL); label_tx_format_ = new wxStaticText(this, -1, "Format:"); hbox->Add(label_tx_format_, 0, wxALIGN_BOTTOM | wxRIGHT, UI::pad()); btn_save_ = new SIconButton(this, "save", "Save"); hbox->AddStretchSpacer(); hbox->Add(btn_save_, 0, wxEXPAND); framesizer->Add(hbox, 0, wxEXPAND | wxLEFT | wxRIGHT, UI::pad()); list_textures_ = new TextureXListView(this, &texturex_); framesizer->Add(list_textures_, 1, wxEXPAND | wxALL, UI::pad()); sizer->Add(framesizer, 0, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, UI::pad()); // Texture list filter text_filter_ = new wxTextCtrl(this, -1); btn_clear_filter_ = new SIconButton(this, "close", "Clear Filter"); WxUtils::layoutHorizontally( framesizer, vector<wxObject*>{ WxUtils::createLabelHBox(this, "Filter:", text_filter_), btn_clear_filter_ }, wxSizerFlags(0).Expand().Border(wxLEFT | wxRIGHT | wxBOTTOM, UI::pad()), 0); // Add texture operations buttons wxGridBagSizer* gbsizer = new wxGridBagSizer(UI::pad(), UI::pad()); framesizer->Add(gbsizer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, UI::pad()); btn_move_up_ = new SIconButton(this, "up", "Move Up"); btn_move_down_ = new SIconButton(this, "down", "Move Down"); btn_new_texture_ = new SIconButton(this, "tex_new", "New"); btn_remove_texture_ = new SIconButton(this, "tex_delete", "Remove"); btn_new_from_patch_ = new SIconButton(this, "tex_newpatch", "New from Patch"); btn_new_from_file_ = new SIconButton(this, "tex_newfile", "New from File"); gbsizer->Add(btn_new_texture_, { 0, 0 }, { 1, 1 }); gbsizer->Add(btn_new_from_patch_, { 0, 1 }, { 1, 1 }); gbsizer->Add(btn_new_from_file_, { 0, 2 }, { 1, 1 }); gbsizer->Add(btn_remove_texture_, { 0, 3 }, { 1, 1 }); gbsizer->Add(btn_move_up_, { 0, 4 }, { 1, 1 }); gbsizer->Add(btn_move_down_, { 0, 5 }, { 1, 1 }); // Bind events list_textures_->Bind(wxEVT_LIST_ITEM_SELECTED, &TextureXPanel::onTextureListSelect, this); list_textures_->Bind(wxEVT_LIST_ITEM_RIGHT_CLICK, &TextureXPanel::onTextureListRightClick, this); list_textures_->Bind(wxEVT_KEY_DOWN, &TextureXPanel::onTextureListKeyDown, this); btn_new_texture_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { newTexture(); }); btn_new_from_patch_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { newTextureFromPatch(); }); btn_new_from_file_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { newTextureFromFile(); }); btn_remove_texture_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { removeTexture(); }); btn_move_up_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { moveUp(); }); btn_move_down_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { moveDown(); }); btn_save_->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) { tx_editor_->saveChanges(); }); Bind(wxEVT_SHOW, [&](wxShowEvent&) { tx_editor_->updateMenuStatus(); }); text_filter_->Bind(wxEVT_TEXT, &TextureXPanel::onTextFilterChanged, this); btn_clear_filter_->Bind(wxEVT_BUTTON, &TextureXPanel::onBtnClearFitler, this); }