| 441 | } |
| 442 | |
| 443 | void LibraryWindow::initLabelView() |
| 444 | { |
| 445 | LabelModel::instance()->waitLabelLoaded(); |
| 446 | labelView = new LabelTreeView(this); |
| 447 | labelView->setObjectName(QStringLiteral("LabelView")); |
| 448 | labelView->setAnimated(true); |
| 449 | labelView->setMouseTracking(true); |
| 450 | labelView->setEditTriggers(QAbstractItemView::NoEditTriggers); |
| 451 | labelView->setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection); |
| 452 | labelView->header()->hide(); |
| 453 | labelView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
| 454 | labelView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
| 455 | labelView->setFont(QFont(GlobalObjects::normalFont, 12)); |
| 456 | labelView->setIndentation(16); |
| 457 | new FloatScrollBar(labelView->verticalScrollBar(), labelView); |
| 458 | LabelItemDelegate *labelItemDelegate = new LabelItemDelegate(this); |
| 459 | labelView->setItemDelegate(labelItemDelegate); |
| 460 | labelProxyModel = new LabelProxyModel(this); |
| 461 | labelProxyModel->setSourceModel(LabelModel::instance()); |
| 462 | labelProxyModel->setRecursiveFilteringEnabled(true); |
| 463 | labelView->setModel(labelProxyModel); |
| 464 | labelView->setSortingEnabled(true); |
| 465 | labelProxyModel->sort(0, Qt::AscendingOrder); |
| 466 | labelProxyModel->setFilterKeyColumn(0); |
| 467 | labelView->setContextMenuPolicy(Qt::CustomContextMenu); |
| 468 | |
| 469 | QMenu *labelViewContextMenu = new ElaMenu(labelView); |
| 470 | QAction *actDeleteTag = labelViewContextMenu->addAction(tr("Delete")); |
| 471 | QObject::connect(actDeleteTag, &QAction::triggered, labelView, [=](){ |
| 472 | QItemSelection selection = labelView->selectionModel()->selection(); |
| 473 | if (selection.empty()) return; |
| 474 | LabelModel::instance()->removeTag(labelProxyModel->mapSelectionToSource(selection).indexes().first()); |
| 475 | }); |
| 476 | QAction *actCopyTag = labelViewContextMenu->addAction(tr("Copy")); |
| 477 | QObject::connect(actCopyTag, &QAction::triggered, labelView, [=](){ |
| 478 | QItemSelection selection = labelView->selectionModel()->selection(); |
| 479 | if (selection.empty()) return; |
| 480 | QModelIndex index = labelProxyModel->mapToSource(selection.indexes().first()); |
| 481 | const TagNode *tag = (const TagNode *)LabelModel::instance()->data(index, TagNodeRole).value<void *>(); |
| 482 | QApplication::clipboard()->setText(tag->tagFilter); |
| 483 | }); |
| 484 | QObject::connect(labelView, &LabelTreeView::customContextMenuRequested, labelView, [=](){ |
| 485 | QItemSelection selection = labelView->selectionModel()->selection(); |
| 486 | if (selection.empty()) return; |
| 487 | QModelIndex index = labelProxyModel->mapToSource(selection.indexes().first()); |
| 488 | const TagNode *tag = (const TagNode *)LabelModel::instance()->data(index, TagNodeRole).value<void *>(); |
| 489 | actDeleteTag->setEnabled(tag->tagType == TagNode::TAG_CUSTOM); |
| 490 | labelViewContextMenu->exec(QCursor::pos()); |
| 491 | }); |
| 492 | |
| 493 | auto expand = [=](){ |
| 494 | labelView->expand(labelProxyModel->index(0,0,QModelIndex())); |
| 495 | labelView->expand(labelProxyModel->index(1,0,QModelIndex())); |
| 496 | labelView->expand(labelProxyModel->index(2,0,QModelIndex())); |
| 497 | labelView->expand(labelProxyModel->index(3,0,QModelIndex())); |
| 498 | }; |
| 499 | expand(); |
| 500 |
nothing calls this directly
no test coverage detected