Add ability to select updates via context menu

This commit is contained in:
Gres 2020-04-05 13:43:17 +03:00
parent 0ef82187d6
commit ee899c1b23
3 changed files with 48 additions and 11 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);