/** Item double clicked: Toggle visibility or edit the layer */ void LayersEditorPanel::OnlayersListItemActivated(wxListEvent& event) { //Get selected layer Layer * selectedLayer = GetSelectedLayer(); if ( !selectedLayer ) return; //Get selected column wxPoint click_point = ::wxGetMousePosition(); wxPoint list_point = m_layersList->GetScreenPosition(); // delta x int dx = click_point.x - list_point.x; // work out the column int ex = 0; // cumulative sum of column widths int column = -1; for (column = 0; column < m_layersList->GetColumnCount(); column++) { ex += m_layersList->GetColumnWidth(column); if (ex > dx) break; } if ( column == 1 ) { selectedLayer->SetVisibility(!selectedLayer->GetVisibility()); Refresh(); return; } else { EditSelectedLayer(); } }
/** Item focused: Update the current layer */ void LayersEditorPanel::OnlayersListItemFocused(wxListEvent& event) { //Get selected layer Layer * layer = GetSelectedLayer(); if ( !layer ) return; if ( m_layoutCanvas ) m_layoutCanvas->SetCurrentLayer(layer->GetName()); UpdateSelectedLayerIcon(); }
void LayersEditorPanel::EditSelectedLayer() { //Get selected layer gd::Layer * layer = GetSelectedLayer(); if ( !layer ) return; gd::String oldName = layer->GetName(); layer->EditLayer(); //Be sure to update instances if the layer name has changed. if ( layer->GetName() != oldName ) { m_layout.GetInitialInstances().MoveInstancesToLayer(oldName, layer->GetName()); if ( m_layoutCanvas && m_layoutCanvas->GetCurrentLayer() == oldName ) m_layoutCanvas->SetCurrentLayer(layer->GetName()); } Refresh(); }
int32 STileLayerList::GetSelectionIndex() const { int32 SelectionIndex = INDEX_NONE; if (UPaperTileMap* TileMap = TileMapPtr.Get()) { if (UPaperTileLayer* SelectedLayer = GetSelectedLayer()) { TileMap->TileLayers.Find(SelectedLayer, /*out*/ SelectionIndex); } else { SelectionIndex = TileMap->TileLayers.Num() - 1; } } return SelectionIndex; }
void LayersEditorPanel::OnDeleteLayerClicked(wxCommandEvent& event) { //Get selected layer Layer * selectedLayer = GetSelectedLayer(); if ( !selectedLayer || selectedLayer->GetName().empty() ) return; gd::String name = selectedLayer->GetName(); for (std::size_t i = 0;i<m_layout.GetLayersCount();++i) { if ( &m_layout.GetLayer(i) == selectedLayer ) { //Ask the user what he wants to do with the existing instances. if ( m_layout.GetInitialInstances().SomeInstancesAreOnLayer(name) ) { std::vector<gd::String> availableLayers; for (std::size_t j = 0;j<m_layout.GetLayersCount();++j) { if (i!=j) availableLayers.push_back(m_layout.GetLayer(j).GetName()); } ObjectsOnBadLayerDialog dialog(this, availableLayers); int choice = dialog.ShowModal(); if ( choice == 0 ) return; //Cancel else if ( choice == 1 ) m_layout.GetInitialInstances().RemoveAllInstancesOnLayer(name); else if ( choice == 2 ) m_layout.GetInitialInstances().MoveInstancesToLayer(name, dialog.moveOnLayerNamed); } //Delete the layer and select base layer m_layout.RemoveLayer(name); if ( m_layoutCanvas ) { m_layoutCanvas->SetCurrentLayer(""); } Refresh(); return; } } gd::LogWarning(_("Can't find the layer to delete !")); }
void LayersEditorPanel::OnLayerUpClicked(wxCommandEvent& event) { //Get selected layer Layer * selectedLayer = GetSelectedLayer(); if ( !selectedLayer ) return; for (std::size_t i = 0;i<m_layout.GetLayersCount();++i) { if ( &m_layout.GetLayer(i) == selectedLayer ) { if ( i <= m_layout.GetLayersCount()-1-1 ) { //Move the layer m_layout.SwapLayers(i,i+1); Refresh(); //Focus it again m_layersList->SetItemState(m_layout.GetLayersCount()-i-1-1, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } return; } } gd::LogWarning(_("Can't find the layer to move !")); }
void LayersEditorPanel::OnDownSelected(wxCommandEvent& event) { //Get selected layer Layer * selectedLayer = GetSelectedLayer(); if ( !selectedLayer ) return; for (unsigned int i = 0;i<layout.GetLayersCount();++i) { if ( &layout.GetLayer(i) == selectedLayer ) { if ( i >= 1 ) { //Move the layer layout.SwapLayers(i,i-1); Refresh(); //Focus it again layersList->SetItemState(layout.GetLayersCount()-i, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } return; } } gd::LogWarning(_("Can't find the layer to move !")); }