Add ability to select updates via context menu
This commit is contained in:
parent
0ef82187d6
commit
ee899c1b23
@ -1,15 +1,19 @@
|
||||
#include "updates.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include <QAbstractItemView>
|
||||
#include <QApplication>
|
||||
#include <QComboBox>
|
||||
#include <QDir>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QMenu>
|
||||
#include <QNetworkReply>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QStandardPaths>
|
||||
#include <QTimer>
|
||||
#include <QTreeView>
|
||||
|
||||
#include <random>
|
||||
|
||||
@ -280,6 +284,46 @@ Model::Model(QObject *parent)
|
||||
{
|
||||
}
|
||||
|
||||
void Model::initView(QTreeView *view)
|
||||
{
|
||||
view->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
auto proxy = new QSortFilterProxyModel(view);
|
||||
proxy->setSourceModel(this);
|
||||
view->setModel(proxy);
|
||||
view->setItemDelegate(new update::UpdateDelegate(view));
|
||||
#ifndef DEVELOP
|
||||
view->hideColumn(int(update::Model::Column::Files));
|
||||
#endif
|
||||
|
||||
auto menu = new QMenu(view);
|
||||
menu->addAction(toString(Action::NoAction));
|
||||
menu->addAction(toString(Action::Remove));
|
||||
menu->addAction(toString(Action::Install));
|
||||
|
||||
view->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(view, &QAbstractItemView::customContextMenuRequested, //
|
||||
menu, [this, menu, view, proxy] {
|
||||
const auto selection = view->selectionModel();
|
||||
SOFT_ASSERT(selection, return );
|
||||
const auto indexes = selection->selectedRows(int(Column::Action));
|
||||
if (indexes.isEmpty())
|
||||
return;
|
||||
|
||||
const auto menuItem = menu->exec(QCursor::pos());
|
||||
if (!menuItem)
|
||||
return;
|
||||
|
||||
const auto action = menu->actions().indexOf(menuItem);
|
||||
|
||||
for (const auto &proxyIndex : indexes) {
|
||||
auto modelIndex = proxy->mapToSource(proxyIndex);
|
||||
if (!modelIndex.isValid() || rowCount(modelIndex) > 0)
|
||||
continue;
|
||||
setData(modelIndex, action, Qt::EditRole);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void Model::parse(const QByteArray &data)
|
||||
{
|
||||
QJsonParseError error;
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
class QNetworkAccessManager;
|
||||
class QNetworkReply;
|
||||
class QTreeView;
|
||||
|
||||
namespace update
|
||||
{
|
||||
@ -55,6 +56,8 @@ public:
|
||||
|
||||
explicit Model(QObject* parent = nullptr);
|
||||
|
||||
void initView(QTreeView* view);
|
||||
|
||||
void parse(const QByteArray& data);
|
||||
void setExpansions(const std::map<QString, QString>& expansions);
|
||||
UserActions userActions() const;
|
||||
|
@ -2,16 +2,12 @@
|
||||
#include "languagecodes.h"
|
||||
#include "manager.h"
|
||||
#include "runatsystemstart.h"
|
||||
#include "tesseract.h"
|
||||
#include "translator.h"
|
||||
#include "ui_settingseditor.h"
|
||||
#include "updates.h"
|
||||
#include "widgetstate.h"
|
||||
|
||||
#include <QColorDialog>
|
||||
#include <QFileDialog>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QStringListModel>
|
||||
|
||||
SettingsEditor::SettingsEditor(Manager &manager, update::Loader &updater)
|
||||
: ui(new Ui::SettingsEditor)
|
||||
@ -84,13 +80,7 @@ SettingsEditor::SettingsEditor(Manager &manager, update::Loader &updater)
|
||||
this, [this] { pickColor(ColorContext::Bagkround); });
|
||||
|
||||
// updates
|
||||
auto updatesProxy = new QSortFilterProxyModel(this);
|
||||
updatesProxy->setSourceModel(updater_.model());
|
||||
ui->updatesView->setModel(updatesProxy);
|
||||
ui->updatesView->setItemDelegate(new update::UpdateDelegate(this));
|
||||
#ifndef DEVELOP
|
||||
ui->updatesView->hideColumn(int(update::Model::Column::Files));
|
||||
#endif
|
||||
updater.model()->initView(ui->updatesView);
|
||||
adjustUpdatesView();
|
||||
connect(updater_.model(), &QAbstractItemModel::modelReset, //
|
||||
this, &SettingsEditor::adjustUpdatesView);
|
||||
|
Loading…
Reference in New Issue
Block a user