Developer forums (C::B DEVELOPMENT STRICTLY!) > Plugins development

tree->GetSelection not working anymore on rev7548

(1/2) > >>

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