Project manager: fix files in nested dir not being added to hierarchy

Fixes #1945 | https://gitlab.com/kicad/code/kicad/issues/1945
This commit is contained in:
Mikołaj Wielgus 2019-12-20 01:34:43 +01:00 committed by Seth Hillbrand
parent 94a9e81a0f
commit c3df984c0b
2 changed files with 21 additions and 7 deletions

View File

@ -290,8 +290,8 @@ wxString TREE_PROJECT_FRAME::GetFileExt( TreeFileType type )
} }
wxTreeItemId TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName, wxTreeItemId TREE_PROJECT_FRAME::AddItemToTreeProject(
wxTreeItemId& aRoot, bool aRecurse ) const wxString& aName, wxTreeItemId& aRoot, bool aCanResetFileWatcher, bool aRecurse )
{ {
wxTreeItemId newItemId; wxTreeItemId newItemId;
TreeFileType type = TREE_UNKNOWN; TreeFileType type = TREE_UNKNOWN;
@ -439,6 +439,10 @@ wxTreeItemId TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
else else
data->SetRootFile( false ); data->SetRootFile( false );
#ifndef __WINDOWS__
bool subdir_populated = false;
#endif
// This section adds dirs and files found in the subdirs // This section adds dirs and files found in the subdirs
// in this case AddFile is recursive, but for the first level only. // in this case AddFile is recursive, but for the first level only.
if( TREE_DIRECTORY == type && aRecurse ) if( TREE_DIRECTORY == type && aRecurse )
@ -450,13 +454,16 @@ wxTreeItemId TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
wxString dir_filename; wxString dir_filename;
data->SetPopulated( true ); data->SetPopulated( true );
#ifndef __WINDOWS__
subdir_populated = aCanResetFileWatcher;
#endif
if( dir.GetFirst( &dir_filename ) ) if( dir.GetFirst( &dir_filename ) )
{ {
do // Add name in tree, but do not recurse do // Add name in tree, but do not recurse
{ {
wxString path = aName + wxFileName::GetPathSeparator() + dir_filename; wxString path = aName + wxFileName::GetPathSeparator() + dir_filename;
AddItemToTreeProject( path, newItemId, false ); AddItemToTreeProject( path, newItemId, false, false );
} while( dir.GetNext( &dir_filename ) ); } while( dir.GetNext( &dir_filename ) );
} }
} }
@ -465,6 +472,11 @@ wxTreeItemId TREE_PROJECT_FRAME::AddItemToTreeProject( const wxString& aName,
m_TreeProject->SortChildren( newItemId ); m_TreeProject->SortChildren( newItemId );
} }
#ifndef __WINDOWS__
if( subdir_populated )
FileWatcherReset();
#endif
return newItemId; return newItemId;
} }
@ -515,7 +527,7 @@ void TREE_PROJECT_FRAME::ReCreateTreePrj()
if( filename != fn.GetFullName() ) if( filename != fn.GetFullName() )
{ {
wxString name = dir.GetName() + wxFileName::GetPathSeparator() + filename; wxString name = dir.GetName() + wxFileName::GetPathSeparator() + filename;
AddItemToTreeProject( name, m_root ); AddItemToTreeProject( name, m_root, false );
} }
cont = dir.GetNext( &filename ); cont = dir.GetNext( &filename );
@ -957,7 +969,7 @@ void TREE_PROJECT_FRAME::OnFileSystemEvent( wxFileSystemWatcherEvent& event )
{ {
case wxFSW_EVENT_CREATE: case wxFSW_EVENT_CREATE:
{ {
wxTreeItemId newitem = AddItemToTreeProject( pathModified.GetFullPath(), root_id, false ); wxTreeItemId newitem = AddItemToTreeProject( pathModified.GetFullPath(), root_id );
// If we are in the process of renaming a file, select the new one // If we are in the process of renaming a file, select the new one
// This is needed for MSW and OSX, since we don't get RENAME events from them, just a // This is needed for MSW and OSX, since we don't get RENAME events from them, just a
@ -1004,7 +1016,7 @@ void TREE_PROJECT_FRAME::OnFileSystemEvent( wxFileSystemWatcherEvent& event )
} }
wxTreeItemId newroot_id = findSubdirTreeItem( newdir ); wxTreeItemId newroot_id = findSubdirTreeItem( newdir );
wxTreeItemId newitem = AddItemToTreeProject( newfn, newroot_id, false ); wxTreeItemId newitem = AddItemToTreeProject( newfn, newroot_id );
// If the item exists, select it // If the item exists, select it
if( newitem.IsOk() ) if( newitem.IsOk() )

View File

@ -157,11 +157,13 @@ private:
* @brief Add the file or directory aName to the project tree * @brief Add the file or directory aName to the project tree
* @param aName = the filename or the directory name to add in tree * @param aName = the filename or the directory name to add in tree
* @param aRoot = the wxTreeItemId item where to add sub tree items * @param aRoot = the wxTreeItemId item where to add sub tree items
* @param aCanResetFileWatcher = true to reset file watcher if additional conditions are met
* @param aRecurse = true to add file or subdir names to the current tree item * @param aRecurse = true to add file or subdir names to the current tree item
* false to stop file add. * false to stop file add.
* @return the Id for the new tree item * @return the Id for the new tree item
*/ */
wxTreeItemId AddItemToTreeProject( const wxString& aName, wxTreeItemId& aRoot, bool aRecurse = true ); wxTreeItemId AddItemToTreeProject( const wxString& aName, wxTreeItemId& aRoot,
bool aCanResetFileWatcher = true, bool aRecurse = true );
/** /**
* Function findSubdirTreeItem * Function findSubdirTreeItem