This post explains selection of treeview rows when objects belonging to that selector row are selected.
First, the objects in the desktop selection are obtained. Next the treeview’s rows are iterated and each row’s column _colObj is obtained as:
std::vector objVec = row[_mColumns._colObj];
The selected object’s ID is compared with each object’s ID in objVec. If the comparison returns true, then the row whose objVec had matching objects is added to treeview selection as:
By default, only the parent rows are iterated. So a check is also performed on child rows to see if IDs match with them. Also if there is a prior selection and the current object selected does not belong to any selector, then the treeview selection is cleared using _unselect_all() function of Gtk::TreeSelection.
In the above screenshot, the object associated with second child row is selected which in turn selects the row in treeview.
Whenever any row in Style Dialog is selected, the corresponding objects in the drawing must be selected. This was implemented quickly. First the selection prior to selecting any row is cleared. Next it is made sure that the objects are selected only when the tree column corresponding to selector label is clicked. First column with ‘+’ is avoided because it is used to add objects to selector.
Next _colObj, i.e. the column referring to corresponding objects of the selected row is used to get the objects to be added to selection.
obj is the object in the objVec returned by _colObj. Thus objects are added to selection. Besides it is also checked, if the row selected in the Style Dialog is a parent row or a child row. For the former case, its child rows are also iterated and those objects are also added to selection.
Case 1: When parent row is selected and it has children
Case 2: When child row is selected
There will be another case in selection when matching selector rows should be seleted when objects in the drawing are selected, which will be discussed in next post.