From b2f3d8e47c2580db5d0b68e61bc37556b9df63a3 Mon Sep 17 00:00:00 2001 From: Tannin Date: Fri, 1 Mar 2013 13:03:30 +0100 Subject: - rewrote the mechanism removing the Archive List limit - openfile is now rerouted - .jar files can now be added as executables directly - bugfix: no message was displayed when checking for updates with no valid credentials configured - added a readme with compilation instructions --- src/editexecutablesdialog.cpp | 44 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'src/editexecutablesdialog.cpp') diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp index 42f29d83..e0d1994d 100644 --- a/src/editexecutablesdialog.cpp +++ b/src/editexecutablesdialog.cpp @@ -21,6 +21,8 @@ along with Mod Organizer. If not, see . #include "ui_editexecutablesdialog.h" #include "filedialogmemory.h" #include +#include +#include using namespace MOBase; @@ -87,6 +89,7 @@ void EditExecutablesDialog::resetInput() { ui->binaryEdit->setText(""); ui->titleEdit->setText(""); + ui->workingDirEdit->clear(); ui->argumentsEdit->setText(""); ui->closeCheckBox->setChecked(false); } @@ -113,11 +116,42 @@ void EditExecutablesDialog::on_addButton_clicked() void EditExecutablesDialog::on_browseButton_clicked() { QString binaryName = FileDialogMemory::getOpenFileName("editExecutableBinary", this, - tr("Select a binary"), QString(), tr("Executable (%1)").arg("*.exe *.bat")); - - QLineEdit *binaryEdit = findChild("binaryEdit"); - - binaryEdit->setText(QDir::toNativeSeparators(binaryName)); + tr("Select a binary"), QString(), tr("Executable (%1)").arg("*.exe *.bat *.jar")); + + if (binaryName.endsWith(".jar", Qt::CaseInsensitive)) { + QString binaryPath; + { // try to find java automatically + std::wstring binaryNameW = ToWString(binaryName); + WCHAR buffer[MAX_PATH]; + if (::FindExecutableW(binaryNameW.c_str(), NULL, buffer) > (HINSTANCE)32) { + DWORD binaryType = 0UL; + if (!::GetBinaryTypeW(binaryNameW.c_str(), &binaryType)) { + qDebug("failed to determine binary type: %lu", ::GetLastError()); + } else if (binaryType == SCS_32BIT_BINARY) { + binaryPath = ToQString(buffer); + } + } + } + if (binaryPath.isEmpty()) { + QSettings javaReg("HKEY_LOCAL_MACHINE\\Software\\JavaSoft\\Java Runtime Environment", QSettings::NativeFormat); + if (javaReg.contains("CurrentVersion")) { + QString currentVersion = javaReg.value("CurrentVersion").toString(); + binaryPath = javaReg.value(QString("%1/JavaHome").arg(currentVersion)).toString().append("\\bin\\javaw.exe"); + } + } + if (binaryPath.isEmpty()) { + QMessageBox::information(this, tr("Java (32-bit) required"), + tr("MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe " + "from that installation as the binary.")); + } else { + ui->binaryEdit->setText(binaryPath); + } + + ui->workingDirEdit->setText(QDir::toNativeSeparators(QFileInfo(binaryName).absolutePath())); + ui->argumentsEdit->setText("-jar \"" + QDir::toNativeSeparators(binaryName) + "\""); + } else { + ui->binaryEdit->setText(QDir::toNativeSeparators(binaryName)); + } } void EditExecutablesDialog::on_browseDirButton_clicked() -- cgit v1.3.1