From cffd9eb4e21f0ddcddca68d8eb0f1c80c8ac6ae1 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 5 Oct 2013 14:20:48 +0200 Subject: - hook.dll now doesn't inject to certain applications (currently steam, chrome and firefox) - versioning system improved. Will now report "downgrades" for mods and support a different versioning system (requires manual switch) - updates can now be ignored until a new version is uploaded - new splash screen - bugfix: a few memory leaks (shouldn't account for much) - bugfix: result of GetModuleHandle wasn't zero-terminated in some cases --- src/selfupdater.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/selfupdater.cpp') diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp index 421fbeab..bdace814 100644 --- a/src/selfupdater.cpp +++ b/src/selfupdater.cpp @@ -126,7 +126,6 @@ void SelfUpdater::startUpdate() void SelfUpdater::download(const QString &downloadLink, const QString &fileName) { - qDebug("download: %s", downloadLink.toUtf8().constData()); QNetworkAccessManager *accessManager = m_Interface->getAccessManager(); QUrl dlUrl(downloadLink); QNetworkRequest request(dlUrl); @@ -324,7 +323,6 @@ void SelfUpdater::nxmDescriptionAvailable(int, QVariant, QVariant resultData, in if (m_NewestVersion.isEmpty()) { QTimer::singleShot(5000, this, SLOT(testForUpdate())); } - VersionInfo currentVersion(m_MOVersion); VersionInfo newestVersion(m_NewestVersion); -- cgit v1.3.1 From 0e90b9d233eb3ae8276f6f8bfc4612c117544404 Mon Sep 17 00:00:00 2001 From: Tannin Date: Wed, 4 Dec 2013 19:54:28 +0100 Subject: - bugfix: changing nexus id directly via mod list did not cause the change to be saved --- src/modinfo.cpp | 7 +++++++ src/modinfo.h | 2 +- src/selfupdater.cpp | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src/selfupdater.cpp') diff --git a/src/modinfo.cpp b/src/modinfo.cpp index f436eba8..6569f897 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -541,6 +541,13 @@ bool ModInfoRegular::setName(const QString &name) void ModInfoRegular::setNotes(const QString ¬es) { m_Notes = notes; + m_MetaInfoChanged = true; +} + +void ModInfoRegular::setNexusID(int modID) +{ + m_NexusID = modID; + m_MetaInfoChanged = true; } void ModInfoRegular::setVersion(const VersionInfo &version) diff --git a/src/modinfo.h b/src/modinfo.h index 6de0275b..677d8a82 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -570,7 +570,7 @@ public: * * @param modID the nexus mod id **/ - void setNexusID(int modID) { m_NexusID = modID; } + void setNexusID(int modID); /** * @brief set the version of this mod diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp index bdace814..2a9ca893 100644 --- a/src/selfupdater.cpp +++ b/src/selfupdater.cpp @@ -436,6 +436,7 @@ void SelfUpdater::nxmRequestFailed(int, QVariant, int requestID, const QString & QTimer::singleShot(60000, this, SLOT(testForUpdate())); --m_Attempts; } else { + qWarning("Failed to retrieve update information: %s", qPrintable(errorMessage)); MessageDialog::showMessage(tr("Failed to retrieve update information: %1").arg(errorMessage), m_Parent); } } -- cgit v1.3.1 From e69210b3a78c4a6c63086d84e6bdb2c3b47d8944 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 18 Jan 2014 19:51:58 +0100 Subject: - when a download server returns a text file, it's assumed to be an error and the text displayed as an error - save games can now be deleted from inside MO - bugfix: removing the pending download entry failed if the download-url request failed - bugfix: download manager didn't stop automatically resuming failed downloads under certain circumstances - bugfix: uninstalled downloads were treated as not-finished when refreshing the download list - bugfix: updating the filesystem watcher on the saves directory didn't work correctly --- src/aboutdialog.cpp | 1 - src/downloadmanager.cpp | 33 ++++++++++++++++----------------- src/downloadmanager.h | 2 +- src/mainwindow.cpp | 23 ++++++++++++++++++++++- src/mainwindow.h | 3 ++- src/modinfo.cpp | 4 ++-- src/modinfo.h | 2 +- src/nexusinterface.cpp | 34 +++++++++++++++++----------------- src/nexusinterface.h | 8 ++++---- src/pluginlist.cpp | 1 - src/selfupdater.cpp | 2 +- src/selfupdater.h | 2 +- 12 files changed, 67 insertions(+), 48 deletions(-) (limited to 'src/selfupdater.cpp') diff --git a/src/aboutdialog.cpp b/src/aboutdialog.cpp index 94e4e54c..c7f95640 100644 --- a/src/aboutdialog.cpp +++ b/src/aboutdialog.cpp @@ -73,7 +73,6 @@ void AboutDialog::on_creditsList_currentItemChanged(QListWidgetItem *current, QL auto iter = m_LicenseFiles.find(current->data(Qt::UserRole).toInt()); if (iter != m_LicenseFiles.end()) { QString filePath = qApp->applicationDirPath() + "/license/" + iter->second; -qDebug("%s", qPrintable(filePath)); QString text = MOBase::readFileText(filePath); ui->licenseText->setText(text); } else { diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index dd320f70..31d8bcec 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -26,15 +26,16 @@ along with Mod Organizer. If not, see . #include "utility.h" #include "json.h" #include "selectiondialog.h" +#include #include #include #include #include #include -#include -#include #include #include +#include +#include using namespace MOBase; @@ -246,7 +247,7 @@ void DownloadManager::refreshList() // remove finished downloads for (QVector::iterator Iter = m_ActiveDownloads.begin(); Iter != m_ActiveDownloads.end();) { - if (((*Iter)->m_State == STATE_READY) || ((*Iter)->m_State == STATE_INSTALLED)) { + if (((*Iter)->m_State == STATE_READY) || ((*Iter)->m_State == STATE_INSTALLED) || ((*Iter)->m_State == STATE_UNINSTALLED)) { delete *Iter; Iter = m_ActiveDownloads.erase(Iter); } else { @@ -414,7 +415,7 @@ void DownloadManager::addNXMDownload(const QString &url) NXMUrl nxmInfo(url); QString managedGame = ToQString(MOShared::GameInfo::instance().getGameShortName()); - qDebug("add nxm download", qPrintable(url)); + qDebug("add nxm download: %s", qPrintable(url)); if (nxmInfo.game().compare(managedGame, Qt::CaseInsensitive) != 0) { qDebug("download requested for wrong game (game: %s, url: %s)", qPrintable(managedGame), qPrintable(nxmInfo.game())); QMessageBox::information(NULL, tr("Wrong Game"), tr("The download link is for a mod for \"%1\" but this instance of MO " @@ -1089,11 +1090,7 @@ void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant userD info.m_FileName = result["uri"].toString(); info.m_FileTime = matchDate(result["date"].toString()); - if (userData.isValid()) { - m_RequestIDs.insert(m_NexusInterface->requestDownloadURL(modID, fileID, this, qVariantFromValue(info), userData.toString())); - } else { - m_RequestIDs.insert(m_NexusInterface->requestDownloadURL(modID, fileID, this, qVariantFromValue(info))); - } + m_RequestIDs.insert(m_NexusInterface->requestDownloadURL(modID, fileID, this, QVariant::fromValue(info))); } @@ -1176,8 +1173,6 @@ void DownloadManager::nxmDownloadURLsAvailable(int modID, int fileID, QVariant u m_RequestIDs.erase(idIter); } - qDebug("download urls received (modid %d, fileid %d)", modID, fileID); - NexusInfo info = userData.value(); QVariantList resultList = resultData.toList(); if (resultList.length() == 0) { @@ -1200,7 +1195,7 @@ void DownloadManager::nxmDownloadURLsAvailable(int modID, int fileID, QVariant u } -void DownloadManager::nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString) +void DownloadManager::nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString) { std::set::iterator idIter = m_RequestIDs.find(requestID); if (idIter == m_RequestIDs.end()) { @@ -1225,7 +1220,7 @@ void DownloadManager::nxmRequestFailed(int modID, QVariant userData, int request } } - removePending(modID, userData.toInt()); + removePending(modID, fileID); emit showMessage(tr("Failed to request file info from nexus: %1").arg(errorString)); } @@ -1243,14 +1238,18 @@ void DownloadManager::downloadFinished() TaskProgressManager::instance().forgetMe(info->m_TaskProgressId); bool error = false; - if ((info->m_State != STATE_CANCELING) && (info->m_State != STATE_PAUSING)) { + bool textData = reply->header(QNetworkRequest::ContentTypeHeader).toString().startsWith("text", Qt::CaseInsensitive); if ((info->m_Output.size() == 0) || ((reply->error() != QNetworkReply::NoError) && (reply->error() != QNetworkReply::OperationCanceledError)) || - reply->header(QNetworkRequest::ContentTypeHeader).toString().startsWith("text", Qt::CaseInsensitive)) { + textData) { if (info->m_Tries == 0) { - emit showMessage(tr("Download failed: %1 (%2)").arg(reply->errorString()).arg(reply->error())); + if (textData && (reply->error() == QNetworkReply::NoError)) { + emit showMessage(tr("Download failed. Server reported: %1").arg(readFileText(info->m_Output.fileName()))); + } else { + emit showMessage(tr("Download failed: %1 (%2)").arg(reply->errorString()).arg(reply->error())); + } } error = true; setState(info, STATE_PAUSING); @@ -1310,7 +1309,7 @@ void DownloadManager::downloadFinished() if ((info->m_Tries > 0) && error) { --info->m_Tries; - resumeDownload(index); + resumeDownloadInt(index); } } else { qWarning("no download index %d", index); diff --git a/src/downloadmanager.h b/src/downloadmanager.h index 62396666..80b99ad2 100644 --- a/src/downloadmanager.h +++ b/src/downloadmanager.h @@ -412,7 +412,7 @@ public slots: void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); - void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString); + void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString); private slots: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 14e27e76..582bc283 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -66,6 +66,7 @@ along with Mod Organizer. If not, see . #include #include #include +#include #include #include #include @@ -1737,6 +1738,9 @@ void MainWindow::refreshSaveList() savesDir.setPath(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getDocumentsDir() + L"\\" + path))); } + if (m_SavesWatcher.directories().length() > 0) { + m_SavesWatcher.removePaths(m_SavesWatcher.directories()); + } m_SavesWatcher.addPath(savesDir.absolutePath()); QStringList filters; @@ -3868,6 +3872,22 @@ void MainWindow::on_categoriesList_itemSelectionChanged() } +void MainWindow::deleteSavegame_clicked() +{ + QListWidgetItem *selectedItem = ui->savegameList->item(m_SelectedSaveGame); + if (selectedItem == NULL) { + return; + } + + QString fileName = selectedItem->data(Qt::UserRole).toString(); + + if (QMessageBox::question(this, tr("Confirm"), tr("Really delete \"%1\"?").arg(selectedItem->text()), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + shellDelete(QStringList() << fileName); + } +} + + void MainWindow::fixMods_clicked() { QListWidgetItem *selectedItem = ui->savegameList->item(m_SelectedSaveGame); @@ -3973,6 +3993,7 @@ void MainWindow::on_savegameList_customContextMenuRequested(const QPoint &pos) QMenu menu; menu.addAction(tr("Fix Mods..."), this, SLOT(fixMods_clicked())); + menu.addAction(tr("Delete"), this, SLOT(deleteSavegame_clicked())); menu.exec(ui->savegameList->mapToGlobal(pos)); } @@ -4721,7 +4742,7 @@ void MainWindow::nxmDownloadURLs(int, int, QVariant, QVariant resultData, int) } -void MainWindow::nxmRequestFailed(int modID, QVariant, int, const QString &errorString) +void MainWindow::nxmRequestFailed(int modID, int, QVariant, int, const QString &errorString) { if (modID == -1) { // must be the update-check that failed diff --git a/src/mainwindow.h b/src/mainwindow.h index e7b3f7e1..c01ce767 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -398,6 +398,7 @@ private slots: void openExplorer_clicked(); void information_clicked(); // savegame context menu + void deleteSavegame_clicked(); void fixMods_clicked(); // data-tree context menu void writeDataToFile(); @@ -464,7 +465,7 @@ private slots: void nxmUpdatesAvailable(const std::vector &modIDs, QVariant userData, QVariant resultData, int requestID); // void nxmEndorsementToggled(int, QVariant, QVariant resultData, int); void nxmDownloadURLs(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); - void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString); + void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString); void editCategories(); diff --git a/src/modinfo.cpp b/src/modinfo.cpp index 6569f897..85612b32 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -345,7 +345,7 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc connect(&m_NexusBridge, SIGNAL(descriptionAvailable(int,QVariant,QVariant)), this, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant))); connect(&m_NexusBridge, SIGNAL(endorsementToggled(int,QVariant,QVariant)), this, SLOT(nxmEndorsementToggled(int,QVariant,QVariant))); - connect(&m_NexusBridge, SIGNAL(requestFailed(int,QVariant,QString)), this, SLOT(nxmRequestFailed(int,QVariant,QString))); + connect(&m_NexusBridge, SIGNAL(requestFailed(int,int,QVariant,QString)), this, SLOT(nxmRequestFailed(int,int,QVariant,QString))); } @@ -439,7 +439,7 @@ void ModInfoRegular::nxmEndorsementToggled(int, QVariant, QVariant resultData) } -void ModInfoRegular::nxmRequestFailed(int, QVariant userData, const QString &errorMessage) +void ModInfoRegular::nxmRequestFailed(int, int, QVariant userData, const QString &errorMessage) { QString fullMessage = errorMessage; if (userData.canConvert() && (userData.toInt() == 1)) { diff --git a/src/modinfo.h b/src/modinfo.h index 677d8a82..83654c7e 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -762,7 +762,7 @@ private slots: void nxmDescriptionAvailable(int modID, QVariant userData, QVariant resultData); void nxmEndorsementToggled(int, QVariant userData, QVariant resultData); - void nxmRequestFailed(int modID, QVariant userData, const QString &errorMessage); + void nxmRequestFailed(int modID, int fileID, QVariant userData, const QString &errorMessage); private: diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp index 6b87822a..64dd6272 100644 --- a/src/nexusinterface.cpp +++ b/src/nexusinterface.cpp @@ -128,12 +128,12 @@ void NexusBridge::nxmEndorsementToggled(int modID, QVariant userData, QVariant r } } -void NexusBridge::nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorMessage) +void NexusBridge::nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorMessage) { std::set::iterator iter = m_RequestIDs.find(requestID); if (iter != m_RequestIDs.end()) { m_RequestIDs.erase(iter); - emit requestFailed(modID, userData, errorMessage); + emit requestFailed(modID, fileID, userData, errorMessage); } } @@ -257,8 +257,8 @@ int NexusInterface::requestDescription(int modID, QObject *receiver, QVariant us connect(this, SIGNAL(nxmDescriptionAvailable(int,QVariant,QVariant,int)), receiver, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant,int)), Qt::UniqueConnection); - connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)), - receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection); + connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)), + receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection); nextRequest(); return requestInfo.m_ID; @@ -273,8 +273,8 @@ int NexusInterface::requestUpdates(const std::vector &modIDs, QObject *rece connect(this, SIGNAL(nxmUpdatesAvailable(std::vector,QVariant,QVariant,int)), receiver, SLOT(nxmUpdatesAvailable(std::vector,QVariant,QVariant,int)), Qt::UniqueConnection); - connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)), - receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection); + connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)), + receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection); nextRequest(); return requestInfo.m_ID; @@ -307,8 +307,8 @@ int NexusInterface::requestFiles(int modID, QObject *receiver, QVariant userData connect(this, SIGNAL(nxmFilesAvailable(int,QVariant,QVariant,int)), receiver, SLOT(nxmFilesAvailable(int,QVariant,QVariant,int)), Qt::UniqueConnection); - connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)), - receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection); + connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)), + receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection); // QTimer::singleShot(1000, this, SLOT(fakeFiles())); // static int fID = 42; @@ -327,8 +327,8 @@ int NexusInterface::requestFileInfo(int modID, int fileID, QObject *receiver, QV connect(this, SIGNAL(nxmFileInfoAvailable(int,int,QVariant,QVariant,int)), receiver, SLOT(nxmFileInfoAvailable(int,int,QVariant,QVariant,int)), Qt::UniqueConnection); - connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)), - receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection); + connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)), + receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection); nextRequest(); return requestInfo.m_ID; @@ -343,8 +343,8 @@ int NexusInterface::requestDownloadURL(int modID, int fileID, QObject *receiver, connect(this, SIGNAL(nxmDownloadURLsAvailable(int,int,QVariant,QVariant,int)), receiver, SLOT(nxmDownloadURLsAvailable(int,int,QVariant,QVariant,int)), Qt::UniqueConnection); - connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)), - receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection); + connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)), + receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection); nextRequest(); return requestInfo.m_ID; @@ -360,8 +360,8 @@ int NexusInterface::requestToggleEndorsement(int modID, bool endorse, QObject *r connect(this, SIGNAL(nxmEndorsementToggled(int,QVariant,QVariant,int)), receiver, SLOT(nxmEndorsementToggled(int,QVariant,QVariant,int)), Qt::UniqueConnection); - connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)), - receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection); + connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)), + receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection); nextRequest(); return requestInfo.m_ID; @@ -437,7 +437,7 @@ void NexusInterface::requestFinished(std::list::iterator iter) if (reply->error() != QNetworkReply::NoError) { qWarning("request failed: %s", reply->errorString().toUtf8().constData()); - emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, reply->errorString()); + emit nxmRequestFailed(iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, reply->errorString()); } else { int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (statusCode == 301) { @@ -454,7 +454,7 @@ void NexusInterface::requestFinished(std::list::iterator iter) if (nexusError.length() == 0) { nexusError = tr("empty response"); } - emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, nexusError); + emit nxmRequestFailed(iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, nexusError); } else { bool ok; QVariant result = QtJson::parse(data, ok); @@ -480,7 +480,7 @@ void NexusInterface::requestFinished(std::list::iterator iter) } break; } } else { - emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, tr("invalid response")); + emit nxmRequestFailed(iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, tr("invalid response")); } } } diff --git a/src/nexusinterface.h b/src/nexusinterface.h index e7a01b0f..7b709e1c 100644 --- a/src/nexusinterface.h +++ b/src/nexusinterface.h @@ -105,7 +105,7 @@ public slots: void nxmFileInfoAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); void nxmEndorsementToggled(int modID, QVariant userData, QVariant resultData, int requestID); - void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorMessage); + void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorMessage); private: @@ -240,7 +240,7 @@ signals: void nxmFileInfoAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); void nxmEndorsementToggled(int modID, QVariant userData, QVariant resultData, int requestID); - void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString); + void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString); private slots: @@ -276,13 +276,13 @@ private: NXMRequestInfo(int modID, Type type, QVariant userData, const QString &url) : m_ModID(modID), m_FileID(0), m_Reply(NULL), m_Type(type), m_UserData(userData), - m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} + m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} NXMRequestInfo(std::vector modIDList, Type type, QVariant userData, const QString &url) : m_ModID(-1), m_ModIDList(modIDList), m_FileID(0), m_Reply(NULL), m_Type(type), m_UserData(userData), m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} NXMRequestInfo(int modID, int fileID, Type type, QVariant userData, const QString &url) : m_ModID(modID), m_FileID(fileID), m_Reply(NULL), m_Type(type), m_UserData(userData), - m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} + m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {} private: static QAtomicInt s_NextID; diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index a0045ab3..85137390 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -312,7 +312,6 @@ bool PluginList::readLoadOrder(const QString &fileName) void PluginList::readEnabledFrom(const QString &fileName) { -qDebug("read enabled from %s", qPrintable(fileName)); for (std::vector::iterator iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) { if (!iter->m_ForceEnabled) { iter->m_Enabled = false; diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp index 2a9ca893..3a0db83f 100644 --- a/src/selfupdater.cpp +++ b/src/selfupdater.cpp @@ -428,7 +428,7 @@ void SelfUpdater::nxmFilesAvailable(int, QVariant userData, QVariant resultData, } -void SelfUpdater::nxmRequestFailed(int, QVariant, int requestID, const QString &errorMessage) +void SelfUpdater::nxmRequestFailed(int, int, QVariant, int requestID, const QString &errorMessage) { if (requestID == m_UpdateRequestID) { m_UpdateRequestID = -1; diff --git a/src/selfupdater.h b/src/selfupdater.h index 2c4c1ecd..14f7e90a 100644 --- a/src/selfupdater.h +++ b/src/selfupdater.h @@ -87,7 +87,7 @@ public slots: void nxmDescriptionAvailable(int modID, QVariant userData, QVariant resultData, int requestID); void nxmFilesAvailable(int modID, QVariant userData, QVariant resultData, int requestID); - void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorMessage); + void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorMessage); void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID); signals: -- cgit v1.3.1 From 35fcf1c25b19b612771a2bc874df7631695e1457 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 22 Feb 2014 19:22:12 +0100 Subject: - made the indicator for drag&drop more visible - message boxes can now be made to not (re-)activate the window - executable names for starting from the command line are now case-insensitive --- src/executableslist.cpp | 2 +- src/messagedialog.cpp | 11 +++--- src/messagedialog.h | 95 +++++++++++++++++++++++++------------------------ src/moapplication.cpp | 51 ++++++++++++++++++++++++-- src/selfupdater.cpp | 2 +- 5 files changed, 104 insertions(+), 57 deletions(-) (limited to 'src/selfupdater.cpp') diff --git a/src/executableslist.cpp b/src/executableslist.cpp index c486a4ca..8f2da051 100644 --- a/src/executableslist.cpp +++ b/src/executableslist.cpp @@ -106,7 +106,7 @@ const Executable &ExecutablesList::find(const QString &title) const Executable &ExecutablesList::find(const QString &title) { for (std::vector::iterator iter = m_Executables.begin(); iter != m_Executables.end(); ++iter) { - if (iter->m_Title == title) { + if (QString::compare(iter->m_Title, title, Qt::CaseInsensitive) == 0) { return *iter; } } diff --git a/src/messagedialog.cpp b/src/messagedialog.cpp index 8cef1b7c..62696938 100644 --- a/src/messagedialog.cpp +++ b/src/messagedialog.cpp @@ -79,12 +79,13 @@ void MessageDialog::resizeEvent(QResizeEvent *event) } -void MessageDialog::showMessage(const QString &text, QWidget *reference) +void MessageDialog::showMessage(const QString &text, QWidget *reference, bool bringToFront) { - qDebug("%s", qPrintable(text)); if (reference != NULL) { - MessageDialog *dialog = new MessageDialog(text, reference); - dialog->show(); - reference->activateWindow(); + if (bringToFront || (qApp->activeWindow() != NULL)) { + MessageDialog *dialog = new MessageDialog(text, reference); + dialog->show(); + reference->activateWindow(); + } } } diff --git a/src/messagedialog.h b/src/messagedialog.h index 846448d6..0dbc0e6e 100644 --- a/src/messagedialog.h +++ b/src/messagedialog.h @@ -17,50 +17,51 @@ You should have received a copy of the GNU General Public License along with Mod Organizer. If not, see . */ -#ifndef MESSAGEDIALOG_H -#define MESSAGEDIALOG_H - -#include - -namespace Ui { - class MessageDialog; -} - -/** - * borderless dialog used to display short messages that will automatically - * vanish after a moment - **/ -class MessageDialog : public QDialog -{ - Q_OBJECT - -public: - /** - * @brief constructor - * - * @param text the message to display - * @param reference parent widget. This will also be used to position the message at the bottom center of the dialog - **/ - - explicit MessageDialog(const QString &text, QWidget *reference); - - ~MessageDialog(); - - /** - * factory function for message dialogs. This can be used as a fire-and-forget. The message - * will automatically positioned to the reference dialog and get a reasonable view time - * - * @param text the text to display. The length of this text is used to determine how long the dialog is to be shown - * @param reference the reference widget on top of which the message should be displayed - **/ - static void showMessage(const QString &text, QWidget *reference); - -protected: - - virtual void resizeEvent(QResizeEvent *event); - -private: - Ui::MessageDialog *ui; -}; - -#endif // MESSAGEDIALOG_H +#ifndef MESSAGEDIALOG_H +#define MESSAGEDIALOG_H + +#include + +namespace Ui { + class MessageDialog; +} + +/** + * borderless dialog used to display short messages that will automatically + * vanish after a moment + **/ +class MessageDialog : public QDialog +{ + Q_OBJECT + +public: + /** + * @brief constructor + * + * @param text the message to display + * @param reference parent widget. This will also be used to position the message at the bottom center of the dialog + **/ + + explicit MessageDialog(const QString &text, QWidget *reference); + + ~MessageDialog(); + + /** + * factory function for message dialogs. This can be used as a fire-and-forget. The message + * will automatically positioned to the reference dialog and get a reasonable view time + * + * @param text the text to display. The length of this text is used to determine how long the dialog is to be shown + * @param reference the reference widget on top of which the message should be displayed + * @param true if the message should bring MO to front to ensure this message is visible + **/ + static void showMessage(const QString &text, QWidget *reference, bool bringToFront = true); + +protected: + + virtual void resizeEvent(QResizeEvent *event); + +private: + Ui::MessageDialog *ui; +}; + +#endif // MESSAGEDIALOG_H diff --git a/src/moapplication.cpp b/src/moapplication.cpp index 7e3104db..f09b2fd9 100644 --- a/src/moapplication.cpp +++ b/src/moapplication.cpp @@ -25,6 +25,50 @@ along with Mod Organizer. If not, see . #include #include #include +#include +#include +#include +#include + + +#include + + +class ProxyStyle : public QProxyStyle { +public: + ProxyStyle(QStyle *baseStyle = 0) + : QProxyStyle(baseStyle) + { + } + + void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { + if(element == QStyle::PE_IndicatorItemViewItemDrop) { + painter->setRenderHint(QPainter::Antialiasing, true); + + QColor col(option->palette.foreground().color()); + QPen pen(col); + pen.setWidth(2); + col.setAlpha(50); + QBrush brush(col); + + painter->setPen(pen); + painter->setBrush(brush); + if(option->rect.height() == 0) { + QPoint tri[3] = { + option->rect.topLeft(), + option->rect.topLeft() + QPoint(-5, 5), + option->rect.topLeft() + QPoint(-5, -5) + }; + painter->drawPolygon(tri, 3); + painter->drawLine(QPoint(option->rect.topLeft().x(), option->rect.topLeft().y()), option->rect.topRight()); + } else { + painter->drawRoundedRect(option->rect, 5, 5); + } + } else { + QProxyStyle::drawPrimitive(element, option, painter, widget); + } + } +}; MOApplication::MOApplication(int argc, char **argv) @@ -32,6 +76,7 @@ MOApplication::MOApplication(int argc, char **argv) { connect(&m_StyleWatcher, SIGNAL(fileChanged(QString)), SLOT(updateStyle(QString))); m_DefaultStyle = style()->objectName(); + setStyle(new ProxyStyle(style())); } @@ -79,13 +124,13 @@ bool MOApplication::notify(QObject *receiver, QEvent *event) void MOApplication::updateStyle(const QString &fileName) { if (fileName == "Plastique") { - setStyle(new QPlastiqueStyle); + setStyle(new ProxyStyle(new QPlastiqueStyle)); setStyleSheet(""); } else if (fileName == "Cleanlooks") { - setStyle(new QCleanlooksStyle); + setStyle(new ProxyStyle(new QCleanlooksStyle)); setStyleSheet(""); } else { - setStyle(m_DefaultStyle); + setStyle(new ProxyStyle(QStyleFactory::create(m_DefaultStyle))); if (QFile::exists(fileName)) { setStyleSheet(QString("file:///%1").arg(fileName)); } else { diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp index 3a0db83f..14df8566 100644 --- a/src/selfupdater.cpp +++ b/src/selfupdater.cpp @@ -437,7 +437,7 @@ void SelfUpdater::nxmRequestFailed(int, int, QVariant, int requestID, const QStr --m_Attempts; } else { qWarning("Failed to retrieve update information: %s", qPrintable(errorMessage)); - MessageDialog::showMessage(tr("Failed to retrieve update information: %1").arg(errorMessage), m_Parent); + MessageDialog::showMessage(tr("Failed to retrieve update information: %1").arg(errorMessage), m_Parent, false); } } } -- cgit v1.3.1