File indexing completed on 2024-04-28 15:39:08
0001 // SPDX-FileCopyrightText: 2021-2022 Tobias Leupold <tl at stonemx dot de> 0002 // 0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 // Local includes 0006 #include "TracksListView.h" 0007 #include "GeoDataModel.h" 0008 0009 // KDE includes 0010 #include <KLocalizedString> 0011 0012 // Qt includes 0013 #include <QMenu> 0014 #include <QAction> 0015 0016 TracksListView::TracksListView(GeoDataModel *model, QWidget *parent) : QListView(parent) 0017 { 0018 viewport()->setAcceptDrops(true); 0019 setDropIndicatorShown(true); 0020 setDragDropMode(QAbstractItemView::DropOnly); 0021 0022 setModel(model); 0023 setSelectionMode(QAbstractItemView::ExtendedSelection); 0024 setContextMenuPolicy(Qt::CustomContextMenu); 0025 0026 connect(this, &QAbstractItemView::clicked, this, &TracksListView::trackSelected); 0027 0028 connect(selectionModel(), &QItemSelectionModel::selectionChanged, 0029 this, &TracksListView::checkSelection); 0030 0031 m_contextMenu = new QMenu(this); 0032 0033 m_remove = m_contextMenu->addAction(i18np("Remove track", "Remove tracks", 1)); 0034 connect(m_remove, &QAction::triggered, this, &TracksListView::removeTracks); 0035 0036 connect(this, &QListView::customContextMenuRequested, this, &TracksListView::showContextMenu); 0037 } 0038 0039 void TracksListView::currentChanged(const QModelIndex ¤t, const QModelIndex &) 0040 { 0041 if (current.isValid()) { 0042 Q_EMIT trackSelected(current); 0043 scrollTo(current); 0044 } 0045 } 0046 0047 void TracksListView::showContextMenu(const QPoint &point) 0048 { 0049 const auto selected = selectedIndexes(); 0050 const int allSelected = selected.count(); 0051 0052 m_remove->setEnabled(allSelected > 0); 0053 m_remove->setText(i18np("Remove track", "Remove tracks", allSelected)); 0054 0055 m_contextMenu->exec(mapToGlobal(point)); 0056 } 0057 0058 QVector<int> TracksListView::selectedTracks() const 0059 { 0060 QVector<int> selection; 0061 const auto selected = selectedIndexes(); 0062 for (const auto &index : selected) { 0063 selection.append(index.row()); 0064 } 0065 return selection; 0066 } 0067 0068 void TracksListView::checkSelection() 0069 { 0070 const auto selected = selectedIndexes(); 0071 Q_EMIT updateTrackWalker(selected.count() == 1 ? selected.first().row() : -1); 0072 }