예제 #1
0
/** 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();
    }
}
예제 #2
0
/** 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();
}
예제 #3
0
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();
}
예제 #4
0
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;
}
예제 #5
0
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 !"));
}
예제 #6
0
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  !"));
}
예제 #7
0
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  !"));
}