Merge pull request #8985 from ChillerDragon/pr_qa_dl

Add quick action "Delete layer"
This commit is contained in:
Dennis Felsing 2024-09-22 14:29:57 +00:00 committed by GitHub
commit 97a84f9cbd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 95 additions and 56 deletions

View file

@ -738,6 +738,54 @@ std::pair<int, int> CEditor::EnvGetSelectedTimeAndValue() const
return std::pair<int, int>{CurrentTime, CurrentValue}; return std::pair<int, int>{CurrentTime, CurrentValue};
} }
void CEditor::SelectNextLayer()
{
int CurrentLayer = 0;
for(const auto &Selected : m_vSelectedLayers)
CurrentLayer = maximum(Selected, CurrentLayer);
SelectLayer(CurrentLayer);
if(m_vSelectedLayers[0] < (int)m_Map.m_vpGroups[m_SelectedGroup]->m_vpLayers.size() - 1)
{
SelectLayer(m_vSelectedLayers[0] + 1);
}
else
{
for(size_t Group = m_SelectedGroup + 1; Group < m_Map.m_vpGroups.size(); Group++)
{
if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty())
{
SelectLayer(0, Group);
break;
}
}
}
}
void CEditor::SelectPreviousLayer()
{
int CurrentLayer = std::numeric_limits<int>::max();
for(const auto &Selected : m_vSelectedLayers)
CurrentLayer = minimum(Selected, CurrentLayer);
SelectLayer(CurrentLayer);
if(m_vSelectedLayers[0] > 0)
{
SelectLayer(m_vSelectedLayers[0] - 1);
}
else
{
for(int Group = m_SelectedGroup - 1; Group >= 0; Group--)
{
if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty())
{
SelectLayer(m_Map.m_vpGroups[Group]->m_vpLayers.size() - 1, Group);
break;
}
}
}
}
bool CEditor::CallbackOpenMap(const char *pFileName, int StorageType, void *pUser) bool CEditor::CallbackOpenMap(const char *pFileName, int StorageType, void *pUser)
{ {
CEditor *pEditor = (CEditor *)pUser; CEditor *pEditor = (CEditor *)pUser;
@ -4195,26 +4243,7 @@ void CEditor::RenderLayers(CUIRect LayersBox)
} }
else else
{ {
int CurrentLayer = 0; SelectNextLayer();
for(const auto &Selected : m_vSelectedLayers)
CurrentLayer = maximum(Selected, CurrentLayer);
SelectLayer(CurrentLayer);
if(m_vSelectedLayers[0] < (int)m_Map.m_vpGroups[m_SelectedGroup]->m_vpLayers.size() - 1)
{
SelectLayer(m_vSelectedLayers[0] + 1);
}
else
{
for(size_t Group = m_SelectedGroup + 1; Group < m_Map.m_vpGroups.size(); Group++)
{
if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty())
{
SelectLayer(0, Group);
break;
}
}
}
} }
s_ScrollToSelectionNext = true; s_ScrollToSelectionNext = true;
} }
@ -4227,27 +4256,9 @@ void CEditor::RenderLayers(CUIRect LayersBox)
} }
else else
{ {
int CurrentLayer = std::numeric_limits<int>::max(); SelectPreviousLayer();
for(const auto &Selected : m_vSelectedLayers)
CurrentLayer = minimum(Selected, CurrentLayer);
SelectLayer(CurrentLayer);
if(m_vSelectedLayers[0] > 0)
{
SelectLayer(m_vSelectedLayers[0] - 1);
}
else
{
for(int Group = m_SelectedGroup - 1; Group >= 0; Group--)
{
if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty())
{
SelectLayer(m_Map.m_vpGroups[Group]->m_vpLayers.size() - 1, Group);
break;
}
}
}
} }
s_ScrollToSelectionNext = true; s_ScrollToSelectionNext = true;
} }

View file

@ -325,6 +325,9 @@ public:
const CMapView *MapView() const { return &m_MapView; } const CMapView *MapView() const { return &m_MapView; }
CLayerSelector *LayerSelector() { return &m_LayerSelector; } CLayerSelector *LayerSelector() { return &m_LayerSelector; }
void SelectNextLayer();
void SelectPreviousLayer();
void FillGameTiles(EGameTileOp FillTile) const; void FillGameTiles(EGameTileOp FillTile) const;
bool CanFillGameTiles() const; bool CanFillGameTiles() const;
void AddQuadOrSound(); void AddQuadOrSound();
@ -332,6 +335,7 @@ public:
void AddTileLayer(); void AddTileLayer();
void AddFrontLayer(); void AddFrontLayer();
void AddQuadsLayer(); void AddQuadsLayer();
void DeleteSelectedLayer();
void LayerSelectImage(); void LayerSelectImage();
bool IsNonGameTileLayerSelected() const; bool IsNonGameTileLayerSelected() const;
void MapDetails(); void MapDetails();

