diff options
| author | Tannin <devnull@localhost> | 2013-09-01 13:40:44 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2013-09-01 13:40:44 +0200 |
| commit | 1e6c5f7c25ddd2094e26e6af1159ec5912448705 (patch) | |
| tree | 83ff6e2fd35c1614f2e13ff22f0f7b8214ab042b /src | |
| parent | 49e1dd23b699b499d9b715ef74cb7ca5b0189584 (diff) | |
- added a new column for not-yet-endorsed mods
- set categories menu no longer closes when the mouse cursor leaves the menu
- MO will no longer change the endorsement flag if an update doesn't contain it
- the column selection for the mod list can now only be accessed by mouse,
hotkeys open the context menu of the mod
- now displaying a progress dialog during login. For unknown reasons MO hangs during that time
Diffstat (limited to 'src')
| -rw-r--r-- | src/categories.h | 1 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 26 | ||||
| -rw-r--r-- | src/modinfo.cpp | 2 | ||||
| -rw-r--r-- | src/modlist.cpp | 2 | ||||
| -rw-r--r-- | src/modlistsortproxy.cpp | 4 | ||||
| -rw-r--r-- | src/nxmaccessmanager.cpp | 11 | ||||
| -rw-r--r-- | src/nxmaccessmanager.h | 2 |
7 files changed, 40 insertions, 8 deletions
diff --git a/src/categories.h b/src/categories.h index 8ec573b2..75698149 100644 --- a/src/categories.h +++ b/src/categories.h @@ -46,6 +46,7 @@ public: static const int CATEGORY_SPECIAL_UPDATEAVAILABLE = 10002; static const int CATEGORY_SPECIAL_NOCATEGORY = 10003; static const int CATEGORY_SPECIAL_CONFLICT = 10004; + static const int CATEGORY_SPECIAL_NOTENDORSED = 10005; public: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 93efb137..2988c602 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2592,6 +2592,7 @@ void MainWindow::refreshFilters() addFilterItem(NULL, tr("<Update>"), CategoryFactory::CATEGORY_SPECIAL_UPDATEAVAILABLE); addFilterItem(NULL, tr("<No category>"), CategoryFactory::CATEGORY_SPECIAL_NOCATEGORY); addFilterItem(NULL, tr("<Conflicted>"), CategoryFactory::CATEGORY_SPECIAL_CONFLICT); + addFilterItem(NULL, tr("<Not Endorsed>"), CategoryFactory::CATEGORY_SPECIAL_NOTENDORSED); std::set<int> categoriesUsed; for (unsigned int modIdx = 0; modIdx < ModInfo::getNumMods(); ++modIdx) { @@ -3311,6 +3312,17 @@ void MainWindow::exportModListCSV() } } + +void addMenuAsPushButton(QMenu *menu, QMenu *subMenu) +{ + QPushButton *pushBtn = new QPushButton(subMenu->title()); + pushBtn->setMenu(subMenu); + QWidgetAction *action = new QWidgetAction(menu); + action->setDefaultWidget(pushBtn); + menu->addAction(action); +} + + void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) { try { @@ -3319,6 +3331,7 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) m_ContextRow = mapToModel(&m_ModList, modList->indexAt(pos)).row(); QMenu menu; + menu.addAction(tr("Install Mod..."), this, SLOT(installMod_clicked())); menu.addAction(tr("Enable all visible"), this, SLOT(enableVisibleMods())); @@ -3343,13 +3356,16 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) menu.addAction(tr("Restore Backup"), this, SLOT(restoreBackup_clicked())); menu.addAction(tr("Remove Backup..."), this, SLOT(removeMod_clicked())); } else { - QMenu *addCategoryMenu = menu.addMenu(tr("Set Category")); + // Set categories is a separate menu connected to a push button. This way it doesn't simply close every time you hover the mouse outside + QMenu *addCategoryMenu = new QMenu(tr("Set Category")); addCategories(addCategoryMenu, 0); connect(addCategoryMenu, SIGNAL(aboutToHide()), this, SLOT(saveCategories())); + addMenuAsPushButton(&menu, addCategoryMenu); - QMenu *primaryCategoryMenu = menu.addMenu(tr("Primary Category")); + QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category")); connect(primaryCategoryMenu, SIGNAL(aboutToShow()), this, SLOT(addPrimaryCategoryCandidates())); connect(primaryCategoryMenu, SIGNAL(aboutToHide()), this, SLOT(savePrimaryCategory())); + addMenuAsPushButton(&menu, primaryCategoryMenu); menu.addAction(tr("Rename Mod..."), this, SLOT(renameMod_clicked())); menu.addAction(tr("Remove Mod..."), this, SLOT(removeMod_clicked())); @@ -4146,7 +4162,6 @@ void MainWindow::modDetailsUpdated(bool) void MainWindow::nxmUpdatesAvailable(const std::vector<int> &modIDs, QVariant userData, QVariant resultData, int) { m_ModsToUpdate -= modIDs.size(); - QVariantList resultList = resultData.toList(); for (auto iter = resultList.begin(); iter != resultList.end(); ++iter) { QVariantMap result = iter->toMap(); @@ -4159,8 +4174,9 @@ void MainWindow::nxmUpdatesAvailable(const std::vector<int> &modIDs, QVariant us for (auto iter = info.begin(); iter != info.end(); ++iter) { (*iter)->setNewestVersion(VersionInfo(result["version"].toString())); (*iter)->setNexusDescription(result["description"].toString()); - if (NexusInterface::instance()->getAccessManager()->loggedIn()) { - // don't use endorsement info if we're not logged in + if (NexusInterface::instance()->getAccessManager()->loggedIn() && + result.contains("voted_by_user")) { + // don't use endorsement info if we're not logged in or if the response doesn't contain it (*iter)->setIsEndorsed(result["voted_by_user"].toBool()); } } diff --git a/src/modinfo.cpp b/src/modinfo.cpp index 5cae62be..8372af55 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -410,7 +410,7 @@ void ModInfoRegular::nxmDescriptionAvailable(int, QVariant, QVariant resultData) QVariantMap result = resultData.toMap(); m_NewestVersion.parse(result["version"].toString()); m_NexusDescription = result["description"].toString(); - if (m_EndorsedState != ENDORSED_NEVER) { + if ((m_EndorsedState != ENDORSED_NEVER) && (result.contains("voted_by_user"))) { m_EndorsedState = result["voted_by_user"].toBool() ? ENDORSED_TRUE : ENDORSED_FALSE; } m_LastNexusQuery = QDateTime::currentDateTime(); diff --git a/src/modlist.cpp b/src/modlist.cpp index a08162e7..dc464497 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -747,7 +747,7 @@ bool ModList::eventFilter(QObject *obj, QEvent *event) if (event->type() == QEvent::ContextMenu) { QContextMenuEvent *contextEvent = static_cast<QContextMenuEvent*>(event); QWidget *object = qobject_cast<QWidget*>(obj); - if (object != NULL) { + if ((object != NULL) && (contextEvent->reason() == QContextMenuEvent::Mouse)) { emit requestColumnSelect(object->mapToGlobal(contextEvent->pos())); return true; diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index 37509b12..53c03c6a 100644 --- a/src/modlistsortproxy.cpp +++ b/src/modlistsortproxy.cpp @@ -219,6 +219,10 @@ bool ModListSortProxy::filterMatches(ModInfo::Ptr info, bool enabled) const case CategoryFactory::CATEGORY_SPECIAL_CONFLICT: { if (!hasConflictFlag(info->getFlags())) return false; } break; + case CategoryFactory::CATEGORY_SPECIAL_NOTENDORSED: { + ModInfo::EEndorsedState state = info->endorsedState(); + return (state == ModInfo::ENDORSED_FALSE) || (state == ModInfo::ENDORSED_NEVER); + } break; default: { if (!info->categorySet(*iter)) return false; } break; diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp index dce2131a..008d20a6 100644 --- a/src/nxmaccessmanager.cpp +++ b/src/nxmaccessmanager.cpp @@ -23,10 +23,12 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "utility.h" #include "selfupdater.h" #include <QMessageBox> +#include <QPushButton> #include <QNetworkProxy> #include <QNetworkRequest> #include <QNetworkCookie> #include <QNetworkCookieJar> +#include <QCoreApplication> #include <gameinfo.h> #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) @@ -117,8 +119,13 @@ void NXMAccessManager::pageLogin() postDataQuery = postData.encodedQuery(); #endif - m_LoginReply = post(request, postDataQuery); + m_ProgressDialog.setLabelText(tr("Logging into Nexus")); + QList<QPushButton*> buttons = m_ProgressDialog.findChildren<QPushButton*>(); + buttons.at(0)->setEnabled(false); + m_ProgressDialog.show(); + QCoreApplication::processEvents(); // for some reason the whole app hangs during the login. This way the user has at least a little feedback + m_LoginReply = post(request, postDataQuery); m_LoginTimeout.start(); connect(m_LoginReply, SIGNAL(finished()), this, SLOT(loginFinished())); connect(m_LoginReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(loginError(QNetworkReply::NetworkError))); @@ -138,6 +145,7 @@ void NXMAccessManager::loginTimeout() void NXMAccessManager::loginError(QNetworkReply::NetworkError) { + m_ProgressDialog.hide(); emit loginFailed(m_LoginReply->errorString()); m_LoginTimeout.stop(); m_LoginReply->deleteLater(); @@ -162,6 +170,7 @@ bool NXMAccessManager::hasLoginCookies() const void NXMAccessManager::loginFinished() { + m_ProgressDialog.hide(); if (hasLoginCookies()) { emit loginSuccessful(true); } else { diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h index 4e2b24ce..b0c43978 100644 --- a/src/nxmaccessmanager.h +++ b/src/nxmaccessmanager.h @@ -24,6 +24,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <QNetworkAccessManager> #include <QTimer> #include <QNetworkReply> +#include <QProgressDialog> /** @@ -85,6 +86,7 @@ private: QTimer m_LoginTimeout; QNetworkReply *m_LoginReply; + QProgressDialog m_ProgressDialog; QString m_Username; QString m_Password; |
