From adc6adf50e0f5e084b3fa86c4b945611a73b21f6 Mon Sep 17 00:00:00 2001 From: Garux Date: Fri, 23 Nov 2018 16:50:27 +0300 Subject: [PATCH] delete duplicate code, enable search in find/replace dialog in selected in component mode --- radiant/brushmanip.cpp | 47 ++++++++++++++---------------------------- radiant/patchmanip.cpp | 9 ++------ radiant/select.cpp | 3 +++ 3 files changed, 20 insertions(+), 39 deletions(-) diff --git a/radiant/brushmanip.cpp b/radiant/brushmanip.cpp index 15cbc3b3..ebbcfd79 100644 --- a/radiant/brushmanip.cpp +++ b/radiant/brushmanip.cpp @@ -688,30 +688,27 @@ void operator()( Face& face ) const { } }; -class FaceFindShader +class FaceSelectByShader { -const char* m_find; +const char* m_name; public: -FaceFindShader( const char* find ) : m_find( find ){ +FaceSelectByShader( const char* name ) + : m_name( name ){ } -void operator()( FaceInstance& faceinst ) const { - if ( shader_equal( faceinst.getFace().GetShader(), m_find ) ) { - faceinst.setSelected( SelectionSystem::eFace, true ); +void operator()( FaceInstance& face ) const { + if ( shader_equal( face.getFace().GetShader(), m_name ) ) { + face.setSelected( SelectionSystem::eFace, true ); } } }; void Scene_BrushFacesSelectByShader( scene::Graph& graph, const char* name ){ - Scene_ForEachBrush_ForEachFaceInstance( graph, FaceFindShader( name ) ); -} - -bool DoingSearch( const char *repl ){ - return ( repl == NULL || ( strcmp( "textures/", repl ) == 0 ) ); + Scene_ForEachBrush_ForEachFaceInstance( graph, FaceSelectByShader( name ) ); } void Scene_BrushFindReplaceShader( scene::Graph& graph, const char* find, const char* replace ){ - if ( DoingSearch( replace ) ) { - Scene_ForEachBrush_ForEachFaceInstance( graph, FaceFindShader( find ) ); + if ( !replace ) { + Scene_ForEachBrush_ForEachFaceInstance( graph, FaceSelectByShader( find ) ); } else { @@ -720,9 +717,9 @@ void Scene_BrushFindReplaceShader( scene::Graph& graph, const char* find, const } void Scene_BrushFindReplaceShader_Selected( scene::Graph& graph, const char* find, const char* replace ){ - if ( DoingSearch( replace ) ) { + if ( !replace ) { Scene_ForEachSelectedBrush_ForEachFaceInstance( graph, - FaceFindShader( find ) ); + FaceSelectByShader( find ) ); } else { @@ -734,8 +731,9 @@ void Scene_BrushFindReplaceShader_Selected( scene::Graph& graph, const char* fin // TODO: find for components // d1223m: dont even know what they are... void Scene_BrushFindReplaceShader_Component_Selected( scene::Graph& graph, const char* find, const char* replace ){ - if ( DoingSearch( replace ) ) { - + if ( !replace ) { + Scene_ForEachSelectedBrush_ForEachFaceInstance( graph, + FaceSelectByShader( find ) ); } else { @@ -897,21 +895,6 @@ void Scene_BrushSelectByShader( scene::Graph& graph, const char* name ){ graph.traverse( BrushSelectByShaderWalker( name ) ); } -class FaceSelectByShader -{ -const char* m_name; -public: -FaceSelectByShader( const char* name ) - : m_name( name ){ -} -void operator()( FaceInstance& face ) const { - printf( "checking %s = %s\n", face.getFace().GetShader(), m_name ); - if ( shader_equal( face.getFace().GetShader(), m_name ) ) { - face.setSelected( SelectionSystem::eFace, true ); - } -} -}; - void Scene_BrushSelectByShader_Component( scene::Graph& graph, const char* name ){ Scene_ForEachSelectedBrush_ForEachFaceInstance( graph, FaceSelectByShader( name ) ); } diff --git a/radiant/patchmanip.cpp b/radiant/patchmanip.cpp index b461be25..93f35462 100644 --- a/radiant/patchmanip.cpp +++ b/radiant/patchmanip.cpp @@ -491,13 +491,8 @@ void operator()( Patch& patch ) const { } }; -namespace{ -bool DoingSearch( const char *repl ){ - return ( repl == NULL || ( strcmp( "textures/", repl ) == 0 ) ); -} -} void Scene_PatchFindReplaceShader( scene::Graph& graph, const char* find, const char* replace ){ - if( DoingSearch( replace ) ){ + if( !replace ){ Scene_forEachVisiblePatchInstance( PatchSelectByShader( find ) ); } else{ @@ -506,7 +501,7 @@ void Scene_PatchFindReplaceShader( scene::Graph& graph, const char* find, const } void Scene_PatchFindReplaceShader_Selected( scene::Graph& graph, const char* find, const char* replace ){ - if( DoingSearch( replace ) ){ + if( !replace ){ //do nothing, because alternative is replacing to notex //perhaps deselect ones with not matching shaders here? } diff --git a/radiant/select.cpp b/radiant/select.cpp index 44bb96a4..de56a251 100644 --- a/radiant/select.cpp +++ b/radiant/select.cpp @@ -705,6 +705,9 @@ void FindReplaceTextures( const char* pFind, const char* pReplace, bool bSelecte command << "textureFindReplace -find " << pFind << " -replace " << pReplace; UndoableCommand undo( command.c_str() ); + if( shader_equal( pReplace, "textures/" ) ) + pReplace = 0; //do search + if ( bSelected ) { if ( GlobalSelectionSystem().Mode() != SelectionSystem::eComponent ) { Scene_BrushFindReplaceShader_Selected( GlobalSceneGraph(), pFind, pReplace );