View file

@ -708,23 +708,9 @@ CUi::EPopupMenuFunctionResult CEditor::PopupLayer(void *pContext, CUIRect View,
{ {
CUIRect DeleteButton; CUIRect DeleteButton;
View.HSplitBottom(12.0f, &View, &DeleteButton); View.HSplitBottom(12.0f, &View, &DeleteButton);
static int s_DeleteButton = 0; if(pEditor->DoButton_Editor(&pEditor->m_QuickActionDeleteLayer, pEditor->m_QuickActionDeleteLayer.Label(), 0, &DeleteButton, 0, pEditor->m_QuickActionDeleteLayer.Description()))
if(pEditor->DoButton_Editor(&s_DeleteButton, "Delete layer", 0, &DeleteButton, 0, "Deletes the layer"))
{ {
pEditor->m_EditorHistory.RecordAction(std::make_shared<CEditorActionDeleteLayer>(pEditor, pEditor->m_SelectedGroup, pEditor->m_vSelectedLayers[0])); pEditor->m_QuickActionDeleteLayer.Call();
if(pCurrentLayer == pEditor->m_Map.m_pFrontLayer)
pEditor->m_Map.m_pFrontLayer = nullptr;
if(pCurrentLayer == pEditor->m_Map.m_pTeleLayer)
pEditor->m_Map.m_pTeleLayer = nullptr;
if(pCurrentLayer == pEditor->m_Map.m_pSpeedupLayer)
pEditor->m_Map.m_pSpeedupLayer = nullptr;
if(pCurrentLayer == pEditor->m_Map.m_pSwitchLayer)
pEditor->m_Map.m_pSwitchLayer = nullptr;
if(pCurrentLayer == pEditor->m_Map.m_pTuneLayer)
pEditor->m_Map.m_pTuneLayer = nullptr;
pEditor->m_Map.m_vpGroups[pEditor->m_SelectedGroup]->DeleteLayer(pEditor->m_vSelectedLayers[0]);
return CUi::POPUP_CLOSE_CURRENT; return CUi::POPUP_CLOSE_CURRENT;
} }
} }

View file

@ -135,3 +135,28 @@ void CEditor::MapDetails()
PopupMapInfo); PopupMapInfo);
Ui()->SetActiveItem(nullptr); Ui()->SetActiveItem(nullptr);
} }
void CEditor::DeleteSelectedLayer()
{
std::shared_ptr<CLayer> pCurrentLayer = GetSelectedLayer(0);
if(!pCurrentLayer)
return;
if(m_Map.m_pGameLayer == pCurrentLayer)
return;
m_EditorHistory.RecordAction(std::make_shared<CEditorActionDeleteLayer>(this, m_SelectedGroup, m_vSelectedLayers[0]));
if(pCurrentLayer == m_Map.m_pFrontLayer)
m_Map.m_pFrontLayer = nullptr;
if(pCurrentLayer == m_Map.m_pTeleLayer)
m_Map.m_pTeleLayer = nullptr;
if(pCurrentLayer == m_Map.m_pSpeedupLayer)
m_Map.m_pSpeedupLayer = nullptr;
if(pCurrentLayer == m_Map.m_pSwitchLayer)
m_Map.m_pSwitchLayer = nullptr;
if(pCurrentLayer == m_Map.m_pTuneLayer)
m_Map.m_pTuneLayer = nullptr;
m_Map.m_vpGroups[m_SelectedGroup]->DeleteLayer(m_vSelectedLayers[0]);
SelectPreviousLayer();
}

View file

@ -278,6 +278,19 @@ REGISTER_QUICK_ACTION(
[&]() -> bool { return m_ShowTileInfo == SHOW_TILE_HEXADECIMAL; }, [&]() -> bool { return m_ShowTileInfo == SHOW_TILE_HEXADECIMAL; },
DEFAULT_BTN, DEFAULT_BTN,
"[Ctrl+Shift+I] Show tile information in hexadecimal.") "[Ctrl+Shift+I] Show tile information in hexadecimal.")
REGISTER_QUICK_ACTION(
DeleteLayer,
"Delete layer",
[&]() { DeleteSelectedLayer(); },
[&]() -> bool {
std::shared_ptr<CLayer> pCurrentLayer = GetSelectedLayer(0);
if(!pCurrentLayer)
return true;
return m_Map.m_pGameLayer == pCurrentLayer;
},
ALWAYS_FALSE,
DEFAULT_BTN,
"Deletes the layer.")
REGISTER_QUICK_ACTION( REGISTER_QUICK_ACTION(
Pipette, Pipette,
"Pipette", "Pipette",