diff options
| author | Tannin <devnull@localhost> | 2015-01-04 10:33:37 +0100 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2015-01-04 10:33:37 +0100 |
| commit | b415db619ed027ec2acd283983624293274b090f (patch) | |
| tree | 3b09112799f2728229ed98bca7b342f1e8d1232a /src | |
| parent | bd8267993d1ed0292200f3052e3c30d4fc9c84f7 (diff) | |
| parent | b2d04d70fc6284797e1bf29f55a375cb59d012be (diff) | |
Merge
Diffstat (limited to 'src')
74 files changed, 875 insertions, 786 deletions
diff --git a/src/activatemodsdialog.cpp b/src/activatemodsdialog.cpp index be6eef54..fd56ae3e 100644 --- a/src/activatemodsdialog.cpp +++ b/src/activatemodsdialog.cpp @@ -72,7 +72,7 @@ std::set<QString> ActivateModsDialog::getModsToActivate() for (int row = 0; row < modsTable->rowCount(); ++row) {
QComboBox *comboBox = dynamic_cast<QComboBox*>(modsTable->cellWidget(row, 1));
- if (comboBox != NULL) {
+ if (comboBox != nullptr) {
result.insert(comboBox->currentText());
}
}
@@ -87,7 +87,7 @@ std::set<QString> ActivateModsDialog::getESPsToActivate() for (int row = 0; row < modsTable->rowCount(); ++row) {
QComboBox *comboBox = dynamic_cast<QComboBox*>(modsTable->cellWidget(row, 1));
- if (comboBox != NULL) {
+ if (comboBox != nullptr) {
QLabel *espName = dynamic_cast<QLabel*>(modsTable->cellWidget(row, 0));
result.insert(espName->text());
diff --git a/src/bbcode.h b/src/bbcode.h index f88e9a6c..708dfe71 100644 --- a/src/bbcode.h +++ b/src/bbcode.h @@ -29,7 +29,7 @@ namespace BBCode { /**
* @brief convert a string with BB Code-Tags to HTML
* @param input the input string with BB tags
- * @param replaceOccured if not NULL, this parameter will be set to true if any bb tags were replaced
+ * @param replaceOccured if not nullptr, this parameter will be set to true if any bb tags were replaced
* @return the same string in html representation
**/
QString convertToHTML(const QString &input);
diff --git a/src/browserdialog.cpp b/src/browserdialog.cpp index 933b4bc0..1401b941 100644 --- a/src/browserdialog.cpp +++ b/src/browserdialog.cpp @@ -24,11 +24,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "report.h"
#include "persistentcookiejar.h"
-#include <gameinfo.h>
#include "json.h"
#include <utility.h>
#include <gameinfo.h>
+#include "settings.h"
#include <QNetworkCookieJar>
#include <QNetworkCookie>
#include <QMenu>
@@ -49,7 +49,7 @@ BrowserDialog::BrowserDialog(QWidget *parent) ui->setupUi(this);
m_AccessManager->setCookieJar(new PersistentCookieJar(
- QDir::fromNativeSeparators(MOBase::ToQString(MOShared::GameInfo::instance().getCacheDir())) + "/cookies.dat", this));
+ QDir::fromNativeSeparators(Settings::instance().getCacheDirectory() + "/cookies.dat")));
Qt::WindowFlags flags = windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint;
Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint;
@@ -115,7 +115,7 @@ BrowserView *BrowserDialog::getCurrentView() void BrowserDialog::urlChanged(const QUrl &url)
{
BrowserView *currentView = getCurrentView();
- if (currentView != NULL) {
+ if (currentView != nullptr) {
ui->backBtn->setEnabled(currentView->history()->canGoBack());
ui->fwdBtn->setEnabled(currentView->history()->canGoForward());
}
@@ -192,12 +192,12 @@ void BrowserDialog::unsupportedContent(QNetworkReply *reply) {
try {
QWebPage *page = qobject_cast<QWebPage*>(sender());
- if (page == NULL) {
+ if (page == nullptr) {
qCritical("sender not a page");
return;
}
BrowserView *view = qobject_cast<BrowserView*>(page->view());
- if (view == NULL) {
+ if (view == nullptr) {
qCritical("no view?");
return;
}
@@ -231,7 +231,7 @@ void BrowserDialog::tabCloseRequested(int index) void BrowserDialog::on_backBtn_clicked()
{
BrowserView *currentView = getCurrentView();
- if (currentView != NULL) {
+ if (currentView != nullptr) {
currentView->back();
}
}
@@ -239,7 +239,7 @@ void BrowserDialog::on_backBtn_clicked() void BrowserDialog::on_fwdBtn_clicked()
{
BrowserView *currentView = getCurrentView();
- if (currentView != NULL) {
+ if (currentView != nullptr) {
currentView->forward();
}
}
@@ -254,7 +254,7 @@ void BrowserDialog::startSearch() void BrowserDialog::on_searchEdit_returnPressed()
{
BrowserView *currentView = getCurrentView();
- if (currentView != NULL) {
+ if (currentView != nullptr) {
currentView->findText(ui->searchEdit->text(), QWebPage::FindWrapsAroundDocument);
}
}
@@ -267,7 +267,7 @@ void BrowserDialog::on_refreshBtn_clicked() void BrowserDialog::on_browserTabWidget_currentChanged(int index)
{
BrowserView *currentView = qobject_cast<BrowserView*>(ui->browserTabWidget->widget(index));
- if (currentView != NULL) {
+ if (currentView != nullptr) {
ui->backBtn->setEnabled(currentView->history()->canGoBack());
ui->fwdBtn->setEnabled(currentView->history()->canGoForward());
}
@@ -276,7 +276,7 @@ void BrowserDialog::on_browserTabWidget_currentChanged(int index) void BrowserDialog::on_urlEdit_returnPressed()
{
QWebView *currentView = getCurrentView();
- if (currentView != NULL) {
+ if (currentView != nullptr) {
currentView->setUrl(QUrl(ui->urlEdit->text()));
}
}
diff --git a/src/browserdialog.h b/src/browserdialog.h index 10b44fac..680f5c03 100644 --- a/src/browserdialog.h +++ b/src/browserdialog.h @@ -23,7 +23,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "browserview.h"
#include "tutorialcontrol.h"
#include <QDialog>
-#include <QProgressBar>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QTimer>
diff --git a/src/categories.cpp b/src/categories.cpp index 57e18a28..1d5fdefe 100644 --- a/src/categories.cpp +++ b/src/categories.cpp @@ -32,7 +32,7 @@ using namespace MOBase; using namespace MOShared;
-CategoryFactory* CategoryFactory::s_Instance = NULL;
+CategoryFactory* CategoryFactory::s_Instance = nullptr;
QString CategoryFactory::categoriesFilePath()
@@ -93,7 +93,7 @@ CategoryFactory::CategoryFactory() CategoryFactory &CategoryFactory::instance()
{
- if (s_Instance == NULL) {
+ if (s_Instance == nullptr) {
s_Instance = new CategoryFactory;
}
return *s_Instance;
@@ -133,7 +133,7 @@ void CategoryFactory::setParents() void CategoryFactory::cleanup()
{
delete s_Instance;
- s_Instance = NULL;
+ s_Instance = nullptr;
}
diff --git a/src/directoryrefresher.cpp b/src/directoryrefresher.cpp index 1a5c025d..d21af1e3 100644 --- a/src/directoryrefresher.cpp +++ b/src/directoryrefresher.cpp @@ -31,7 +31,7 @@ using namespace MOShared; DirectoryRefresher::DirectoryRefresher()
- : m_DirectoryStructure(NULL)
+ : m_DirectoryStructure(nullptr)
{
}
@@ -44,7 +44,7 @@ DirectoryEntry *DirectoryRefresher::getDirectoryStructure() {
QMutexLocker locker(&m_RefreshLock);
DirectoryEntry *result = m_DirectoryStructure;
- m_DirectoryStructure = NULL;
+ m_DirectoryStructure = nullptr;
return result;
}
@@ -104,7 +104,7 @@ void DirectoryRefresher::addModFilesToStructure(DirectoryEntry *directoryStructu foreach (const QString &filename, stealFiles) {
QFileInfo fileInfo(filename);
FileEntry::Ptr file = directoryStructure->findFile(ToWString(fileInfo.fileName()));
- if (file.get() != NULL) {
+ if (file.get() != nullptr) {
if (file->getOrigin() == 0) {
// replace data as the origin on this bsa
file->removeOrigin(0);
@@ -134,7 +134,7 @@ void DirectoryRefresher::refresh() delete m_DirectoryStructure;
- m_DirectoryStructure = new DirectoryEntry(L"data", NULL, 0);
+ m_DirectoryStructure = new DirectoryEntry(L"data", nullptr, 0);
std::wstring dataDirectory = GameInfo::instance().getGameDirectory() + L"\\data";
m_DirectoryStructure->addFromOrigin(L"data", dataDirectory, 0);
diff --git a/src/downloadlistwidget.cpp b/src/downloadlistwidget.cpp index 9d276de9..2a398bc0 100644 --- a/src/downloadlistwidget.cpp +++ b/src/downloadlistwidget.cpp @@ -255,7 +255,7 @@ void DownloadListWidgetDelegate::issueResume() void DownloadListWidgetDelegate::issueDeleteAll()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all finished downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, true);
@@ -264,7 +264,7 @@ void DownloadListWidgetDelegate::issueDeleteAll() void DownloadListWidgetDelegate::issueDeleteCompleted()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all installed downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, true);
@@ -273,7 +273,7 @@ void DownloadListWidgetDelegate::issueDeleteCompleted() void DownloadListWidgetDelegate::issueRemoveFromViewAll()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all finished downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, false);
@@ -282,7 +282,7 @@ void DownloadListWidgetDelegate::issueRemoveFromViewAll() void DownloadListWidgetDelegate::issueRemoveFromViewCompleted()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all installed downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, false);
diff --git a/src/downloadlistwidgetcompact.cpp b/src/downloadlistwidgetcompact.cpp index 21a690ab..a298494a 100644 --- a/src/downloadlistwidgetcompact.cpp +++ b/src/downloadlistwidgetcompact.cpp @@ -90,7 +90,7 @@ void DownloadListWidgetCompactDelegate::paintPendingDownload(int downloadIndex) {
std::pair<int, int> nexusids = m_Manager->getPendingDownload(downloadIndex);
m_NameLabel->setText(tr("< mod %1 file %2 >").arg(nexusids.first).arg(nexusids.second));
- if (m_SizeLabel != NULL) {
+ if (m_SizeLabel != nullptr) {
m_SizeLabel->setText("???");
}
m_DoneLabel->setVisible(true);
@@ -110,7 +110,7 @@ void DownloadListWidgetCompactDelegate::paintRegularDownload(int downloadIndex) DownloadManager::DownloadState state = m_Manager->getState(downloadIndex);
- if ((m_SizeLabel != NULL) && (state >= DownloadManager::STATE_READY)) {
+ if ((m_SizeLabel != nullptr) && (state >= DownloadManager::STATE_READY)) {
m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1048576));
}
@@ -242,7 +242,7 @@ void DownloadListWidgetCompactDelegate::issueResume() void DownloadListWidgetCompactDelegate::issueDeleteAll()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all finished downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, true);
@@ -251,7 +251,7 @@ void DownloadListWidgetCompactDelegate::issueDeleteAll() void DownloadListWidgetCompactDelegate::issueDeleteCompleted()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all installed downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, true);
@@ -260,7 +260,7 @@ void DownloadListWidgetCompactDelegate::issueDeleteCompleted() void DownloadListWidgetCompactDelegate::issueRemoveFromViewAll()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will permanently remove all finished downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, false);
@@ -269,7 +269,7 @@ void DownloadListWidgetCompactDelegate::issueRemoveFromViewAll() void DownloadListWidgetCompactDelegate::issueRemoveFromViewCompleted()
{
- if (QMessageBox::question(NULL, tr("Are you sure?"),
+ if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will permanently remove all installed downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, false);
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index b803d170..1d141656 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -75,7 +75,7 @@ DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createFromMeta(con QString metaFileName = filePath + ".meta";
QSettings metaFile(metaFileName, QSettings::IniFormat);
if (!showHidden && metaFile.value("removed", false).toBool()) {
- return NULL;
+ return nullptr;
} else {
info->m_Hidden = metaFile.value("removed", false).toBool();
}
@@ -308,7 +308,7 @@ void DownloadManager::refreshList() QString fileName = QDir::fromNativeSeparators(m_OutputDirectory) + "/" + file;
DownloadInfo *info = DownloadInfo::createFromMeta(fileName, m_ShowHidden);
- if (info != NULL) {
+ if (info != nullptr) {
m_ActiveDownloads.push_front(info);
}
}
@@ -368,7 +368,7 @@ bool DownloadManager::addDownload(QNetworkReply *reply, const QStringList &URLs, }
if (QFile::exists(m_OutputDirectory + "/" + baseName) &&
- (QMessageBox::question(NULL, tr("Download again?"), tr("A file with the same name has already been downloaded. "
+ (QMessageBox::question(nullptr, tr("Download again?"), tr("A file with the same name has already been downloaded. "
"Do you want to download it again? The new file will receive a different name."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)) {
removePending(modID, fileID);
@@ -453,7 +453,7 @@ void DownloadManager::addNXMDownload(const QString &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 "
+ QMessageBox::information(nullptr, tr("Wrong Game"), tr("The download link is for a mod for \"%1\" but this instance of MO "
"has been set up for \"%2\".").arg(nxmInfo.game()).arg(managedGame), QMessageBox::Ok);
return;
}
@@ -608,7 +608,7 @@ void DownloadManager::pauseDownload(int index) DownloadInfo *info = m_ActiveDownloads.at(index);
if (info->m_State == STATE_DOWNLOADING) {
- if ((info->m_Reply != NULL) && (info->m_Reply->isRunning())) {
+ if ((info->m_Reply != nullptr) && (info->m_Reply->isRunning())) {
setState(info, STATE_PAUSING);
} else {
setState(info, STATE_PAUSED);
@@ -664,7 +664,7 @@ DownloadManager::DownloadInfo *DownloadManager::downloadInfoByID(unsigned int id if (iter != m_ActiveDownloads.end()) {
return *iter;
} else {
- return NULL;
+ return nullptr;
}
}
@@ -694,8 +694,8 @@ void DownloadManager::queryInfo(int index) if (info->m_FileInfo->modID < 0) {
QString modIDString;
while (modIDString.isEmpty()) {
- modIDString = QInputDialog::getText(NULL, tr("Please enter the nexus mod id"), tr("Mod ID:"), QLineEdit::Normal,
- QString(), NULL, 0, Qt::ImhFormattedNumbersOnly);
+ modIDString = QInputDialog::getText(nullptr, tr("Please enter the nexus mod id"), tr("Mod ID:"), QLineEdit::Normal,
+ QString(), nullptr, 0, Qt::ImhFormattedNumbersOnly);
if (modIDString.isNull()) {
// canceled
return;
@@ -704,7 +704,7 @@ void DownloadManager::queryInfo(int index) modIDString.clear();
}
}
- info->m_FileInfo->modID = modIDString.toInt(NULL, 10);
+ info->m_FileInfo->modID = modIDString.toInt(nullptr, 10);
}
}
info->m_ReQueried = true;
@@ -962,13 +962,13 @@ DownloadManager::DownloadInfo *DownloadManager::findDownload(QObject *reply, int // reverse search as newer, thus more relevant, downloads are at the end
for (int i = m_ActiveDownloads.size() - 1; i >= 0; --i) {
if (m_ActiveDownloads[i]->m_Reply == reply) {
- if (index != NULL) {
+ if (index != nullptr) {
*index = i;
}
return m_ActiveDownloads[i];
}
}
- return NULL;
+ return nullptr;
}
@@ -980,7 +980,7 @@ void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) int index = 0;
try {
DownloadInfo *info = findDownload(this->sender(), &index);
- if (info != NULL) {
+ if (info != nullptr) {
if (info->m_State == STATE_CANCELING) {
setState(info, STATE_CANCELED);
} else if (info->m_State == STATE_PAUSING) {
@@ -1007,7 +1007,7 @@ void DownloadManager::downloadReadyRead() {
try {
DownloadInfo *info = findDownload(this->sender());
- if (info != NULL) {
+ if (info != nullptr) {
info->m_Output.write(info->m_Reply->readAll());
}
} catch (const std::bad_alloc&) {
@@ -1059,7 +1059,7 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r QVariantMap result = resultData.toMap();
DownloadInfo *info = downloadInfoByID(userData.toInt());
- if (info == NULL) return;
+ if (info == nullptr) return;
info->m_FileInfo->categoryID = result["category_id"].toInt();
info->m_FileInfo->modName = result["name"].toString().trimmed();
info->m_FileInfo->newestVersion.parse(result["version"].toString());
@@ -1104,7 +1104,7 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD }
DownloadInfo *info = downloadInfoByID(userData.toInt());
- if (info == NULL) return;
+ if (info == nullptr) return;
QVariantList result = resultData.toList();
@@ -1323,7 +1323,7 @@ void DownloadManager::downloadFinished() int index = 0;
DownloadInfo *info = findDownload(this->sender(), &index);
- if (info != NULL) {
+ if (info != nullptr) {
QNetworkReply *reply = info->m_Reply;
QByteArray data;
if (reply->isOpen()) {
@@ -1437,7 +1437,7 @@ void DownloadManager::metaDataChanged() int index = 0;
DownloadInfo *info = findDownload(this->sender(), &index);
- if (info != NULL) {
+ if (info != nullptr) {
QString newName = getFileNameFromNetworkReply(info->m_Reply);
if (!newName.isEmpty() && (newName != info->m_FileName)) {
info->setName(getDownloadFileName(newName), true);
diff --git a/src/downloadmanager.h b/src/downloadmanager.h index 95288884..52da27b8 100644 --- a/src/downloadmanager.h +++ b/src/downloadmanager.h @@ -439,7 +439,7 @@ private: bool addDownload(const QStringList &URLs, int modID, int fileID, const MOBase::ModRepositoryFileInfo *fileInfo);
// important: the caller has to lock the list-mutex, otherwise the DownloadInfo-pointer might get invalidated at any time
- DownloadInfo *findDownload(QObject *reply, int *index = NULL) const;
+ DownloadInfo *findDownload(QObject *reply, int *index = nullptr) const;
void removeFile(int index, bool deleteFile);
diff --git a/src/dummybsa.cpp b/src/dummybsa.cpp index df757139..49c6ee53 100644 --- a/src/dummybsa.cpp +++ b/src/dummybsa.cpp @@ -65,7 +65,7 @@ static unsigned long long genHash(const char* fileName) fileNameLower[i] = '\0';
char* ext = strrchr(fileNameLower, '.');
- if (ext == NULL) {
+ if (ext == nullptr) {
ext = fileNameLower + strlen(fileNameLower);
}
@@ -117,7 +117,7 @@ static unsigned long long genHash(const char* fileName) unsigned char *fileNameLowerU = reinterpret_cast<unsigned char*>(fileNameLower);
char* ext = strrchr(fileNameLower, '.');
- if (ext == NULL) {
+ if (ext == nullptr) {
ext = fileNameLower + strlen(fileNameLower);
}
unsigned char *extU = reinterpret_cast<unsigned char*>(ext);
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp index d83d14c8..da207f93 100644 --- a/src/editexecutablesdialog.cpp +++ b/src/editexecutablesdialog.cpp @@ -31,7 +31,7 @@ using namespace MOShared; EditExecutablesDialog::EditExecutablesDialog(const ExecutablesList &executablesList, QWidget *parent) : TutorableDialog("EditExecutables", parent), - ui(new Ui::EditExecutablesDialog), m_CurrentItem(NULL), m_ExecutablesList(executablesList) + ui(new Ui::EditExecutablesDialog), m_CurrentItem(nullptr), m_ExecutablesList(executablesList) { ui->setupUi(this); @@ -87,7 +87,7 @@ void EditExecutablesDialog::resetInput() ui->appIDOverwriteEdit->clear(); ui->overwriteAppIDBox->setChecked(false); ui->closeCheckBox->setChecked(false); - m_CurrentItem = NULL; + m_CurrentItem = nullptr; } @@ -129,7 +129,7 @@ void EditExecutablesDialog::on_browseButton_clicked() { // try to find java automatically std::wstring binaryNameW = ToWString(binaryName); WCHAR buffer[MAX_PATH]; - if (::FindExecutableW(binaryNameW.c_str(), NULL, buffer) > (HINSTANCE)32) { + if (::FindExecutableW(binaryNameW.c_str(), nullptr, buffer) > (HINSTANCE)32) { DWORD binaryType = 0UL; if (!::GetBinaryTypeW(binaryNameW.c_str(), &binaryType)) { qDebug("failed to determine binary type of \"%ls\": %lu", binaryNameW.c_str(), ::GetLastError()); @@ -205,7 +205,7 @@ void EditExecutablesDialog::on_titleEdit_textChanged(const QString &arg1) bool EditExecutablesDialog::executableChanged() { - if (m_CurrentItem != NULL) { + if (m_CurrentItem != nullptr) { const Executable &selectedExecutable = m_CurrentItem->data(Qt::UserRole).value<Executable>(); return selectedExecutable.m_Arguments != ui->argumentsEdit->text() diff --git a/src/executableslist.cpp b/src/executableslist.cpp index 7fd228d0..25b6bb0f 100644 --- a/src/executableslist.cpp +++ b/src/executableslist.cpp @@ -72,18 +72,20 @@ ExecutablesList::~ExecutablesList() void ExecutablesList::init(IPluginGame *game)
{
+ Q_ASSERT(game != nullptr);
m_Executables.clear();
for (const ExecutableInfo &info : game->executables()) {
- addExecutableInternal(info.title(),
- info.binary().absoluteFilePath(),
- info.arguments().join(" "),
- info.workingDirectory().absolutePath(),
- info.closeMO(),
- info.steamAppID());
+ if (info.isValid()) {
+ addExecutableInternal(info.title(),
+ info.binary().absoluteFilePath(),
+ info.arguments().join(" "),
+ info.workingDirectory().absolutePath(),
+ info.closeMO(),
+ info.steamAppID());
+ }
}
}
-
void ExecutablesList::getExecutables(std::vector<Executable>::iterator &begin, std::vector<Executable>::iterator &end)
{
begin = m_Executables.begin();
diff --git a/src/genericicondelegate.h b/src/genericicondelegate.h index 8bc75e27..9842d09a 100644 --- a/src/genericicondelegate.h +++ b/src/genericicondelegate.h @@ -20,7 +20,7 @@ public: * of the view, the delegate will turn off this behaviour if the column is smaller than "compactSize"
* @param compactSize see explanation of logicalIndex
*/
- GenericIconDelegate(QObject *parent = NULL, int role = Qt::UserRole + 1, int logicalIndex = -1, int compactSize = 150);
+ GenericIconDelegate(QObject *parent = nullptr, int role = Qt::UserRole + 1, int logicalIndex = -1, int compactSize = 150);
public slots:
void columnResized(int logicalIndex, int oldSize, int newSize);
private:
diff --git a/src/helper.cpp b/src/helper.cpp index d0825d10..f47a468a 100644 --- a/src/helper.cpp +++ b/src/helper.cpp @@ -40,7 +40,7 @@ bool helperExec(LPCWSTR moDirectory, LPCWSTR commandLine) execInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
execInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
- execInfo.hwnd = NULL;
+ execInfo.hwnd = nullptr;
execInfo.lpVerb = L"runas";
execInfo.lpFile = fileName;
execInfo.lpParameters = commandLine;
diff --git a/src/installationmanager.cpp b/src/installationmanager.cpp index ebccd36d..7c54828e 100644 --- a/src/installationmanager.cpp +++ b/src/installationmanager.cpp @@ -61,7 +61,7 @@ typedef Archive* (*CreateArchiveType)(); template <typename T> T resolveFunction(QLibrary &lib, const char *name)
{
T temp = reinterpret_cast<T>(lib.resolve(name));
- if (temp == NULL) {
+ if (temp == nullptr) {
throw std::runtime_error(QObject::tr("invalid 7-zip32.dll: %1").arg(lib.errorString()).toLatin1().constData());
}
return temp;
@@ -69,7 +69,8 @@ template <typename T> T resolveFunction(QLibrary &lib, const char *name) InstallationManager::InstallationManager()
- : m_InstallationProgress(nullptr), m_SupportedExtensions(boost::assign::list_of("zip")("rar")("7z")("fomod")("001"))
+ : m_InstallationProgress(nullptr)
+ , m_SupportedExtensions({ "zip", "rar", "7z", "fomod", "001" })
{
QLibrary archiveLib("dlls\\archive.dll");
if (!archiveLib.load()) {
@@ -94,7 +95,7 @@ InstallationManager::~InstallationManager() void InstallationManager::setParentWidget(QWidget *widget)
{
- m_InstallationProgress.setParent(widget);
+ m_InstallationProgress.setParent(widget, Qt::Dialog);
for (IPluginInstaller *installer : m_Installers) {
installer->setParentWidget(widget);
}
@@ -103,7 +104,7 @@ void InstallationManager::setParentWidget(QWidget *widget) void InstallationManager::queryPassword(LPSTR password)
{
- QString result = QInputDialog::getText(NULL, tr("Password required"), tr("Password"), QLineEdit::Password);
+ QString result = QInputDialog::getText(nullptr, tr("Password required"), tr("Password"), QLineEdit::Password);
strncpy(password, result.toLocal8Bit().constData(), MAX_PASSWORD_LENGTH);
}
@@ -231,10 +232,10 @@ QStringList InstallationManager::extractFiles(const QStringList &filesOrig, bool const wchar_t *targetFile = data[i]->getFileName();
if (flatten) {
targetFile = wcsrchr(data[i]->getFileName(), '\\');
- if (targetFile == NULL) {
+ if (targetFile == nullptr) {
targetFile = wcsrchr(data[i]->getFileName(), '/');
}
- if (targetFile == NULL) {
+ if (targetFile == nullptr) {
qCritical("failed to find backslash in %ls", data[i]->getFileName());
continue;
} else {
@@ -383,7 +384,7 @@ DirectoryTree::Node *InstallationManager::getSimpleArchiveBase(DirectoryTree *da currentNode = *currentNode->nodesBegin();
} else {
qDebug("not a simple archive");
- return NULL;
+ return nullptr;
}
}
}
@@ -687,7 +688,7 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString> }
ON_BLOCK_EXIT(std::bind(&InstallationManager::postInstallCleanup, this));
- QScopedPointer<DirectoryTree> filesTree(archiveOpen ? createFilesTree() : NULL);
+ QScopedPointer<DirectoryTree> filesTree(archiveOpen ? createFilesTree() : nullptr);
IPluginInstaller::EInstallResult installResult = IPluginInstaller::RESULT_NOTATTEMPTED;
std::sort(m_Installers.begin(), m_Installers.end(), [] (IPluginInstaller *LHS, IPluginInstaller *RHS) {
@@ -712,8 +713,8 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString> try {
{ // simple case
IPluginInstallerSimple *installerSimple = dynamic_cast<IPluginInstallerSimple*>(installer);
- if ((installerSimple != NULL) &&
- (filesTree != NULL) && (installer->isArchiveSupported(*filesTree))) {
+ if ((installerSimple != nullptr) &&
+ (filesTree != nullptr) && (installer->isArchiveSupported(*filesTree))) {
installResult = installerSimple->install(modName, *filesTree, version, modID);
if (installResult == IPluginInstaller::RESULT_SUCCESS) {
mapToArchive(filesTree.data());
@@ -727,9 +728,9 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString> { // custom case
IPluginInstallerCustom *installerCustom = dynamic_cast<IPluginInstallerCustom*>(installer);
- if ((installerCustom != NULL) &&
- (((filesTree != NULL) && installer->isArchiveSupported(*filesTree)) ||
- ((filesTree == NULL) && installerCustom->isArchiveSupported(fileName)))) {
+ if ((installerCustom != nullptr) &&
+ (((filesTree != nullptr) && installer->isArchiveSupported(*filesTree)) ||
+ ((filesTree == nullptr) && installerCustom->isArchiveSupported(fileName)))) {
std::set<QString> installerExtensions = installerCustom->supportedExtensions();
if (installerExtensions.find(fileInfo.suffix()) != installerExtensions.end()) {
installResult = installerCustom->install(modName, fileName, version, modID);
@@ -755,7 +756,7 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString> } break;
case IPluginInstaller::RESULT_SUCCESS:
case IPluginInstaller::RESULT_SUCCESSCANCEL: {
- if (filesTree != NULL) {
+ if (filesTree != nullptr) {
DirectoryTree::node_iterator iniTweakNode = filesTree->nodeFind(DirectoryTreeInformation("INI Tweaks"));
hasIniTweaks = (iniTweakNode != filesTree->nodesEnd()) &&
((*iniTweakNode)->numLeafs() != 0);
@@ -813,7 +814,7 @@ void InstallationManager::registerInstaller(IPluginInstaller *installer) m_Installers.push_back(installer);
installer->setInstallationManager(this);
IPluginInstallerCustom *installerCustom = dynamic_cast<IPluginInstallerCustom*>(installer);
- if (installerCustom != NULL) {
+ if (installerCustom != nullptr) {
std::set<QString> extensions = installerCustom->supportedExtensions();
m_SupportedExtensions.insert(extensions.begin(), extensions.end());
}
diff --git a/src/installationmanager.h b/src/installationmanager.h index 3a51af60..f6028904 100644 --- a/src/installationmanager.h +++ b/src/installationmanager.h @@ -143,7 +143,7 @@ public: * @param merge if this value is not null, the value will be set to whether the use chose to merge or replace
* @return true if we can proceed with the installation, false if the user canceled or in case of an unrecoverable error
*/
- virtual bool testOverwrite(MOBase::GuessedValue<QString> &modName, bool *merge = NULL) const;
+ virtual bool testOverwrite(MOBase::GuessedValue<QString> &modName, bool *merge = nullptr) const;
private:
@@ -168,7 +168,7 @@ private: bool isSimpleArchiveTopLayer(const MOBase::DirectoryTree::Node *node, bool bainStyle);
MOBase::DirectoryTree::Node *getSimpleArchiveBase(MOBase::DirectoryTree *dataTree);
- //bool testOverwrite(const QString &modsDirectory, MOBase::GuessedValue<QString> &modName, bool *merge = NULL);
+ //bool testOverwrite(const QString &modsDirectory, MOBase::GuessedValue<QString> &modName, bool *merge = nullptr);
bool doInstall(MOBase::GuessedValue<QString> &modName,
int modID, const QString &version, const QString &newestVersion, int categoryID, const QString &repository);
diff --git a/src/iuserinterface.h b/src/iuserinterface.h index 68cce2f7..4799b934 100644 --- a/src/iuserinterface.h +++ b/src/iuserinterface.h @@ -13,8 +13,6 @@ public: virtual void storeSettings(QSettings &settings) = 0;
- virtual bool waitForProcessOrJob(HANDLE processHandle, LPDWORD exitCode = NULL) = 0;
-
virtual void registerPluginTool(MOBase::IPluginTool *tool) = 0;
virtual void registerModPage(MOBase::IPluginModPage *modPage) = 0;
@@ -28,6 +26,10 @@ public: virtual bool saveArchiveList() = 0;
+ virtual void lock() = 0;
+ virtual void unlock() = 0;
+ virtual bool unlockClicked() = 0;
+
};
#endif // IUSERINTERFACE_H
diff --git a/src/json.cpp b/src/json.cpp index a280ba34..05a2665a 100644 --- a/src/json.cpp +++ b/src/json.cpp @@ -409,7 +409,7 @@ namespace QtJson { bool ok;
if (numberStr.contains('.')) {
- return QVariant(numberStr.toDouble(NULL));
+ return QVariant(numberStr.toDouble(nullptr));
} else if (numberStr.startsWith('-')) {
int i = numberStr.toInt(&ok);
if (!ok) {
diff --git a/src/loadmechanism.cpp b/src/loadmechanism.cpp index 9d7e4e28..711a7f1a 100644 --- a/src/loadmechanism.cpp +++ b/src/loadmechanism.cpp @@ -141,7 +141,7 @@ void LoadMechanism::deactivateScriptExtender() removeHintFile(pluginsDir);
} catch (const std::exception &e) {
- QMessageBox::critical(NULL, QObject::tr("Failed to deactivate script extender loading"), e.what());
+ QMessageBox::critical(nullptr, QObject::tr("Failed to deactivate script extender loading"), e.what());
}
}
@@ -172,7 +172,7 @@ void LoadMechanism::deactivateProxyDLL() QDir dir(gameDirectory);
removeHintFile(dir);
} catch (const std::exception &e) {
- QMessageBox::critical(NULL, QObject::tr("Failed to deactivate proxy-dll loading"), e.what());
+ QMessageBox::critical(nullptr, QObject::tr("Failed to deactivate proxy-dll loading"), e.what());
}
}
@@ -211,7 +211,7 @@ void LoadMechanism::activateScriptExtender() }
writeHintFile(pluginsDir);
} catch (const std::exception &e) {
- QMessageBox::critical(NULL, QObject::tr("Failed to set up script extender loading"), e.what());
+ QMessageBox::critical(nullptr, QObject::tr("Failed to set up script extender loading"), e.what());
}
}
@@ -265,7 +265,7 @@ void LoadMechanism::activateProxyDLL() }
writeHintFile(QDir(gameDirectory));
} catch (const std::exception &e) {
- QMessageBox::critical(NULL, QObject::tr("Failed to set up proxy-dll loading"), e.what());
+ QMessageBox::critical(nullptr, QObject::tr("Failed to set up proxy-dll loading"), e.what());
}
}
diff --git a/src/lockeddialog.cpp b/src/lockeddialog.cpp index c688fff6..907e3c0a 100644 --- a/src/lockeddialog.cpp +++ b/src/lockeddialog.cpp @@ -31,7 +31,7 @@ LockedDialog::LockedDialog(QWidget *parent, const QString &text, bool unlockButt this->setWindowFlags(this->windowFlags() | Qt::ToolTip | Qt::FramelessWindowHint);
- if (parent != NULL) {
+ if (parent != nullptr) {
QPoint position = parent->mapToGlobal(QPoint(parent->width() / 2, parent->height() / 2));
position.rx() -= this->width() / 2;
position.ry() -= this->height() / 2;
@@ -61,7 +61,7 @@ void LockedDialog::setProcessName(const QString &name) void LockedDialog::resizeEvent(QResizeEvent *event)
{
QWidget *par = parentWidget();
- if (par != NULL) {
+ if (par != nullptr) {
QPoint position = par->mapToGlobal(QPoint(par->width() / 2, par->height() / 2));
position.rx() -= event->size().width() / 2;
position.ry() -= event->size().height() / 2;
diff --git a/src/logbuffer.cpp b/src/logbuffer.cpp index 17417bf9..635ce13e 100644 --- a/src/logbuffer.cpp +++ b/src/logbuffer.cpp @@ -30,7 +30,7 @@ QMutex LogBuffer::s_Mutex; LogBuffer::LogBuffer(int messageCount, QtMsgType minMsgType, const QString &outputFileName)
- : QAbstractItemModel(NULL), m_OutFileName(outputFileName), m_ShutDown(false),
+ : QAbstractItemModel(nullptr), m_OutFileName(outputFileName), m_ShutDown(false),
m_MinMsgType(minMsgType), m_NumMessages(0)
{
m_Messages.resize(messageCount);
diff --git a/src/main.cpp b/src/main.cpp index 4aab45b5..a3ddac20 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,14 +82,13 @@ using namespace MOBase; using namespace MOShared;
-// set up required folders (for a first install or after an update or to fix a broken installation)
bool bootstrap()
{
GameInfo &gameInfo = GameInfo::instance();
// remove the temporary backup directory in case we're restarting after an update
QString moDirectory = QDir::fromNativeSeparators(ToQString(gameInfo.getOrganizerDirectory()));
- QString backupDirectory = moDirectory.mid(0).append("/update_backup");
+ QString backupDirectory = moDirectory + "/update_backup";
if (QDir(backupDirectory).exists()) {
shellDelete(QStringList(backupDirectory));
}
@@ -97,56 +96,15 @@ bool bootstrap() // cycle logfile
removeOldFiles(ToQString(GameInfo::instance().getLogDir()), "ModOrganizer*.log", 5, QDir::Name);
- // create organizer directories
- QString dirNames[] = {
- QDir::fromNativeSeparators(ToQString(gameInfo.getProfilesDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getModsDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getDownloadDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getOverwriteDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getLogDir())),
- QDir::fromNativeSeparators(ToQString(gameInfo.getTutorialDir()))
- };
- static const int NUM_DIRECTORIES = sizeof(dirNames) / sizeof(QString);
-
- // optimistic run: try to simply create the directories:
- for (int i = 0; i < NUM_DIRECTORIES; ++i) {
- if (!QDir(dirNames[i]).exists()) {
- QDir().mkdir(dirNames[i]);
- }
- }
-
- // verify all directories exist and are writable,
- // otherwise invoke the helper to create them and make them writable
- for (int i = 0; i < NUM_DIRECTORIES; ++i) {
- QFileInfo fileInfo(dirNames[i]);
- if (!fileInfo.exists() || !fileInfo.isWritable()) {
- if (QMessageBox::question(NULL, QObject::tr("Permissions required"),
- QObject::tr("The current user account doesn't have the required access rights to run "
- "Mod Organizer. The neccessary changes can be made automatically (the MO directory "
- "will be made writable for the current user account). You will be asked to run "
- "\"helper.exe\" with administrative rights."),
- QMessageBox::Yes | QMessageBox::Cancel) == QMessageBox::Yes) {
- if (!Helper::init(GameInfo::instance().getOrganizerDirectory())) {
- return false;
- }
- } else {
- return false;
- }
- // no matter which directory didn't exist/wasn't writable, the helper
- // should have created them all so we can break the loop
- break;
- }
- }
-
// verify the hook-dll exists
QString dllName = qApp->applicationDirPath() + "/" + ToQString(AppConfig::hookDLLName());
- if (::GetModuleHandleW(ToWString(dllName).c_str()) != NULL) {
+ if (::GetModuleHandleW(ToWString(dllName).c_str()) != nullptr) {
throw std::runtime_error("hook.dll already loaded! You can't start Mod Organizer from within itself (not even indirectly)");
}
HMODULE dllMod = ::LoadLibraryW(ToWString(dllName).c_str());
- if (dllMod == NULL) {
+ if (dllMod == nullptr) {
throw windows_error("hook.dll is missing or invalid");
}
::FreeLibrary(dllMod);
@@ -154,28 +112,6 @@ bool bootstrap() return true;
}
-
-void cleanupDir()
-{
- // files from previous versions of MO that are no longer
- // required (in that location)
- QString fileNames[] = {
- "plugins/helloWorld.dll",
- "plugins/testnexus.py"
- };
-
- static const int NUM_FILES = sizeof(fileNames) / sizeof(QString);
-
- qDebug("cleaning up unused files");
-
- for (int i = 0; i < NUM_FILES; ++i) {
- if (QFile::remove(QApplication::applicationDirPath().append("/").append(fileNames[i]))) {
- qDebug("%s removed in cleanup",
- QApplication::applicationDirPath().append("/").append(fileNames[i]).toUtf8().constData());
- }
- }
-}
-
bool isNxmLink(const QString &link)
{
return link.left(6).toLower() == "nxm://";
@@ -199,7 +135,7 @@ LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *exceptionPtrs FuncMiniDumpWriteDump funcDump = (FuncMiniDumpWriteDump)::GetProcAddress(dbgDLL, "MiniDumpWriteDump");
if (funcDump) {
- if (QMessageBox::question(NULL, QObject::tr("Woops"),
+ if (QMessageBox::question(nullptr, QObject::tr("Woops"),
QObject::tr("ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file "
"(%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. "
"Please include a short description of what you were doing when the crash happened").arg(qApp->applicationFilePath().append(".dmp")),
@@ -208,14 +144,14 @@ LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *exceptionPtrs std::wstring dumpName = ToWString(qApp->applicationFilePath().append(".dmp"));
HANDLE dumpFile = ::CreateFile(dumpName.c_str(),
- GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ GENERIC_WRITE, FILE_SHARE_WRITE, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
if (dumpFile != INVALID_HANDLE_VALUE) {
_MINIDUMP_EXCEPTION_INFORMATION exceptionInfo;
exceptionInfo.ThreadId = ::GetCurrentThreadId();
exceptionInfo.ExceptionPointers = exceptionPtrs;
- exceptionInfo.ClientPointers = NULL;
+ exceptionInfo.ClientPointers = false;
- BOOL success = funcDump(::GetCurrentProcess(), ::GetCurrentProcessId(), dumpFile, MiniDumpNormal, &exceptionInfo, NULL, NULL);
+ BOOL success = funcDump(::GetCurrentProcess(), ::GetCurrentProcessId(), dumpFile, MiniDumpNormal, &exceptionInfo, nullptr, nullptr);
::FlushFileBuffers(dumpFile);
::CloseHandle(dumpFile);
@@ -238,7 +174,7 @@ LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *exceptionPtrs _snprintf(errorBuffer, errorLen, "dbghelp.dll not found");
}
- QMessageBox::critical(NULL, QObject::tr("Woops"),
+ QMessageBox::critical(nullptr, QObject::tr("Woops"),
QObject::tr("ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1").arg(errorBuffer));
return result;
}
@@ -255,14 +191,14 @@ bool HaveWriteAccess(const std::wstring &path) const static SECURITY_INFORMATION requestedFileInformation = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION;
DWORD length = 0;
- if (!::GetFileSecurityW(path.c_str(), requestedFileInformation, NULL, NULL, &length)
+ if (!::GetFileSecurityW(path.c_str(), requestedFileInformation, nullptr, 0UL, &length)
&& (::GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
std::string tempBuffer;
tempBuffer.reserve(length);
PSECURITY_DESCRIPTOR security = (PSECURITY_DESCRIPTOR)tempBuffer.data();
if (security
&& ::GetFileSecurity(path.c_str(), requestedFileInformation, security, length, &length)) {
- HANDLE token = NULL;
+ HANDLE token = nullptr;
const static DWORD tokenDesiredAccess = TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_DUPLICATE | STANDARD_RIGHTS_READ;
if (!::OpenThreadToken(::GetCurrentThread(), tokenDesiredAccess, TRUE, &token)) {
if (!::OpenProcessToken(::GetCurrentProcess(), tokenDesiredAccess, &token)) {
@@ -270,7 +206,7 @@ bool HaveWriteAccess(const std::wstring &path) }
}
- HANDLE impersonatedToken = NULL;
+ HANDLE impersonatedToken = nullptr;
if (::DuplicateToken(token, SecurityImpersonation, &impersonatedToken)) {
GENERIC_MAPPING mapping = { 0xFFFFFFFF };
mapping.GenericRead = FILE_GENERIC_READ;
@@ -298,6 +234,27 @@ bool HaveWriteAccess(const std::wstring &path) }
+QString determineProfile(QStringList arguments, const QSettings &settings)
+{
+ QString selectedProfileName = QString::fromUtf8(settings.value("selected_profile", "").toByteArray());
+ { // see if there is a profile on the command line
+ int profileIndex = arguments.indexOf("-p", 1);
+ if ((profileIndex != -1) && (profileIndex < arguments.size() - 1)) {
+ qDebug("profile overwritten on command line");
+ selectedProfileName = arguments.at(profileIndex + 1);
+ }
+ arguments.removeAt(profileIndex);
+ arguments.removeAt(profileIndex);
+ }
+ if (selectedProfileName.isEmpty()) {
+ qDebug("no configured profile");
+ } else {
+ qDebug("configured profile: %s", qPrintable(selectedProfileName));
+ }
+
+ return selectedProfileName;
+}
+
int main(int argc, char *argv[])
{
MOApplication application(argc, argv);
@@ -308,16 +265,17 @@ int main(int argc, char *argv[]) QFile instanceFile(application.applicationDirPath() + "/INSTANCE");
if (instanceFile.open(QIODevice::ReadOnly)) {
instanceID = instanceFile.readAll().trimmed();
- }
+ }
- QString dataPath = instanceID.isEmpty() ? application.applicationDirPath()
- : QDir::fromNativeSeparators(
+ QString dataPath =
+ instanceID.isEmpty() ? application.applicationDirPath()
+ : QDir::fromNativeSeparators(
#if QT_VERSION >= 0x050000
- QStandardPaths::writableLocation(QStandardPaths::DataLocation)
+ QStandardPaths::writableLocation(QStandardPaths::DataLocation)
#else
- QDesktopServices::storageLocation(QDesktopServices::DataLocation)
+ QDesktopServices::storageLocation(QDesktopServices::DataLocation)
#endif
- ) + "/" + instanceID;
+ );
application.setProperty("dataPath", dataPath);
#if QT_VERSION >= 0x050000
@@ -339,7 +297,7 @@ int main(int argc, char *argv[]) if (!HaveWriteAccess(ToWString(application.applicationDirPath()))) {
QStringList arguments = application.arguments();
arguments.pop_front();
- ::ShellExecuteW( NULL
+ ::ShellExecuteW( nullptr
, L"runas"
, ToWString(QString("\"%1\"").arg(QCoreApplication::applicationFilePath())).c_str()
, ToWString(arguments.join(" ")).c_str()
@@ -390,7 +348,7 @@ int main(int argc, char *argv[]) instance.sendMessage(arguments.at(1));
return 0;
} else if (arguments.size() == 1) {
- QMessageBox::information(NULL, QObject::tr("Mod Organizer"), QObject::tr("An instance of Mod Organizer is already running"));
+ QMessageBox::information(nullptr, QObject::tr("Mod Organizer"), QObject::tr("An instance of Mod Organizer is already running"));
return 0;
}
} // we continue for the primary instance OR if MO has been called with parameters
@@ -412,7 +370,7 @@ int main(int argc, char *argv[]) reportError(QObject::tr("No game identified in \"%1\". The directory is required to contain "
"the game binary and its launcher.").arg(gamePath));
}
- SelectionDialog selection(QObject::tr("Please select the game to manage"), NULL);
+ SelectionDialog selection(QObject::tr("Please select the game to manage"), nullptr);
{ // add options
QString skyrimPath = ToQString(SkyrimInfo::getRegPathStatic());
@@ -441,7 +399,7 @@ int main(int argc, char *argv[]) } else {
gamePath = QDir::cleanPath(selection.getChoiceData().toString());
if (gamePath.isEmpty()) {
- gamePath = QFileDialog::getExistingDirectory(NULL, QObject::tr("Please select the game to manage"), QString(),
+ gamePath = QFileDialog::getExistingDirectory(nullptr, QObject::tr("Please select the game to manage"), QString(),
QFileDialog::ShowDirsOnly);
}
}
@@ -460,10 +418,15 @@ int main(int argc, char *argv[]) settings.setValue("gamePath", gamePath.toUtf8().constData());
}
+ if (pluginContainer.managedGame(ToQString(GameInfo::instance().getGameName())) == nullptr) {
+ reportError(QObject::tr("Plugin to handle %1 not installed").arg(ToQString(GameInfo::instance().getGameName())));
+ return 1;
+ }
+
if (!settings.contains("game_edition")) {
std::vector<std::wstring> editions = GameInfo::instance().getSteamVariants();
if (editions.size() > 1) {
- SelectionDialog selection(QObject::tr("Please select the game edition you have (MO can't start the game correctly if this is set incorrectly!)"), NULL);
+ SelectionDialog selection(QObject::tr("Please select the game edition you have (MO can't start the game correctly if this is set incorrectly!)"), nullptr);
int index = 0;
for (auto iter = editions.begin(); iter != editions.end(); ++iter) {
selection.addChoice(ToQString(*iter), "", index++);
@@ -484,7 +447,25 @@ int main(int argc, char *argv[]) return -1;
}
- cleanupDir();
+ QString selectedProfileName = determineProfile(arguments, settings);
+ organizer.setCurrentProfile(selectedProfileName);
+
+ // if we have a command line parameter, it is either a nxm link or
+ // a binary to start
+ if ((arguments.size() > 1) && (!isNxmLink(arguments.at(1)))) {
+ QString exeName = arguments.at(1);
+ qDebug("starting %s from command line", qPrintable(exeName));
+ arguments.removeFirst(); // remove application name (ModOrganizer.exe)
+ arguments.removeFirst(); // remove binary name
+ // pass the remaining parameters to the binary
+ try {
+ organizer.startApplication(exeName, arguments, QString(), QString());
+ return 0;
+ } catch (const std::exception &e) {
+ reportError(QObject::tr("failed to start application: %1").arg(e.what()));
+ return 1;
+ }
+ }
qDebug("initializing tutorials");
TutorialManager::init(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getTutorialDir())).append("/"));
@@ -504,52 +485,8 @@ int main(int argc, char *argv[]) mainWindow.readSettings();
- QString selectedProfileName = QString::fromUtf8(settings.value("selected_profile", "").toByteArray());
-
- { // see if there is a profile on the command line
- int profileIndex = arguments.indexOf("-p", 1);
- if ((profileIndex != -1) && (profileIndex < arguments.size() - 1)) {
- qDebug("profile overwritten on command line");
- selectedProfileName = arguments.at(profileIndex + 1);
- }
- arguments.removeAt(profileIndex);
- arguments.removeAt(profileIndex);
- }
- if (selectedProfileName.isEmpty()) {
- qDebug("no configured profile");
- } else {
- qDebug("configured profile: %s", qPrintable(selectedProfileName));
- }
-
- // if we have a command line parameter, it is either a nxm link or
- // a binary to start
- if ((arguments.size() > 1) && (!isNxmLink(arguments.at(1)))) {
- QString exeName = arguments.at(1);
- qDebug("starting %s from command line", qPrintable(exeName));
- arguments.removeFirst(); // remove application name (ModOrganizer.exe)
- arguments.removeFirst(); // remove binary name
- // pass the remaining parameters to the binary
- try {
- organizer.startApplication(exeName, arguments, QString(), selectedProfileName);
- } catch (const std::exception &e) {
- reportError(QObject::tr("failed to start application: %1").arg(e.what()));
- }
-
- return 0;
- }
-
mainWindow.createFirstProfile();
- if (selectedProfileName.length() != 0) {
- if (!mainWindow.setCurrentProfile(selectedProfileName)) {
- mainWindow.setCurrentProfile(1);
- qWarning("failed to set profile: %s",
- selectedProfileName.toUtf8().constData());
- }
- } else {
- mainWindow.setCurrentProfile(1);
- }
-
qDebug("displaying main window");
mainWindow.show();
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a2df0c24..a15da6a4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -16,7 +16,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef Q_MOC_RUN
#include "mainwindow.h"
#include "ui_mainwindow.h"
@@ -68,7 +67,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <ipluginproxy.h>
#include <questionboxmemory.h>
#include <util.h>
-#endif // Q_MOC_RUN
#include <map>
#include <ctime>
#include <wchar.h>
@@ -176,6 +174,7 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, Organize m_RefreshProgress->setTextVisible(true);
m_RefreshProgress->setRange(0, 100);
m_RefreshProgress->setValue(0);
+ m_RefreshProgress->setVisible(false);
statusBar()->addWidget(m_RefreshProgress, 1000);
statusBar()->clearMessage();
@@ -255,7 +254,6 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, Organize connect(ui->espFilterEdit, SIGNAL(textChanged(QString)), m_PluginListSortProxy, SLOT(updateFilter(QString)));
connect(ui->espFilterEdit, SIGNAL(textChanged(QString)), this, SLOT(espFilterChanged(QString)));
- connect(m_OrganizerCore.pluginList(), SIGNAL(saveTimer()), this, SLOT(savePluginList()));
connect(ui->bsaList, SIGNAL(itemsMoved()), this, SLOT(bsaList_itemMoved()));
@@ -265,6 +263,8 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, Organize connect(m_OrganizerCore.directoryRefresher(), SIGNAL(progress(int)), this, SLOT(refresher_progress(int)));
connect(m_OrganizerCore.directoryRefresher(), SIGNAL(error(QString)), this, SLOT(showError(QString)));
+ connect(m_OrganizerCore.downloadManager(), SIGNAL(downloadAdded()), ui->downloadView, SLOT(scrollToBottom()));
+
connect(&m_SavesWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(refreshSavesIfOpen()));
connect(&m_OrganizerCore.settings(), SIGNAL(languageChanged(QString)), this, SLOT(languageChange(QString)));
@@ -274,9 +274,9 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, Organize connect(m_OrganizerCore.updater(), SIGNAL(updateAvailable()), this, SLOT(updateAvailable()));
connect(m_OrganizerCore.updater(), SIGNAL(motdAvailable(QString)), this, SLOT(motdReceived(QString)));
- connect(NexusInterface::instance(), SIGNAL(requestNXMDownload(QString)), this, SLOT(downloadRequestedNXM(QString)));
+ connect(NexusInterface::instance(), SIGNAL(requestNXMDownload(QString)), &m_OrganizerCore, SLOT(downloadRequestedNXM(QString)));
connect(NexusInterface::instance(), SIGNAL(nxmDownloadURLsAvailable(int,int,QVariant,QVariant,int)), this, SLOT(nxmDownloadURLs(int,int,QVariant,QVariant,int)));
- connect(NexusInterface::instance(), SIGNAL(needLogin()), this, SLOT(nexusLogin()));
+ connect(NexusInterface::instance(), SIGNAL(needLogin()), &m_OrganizerCore, SLOT(nexusLogin()));
connect(NexusInterface::instance()->getAccessManager(), SIGNAL(loginFailed(QString)), this, SLOT(loginFailed(QString)));
connect(&TutorialManager::instance(), SIGNAL(windowTutorialFinished(QString)), this, SLOT(windowTutorialFinished(QString)));
@@ -326,6 +326,8 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, Organize registerModPage(modPagePlugin);
}
+ ui->profileBox->setCurrentText(m_OrganizerCore.currentProfile()->getName());
+
refreshExecutablesList();
updateToolBar();
}
@@ -342,7 +344,7 @@ MainWindow::~MainWindow() void MainWindow::disconnectPlugins()
{
- if (ui->actionTool->menu() != NULL) {
+ if (ui->actionTool->menu() != nullptr) {
ui->actionTool->menu()->clear();
}
}
@@ -438,11 +440,11 @@ static QModelIndex mapToModel(const QAbstractItemModel *targetModel, QModelIndex QModelIndex result = idx;
const QAbstractItemModel *model = idx.model();
while (model != targetModel) {
- if (model == NULL) {
+ if (model == nullptr) {
return QModelIndex();
}
const QAbstractProxyModel *proxyModel = qobject_cast<const QAbstractProxyModel*>(model);
- if (proxyModel == NULL) {
+ if (proxyModel == nullptr) {
return QModelIndex();
}
result = proxyModel->mapToSource(result);
@@ -490,7 +492,7 @@ void MainWindow::updateToolBar() QWidget *widget = ui->toolBar->widgetForAction(ui->actionTool);
QToolButton *toolBtn = qobject_cast<QToolButton*>(widget);
- if (toolBtn->menu() == NULL) {
+ if (toolBtn->menu() == nullptr) {
actionToToolButton(ui->actionTool);
}
@@ -606,7 +608,7 @@ void MainWindow::createHelpWidget() {
QToolButton *toolBtn = qobject_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionHelp));
QMenu *buttonMenu = toolBtn->menu();
- if (buttonMenu == NULL) {
+ if (buttonMenu == nullptr) {
return;
}
buttonMenu->clear();
@@ -844,14 +846,14 @@ SaveGameGamebryo *MainWindow::getSaveGame(QListWidgetItem *item) return saveGame;
} catch (const std::exception &e) {
reportError(tr("failed to read savegame: %1").arg(e.what()));
- return NULL;
+ return nullptr;
}
}
void MainWindow::displaySaveGameInfo(const SaveGameGamebryo *save, QPoint pos)
{
- if (m_CurrentSaveView == NULL) {
+ if (m_CurrentSaveView == nullptr) {
m_CurrentSaveView = new SaveGameInfoWidgetGamebryo(save, m_OrganizerCore.pluginList(), this);
} else {
m_CurrentSaveView->setSave(save);
@@ -880,11 +882,11 @@ void MainWindow::displaySaveGameInfo(const SaveGameGamebryo *save, QPoint pos) void MainWindow::saveSelectionChanged(QListWidgetItem *newItem)
{
- if (newItem == NULL) {
+ if (newItem == nullptr) {
hideSaveGameInfo();
- } else if ((m_CurrentSaveView == NULL) || (newItem != m_CurrentSaveView->property("displayItem").value<void*>())) {
+ } else if ((m_CurrentSaveView == nullptr) || (newItem != m_CurrentSaveView->property("displayItem").value<void*>())) {
const SaveGameGamebryo *save = getSaveGame(newItem);
- if (save != NULL) {
+ if (save != nullptr) {
displaySaveGameInfo(save, QCursor::pos());
m_CurrentSaveView->setProperty("displayItem", qVariantFromValue((void*)newItem));
}
@@ -895,10 +897,10 @@ void MainWindow::saveSelectionChanged(QListWidgetItem *newItem) void MainWindow::hideSaveGameInfo()
{
- if (m_CurrentSaveView != NULL) {
+ if (m_CurrentSaveView != nullptr) {
disconnect(m_CurrentSaveView, SIGNAL(closeSaveInfo()), this, SLOT(hideSaveGameInfo()));
m_CurrentSaveView->deleteLater();
- m_CurrentSaveView = NULL;
+ m_CurrentSaveView = nullptr;
}
}
@@ -933,7 +935,7 @@ void MainWindow::modPagePluginInvoke() m_IntegratedBrowser.setWindowTitle(plugin->displayName());
m_IntegratedBrowser.openUrl(plugin->pageURL());
} else {
- ::ShellExecuteW(NULL, L"open", ToWString(plugin->pageURL().toString()).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", ToWString(plugin->pageURL().toString()).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
}
@@ -951,7 +953,7 @@ void MainWindow::registerPluginTool(IPluginTool *tool) void MainWindow::registerModPage(IPluginModPage *modPage)
{
// turn the browser action into a drop-down menu if necessary
- if (ui->actionNexus->menu() == NULL) {
+ if (ui->actionNexus->menu() == nullptr) {
QAction *nexusAction = ui->actionNexus;
// TODO: use a different icon for nexus!
ui->actionNexus = new QAction(nexusAction->icon(), tr("Browse Mod Page"), ui->toolBar);
@@ -976,7 +978,7 @@ void MainWindow::registerModPage(IPluginModPage *modPage) void MainWindow::startExeAction()
{
QAction *action = qobject_cast<QAction*>(sender());
- if (action != NULL) {
+ if (action != nullptr) {
Executable selectedExecutable = action->data().value<Executable>();
m_OrganizerCore.spawnBinary(
selectedExecutable.m_BinaryInfo,
@@ -1004,11 +1006,7 @@ void MainWindow::setExecutableIndex(int index) void MainWindow::activateSelectedProfile()
{
- QString profileName = ui->profileBox->currentText();
- qDebug("activate profile \"%s\"", qPrintable(profileName));
- QString profileDir = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getProfilesDir()))
- .append("/").append(profileName);
- m_OrganizerCore.setCurrentProfile(new Profile(QDir(profileDir)));
+ m_OrganizerCore.setCurrentProfile(ui->profileBox->currentText());
m_ModListSortProxy->setProfile(m_OrganizerCore.currentProfile());
@@ -1023,7 +1021,7 @@ void MainWindow::on_profileBox_currentIndexChanged(int index) m_OldProfileIndex = index;
if ((previousIndex != -1) &&
- (m_OrganizerCore.currentProfile() != NULL) &&
+ (m_OrganizerCore.currentProfile() != nullptr) &&
m_OrganizerCore.currentProfile()->exists()) {
m_OrganizerCore.saveCurrentLists();
}
@@ -1162,7 +1160,7 @@ void MainWindow::expandDataTreeItem(QTreeWidgetItem *item) std::wstring virtualPath = (path + L"\\").substr(6) + ToWString(item->text(0));
DirectoryEntry *dir = m_OrganizerCore.directoryStructure()->findSubDirectoryRecursive(virtualPath);
- if (dir != NULL) {
+ if (dir != nullptr) {
updateTo(item, path, *dir, conflictsOnly);
} else {
qWarning("failed to update view of %ls", path.c_str());
@@ -1234,7 +1232,7 @@ extern QPixmap qt_pixmapFromWinHICON(HICON icon); QIcon MainWindow::iconForExecutable(const QString &filePath)
{
HICON winIcon;
- UINT res = ::ExtractIconExW(ToWString(filePath).c_str(), 0, &winIcon, NULL, 1);
+ UINT res = ::ExtractIconExW(ToWString(filePath).c_str(), 0, &winIcon, nullptr, 1);
if (res == 1) {
QIcon result = QIcon(qt_pixmapFromWinHICON(winIcon));
::DestroyIcon(winIcon);
@@ -1333,7 +1331,7 @@ static bool BySortValue(const std::pair<UINT32, QTreeWidgetItem*> &LHS, const st void MainWindow::updateBSAList(const QStringList &defaultArchives, const QStringList &activeArchives)
{
-
+ m_DefaultArchives = defaultArchives;
ui->bsaList->clear();
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
ui->bsaList->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
@@ -1404,7 +1402,7 @@ void MainWindow::updateBSAList(const QStringList &defaultArchives, const QString modName = modInfo->name();
}
QList<QTreeWidgetItem*> items = ui->bsaList->findItems(modName, Qt::MatchFixedString);
- QTreeWidgetItem *subItem = NULL;
+ QTreeWidgetItem *subItem = nullptr;
if (items.length() > 0) {
subItem = items.at(0);
} else {
@@ -1560,8 +1558,34 @@ void MainWindow::storeSettings(QSettings &settings) settings.setValue("filters_visible", ui->displayCategoriesBtn->isChecked());
settings.setValue("manage_bsas", ui->manageArchivesBox->isChecked());
+
+ settings.setValue("selected_executable", ui->executablesListBox->currentIndex());
+}
+
+void MainWindow::lock()
+{
+ m_LockDialog = new LockedDialog(qApp->activeWindow());
+ m_LockDialog->show();
+ setEnabled(false);
+}
+
+void MainWindow::unlock()
+{
+ if (m_LockDialog != nullptr) {
+ m_LockDialog->hide();
+ m_LockDialog->deleteLater();
+ }
+ setEnabled(true);
}
+bool MainWindow::unlockClicked()
+{
+ if (m_LockDialog != nullptr) {
+ return m_LockDialog->unlockClicked();
+ } else {
+ return false;
+ }
+}
void MainWindow::on_btnRefreshData_clicked()
{
@@ -1584,18 +1608,20 @@ void MainWindow::on_tabWidget_currentChanged(int index) }
-void MainWindow::installMod()
+void MainWindow::installMod(QString fileName)
{
try {
- QStringList extensions = m_OrganizerCore.installationManager()->getSupportedExtensions();
- for (auto iter = extensions.begin(); iter != extensions.end(); ++iter) {
- *iter = "*." + *iter;
- }
+ if (fileName.isEmpty()) {
+ QStringList extensions = m_OrganizerCore.installationManager()->getSupportedExtensions();
+ for (auto iter = extensions.begin(); iter != extensions.end(); ++iter) {
+ *iter = "*." + *iter;
+ }
- QString fileName = FileDialogMemory::getOpenFileName("installMod", this, tr("Choose Mod"), QString(),
- tr("Mod Archive").append(QString(" (%1)").arg(extensions.join(" "))));
+ fileName = FileDialogMemory::getOpenFileName("installMod", this, tr("Choose Mod"), QString(),
+ tr("Mod Archive").append(QString(" (%1)").arg(extensions.join(" "))));
+ }
- if (fileName.length() == 0) {
+ if (fileName.isEmpty()) {
return;
} else {
m_OrganizerCore.installMod(fileName, QString());
@@ -1627,14 +1653,14 @@ static HRESULT CreateShortcut(LPCWSTR targetFileName, LPCWSTR arguments, LPCWSTR currentDirectory)
{
HRESULT result = E_INVALIDARG;
- if ((targetFileName != NULL) && (wcslen(targetFileName) > 0) &&
- (arguments != NULL) &&
- (linkFileName != NULL) && (strlen(linkFileName) > 0) &&
- (description != NULL) &&
- (currentDirectory != NULL)) {
+ if ((targetFileName != nullptr) && (wcslen(targetFileName) > 0) &&
+ (arguments != nullptr) &&
+ (linkFileName != nullptr) && (strlen(linkFileName) > 0) &&
+ (description != nullptr) &&
+ (currentDirectory != nullptr)) {
IShellLink* shellLink;
- result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
+ result = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*)&shellLink);
if (!SUCCEEDED(result)) {
@@ -1734,19 +1760,19 @@ void MainWindow::helpTriggered() void MainWindow::wikiTriggered()
{
-// ::ShellExecuteW(NULL, L"open", L"http://issue.tannin.eu/tbg/wiki/Modorganizer%3AMainPage", NULL, NULL, SW_SHOWNORMAL);
- ::ShellExecuteW(NULL, L"open", L"http://wiki.step-project.com/Guide:Mod_Organizer", NULL, NULL, SW_SHOWNORMAL);
+// ::ShellExecuteW(nullptr, L"open", L"http://issue.tannin.eu/tbg/wiki/Modorganizer%3AMainPage", nullptr, nullptr, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", L"http://wiki.step-project.com/Guide:Mod_Organizer", nullptr, nullptr, SW_SHOWNORMAL);
}
void MainWindow::issueTriggered()
{
- ::ShellExecuteW(NULL, L"open", L"http://issue.tannin.eu/tbg", NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", L"http://issue.tannin.eu/tbg", nullptr, nullptr, SW_SHOWNORMAL);
}
void MainWindow::tutorialTriggered()
{
QAction *tutorialAction = qobject_cast<QAction*>(sender());
- if (tutorialAction != NULL) {
+ if (tutorialAction != nullptr) {
if (QMessageBox::question(this, tr("Start Tutorial?"),
tr("You're about to start a tutorial. For technical reasons it's not possible to end "
"the tutorial early. Continue?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
@@ -1808,33 +1834,6 @@ void MainWindow::setESPListSorting(int index) }
}
-
-bool MainWindow::setCurrentProfile(int index)
-{
- QComboBox *profilesBox = findChild<QComboBox*>("profileBox");
- if (index >= profilesBox->count()) {
- return false;
- } else {
- profilesBox->setCurrentIndex(index);
- return true;
- }
-}
-
-bool MainWindow::setCurrentProfile(const QString &name)
-{
- QComboBox *profilesBox = findChild<QComboBox*>("profileBox");
- for (int i = 0; i < profilesBox->count(); ++i) {
- if (QString::compare(profilesBox->itemText(i), name, Qt::CaseInsensitive) == 0) {
- profilesBox->setCurrentIndex(i);
- return true;
- }
- }
- // profile not valid
- profilesBox->setCurrentIndex(1);
- return false;
-}
-
-
void MainWindow::refresher_progress(int percent)
{
if (percent == 100) {
@@ -1876,7 +1875,7 @@ void MainWindow::modorder_changed() ModInfo::Ptr modInfo = ModInfo::getByIndex(current.data(Qt::UserRole + 1).toInt());
modInfo->doConflictCheck();
m_OrganizerCore.modList()->setOverwriteMarkers(modInfo->getModOverwrite(), modInfo->getModOverwritten());
- if (m_ModListSortProxy != NULL) {
+ if (m_ModListSortProxy != nullptr) {
m_ModListSortProxy->invalidate();
}
ui->modList->verticalScrollBar()->repaint();
@@ -2011,7 +2010,7 @@ void MainWindow::modlistChanged(int) void MainWindow::fileMoved(const QString &filePath, const QString &oldOriginName, const QString &newOriginName)
{
const FileEntry::Ptr filePtr = m_OrganizerCore.directoryStructure()->findFile(ToWString(filePath));
- if (filePtr.get() != NULL) {
+ if (filePtr.get() != nullptr) {
try {
if (m_OrganizerCore.directoryStructure()->originExists(ToWString(newOriginName))) {
FilesOrigin &newOrigin = m_OrganizerCore.directoryStructure()->getOriginByName(ToWString(newOriginName));
@@ -2039,7 +2038,7 @@ QTreeWidgetItem *MainWindow::addFilterItem(QTreeWidgetItem *root, const QString QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(name));
item->setData(0, Qt::UserRole, categoryID);
item->setData(0, Qt::UserRole + 1, type);
- if (root != NULL) {
+ if (root != nullptr) {
root->addChild(item);
} else {
ui->categoriesList->addTopLevelItem(item);
@@ -2050,7 +2049,7 @@ QTreeWidgetItem *MainWindow::addFilterItem(QTreeWidgetItem *root, const QString void MainWindow::addContentFilters()
{
for (unsigned i = 0; i < ModInfo::NUM_CONTENT_TYPES; ++i) {
- addFilterItem(NULL, tr("<Contains %1>").arg(ModInfo::getContentTypeName(i)), i, ModListSortProxy::TYPE_CONTENT);
+ addFilterItem(nullptr, tr("<Contains %1>").arg(ModInfo::getContentTypeName(i)), i, ModListSortProxy::TYPE_CONTENT);
}
}
@@ -2083,14 +2082,14 @@ void MainWindow::refreshFilters() }
ui->categoriesList->clear();
- addFilterItem(NULL, tr("<Checked>"), CategoryFactory::CATEGORY_SPECIAL_CHECKED, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<Unchecked>"), CategoryFactory::CATEGORY_SPECIAL_UNCHECKED, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<Update>"), CategoryFactory::CATEGORY_SPECIAL_UPDATEAVAILABLE, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<Managed by MO>"), CategoryFactory::CATEGORY_SPECIAL_MANAGED, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<Managed outside MO>"), CategoryFactory::CATEGORY_SPECIAL_UNMANAGED, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<No category>"), CategoryFactory::CATEGORY_SPECIAL_NOCATEGORY, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<Conflicted>"), CategoryFactory::CATEGORY_SPECIAL_CONFLICT, ModListSortProxy::TYPE_SPECIAL);
- addFilterItem(NULL, tr("<Not Endorsed>"), CategoryFactory::CATEGORY_SPECIAL_NOTENDORSED, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Checked>"), CategoryFactory::CATEGORY_SPECIAL_CHECKED, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Unchecked>"), CategoryFactory::CATEGORY_SPECIAL_UNCHECKED, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Update>"), CategoryFactory::CATEGORY_SPECIAL_UPDATEAVAILABLE, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Managed by MO>"), CategoryFactory::CATEGORY_SPECIAL_MANAGED, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Managed outside MO>"), CategoryFactory::CATEGORY_SPECIAL_UNMANAGED, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<No category>"), CategoryFactory::CATEGORY_SPECIAL_NOCATEGORY, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Conflicted>"), CategoryFactory::CATEGORY_SPECIAL_CONFLICT, ModListSortProxy::TYPE_SPECIAL);
+ addFilterItem(nullptr, tr("<Not Endorsed>"), CategoryFactory::CATEGORY_SPECIAL_NOTENDORSED, ModListSortProxy::TYPE_SPECIAL);
addContentFilters();
@@ -2107,7 +2106,7 @@ void MainWindow::refreshFilters() }
}
- addCategoryFilters(NULL, categoriesUsed, 0);
+ addCategoryFilters(nullptr, categoriesUsed, 0);
foreach (const QString &item, selectedItems) {
QList<QTreeWidgetItem*> matches = ui->categoriesList->findItems(item, Qt::MatchFixedString | Qt::MatchRecursive);
@@ -2170,7 +2169,7 @@ void MainWindow::modlistSelectionChanged(const QModelIndex ¤t, const QMode } else {
m_OrganizerCore.modList()->setOverwriteMarkers(std::set<unsigned int>(), std::set<unsigned int>());
}
- if ((m_ModListSortProxy != NULL)
+ if ((m_ModListSortProxy != nullptr)
&& !m_ModListSortProxy->beingInvalidated()) {
m_ModListSortProxy->invalidate();
}
@@ -2278,8 +2277,7 @@ void MainWindow::endorseMod(ModInfo::Ptr mod) } else {
QString username, password;
if (m_OrganizerCore.settings().getNexusLogin(username, password)) {
- //m_PostLoginTasks.push_back(boost::bind(&MainWindow::endorseMod, _1, mod));
- m_OrganizerCore.doAfterLogin([&] () { this->endorseMod(mod); });
+ m_OrganizerCore.doAfterLogin(boost::bind(&MainWindow::endorseMod, this, mod));
NexusInterface::instance()->getAccessManager()->login(username, password);
} else {
MessageDialog::showMessage(tr("You need to be logged in with Nexus to endorse"), this);
@@ -2306,7 +2304,6 @@ void MainWindow::unendorse_clicked() ModInfo::getByIndex(m_ContextRow)->endorse(false);
} else {
if (m_OrganizerCore.settings().getNexusLogin(username, password)) {
- //m_PostLoginTasks.push_back(boost::mem_fn(&MainWindow::unendorse_clicked));
m_OrganizerCore.doAfterLogin([this] () { this->unendorse_clicked(); });
NexusInterface::instance()->getAccessManager()->login(username, password);
} else {
@@ -2315,7 +2312,7 @@ void MainWindow::unendorse_clicked() }
}
-void MainWindow::loginFailed(const QString &message)
+void MainWindow::loginFailed(const QString&)
{
statusBar()->hide();
}
@@ -2328,7 +2325,7 @@ void MainWindow::windowTutorialFinished(const QString &windowName) void MainWindow::overwriteClosed(int)
{
OverwriteInfoDialog *dialog = this->findChild<OverwriteInfoDialog*>("__overwriteDialog");
- if (dialog != NULL) {
+ if (dialog != nullptr) {
m_OrganizerCore.modList()->modInfoChanged(dialog->modInfo());
dialog->deleteLater();
}
@@ -2342,7 +2339,7 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index, if (std::find(flags.begin(), flags.end(), ModInfo::FLAG_OVERWRITE) != flags.end()) {
QDialog *dialog = this->findChild<QDialog*>("__overwriteDialog");
try {
- if (dialog == NULL) {
+ if (dialog == nullptr) {
dialog = new OverwriteInfoDialog(modInfo, this);
dialog->setObjectName("__overwriteDialog");
} else {
@@ -2359,7 +2356,7 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index, modInfo->saveMeta();
ModInfoDialog dialog(modInfo, m_OrganizerCore.directoryStructure(), modInfo->hasFlag(ModInfo::FLAG_FOREIGN), this);
connect(&dialog, SIGNAL(nexusLinkActivated(QString)), this, SLOT(nexusLinkActivated(QString)));
- connect(&dialog, SIGNAL(downloadRequest(QString)), this, SLOT(downloadRequestedNXM(QString)));
+ connect(&dialog, SIGNAL(downloadRequest(QString)), &m_OrganizerCore, SLOT(downloadRequestedNXM(QString)));
connect(&dialog, SIGNAL(modOpen(QString, int)), this, SLOT(displayModInformation(QString, int)), Qt::QueuedConnection);
connect(&dialog, SIGNAL(modOpenNext()), this, SLOT(modOpenNext()), Qt::QueuedConnection);
connect(&dialog, SIGNAL(modOpenPrev()), this, SLOT(modOpenPrev()), Qt::QueuedConnection);
@@ -2396,6 +2393,16 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index, }
}
+bool MainWindow::closeWindow()
+{
+ return close();
+}
+
+void MainWindow::setWindowEnabled(bool enabled)
+{
+ setEnabled(enabled);
+}
+
void MainWindow::modOpenNext()
{
@@ -2479,7 +2486,7 @@ void MainWindow::openExplorer_clicked() {
ModInfo::Ptr modInfo = ModInfo::getByIndex(m_ContextRow);
- ::ShellExecuteW(NULL, L"explore", ToWString(modInfo->absolutePath()).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"explore", ToWString(modInfo->absolutePath()).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
void MainWindow::information_clicked()
@@ -2509,13 +2516,13 @@ void MainWindow::createModFromOverwrite() }
}
- if (m_OrganizerCore.getMod(name) != NULL) {
+ if (m_OrganizerCore.getMod(name) != nullptr) {
reportError(tr("A mod with this name already exists"));
return;
}
IModInterface *newMod = m_OrganizerCore.createMod(name);
- if (newMod == NULL) {
+ if (newMod == nullptr) {
return;
}
@@ -2600,11 +2607,11 @@ void MainWindow::replaceCategoriesFromMenu(QMenu *menu, int modRow) {
ModInfo::Ptr modInfo = ModInfo::getByIndex(modRow);
foreach (QAction* action, menu->actions()) {
- if (action->menu() != NULL) {
+ if (action->menu() != nullptr) {
replaceCategoriesFromMenu(action->menu(), modRow);
} else {
QWidgetAction *widgetAction = qobject_cast<QWidgetAction*>(action);
- if (widgetAction != NULL) {
+ if (widgetAction != nullptr) {
QCheckBox *checkbox = qobject_cast<QCheckBox*>(widgetAction->defaultWidget());
modInfo->setCategory(widgetAction->data().toInt(), checkbox->isChecked());
}
@@ -2617,11 +2624,11 @@ void MainWindow::addRemoveCategoriesFromMenu(QMenu *menu, int modRow, int refere if (referenceRow != -1 && referenceRow != modRow) {
ModInfo::Ptr editedModInfo = ModInfo::getByIndex(referenceRow);
foreach (QAction* action, menu->actions()) {
- if (action->menu() != NULL) {
+ if (action->menu() != nullptr) {
addRemoveCategoriesFromMenu(action->menu(), modRow, referenceRow);
} else {
QWidgetAction *widgetAction = qobject_cast<QWidgetAction*>(action);
- if (widgetAction != NULL) {
+ if (widgetAction != nullptr) {
QCheckBox *checkbox = qobject_cast<QCheckBox*>(widgetAction->defaultWidget());
int categoryId = widgetAction->data().toInt();
bool checkedBefore = editedModInfo->categorySet(categoryId);
@@ -2641,7 +2648,7 @@ void MainWindow::addRemoveCategoriesFromMenu(QMenu *menu, int modRow, int refere void MainWindow::addRemoveCategories_MenuHandler() {
QMenu *menu = qobject_cast<QMenu*>(sender());
- if (menu == NULL) {
+ if (menu == nullptr) {
qCritical("not a menu?");
return;
}
@@ -2678,7 +2685,7 @@ void MainWindow::addRemoveCategories_MenuHandler() { void MainWindow::replaceCategories_MenuHandler() {
QMenu *menu = qobject_cast<QMenu*>(sender());
- if (menu == NULL) {
+ if (menu == nullptr) {
qCritical("not a menu?");
return;
}
@@ -2716,14 +2723,14 @@ void MainWindow::replaceCategories_MenuHandler() { void MainWindow::savePrimaryCategory()
{
QMenu *menu = qobject_cast<QMenu*>(sender());
- if (menu == NULL) {
+ if (menu == nullptr) {
qCritical("not a menu?");
return;
}
foreach (QAction* action, menu->actions()) {
QWidgetAction *widgetAction = qobject_cast<QWidgetAction*>(action);
- if (widgetAction != NULL) {
+ if (widgetAction != nullptr) {
QRadioButton *btn = qobject_cast<QRadioButton*>(widgetAction->defaultWidget());
if (btn->isChecked()) {
QModelIndexList selected = ui->modList->selectionModel()->selectedRows();
@@ -2844,7 +2851,7 @@ void MainWindow::addPrimaryCategoryCandidates(QMenu *primaryCategoryMenu, ModInf void MainWindow::addPrimaryCategoryCandidates()
{
QMenu *menu = qobject_cast<QMenu*>(sender());
- if (menu == NULL) {
+ if (menu == nullptr) {
qCritical("not a menu?");
return;
}
@@ -2856,7 +2863,7 @@ void MainWindow::addPrimaryCategoryCandidates() void MainWindow::enableVisibleMods()
{
- if (QMessageBox::question(NULL, tr("Confirm"), tr("Really enable all visible mods?"),
+ if (QMessageBox::question(nullptr, tr("Confirm"), tr("Really enable all visible mods?"),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
m_ModListSortProxy->enableAllVisible();
}
@@ -2864,7 +2871,7 @@ void MainWindow::enableVisibleMods() void MainWindow::disableVisibleMods()
{
- if (QMessageBox::question(NULL, tr("Confirm"), tr("Really disable all visible mods?"),
+ if (QMessageBox::question(nullptr, tr("Confirm"), tr("Really disable all visible mods?"),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
m_ModListSortProxy->disableAllVisible();
}
@@ -2957,7 +2964,7 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) m_ContextIdx = mapToModel(m_OrganizerCore.modList(), modList->indexAt(pos));
m_ContextRow = m_ContextIdx.row();
- QMenu *menu = NULL;
+ QMenu *menu = nullptr;
QMenu *allMods = modListContextMenu();
if (m_ContextRow == -1) {
// no selection
@@ -3113,7 +3120,7 @@ void MainWindow::fixMods_clicked() {
QListWidgetItem *selectedItem = ui->savegameList->currentItem();
- if (selectedItem == NULL)
+ if (selectedItem == nullptr)
return;
// if required, parse the save game
@@ -3297,12 +3304,6 @@ void MainWindow::linkMenu() }
}
-void MainWindow::downloadSpeed(const QString &serverName, int bytesPerSecond)
-{
- m_OrganizerCore.settings().setDownloadSpeed(serverName, bytesPerSecond);
-}
-
-
void MainWindow::on_actionSettings_triggered()
{
QString oldModDirectory(m_OrganizerCore.settings().getModDirectory());
@@ -3344,20 +3345,20 @@ void MainWindow::on_actionSettings_triggered() void MainWindow::on_actionNexus_triggered()
{
- ::ShellExecuteW(NULL, L"open", GameInfo::instance().getNexusPage(false).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", GameInfo::instance().getNexusPage(false).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
void MainWindow::nexusLinkActivated(const QString &link)
{
- ::ShellExecuteW(NULL, L"open", ToWString(link).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", ToWString(link).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
ui->tabWidget->setCurrentIndex(4);
}
void MainWindow::linkClicked(const QString &url)
{
- ::ShellExecuteW(NULL, L"open", ToWString(url).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", ToWString(url).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
@@ -3397,8 +3398,6 @@ void MainWindow::languageChange(const QString &newLanguage) updateProblemsButton();
ui->listOptionsBtn->setMenu(modListContextMenu());
-}
-
void MainWindow::writeDataToFile(QFile &file, const QString &directory, const DirectoryEntry &directoryEntry)
{
{ // list files
@@ -3469,7 +3468,7 @@ int MainWindow::getBinaryExecuteInfo(const QFileInfo &targetInfo, QFileInfo &bin { // try to find java automatically
WCHAR buffer[MAX_PATH];
- if (::FindExecutableW(targetPathW.c_str(), NULL, buffer) > (HINSTANCE)32) {
+ if (::FindExecutableW(targetPathW.c_str(), nullptr, buffer) > (HINSTANCE)32) {
DWORD binaryType = 0UL;
if (!::GetBinaryTypeW(targetPathW.c_str(), &binaryType)) {
qDebug("failed to determine binary type of \"%ls\": %lu", targetPathW.c_str(), ::GetLastError());
@@ -3506,7 +3505,7 @@ int MainWindow::getBinaryExecuteInfo(const QFileInfo &targetInfo, QFileInfo &bin void MainWindow::addAsExecutable()
{
- if (m_ContextItem != NULL) {
+ if (m_ContextItem != nullptr) {
QFileInfo targetInfo(m_ContextItem->data(0, Qt::UserRole).toString());
QFileInfo binaryInfo;
QString arguments;
@@ -3604,9 +3603,9 @@ void MainWindow::previewDataFile() offset = fileName.indexOf("/", offset);
fileName = fileName.mid(offset + 1);
- const FileEntry::Ptr file = m_OrganizerCore.directoryStructure()->searchFile(ToWString(fileName), NULL);
+ const FileEntry::Ptr file = m_OrganizerCore.directoryStructure()->searchFile(ToWString(fileName), nullptr);
- if (file.get() == NULL) {
+ if (file.get() == nullptr) {
reportError(tr("file not found: %1").arg(fileName));
return;
}
@@ -3640,7 +3639,7 @@ void MainWindow::previewDataFile() void MainWindow::openDataFile()
{
- if (m_ContextItem != NULL) {
+ if (m_ContextItem != nullptr) {
QFileInfo targetInfo(m_ContextItem->data(0, Qt::UserRole).toString());
QFileInfo binaryInfo;
QString arguments;
@@ -3649,7 +3648,7 @@ void MainWindow::openDataFile() m_OrganizerCore.spawnBinaryDirect(binaryInfo, arguments, m_OrganizerCore.currentProfile()->getName(), targetInfo.absolutePath(), "");
} break;
case 2: {
- ::ShellExecuteW(NULL, L"open", ToWString(targetInfo.absoluteFilePath()).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", ToWString(targetInfo.absoluteFilePath()).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
} break;
default: {
// nop
@@ -3701,7 +3700,7 @@ void MainWindow::on_dataTree_customContextMenuRequested(const QPoint &pos) m_ContextItem = dataTree->itemAt(pos.x(), pos.y());
QMenu menu;
- if ((m_ContextItem != NULL) && (m_ContextItem->childCount() == 0)) {
+ if ((m_ContextItem != nullptr) && (m_ContextItem->childCount() == 0)) {
menu.addAction(tr("Open/Execute"), this, SLOT(openDataFile()));
menu.addAction(tr("Add as Executable"), this, SLOT(addAsExecutable()));
@@ -3983,9 +3982,9 @@ void MainWindow::displayColumnSelection(const QPoint &pos) int i = 1;
foreach (const QAction *action, menu.actions()) {
const QWidgetAction *widgetAction = qobject_cast<const QWidgetAction*>(action);
- if (widgetAction != NULL) {
+ if (widgetAction != nullptr) {
const QCheckBox *checkBox = qobject_cast<const QCheckBox*>(widgetAction->defaultWidget());
- if (checkBox != NULL) {
+ if (checkBox != nullptr) {
ui->modList->header()->setSectionHidden(i, !checkBox->isChecked());
}
}
@@ -4108,7 +4107,7 @@ void MainWindow::removeFromToolbar() void MainWindow::toolBar_customContextMenuRequested(const QPoint &point)
{
QAction *action = ui->toolBar->actionAt(point);
- if (action != NULL) {
+ if (action != nullptr) {
if (action->objectName().startsWith("custom_")) {
m_ContextAction = action;
QMenu menu;
@@ -4160,10 +4159,10 @@ void MainWindow::on_espList_customContextMenuRequested(const QPoint &pos) void MainWindow::on_groupCombo_currentIndexChanged(int index)
{
- if (m_ModListSortProxy == NULL) {
+ if (m_ModListSortProxy == nullptr) {
return;
}
- QAbstractProxyModel *newModel = NULL;
+ QAbstractProxyModel *newModel = nullptr;
switch (index) {
case 1: {
newModel = new QtGroupingProxy(m_OrganizerCore.modList(), QModelIndex(), ModList::COL_CATEGORY, Qt::UserRole,
@@ -4175,11 +4174,11 @@ void MainWindow::on_groupCombo_currentIndexChanged(int index) Qt::UserRole + 2);
} break;
default: {
- newModel = NULL;
+ newModel = nullptr;
} break;
}
- if (newModel != NULL) {
+ if (newModel != nullptr) {
#ifdef TEST_MODELS
new ModelTest(newModel, this);
#endif // TEST_MODELS
@@ -4219,7 +4218,7 @@ void MainWindow::createStdoutPipe(HANDLE *stdOutRead, HANDLE *stdOutWrite) SECURITY_ATTRIBUTES secAttributes;
secAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
secAttributes.bInheritHandle = TRUE;
- secAttributes.lpSecurityDescriptor = NULL;
+ secAttributes.lpSecurityDescriptor = nullptr;
if (!::CreatePipe(stdOutRead, stdOutWrite, &secAttributes, 0)) {
qCritical("failed to create stdout reroute");
@@ -4241,7 +4240,7 @@ std::string MainWindow::readFromPipe(HANDLE stdOutRead) DWORD read = 1;
while (read > 0) {
- if (!::ReadFile(stdOutRead, buffer, chunkSize, &read, NULL)) {
+ if (!::ReadFile(stdOutRead, buffer, chunkSize, &read, nullptr)) {
break;
}
if (read > 0) {
@@ -4254,7 +4253,7 @@ std::string MainWindow::readFromPipe(HANDLE stdOutRead) return result;
}
-void MainWindow::processLOOTOut(const std::string &lootOut, std::string &reportURL, std::string &errorMessages, QProgressDialog &dialog)
+void MainWindow::processLOOTOut(const std::string &lootOut, std::string &errorMessages, QProgressDialog &dialog)
{
std::vector<std::string> lines;
boost::split(lines, lootOut, boost::is_any_of("\r\n"));
@@ -4287,8 +4286,6 @@ void MainWindow::processLOOTOut(const std::string &lootOut, std::string &reportU }
}
}
-}
-
bool MainWindow::waitForProcessOrJob(HANDLE handle, LPDWORD exitCode)
{
LockedDialog *dialog = new LockedDialog(this);
@@ -4440,14 +4437,14 @@ void MainWindow::on_bossButton_clicked() // keep processing events so the app doesn't appear dead
QCoreApplication::processEvents();
std::string lootOut = readFromPipe(stdOutRead);
- processLOOTOut(lootOut, reportURL, errorMessages, dialog);
+ processLOOTOut(lootOut, errorMessages, dialog);
res = ::MsgWaitForMultipleObjects(1, &loot, false, 1000, QS_KEY | QS_MOUSE);
}
std::string remainder = readFromPipe(stdOutRead).c_str();
if (remainder.length() > 0) {
- processLOOTOut(remainder, reportURL, errorMessages, dialog);
+ processLOOTOut(remainder, errorMessages, dialog);
}
DWORD exitCode = 0UL;
::GetExitCodeProcess(processHandle, &exitCode);
diff --git a/src/mainwindow.h b/src/mainwindow.h index 199047b1..feaedef8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -62,6 +62,7 @@ namespace Ui { class MainWindow;
}
+class LockedDialog;
class QToolButton;
class ModListSortProxy;
class ModListGroupCategoriesProxy;
@@ -80,9 +81,13 @@ public: QWidget *parent = 0);
~MainWindow();
- void storeSettings(QSettings &settings);
+ void storeSettings(QSettings &settings) override;
void readSettings();
+ virtual void lock() override;
+ virtual void unlock() override;
+ virtual bool unlockClicked() override;
+
bool addProfile();
void updateBSAList(const QStringList &defaultArchives, const QStringList &activeArchives);
void refreshDataTree();
@@ -93,9 +98,6 @@ public: void setModListSorting(int index);
void setESPListSorting(int index);
- bool setCurrentProfile(int index);
- bool setCurrentProfile(const QString &name);
-
void createFirstProfile();
bool saveArchiveList();
@@ -107,9 +109,7 @@ public: void createStdoutPipe(HANDLE *stdOutRead, HANDLE *stdOutWrite);
std::string readFromPipe(HANDLE stdOutRead);
- void processLOOTOut(const std::string &lootOut, std::string &reportURL, std::string &errorMessages, QProgressDialog &dialog);
-
- bool waitForProcessOrJob(HANDLE processHandle, LPDWORD exitCode = NULL);
+ void processLOOTOut(const std::string &lootOut, std::string &errorMessages, QProgressDialog &dialog);
void updateModInDirectoryStructure(unsigned int index, ModInfo::Ptr modInfo);
@@ -118,10 +118,12 @@ public: void installTranslator(const QString &name);
virtual void disconnectPlugins();
- void unloadPlugins();
void displayModInformation(ModInfo::Ptr modInfo, unsigned int index, int tab);
+ virtual bool closeWindow();
+ virtual void setWindowEnabled(bool enabled);
+
public slots:
void displayColumnSelection(const QPoint &pos);
@@ -170,7 +172,7 @@ private: void updateTo(QTreeWidgetItem *subTree, const std::wstring &directorySoFar, const MOShared::DirectoryEntry &directoryEntry, bool conflictsOnly);
bool refreshProfiles(bool selectProfile = true);
void refreshExecutablesList();
- void installMod();
+ void installMod(QString fileName = "");
QList<MOBase::IOrganizer::FileInfo> findFileInfos(const QString &path, const std::function<bool (const MOBase::IOrganizer::FileInfo &)> &filter) const;
@@ -267,6 +269,8 @@ private: QProgressBar *m_RefreshProgress;
bool m_Refreshing;
+ QStringList m_DefaultArchives;
+
QAbstractItemModel *m_ModListGroupingProxy;
ModListSortProxy *m_ModListSortProxy;
@@ -314,6 +318,8 @@ private: bool m_DidUpdateMasterList;
+ LockedDialog *m_LockDialog { nullptr };
+
private slots:
void showMessage(const QString &message);
@@ -424,7 +430,7 @@ private slots: void startExeAction();
- void checkBSAList(const QStringList &defaultArchives);
+ void checkBSAList();
void updateProblemsButton();
@@ -452,8 +458,6 @@ private slots: */
void allowListResize();
- void downloadSpeed(const QString &serverName, int bytesPerSecond);
-
void toolBar_customContextMenuRequested(const QPoint &point);
void removeFromToolbar();
void overwriteClosed(int);
diff --git a/src/messagedialog.cpp b/src/messagedialog.cpp index 36902bbf..90b0a9d3 100644 --- a/src/messagedialog.cpp +++ b/src/messagedialog.cpp @@ -52,7 +52,7 @@ MessageDialog::MessageDialog(const QString &text, QWidget *reference) : this->setFocusPolicy(Qt::NoFocus);
this->setAttribute(Qt::WA_ShowWithoutActivating);
QTimer::singleShot(1000 + (text.length() * 40), this, SLOT(hide()));
- if (reference != NULL) {
+ if (reference != nullptr) {
QPoint position = reference->mapToGlobal(QPoint(reference->width() / 2, reference->height()));
position.rx() -= this->width() / 2;
position.ry() -= this->height() + 5;
@@ -70,7 +70,7 @@ MessageDialog::~MessageDialog() void MessageDialog::resizeEvent(QResizeEvent *event)
{
QWidget *par = parentWidget();
- if (par != NULL) {
+ if (par != nullptr) {
QPoint position = par->mapToGlobal(QPoint(par->width() / 2, par->height()));
position.rx() -= event->size().width() / 2;
position.ry() -= event->size().height() + 5;
@@ -83,7 +83,7 @@ void MessageDialog::showMessage(const QString &text, QWidget *reference, bool br {
qDebug("%s", qPrintable(text));
if (reference != nullptr) {
- if (bringToFront || (qApp->activeWindow() != NULL)) {
+ if (bringToFront || (qApp->activeWindow() != nullptr)) {
MessageDialog *dialog = new MessageDialog(text, reference);
dialog->show();
reference->activateWindow();
diff --git a/src/modinfo.cpp b/src/modinfo.cpp index af7cbaa5..4befd232 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -477,6 +477,7 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc , m_Repository() , m_MetaInfoChanged(false) , m_EndorsedState(ENDORSED_UNKNOWN) + , m_NexusBridge() { testValid(); m_CreationTime = QFileInfo(path.absolutePath()).created(); @@ -658,7 +659,7 @@ void ModInfoRegular::nxmRequestFailed(int, int, QVariant userData, const QString if (userData.canConvert<int>() && (userData.toInt() == 1)) { fullMessage += "\nNexus will reject endorsements within 15 Minutes of a failed attempt, the error message may be misleading."; } - if (QApplication::activeWindow() != NULL) { + if (QApplication::activeWindow() != nullptr) { MessageDialog::showMessage(fullMessage, QApplication::activeWindow()); } emit modDetailsUpdated(false); diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index 9133b166..0dfdd1f4 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -63,8 +63,8 @@ bool operator<(const ModFileListWidget &LHS, const ModFileListWidget &RHS) ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directory, bool unmanaged, QWidget *parent)
: TutorableDialog("ModInfoDialog", parent), ui(new Ui::ModInfoDialog), m_ModInfo(modInfo),
m_ThumbnailMapper(this), m_RequestStarted(false),
- m_DeleteAction(NULL), m_RenameAction(NULL), m_OpenAction(NULL),
- m_Directory(directory), m_Origin(NULL)
+ m_DeleteAction(nullptr), m_RenameAction(nullptr), m_OpenAction(nullptr),
+ m_Directory(directory), m_Origin(nullptr)
{
ui->setupUi(this);
this->setWindowTitle(modInfo->name());
@@ -90,7 +90,7 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo if (directory->originExists(ToWString(modInfo->name()))) {
m_Origin = &directory->getOriginByName(ToWString(modInfo->name()));
if (m_Origin->isDisabled()) {
- m_Origin = NULL;
+ m_Origin = nullptr;
}
}
@@ -115,7 +115,7 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo }
initINITweaks();
- ui->tabWidget->setTabEnabled(TAB_CONFLICTS, m_Origin != NULL);
+ ui->tabWidget->setTabEnabled(TAB_CONFLICTS, m_Origin != nullptr);
if (ui->tabWidget->currentIndex() == TAB_NEXUS) {
activateNexusTab();
@@ -248,7 +248,7 @@ void ModInfoDialog::refreshLists() ui->overwriteTree->clear();
ui->overwrittenTree->clear();
- if (m_Origin != NULL) {
+ if (m_Origin != nullptr) {
std::vector<FileEntry::Ptr> files = m_Origin->getFiles();
for (auto iter = files.begin(); iter != files.end(); ++iter) {
QString relativeName = QDir::fromNativeSeparators(ToQString((*iter)->getRelativePath()));
@@ -692,7 +692,7 @@ void ModInfoDialog::linkClicked(const QUrl &url) this->close();
emit nexusLinkActivated(url.toString());
} else {
- ::ShellExecuteW(NULL, L"open", ToWString(url.toString()).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", ToWString(url.toString()).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
}
@@ -981,7 +981,7 @@ void ModInfoDialog::openFile(const QModelIndex &index) {
QString fileName = m_FileSystemModel->filePath(index);
- HINSTANCE res = ::ShellExecuteW(NULL, L"open", ToWString(fileName).c_str(), NULL, NULL, SW_SHOW);
+ HINSTANCE res = ::ShellExecuteW(nullptr, L"open", ToWString(fileName).c_str(), nullptr, nullptr, SW_SHOW);
if ((int)res <= 32) {
qCritical("failed to invoke %s: %d", fileName.toUtf8().constData(), res);
}
@@ -1065,7 +1065,7 @@ void ModInfoDialog::on_fileTree_customContextMenuRequested(const QPoint &pos) void ModInfoDialog::on_categoriesTree_itemChanged(QTreeWidgetItem *item, int)
{
QTreeWidgetItem *parent = item->parent();
- while ((parent != NULL) && ((parent->flags() & Qt::ItemIsUserCheckable) != 0) && (parent->checkState(0) == Qt::Unchecked)) {
+ while ((parent != nullptr) && ((parent->flags() & Qt::ItemIsUserCheckable) != 0) && (parent->checkState(0) == Qt::Unchecked)) {
parent->setCheckState(0, Qt::Checked);
parent = parent->parent();
}
@@ -1184,7 +1184,7 @@ void ModInfoDialog::on_overwriteTree_customContextMenuRequested(const QPoint &po {
m_ConflictsContextItem = ui->overwriteTree->itemAt(pos.x(), pos.y());
- if (m_ConflictsContextItem != NULL) {
+ if (m_ConflictsContextItem != nullptr) {
// offer to hide/unhide file, but not for files from archives
if (!m_ConflictsContextItem->data(1, Qt::UserRole + 2).toBool()) {
QMenu menu;
diff --git a/src/modlist.cpp b/src/modlist.cpp index 7b922c7c..6d55764a 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -50,8 +50,8 @@ using namespace MOBase; ModList::ModList(QObject *parent)
: QAbstractItemModel(parent)
- , m_Profile(NULL)
- , m_NexusInterface(NULL)
+ , m_Profile(nullptr)
+ , m_NexusInterface(nullptr)
, m_Modified(false)
, m_FontMetrics(QFont())
, m_DropOnItems(false)
@@ -176,7 +176,7 @@ QString ModList::contentsToToolTip(const std::vector<ModInfo::EContent> &content QVariant ModList::data(const QModelIndex &modelIndex, int role) const
{
- if (m_Profile == NULL) return QVariant();
+ if (m_Profile == nullptr) return QVariant();
if (!modelIndex.isValid()) return QVariant();
unsigned int modIndex = modelIndex.row();
int column = modelIndex.column();
@@ -409,7 +409,7 @@ bool ModList::renameMod(int index, const QString &newName) {
QString nameFixed = newName;
if (!fixDirectoryName(nameFixed) || nameFixed.isEmpty()) {
- MessageDialog::showMessage(tr("Invalid name"), NULL);
+ MessageDialog::showMessage(tr("Invalid name"), nullptr);
return false;
}
@@ -432,7 +432,7 @@ bool ModList::renameMod(int index, const QString &newName) bool ModList::setData(const QModelIndex &index, const QVariant &value, int role)
{
- if (m_Profile == NULL) return false;
+ if (m_Profile == nullptr) return false;
if (static_cast<unsigned int>(index.row()) >= ModInfo::getNumMods()) {
return false;
@@ -580,7 +580,7 @@ QStringList ModList::mimeTypes() const void ModList::changeModPriority(std::vector<int> sourceIndices, int newPriority)
{
- if (m_Profile == NULL) return;
+ if (m_Profile == nullptr) return;
emit layoutAboutToBeChanged();
Profile *profile = m_Profile;
@@ -614,7 +614,7 @@ void ModList::changeModPriority(std::vector<int> sourceIndices, int newPriority) void ModList::changeModPriority(int sourceIndex, int newPriority)
{
- if (m_Profile == NULL) return;
+ if (m_Profile == nullptr) return;
emit layoutAboutToBeChanged();
m_Profile->setModPriority(sourceIndex, newPriority);
@@ -828,7 +828,7 @@ bool ModList::dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int return true;
}
- if (m_Profile == NULL) return false;
+ if (m_Profile == nullptr) return false;
if (mimeData->hasUrls()) {
return dropURLs(mimeData, row, parent);
} else {
@@ -843,7 +843,7 @@ void ModList::removeRowForce(int row) if (static_cast<unsigned int>(row) >= ModInfo::getNumMods()) {
return;
}
- if (m_Profile == NULL) return;
+ if (m_Profile == nullptr) return;
m_Profile->setModEnabled(row, false);
@@ -871,7 +871,7 @@ void ModList::removeRow(int row, const QModelIndex&) if (static_cast<unsigned int>(row) >= ModInfo::getNumMods()) {
return;
}
- if (m_Profile == NULL) return;
+ if (m_Profile == nullptr) return;
m_Profile->setModEnabled(row, false);
@@ -981,28 +981,28 @@ 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) && (contextEvent->reason() == QContextMenuEvent::Mouse)) {
+ if ((object != nullptr) && (contextEvent->reason() == QContextMenuEvent::Mouse)) {
emit requestColumnSelect(object->mapToGlobal(contextEvent->pos()));
return true;
}
- } else if ((event->type() == QEvent::KeyPress) && (m_Profile != NULL)) {
+ } else if ((event->type() == QEvent::KeyPress) && (m_Profile != nullptr)) {
QAbstractItemView *itemView = qobject_cast<QAbstractItemView*>(obj);
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
- if ((itemView != NULL)
+ if ((itemView != nullptr)
&& (keyEvent->modifiers() == Qt::ControlModifier)
&& ((keyEvent->key() == Qt::Key_Up)
|| (keyEvent->key() == Qt::Key_Down))) {
QItemSelectionModel *selectionModel = itemView->selectionModel();
const QAbstractProxyModel *proxyModel = qobject_cast<const QAbstractProxyModel*>(selectionModel->model());
- const QSortFilterProxyModel *filterModel = NULL;
- while ((filterModel == NULL) && (proxyModel != NULL)) {
+ const QSortFilterProxyModel *filterModel = nullptr;
+ while ((filterModel == nullptr) && (proxyModel != nullptr)) {
filterModel = qobject_cast<const QSortFilterProxyModel*>(proxyModel);
- if (filterModel == NULL) {
+ if (filterModel == nullptr) {
proxyModel = qobject_cast<const QAbstractProxyModel*>(proxyModel->sourceModel());
}
}
- if (filterModel == NULL) {
+ if (filterModel == nullptr) {
return true;
}
int diff = -1;
@@ -1017,7 +1017,7 @@ bool ModList::eventFilter(QObject *obj, QEvent *event) }
}
foreach (QModelIndex idx, rows) {
- if (filterModel != NULL) {
+ if (filterModel != nullptr) {
idx = filterModel->mapToSource(idx);
}
int newPriority = m_Profile->getModPriority(idx.row()) + diff;
@@ -1043,7 +1043,7 @@ bool ModList::eventFilter(QObject *obj, QEvent *event) QModelIndex minRow, maxRow;
foreach (QModelIndex idx, selectionModel->selectedRows()) {
- if (proxyModel != NULL) {
+ if (proxyModel != nullptr) {
idx = proxyModel->mapToSource(idx);
}
if (!minRow.isValid() || (idx.row() < minRow.row())) {
diff --git a/src/modlist.h b/src/modlist.h index cf52b2ec..8dcab2fa 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -73,7 +73,7 @@ public: * @brief constructor
* @todo ensure this view works without a profile set, otherwise there are intransparent dependencies on the initialisation order
**/
- ModList(QObject *parent = NULL);
+ ModList(QObject *parent = nullptr);
~ModList();
diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index 9c30d0f0..6c24be98 100644 --- a/src/modlistsortproxy.cpp +++ b/src/modlistsortproxy.cpp @@ -83,7 +83,7 @@ Qt::ItemFlags ModListSortProxy::flags(const QModelIndex &modelIndex) const }
void ModListSortProxy::enableAllVisible()
{
- if (m_Profile == NULL) return;
+ if (m_Profile == nullptr) return;
for (int i = 0; i < this->rowCount(); ++i) {
int modID = mapToSource(index(i, 0)).data(Qt::UserRole + 1).toInt();
@@ -94,7 +94,7 @@ void ModListSortProxy::enableAllVisible() void ModListSortProxy::disableAllVisible()
{
- if (m_Profile == NULL) return;
+ if (m_Profile == nullptr) return;
for (int i = 0; i < this->rowCount(); ++i) {
int modID = mapToSource(index(i, 0)).data(Qt::UserRole + 1).toInt();
@@ -315,7 +315,7 @@ void ModListSortProxy::setFilterMode(ModListSortProxy::FilterMode mode) bool ModListSortProxy::filterAcceptsRow(int row, const QModelIndex &parent) const
{
- if (m_Profile == NULL) {
+ if (m_Profile == nullptr) {
return false;
}
diff --git a/src/motddialog.cpp b/src/motddialog.cpp index 9fa2f005..59ace4d1 100644 --- a/src/motddialog.cpp +++ b/src/motddialog.cpp @@ -45,5 +45,5 @@ void MotDDialog::on_okButton_clicked() void MotDDialog::linkClicked(const QUrl &url)
{
- ::ShellExecuteW(NULL, L"open", MOBase::ToWString(url.toString()).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", MOBase::ToWString(url.toString()).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp index b4006097..bd40921f 100644 --- a/src/nexusinterface.cpp +++ b/src/nexusinterface.cpp @@ -34,35 +34,34 @@ using namespace MOShared; NexusBridge::NexusBridge(const QString &subModule)
: m_Interface(NexusInterface::instance())
- , m_Url(MOBase::ToQString(MOShared::GameInfo::instance().getNexusInfoUrl()))
+ , m_Url() // lazy initialized
, m_SubModule(subModule)
{
}
-
void NexusBridge::requestDescription(int modID, QVariant userData)
{
- m_RequestIDs.insert(m_Interface->requestDescription(modID, this, userData, m_SubModule, m_Url));
+ m_RequestIDs.insert(m_Interface->requestDescription(modID, this, userData, m_SubModule, url()));
}
void NexusBridge::requestFiles(int modID, QVariant userData)
{
- m_RequestIDs.insert(m_Interface->requestFiles(modID, this, userData, m_SubModule, m_Url));
+ m_RequestIDs.insert(m_Interface->requestFiles(modID, this, userData, m_SubModule, url()));
}
void NexusBridge::requestFileInfo(int modID, int fileID, QVariant userData)
{
- m_RequestIDs.insert(m_Interface->requestFileInfo(modID, fileID, this, userData, m_SubModule, m_Url));
+ m_RequestIDs.insert(m_Interface->requestFileInfo(modID, fileID, this, userData, m_SubModule, url()));
}
void NexusBridge::requestDownloadURL(int modID, int fileID, QVariant userData)
{
- m_RequestIDs.insert(m_Interface->requestDownloadURL(modID, fileID, this, userData, m_SubModule, m_Url));
+ m_RequestIDs.insert(m_Interface->requestDownloadURL(modID, fileID, this, userData, m_SubModule, url()));
}
void NexusBridge::requestToggleEndorsement(int modID, bool endorse, QVariant userData)
{
- m_RequestIDs.insert(m_Interface->requestToggleEndorsement(modID, endorse, this, userData, m_SubModule, m_Url));
+ m_RequestIDs.insert(m_Interface->requestToggleEndorsement(modID, endorse, this, userData, m_SubModule, url()));
}
void NexusBridge::nxmDescriptionAvailable(int modID, QVariant userData, QVariant resultData, int requestID)
@@ -138,6 +137,13 @@ void NexusBridge::nxmRequestFailed(int modID, int fileID, QVariant userData, int }
}
+QString NexusBridge::url() {
+ if (m_Url.isEmpty()) {
+ m_Url = MOBase::ToQString(MOShared::GameInfo::instance().getNexusInfoUrl());
+ }
+ return m_Url;
+}
+
QAtomicInt NexusInterface::NXMRequestInfo::s_NextID(0);
@@ -212,8 +218,8 @@ void NexusInterface::interpretNexusFileName(const QString &fileName, QString &mo QString r3Highlight(fileName);
r3Highlight.insert(result.position(3) + result.length(3), "* ").insert(result.position(3), " *");
- selection.addChoice(candidate.c_str(), r3Highlight, strtol(candidate.c_str(), NULL, 10));
- selection.addChoice(candidate2.c_str() + offset, r2Highlight, abs(strtol(candidate2.c_str() + offset, NULL, 10)));
+ selection.addChoice(candidate.c_str(), r3Highlight, strtol(candidate.c_str(), nullptr, 10));
+ selection.addChoice(candidate2.c_str() + offset, r2Highlight, abs(strtol(candidate2.c_str() + offset, nullptr, 10)));
if (selection.exec() == QDialog::Accepted) {
modID = selection.getChoiceData().toInt();
} else {
@@ -223,7 +229,7 @@ void NexusInterface::interpretNexusFileName(const QString &fileName, QString &mo modID = -1;
}
} else {
- modID = strtol(candidate.c_str(), NULL, 10);
+ modID = strtol(candidate.c_str(), nullptr, 10);
}
qDebug("mod id guessed: %s -> %d", qPrintable(fileName), modID);
} else if (std::tr1::regex_search(fileNameUTF8.constData(), result, simpleexp)) {
@@ -536,7 +542,7 @@ void NexusInterface::requestFinished() void NexusInterface::requestError(QNetworkReply::NetworkError)
{
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
- if (reply == NULL) {
+ if (reply == nullptr) {
qWarning("invalid sender type");
return;
}
@@ -549,7 +555,7 @@ void NexusInterface::requestError(QNetworkReply::NetworkError) void NexusInterface::requestTimeout()
{
QTimer *timer = qobject_cast<QTimer*>(sender());
- if (timer == NULL) {
+ if (timer == nullptr) {
qWarning("invalid sender type");
return;
}
@@ -571,10 +577,10 @@ NexusInterface::NXMRequestInfo::NXMRequestInfo(int modID , int nexusGameId)
: m_ModID(modID)
, m_FileID(0)
- , m_Reply(NULL)
+ , m_Reply(nullptr)
, m_Type(type)
, m_UserData(userData)
- , m_Timeout(NULL)
+ , m_Timeout(nullptr)
, m_Reroute(false)
, m_ID(s_NextID.fetchAndAddAcquire(1))
, m_URL(url)
@@ -592,10 +598,10 @@ NexusInterface::NXMRequestInfo::NXMRequestInfo(std::vector<int> modIDList : m_ModID(-1)
, m_ModIDList(modIDList)
, m_FileID(0)
- , m_Reply(NULL)
+ , m_Reply(nullptr)
, m_Type(type)
, m_UserData(userData)
- , m_Timeout(NULL)
+ , m_Timeout(nullptr)
, m_Reroute(false)
, m_ID(s_NextID.fetchAndAddAcquire(1))
, m_URL(url)
@@ -613,10 +619,10 @@ NexusInterface::NXMRequestInfo::NXMRequestInfo(int modID , int nexusGameId)
: m_ModID(modID)
, m_FileID(fileID)
- , m_Reply(NULL)
+ , m_Reply(nullptr)
, m_Type(type)
, m_UserData(userData)
- , m_Timeout(NULL)
+ , m_Timeout(nullptr)
, m_Reroute(false)
, m_ID(s_NextID.fetchAndAddAcquire(1))
, m_URL(url)
diff --git a/src/nexusinterface.h b/src/nexusinterface.h index af2f8c75..28accd3d 100644 --- a/src/nexusinterface.h +++ b/src/nexusinterface.h @@ -109,6 +109,10 @@ public slots: private:
+ QString url();
+
+private:
+
NexusInterface *m_Interface;
QString m_Url;
QString m_SubModule;
diff --git a/src/noeditdelegate.cpp b/src/noeditdelegate.cpp index ab8a4880..d5147b9f 100644 --- a/src/noeditdelegate.cpp +++ b/src/noeditdelegate.cpp @@ -6,5 +6,5 @@ NoEditDelegate::NoEditDelegate(QObject *parent) }
QWidget *NoEditDelegate::createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const {
- return NULL;
+ return nullptr;
}
diff --git a/src/noeditdelegate.h b/src/noeditdelegate.h index d0ba2f68..6fd5ba76 100644 --- a/src/noeditdelegate.h +++ b/src/noeditdelegate.h @@ -5,7 +5,7 @@ class NoEditDelegate: public QStyledItemDelegate {
public:
- NoEditDelegate(QObject *parent = NULL);
+ NoEditDelegate(QObject *parent = nullptr);
virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp index 9db9213c..8ec9080e 100644 --- a/src/nxmaccessmanager.cpp +++ b/src/nxmaccessmanager.cpp @@ -44,19 +44,21 @@ using namespace MOShared; NXMAccessManager::NXMAccessManager(QObject *parent, const QString &moVersion)
: QNetworkAccessManager(parent)
- , m_LoginReply(NULL)
+ , m_LoginReply(nullptr)
, m_ProgressDialog()
, m_MOVersion(moVersion)
, m_LoginAttempted(false)
{
- setCookieJar(new PersistentCookieJar(Settings::instance().getCacheDirectory()));
+
+ setCookieJar(new PersistentCookieJar(
+ QDir::fromNativeSeparators(Settings::instance().getCacheDirectory() + "/nexus_cookies.dat")));
}
NXMAccessManager::~NXMAccessManager()
{
- if (m_LoginReply != NULL) {
+ if (m_LoginReply != nullptr) {
m_LoginReply->deleteLater();
- m_LoginReply = NULL;
+ m_LoginReply = nullptr;
}
}
@@ -102,13 +104,13 @@ bool NXMAccessManager::loggedIn() const bool NXMAccessManager::loginWaiting() const
{
- return m_LoginReply != NULL;
+ return m_LoginReply != nullptr;
}
void NXMAccessManager::login(const QString &username, const QString &password)
{
- if (m_LoginReply != NULL) {
+ if (m_LoginReply != nullptr) {
return;
}
@@ -166,7 +168,7 @@ void NXMAccessManager::loginTimeout() {
emit loginFailed(tr("timeout"));
m_LoginReply->deleteLater();
- m_LoginReply = NULL;
+ m_LoginReply = nullptr;
m_LoginAttempted = false; // this usually means we might have usccess later
m_LoginTimeout.stop();
m_Username.clear();
@@ -178,10 +180,10 @@ void NXMAccessManager::loginError(QNetworkReply::NetworkError) {
m_ProgressDialog.hide();
m_LoginTimeout.stop();
- if (m_LoginReply != NULL) {
+ if (m_LoginReply != nullptr) {
emit loginFailed(m_LoginReply->errorString());
m_LoginReply->deleteLater();
- m_LoginReply = NULL;
+ m_LoginReply = nullptr;
} else {
emit loginFailed(tr("Unknown error"));
}
@@ -214,7 +216,7 @@ void NXMAccessManager::loginFinished() m_LoginTimeout.stop();
m_LoginReply->deleteLater();
- m_LoginReply = NULL;
+ m_LoginReply = nullptr;
m_Username.clear();
m_Password.clear();
}
diff --git a/src/organizer.pro b/src/organizer.pro index 42836524..4524a09b 100644 --- a/src/organizer.pro +++ b/src/organizer.pro @@ -284,7 +284,8 @@ CONFIG(debug, debug|release) { #QMAKE_CXXFLAGS_WARN_ON -= -W3
#QMAKE_CXXFLAGS_WARN_ON += -W4
-QMAKE_CXXFLAGS += /wd4100 -wd4127 -wd4512 -wd4189
+QMAKE_CXXFLAGS -= -w34100 -w34189
+QMAKE_CXXFLAGS += -wd4100 -wd4127 -wd4512 -wd4189
CONFIG += embed_manifest_exe
@@ -336,7 +337,7 @@ SRCDIR ~= s,/,$$QMAKE_DIR_SEP,g DSTDIR ~= s,/,$$QMAKE_DIR_SEP,g
QMAKE_POST_LINK += xcopy /y /I $$quote($$SRCDIR\\ModOrganizer*.exe) $$quote($$DSTDIR) $$escape_expand(\\n)
-QMAKE_POST_LINK += xcopy /y /I $$quote($$SRCDIR\\ModOrganizer*.exe) $$quote($$DSTDIR) $$escape_expand(\\n)
+QMAKE_POST_LINK += xcopy /y /I $$quote($$SRCDIR\\ModOrganizer*.pdb) $$quote($$DSTDIR) $$escape_expand(\\n)
QMAKE_POST_LINK += xcopy /y /s /I $$quote($$BASEDIR\\stylesheets) $$quote($$DSTDIR)\\stylesheets $$escape_expand(\\n)
QMAKE_POST_LINK += xcopy /y /s /I $$quote($$BASEDIR\\tutorials) $$quote($$DSTDIR)\\tutorials $$escape_expand(\\n)
QMAKE_POST_LINK += xcopy /y /s /I $$quote($$BASEDIR\\*.qm) $$quote($$DSTDIR)\\translations $$escape_expand(\\n)
diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 0c414a15..5b322a0a 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -102,7 +102,7 @@ bool OrganizerCore::testForSteam() if (processIDs[i] != 0) {
HANDLE process = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processIDs[i]);
- if (process != NULL) {
+ if (process != nullptr) {
HMODULE module;
DWORD ignore;
@@ -183,12 +183,11 @@ OrganizerCore::OrganizerCore(const QSettings &initSettings) connect(&m_DirectoryRefresher, SIGNAL(refreshed()), this, SLOT(directory_refreshed()));
connect(&m_ModList, SIGNAL(removeOrigin(QString)), this, SLOT(removeOrigin(QString)));
+ connect(&m_PluginList, SIGNAL(saveTimer()), this, SLOT(savePluginList()));
connect(NexusInterface::instance()->getAccessManager(), SIGNAL(loginSuccessful(bool)), this, SLOT(loginSuccessful(bool)));
connect(NexusInterface::instance()->getAccessManager(), SIGNAL(loginFailed(QString)), this, SLOT(loginFailed(QString)));
- ModInfo::updateFromDisc(m_Settings.getModDirectory(), &m_DirectoryStructure, m_Settings.displayForeign());
-
// make directory refresher run in a separate thread
m_RefresherThread.start();
m_DirectoryRefresher.moveToThread(&m_RefresherThread);
@@ -227,7 +226,9 @@ void OrganizerCore::storeSettings() if (m_UserInterface != nullptr) {
m_UserInterface->storeSettings(settings);
}
- settings.setValue("selected_profile", m_CurrentProfile->getName().toUtf8().constData());
+ if (m_CurrentProfile != nullptr) {
+ settings.setValue("selected_profile", m_CurrentProfile->getName().toUtf8().constData());
+ }
settings.setValue("ask_for_nexuspw", m_AskForNexusPW);
settings.remove("customExecutables");
@@ -251,9 +252,6 @@ void OrganizerCore::storeSettings() }
settings.endArray();
- QComboBox *executableBox = findChild<QComboBox*>("executablesListBox");
- settings.setValue("selected_executable", executableBox->currentIndex());
-
FileDialogMemory::save(settings);
settings.sync();
@@ -300,6 +298,10 @@ void OrganizerCore::updateExecutablesList(QSettings &settings) }
settings.endArray();
+
+
+ // TODO this has nothing to do with executables list move to an appropriate function!
+ ModInfo::updateFromDisc(m_Settings.getModDirectory(), &m_DirectoryStructure, m_Settings.displayForeign());
}
void OrganizerCore::setUserInterface(IUserInterface *userInterface, QWidget *widget)
@@ -308,16 +310,17 @@ void OrganizerCore::setUserInterface(IUserInterface *userInterface, QWidget *wid m_UserInterface = userInterface;
- connect(&m_ModList, SIGNAL(modlist_changed(QModelIndex,int)), widget, SLOT(modorder_changed()));
- connect(&m_ModList, SIGNAL(showMessage(QString)), widget, SLOT(showMessage(QString)));
- connect(&m_ModList, SIGNAL(modRenamed(QString,QString)), widget, SLOT(modRenamed(QString,QString)));
- connect(&m_ModList, SIGNAL(modUninstalled(QString)), widget, SLOT(modRemoved(QString)));
- connect(&m_ModList, SIGNAL(modlist_changed(QModelIndex, int)), widget, SLOT(modlistChanged(QModelIndex, int)));
- connect(&m_ModList, SIGNAL(removeSelectedMods()), widget, SLOT(removeMod_clicked()));
- connect(&m_ModList, SIGNAL(requestColumnSelect(QPoint)), widget, SLOT(displayColumnSelection(QPoint)));
- connect(&m_ModList, SIGNAL(fileMoved(QString, QString, QString)), widget, SLOT(fileMoved(QString, QString, QString)));
- connect(&m_DownloadManager, SIGNAL(downloadAdded()), widget, SLOT(scrollToBottom()));
- connect(&m_DownloadManager, SIGNAL(showMessage(QString)), widget, SLOT(showMessage(QString)));
+ if (widget != nullptr) {
+ connect(&m_ModList, SIGNAL(modlist_changed(QModelIndex,int)), widget, SLOT(modorder_changed()));
+ connect(&m_ModList, SIGNAL(showMessage(QString)), widget, SLOT(showMessage(QString)));
+ connect(&m_ModList, SIGNAL(modRenamed(QString,QString)), widget, SLOT(modRenamed(QString,QString)));
+ connect(&m_ModList, SIGNAL(modUninstalled(QString)), widget, SLOT(modRemoved(QString)));
+ connect(&m_ModList, SIGNAL(modlist_changed(QModelIndex, int)), widget, SLOT(modlistChanged(QModelIndex, int)));
+ connect(&m_ModList, SIGNAL(removeSelectedMods()), widget, SLOT(removeMod_clicked()));
+ connect(&m_ModList, SIGNAL(requestColumnSelect(QPoint)), widget, SLOT(displayColumnSelection(QPoint)));
+ connect(&m_ModList, SIGNAL(fileMoved(QString, QString, QString)), widget, SLOT(fileMoved(QString, QString, QString)));
+ connect(&m_DownloadManager, SIGNAL(showMessage(QString)), widget, SLOT(showMessage(QString)));
+ }
m_InstallationManager.setParentWidget(widget);
m_Updater.setUserInterface(widget);
@@ -436,16 +439,29 @@ void OrganizerCore::removeOrigin(const QString &name) refreshLists();
}
+void OrganizerCore::downloadSpeed(const QString &serverName, int bytesPerSecond)
+{
+ m_Settings.setDownloadSpeed(serverName, bytesPerSecond);
+}
+
InstallationManager *OrganizerCore::installationManager()
{
return &m_InstallationManager;
}
-void OrganizerCore::setCurrentProfile(Profile *profile) {
+void OrganizerCore::setCurrentProfile(const QString &profileName)
+{
+ QString profileDir = qApp->property("dataPath").toString() + "/" + ToQString(AppConfig::profilesPath()) + "/" + profileName;
+
+ Profile *newProfile = new Profile(QDir(profileDir));
+
delete m_CurrentProfile;
- m_CurrentProfile = profile;
+ m_CurrentProfile = newProfile;
+ m_ModList.setProfile(newProfile);
+
connect(m_CurrentProfile, SIGNAL(modStatusChanged(uint)), this, SLOT(modStatusChanged(uint)));
- m_ModList.setProfile(profile);
+
+ refreshDirectoryStructure();
}
MOBase::IGameInfo &OrganizerCore::gameInfo() const
@@ -460,7 +476,7 @@ MOBase::IModRepositoryBridge *OrganizerCore::createNexusBridge() const QString OrganizerCore::profileName() const
{
- if (m_CurrentProfile != NULL) {
+ if (m_CurrentProfile != nullptr) {
return m_CurrentProfile->getName();
} else {
return "";
@@ -469,7 +485,7 @@ QString OrganizerCore::profileName() const QString OrganizerCore::profilePath() const
{
- if (m_CurrentProfile != NULL) {
+ if (m_CurrentProfile != nullptr) {
return m_CurrentProfile->getPath();
} else {
return "";
@@ -490,7 +506,7 @@ MOBase::IModInterface *OrganizerCore::getMod(const QString &name) {
unsigned int index = ModInfo::getIndex(name);
if (index == UINT_MAX) {
- return NULL;
+ return nullptr;
} else {
return ModInfo::getByIndex(index).data();
}
@@ -533,7 +549,7 @@ bool OrganizerCore::removeMod(MOBase::IModInterface *mod) }
}
-void OrganizerCore::modDataChanged(MOBase::IModInterface *mod)
+void OrganizerCore::modDataChanged(MOBase::IModInterface*)
{
refreshModList(false);
}
@@ -660,6 +676,63 @@ void OrganizerCore::installDownload(int index) }
}
+void OrganizerCore::installDownload(int downloadIndex)
+{
+ try {
+ QString fileName = m_DownloadManager.getFilePath(downloadIndex);
+ int modID = m_DownloadManager.getModID(downloadIndex);
+ GuessedValue<QString> modName;
+
+ // see if there already are mods with the specified mod id
+ if (modID != 0) {
+ std::vector<ModInfo::Ptr> modInfo = ModInfo::getByModID(modID);
+ for (auto iter = modInfo.begin(); iter != modInfo.end(); ++iter) {
+ std::vector<ModInfo::EFlag> flags = (*iter)->getFlags();
+ if (std::find(flags.begin(), flags.end(), ModInfo::FLAG_BACKUP) == flags.end()) {
+ modName.update((*iter)->name(), GUESS_PRESET);
+ (*iter)->saveMeta();
+ }
+ }
+ }
+
+ m_CurrentProfile->writeModlistNow();
+
+ bool hasIniTweaks = false;
+ m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
+ if (m_InstallationManager.install(fileName, modName, hasIniTweaks)) {
+ MessageDialog::showMessage(tr("Installation successful"), qApp->activeWindow());
+ refreshModList();
+
+ int modIndex = ModInfo::getIndex(modName);
+ if (modIndex != UINT_MAX) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(modIndex);
+
+ if (hasIniTweaks
+ && (m_UserInterface != nullptr)
+ && (QMessageBox::question(qApp->activeWindow(), tr("Configure Mod"),
+ tr("This mod contains ini tweaks. Do you want to configure them now?"),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)) {
+ m_UserInterface->displayModInformation(modInfo, modIndex, ModInfoDialog::TAB_INIFILES);
+ }
+
+ m_ModInstalled(modName);
+ } else {
+ reportError(tr("mod \"%1\" not found").arg(modName));
+ }
+ m_DownloadManager.markInstalled(downloadIndex);
+
+ emit modInstalled(modName);
+ } else if (m_InstallationManager.wasCancelled()) {
+ QMessageBox::information(qApp->activeWindow(),
+ tr("Installation cancelled"),
+ tr("The mod was not installed completely."),
+ QMessageBox::Ok);
+ }
+ } catch (const std::exception &e) {
+ reportError(e.what());
+ }
+}
+
QString OrganizerCore::resolvePath(const QString &fileName) const
{
if (m_DirectoryStructure == nullptr) {
@@ -677,7 +750,7 @@ QStringList OrganizerCore::listDirectories(const QString &directoryName) const {
QStringList result;
DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(ToWString(directoryName));
- if (dir != NULL) {
+ if (dir != nullptr) {
std::vector<DirectoryEntry*>::iterator current, end;
dir->getSubDirectories(current, end);
for (; current != end; ++current) {
@@ -691,7 +764,7 @@ QStringList OrganizerCore::findFiles(const QString &path, const std::function<bo {
QStringList result;
DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(ToWString(path));
- if (dir != NULL) {
+ if (dir != nullptr) {
std::vector<FileEntry::Ptr> files = dir->getFiles();
foreach (FileEntry::Ptr file, files) {
if (filter(ToQString(file->getFullPath()))) {
@@ -707,9 +780,9 @@ QStringList OrganizerCore::findFiles(const QString &path, const std::function<bo QStringList OrganizerCore::getFileOrigins(const QString &fileName) const
{
QStringList result;
- const FileEntry::Ptr file = m_DirectoryStructure->searchFile(ToWString(QFileInfo(fileName).fileName()), NULL);
+ const FileEntry::Ptr file = m_DirectoryStructure->searchFile(ToWString(QFileInfo(fileName).fileName()), nullptr);
- if (file.get() != NULL) {
+ if (file.get() != nullptr) {
result.append(ToQString(m_DirectoryStructure->getOriginByID(file->getOrigin()).getName()));
foreach (int i, file->getAlternatives()) {
result.append(ToQString(m_DirectoryStructure->getOriginByID(i).getName()));
@@ -724,7 +797,7 @@ QList<MOBase::IOrganizer::FileInfo> OrganizerCore::findFileInfos(const QString & {
QList<IOrganizer::FileInfo> result;
DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(ToWString(path));
- if (dir != NULL) {
+ if (dir != nullptr) {
std::vector<FileEntry::Ptr> files = dir->getFiles();
foreach (FileEntry::Ptr file, files) {
IOrganizer::FileInfo info;
@@ -768,11 +841,10 @@ void OrganizerCore::spawnBinary(const QFileInfo &binary, const QString &argument HANDLE processHandle = spawnBinaryDirect(binary, arguments, m_CurrentProfile->getName(), currentDirectory, steamAppID);
if (processHandle != INVALID_HANDLE_VALUE) {
if (closeAfterStart && (m_UserInterface != nullptr)) {
- qApp->closeAllWindows();
+ m_UserInterface->closeWindow();
} else {
- QWidget *mainWindow = qApp->activeWindow();
- if (mainWindow != nullptr) {
- mainWindow->setEnabled(false);
+ if (m_UserInterface != nullptr) {
+ m_UserInterface->setWindowEnabled(false);
}
// re-enable the locked dialog because what'd be the point otherwise?
dialog->setEnabled(true);
@@ -819,10 +891,9 @@ void OrganizerCore::spawnBinary(const QFileInfo &binary, const QString &argument }
::CloseHandle(processHandle);
- if (mainWindow != nullptr) {
- mainWindow->setEnabled(false);
+ if (m_UserInterface != nullptr) {
+ m_UserInterface->setWindowEnabled(true);
}
-
refreshDirectoryStructure();
// need to remove our stored load order because it may be outdated if a foreign tool changed the
// file time. After removing that file, refreshESPList will use the file time as the order
@@ -895,7 +966,7 @@ HANDLE OrganizerCore::startApplication(const QString &executable, const QStringL QString currentDirectory = cwd;
QString profileName = profile;
if (profile.length() == 0) {
- if (m_CurrentProfile != NULL) {
+ if (m_CurrentProfile != nullptr) {
profileName = m_CurrentProfile->getName();
} else {
throw MyException(tr("No profile set"));
@@ -904,6 +975,7 @@ HANDLE OrganizerCore::startApplication(const QString &executable, const QStringL QString steamAppID;
if (executable.contains('\\') || executable.contains('/')) {
// file path
+
binary = QFileInfo(executable);
if (binary.isRelative()) {
// relative path, should be relative to game directory
@@ -939,11 +1011,64 @@ HANDLE OrganizerCore::startApplication(const QString &executable, const QStringL return spawnBinaryDirect(binary, arguments, profileName, currentDirectory, steamAppID);
}
-bool OrganizerCore::waitForApplication(HANDLE handle, LPDWORD exitCode) const
+bool OrganizerCore::waitForProcessOrJob(HANDLE handle, LPDWORD exitCode)
{
if (m_UserInterface != nullptr) {
- return m_UserInterface->waitForProcessOrJob(handle, exitCode);
+ m_UserInterface->lock();
+ ON_BLOCK_EXIT([&] () { m_UserInterface->unlock(); });
+ }
+
+ DWORD retLen;
+ JOBOBJECT_BASIC_PROCESS_ID_LIST info;
+
+ bool isJobHandle = true;
+
+ ULONG lastProcessID = ULONG_MAX;
+ HANDLE processHandle = handle;
+
+ DWORD res = ::MsgWaitForMultipleObjects(1, &handle, false, 500, QS_KEY | QS_MOUSE);
+ while ((res != WAIT_FAILED)
+ && (res != WAIT_OBJECT_0)
+ && ((m_UserInterface == nullptr) || !m_UserInterface->unlockClicked())) {
+ if (isJobHandle) {
+ if (::QueryInformationJobObject(handle, JobObjectBasicProcessIdList, &info, sizeof(info), &retLen) > 0) {
+ if (info.NumberOfProcessIdsInList == 0) {
+ // fake signaled state
+ res = WAIT_OBJECT_0;
+ break;
+ } else {
+ // this is indeed a job handle. Figure out one of the process handles as well.
+ if (lastProcessID != info.ProcessIdList[0]) {
+ lastProcessID = info.ProcessIdList[0];
+ if (processHandle != handle) {
+ ::CloseHandle(processHandle);
+ }
+ processHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, lastProcessID);
+ }
+ }
+ } else {
+ // the info-object I passed only provides space for 1 process id. but since this code only cares about whether there
+ // is more than one that's good enough. ERROR_MORE_DATA simply signals there are at least two processes running.
+ // any other error probably means the handle is a regular process handle, probably caused by running MO in a job without
+ // the right to break out.
+ if (::GetLastError() != ERROR_MORE_DATA) {
+ isJobHandle = false;
+ }
+ }
+ }
+
+ // keep processing events so the app doesn't appear dead
+ QCoreApplication::processEvents();
+
+ res = ::MsgWaitForMultipleObjects(1, &handle, false, 500, QS_KEY | QS_MOUSE);
+ }
+
+ if (exitCode != nullptr) {
+ ::GetExitCodeProcess(processHandle, exitCode);
}
+ ::CloseHandle(processHandle);
+
+ return res == WAIT_OBJECT_0;
}
bool OrganizerCore::onAboutToRun(const std::function<bool (const QString &)> &func)
@@ -1057,7 +1182,6 @@ void OrganizerCore::refreshLists() void OrganizerCore::updateModActiveState(int index, bool active)
{
ModInfo::Ptr modInfo = ModInfo::getByIndex(index);
-
QDir dir(modInfo->absolutePath());
foreach (const QString &esm, dir.entryList(QStringList("*.esm"), QDir::Files)) {
m_PluginList.enableESP(esm, active);
@@ -1112,7 +1236,7 @@ void OrganizerCore::updateModInDirectoryStructure(unsigned int index, ModInfo::P void OrganizerCore::requestDownload(const QUrl &url, QNetworkReply *reply)
{
if (m_PluginContainer != nullptr) {
- for (IPluginModPage *modPage : m_PluginContainer->plugins<IPluginModPage>()) {
+ for (IPluginModPage *modPage : m_PluginContainer->plugins<MOBase::IPluginModPage>()) {
ModRepositoryFileInfo *fileInfo = new ModRepositoryFileInfo();
if (modPage->handlesDownload(url, reply->url(), *fileInfo)) {
fileInfo->repository = modPage->name();
diff --git a/src/organizercore.h b/src/organizercore.h index 1e03b20c..cf8d10f5 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -81,7 +81,7 @@ public: void setExecutablesDialog(const ExecutablesList &executablesList) { m_ExecutablesList = executablesList; }
Profile *currentProfile() { return m_CurrentProfile; }
- void setCurrentProfile(Profile *profile);
+ void setCurrentProfile(const QString &profileName);
void setExecutablesList(const ExecutablesList &executablesList);
@@ -97,7 +97,6 @@ public: bool isArchivesInit() const { return m_ArchivesInit; }
bool saveCurrentLists();
- void savePluginList();
void prepareStart();
@@ -107,52 +106,47 @@ public: void refreshDirectoryStructure();
void updateModInDirectoryStructure(unsigned int index, ModInfo::Ptr modInfo);
- void requestDownload(const QUrl &url, QNetworkReply *reply);
-
void doAfterLogin(const std::function<void()> &function) { m_PostLoginTasks.append(function); }
void spawnBinary(const QFileInfo &binary, const QString &arguments = "", const QDir ¤tDirectory = QDir(), bool closeAfterStart = true, const QString &steamAppID = "");
+ HANDLE spawnBinaryDirect(const QFileInfo &binary, const QString &arguments, const QString &profileName, const QDir ¤tDirectory, const QString &steamAppID);
- void modStatusChanged(unsigned int index);
-
- void loginSuccessful(bool necessary);
void loginSuccessfulUpdate(bool necessary);
- void loginFailed(const QString &message);
void loginFailedUpdate(const QString &message);
void syncOverwrite();
public:
- virtual MOBase::IGameInfo &gameInfo() const;
- virtual MOBase::IModRepositoryBridge *createNexusBridge() const;
- virtual QString profileName() const;
- virtual QString profilePath() const;
- virtual QString downloadsPath() const;
- virtual MOBase::VersionInfo appVersion() const;
- virtual MOBase::IModInterface *getMod(const QString &name);
- virtual MOBase::IModInterface *createMod(MOBase::GuessedValue<QString> &name);
- virtual bool removeMod(MOBase::IModInterface *mod);
- virtual void modDataChanged(MOBase::IModInterface *mod);
- virtual QVariant pluginSetting(const QString &pluginName, const QString &key) const;
- virtual void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
- virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def) const;
- virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync);
- virtual QString pluginDataPath() const;
- virtual MOBase::IModInterface *installMod(const QString &fileName, const QString &initModName);
- virtual QString resolvePath(const QString &fileName) const;
- virtual QStringList listDirectories(const QString &directoryName) const;
- virtual QStringList findFiles(const QString &path, const std::function<bool (const QString &)> &filter) const;
- virtual QStringList getFileOrigins(const QString &fileName) const;
- virtual QList<MOBase::IOrganizer::FileInfo> findFileInfos(const QString &path, const std::function<bool (const MOBase::IOrganizer::FileInfo &)> &filter) const;
- virtual DownloadManager *downloadManager();
- virtual PluginList *pluginList();
- virtual ModList *modList();
- virtual HANDLE startApplication(const QString &executable, const QStringList &args, const QString &cwd, const QString &profile);
- virtual bool waitForApplication(HANDLE handle, LPDWORD exitCode) const;
- virtual bool onModInstalled(const std::function<void (const QString &)> &func);
- virtual bool onAboutToRun(const std::function<bool (const QString &)> &func);
- virtual bool onFinishedRun(const std::function<void (const QString &, unsigned int)> &func);
- virtual void refreshModList(bool saveChanges = true);
+ MOBase::IGameInfo &gameInfo() const;
+ MOBase::IModRepositoryBridge *createNexusBridge() const;
+ QString profileName() const;
+ QString profilePath() const;
+ QString downloadsPath() const;
+ MOBase::VersionInfo appVersion() const;
+ MOBase::IModInterface *getMod(const QString &name);
+ MOBase::IModInterface *createMod(MOBase::GuessedValue<QString> &name);
+ bool removeMod(MOBase::IModInterface *mod);
+ void modDataChanged(MOBase::IModInterface *mod);
+ QVariant pluginSetting(const QString &pluginName, const QString &key) const;
+ void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
+ QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def) const;
+ void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync);
+ QString pluginDataPath() const;
+ virtual MOBase::IModInterface *installMod(const QString &fileName);
+ QString resolvePath(const QString &fileName) const;
+ QStringList listDirectories(const QString &directoryName) const;
+ QStringList findFiles(const QString &path, const std::function<bool (const QString &)> &filter) const;
+ QStringList getFileOrigins(const QString &fileName) const;
+ QList<MOBase::IOrganizer::FileInfo> findFileInfos(const QString &path, const std::function<bool (const MOBase::IOrganizer::FileInfo &)> &filter) const;
+ DownloadManager *downloadManager();
+ PluginList *pluginList();
+ ModList *modList();
+ HANDLE startApplication(const QString &executable, const QStringList &args, const QString &cwd, const QString &profile);
+ bool waitForApplication(HANDLE processHandle, LPDWORD exitCode = nullptr);
+ bool onModInstalled(const std::function<void (const QString &)> &func);
+ bool onAboutToRun(const std::function<bool (const QString &)> &func);
+ bool onFinishedRun(const std::function<void (const QString &, unsigned int)> &func);
+ void refreshModList(bool saveChanges = true);
public: // IPluginDiagnose interface
@@ -166,10 +160,19 @@ public slots: void profileRefresh();
void externalMessage(const QString &message);
- void installDownload(int index);
+
+ void savePluginList();
void refreshLists();
+ void installDownload(int downloadIndex);
+
+ void modStatusChanged(unsigned int index);
+ void requestDownload(const QUrl &url, QNetworkReply *reply);
+ void downloadRequestedNXM(const QString &url);
+
+ bool nexusLogin();
+
signals:
/**
@@ -184,8 +187,6 @@ private: bool queryLogin(QString &username, QString &password);
- bool nexusLogin();
-
void updateModActiveState(int index, bool active);
bool testForSteam();
@@ -194,9 +195,11 @@ private: private slots:
void directory_refreshed();
- void downloadRequestedNXM(const QString &url);
void downloadRequested(QNetworkReply *reply, int modID, const QString &fileName);
void removeOrigin(const QString &name);
+ void downloadSpeed(const QString &serverName, int bytesPerSecond);
+ void loginSuccessful(bool necessary);
+ void loginFailed(const QString &message);
private:
diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index 2ce5b3ee..ff030d40 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -102,7 +102,7 @@ HANDLE OrganizerProxy::startApplication(const QString &executable, const QString bool OrganizerProxy::waitForApplication(HANDLE handle, LPDWORD exitCode) const
{
- return m_Proxied->waitForApplication(handle, exitCode);
+ return m_Proxied->waitForProcessOrJob(handle, exitCode);
}
bool OrganizerProxy::onAboutToRun(const std::function<bool (const QString &)> &func)
diff --git a/src/organizerproxy.h b/src/organizerproxy.h index affe1665..29f8a8d1 100644 --- a/src/organizerproxy.h +++ b/src/organizerproxy.h @@ -39,7 +39,7 @@ public: virtual MOBase::IPluginList *pluginList();
virtual MOBase::IModList *modList();
virtual HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", const QString &profile = "");
- virtual bool waitForApplication(HANDLE handle, LPDWORD exitCode = NULL) const;
+ virtual bool waitForApplication(HANDLE handle, LPDWORD exitCode = nullptr) const;
virtual void refreshModList(bool saveChanges);
virtual bool onAboutToRun(const std::function<bool(const QString&)> &func);
diff --git a/src/overwriteinfodialog.cpp b/src/overwriteinfodialog.cpp index d06922bc..e956b025 100644 --- a/src/overwriteinfodialog.cpp +++ b/src/overwriteinfodialog.cpp @@ -71,8 +71,8 @@ private: OverwriteInfoDialog::OverwriteInfoDialog(ModInfo::Ptr modInfo, QWidget *parent)
- : QDialog(parent), ui(new Ui::OverwriteInfoDialog), m_FileSystemModel(NULL),
- m_DeleteAction(NULL), m_RenameAction(NULL), m_OpenAction(NULL)
+ : QDialog(parent), ui(new Ui::OverwriteInfoDialog), m_FileSystemModel(nullptr),
+ m_DeleteAction(nullptr), m_RenameAction(nullptr), m_OpenAction(nullptr)
{
ui->setupUi(this);
@@ -185,7 +185,7 @@ void OverwriteInfoDialog::openFile(const QModelIndex &index) {
QString fileName = m_FileSystemModel->filePath(index);
- HINSTANCE res = ::ShellExecuteW(NULL, L"open", ToWString(fileName).c_str(), NULL, NULL, SW_SHOW);
+ HINSTANCE res = ::ShellExecuteW(nullptr, L"open", ToWString(fileName).c_str(), nullptr, nullptr, SW_SHOW);
if ((int)res <= 32) {
qCritical("failed to invoke %s: %d", fileName.toUtf8().constData(), res);
}
@@ -26,7 +26,7 @@ //check for dll handle
//if this is the first call to the function then try to load it
//if not then if the function was loaded successfully make a call to it
-//otherwise return a NULL cast to the return parameter.
+//otherwise return a nullptr cast to the return parameter.
#define DECLARE_FUNCTION0(CallType, retVal, FuncName) \
typedef retVal (CallType* TYPE_##FuncName)(); \
@@ -38,17 +38,17 @@ { \
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(); \
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION1(CallType,retVal, FuncName, Param1) \
@@ -61,17 +61,17 @@ { \
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1); \
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION2(CallType,retVal, FuncName, Param1, Param2) \
@@ -84,17 +84,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2); \
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION3(CallType,retVal, FuncName, Param1, Param2, Param3) \
@@ -107,17 +107,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED; \
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION4(CallType,retVal, FuncName, Param1, Param2, Param3, Param4) \
@@ -130,17 +130,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION5(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5) \
@@ -153,17 +153,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4, p5);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION6(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6) \
@@ -176,17 +176,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4, p5, p6);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION7(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7) \
@@ -199,17 +199,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4, p5, p6, p7);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
} \
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION8(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8) \
@@ -222,17 +222,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4, p5, p6, p7, p8);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}\
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION9(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9) \
@@ -245,17 +245,17 @@ {\
if (FUNC_NAME != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4, p5, p6, p7, p8, p9);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}\
else\
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}
#define DECLARE_FUNCTION10(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10) \
@@ -268,17 +268,17 @@ {\
if (FUNC_LOADED != m_is##FuncName) \
{\
- m_##FuncName = NULL; \
+ m_##FuncName = nullptr; \
m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
m_is##FuncName = FUNC_LOADED;\
}\
- if (NULL != m_##FuncName) \
+ if (nullptr != m_##FuncName) \
return m_##FuncName(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);\
else \
- return (retVal)NULL; \
+ return (retVal)nullptr; \
}\
else \
- return (retVal)NULL;\
+ return (retVal)nullptr;\
}
//declare constructors and LoadFunctions
@@ -299,12 +299,12 @@ public: PDLL()
{
- m_dllHandle = NULL;
- m_dllName = NULL;
+ m_dllHandle = nullptr;
+ m_dllName = nullptr;
m_refCount = 0;
}
- //A NULL here means the name has already been set
+ //A nullptr here means the name has already been set
void LoadDll(LPCTSTR name, bool showMsg = true)
{
if (name)
@@ -313,7 +313,7 @@ public: //try to load
m_dllHandle = LoadLibrary(m_dllName);
- if (m_dllHandle == NULL && showMsg)
+ if (m_dllHandle == nullptr && showMsg)
{
std::ostringstream message;
message << "failed to load dll: " << ::GetLastError();
@@ -332,7 +332,7 @@ public: if (m_dllName)
{
delete []m_dllName;
- m_dllName = NULL;
+ m_dllName = nullptr;
}
//They may be setting this null (e.g., uninitialize)
@@ -357,8 +357,8 @@ public: if (m_refCount == 1 && m_dllName) //if this is first time, load the DLL
{
//we are assuming the name is already set
- LoadDll(NULL, showMsg);
- retVal = (m_dllHandle != NULL);
+ LoadDll(nullptr, showMsg);
+ retVal = (m_dllHandle != nullptr);
}
return retVal;
}
@@ -377,10 +377,10 @@ public: if (m_dllHandle)
{
FreeLibrary(m_dllHandle);
- m_dllHandle = NULL;
+ m_dllHandle = nullptr;
}
- SetDllName(NULL); //clear out the name & free memory
+ SetDllName(nullptr); //clear out the name & free memory
}
}
@@ -394,7 +394,7 @@ public: if (m_dllName)
{
delete [] m_dllName;
- m_dllName = NULL;
+ m_dllName = nullptr;
}
}
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 9e1da11b..bbcd3b6a 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -1,11 +1,9 @@ #include "plugincontainer.h"
#include "organizerproxy.h"
#include "report.h"
-#include <gameinfo.h>
#include <ipluginproxy.h>
#include <idownloadmanager.h>
#include <appconfig.h>
-#include <gameinfo.h>
#include <QAction>
#include <QToolButton>
#include <QCoreApplication>
@@ -24,6 +22,7 @@ namespace bf = boost::fusion; PluginContainer::PluginContainer(OrganizerCore *organizer)
: m_Organizer(organizer)
+ , m_UserInterface(nullptr)
{
}
@@ -33,6 +32,17 @@ void PluginContainer::setUserInterface(IUserInterface *userInterface, QWidget *w for (IPluginProxy *proxy : bf::at_key<IPluginProxy>(m_Plugins)) {
proxy->setParentWidget(widget);
}
+
+ if (userInterface != nullptr) {
+ for (IPluginModPage *modPage : bf::at_key<IPluginModPage>(m_Plugins)) {
+ userInterface->registerModPage(modPage);
+ }
+
+ for (IPluginTool *tool : bf::at_key<IPluginTool>(m_Plugins)) {
+ userInterface->registerPluginTool(tool);
+ }
+ }
+
m_UserInterface = userInterface;
}
@@ -49,7 +59,7 @@ QStringList PluginContainer::pluginFileNames() const bool PluginContainer::verifyPlugin(IPlugin *plugin)
{
- if (plugin == NULL) {
+ if (plugin == nullptr) {
return false;
} else if (!plugin->init(new OrganizerProxy(m_Organizer, plugin->name()))) {
qWarning("plugin failed to initialize");
@@ -69,7 +79,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) {
{ // generic treatment for all plugins
IPlugin *pluginObj = qobject_cast<IPlugin*>(plugin);
- if (pluginObj == NULL) {
+ if (pluginObj == nullptr) {
qDebug("not an IPlugin");
return false;
}
@@ -79,7 +89,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) { // diagnosis plugins
IPluginDiagnose *diagnose = qobject_cast<IPluginDiagnose*>(plugin);
- if (diagnose != NULL) {
+ if (diagnose != nullptr) {
bf::at_key<IPluginDiagnose>(m_Plugins).push_back(diagnose);
m_DiagnosisConnections.push_back(
diagnose->onInvalidated([&] () { emit diagnosisUpdate(); })
@@ -132,7 +142,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) foreach (const QString &pluginName, pluginNames) {
try {
QObject *proxiedPlugin = proxy->instantiate(pluginName);
- if (proxiedPlugin != NULL) {
+ if (proxiedPlugin != nullptr) {
if (registerPlugin(proxiedPlugin, pluginName)) {
qDebug("loaded plugin \"%s\"", qPrintable(pluginName));
} else {
@@ -238,7 +248,7 @@ void PluginContainer::loadPlugins() loadCheck.open(QIODevice::WriteOnly);
- QString pluginPath = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getOrganizerDirectory())) + "/" + ToQString(AppConfig::pluginPath());
+ QString pluginPath = qApp->applicationDirPath() + "/" + ToQString(AppConfig::pluginPath());
qDebug("looking for plugins in %s", QDir::toNativeSeparators(pluginPath).toUtf8().constData());
QDirIterator iter(pluginPath, QDir::Files | QDir::NoDotAndDotDot);
@@ -254,7 +264,7 @@ void PluginContainer::loadPlugins() QString pluginName = iter.filePath();
if (QLibrary::isLibrary(pluginName)) {
QPluginLoader *pluginLoader = new QPluginLoader(pluginName, this);
- if (pluginLoader->instance() == NULL) {
+ if (pluginLoader->instance() == nullptr) {
m_FailedPlugins.push_back(pluginName);
qCritical("failed to load plugin %s: %s",
qPrintable(pluginName), qPrintable(pluginLoader->errorString()));
diff --git a/src/plugincontainer.h b/src/plugincontainer.h index 3f4a98d7..02978e3e 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -77,14 +77,10 @@ signals: private:
bool verifyPlugin(MOBase::IPlugin *plugin);
- void registerPluginTool(MOBase::IPluginTool *tool);
- void registerModPage(MOBase::IPluginModPage *modPage);
void registerGame(MOBase::IPluginGame *game);
bool registerPlugin(QObject *pluginObj, const QString &fileName);
bool unregisterPlugin(QObject *pluginObj, const QString &fileName);
-private:
-
OrganizerCore *m_Organizer;
IUserInterface *m_UserInterface;
@@ -101,4 +97,5 @@ private: QFile m_PluginsCheck;
};
+
#endif // PLUGINCONTAINER_H
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index 8642ef13..f0352e8a 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -88,7 +88,7 @@ PluginList::PluginList(QObject *parent) m_Utf8Codec = QTextCodec::codecForName("utf-8");
m_LocalCodec = QTextCodec::codecForName("Windows-1252");
- if (m_LocalCodec == NULL) {
+ if (m_LocalCodec == nullptr) {
qCritical("required 8-bit string-encoding not supported.");
m_LocalCodec = m_Utf8Codec;
}
@@ -142,7 +142,7 @@ void PluginList::refresh(const QString &profileName, const DirectoryEntry &baseD std::vector<FileEntry::Ptr> files = baseDirectory.getFiles();
for (auto iter = files.begin(); iter != files.end(); ++iter) {
FileEntry::Ptr current = *iter;
- if (current.get() == NULL) {
+ if (current.get() == nullptr) {
continue;
}
QString filename = ToQString(current->getName());
@@ -157,7 +157,7 @@ void PluginList::refresh(const QString &profileName, const DirectoryEntry &baseD FilesOrigin &origin = baseDirectory.getOriginByID(current->getOrigin(archive));
QString iniPath = QFileInfo(filename).baseName() + ".ini";
- bool hasIni = baseDirectory.findFile(ToWString(iniPath)).get() != NULL;
+ bool hasIni = baseDirectory.findFile(ToWString(iniPath)).get() != nullptr;
QString originName = ToQString(origin.getName());
unsigned int modIndex = ModInfo::getIndex(originName);
@@ -166,7 +166,7 @@ void PluginList::refresh(const QString &profileName, const DirectoryEntry &baseD originName = modInfo->name();
}
- m_ESPs.push_back(ESPInfo(filename, forceEnabled, current->getFileTime(), originName, ToQString(current->getFullPath()), hasIni));
+ m_ESPs.push_back(ESPInfo(filename, forceEnabled, originName, ToQString(current->getFullPath()), hasIni));
} catch (const std::exception &e) {
reportError(tr("failed to update esp info for file %1 (source id: %2), error: %3").arg(filename).arg(current->getOrigin(archive)).arg(e.what()));
}
@@ -243,7 +243,7 @@ void PluginList::enableESP(const QString &name, bool enable) void PluginList::enableAll()
{
- if (QMessageBox::question(NULL, tr("Confirm"), tr("Really enable all plugins?"),
+ if (QMessageBox::question(nullptr, tr("Confirm"), tr("Really enable all plugins?"),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
for (std::vector<ESPInfo>::iterator iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) {
iter->m_Enabled = true;
@@ -255,7 +255,7 @@ void PluginList::enableAll() void PluginList::disableAll()
{
- if (QMessageBox::question(NULL, tr("Confirm"), tr("Really disable all plugins?"),
+ if (QMessageBox::question(nullptr, tr("Confirm"), tr("Really disable all plugins?"),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
for (std::vector<ESPInfo>::iterator iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) {
if (!iter->m_ForceEnabled) {
@@ -515,14 +515,14 @@ bool PluginList::saveLoadOrder(DirectoryEntry &directoryStructure) for (std::vector<ESPInfo>::iterator iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) {
std::wstring espName = ToWString(iter->m_Name);
const FileEntry::Ptr fileEntry = directoryStructure.findFile(espName);
- if (fileEntry.get() != NULL) {
+ if (fileEntry.get() != nullptr) {
QString fileName;
bool archive = false;
int originid = fileEntry->getOrigin(archive);
fileName = QString("%1\\%2").arg(QDir::toNativeSeparators(ToQString(directoryStructure.getOriginByID(originid).getPath()))).arg(iter->m_Name);
HANDLE file = ::CreateFile(ToWString(fileName).c_str(), GENERIC_READ | GENERIC_WRITE,
- 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (file == INVALID_HANDLE_VALUE) {
if (::GetLastError() == ERROR_SHARING_VIOLATION) {
// file is locked, probably the game is running
@@ -541,7 +541,7 @@ bool PluginList::saveLoadOrder(DirectoryEntry &directoryStructure) newWriteTime.dwHighDateTime = (DWORD)(temp >> 32);
iter->m_Time = newWriteTime;
fileEntry->setFileTime(newWriteTime);
- if (!::SetFileTime(file, NULL, NULL, &newWriteTime)) {
+ if (!::SetFileTime(file, nullptr, nullptr, &newWriteTime)) {
throw windows_error(QObject::tr("failed to set file time %1").arg(fileName).toUtf8().constData());
}
@@ -1102,7 +1102,7 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event) if (event->type() == QEvent::KeyPress) {
QAbstractItemView *itemView = qobject_cast<QAbstractItemView*>(obj);
- if (itemView == NULL) {
+ if (itemView == nullptr) {
return QObject::eventFilter(obj, event);
}
@@ -1112,7 +1112,7 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event) ((keyEvent->key() == Qt::Key_Up) || (keyEvent->key() == Qt::Key_Down))) {
QItemSelectionModel *selectionModel = itemView->selectionModel();
const QSortFilterProxyModel *proxyModel = qobject_cast<const QSortFilterProxyModel*>(selectionModel->model());
- if (proxyModel != NULL) {
+ if (proxyModel != nullptr) {
int diff = -1;
if (((keyEvent->key() == Qt::Key_Up) && (proxyModel->sortOrder() == Qt::DescendingOrder)) ||
((keyEvent->key() == Qt::Key_Down) && (proxyModel->sortOrder() == Qt::AscendingOrder))) {
@@ -1147,7 +1147,7 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event) QModelIndex minRow, maxRow;
foreach (QModelIndex idx, selectionModel->selectedRows()) {
- if (proxyModel != NULL) {
+ if (proxyModel != nullptr) {
idx = proxyModel->mapToSource(idx);
}
if (!minRow.isValid() || (idx.row() < minRow.row())) {
@@ -1168,7 +1168,7 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event) }
-PluginList::ESPInfo::ESPInfo(const QString &name, bool enabled, FILETIME,
+PluginList::ESPInfo::ESPInfo(const QString &name, bool enabled,
const QString &originName, const QString &fullPath,
bool hasIni)
: m_Name(name), m_FullPath(fullPath), m_Enabled(enabled), m_ForceEnabled(enabled),
diff --git a/src/pluginlist.h b/src/pluginlist.h index 729c6f8b..da644ad3 100644 --- a/src/pluginlist.h +++ b/src/pluginlist.h @@ -96,7 +96,7 @@ public: *
* @param parent parent object
**/
- PluginList(QObject *parent = NULL);
+ PluginList(QObject *parent = nullptr);
~PluginList();
@@ -272,7 +272,7 @@ private: struct ESPInfo {
- ESPInfo(const QString &name, bool enabled, FILETIME time, const QString &originName, const QString &fullPath, bool hasIni);
+ ESPInfo(const QString &name, bool enabled, const QString &originName, const QString &fullPath, bool hasIni);
QString m_Name;
QString m_FullPath;
bool m_Enabled;
diff --git a/src/problemsdialog.cpp b/src/problemsdialog.cpp index f324f1e8..60a0b1df 100644 --- a/src/problemsdialog.cpp +++ b/src/problemsdialog.cpp @@ -78,5 +78,5 @@ void ProblemsDialog::startFix() void ProblemsDialog::urlClicked(const QUrl &url)
{
- ::ShellExecuteW(NULL, L"open", ToWString(url.toString()).c_str(), NULL, NULL, SW_SHOWNORMAL);
+ ::ShellExecuteW(nullptr, L"open", ToWString(url.toString()).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
}
diff --git a/src/profile.cpp b/src/profile.cpp index 12992291..21c9d1d8 100644 --- a/src/profile.cpp +++ b/src/profile.cpp @@ -42,7 +42,7 @@ using namespace MOBase; using namespace MOShared; Profile::Profile() - : m_SaveTimer(NULL) + : m_SaveTimer(nullptr) { initTimer(); } @@ -56,10 +56,11 @@ void Profile::touchFile(QString fileName) } Profile::Profile(const QString &name, bool useDefaultSettings) - : m_SaveTimer(NULL) + : m_SaveTimer(nullptr) { initTimer(); - QString profilesDir = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getProfilesDir())); + QString profilesDir = qApp->property("datapath").toString() + "/" + ToQString(AppConfig::profilesPath()); +qDebug("pd %s", qPrintable(profilesDir)); QDir profileBase(profilesDir); QString fixedName = name; @@ -78,6 +79,7 @@ Profile::Profile(const QString &name, bool useDefaultSettings) touchFile("modlist.txt"); touchFile("archives.txt"); +qDebug("fp %s", qPrintable(fullPath)); GameInfo::instance().createProfile(ToWString(fullPath), useDefaultSettings); } catch (...) { // clean up in case of an error @@ -88,8 +90,8 @@ Profile::Profile(const QString &name, bool useDefaultSettings) } -Profile::Profile(const QDir& directory) - : m_Directory(directory), m_SaveTimer(NULL) +Profile::Profile(const QDir &directory) + : m_Directory(directory), m_SaveTimer(nullptr) { initTimer(); if (!QFile::exists(m_Directory.filePath("modlist.txt"))) { @@ -106,7 +108,7 @@ Profile::Profile(const QDir& directory) Profile::Profile(const Profile& reference) - : m_Directory(reference.m_Directory), m_SaveTimer(NULL) + : m_Directory(reference.m_Directory), m_SaveTimer(nullptr) { initTimer(); refreshModStatus(); @@ -552,7 +554,7 @@ void Profile::mergeTweak(const QString &tweakName, const QString &tweakedIni) co for (std::vector<std::wstring>::iterator iter = sections.begin(); iter != sections.end(); ++iter) { // retrieve the names of all keys - size = ::GetPrivateProfileStringW(iter->c_str(), NULL, NULL, buffer.data(), + size = ::GetPrivateProfileStringW(iter->c_str(), nullptr, nullptr, buffer.data(), bufferSize, tweakNameW.c_str()); if (size == bufferSize - 2) { throw MyException(QString("Buffer too small. Please report this as a bug. " @@ -565,7 +567,7 @@ void Profile::mergeTweak(const QString &tweakName, const QString &tweakedIni) co keyIter != keys.end(); ++keyIter) { //TODO this treats everything as strings but how could I differentiate the type? ::GetPrivateProfileStringW(iter->c_str(), keyIter->c_str(), - NULL, buffer.data(), bufferSize, ToWString(tweakName).c_str()); + nullptr, buffer.data(), bufferSize, ToWString(tweakName).c_str()); ::WritePrivateProfileStringW(iter->c_str(), keyIter->c_str(), buffer.data(), tweakedIniW.c_str()); } @@ -585,7 +587,7 @@ void Profile::mergeTweaks(ModInfo::Ptr modInfo, const QString &tweakedIni) const bool Profile::invalidationActive(bool *supported) const { if (GameInfo::instance().requiresBSAInvalidation()) { - if (supported != NULL) { + if (supported != nullptr) { *supported = true; } wchar_t buffer[1024]; @@ -596,7 +598,7 @@ bool Profile::invalidationActive(bool *supported) const if (::GetPrivateProfileStringW(L"Archive", GameInfo::instance().archiveListKey().c_str(), L"", buffer, 1024, iniFileName.c_str()) == 0) { if (errno != 0x02) { - if (supported != NULL) { + if (supported != nullptr) { *supported = false; } return false; diff --git a/src/profilesdialog.cpp b/src/profilesdialog.cpp index 3fdad880..26891b3c 100644 --- a/src/profilesdialog.cpp +++ b/src/profilesdialog.cpp @@ -177,7 +177,7 @@ void ProfilesDialog::on_removeProfileButton_clicked() Profile::Ptr currentProfile = profilesList->currentItem()->data(Qt::UserRole).value<Profile::Ptr>();
QString profilePath;
- if (currentProfile.get() == NULL) {
+ if (currentProfile.get() == nullptr) {
profilePath = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getProfilesDir())) + "/" + profilesList->currentItem()->text();
if (QMessageBox::question(this, tr("Profile broken"),
tr("This profile you're about to delete seems to be broken or the path is invalid. "
@@ -190,7 +190,7 @@ void ProfilesDialog::on_removeProfileButton_clicked() profilePath = currentProfile->getPath();
}
QListWidgetItem* item = profilesList->takeItem(profilesList->currentRow());
- if (item != NULL) {
+ if (item != nullptr) {
delete item;
}
if (!shellDelete(QStringList(profilePath))) {
@@ -231,7 +231,7 @@ void ProfilesDialog::on_invalidationBox_stateChanged(int state) QListWidget *profilesList = findChild<QListWidget*>("profilesList");
QListWidgetItem *currentItem = profilesList->currentItem();
- if (currentItem == NULL) {
+ if (currentItem == nullptr) {
return;
}
if (!ui->invalidationBox->isEnabled()) {
@@ -263,7 +263,7 @@ void ProfilesDialog::on_profilesList_currentItemChanged(QListWidgetItem *current QPushButton *transferButton = findChild<QPushButton*>("transferButton");
QPushButton *renameButton = findChild<QPushButton*>("renameButton");
- if (current != NULL) {
+ if (current != nullptr) {
if (!current->data(Qt::UserRole).isValid()) return;
const Profile::Ptr currentProfile = current->data(Qt::UserRole).value<Profile::Ptr>();
diff --git a/src/report.cpp b/src/report.cpp index 5cf36078..cca511a9 100644 --- a/src/report.cpp +++ b/src/report.cpp @@ -33,7 +33,7 @@ void reportError(QString message) QMessageBox messageBox(QMessageBox::Warning, QObject::tr("Error"), message, QMessageBox::Ok);
messageBox.exec();
} else {
- ::MessageBoxW(NULL, ToWString(message).c_str(), ToWString(QObject::tr("Error")).c_str(), MB_ICONERROR | MB_OK);
+ ::MessageBoxW(nullptr, ToWString(message).c_str(), ToWString(QObject::tr("Error")).c_str(), MB_ICONERROR | MB_OK);
}
}
diff --git a/src/savegameinfowidget.cpp b/src/savegameinfowidget.cpp index 093b794c..7da89747 100644 --- a/src/savegameinfowidget.cpp +++ b/src/savegameinfowidget.cpp @@ -46,9 +46,9 @@ void SaveGameInfoWidget::setSave(const SaveGame *saveGame) ui->levelLabel->setText(QString("%1").arg(saveGame->pcLevel()));
ui->dateLabel->setText(MOBase::ToString(saveGame->creationTime()));
ui->screenshotLabel->setPixmap(QPixmap::fromImage(saveGame->screenshot()));
- if (ui->gameFrame->layout() != NULL) {
- QLayoutItem *item = NULL;
- while ((item = ui->gameFrame->layout()->takeAt(0)) != NULL) {
+ if (ui->gameFrame->layout() != nullptr) {
+ QLayoutItem *item = nullptr;
+ while ((item = ui->gameFrame->layout()->takeAt(0)) != nullptr) {
delete item->widget();
delete item;
}
diff --git a/src/selectiondialog.cpp b/src/selectiondialog.cpp index b4df8a1f..1b284928 100644 --- a/src/selectiondialog.cpp +++ b/src/selectiondialog.cpp @@ -23,7 +23,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <QCommandLinkButton>
SelectionDialog::SelectionDialog(const QString &description, QWidget *parent)
- : QDialog(parent), ui(new Ui::SelectionDialog), m_Choice(NULL), m_ValidateByData(false)
+ : QDialog(parent), ui(new Ui::SelectionDialog), m_Choice(nullptr), m_ValidateByData(false)
{
ui->setupUi(this);
@@ -58,7 +58,7 @@ QVariant SelectionDialog::getChoiceData() QString SelectionDialog::getChoiceString()
{
- if ((m_Choice == NULL) ||
+ if ((m_Choice == nullptr) ||
(m_ValidateByData && !m_Choice->property("data").isValid())) {
return QString();
} else {
diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp index 803b2cfa..0c222ebb 100644 --- a/src/selfupdater.cpp +++ b/src/selfupdater.cpp @@ -48,7 +48,7 @@ typedef Archive* (*CreateArchiveType)(); template <typename T> T resolveFunction(QLibrary &lib, const char *name)
{
T temp = reinterpret_cast<T>(lib.resolve(name));
- if (temp == NULL) {
+ if (temp == nullptr) {
throw std::runtime_error(QObject::tr("invalid 7-zip32.dll: %1").arg(lib.errorString()).toLatin1().constData());
}
return temp;
@@ -56,8 +56,12 @@ template <typename T> T resolveFunction(QLibrary &lib, const char *name) SelfUpdater::SelfUpdater(NexusInterface *nexusInterface)
- : m_Parent(nullptr), m_Interface(nexusInterface), m_UpdateRequestID(-1),
- m_Reply(NULL), m_Progress(nullptr), m_Attempts(3)
+ : m_Parent(nullptr)
+ , m_Interface(nexusInterface)
+ , m_UpdateRequestID(-1)
+ , m_Reply(nullptr)
+ , m_Progress(nullptr)
+ , m_Attempts(3)
{
m_Progress.setMaximum(100);
@@ -90,7 +94,6 @@ SelfUpdater::~SelfUpdater() void SelfUpdater::setUserInterface(QWidget *widget)
{
- m_Progress.setParent(widget);
m_Parent = widget;
}
@@ -130,6 +133,16 @@ void SelfUpdater::startUpdate() }
+void SelfUpdater::showProgress()
+{
+ m_Progress.setModal(true);
+ m_Progress.setParent(m_Parent, Qt::Dialog);
+ m_Progress.show();
+ m_Progress.setValue(0);
+ m_Progress.setWindowTitle(tr("Update"));
+ m_Progress.setLabelText(tr("Download in progress"));
+}
+
void SelfUpdater::download(const QString &downloadLink, const QString &fileName)
{
QNetworkAccessManager *accessManager = m_Interface->getAccessManager();
@@ -139,11 +152,7 @@ void SelfUpdater::download(const QString &downloadLink, const QString &fileName) m_Reply = accessManager->get(request);
m_UpdateFile.setFileName(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getOrganizerDirectory()).append("\\").append(fileName)));
m_UpdateFile.open(QIODevice::WriteOnly);
- m_Progress.setModal(true);
- m_Progress.show();
- m_Progress.setValue(0);
- m_Progress.setWindowTitle(tr("Update"));
- m_Progress.setLabelText(tr("Download in progress"));
+ showProgress();
connect(m_Reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgress(qint64, qint64)));
connect(m_Reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
@@ -153,7 +162,7 @@ void SelfUpdater::download(const QString &downloadLink, const QString &fileName) void SelfUpdater::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
- if (m_Reply != NULL) {
+ if (m_Reply != nullptr) {
if (m_Canceled) {
m_Reply->abort();
} else {
@@ -167,7 +176,7 @@ void SelfUpdater::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) void SelfUpdater::downloadReadyRead()
{
- if (m_Reply != NULL) {
+ if (m_Reply != nullptr) {
m_UpdateFile.write(m_Reply->readAll());
}
}
@@ -177,7 +186,7 @@ void SelfUpdater::downloadFinished() {
int error = QNetworkReply::NoError;
- if (m_Reply != NULL) {
+ if (m_Reply != nullptr) {
m_UpdateFile.write(m_Reply->readAll());
error = m_Reply->error();
@@ -189,7 +198,7 @@ void SelfUpdater::downloadFinished() m_Progress.hide();
m_Reply->close();
m_Reply->deleteLater();
- m_Reply = NULL;
+ m_Reply = nullptr;
}
m_UpdateFile.close();
diff --git a/src/selfupdater.h b/src/selfupdater.h index 3490b58a..c376234a 100644 --- a/src/selfupdater.h +++ b/src/selfupdater.h @@ -119,6 +119,7 @@ private: void updateProgressFile(LPCWSTR fileName);
void report7ZipError(LPCWSTR errorMessage);
QString retrieveNews(const QString &description);
+ void showProgress();
private slots:
diff --git a/src/settings.cpp b/src/settings.cpp index 8571a83b..f44edb24 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -57,13 +57,13 @@ private: static const unsigned char Key2[20] = { 0x99, 0xb8, 0x76, 0x42, 0x3e, 0xc1, 0x60, 0xa4, 0x5b, 0x01, 0xdb, 0xf8, 0x43, 0x3a, 0xb7, 0xb6, 0x98, 0xd4, 0x7d, 0xa2 }; -Settings *Settings::s_Instance = NULL; +Settings *Settings::s_Instance = nullptr; Settings::Settings(const QSettings &settingsSource) : m_Settings(settingsSource.fileName(), settingsSource.format()) { - if (s_Instance != NULL) { + if (s_Instance != nullptr) { throw std::runtime_error("second instance of \"Settings\" created"); } else { s_Instance = this; @@ -73,13 +73,13 @@ Settings::Settings(const QSettings &settingsSource) Settings::~Settings() { - s_Instance = NULL; + s_Instance = nullptr; } Settings &Settings::instance() { - if (s_Instance == NULL) { + if (s_Instance == nullptr) { throw std::runtime_error("no instance of \"Settings\""); } return *s_Instance; @@ -110,9 +110,9 @@ void Settings::registerAsNXMHandler(bool force) std::wstring executable = ToWString(QCoreApplication::applicationFilePath()); std::wstring mode = force ? L"forcereg" : L"reg"; std::wstring parameters = mode + L" " + GameInfo::instance().getGameShortName() + L" \"" + executable + L"\""; - HINSTANCE res = ::ShellExecuteW(NULL, L"open", nxmPath.c_str(), parameters.c_str(), NULL, SW_SHOWNORMAL); + HINSTANCE res = ::ShellExecuteW(nullptr, L"open", nxmPath.c_str(), parameters.c_str(), nullptr, SW_SHOWNORMAL); if ((int)res <= 32) { - QMessageBox::critical(NULL, tr("Failed"), + QMessageBox::critical(nullptr, tr("Failed"), tr("Sorry, failed to start the helper application")); } } @@ -652,7 +652,7 @@ void Settings::query(QWidget *parent) { // advanced settings if ((QDir::fromNativeSeparators(modDirEdit->text()) != QDir::fromNativeSeparators(getModDirectory())) && - (QMessageBox::question(NULL, tr("Confirm"), tr("Changing the mod directory affects all your profiles! " + (QMessageBox::question(nullptr, tr("Confirm"), tr("Changing the mod directory affects all your profiles! " "Mods not present (or named differently) in the new location will be disabled in all profiles. " "There is no way to undo this unless you backed up your profiles manually. Proceed?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)) { diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index d1947b5a..765858f5 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -125,7 +125,7 @@ void SettingsDialog::on_resetDialogsButton_clicked() void SettingsDialog::storeSettings(QListWidgetItem *pluginItem) { - if (pluginItem != NULL) { + if (pluginItem != nullptr) { QMap<QString, QVariant> settings = pluginItem->data(Qt::UserRole + 1).toMap(); for (int i = 0; i < ui->pluginSettingsList->topLevelItemCount(); ++i) { diff --git a/src/shared/appconfig.inc b/src/shared/appconfig.inc index 2ea4d627..4450763f 100644 --- a/src/shared/appconfig.inc +++ b/src/shared/appconfig.inc @@ -1,5 +1,6 @@ APPPARAM(std::wstring, translationPrefix, L"organizer")
APPPARAM(std::wstring, pluginPath, L"plugins")
+APPPARAM(std::wstring, profilesPath, L"profiles")
APPPARAM(std::wstring, modsPath, L"mods")
APPPARAM(std::wstring, downloadPath, L"downloads")
APPPARAM(std::wstring, overwritePath, L"overwrite")
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp index 7c0e7119..7f7a01f5 100644 --- a/src/shared/directoryentry.cpp +++ b/src/shared/directoryentry.cpp @@ -232,8 +232,8 @@ std::vector<FileEntry::Ptr> FilesOrigin::getFiles() const void FileEntry::addOrigin(int origin, FILETIME fileTime, const std::wstring &archive)
{
- m_LastAccessed = time(NULL);
- if (m_Parent != NULL) {
+ m_LastAccessed = time(nullptr);
+ if (m_Parent != nullptr) {
m_Parent->propagateOrigin(origin);
}
if (m_Origin == -1) {
@@ -290,8 +290,8 @@ bool FileEntry::removeOrigin(int origin) // now we need to update the file time...
std::wstring filePath = getFullPath();
HANDLE file = ::CreateFile(filePath.c_str(), GENERIC_READ | GENERIC_WRITE,
- 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (!::GetFileTime(file, NULL, NULL, &m_FileTime)) {
+ 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
+ if (!::GetFileTime(file, nullptr, nullptr, &m_FileTime)) {
// maybe this file is in a bsa, but there is no easy way to find out which. User should refresh
// the view to find out
m_Archive = L"bsa?";
@@ -324,13 +324,13 @@ static bool ByOriginPriority(DirectoryEntry *entry, int LHS, int RHS) FileEntry::FileEntry()
- : m_Index(UINT_MAX), m_Name(), m_Origin(-1), m_Parent(NULL), m_LastAccessed(time(NULL))
+ : m_Index(UINT_MAX), m_Name(), m_Origin(-1), m_Parent(nullptr), m_LastAccessed(time(nullptr))
{
LEAK_TRACE;
}
FileEntry::FileEntry(Index index, const std::wstring &name, DirectoryEntry *parent)
- : m_Index(index), m_Name(name), m_Origin(-1), m_Parent(parent), m_Archive(L""), m_LastAccessed(time(NULL))
+ : m_Index(index), m_Name(name), m_Origin(-1), m_Parent(parent), m_Archive(L""), m_LastAccessed(time(nullptr))
{
LEAK_TRACE;
}
@@ -351,7 +351,7 @@ void FileEntry::sortOrigins() bool FileEntry::recurseParents(std::wstring &path, const DirectoryEntry *parent) const
{
- if (parent == NULL) {
+ if (parent == nullptr) {
return false;
} else {
// don't append the topmost parent because it is the virtual data-root
@@ -480,7 +480,7 @@ void DirectoryEntry::addFromBSA(const std::wstring &originName, std::wstring &di void DirectoryEntry::propagateOrigin(int origin)
{
m_Origins.insert(origin);
- if (m_Parent != NULL) {
+ if (m_Parent != nullptr) {
m_Parent->propagateOrigin(origin);
}
}
@@ -515,13 +515,13 @@ void DirectoryEntry::addFiles(FilesOrigin &origin, wchar_t *buffer, int bufferOf _snwprintf(buffer + bufferOffset, MAXPATH_UNICODE - bufferOffset, L"\\*");
- HANDLE searchHandle = NULL;
+ HANDLE searchHandle = nullptr;
if (SupportOptimizedFind()) {
- searchHandle = ::FindFirstFileExW(buffer, FindExInfoBasic, &findData, FindExSearchNameMatch, NULL,
+ searchHandle = ::FindFirstFileExW(buffer, FindExInfoBasic, &findData, FindExSearchNameMatch, nullptr,
FIND_FIRST_EX_LARGE_FETCH);
} else {
- searchHandle = ::FindFirstFileExW(buffer, FindExInfoStandard, &findData, FindExSearchNameMatch, NULL, 0);
+ searchHandle = ::FindFirstFileExW(buffer, FindExInfoStandard, &findData, FindExSearchNameMatch, nullptr, 0);
}
if (searchHandle != INVALID_HANDLE_VALUE) {
@@ -572,7 +572,7 @@ bool DirectoryEntry::removeFile(const std::wstring &filePath, int *origin) std::wstring dirName = filePath.substr(0, pos);
std::wstring rest = filePath.substr(pos + 1);
DirectoryEntry *entry = getSubDirectoryRecursive(dirName, false);
- if (entry != NULL) {
+ if (entry != nullptr) {
return entry->removeFile(rest, origin);
} else {
return false;
@@ -610,7 +610,7 @@ void DirectoryEntry::removeDir(const std::wstring &path) std::wstring dirName = path.substr(0, pos);
std::wstring rest = path.substr(pos + 1);
DirectoryEntry *entry = getSubDirectoryRecursive(dirName, false);
- if (entry != NULL) {
+ if (entry != nullptr) {
entry->removeDir(rest);
}
}
@@ -709,12 +709,12 @@ FilesOrigin &DirectoryEntry::getOriginByName(const std::wstring &name) const int DirectoryEntry::getOrigin(const std::wstring &path, bool &archive)
{
- const DirectoryEntry *directory = NULL;
+ const DirectoryEntry *directory = nullptr;
const FileEntry::Ptr file = searchFile(path, &directory);
- if (file.get() != NULL) {
+ if (file.get() != nullptr) {
return file->getOrigin(archive);
} else {
- if (directory != NULL) {
+ if (directory != nullptr) {
return directory->anyOrigin();
} else {
return -1;
@@ -734,13 +734,13 @@ std::vector<FileEntry::Ptr> DirectoryEntry::getFiles() const const FileEntry::Ptr DirectoryEntry::searchFile(const std::wstring &path, const DirectoryEntry **directory) const
{
- if (directory != NULL) {
- *directory = NULL;
+ if (directory != nullptr) {
+ *directory = nullptr;
}
if ((path.length() == 0) || (path == L"*")) {
// no file name -> the path ended on a (back-)slash
- if (directory != NULL) {
+ if (directory != nullptr) {
*directory = this;
}
return FileEntry::Ptr();
@@ -753,9 +753,9 @@ const FileEntry::Ptr DirectoryEntry::searchFile(const std::wstring &path, const auto iter = m_Files.find(ToLower(path));
if (iter != m_Files.end()) {
return m_FileRegister->getFile(iter->second);
- } else if (directory != NULL) {
+ } else if (directory != nullptr) {
DirectoryEntry *temp = findSubDirectory(path);
- if (temp != NULL) {
+ if (temp != nullptr) {
*directory = temp;
}
}
@@ -763,7 +763,7 @@ const FileEntry::Ptr DirectoryEntry::searchFile(const std::wstring &path, const // file is in in a subdirectory, recurse into the matching subdirectory
std::wstring pathComponent = path.substr(0, len);
DirectoryEntry *temp = findSubDirectory(pathComponent);
- if (temp != NULL) {
+ if (temp != nullptr) {
return temp->searchFile(path.substr(len + 1), directory);
}
}
@@ -778,7 +778,7 @@ DirectoryEntry *DirectoryEntry::findSubDirectory(const std::wstring &name) const return *iter;
}
}
- return NULL;
+ return nullptr;
}
@@ -810,7 +810,7 @@ DirectoryEntry *DirectoryEntry::getSubDirectory(const std::wstring &name, bool c new DirectoryEntry(name, this, originID, m_FileRegister, m_OriginConnection));
return *iter;
} else {
- return NULL;
+ return nullptr;
}
}
@@ -827,8 +827,8 @@ DirectoryEntry *DirectoryEntry::getSubDirectoryRecursive(const std::wstring &pat return getSubDirectory(path, create);
} else {
DirectoryEntry *nextChild = getSubDirectory(path.substr(0, pos), create, originID);
- if (nextChild == NULL) {
- return NULL;
+ if (nextChild == nullptr) {
+ return nullptr;
} else {
return nextChild->getSubDirectoryRecursive(path.substr(pos + 1), create, originID);
}
@@ -890,7 +890,7 @@ void FileRegister::unregisterFile(FileEntry::Ptr file) }
// unregister from directory
- if (file->getParent() != NULL) {
+ if (file->getParent() != nullptr) {
file->getParent()->removeFile(file->getIndex());
}
}
@@ -948,7 +948,7 @@ void FileRegister::removeOriginMulti(std::set<FileEntry::Index> indices, int ori // only when disabling an origin that is probably frequently the case
std::set<DirectoryEntry*> parents;
BOOST_FOREACH (const FileEntry::Ptr &file, removedFiles) {
- if (file->getParent() != NULL) {
+ if (file->getParent() != nullptr) {
parents.insert(file->getParent());
}
}
diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h index c06a49a1..4333c1eb 100644 --- a/src/shared/directoryentry.h +++ b/src/shared/directoryentry.h @@ -250,12 +250,12 @@ public: /** retrieve a file in this directory by name.
* @param name name of the file
- * @return fileentry object for the file or NULL if no file matches
+ * @return fileentry object for the file or nullptr if no file matches
*/
const FileEntry::Ptr findFile(const std::wstring &name) const;
/** search through this directory and all subdirectories for a file by the specified name (relative path).
- if directory is not NULL, the referenced variable will be set to the path containing the file */
+ if directory is not nullptr, the referenced variable will be set to the path containing the file */
const FileEntry::Ptr searchFile(const std::wstring &path, const DirectoryEntry **directory) const;
void insertFile(const std::wstring &filePath, FilesOrigin &origin, FILETIME fileTime);
@@ -263,7 +263,7 @@ public: void removeFile(FileEntry::Index index);
// remove the specified file from the tree. This can be a path leading to a file in a subdirectory
- bool removeFile(const std::wstring &filePath, int *origin = NULL);
+ bool removeFile(const std::wstring &filePath, int *origin = nullptr);
/**
* @brief remove the specified directory
@@ -274,9 +274,9 @@ public: bool remove(const std::wstring &fileName, int *origin) {
auto iter = m_Files.find(ToLower(fileName));
if (iter != m_Files.end()) {
- if (origin != NULL) {
+ if (origin != nullptr) {
FileEntry::Ptr entry = m_FileRegister->getFile(iter->second);
- if (entry.get() != NULL) {
+ if (entry.get() != nullptr) {
bool ignore;
*origin = entry->getOrigin(ignore);
}
diff --git a/src/shared/error_report.cpp b/src/shared/error_report.cpp index 02ff2d56..c9277c1b 100644 --- a/src/shared/error_report.cpp +++ b/src/shared/error_report.cpp @@ -35,7 +35,7 @@ void reportError(LPCSTR format, ...) vsnprintf(buffer, 1024, format, argList);
va_end(argList);
- MessageBoxA(NULL, buffer, "Error", MB_OK | MB_ICONERROR);
+ MessageBoxA(nullptr, buffer, "Error", MB_OK | MB_ICONERROR);
}
void reportError(LPCWSTR format, ...)
@@ -50,18 +50,18 @@ void reportError(LPCWSTR format, ...) _vsnwprintf(buffer, 1024, format, argList);
va_end(argList);
- MessageBoxW(NULL, buffer, L"Error", MB_OK | MB_ICONERROR);
+ MessageBoxW(nullptr, buffer, L"Error", MB_OK | MB_ICONERROR);
}
std::string getCurrentErrorStringA()
{
- LPSTR buffer = NULL;
+ LPSTR buffer = nullptr;
DWORD errorCode = ::GetLastError();
if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, NULL) == 0) {
+ nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, nullptr) == 0) {
::SetLastError(errorCode);
return std::string();
} else {
@@ -78,12 +78,12 @@ std::string getCurrentErrorStringA() std::wstring getCurrentErrorStringW()
{
- LPWSTR buffer = NULL;
+ LPWSTR buffer = nullptr;
DWORD errorCode = ::GetLastError();
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&buffer, 0, NULL) == 0) {
+ nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&buffer, 0, nullptr) == 0) {
::SetLastError(errorCode);
return std::wstring();
} else {
diff --git a/src/shared/fallout3info.cpp b/src/shared/fallout3info.cpp index 82b285b7..6c420044 100644 --- a/src/shared/fallout3info.cpp +++ b/src/shared/fallout3info.cpp @@ -60,7 +60,7 @@ std::wstring Fallout3Info::getRegPathStatic() WCHAR temp[MAX_PATH];
DWORD bufferSize = MAX_PATH;
- if (::RegQueryValueExW(key, L"Installed Path", NULL, NULL, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
+ if (::RegQueryValueExW(key, L"Installed Path", nullptr, nullptr, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
return std::wstring(temp);
} else {
return std::wstring();
@@ -74,9 +74,9 @@ std::wstring Fallout3Info::getInvalidationBSA() bool Fallout3Info::isInvalidationBSA(const std::wstring &bsaName)
{
- static LPCWSTR invalidation[] = { L"Fallout - AI!.bsa", L"Fallout - Invalidation.bsa", NULL };
+ static LPCWSTR invalidation[] = { L"Fallout - AI!.bsa", L"Fallout - Invalidation.bsa", nullptr };
- for (int i = 0; invalidation[i] != NULL; ++i) {
+ for (int i = 0; invalidation[i] != nullptr; ++i) {
if (wcscmp(bsaName.c_str(), invalidation[i]) == 0) {
return true;
}
@@ -203,7 +203,7 @@ void Fallout3Info::createProfile(const std::wstring &directory, bool useDefaults std::wostringstream source;
source << getLocalAppFolder() << "\\Fallout3\\plugins.txt";
if (!::CopyFileW(source.str().c_str(), target.str().c_str(), true)) {
- HANDLE file = ::CreateFileW(target.str().c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+ HANDLE file = ::CreateFileW(target.str().c_str(), GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
::CloseHandle(file);
}
}
@@ -256,9 +256,9 @@ void Fallout3Info::repairProfile(const std::wstring &directory) bool Fallout3Info::rerouteToProfile(const wchar_t *fileName, const wchar_t*)
{
- static LPCWSTR profileFiles[] = { L"fallout.ini", L"falloutprefs.ini", L"plugins.txt", NULL };
+ static LPCWSTR profileFiles[] = { L"fallout.ini", L"falloutprefs.ini", L"plugins.txt", nullptr };
- for (int i = 0; profileFiles[i] != NULL; ++i) {
+ for (int i = 0; profileFiles[i] != nullptr; ++i) {
if (_wcsicmp(fileName, profileFiles[i]) == 0) {
return true;
}
diff --git a/src/shared/falloutnvinfo.cpp b/src/shared/falloutnvinfo.cpp index 178ce8b4..f589124a 100644 --- a/src/shared/falloutnvinfo.cpp +++ b/src/shared/falloutnvinfo.cpp @@ -61,7 +61,7 @@ std::wstring FalloutNVInfo::getRegPathStatic() WCHAR temp[MAX_PATH];
DWORD bufferSize = MAX_PATH;
- if (::RegQueryValueExW(key, L"Installed Path", NULL, NULL, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
+ if (::RegQueryValueExW(key, L"Installed Path", nullptr, nullptr, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
return std::wstring(temp);
} else {
return std::wstring();
@@ -75,9 +75,9 @@ std::wstring FalloutNVInfo::getInvalidationBSA() bool FalloutNVInfo::isInvalidationBSA(const std::wstring &bsaName)
{
- static LPCWSTR invalidation[] = { L"Fallout - AI!.bsa", L"Fallout - Invalidation.bsa", NULL };
+ static LPCWSTR invalidation[] = { L"Fallout - AI!.bsa", L"Fallout - Invalidation.bsa", nullptr };
- for (int i = 0; invalidation[i] != NULL; ++i) {
+ for (int i = 0; invalidation[i] != nullptr; ++i) {
if (wcscmp(bsaName.c_str(), invalidation[i]) == 0) {
return true;
}
@@ -170,7 +170,7 @@ void FalloutNVInfo::createProfile(const std::wstring &directory, bool useDefault if (!FileExists(target)) {
std::wstring source = getLocalAppFolder() + L"\\FalloutNV\\plugins.txt";
if (!::CopyFileW(source.c_str(), target.c_str(), true)) {
- HANDLE file = ::CreateFileW(target.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+ HANDLE file = ::CreateFileW(target.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
::CloseHandle(file);
}
}
@@ -247,9 +247,9 @@ void FalloutNVInfo::repairProfile(const std::wstring &directory) bool FalloutNVInfo::rerouteToProfile(const wchar_t *fileName, const wchar_t*)
{
- static LPCWSTR profileFiles[] = { L"fallout.ini", L"falloutprefs.ini", L"plugins.txt", NULL };
+ static LPCWSTR profileFiles[] = { L"fallout.ini", L"falloutprefs.ini", L"plugins.txt", nullptr };
- for (int i = 0; profileFiles[i] != NULL; ++i) {
+ for (int i = 0; profileFiles[i] != nullptr; ++i) {
if (_wcsicmp(fileName, profileFiles[i]) == 0) {
return true;
}
diff --git a/src/shared/gameinfo.cpp b/src/shared/gameinfo.cpp index 5439efff..3727ea49 100644 --- a/src/shared/gameinfo.cpp +++ b/src/shared/gameinfo.cpp @@ -27,17 +27,17 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "skyriminfo.h"
#include "util.h"
+#include <boost/assign.hpp>
+#include <boost/format.hpp>
#include <shlobj.h>
#include <sstream>
#include <cassert>
-#include <boost/assign.hpp>
-#include <boost/format.hpp>
namespace MOShared {
-GameInfo* GameInfo::s_Instance = NULL;
+GameInfo* GameInfo::s_Instance = nullptr;
GameInfo::GameInfo(const std::wstring &moDirectory, const std::wstring &moDataDirectory, const std::wstring &gameDirectory)
@@ -49,7 +49,7 @@ GameInfo::GameInfo(const std::wstring &moDirectory, const std::wstring &moDataDi void GameInfo::cleanup() {
delete GameInfo::s_Instance;
- GameInfo::s_Instance = NULL;
+ GameInfo::s_Instance = nullptr;
}
@@ -62,14 +62,14 @@ void GameInfo::identifyMyGamesDirectory(const std::wstring &file) m_MyGamesDirectory.clear();
// a) this is the way it should work. get the configured My Documents\My Games directory
- if (::SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, myDocuments) == S_OK) {
+ if (::SHGetFolderPathW(nullptr, CSIDL_PERSONAL, nullptr, SHGFP_TYPE_CURRENT, myDocuments) == S_OK) {
m_MyGamesDirectory = std::wstring(myDocuments) + L"\\My Games";
}
// b) if there is no <game> directory there, look in the default directory
if (m_MyGamesDirectory.empty()
|| !FileExists(m_MyGamesDirectory + L"\\" + file)) {
- if (::SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_DEFAULT, myDocuments) == S_OK) {
+ if (::SHGetFolderPathW(nullptr, CSIDL_PERSONAL, nullptr, SHGFP_TYPE_DEFAULT, myDocuments) == S_OK) {
std::wstring fromDefault = std::wstring(myDocuments) + L"\\My Games";
if (FileExists(fromDefault + L"\\" + file)) {
m_MyGamesDirectory = fromDefault;
@@ -99,13 +99,13 @@ bool GameInfo::identifyGame(const std::wstring &moDirectory, const std::wstring s_Instance = new SkyrimInfo(moDirectory, moDataDirectory, searchPath);
}
- return s_Instance != NULL;
+ return s_Instance != nullptr;
}
bool GameInfo::init(const std::wstring &moDirectory, const std::wstring &moDataDirectory, const std::wstring &gamePath)
{
- if (s_Instance == NULL) {
+ if (s_Instance == nullptr) {
if (gamePath.length() == 0) {
// search upward in the directory until a recognized game-binary is found
std::wstring searchPath(moDirectory);
@@ -126,7 +126,7 @@ bool GameInfo::init(const std::wstring &moDirectory, const std::wstring &moDataD GameInfo &GameInfo::instance()
{
- assert(s_Instance != NULL);
+ assert(s_Instance != nullptr && "gameinfo not yet initialized");
return *s_Instance;
}
@@ -151,18 +151,6 @@ std::wstring GameInfo::getIniFilename() const }
-std::wstring GameInfo::getDownloadDir() const
-{
- return m_OrganizerDirectory + L"\\downloads";
-}
-
-
-std::wstring GameInfo::getCacheDir() const
-{
- return m_OrganizerDirectory + L"\\webcache";
-}
-
-
std::wstring GameInfo::getOverwriteDir() const
{
return m_OrganizerDirectory + L"\\overwrite";
@@ -203,7 +191,7 @@ std::wstring GameInfo::getLocalAppFolder() const wchar_t localAppFolder[MAX_PATH];
memset(localAppFolder, '\0', MAX_PATH * sizeof(wchar_t));
- if (::SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, localAppFolder) == S_OK) {
+ if (::SHGetFolderPathW(nullptr, CSIDL_LOCAL_APPDATA, nullptr, SHGFP_TYPE_CURRENT, localAppFolder) == S_OK) {
return localAppFolder;
} else {
// fallback: try the registry
@@ -224,7 +212,7 @@ std::wstring GameInfo::getSpecialPath(LPCWSTR name) const WCHAR temp[MAX_PATH];
DWORD bufferSize = MAX_PATH;
- errorcode = ::RegQueryValueExW(key, name, NULL, NULL, (LPBYTE)temp, &bufferSize);
+ errorcode = ::RegQueryValueExW(key, name, nullptr, nullptr, (LPBYTE)temp, &bufferSize);
if (errorcode != ERROR_SUCCESS) {
throw windows_error((boost::format("failed to look up special folder (%1%)") % ToString(name, true)).str(), errorcode);
}
diff --git a/src/shared/gameinfo.h b/src/shared/gameinfo.h index c11679f3..a9da0b97 100644 --- a/src/shared/gameinfo.h +++ b/src/shared/gameinfo.h @@ -109,8 +109,6 @@ public: virtual std::wstring getProfilesDir() const;
virtual std::wstring getIniFilename() const;
- virtual std::wstring getDownloadDir() const;
- virtual std::wstring getCacheDir() const;
virtual std::wstring getOverwriteDir() const;
virtual std::wstring getLogDir() const;
virtual std::wstring getLootDir() const;
diff --git a/src/shared/inject.cpp b/src/shared/inject.cpp index 5a111c4a..143652c2 100644 --- a/src/shared/inject.cpp +++ b/src/shared/inject.cpp @@ -57,13 +57,13 @@ void injectDLL(HANDLE processHandle, HANDLE threadHandle, const std::string &dll _snprintf(parameters.initstr, 5, "Init"); //this is the name of thie initialisation function we want to call in the target process
HMODULE k32mod = ::LoadLibrary(__TEXT("kernel32.dll"));
- TLoadLibraryType loadLibraryFunc = NULL;
- TGetProcAddressType getProcAddressFunc = NULL;
+ TLoadLibraryType loadLibraryFunc = nullptr;
+ TGetProcAddressType getProcAddressFunc = nullptr;
// ansi binaries
- if (k32mod != NULL) {
+ if (k32mod != nullptr) {
loadLibraryFunc = reinterpret_cast<TLoadLibraryType>(::GetProcAddress(k32mod, "LoadLibraryA"));
getProcAddressFunc = reinterpret_cast<TGetProcAddressType>(::GetProcAddress(k32mod, "GetProcAddress"));
- if ((loadLibraryFunc == NULL) || (getProcAddressFunc == NULL)) {
+ if ((loadLibraryFunc == nullptr) || (getProcAddressFunc == nullptr)) {
throw windows_error("failed to determine address for required functions");
}
} else {
@@ -71,8 +71,8 @@ void injectDLL(HANDLE processHandle, HANDLE threadHandle, const std::string &dll }
// allocate memory in the target process and write the parameter-block there
- LPVOID remoteMem = ::VirtualAllocEx(processHandle, NULL, sizeof(TParameters), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
- if (remoteMem == NULL) {
+ LPVOID remoteMem = ::VirtualAllocEx(processHandle, nullptr, sizeof(TParameters), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
+ if (remoteMem == nullptr) {
throw windows_error("failed to allocate memory in target process");
}
SIZE_T written;
@@ -104,8 +104,8 @@ void injectDLL(HANDLE processHandle, HANDLE threadHandle, const std::string &dll };
// reserve memory for the stub
- PBYTE stubRemote = reinterpret_cast<PBYTE>(::VirtualAllocEx(processHandle, NULL, sizeof(stubLocal), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE));
- if (stubRemote == NULL) {
+ PBYTE stubRemote = reinterpret_cast<PBYTE>(::VirtualAllocEx(processHandle, nullptr, sizeof(stubLocal), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE));
+ if (stubRemote == nullptr) {
throw windows_error("failed to allocate memory for stub");
}
TParameters *remoteParams = reinterpret_cast<TParameters*>(remoteMem);
diff --git a/src/shared/oblivioninfo.cpp b/src/shared/oblivioninfo.cpp index 89a795a5..586bcaef 100644 --- a/src/shared/oblivioninfo.cpp +++ b/src/shared/oblivioninfo.cpp @@ -61,7 +61,7 @@ std::wstring OblivionInfo::getRegPathStatic() WCHAR temp[MAX_PATH];
DWORD bufferSize = MAX_PATH;
- if (::RegQueryValueExW(key, L"Installed Path", NULL, NULL, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
+ if (::RegQueryValueExW(key, L"Installed Path", nullptr, nullptr, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
return std::wstring(temp);
} else {
return std::wstring();
@@ -76,9 +76,9 @@ std::wstring OblivionInfo::getInvalidationBSA() bool OblivionInfo::isInvalidationBSA(const std::wstring &bsaName)
{
static LPCWSTR invalidation[] = { L"Oblivion - Invalidation.bsa", L"ArchiveInvalidationInvalidated!.bsa",
- L"BSARedirection.bsa", NULL };
+ L"BSARedirection.bsa", nullptr };
- for (int i = 0; invalidation[i] != NULL; ++i) {
+ for (int i = 0; invalidation[i] != nullptr; ++i) {
if (wcscmp(bsaName.c_str(), invalidation[i]) == 0) {
return true;
}
@@ -158,7 +158,7 @@ void OblivionInfo::createProfile(const std::wstring &directory, bool useDefaults std::wostringstream source;
source << getLocalAppFolder() << "\\Oblivion\\plugins.txt";
if (!::CopyFileW(source.str().c_str(), target.str().c_str(), true)) {
- HANDLE file = ::CreateFileW(target.str().c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+ HANDLE file = ::CreateFileW(target.str().c_str(), GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
::CloseHandle(file);
}
}
@@ -194,7 +194,7 @@ void OblivionInfo::createProfile(const std::wstring &directory, bool useDefaults if (!FileExists(target)) {
std::wstring source = getMyGamesDirectory() + L"\\Oblivion\\oblivionprefs.ini";
if (!::CopyFileW(source.c_str(), target.c_str(), true)) {
- if ((::CreateFileW(target.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL) == INVALID_HANDLE_VALUE) &&
+ if ((::CreateFileW(target.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr) == INVALID_HANDLE_VALUE) &&
(::GetLastError() != ERROR_FILE_EXISTS)) {
throw windows_error(std::string("failed to create ini file: ") + ToString(target, false));
}
@@ -240,9 +240,9 @@ void OblivionInfo::repairProfile(const std::wstring &directory) bool OblivionInfo::rerouteToProfile(const wchar_t *fileName, const wchar_t*)
{
- static LPCWSTR profileFiles[] = { L"oblivion.ini", L"oblivionprefs.ini", L"plugins.txt", NULL };
+ static LPCWSTR profileFiles[] = { L"oblivion.ini", L"oblivionprefs.ini", L"plugins.txt", nullptr };
- for (int i = 0; profileFiles[i] != NULL; ++i) {
+ for (int i = 0; profileFiles[i] != nullptr; ++i) {
if (_wcsicmp(fileName, profileFiles[i]) == 0) {
return true;
}
diff --git a/src/shared/skyriminfo.cpp b/src/shared/skyriminfo.cpp index 1203e3ed..1d00c4f3 100644 --- a/src/shared/skyriminfo.cpp +++ b/src/shared/skyriminfo.cpp @@ -39,7 +39,7 @@ SkyrimInfo::SkyrimInfo(const std::wstring &moDirectory, const std::wstring &moDa identifyMyGamesDirectory(L"skyrim");
wchar_t appDataPath[MAX_PATH];
- if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath))) {
+ if (SUCCEEDED(SHGetFolderPathW(nullptr, CSIDL_LOCAL_APPDATA, nullptr, SHGFP_TYPE_CURRENT, appDataPath))) {
m_AppData = appDataPath;
}
}
@@ -69,7 +69,7 @@ std::wstring SkyrimInfo::getRegPathStatic() WCHAR temp[MAX_PATH];
DWORD bufferSize = MAX_PATH;
- if (::RegQueryValueExW(key, L"Installed Path", NULL, NULL, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
+ if (::RegQueryValueExW(key, L"Installed Path", nullptr, nullptr, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) {
return std::wstring(temp);
} else {
return std::wstring();
@@ -84,9 +84,9 @@ std::wstring SkyrimInfo::getInvalidationBSA() bool SkyrimInfo::isInvalidationBSA(const std::wstring &bsaName)
{
- static LPCWSTR invalidation[] = { L"Skyrim - Invalidation.bsa", NULL };
+ static LPCWSTR invalidation[] = { L"Skyrim - Invalidation.bsa", nullptr };
- for (int i = 0; invalidation[i] != NULL; ++i) {
+ for (int i = 0; invalidation[i] != nullptr; ++i) {
if (wcscmp(bsaName.c_str(), invalidation[i]) == 0) {
return true;
}
@@ -229,7 +229,7 @@ void SkyrimInfo::createProfile(const std::wstring &directory, bool useDefaults) std::wostringstream source;
source << getLocalAppFolder() << "\\Skyrim\\plugins.txt";
if (!::CopyFileW(source.str().c_str(), target.c_str(), true)) {
- HANDLE file = ::CreateFileW(target.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+ HANDLE file = ::CreateFileW(target.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
::CloseHandle(file);
}
}
@@ -237,7 +237,7 @@ void SkyrimInfo::createProfile(const std::wstring &directory, bool useDefaults) if (!FileExists(target)) {
std::wstring source = getLocalAppFolder() + L"\\Skyrim\\loadorder.txt";
if (!::CopyFileW(source.c_str(), target.c_str(), true)) {
- HANDLE file = ::CreateFileW(target.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+ HANDLE file = ::CreateFileW(target.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
::CloseHandle(file);
}
}
@@ -259,7 +259,7 @@ void SkyrimInfo::createProfile(const std::wstring &directory, bool useDefaults) }
if (!::CopyFileW(source.c_str(), target.c_str(), true)) {
if (::GetLastError() != ERROR_FILE_EXISTS) {
- throw windows_error(std::string("failed to copy ini file: ") + ToString(source, false));
+ throw windows_error(std::string("failed to copy ini file: ") + ToString(source, false) + " to " + ToString(target, false));
}
}
}
@@ -272,7 +272,7 @@ void SkyrimInfo::createProfile(const std::wstring &directory, bool useDefaults) if (!::CopyFileW(source.c_str(), target.c_str(), true)) {
log("failed to copy ini file %ls", source.c_str());
// create empty
- if (::CreateFileW(target.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) == INVALID_HANDLE_VALUE) {
+ if (::CreateFileW(target.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr) == INVALID_HANDLE_VALUE) {
throw windows_error(std::string("failed to copy ini file: ") + ToString(source, false));
}
}
@@ -289,16 +289,16 @@ void SkyrimInfo::repairProfile(const std::wstring &directory) bool SkyrimInfo::rerouteToProfile(const wchar_t *fileName, const wchar_t *fullPath)
{
- static LPCWSTR profileFiles[] = { L"skyrim.ini", L"skyrimprefs.ini", L"loadorder.txt", NULL };
+ static LPCWSTR profileFiles[] = { L"skyrim.ini", L"skyrimprefs.ini", L"loadorder.txt", nullptr };
- for (int i = 0; profileFiles[i] != NULL; ++i) {
+ for (int i = 0; profileFiles[i] != nullptr; ++i) {
if (_wcsicmp(fileName, profileFiles[i]) == 0) {
return true;
}
}
if ((_wcsicmp(fileName, L"plugins.txt") == 0) &&
- (m_AppData.empty() || (StrStrIW(fullPath, m_AppData.c_str()) != NULL))) {
+ (m_AppData.empty() || (StrStrIW(fullPath, m_AppData.c_str()) != nullptr))) {
return true;
}
diff --git a/src/shared/util.cpp b/src/shared/util.cpp index d284b517..8f64277f 100644 --- a/src/shared/util.cpp +++ b/src/shared/util.cpp @@ -34,7 +34,7 @@ bool FileExists(const std::string &filename) {
WIN32_FIND_DATAA findData;
ZeroMemory(&findData, sizeof(WIN32_FIND_DATAA));
- HANDLE search = ::FindFirstFileExA(filename.c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, NULL, 0);
+ HANDLE search = ::FindFirstFileExA(filename.c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, nullptr, 0);
if (search == INVALID_HANDLE_VALUE) {
return false;
} else {
@@ -47,7 +47,7 @@ bool FileExists(const std::wstring &filename) {
WIN32_FIND_DATAW findData;
ZeroMemory(&findData, sizeof(WIN32_FIND_DATAW));
- HANDLE search = ::FindFirstFileExW(filename.c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, NULL, 0);
+ HANDLE search = ::FindFirstFileExW(filename.c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, nullptr, 0);
if (search == INVALID_HANDLE_VALUE) {
return false;
} else {
@@ -68,14 +68,14 @@ std::string ToString(const std::wstring &source, bool utf8) std::string result;
if (source.length() > 0) {
UINT codepage = utf8 ? CP_UTF8 : GetACP();
- int sizeRequired = ::WideCharToMultiByte(codepage, 0, &source[0], -1, NULL, 0, NULL, NULL);
+ int sizeRequired = ::WideCharToMultiByte(codepage, 0, &source[0], -1, nullptr, 0, nullptr, nullptr);
if (sizeRequired == 0) {
throw windows_error("failed to convert string to multibyte");
}
// the size returned by WideCharToMultiByte contains zero termination IF -1 is specified for the length.
// we don't want that \0 in the string because then the length field would be wrong. Because madness
result.resize(sizeRequired - 1, '\0');
- ::WideCharToMultiByte(codepage, 0, &source[0], (int)source.size(), &result[0], sizeRequired, NULL, NULL);
+ ::WideCharToMultiByte(codepage, 0, &source[0], (int)source.size(), &result[0], sizeRequired, nullptr, nullptr);
}
return result;
@@ -86,7 +86,7 @@ std::wstring ToWString(const std::string &source, bool utf8) std::wstring result;
if (source.length() > 0) {
UINT codepage = utf8 ? CP_UTF8 : GetACP();
- int sizeRequired = ::MultiByteToWideChar(codepage, 0, source.c_str(), source.length(), NULL, 0);
+ int sizeRequired = ::MultiByteToWideChar(codepage, 0, source.c_str(), source.length(), nullptr, 0);
if (sizeRequired == 0) {
throw windows_error("failed to convert string to wide character");
}
@@ -137,7 +137,7 @@ VS_FIXEDFILEINFO GetFileVersion(const std::wstring &fileName) throw windows_error("failed to determine file version info");
}
- void *versionInfoPtr = NULL;
+ void *versionInfoPtr = nullptr;
UINT versionInfoLength = 0;
if (!::VerQueryValue(buffer, L"\\", &versionInfoPtr, &versionInfoLength)) {
throw windows_error("failed to determine file version");
@@ -166,14 +166,14 @@ std::string GetStack() ::SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
firstCall = false;
}
- if (!::SymInitialize(process, NULL, TRUE)) {
+ if (!::SymInitialize(process, nullptr, TRUE)) {
log("failed to initialize symbols: %d", ::GetLastError());
}
initialized.insert(::GetCurrentProcessId());
}
LPVOID stack[32];
- WORD frames = ::CaptureStackBackTrace(0, 100, stack, NULL);
+ WORD frames = ::CaptureStackBackTrace(0, 100, stack, nullptr);
char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
PSYMBOL_INFO symbol = (PSYMBOL_INFO)buffer;
diff --git a/src/shared/windows_error.cpp b/src/shared/windows_error.cpp index 647a5bfb..97a58a20 100644 --- a/src/shared/windows_error.cpp +++ b/src/shared/windows_error.cpp @@ -27,13 +27,13 @@ std::string windows_error::constructMessage(const std::string& input, int inErro std::ostringstream finalMessage;
finalMessage << input;
- LPSTR buffer = NULL;
+ LPSTR buffer = nullptr;
DWORD errorCode = inErrorCode != -1 ? inErrorCode : ::GetLastError();
// TODO: the message is not english?
if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, NULL) == 0) {
+ nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, nullptr) == 0) {
finalMessage << " (errorcode " << errorCode << ")";
} else {
LPSTR lastChar = buffer + strlen(buffer) - 2;
diff --git a/src/spawn.cpp b/src/spawn.cpp index cd7e202e..96c219fc 100644 --- a/src/spawn.cpp +++ b/src/spawn.cpp @@ -55,7 +55,7 @@ bool spawn(LPCWSTR binary, LPCWSTR arguments, LPCWSTR currentDirectory, bool sus }
si.cb = sizeof(si);
int length = wcslen(binary) + wcslen(arguments) + 4;
- wchar_t *commandLine = NULL;
+ wchar_t *commandLine = nullptr;
if (arguments[0] != L'\0') {
commandLine = new wchar_t[length];
_snwprintf(commandLine, length, L"\"%ls\" %ls", binary, arguments);
@@ -84,12 +84,12 @@ bool spawn(LPCWSTR binary, LPCWSTR arguments, LPCWSTR currentDirectory, bool sus }
PROCESS_INFORMATION pi;
- BOOL success = ::CreateProcess(NULL,
+ BOOL success = ::CreateProcess(nullptr,
commandLine,
- NULL, NULL, // no special process or thread attributes
+ nullptr, nullptr, // no special process or thread attributes
inheritHandles, // inherit handles if we plan to use stdout or stderr reroute
CREATE_BREAKAWAY_FROM_JOB | (suspended ? CREATE_SUSPENDED : 0), // create suspended so I have time to inject the DLL
- NULL, // same environment as parent
+ nullptr, // same environment as parent
currentDirectory, // current directory
&si, &pi // startup and process information
);
@@ -119,12 +119,12 @@ HANDLE startBinary(const QFileInfo &binary, {
JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo;
- ::QueryInformationJobObject(NULL, JobObjectExtendedLimitInformation, &jobInfo, sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION), NULL);
+ ::QueryInformationJobObject(nullptr, JobObjectExtendedLimitInformation, &jobInfo, sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION), nullptr);
jobInfo.BasicLimitInformation.LimitFlags |= JOB_OBJECT_LIMIT_BREAKAWAY_OK;
- HANDLE jobObject = ::CreateJobObject(NULL, NULL);
+ HANDLE jobObject = ::CreateJobObject(nullptr, nullptr);
- if (jobObject == NULL) {
+ if (jobObject == nullptr) {
qWarning("failed to create job object: %lu", ::GetLastError());
} else {
::SetInformationJobObject(jobObject, JobObjectExtendedLimitInformation, &jobInfo, sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION));
@@ -144,7 +144,7 @@ HANDLE startBinary(const QFileInfo &binary, if (e.getErrorCode() == ERROR_ELEVATION_REQUIRED) {
// TODO: check if this is really correct. Are all settings updated that the secondary instance may use?
- if (QMessageBox::question(NULL, QObject::tr("Elevation required"),
+ if (QMessageBox::question(nullptr, QObject::tr("Elevation required"),
QObject::tr("This process requires elevation to run.\n"
"This is a potential security risk so I highly advice you to investigate if\n"
"\"%1\"\n"
@@ -153,7 +153,7 @@ HANDLE startBinary(const QFileInfo &binary, "(you will be asked if you want to allow ModOrganizer.exe to make changes to the system)").arg(
QDir::toNativeSeparators(binary.absoluteFilePath())),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
- ::ShellExecuteW(NULL, L"runas", ToWString(QCoreApplication::applicationFilePath()).c_str(),
+ ::ShellExecuteW(nullptr, L"runas", ToWString(QCoreApplication::applicationFilePath()).c_str(),
(std::wstring(L"\"") + binaryName + L"\" " + ToWString(arguments)).c_str(), currentDirectoryName.c_str(), SW_SHOWNORMAL);
return INVALID_HANDLE_VALUE;
} else {
diff --git a/src/syncoverwritedialog.cpp b/src/syncoverwritedialog.cpp index 5f99bb83..0e3e98d7 100644 --- a/src/syncoverwritedialog.cpp +++ b/src/syncoverwritedialog.cpp @@ -82,18 +82,18 @@ void SyncOverwriteDialog::readTree(const QString &path, DirectoryEntry *director if (fileInfo.isDir()) {
DirectoryEntry *subDir = directoryStructure->findSubDirectory(ToWString(file));
- if (subDir != NULL) {
+ if (subDir != nullptr) {
readTree(fileInfo.absoluteFilePath(), subDir, newItem);
} else {
qCritical("no directory structure for %s?", file.toUtf8().constData());
delete newItem;
- newItem = NULL;
+ newItem = nullptr;
}
} else {
const FileEntry::Ptr entry = directoryStructure->findFile(ToWString(file));
QComboBox* combo = new QComboBox(ui->syncTree);
combo->addItem(tr("<don't sync>"), -1);
- if (entry.get() != NULL) {
+ if (entry.get() != nullptr) {
bool ignore;
int origin = entry->getOrigin(ignore);
addToComboBox(combo, ToQString(m_DirectoryStructure->getOriginByID(origin).getName()), origin);
@@ -107,7 +107,7 @@ void SyncOverwriteDialog::readTree(const QString &path, DirectoryEntry *director }
ui->syncTree->setItemWidget(newItem, 1, combo);
}
- if (newItem != NULL) {
+ if (newItem != nullptr) {
subTree->addChild(newItem);
}
}
@@ -137,7 +137,7 @@ void SyncOverwriteDialog::applyTo(QTreeWidgetItem *item, const QString &path, co applyTo(child, filePath, modDirectory);
} else {
QComboBox *comboBox = qobject_cast<QComboBox*>(ui->syncTree->itemWidget(child, 1));
- if (comboBox != NULL) {
+ if (comboBox != nullptr) {
int originID = comboBox->itemData(comboBox->currentIndex(), Qt::UserRole).toInt();
if (originID != -1) {
FilesOrigin &origin = m_DirectoryStructure->getOriginByID(originID);
diff --git a/src/viewmarkingscrollbar.cpp b/src/viewmarkingscrollbar.cpp index f1b1ba34..2452d0e3 100644 --- a/src/viewmarkingscrollbar.cpp +++ b/src/viewmarkingscrollbar.cpp @@ -14,7 +14,7 @@ ViewMarkingScrollBar::ViewMarkingScrollBar(QAbstractItemModel *model, QWidget *p void ViewMarkingScrollBar::paintEvent(QPaintEvent *event)
{
- if (m_Model == NULL) {
+ if (m_Model == nullptr) {
return;
}
QScrollBar::paintEvent(event);
|
