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