Developer forums (C::B DEVELOPMENT STRICTLY!) > Plugins development
tree->GetSelection not working anymore on rev7548
daniloz:
Hi,
I was developing a plugin and since one week, the part that gets the selected item on the "Project Manager" is not working anymore.
I have a pretty much standard code, as in other places in C::B and other plugins, i.e.:
--- Code: ---void cbTree::OnContextMenu( wxCommandEvent& /*event*/ )
{
wxTreeCtrl* tree = Manager::Get()->GetProjectManager()->GetTree();
if ( !tree )
return;
wxTreeItemId selItem = tree->GetSelection();
if ( !selItem.IsOk() )
return;
const FileTreeData* ftData = static_cast<FileTreeData*>( tree->GetItemData( selItem ) );
if ( !ftData )
return;
if (ftData->GetKind() != FileTreeData::ftdkFile)
return;
ProjectFile* pFile = ftData->GetProjectFile();
if ( !pFile )
return;
// Do something with the pFile here //
return;
}
--- End code ---
After adding some verbosity to the code and debugging, I figured out that
--- Code: ---wxTreeItemId selItem = tree->GetSelection();
--- End code ---
is returning a NULL pointer.
Any idea what has changed in the last week or so that could break this...
Btw, I checked the code completion plugin, and the part where is does a "Reparse this Project" (void NativeParser::ReparseSelectedProject()) is also not working for the same reason...
Attached is a simple project to reproduce the problem.
[attachment deleted by admin]
daniloz:
Sorry to reply to my own post, but I have some information about this issue:
If instead of
--- Code: --- wxTreeItemId selItem = tree->GetSelection();
--- End code ---
I use
--- Code: --- wxTreeItemId selItem = Manager::Get()->GetProjectManager()->GetTreeSelection();
--- End code ---
Then everything is working...
It seems something was broken in tree->GetSelection()
ollydbg:
Same problem here reparse project or reparse file does not woks any more, all the recent nightly builds has this issue.
Edit: It should be commit before rev 6546.
Jenna:
The reason is quite simple:
--- Quote from: wxWidgets documentation ---wxTreeCtrl::GetSelection
wxTreeItemId GetSelection() const
Returns the selection, or an invalid item if there is no selection. This function only works with the controls without wxTR_MULTIPLE style, use GetSelections for the controls which do have this style.
--- End quote ---
wxTR_MULTIPLE was added to the projects tree in revision 7531.
--- Quote from: projectmanager.h --- /** Get the selection of the project manager's tree (GUI).
* This must be used instead of tree->GetSelection() because the tree
* has the wxTR_MULTIPLE style.
* This usually returns the first item in the selection list, but
* if there is a right-click popup menu then the user may have
* selected several items and right-clicked on one, so return the
* right-click item instead.
* of the first
* @return A wxTreeItemId of the selected tree item.
*/
wxTreeItemId GetTreeSelection();
--- End quote ---
So all code that uses
--- Code: ---wxTreeCtrl::GetSelection()
--- End code ---
has to be fixed to use
--- Code: ---ProjectManager::GetTreeSelection()
--- End code ---
instead.
ollydbg:
Thank you jens!!!
Navigation
[0] Message Index
[#] Next page
Go to full version