SDK:Working with Hierarchical VWListBrowserCtrl: Difference between revisions
No edit summary |
|||
Line 79: | Line 79: | ||
<code lang="cpp"> | <code lang="cpp"> | ||
// activating hierarchical mode (again !) | // activating hierarchical mode (again !) | ||
gSDK->EnableListBrowserHierarchicalDisplay( GetDialogID(), GetControlID, true ); | gSDK->EnableListBrowserHierarchicalDisplay( GetDialogID(), GetControlID(), true ); | ||
</code> | </code> | ||
== Deal with events == | == Deal with events == |
Revision as of 07:11, 23 October 2013
.SDK|SDK ..SDK:Types|SDK Types ..SDK:Using the SDK|Using the SDK ..VCOM:VCOM (Vectorworks Component Object Model)|VCOM Basics ..VCOM:Class Reference|VCOM Class Reference
Introduction
Since Vectorworks 2013 it is possible to create hierarchical list browsers ie with rows which can be expanded to reveal other rows, recursively.
Set up : example
We will try in this article to get the result shown above.
Basic concept : the '-' character
First thing to understand with hierarchical list browsers is that you don't insert every rows shown in the result. In our example, the inserted rows in the list browser are :
abcd-first row abcd-2nd row abcd-3rd row abcd-4th row EFGH-1st row EFGH-2nd row EFGH-3rd row-AA EFGH-3rd row-BB EFGH-3rd row-CC
This is exactly the way the class list browser is working in the Organization dialog.
How to activate the hierarchical mode
// activating hierarchical mode gSDK->EnableListBrowserHierarchicalDisplay( GetDialogID(), GetControlID(), true ); // telling LB which column is the one with collapse/expand picture gSDK->SetListBrowserHierarchicalDisplayColumn( GetDialogID(), GetControlID(), kFirstColumnIndex ); // we need to put these attributes. It doesn't work without them gSDK->SetListBrowserItemDisplayType( GetDialogID(), GetControlID(), kFirstColumnIndex, kListBrowserDisplayImageAndText ); gSDK->SetListBrowserControlType( GetDialogID(), GetControlID(), kFirstColumnIndex, kListBrowserControlDiscTriangle);
Adding rows
size_t row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "abcd-first row" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "abcd-2nd row" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "abcd-3rd row" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "abcd-4th row" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "EFGH-1st row" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "EFGH-2nd row" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "EFGH-3rd row-AA" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "EFGH-3rd row-BB" ); row = AddRow( "" ); GetItem( row, kFirstColumnIndex ).SetItemText( "EFGH-3rd row-CC" );
The missing mistery part
Once we've done all this, the list browser looks like this :
Not very hirerarchical isn't it ? It's because one of the calls we've done before the row inserts has to be made after. So we just need to do this :
// activating hierarchical mode (again !) gSDK->EnableListBrowserHierarchicalDisplay( GetDialogID(), GetControlID(), true );
Deal with events
When the user clicks on the expand/collapse arrow, he expects to expand or collapse the tree below the clicked row. We have to deal with this.
size_t row, col; EListBrowserEventType type = eventArgs.GetListBrowserEvent(row, col); if(type == kListBrowserEventType_DataChangeClick) // arrow click { if(gSDK->HierarchicalListBrowserItemIsClosed( GetDialogID(), Di_LP_ListItem, row )) { gSDK->HierarchicalListBrowserItemOpened( GetDialogID(), Di_LP_ListItem, row, false, cnt ); // then we have to restore all column values and ItemData for all redisplayed items. // ... // ... } else gSDK->HierarchicalListBrowserItemClosed( GetDialogID(), Di_LP_ListItem, row, false ); }
See Also
SDK:Working with VWListBrowserCtrl | SDK:Layout Manager: List Browser