MCPcopy Create free account
hub / github.com/KDE/kdevelop / setLevels

Method setLevels

kdevplatform/util/multilevellistview.cpp:272–352  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

270}
271
272void MultiLevelListView::setLevels(int levels)
273{
274 Q_D(MultiLevelListView);
275
276 qDeleteAll(d->views);
277 qDeleteAll(d->proxies);
278 qDeleteAll(d->layouts);
279 d->views.clear();
280 d->proxies.clear();
281 d->layouts.clear();
282
283 d->levels = levels;
284 d->views.reserve(levels);
285 d->proxies.reserve(levels);
286 d->layouts.reserve(levels);
287
288 QTreeView* previousView = nullptr;
289 for (int i = 0; i < d->levels; ++i) {
290 auto* levelLayout = new QVBoxLayout();
291
292 auto* view = new QTreeView(this);
293 view->setContentsMargins(0, 0, 0, 0);
294 // only the right-most view is decorated
295 view->setRootIsDecorated(i + 1 == d->levels);
296 view->setHeaderHidden(false);
297 view->setSelectionMode(QAbstractItemView::SingleSelection);
298
299 if (!previousView) {
300 // the root, i.e. left-most view
301 auto* root = new RootProxyModel(this);
302 root->setDynamicSortFilter(true);
303 d->proxies << root;
304 root->setSourceModel(d->model);
305 view->setModel(root);
306 } else {
307 auto* subTreeProxy = new SubTreeProxyModel(previousView->selectionModel(), this);
308 if (i + 1 < d->levels) {
309 // middle views only show children of selection
310 subTreeProxy->setFilterBehavior(KSelectionProxyModel::ChildrenOfExactSelection);
311 } else {
312 // right-most view shows the rest
313 subTreeProxy->setFilterBehavior(KSelectionProxyModel::SubTreesWithoutRoots);
314 }
315 d->proxies << subTreeProxy;
316 subTreeProxy->setSourceModel(d->model);
317 // sorting requires another proxy in-between
318 auto* sortProxy = new QSortFilterProxyModel(subTreeProxy);
319 sortProxy->setSourceModel(subTreeProxy);
320 sortProxy->setDynamicSortFilter(true);
321 view->setModel(sortProxy);
322 }
323
324 // view->setModel creates the selection model
325 connect(view->selectionModel(), &QItemSelectionModel::currentChanged,
326 this, [this](const QModelIndex& current, const QModelIndex& previous) {
327 Q_D(MultiLevelListView);
328 d->viewSelectionChanged(current, previous);
329 });

Callers 2

TemplateSelectionPageMethod · 0.80
ProjectSelectionPageMethod · 0.80

Calls 10

setSourceModelMethod · 0.80
viewSelectionChangedMethod · 0.80
setSortingEnabledMethod · 0.80
clearMethod · 0.45
reserveMethod · 0.45
setModelMethod · 0.45
modelMethod · 0.45
addWidgetMethod · 0.45
addItemMethod · 0.45

Tested by

no test coverage detected