summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAl12rs <gabriel.cortesi@outlook.com>2018-05-25 15:33:53 +0200
committerAl12rs <gabriel.cortesi@outlook.com>2018-05-25 15:33:53 +0200
commitddb40b712edf0676f6083a0ecd5a67509e60e6fe (patch)
treec78719dc0feed4cbf77b64aad0e9212f5342af9c
parent186f26b71e4597e9999a3d946b0d9497255fc986 (diff)
*Avoided some unnecessary refreshes while removing mods.
*Added "Visit on Nexus" menu entry in the downloads tab. *Added confirmation message when deleting a single download. *Changed text of messages to more easily distinguish deleting from hiding.
-rw-r--r--src/downloadlistwidget.cpp20
-rw-r--r--src/downloadlistwidget.h6
-rw-r--r--src/downloadlistwidgetcompact.cpp33
-rw-r--r--src/downloadlistwidgetcompact.h7
-rw-r--r--src/downloadmanager.cpp35
-rw-r--r--src/downloadmanager.h2
-rw-r--r--src/mainwindow.cpp11
7 files changed, 88 insertions, 26 deletions
diff --git a/src/downloadlistwidget.cpp b/src/downloadlistwidget.cpp
index d7bd01bb..75470056 100644
--- a/src/downloadlistwidget.cpp
+++ b/src/downloadlistwidget.cpp
@@ -245,7 +245,11 @@ void DownloadListWidgetDelegate::issueQueryInfo()
void DownloadListWidgetDelegate::issueDelete()
{
- emit removeDownload(m_ContextRow, true);
+ if (QMessageBox::question(nullptr, tr("Delete Files?"),
+ tr("This will permanently delete the selected download."),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ emit removeDownload(m_ContextRow, true);
+ }
}
void DownloadListWidgetDelegate::issueRemoveFromView()
@@ -263,6 +267,11 @@ void DownloadListWidgetDelegate::issueRestoreToViewAll()
emit restoreDownload(-1);
}
+void DownloadListWidgetDelegate::issueVisitOnNexus()
+{
+ emit visitOnNexus(m_ContextRow);
+}
+
void DownloadListWidgetDelegate::issueCancel()
{
@@ -281,7 +290,7 @@ void DownloadListWidgetDelegate::issueResume()
void DownloadListWidgetDelegate::issueDeleteAll()
{
- if (QMessageBox::question(nullptr, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Delete Files?"),
tr("This will remove all finished downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, true);
@@ -290,7 +299,7 @@ void DownloadListWidgetDelegate::issueDeleteAll()
void DownloadListWidgetDelegate::issueDeleteCompleted()
{
- if (QMessageBox::question(nullptr, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Delete Files?"),
tr("This will remove all installed downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, true);
@@ -340,7 +349,12 @@ bool DownloadListWidgetDelegate::editorEvent(QEvent *event, QAbstractItemModel *
menu.addAction(tr("Install"), this, SLOT(issueInstall()));
if (m_Manager->isInfoIncomplete(m_ContextRow)) {
menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
+ }else {
+ menu.addAction(tr("Visit on Nexus"), this,SLOT(issueVisitOnNexus()));
}
+
+ menu.addSeparator();
+
menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
if (hidden) {
menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView()));
diff --git a/src/downloadlistwidget.h b/src/downloadlistwidget.h
index 6e628cc7..e2746f3a 100644
--- a/src/downloadlistwidget.h
+++ b/src/downloadlistwidget.h
@@ -71,6 +71,7 @@ signals:
void cancelDownload(int index);
void pauseDownload(int index);
void resumeDownload(int index);
+ void visitOnNexus(int index);
protected:
@@ -80,7 +81,7 @@ protected:
private:
-
+
void drawCache(QPainter *painter, const QStyleOptionViewItem &option, const QPixmap &cache) const;
private slots:
@@ -89,7 +90,8 @@ private slots:
void issueDelete();
void issueRemoveFromView();
void issueRestoreToView();
- void issueRestoreToViewAll();
+ void issueRestoreToViewAll();
+ void issueVisitOnNexus();
void issueCancel();
void issuePause();
void issueResume();
diff --git a/src/downloadlistwidgetcompact.cpp b/src/downloadlistwidgetcompact.cpp
index 97e3655b..cdce8d7f 100644
--- a/src/downloadlistwidgetcompact.cpp
+++ b/src/downloadlistwidgetcompact.cpp
@@ -209,7 +209,11 @@ void DownloadListWidgetCompactDelegate::issueQueryInfo()
void DownloadListWidgetCompactDelegate::issueDelete()
{
- emit removeDownload(m_ContextIndex.row(), true);
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
+ tr("This will permanently delete the selected download."),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ emit removeDownload(m_ContextIndex.row(), true);
+ }
}
void DownloadListWidgetCompactDelegate::issueRemoveFromView()
@@ -217,6 +221,11 @@ void DownloadListWidgetCompactDelegate::issueRemoveFromView()
emit removeDownload(m_ContextIndex.row(), false);
}
+void DownloadListWidgetCompactDelegate::issueVisitOnNexus()
+{
+ emit visitOnNexus(m_ContextIndex.row());
+}
+
void DownloadListWidgetCompactDelegate::issueRestoreToView()
{
emit restoreDownload(m_ContextIndex.row());
@@ -305,7 +314,10 @@ bool DownloadListWidgetCompactDelegate::editorEvent(QEvent *event, QAbstractItem
menu.addAction(tr("Install"), this, SLOT(issueInstall()));
if (m_Manager->isInfoIncomplete(m_ContextIndex.row())) {
menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
+ }else {
+ menu.addAction(tr("Visit on Nexus"), this, SLOT(issueVisitOnNexus()));
}
+ menu.addSeparator();
menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
if (hidden) {
menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView()));
@@ -324,15 +336,15 @@ bool DownloadListWidgetCompactDelegate::editorEvent(QEvent *event, QAbstractItem
}
menu.addAction(tr("Delete Installed..."), this, SLOT(issueDeleteCompleted()));
menu.addAction(tr("Delete All..."), this, SLOT(issueDeleteAll()));
- if (!hidden) {
- menu.addSeparator();
- menu.addAction(tr("Hide Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
- menu.addAction(tr("Hide All..."), this, SLOT(issueRemoveFromViewAll()));
- }
- if (hidden) {
- menu.addSeparator();
- menu.addAction(tr("Un-Hide All..."), this, SLOT(issueRestoreToViewAll()));
- }
+ if (!hidden) {
+ menu.addSeparator();
+ menu.addAction(tr("Hide Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
+ menu.addAction(tr("Hide All..."), this, SLOT(issueRemoveFromViewAll()));
+ }
+ if (hidden) {
+ menu.addSeparator();
+ menu.addAction(tr("Un-Hide All..."), this, SLOT(issueRestoreToViewAll()));
+ }
menu.exec(mouseEvent->globalPos());
event->accept();
@@ -345,4 +357,3 @@ bool DownloadListWidgetCompactDelegate::editorEvent(QEvent *event, QAbstractItem
return QItemDelegate::editorEvent(event, model, option, index);
}
-
diff --git a/src/downloadlistwidgetcompact.h b/src/downloadlistwidgetcompact.h
index df1a5f58..28a376eb 100644
--- a/src/downloadlistwidgetcompact.h
+++ b/src/downloadlistwidgetcompact.h
@@ -35,7 +35,7 @@ class DownloadListWidgetCompact;
class DownloadListWidgetCompact : public QWidget
{
Q_OBJECT
-
+
public:
explicit DownloadListWidgetCompact(QWidget *parent = 0);
~DownloadListWidgetCompact();
@@ -69,6 +69,7 @@ signals:
void cancelDownload(int index);
void pauseDownload(int index);
void resumeDownload(int index);
+ void visitOnNexus(int index);
protected:
@@ -87,7 +88,8 @@ private slots:
void issueDelete();
void issueRemoveFromView();
void issueRestoreToView();
- void issueRestoreToViewAll();
+ void issueRestoreToViewAll();
+ void issueVisitOnNexus();
void issueCancel();
void issuePause();
void issueResume();
@@ -120,4 +122,3 @@ private:
};
#endif // DOWNLOADLISTWIDGETCOMPACT_H
-
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index 93a46d78..0341152a 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -36,6 +36,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QFileInfo>
#include <QRegExp>
#include <QDirIterator>
+#include <QDesktopServices>
#include <QInputDialog>
#include <QMessageBox>
#include <QCoreApplication>
@@ -607,7 +608,7 @@ void DownloadManager::removeFile(int index, bool deleteFile)
if(!download->m_Hidden)
metaSettings.setValue("removed", true);
}
-
+
endDisableDirWatcher();
}
@@ -651,7 +652,7 @@ void DownloadManager::restoreDownload(int index)
index = 0;
for (QVector<DownloadInfo*>::const_iterator iter = m_ActiveDownloads.begin(); iter != m_ActiveDownloads.end(); ++iter ) {
-
+
if ((*iter)->m_State >= minState) {
restoreDownload(index);
}
@@ -876,6 +877,34 @@ void DownloadManager::queryInfo(int index)
setState(info, STATE_FETCHINGMODINFO);
}
+void DownloadManager::visitOnNexus(int index)
+{
+ if ((index < 0) || (index >= m_ActiveDownloads.size())) {
+ reportError(tr("VisitNexus: invalid download index %1").arg(index));
+ return;
+ }
+ DownloadInfo *info = m_ActiveDownloads[index];
+
+ if (info->m_FileInfo->repository != "Nexus") {
+ qWarning("Visiting mod page is currently only possible with Nexus");
+ return;
+ }
+
+ if (info->m_State < DownloadManager::STATE_READY) {
+ // UI shouldn't allow this
+ return;
+ }
+ int modID = info->m_FileInfo->modID;
+
+ QString gameName = info->m_FileInfo->gameName;
+ if (modID > 0) {
+ QDesktopServices::openUrl(QUrl(m_NexusInterface->getModURL(modID, gameName)));
+ }
+ else {
+ emit showMessage(tr("Nexus ID for this Mod is unknown"));
+ }
+}
+
int DownloadManager::numTotalDownloads() const
{
@@ -1756,4 +1785,4 @@ void DownloadManager::checkDownloadTimeout()
resumeDownload(i);
}
}
-} \ No newline at end of file
+}
diff --git a/src/downloadmanager.h b/src/downloadmanager.h
index aa859b13..24bc6d7f 100644
--- a/src/downloadmanager.h
+++ b/src/downloadmanager.h
@@ -435,6 +435,8 @@ public slots:
void queryInfo(int index);
+ void visitOnNexus(int index);
+
void nxmDescriptionAvailable(QString gameName, int modID, QVariant userData, QVariant resultData, int requestID);
void nxmFilesAvailable(QString gameName, int modID, QVariant userData, QVariant resultData, int requestID);
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index a428d5b3..7ddd35c5 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -254,7 +254,7 @@ MainWindow::MainWindow(QSettings &initSettings
actionToToolButton(ui->actionHelp);
createHelpWidget();
-
+
for (QAction *action : ui->toolBar->actions()) {
if (action->isSeparator()) {
// insert spacers
@@ -400,7 +400,7 @@ MainWindow::MainWindow(QSettings &initSettings
new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Enter), this, SLOT(openExplorer_activated()));
new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Return), this, SLOT(openExplorer_activated()));
-
+
new QShortcut(QKeySequence::Refresh, this, SLOT(refreshProfile_activated()));
@@ -2336,9 +2336,11 @@ void MainWindow::removeMod_clicked()
tr("Remove the following mods?<br><ul>%1</ul>").arg(mods),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
// use mod names instead of indexes because those become invalid during the removal
+ DownloadManager::startDisableDirWatcher();
for (QString name : modNames) {
m_OrganizerCore.modList()->removeRowForce(ModInfo::getIndex(name), QModelIndex());
}
+ DownloadManager::endDisableDirWatcher();
}
} else {
m_OrganizerCore.modList()->removeRow(m_ContextRow, QModelIndex());
@@ -2500,7 +2502,7 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index,
connect(&dialog, SIGNAL(modOpenPrev(int)), this, SLOT(modOpenPrev(int)), Qt::QueuedConnection);
connect(&dialog, SIGNAL(originModified(int)), this, SLOT(originModified(int)));
connect(&dialog, SIGNAL(endorseMod(ModInfo::Ptr)), this, SLOT(endorseMod(ModInfo::Ptr)));
-
+
//Open the tab first if we want to use the standard indexes of the tabs.
if (tab != -1) {
dialog.openTab(tab);
@@ -2687,7 +2689,7 @@ void MainWindow::openExplorer_activated()
QModelIndex idx = selection->currentIndex();
QString fileName = idx.data().toString();
-
+
ModInfo::Ptr modInfo = ModInfo::getByIndex(ModInfo::getIndex(m_OrganizerCore.pluginList()->origin(fileName)));
std::vector<ModInfo::EFlag> flags = modInfo->getFlags();
@@ -4239,6 +4241,7 @@ void MainWindow::updateDownloadListDelegate()
connect(ui->downloadView->itemDelegate(), SIGNAL(installDownload(int)), &m_OrganizerCore, SLOT(installDownload(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(queryInfo(int)), m_OrganizerCore.downloadManager(), SLOT(queryInfo(int)));
+ connect(ui->downloadView->itemDelegate(), SIGNAL(visitOnNexus(int)), m_OrganizerCore.downloadManager(), SLOT(visitOnNexus(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(removeDownload(int, bool)), m_OrganizerCore.downloadManager(), SLOT(removeDownload(int, bool)));
connect(ui->downloadView->itemDelegate(), SIGNAL(restoreDownload(int)), m_OrganizerCore.downloadManager(), SLOT(restoreDownload(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(cancelDownload(int)), m_OrganizerCore.downloadManager(), SLOT(cancelDownload(int)));