Be a bit smarter about moving files through a rename.

Don't rely on rebuilding the tree as it collapses all open
directories.  Try and follow the file instead.

Fixes: lp:1852431
* https://bugs.launchpad.net/kicad/+bug/1852431
This commit is contained in:
Jeff Young 2019-11-15 23:58:15 +00:00
parent 1df7b718d9
commit f8aea249df
2 changed files with 29 additions and 11 deletions

View File

@ -292,8 +292,8 @@ wxString TREE_PROJECT_FRAME::GetFileExt( TreeFileType type )
}
bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
wxTreeItemId& aRoot, bool aRecurse )
wxTreeItemId TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName, wxTreeItemId& aRoot,
bool aRecurse )
{
wxTreeItemId cellule;
TreeFileType type = TREE_UNKNOWN;
@ -302,7 +302,7 @@ bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
// Files/dirs names starting by "." are not visible files under unices.
// Skip them also under Windows
if( fn.GetName().StartsWith( wxT( "." ) ) )
return false;
return 0;
if( wxDirExists( aName ) )
{
@ -333,7 +333,7 @@ bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
}
if( !addFile )
return false;
return 0;
// only show the schematic if it is a top level schematic. Eeschema
// cannot open a schematic and display it properly unless it starts
@ -365,7 +365,7 @@ bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
fp = wxFopen( fullFileName, wxT( "rt" ) );
if( fp == NULL )
return false;
return 0;
addFile = false;
@ -385,7 +385,7 @@ bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
fclose( fp );
if( !addFile )
return false; // it is a non-top-level schematic
return 0; // it is a non-top-level schematic
}
}
@ -418,7 +418,7 @@ bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
if( itemData )
{
if( itemData->GetFileName() == aName )
return true; // well, we would have added it, but it is already here!
return kid;
}
kid = m_TreeProject->GetNextChild( aRoot, cookie );
@ -467,7 +467,7 @@ bool TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
m_TreeProject->SortChildren( cellule );
}
return true;
return data->GetId();
}
@ -704,9 +704,27 @@ void TREE_PROJECT_FRAME::OnRenameFile( wxCommandEvent& )
if( tree_data->Rename( buffer, true ) )
{
if( tree_data->GetDir() != oldDir )
ReCreateTreePrj();
{
wxFileName filename( tree_data->GetFileName() );
filename.Normalize();
wxTreeItemId parent = findSubdirTreeItem( filename.GetPath() );
m_TreeProject->SelectItem( tree_data->GetId(), false );
m_TreeProject->Delete( tree_data->GetId() );
wxTreeItemId new_item = AddItemToTreeProject( filename.GetFullPath(), parent, false );
if( new_item )
{
m_TreeProject->SortChildren( parent );
m_TreeProject->ScrollTo( new_item );
m_TreeProject->SelectItem( new_item, true );
}
}
else
{
m_TreeProject->SetItemText( curr_item, buffer );
}
}
}

View File

@ -158,9 +158,9 @@ private:
* @param aRoot = the wxTreeItemId item where to add sub tree items
* @param aRecurse = true to add file or subdir names to the current tree item
* false to stop file add.
* @return true if the file (or directory) is added.
*/
bool AddItemToTreeProject( const wxString& aName, wxTreeItemId& aRoot, bool aRecurse = true );
wxTreeItemId AddItemToTreeProject( const wxString& aName, wxTreeItemId& aRoot,
bool aRecurse = true );
/**
* Function findSubdirTreeItem