Make sure we have list of projects when responding to filewatcher.

Fixes https://gitlab.com/kicad/code/kicad/issues/6583
This commit is contained in:
Jeff Young 2021-01-07 20:53:28 +00:00
parent bf332b3189
commit af2745af26
2 changed files with 22 additions and 10 deletions

View File

@ -304,7 +304,7 @@ std::vector<wxString> getProjects( const wxDir& dir )
wxTreeItemId PROJECT_TREE_PANE::addItemToProjectTree( const wxString& aName,
const wxTreeItemId& aRoot,
const wxTreeItemId& aParent,
std::vector<wxString>* aProjectNames,
bool aRecurse )
{
@ -378,13 +378,25 @@ wxTreeItemId PROJECT_TREE_PANE::addItemToProjectTree( const wxString& aName,
if( currfile.GetExt() == GetFileExt( TREE_FILE_TYPE::LEGACY_SCHEMATIC )
|| currfile.GetExt() == GetFileExt( TREE_FILE_TYPE::SEXPR_SCHEMATIC ) )
{
if( aProjectNames && !alg::contains( *aProjectNames, currfile.GetName() ) )
return wxTreeItemId();
if( aProjectNames )
{
if( !alg::contains( *aProjectNames, currfile.GetName() ) )
return wxTreeItemId();
}
else
{
PROJECT_TREE_ITEM* parentTreeItem = GetItemIdData( aParent );
wxDir parentDir( parentTreeItem->GetDir() );
std::vector<wxString> projects = getProjects( parentDir );
if( !alg::contains( projects, currfile.GetName() ) )
return wxTreeItemId();
}
}
// also check to see if it is already there.
wxTreeItemIdValue cookie;
wxTreeItemId kid = m_TreeProject->GetFirstChild( aRoot, cookie );
wxTreeItemId kid = m_TreeProject->GetFirstChild( aParent, cookie );
while( kid.IsOk() )
{
@ -393,14 +405,14 @@ wxTreeItemId PROJECT_TREE_PANE::addItemToProjectTree( const wxString& aName,
if( itemData && itemData->GetFileName() == aName )
return itemData->GetId(); // well, we would have added it, but it is already here!
kid = m_TreeProject->GetNextChild( aRoot, cookie );
kid = m_TreeProject->GetNextChild( aParent, cookie );
}
// Only show current files if both legacy and current files are present
if( type == TREE_FILE_TYPE::LEGACY_PROJECT || type == TREE_FILE_TYPE::JSON_PROJECT
|| type == TREE_FILE_TYPE::LEGACY_SCHEMATIC || type == TREE_FILE_TYPE::SEXPR_SCHEMATIC )
{
kid = m_TreeProject->GetFirstChild( aRoot, cookie );
kid = m_TreeProject->GetFirstChild( aParent, cookie );
while( kid.IsOk() )
{
@ -444,12 +456,12 @@ wxTreeItemId PROJECT_TREE_PANE::addItemToProjectTree( const wxString& aName,
}
}
kid = m_TreeProject->GetNextChild( aRoot, cookie );
kid = m_TreeProject->GetNextChild( aParent, cookie );
}
}
// Append the item (only appending the filename not the full path):
wxTreeItemId newItemId = m_TreeProject->AppendItem( aRoot, file );
wxTreeItemId newItemId = m_TreeProject->AppendItem( aParent, file );
PROJECT_TREE_ITEM* data = new PROJECT_TREE_ITEM( type, aName, m_TreeProject );
m_TreeProject->SetItemData( newItemId, data );

View File

@ -159,12 +159,12 @@ private:
* Function addItemToProjectTree
* @brief Add the file or directory aName to the project 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 aParent = 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 the Id for the new tree item
*/
wxTreeItemId addItemToProjectTree( const wxString& aName, const wxTreeItemId& aRoot,
wxTreeItemId addItemToProjectTree( const wxString& aName, const wxTreeItemId& aParent,
std::vector<wxString>* aProjectNames, bool aRecurse );
/**