diff --git a/src/3rd_party/qtmain_win.cpp b/src/3rd_party/qtmain_win.cpp deleted file mode 100644 index fafc23e..0000000 --- a/src/3rd_party/qtmain_win.cpp +++ /dev/null @@ -1,145 +0,0 @@ -// ========================================================================== -// qtmain_win.cpp -// ========================================================================== -// -// This source file is included from Qt v4.8.4, because VS2012 won't link -// with the 'qtmain.lib' from the official Qt v4.8.4 (VS2010) release. -// -// ========================================================================== - -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Windows main function of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qt_windows.h" -#include "qbytearray.h" -#include "qstring.h" -#include "qvector.h" - -/* - This file contains the code in the qtmain library for Windows. - qtmain contains the Windows startup code and is required for - linking to the Qt DLL. - - When a Windows application starts, the WinMain function is - invoked. WinMain calls qWinMain in the Qt DLL/library, which - initializes Qt. -*/ - -QT_BEGIN_NAMESPACE - -#if defined(Q_OS_WINCE) -extern void __cdecl qWinMain(HINSTANCE, HINSTANCE, LPSTR, int, int &, QVector &); -#else -extern void qWinMain(HINSTANCE, HINSTANCE, LPSTR, int, int &, QVector &); -#endif - -QT_END_NAMESPACE - -QT_USE_NAMESPACE - - -#if defined(QT_NEEDS_QMAIN) -int qMain(int, char **); -#define main qMain -#else -#ifdef Q_OS_WINCE -extern "C" int __cdecl main(int, char **); -#else -extern "C" int main(int, char **); -#endif -#endif - -/* - WinMain() - Initializes Windows and calls user's startup function main(). - NOTE: WinMain() won't be called if the application was linked as a "console" - application. -*/ - -#ifdef Q_OS_WINCE -int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR /*wCmdParam*/, int cmdShow) -#else -extern "C" -int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR /*cmdParamarg*/, int cmdShow) -#endif -{ - QByteArray cmdParam = QString::fromWCharArray(GetCommandLine()).toLocal8Bit(); - -#if defined(Q_OS_WINCE) - wchar_t appName[MAX_PATH]; - GetModuleFileName(0, appName, MAX_PATH); - cmdParam.prepend(QString(QLatin1String("\"%1\" ")).arg(QString::fromWCharArray(appName)).toLocal8Bit()); -#endif - - int argc = 0; - QVector argv(8); - qWinMain(instance, prevInstance, cmdParam.data(), cmdShow, argc, argv); - -#if defined(Q_OS_WINCE) - wchar_t uniqueAppID[MAX_PATH]; - GetModuleFileName(0, uniqueAppID, MAX_PATH); - QString uid = QString::fromWCharArray(uniqueAppID).toLower().replace(QLatin1String("\\"), QLatin1String("_")); - - // If there exists an other instance of this application - // it will be the owner of a mutex with the unique ID. - HANDLE mutex = CreateMutex(NULL, TRUE, (LPCWSTR)uid.utf16()); - if (mutex && ERROR_ALREADY_EXISTS == GetLastError()) { - CloseHandle(mutex); - - // The app is already running, so we use the unique - // ID to create a unique messageNo, which is used - // as the registered class name for the windows - // created. Set the first instance's window to the - // foreground, else just terminate. - // Use bitwise 0x01 OR to reactivate window state if - // it was hidden - UINT msgNo = RegisterWindowMessage((LPCWSTR)uid.utf16()); - HWND aHwnd = FindWindow((LPCWSTR)QString::number(msgNo).utf16(), 0); - if (aHwnd) - SetForegroundWindow((HWND)(((ULONG)aHwnd) | 0x01)); - return 0; - } -#endif // Q_OS_WINCE - - int result = main(argc, argv.data()); -#if defined(Q_OS_WINCE) - CloseHandle(mutex); -#endif - return result; -} diff --git a/src/cli.cpp b/src/cli.cpp deleted file mode 100644 index 067a023..0000000 --- a/src/cli.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Simple x264 Launcher -// Copyright (C) 2004-2015 LoRd_MuldeR -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// http://www.gnu.org/licenses/gpl-2.0.txt -/////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "cli.h" -#include "global.h" - -/////////////////////////////////////////////////////////////////////////////// -// Pre-defined commands -/////////////////////////////////////////////////////////////////////////////// - -#define MAKE_ARG(X,Y,Z) { "--"X, (Y), (Z) } - -static struct -{ - const char *longName; - const int optionCount; - const int identifier; -} -s_parameters[] = -{ - MAKE_ARG( "add", 1, CLI_PARAM_ADD_FILE ), - MAKE_ARG( "add-file", 1, CLI_PARAM_ADD_FILE ), - MAKE_ARG( "add-job", 3, CLI_PARAM_ADD_JOB ), - MAKE_ARG( "force-start", 0, CLI_PARAM_FORCE_START ), - MAKE_ARG( "no-force-start", 0, CLI_PARAM_NO_FORCE_START ), - MAKE_ARG( "force-enqueue", 0, CLI_PARAM_FORCE_ENQUEUE ), - MAKE_ARG( "no-force-enqueue", 0, CLI_PARAM_NO_FORCE_ENQUEUE ), - MAKE_ARG( "skip-avisynth-check", 0, CLI_PARAM_SKIP_AVS_CHECK ), - MAKE_ARG( "skip-vapoursynth-check", 0, CLI_PARAM_SKIP_VPS_CHECK ), - MAKE_ARG( "skip-version-checks", 0, CLI_PARAM_SKIP_VERSION_CHECK ), - MAKE_ARG( "no-deadlock-detection", 0, CLI_PARAM_NO_DEADLOCK ), - MAKE_ARG( "no-style", 0, CLI_PARAM_NO_GUI_STYLE ), - MAKE_ARG( "first-run", 0, CLI_PARAM_FIRST_RUN ), - MAKE_ARG( "console", 0, CLI_PARAM_OTHER ), - MAKE_ARG( "no-console", 0, CLI_PARAM_OTHER ), - MAKE_ARG( "force-cpu-no-64bit", 0, CLI_PARAM_OTHER ), - MAKE_ARG( "force-cpu-no-sse", 0, CLI_PARAM_OTHER ), - MAKE_ARG( "force-cpu-no-intel", 0, CLI_PARAM_OTHER ), - { NULL, 0, 0 } -}; - -/////////////////////////////////////////////////////////////////////////////// -// CLI Parser -/////////////////////////////////////////////////////////////////////////////// - -CLIParser::CLIParser(const QStringList &args) -: - m_args(args) -{ - m_iter = m_args.constBegin(); - - //Skip the application name, which is expected at args[0] - if(m_iter != m_args.constEnd()) m_iter++; -} - -CLIParser::~CLIParser(void) -{ - /*Nothing to do*/ -} - -bool CLIParser::nextOption(int &identifier, QStringList *options) -{ - identifier = -1; - if(options) options->clear(); - int numOpts = 0; - - if(m_iter != m_args.constEnd()) - { - const QString current = *(m_iter++); - for(size_t i = 0; s_parameters[i].longName != NULL; i++) - { - if(X264_STRCMP(current, QString::fromLatin1(s_parameters[i].longName))) - { - numOpts = s_parameters[i].optionCount; - identifier = s_parameters[i].identifier; - break; - } - } - if(identifier < 0) - { - qWarning("Invalid command-line option \"%s\" was encountered!", current.toUtf8().constData()); - m_iter = m_args.constEnd(); - } - } - - while((identifier >= 0) && (numOpts > 0)) - { - if(m_iter != m_args.constEnd()) - { - if(options) - { - *options << *m_iter; - } - m_iter++; numOpts--; - } - else - { - qWarning("Too few arguments for command \"--%s\" specified!", identifier2string(identifier)); - break; - } - } - - return ((identifier >= 0) && (numOpts <= 0)); -} - -bool CLIParser::checkFlag(const int &identifier, const QStringList &args) -{ - CLIParser parser(args); - int currentId; - - while(parser.nextOption(currentId, NULL)) - { - if(currentId == identifier) - { - return true; - } - } - - return false; -} - -const char *CLIParser::identifier2string(const int &identifier) -{ - const char *longName = NULL; - - for(size_t i = 0; s_parameters[i].longName != NULL; i++) - { - if(s_parameters[i].identifier == identifier) - { - longName = s_parameters[i].longName; - } - } - - return longName; -} diff --git a/src/cli.h b/src/cli.h index 0231c1f..c53a5e8 100644 --- a/src/cli.h +++ b/src/cli.h @@ -27,36 +27,18 @@ // CLI parameter identifiers /////////////////////////////////////////////////////////////////////////////// -static const int CLI_PARAM_ADD_FILE = 0; -static const int CLI_PARAM_ADD_JOB = 1; -static const int CLI_PARAM_FORCE_START = 2; -static const int CLI_PARAM_NO_FORCE_START = 3; -static const int CLI_PARAM_FORCE_ENQUEUE = 4; -static const int CLI_PARAM_NO_FORCE_ENQUEUE = 5; -static const int CLI_PARAM_SKIP_AVS_CHECK = 6; -static const int CLI_PARAM_SKIP_VPS_CHECK = 7; -static const int CLI_PARAM_SKIP_VERSION_CHECK = 8; -static const int CLI_PARAM_NO_DEADLOCK = 9; -static const int CLI_PARAM_NO_GUI_STYLE = 10; -static const int CLI_PARAM_FIRST_RUN = 11; -static const int CLI_PARAM_OTHER = 42; - -/////////////////////////////////////////////////////////////////////////////// -// CLI Parser -/////////////////////////////////////////////////////////////////////////////// - -class CLIParser -{ -public: - CLIParser(const QStringList &args); - ~CLIParser(void); - - bool nextOption(int &identifier, QStringList *options = NULL); - - static bool checkFlag(const int &identifier, const QStringList &args); - static const char *identifier2string(const int &identifier); - -protected: - const QStringList &m_args; - QStringList::ConstIterator m_iter; -}; +static const char *const CLI_PARAM_ADD_FILE = "add-file"; +static const char *const CLI_PARAM_ADD_JOB = "add-job"; +static const char *const CLI_PARAM_FORCE_START = "force-start"; +static const char *const CLI_PARAM_FORCE_ENQUEUE = "force-enqueue"; +static const char *const CLI_PARAM_SKIP_AVS_CHECK = "skip-avisynth-check"; +static const char *const CLI_PARAM_SKIP_VPS_CHECK = "skip-vapoursynth-check"; +static const char *const CLI_PARAM_SKIP_VERSION_CHECK = "skip-version-checks"; +static const char *const CLI_PARAM_NO_DEADLOCK = "no-deadlock-detection"; +static const char *const CLI_PARAM_NO_GUI_STYLE = "no-style"; +static const char *const CLI_PARAM_FIRST_RUN = "first-run"; +static const char *const CLI_PARAM_CONSOLE_SHOW = "console"; +static const char *const CLI_PARAM_CONSOLE_HIDE = "no-console"; +static const char *const CLI_PARAM_CPU_NO_64BIT = "force-cpu-no-64bit"; +static const char *const CLI_PARAM_CPU_NO_SSE = "force-cpu-no-sse"; +static const char *const CLI_PARAM_CPU_NO_INTEL = "force-cpu-no-intel"; diff --git a/src/global.cpp b/src/global.cpp index 5bfb0aa..5d27b19 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -784,6 +784,7 @@ const char *x264_version_arch(void) /* * Get CLI arguments */ +/* const QStringList &x264_arguments(void) { QReadLocker readLock(&g_x264_argv.lock); @@ -814,6 +815,7 @@ const QStringList &x264_arguments(void) return (*g_x264_argv.list); } +*/ /* * Check for portable mode @@ -927,14 +929,17 @@ bool x264_is_prerelease(void) /* * CPUID prototype (actual function is in ASM code) */ +/* extern "C" { void x264_cpu_cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx); } +*/ /* * Detect CPU features */ +/* x264_cpu_t x264_detect_cpu_features(const int argc, char **argv) { typedef BOOL (WINAPI *IsWow64ProcessFun)(__in HANDLE hProcess, __out PBOOL Wow64Process); @@ -1039,6 +1044,7 @@ x264_cpu_t x264_detect_cpu_features(const int argc, char **argv) return features; } +*/ /* * Verify a specific Windows version @@ -1401,176 +1407,177 @@ bool x264_user_is_admin(void) /* * Initialize Qt framework */ -bool x264_init_qt(int &argc, char **argv) -{ - static bool qt_initialized = false; - typedef BOOL (WINAPI *SetDllDirectoryProc)(WCHAR *lpPathName); - const QStringList &arguments = x264_arguments(); +//bool x264_init_qt(int &argc, char **argv) +//{ +// static bool qt_initialized = false; +// typedef BOOL (WINAPI *SetDllDirectoryProc)(WCHAR *lpPathName); +// const QStringList &arguments = x264_arguments(); +// +// //Don't initialized again, if done already +// if(qt_initialized) +// { +// return true; +// } +// +// //Secure DLL loading +// QLibrary kernel32("kernel32.dll"); +// if(kernel32.load()) +// { +// SetDllDirectoryProc pSetDllDirectory = (SetDllDirectoryProc) kernel32.resolve("SetDllDirectoryW"); +// if(pSetDllDirectory != NULL) pSetDllDirectory(L""); +// } +// +// //Extract executable name from argv[] array +// QString executableName = QLatin1String("x264_launcher.exe"); +// if(arguments.count() > 0) +// { +// static const char *delimiters = "\\/:?"; +// executableName = arguments[0].trimmed(); +// for(int i = 0; delimiters[i]; i++) +// { +// int temp = executableName.lastIndexOf(QChar(delimiters[i])); +// if(temp >= 0) executableName = executableName.mid(temp + 1); +// } +// executableName = executableName.trimmed(); +// if(executableName.isEmpty()) +// { +// executableName = QLatin1String("x264_launcher.exe"); +// } +// } +// +// //Check Qt version +//#ifdef QT_BUILD_KEY +// qDebug("Using Qt v%s [%s], %s, %s", qVersion(), QLibraryInfo::buildDate().toString(Qt::ISODate).toLatin1().constData(), (qSharedBuild() ? "DLL" : "Static"), QLibraryInfo::buildKey().toLatin1().constData()); +// qDebug("Compiled with Qt v%s [%s], %s\n", QT_VERSION_STR, QT_PACKAGEDATE_STR, QT_BUILD_KEY); +// if(_stricmp(qVersion(), QT_VERSION_STR)) +// { +// qFatal("%s", QApplication::tr("Executable '%1' requires Qt v%2, but found Qt v%3.").arg(executableName, QString::fromLatin1(QT_VERSION_STR), QString::fromLatin1(qVersion())).toLatin1().constData()); +// return false; +// } +// if(QLibraryInfo::buildKey().compare(QString::fromLatin1(QT_BUILD_KEY), Qt::CaseInsensitive)) +// { +// qFatal("%s", QApplication::tr("Executable '%1' was built for Qt '%2', but found Qt '%3'.").arg(executableName, QString::fromLatin1(QT_BUILD_KEY), QLibraryInfo::buildKey()).toLatin1().constData()); +// return false; +// } +//#else +// qDebug("Using Qt v%s [%s], %s", qVersion(), QLibraryInfo::buildDate().toString(Qt::ISODate).toLatin1().constData(), (qSharedBuild() ? "DLL" : "Static")); +// qDebug("Compiled with Qt v%s [%s]\n", QT_VERSION_STR, QT_PACKAGEDATE_STR); +//#endif +// +// //Check the Windows version +// const x264_os_version_t &osVersionNo = x264_get_os_version(); +// if(osVersionNo < x264_winver_winxp) +// { +// qFatal("%s", QApplication::tr("Executable '%1' requires Windows XP or later.").arg(executableName).toLatin1().constData()); +// } +// +// //Check whether we are running on a supported Windows version +// bool runningOnSupportedOSVersion = false; +// for(size_t i = 0; x264_winver_lut[i].version != x264_winver_error; i++) +// { +// if(osVersionNo == x264_winver_lut[i].version) +// { +// runningOnSupportedOSVersion = true; +// qDebug("Running on %s (NT v%u.%u).\n", x264_winver_lut[i].friendlyName, osVersionNo.versionMajor, osVersionNo.versionMinor); +// break; +// } +// } +// if(!runningOnSupportedOSVersion) +// { +// const QString message = QString().sprintf("Running on an unknown WindowsNT-based system (v%u.%u).", osVersionNo.versionMajor, osVersionNo.versionMinor); +// qWarning("%s\n", QUTF8(message)); +// MessageBoxW(NULL, QWCHAR(message), L"LameXP", MB_OK | MB_TOPMOST | MB_ICONWARNING); +// } +// +// //Check for compat mode +// if(osVersionNo.overrideFlag && (osVersionNo <= x264_winver_wn100)) +// { +// qWarning("Windows compatibility mode detected!"); +// if(!arguments.contains("--ignore-compat-mode", Qt::CaseInsensitive)) +// { +// qFatal("%s", QApplication::tr("Executable '%1' doesn't support Windows compatibility mode.").arg(executableName).toLatin1().constData()); +// return false; +// } +// } +// +// //Check for Wine +// if(x264_detect_wine()) +// { +// qWarning("It appears we are running under Wine, unexpected things might happen!\n"); +// } +// +// //Set text Codec for locale +// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); +// +// //Create Qt application instance +// QApplication *application = new QApplication(argc, argv); +// +// //Load plugins from application directory +// QCoreApplication::setLibraryPaths(QStringList() << QApplication::applicationDirPath()); +// qDebug("Library Path:\n%s\n", QUTF8(QApplication::libraryPaths().first())); +// +// //Create Qt application instance and setup version info +// application->setApplicationName("Simple x264 Launcher"); +// application->setApplicationVersion(QString().sprintf("%d.%02d", x264_version_major(), x264_version_minor())); +// application->setOrganizationName("LoRd_MuldeR"); +// application->setOrganizationDomain("mulder.at.gg"); +// application->setWindowIcon(QIcon(":/icons/movie.ico")); +// application->setEventFilter(x264_event_filter); +// +// //Check for supported image formats +// QList supportedFormats = QImageReader::supportedImageFormats(); +// for(int i = 0; g_x264_imageformats[i]; i++) +// { +// if(!supportedFormats.contains(g_x264_imageformats[i])) +// { +// qFatal("Qt initialization error: QImageIOHandler for '%s' missing!", g_x264_imageformats[i]); +// return false; +// } +// } +// +// //Add default translations +// /* +// QWriteLocker writeLockTranslations(&g_x264_translation.lock); +// if(!g_x264_translation.files) g_x264_translation.files = new QMap(); +// if(!g_x264_translation.names) g_x264_translation.names = new QMap(); +// g_x264_translation.files->insert(X264_DEFAULT_LANGID, ""); +// g_x264_translation.names->insert(X264_DEFAULT_LANGID, "English"); +// writeLockTranslations.unlock(); +// */ +// +// //Check for process elevation +// if(x264_process_is_elevated() && (!x264_detect_wine())) +// { +// QMessageBox messageBox(QMessageBox::Warning, "Simple x264 Launcher", "Simple x264 Launcher was started with 'elevated' rights, altough it does not need these rights.
Running an applications with unnecessary rights is a potential security risk!
", QMessageBox::NoButton, NULL, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowStaysOnTopHint); +// messageBox.addButton("Quit Program (Recommended)", QMessageBox::NoRole); +// messageBox.addButton("Ignore", QMessageBox::NoRole); +// if(messageBox.exec() == 0) +// { +// return false; +// } +// } +// +// //Update console icon, if a console is attached +//#if QT_VERSION < QT_VERSION_CHECK(5,0,0) +// if(g_x264_console_attached && (!x264_detect_wine())) +// { +// typedef DWORD (__stdcall *SetConsoleIconFun)(HICON); +// QLibrary kernel32("kernel32.dll"); +// if(kernel32.load()) +// { +// SetConsoleIconFun SetConsoleIconPtr = (SetConsoleIconFun) kernel32.resolve("SetConsoleIcon"); +// QPixmap pixmap = QIcon(":/icons/movie.ico").pixmap(16, 16); +// if((SetConsoleIconPtr != NULL) && (!pixmap.isNull())) SetConsoleIconPtr(pixmap.toWinHICON()); +// kernel32.unload(); +// } +// } +//#endif +// +// //Done +// qt_initialized = true; +// return true; +//} - //Don't initialized again, if done already - if(qt_initialized) - { - return true; - } - - //Secure DLL loading - QLibrary kernel32("kernel32.dll"); - if(kernel32.load()) - { - SetDllDirectoryProc pSetDllDirectory = (SetDllDirectoryProc) kernel32.resolve("SetDllDirectoryW"); - if(pSetDllDirectory != NULL) pSetDllDirectory(L""); - } - - //Extract executable name from argv[] array - QString executableName = QLatin1String("x264_launcher.exe"); - if(arguments.count() > 0) - { - static const char *delimiters = "\\/:?"; - executableName = arguments[0].trimmed(); - for(int i = 0; delimiters[i]; i++) - { - int temp = executableName.lastIndexOf(QChar(delimiters[i])); - if(temp >= 0) executableName = executableName.mid(temp + 1); - } - executableName = executableName.trimmed(); - if(executableName.isEmpty()) - { - executableName = QLatin1String("x264_launcher.exe"); - } - } - - //Check Qt version -#ifdef QT_BUILD_KEY - qDebug("Using Qt v%s [%s], %s, %s", qVersion(), QLibraryInfo::buildDate().toString(Qt::ISODate).toLatin1().constData(), (qSharedBuild() ? "DLL" : "Static"), QLibraryInfo::buildKey().toLatin1().constData()); - qDebug("Compiled with Qt v%s [%s], %s\n", QT_VERSION_STR, QT_PACKAGEDATE_STR, QT_BUILD_KEY); - if(_stricmp(qVersion(), QT_VERSION_STR)) - { - qFatal("%s", QApplication::tr("Executable '%1' requires Qt v%2, but found Qt v%3.").arg(executableName, QString::fromLatin1(QT_VERSION_STR), QString::fromLatin1(qVersion())).toLatin1().constData()); - return false; - } - if(QLibraryInfo::buildKey().compare(QString::fromLatin1(QT_BUILD_KEY), Qt::CaseInsensitive)) - { - qFatal("%s", QApplication::tr("Executable '%1' was built for Qt '%2', but found Qt '%3'.").arg(executableName, QString::fromLatin1(QT_BUILD_KEY), QLibraryInfo::buildKey()).toLatin1().constData()); - return false; - } -#else - qDebug("Using Qt v%s [%s], %s", qVersion(), QLibraryInfo::buildDate().toString(Qt::ISODate).toLatin1().constData(), (qSharedBuild() ? "DLL" : "Static")); - qDebug("Compiled with Qt v%s [%s]\n", QT_VERSION_STR, QT_PACKAGEDATE_STR); -#endif - - //Check the Windows version - const x264_os_version_t &osVersionNo = x264_get_os_version(); - if(osVersionNo < x264_winver_winxp) - { - qFatal("%s", QApplication::tr("Executable '%1' requires Windows XP or later.").arg(executableName).toLatin1().constData()); - } - - //Check whether we are running on a supported Windows version - bool runningOnSupportedOSVersion = false; - for(size_t i = 0; x264_winver_lut[i].version != x264_winver_error; i++) - { - if(osVersionNo == x264_winver_lut[i].version) - { - runningOnSupportedOSVersion = true; - qDebug("Running on %s (NT v%u.%u).\n", x264_winver_lut[i].friendlyName, osVersionNo.versionMajor, osVersionNo.versionMinor); - break; - } - } - if(!runningOnSupportedOSVersion) - { - const QString message = QString().sprintf("Running on an unknown WindowsNT-based system (v%u.%u).", osVersionNo.versionMajor, osVersionNo.versionMinor); - qWarning("%s\n", QUTF8(message)); - MessageBoxW(NULL, QWCHAR(message), L"LameXP", MB_OK | MB_TOPMOST | MB_ICONWARNING); - } - - //Check for compat mode - if(osVersionNo.overrideFlag && (osVersionNo <= x264_winver_wn100)) - { - qWarning("Windows compatibility mode detected!"); - if(!arguments.contains("--ignore-compat-mode", Qt::CaseInsensitive)) - { - qFatal("%s", QApplication::tr("Executable '%1' doesn't support Windows compatibility mode.").arg(executableName).toLatin1().constData()); - return false; - } - } - - //Check for Wine - if(x264_detect_wine()) - { - qWarning("It appears we are running under Wine, unexpected things might happen!\n"); - } - - //Set text Codec for locale - QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); - - //Create Qt application instance - QApplication *application = new QApplication(argc, argv); - - //Load plugins from application directory - QCoreApplication::setLibraryPaths(QStringList() << QApplication::applicationDirPath()); - qDebug("Library Path:\n%s\n", QUTF8(QApplication::libraryPaths().first())); - - //Create Qt application instance and setup version info - application->setApplicationName("Simple x264 Launcher"); - application->setApplicationVersion(QString().sprintf("%d.%02d", x264_version_major(), x264_version_minor())); - application->setOrganizationName("LoRd_MuldeR"); - application->setOrganizationDomain("mulder.at.gg"); - application->setWindowIcon(QIcon(":/icons/movie.ico")); - application->setEventFilter(x264_event_filter); - - //Check for supported image formats - QList supportedFormats = QImageReader::supportedImageFormats(); - for(int i = 0; g_x264_imageformats[i]; i++) - { - if(!supportedFormats.contains(g_x264_imageformats[i])) - { - qFatal("Qt initialization error: QImageIOHandler for '%s' missing!", g_x264_imageformats[i]); - return false; - } - } - - //Add default translations - /* - QWriteLocker writeLockTranslations(&g_x264_translation.lock); - if(!g_x264_translation.files) g_x264_translation.files = new QMap(); - if(!g_x264_translation.names) g_x264_translation.names = new QMap(); - g_x264_translation.files->insert(X264_DEFAULT_LANGID, ""); - g_x264_translation.names->insert(X264_DEFAULT_LANGID, "English"); - writeLockTranslations.unlock(); - */ - - //Check for process elevation - if(x264_process_is_elevated() && (!x264_detect_wine())) - { - QMessageBox messageBox(QMessageBox::Warning, "Simple x264 Launcher", "Simple x264 Launcher was started with 'elevated' rights, altough it does not need these rights.
Running an applications with unnecessary rights is a potential security risk!
", QMessageBox::NoButton, NULL, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowStaysOnTopHint); - messageBox.addButton("Quit Program (Recommended)", QMessageBox::NoRole); - messageBox.addButton("Ignore", QMessageBox::NoRole); - if(messageBox.exec() == 0) - { - return false; - } - } - - //Update console icon, if a console is attached -#if QT_VERSION < QT_VERSION_CHECK(5,0,0) - if(g_x264_console_attached && (!x264_detect_wine())) - { - typedef DWORD (__stdcall *SetConsoleIconFun)(HICON); - QLibrary kernel32("kernel32.dll"); - if(kernel32.load()) - { - SetConsoleIconFun SetConsoleIconPtr = (SetConsoleIconFun) kernel32.resolve("SetConsoleIcon"); - QPixmap pixmap = QIcon(":/icons/movie.ico").pixmap(16, 16); - if((SetConsoleIconPtr != NULL) && (!pixmap.isNull())) SetConsoleIconPtr(pixmap.toWinHICON()); - kernel32.unload(); - } - } -#endif - - //Done - qt_initialized = true; - return true; -} /* * Suspend or resume process @@ -2307,55 +2314,6 @@ void x264_dbg_output_string(const char* format, ...) #endif //X264_DEBUG } -/* - * Entry point checks - */ -static DWORD x264_entry_check(void); -static DWORD g_x264_entry_check_result = x264_entry_check(); -static DWORD g_x264_entry_check_flag = 0x789E09B2; -static DWORD x264_entry_check(void) -{ - volatile DWORD retVal = 0xA199B5AF; - if(g_x264_entry_check_flag != 0x8761F64D) - { - x264_fatal_exit(L"Application initialization has failed, take care!"); - } - return retVal; -} - -/* - * Application entry point (runs before static initializers) - */ -extern "C" -{ - int WinMainCRTStartup(void); - - int x264_entry_point(void) - { - if((!X264_DEBUG) && x264_check_for_debugger()) - { - x264_fatal_exit(L"Not a debug build. Please unload debugger and try again!"); - } - if(g_x264_entry_check_flag != 0x789E09B2) - { - x264_fatal_exit(L"Application initialization has failed, take care!"); - } - - //Zero *before* constructors are called - X264_ZERO_MEMORY(g_x264_argv); - X264_ZERO_MEMORY(g_x264_os_version); - X264_ZERO_MEMORY(g_x264_portable); - X264_ZERO_MEMORY(g_x264_known_folder); - X264_ZERO_MEMORY(g_x264_temp_folder); - - //Make sure we will pass the check - g_x264_entry_check_flag = ~g_x264_entry_check_flag; - - //Now initialize the C Runtime library! - return WinMainCRTStartup(); - } -} - /* * Initialize debug thread */ @@ -2376,6 +2334,19 @@ size_t x264_dbg_private_bytes(void) #endif //X264_DEBUG } +/* + * Initialization function + */ +void x264_initialization(void) +{ + //Zero *before* constructors are called + X264_ZERO_MEMORY(g_x264_argv); + X264_ZERO_MEMORY(g_x264_os_version); + X264_ZERO_MEMORY(g_x264_portable); + X264_ZERO_MEMORY(g_x264_known_folder); + X264_ZERO_MEMORY(g_x264_temp_folder); +} + /* * Finalization function */ diff --git a/src/global.h b/src/global.h index 1e5245d..83e42c8 100644 --- a/src/global.h +++ b/src/global.h @@ -41,6 +41,7 @@ enum QtMsgType; /////////////////////////////////////////////////////////////////////////////// //Types definitions +/* typedef struct { int family; @@ -59,6 +60,7 @@ typedef struct bool intel; } x264_cpu_t; +*/ //OS version number typedef struct _x264_os_version_t @@ -131,7 +133,7 @@ private: // GLOBAL FUNCTIONS /////////////////////////////////////////////////////////////////////////////// -const QStringList &x264_arguments(void); +//const QStringList &x264_arguments(void); bool x264_beep(int beepType); void x264_blink_window(QWidget *poWindow, unsigned int count, unsigned int delay); bool x264_bring_process_to_front(const unsigned long pid); @@ -143,13 +145,13 @@ QDate x264_current_date_safe(void); const QString &x264_data_path(void); void x264_dbg_output_string(const char* format, ...); size_t x264_dbg_private_bytes(void); -x264_cpu_t x264_detect_cpu_features(const int argc, char **argv); +//x264_cpu_t x264_detect_cpu_features(const int argc, char **argv); bool x264_enable_close_button(const QWidget *win, const bool bEnable); void x264_fatal_exit(const wchar_t* exitMessage, const char* errorBoxMessage = NULL); void x264_finalization(void); void x264_init_console(const int argc, char **argv); void x264_init_process(QProcess &process, const QString &wokringDir, const bool bReplaceTempDir = true); -bool x264_init_qt(int &argc, char **argv); +//bool x264_init_qt(int &argc, char **argv); bool x264_is_executable(const QString &path); bool x264_is_prerelease(void); const QString &x264_known_folder(x264_known_folder_t folder_id); diff --git a/src/ipc.cpp b/src/ipc.cpp deleted file mode 100644 index b107bd5..0000000 --- a/src/ipc.cpp +++ /dev/null @@ -1,499 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Simple x264 Launcher -// Copyright (C) 2004-2015 LoRd_MuldeR -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// http://www.gnu.org/licenses/gpl-2.0.txt -/////////////////////////////////////////////////////////////////////////////// - -#include "ipc.h" - -#include "global.h" - -#include -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////////// -// Constants -/////////////////////////////////////////////////////////////////////////////// - -static const size_t MAX_STR_LEN = 1024; -static const size_t MAX_ARG_CNT = 3; -static const size_t MAX_ENTRIES = 16; - -static const char *s_key_smemory = "{C10A332B-31F2-4A12-B521-420C7CCFFF1D}"; -static const char *s_key_sema_wr = "{E20F7E3B-084F-45CF-8448-EBAF25D21BDD}"; -static const char *s_key_sema_rd = "{8B816115-E846-4E2A-9E6B-4DAD400DB93D}"; - -static const wchar_t *EMPTY_STRING = L""; -static unsigned long TIMEOUT_MS = 12000; - -typedef struct -{ - size_t versTag; - size_t posRd; - size_t posWr; - size_t counter; - struct - { - int command; - wchar_t args[MAX_ARG_CNT][MAX_STR_LEN]; - unsigned int flags; - } - data[MAX_ENTRIES]; -} -x264_ipc_t; - -static size_t versionTag(void) -{ - return ((x264_version_major() & 0xFF) << 24) | ((x264_version_minor() & 0xFF) << 16) | (x264_version_build() & 0xFFFF); -} - -#define IS_FIRST_INSTANCE(X) ((X) > 0) - -/////////////////////////////////////////////////////////////////////////////// -// IPC Base Class -/////////////////////////////////////////////////////////////////////////////// - -class IPCCore : public QObject -{ - friend class IPC; - friend class IPCReceiveThread; - friend class IPCSendThread; - -public: - bool initialize(bool &firstInstance); - - inline bool isInitialized(void) - { - return (m_initialized >= 0); - } - -protected: - IPCCore(void); - ~IPCCore(void); - - bool popCommand(int &command, QStringList &args, unsigned int &flags); - bool pushCommand(const int &command, const QStringList *args, const unsigned int &flags = 0); - - volatile int m_initialized; - - QSharedMemory *m_sharedMemory; - QSystemSemaphore *m_semaphoreRd; - QSystemSemaphore *m_semaphoreWr; -}; - -/////////////////////////////////////////////////////////////////////////////// -// Send Thread -/////////////////////////////////////////////////////////////////////////////// - -IPCSendThread::IPCSendThread(IPCCore *ipc, const int &command, const QStringList &args, const unsigned int &flags) -: - m_ipc(ipc), m_command(command), m_args(&args), m_flags(flags) -{ - m_result = false; -} - -IPCSendThread::~IPCSendThread(void) -{ - /*nothing to do here*/ -} - -void IPCSendThread::run(void) -{ - try - { - m_result = m_ipc->pushCommand(m_command, m_args, m_flags); - } - catch(...) - { - m_result = false; - } -} - - -/////////////////////////////////////////////////////////////////////////////// -// Receive Thread -/////////////////////////////////////////////////////////////////////////////// - -IPCReceiveThread::IPCReceiveThread(IPCCore *ipc) -: - m_ipc(ipc) -{ - m_stopped = false; -} - -IPCReceiveThread::~IPCReceiveThread(void) -{ - /*nothing to do here*/ -} - -void IPCReceiveThread::run(void) -{ - try - { - receiveLoop(); - } - catch(...) - { - qWarning("Exception in IPC receive thread!"); - } -} - -void IPCReceiveThread::receiveLoop(void) -{ - while(!m_stopped) - { - int command; - unsigned int flags; - QStringList args; - - if(m_ipc->popCommand(command, args, flags)) - { - if(!m_stopped) - { - if((command >= 0) && (command < IPC_OPCODE_MAX)) - { - emit receivedCommand(command, args, flags); - } - else - { - qWarning("IPC: Received the unknown opcode %d", command); - } - } - } - else - { - m_stopped = true; - qWarning("IPC: Receive operation has failed -> stopping thread!"); - } - } -} - -/////////////////////////////////////////////////////////////////////////////// -// IPC Core Class -/////////////////////////////////////////////////////////////////////////////// - -IPCCore::IPCCore(void) -{ - m_initialized = -1; - m_sharedMemory = NULL; - m_semaphoreWr = NULL; - m_semaphoreRd = NULL; -} - -IPCCore::~IPCCore(void) -{ - X264_DELETE(m_sharedMemory); - X264_DELETE(m_semaphoreWr); - X264_DELETE(m_semaphoreRd); -} - -bool IPCCore::initialize(bool &firstInstance) -{ - firstInstance = false; - - if(m_initialized >= 0) - { - firstInstance = IS_FIRST_INSTANCE(m_initialized); - return true; - } - - m_semaphoreWr = new QSystemSemaphore(s_key_sema_wr, MAX_ENTRIES); - m_semaphoreRd = new QSystemSemaphore(s_key_sema_rd, 0); - - if((m_semaphoreWr->error() != QSystemSemaphore::NoError) || (m_semaphoreRd->error() != QSystemSemaphore::NoError)) - { - qWarning("IPC: Failed to created system semaphores!"); - return false; - } - - m_sharedMemory = new QSharedMemory(s_key_smemory, this); - - if(m_sharedMemory->create(sizeof(x264_ipc_t))) - { - x264_ipc_t *memory = (x264_ipc_t*) m_sharedMemory->data(); - memset(memory, 0, sizeof(x264_ipc_t)); memory->versTag = versionTag(); - m_initialized = 1; - firstInstance = IS_FIRST_INSTANCE(m_initialized); - return true; - } - - if(m_sharedMemory->error() == QSharedMemory::AlreadyExists) - { - qDebug("Not the first instance -> attaching to existing shared memory"); - if(m_sharedMemory->attach()) - { - x264_ipc_t *memory = (x264_ipc_t*) m_sharedMemory->data(); - if(memory->versTag != versionTag()) - { - qWarning("IPC: Version tag mismatch (0x%08x vs. 0x%08x) detected!", memory->versTag, versionTag()); - return false; - } - m_initialized = 0; - firstInstance = IS_FIRST_INSTANCE(m_initialized); - return true; - } - } - - qWarning("IPC: Failed to attach to the shared memory!"); - return false; -} - -bool IPCCore::pushCommand(const int &command, const QStringList *args, const unsigned int &flags) -{ - if(m_initialized < 0) - { - THROW("IPC not initialized!"); - } - - if(!m_semaphoreWr->acquire()) - { - qWarning("IPC: Failed to acquire semaphore!"); - return false; - } - - if(!m_sharedMemory->lock()) - { - qWarning("IPC: Failed to lock shared memory!"); - return false; - } - - bool success = true; - - try - { - x264_ipc_t *memory = (x264_ipc_t*) m_sharedMemory->data(); - if(memory->counter < MAX_ENTRIES) - { - memory->data[memory->posWr].command = command; - for(int i = 0; i < MAX_ARG_CNT; i++) - { - const wchar_t *current = (args && (i < args->count())) ? ((const wchar_t*)((*args)[i].utf16())) : EMPTY_STRING; - wcsncpy_s(memory->data[memory->posWr].args[i], MAX_STR_LEN, current, _TRUNCATE); - } - memory->data[memory->posWr].flags = flags; - memory->posWr = (memory->posWr + 1) % MAX_ENTRIES; - memory->counter++; - } - else - { - qWarning("IPC: Shared memory is full -> cannot push string!"); - success = false; - } - } - catch(...) - { - /*ignore any exception*/ - } - - m_sharedMemory->unlock(); - - if(success) - { - m_semaphoreRd->release(); - } - - return success; -} - -bool IPCCore::popCommand(int &command, QStringList &args, unsigned int &flags) -{ - command = -1; - flags = 0; - args.clear(); - - if(m_initialized < 0) - { - THROW("IPC not initialized!"); - } - - if(!m_semaphoreRd->acquire()) - { - qWarning("IPC: Failed to acquire semaphore!"); - return false; - } - - if(!m_sharedMemory->lock()) - { - qWarning("IPC: Failed to lock shared memory!"); - return false; - } - - bool success = true; - - try - { - x264_ipc_t *memory = (x264_ipc_t*) m_sharedMemory->data(); - if(memory->counter > 0) - { - command = memory->data[memory->posRd].command; - for(size_t i = 0; i < MAX_ARG_CNT; i++) - { - memory->data[memory->posRd].args[i][MAX_STR_LEN-1] = L'\0'; - const QString str = QString::fromUtf16((const ushort*)memory->data[memory->posRd].args[i]); - if(!str.isEmpty()) args << str; else break; - } - flags = memory->data[memory->posRd].flags; - memory->posRd = (memory->posRd + 1) % MAX_ENTRIES; - memory->counter--; - } - else - { - qWarning("IPC: Shared memory is empty -> cannot pop string!"); - success = false; - } - } - catch(...) - { - /*ignore any exception*/ - } - - m_sharedMemory->unlock(); - - if(success) - { - m_semaphoreWr->release(); - } - - return success; -} - -/////////////////////////////////////////////////////////////////////////////// -// IPC Handler Class -/////////////////////////////////////////////////////////////////////////////// - -IPC::IPC(void) -: - m_mutex(QMutex::Recursive) -{ - m_ipcCore = new IPCCore(); - m_recvThread = NULL; -} - -IPC::~IPC(void) -{ - if(m_recvThread && m_recvThread->isRunning()) - { - qWarning("Receive thread still running -> terminating!"); - m_recvThread->terminate(); - m_recvThread->wait(); - } - X264_DELETE(m_recvThread); - X264_DELETE(m_ipcCore); -} - -bool IPC::initialize(bool &firstInstance) -{ - QMutexLocker lock(&m_mutex); - return m_ipcCore->initialize(firstInstance); -} - -bool IPC::sendAsync(const int &command, const QStringList &args, const unsigned int &flags) -{ - QMutexLocker lock(&m_mutex); - - if(!m_ipcCore->isInitialized()) - { - qWarning("Error: IPC not initialized yet!"); - return false; - } - - IPCSendThread sendThread(m_ipcCore, command, args, flags); - sendThread.start(); - - if(!sendThread.wait(TIMEOUT_MS)) - { - qWarning("IPC send operation encountered timeout!"); - sendThread.terminate(); - sendThread.wait(); - return false; - } - - return sendThread.result(); -} - -bool IPC::startListening(void) -{ - QMutexLocker lock(&m_mutex); - - if(!m_ipcCore->isInitialized()) - { - qWarning("Error: IPC not initialized yet!"); - return false; - } - - if(!m_recvThread) - { - m_recvThread = new IPCReceiveThread(m_ipcCore); - connect(m_recvThread, SIGNAL(receivedCommand(int,QStringList,quint32)), this, SIGNAL(receivedCommand(int,QStringList,quint32)), Qt::QueuedConnection); - } - - if(!m_recvThread->isRunning()) - { - m_recvThread->start(); - } - else - { - qWarning("Receive thread was already running!"); - } - - return true; -} - -bool IPC::stopListening(void) -{ - QMutexLocker lock(&m_mutex); - - if(!m_ipcCore->isInitialized()) - { - qWarning("Error: IPC not initialized yet!"); - return false; - } - - if(m_recvThread && m_recvThread->isRunning()) - { - m_recvThread->stop(); - sendAsync(IPC_OPCODE_MAX, QStringList()); //push dummy command to unblock thread! - - if(!m_recvThread->wait(TIMEOUT_MS)) - { - qWarning("Receive thread seems deadlocked -> terminating!"); - m_recvThread->terminate(); - m_recvThread->wait(); - } - } - else - { - qWarning("Receive thread was not running!"); - } - - return true; -} - -bool IPC::isInitialized(void) -{ - QMutexLocker lock(&m_mutex); - return m_ipcCore->isInitialized(); -} - -bool IPC::isListening(void) -{ - QMutexLocker lock(&m_mutex); - return (isInitialized() && m_recvThread && m_recvThread->isRunning()); -} diff --git a/src/ipc.h b/src/ipc.h index d819f9b..837d574 100644 --- a/src/ipc.h +++ b/src/ipc.h @@ -33,86 +33,11 @@ class IPCReceiveThread; class IPCSendThread; //IPC Commands -static const int IPC_OPCODE_PING = 0; -static const int IPC_OPCODE_ADD_FILE = 1; -static const int IPC_OPCODE_ADD_JOB = 2; -static const int IPC_OPCODE_MAX = 3; +static const quint32 IPC_OPCODE_PING = 0; +static const quint32 IPC_OPCODE_ADD_FILE = 1; +static const quint32 IPC_OPCODE_ADD_JOB = 2; +static const quint32 IPC_OPCODE_MAX = 3; //IPC Flags -static const unsigned int IPC_FLAG_FORCE_START = 0x00000001; -static const unsigned int IPC_FLAG_FORCE_ENQUEUE = 0x00000002; - -/////////////////////////////////////////////////////////////////////////////// -// IPC Handler Class -/////////////////////////////////////////////////////////////////////////////// - -class IPC : public QObject -{ - Q_OBJECT - -public: - IPC(void); - ~IPC(void); - - bool initialize(bool &firstInstance); - bool sendAsync(const int &command, const QStringList &args, const unsigned int &flags = 0); - bool isInitialized(void); - bool isListening(void); - -public slots: - bool startListening(void); - bool stopListening(void); - -signals: - void receivedCommand(const int &command, const QStringList &args, const quint32 &flags); - -protected: - IPCCore *m_ipcCore; - IPCReceiveThread *m_recvThread; - QMutex m_mutex; -}; - -/////////////////////////////////////////////////////////////////////////////// -// Utility Classes -/////////////////////////////////////////////////////////////////////////////// - -class IPCSendThread : public QThread -{ - Q_OBJECT - friend class IPC; - -protected: - IPCSendThread(IPCCore *ipc, const int &command, const QStringList &args, const unsigned int &flags); - IPCSendThread::~IPCSendThread(void); - - inline bool result(void) { return m_result; } - virtual void run(void); - -private: - volatile bool m_result; - IPCCore *const m_ipc; - const int m_command; - const unsigned int m_flags; - const QStringList *m_args; -}; - -class IPCReceiveThread : public QThread -{ - Q_OBJECT - friend class IPC; - -protected: - IPCReceiveThread(IPCCore *ipc); - ~IPCReceiveThread(void); - - inline void stop(void) { m_stopped = true; } - virtual void run(void); - -signals: - void receivedCommand(const int &command, const QStringList &args, const quint32 &flags); - -private: - void receiveLoop(void); - volatile bool m_stopped; - IPCCore *const m_ipc; -}; +static const quint32 IPC_FLAG_FORCE_START = 0x00000001; +static const quint32 IPC_FLAG_FORCE_ENQUEUE = 0x00000002; diff --git a/src/main.cpp b/src/main.cpp index 5de1509..ffdbeb1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,11 +19,20 @@ // http://www.gnu.org/licenses/gpl-2.0.txt /////////////////////////////////////////////////////////////////////////////// +//Internal #include "global.h" #include "win_main.h" #include "cli.h" #include "ipc.h" #include "taskbar7.h" +#include "thread_ipc_send.h" + +//MUtils +#include +#include +#include +#include +#include //Qt includes #include @@ -35,28 +44,25 @@ #define WIN32_LEAN_AND_MEAN #include -//Forward declaration -void handleMultipleInstances(const QStringList &args, IPC *ipc); - /////////////////////////////////////////////////////////////////////////////// -// Main function +// Helper functions /////////////////////////////////////////////////////////////////////////////// -static int x264_main(int argc, char* argv[]) +static void x264_print_logo(void) { - //Init console - x264_init_console(argc, argv); - //Print version info qDebug("Simple x264 Launcher v%u.%02u.%u - use 64-Bit x264 with 32-Bit Avisynth", x264_version_major(), x264_version_minor(), x264_version_build()); - qDebug("Copyright (c) 2004-%04d LoRd_MuldeR . Some rights reserved.", qMax(x264_version_date().year(),QDate::currentDate().year())); - qDebug("Built on %s at %s with %s for Win-%s.\n", x264_version_date().toString(Qt::ISODate).toLatin1().constData(), x264_version_time(), x264_version_compiler(), x264_version_arch()); - + qDebug("Copyright (c) 2004-%04d LoRd_MuldeR . Some rights reserved.", qMax(MUtils::Version::app_build_date().year(), MUtils::OS::current_date().year())); + qDebug("Built on %s at %s with %s for Win-%s.\n", MUTILS_UTF8(MUtils::Version::app_build_date().toString(Qt::ISODate)), MUTILS_UTF8(MUtils::Version::app_build_time().toString(Qt::ISODate)), MUtils::Version::compiler_version(), MUtils::Version::compiler_arch()); + //print license info qDebug("This program is free software: you can redistribute it and/or modify"); qDebug("it under the terms of the GNU General Public License ."); qDebug("Note that this program is distributed with ABSOLUTELY NO WARRANTY.\n"); + //Print library version + qDebug("This application is powerd by MUtils library v%u.%02u (%s, %s).\n", MUtils::Version::lib_version_major(), MUtils::Version::lib_version_minor(), MUTILS_UTF8(MUtils::Version::lib_build_date().toString(Qt::ISODate)), MUTILS_UTF8(MUtils::Version::lib_build_time().toString(Qt::ISODate))); + //Print warning, if this is a "debug" build if(X264_DEBUG) { @@ -64,42 +70,98 @@ static int x264_main(int argc, char* argv[]) qWarning("DEBUG BUILD: DO NOT RELEASE THIS BINARY TO THE PUBLIC !!!"); qWarning("---------------------------------------------------------\n"); } +} - //Detect CPU capabilities - const x264_cpu_t cpuFeatures = x264_detect_cpu_features(argc, argv); - qDebug(" CPU vendor id : %s (Intel: %s)", cpuFeatures.vendor, X264_BOOL(cpuFeatures.intel)); - qDebug("CPU brand string : %s", cpuFeatures.brand); - qDebug(" CPU signature : Family: %d, Model: %d, Stepping: %d", cpuFeatures.family, cpuFeatures.model, cpuFeatures.stepping); - qDebug("CPU capabilities : MMX=%s, MMXEXT=%s, SSE=%s, SSE2=%s, SSE3=%s, SSSE3=%s, X64=%s", X264_BOOL(cpuFeatures.mmx), X264_BOOL(cpuFeatures.mmx2), X264_BOOL(cpuFeatures.sse), X264_BOOL(cpuFeatures.sse2), X264_BOOL(cpuFeatures.sse3), X264_BOOL(cpuFeatures.ssse3), X264_BOOL(cpuFeatures.x64)); - qDebug(" Number of CPU's : %d\n", cpuFeatures.count); +static int x264_initialize_ipc(MUtils::IPCChannel *const ipcChannel) +{ + int iResult = 0; - //Get CLI arguments - const QStringList &arguments = x264_arguments(); - - //Initialize the IPC handler class - bool firstInstance = false; - IPC *ipc = new IPC(); - if(ipc->initialize(firstInstance)) + if((iResult = ipcChannel->initialize()) != MUtils::IPCChannel::RET_SUCCESS_MASTER) { - if(!firstInstance) + if(iResult == MUtils::IPCChannel::RET_SUCCESS_SLAVE) { - qDebug("This is *not* the fist instance -> sending all CLI commands to first instance!"); - handleMultipleInstances(arguments, ipc); - X264_DELETE(ipc); + qDebug("Simple x264 Launcher is already running, connecting to running instance..."); + QScopedPointer messageProducerThread(new IPCThread_Send(ipcChannel)); + messageProducerThread->start(); + if(!messageProducerThread->wait(30000)) + { + qWarning("MessageProducer thread has encountered timeout -> going to kill!"); + messageProducerThread->terminate(); + messageProducerThread->wait(); + MUtils::OS::system_message_err(L"Simple x264 Launcher", L"Simple x264 Launcher is already running, but the running instance doesn't respond!"); + return -1; + } return 0; } - } - else - { - qWarning("IPC initialization has failed!"); + else + { + qFatal("The IPC initialization has failed!"); + return -1; + } } - //Initialize Qt - if(!x264_init_qt(argc, argv)) + return 1; +} + +/////////////////////////////////////////////////////////////////////////////// +// Main function +/////////////////////////////////////////////////////////////////////////////// + +static int simple_x264_main(int &argc, char **argv) +{ + int iResult = -1; + + //Print logo + x264_print_logo(); + + //Get CLI arguments + const MUtils::OS::ArgumentMap &arguments = MUtils::OS::arguments(); + + //Enumerate CLI arguments + if(!arguments.isEmpty()) { - return -1; + qDebug("Command-Line Arguments:"); + foreach(const QString &key, arguments.uniqueKeys()) + { + foreach(const QString &val, arguments.values(key)) + { + if(!val.isEmpty()) + { + qDebug("--%s = \"%s\"", MUTILS_UTF8(key), MUTILS_UTF8(val)); + continue; + } + qDebug("--%s", MUTILS_UTF8(key)); + } + } + qDebug(" "); } - + + //Detect CPU capabilities + const MUtils::CPUFetaures::cpu_info_t cpuFeatures = MUtils::CPUFetaures::detect(); + qDebug(" CPU vendor id : %s (Intel=%s)", cpuFeatures.vendor, MUTILS_BOOL2STR(cpuFeatures.intel)); + qDebug("CPU brand string : %s", cpuFeatures.brand); + qDebug(" CPU signature : Family=%d Model=%d Stepping=%d", cpuFeatures.family, cpuFeatures.model, cpuFeatures.stepping); + qDebug("CPU capabilities : MMX=%s SSE=%s SSE2=%s SSE3=%s SSSE3=%s SSE4=%s SSE4.2=%s x64=%s", MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_MMX), MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_SSE), MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_SSE2), MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_SSE3), MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_SSSE3), MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_SSE4), MUTILS_BOOL2STR(cpuFeatures.features & MUtils::CPUFetaures::FLAG_SSE42), MUTILS_BOOL2STR(cpuFeatures.x64)); + qDebug(" Number of CPU's : %d\n", cpuFeatures.count); + + //Initialize Qt + QScopedPointer application(MUtils::Startup::create_qt(argc, argv, QLatin1String("LameXP - Audio Encoder Front-End"))); + if(application.isNull()) + { + return EXIT_FAILURE; + } + + //Initialize application + application->setWindowIcon(QIcon(":/icons/movie.ico")); + application->setApplicationVersion(QString().sprintf("%d.%02d.%04d", x264_version_major(), x264_version_minor(), x264_version_build())); + + //Initialize the IPC handler class + QScopedPointer ipcChannel(new MUtils::IPCChannel("simple-x264-launcher", x264_version_build(), "instance")); + if((iResult = x264_initialize_ipc(ipcChannel.data())) < 1) + { + return (iResult == 0) ? EXIT_SUCCESS : EXIT_FAILURE; + } + //Running in portable mode? if(x264_portable()) { @@ -110,14 +172,14 @@ static int x264_main(int argc, char* argv[]) WinSevenTaskbar::init(); //Set style - if(!CLIParser::checkFlag(CLI_PARAM_NO_GUI_STYLE, arguments)) + if(!arguments.contains(CLI_PARAM_NO_GUI_STYLE)) { qApp->setStyle(new QPlastiqueStyle()); } //Create Main Window - MainWindow *mainWin = new MainWindow(&cpuFeatures, ipc); - mainWin->show(); + QScopedPointer mainWindow(new MainWindow(cpuFeatures)); + mainWindow->show(); //Run application int ret = qApp->exec(); @@ -125,145 +187,15 @@ static int x264_main(int argc, char* argv[]) //Taskbar uninit WinSevenTaskbar::init(); - //Clean up - X264_DELETE(mainWin); - X264_DELETE(ipc); + //Exit program return ret; } -/////////////////////////////////////////////////////////////////////////////// -// Multi-instance handler -/////////////////////////////////////////////////////////////////////////////// - -void handleMultipleInstances(const QStringList &args, IPC *ipc) -{ - bool commandSent = false; - unsigned int flags = 0; - - //Initialize command-line parser - CLIParser parser(args); - int identifier; - QStringList options; - - //Process all command-line arguments - while(parser.nextOption(identifier, &options)) - { - switch(identifier) - { - case CLI_PARAM_ADD_FILE: - ipc->sendAsync(IPC_OPCODE_ADD_FILE, options, flags); - commandSent = true; - break; - case CLI_PARAM_ADD_JOB: - ipc->sendAsync(IPC_OPCODE_ADD_JOB, options, flags); - commandSent = true; - break; - case CLI_PARAM_FORCE_START: - flags = ((flags | IPC_FLAG_FORCE_START) & (~IPC_FLAG_FORCE_ENQUEUE)); - break; - case CLI_PARAM_NO_FORCE_START: - flags = (flags & (~IPC_FLAG_FORCE_START)); - break; - case CLI_PARAM_FORCE_ENQUEUE: - flags = ((flags | IPC_FLAG_FORCE_ENQUEUE) & (~IPC_FLAG_FORCE_START)); - break; - case CLI_PARAM_NO_FORCE_ENQUEUE: - flags = (flags & (~IPC_FLAG_FORCE_ENQUEUE)); - break; - } - } - - //If no argument has been sent yet, send a ping! - if(!commandSent) - { - ipc->sendAsync(IPC_OPCODE_PING, QStringList()); - } -} - /////////////////////////////////////////////////////////////////////////////// // Applicaton entry point /////////////////////////////////////////////////////////////////////////////// -LONG WINAPI x264_exception_handler(__in struct _EXCEPTION_POINTERS *ExceptionInfo); -void x264_invalid_param_handler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t); - -#define PRINT_ERROR(MESSAGE, ...) do \ -{ \ - fflush(stdout); \ - fflush(stderr); \ - fprintf(stderr, (MESSAGE), __VA_ARGS__); \ - fflush(stderr); \ -} \ -while(0) - -static int _main(int argc, char* argv[]) -{ - if(X264_DEBUG) - { - int iResult = -1; - qInstallMsgHandler(x264_message_handler); - X264_MEMORY_CHECK(x264_main, iResult, argc, argv); - x264_finalization(); - return iResult; - } - else - { - int iResult = -1; - try - { - qInstallMsgHandler(x264_message_handler); - iResult = x264_main(argc, argv); - x264_finalization(); - } - catch(const X264Exception &e) - { - PRINT_ERROR("\nGURU MEDITATION !!!\n\nException error message: %s\n", e.what()); - x264_fatal_exit(L"An internal error was detected, application will exit!", e.what()); - } - catch(const std::exception &e) - { - PRINT_ERROR("\nGURU MEDITATION !!!\n\nException error message: %s\n", e.what()); - x264_fatal_exit(L"Unhandeled C++ exception error, application will exit!", e.what()); - } - catch(char *error) - { - PRINT_ERROR("\nGURU MEDITATION !!!\n\nException error message: %s\n", error); - x264_fatal_exit(L"Unhandeled C++ exception error, application will exit!"); - } - catch(int error) - { - PRINT_ERROR("\nGURU MEDITATION !!!\n\nException error code: 0x%X\n", error); - x264_fatal_exit(L"Unhandeled C++ exception error, application will exit!"); - } - catch(...) - { - PRINT_ERROR("\nGURU MEDITATION !!!\n\nUnknown C++ exception!\n"); - x264_fatal_exit(L"Unhandeled C++ exception error, application will exit!"); - } - return iResult; - } -} - int main(int argc, char* argv[]) { - if(X264_DEBUG) - { - return _main(argc, argv); - } - else - { - __try - { - SetUnhandledExceptionFilter(x264_exception_handler); - _set_invalid_parameter_handler(x264_invalid_param_handler); - return _main(argc, argv); - } - __except(1) - { - fflush(stdout); - fflush(stderr); - fprintf(stderr, "\nGURU MEDITATION !!!\n\nUnhandeled structured exception error! [code: 0x%X]\n", GetExceptionCode()); - x264_fatal_exit(L"Unhandeled structured exception error, application will exit!"); - } - } + return MUtils::Startup::startup(argc, argv, simple_x264_main, "Simple x264 Launcher", true /*lamexp_version_demo()*/); } diff --git a/src/thread_ipc_send.cpp b/src/thread_ipc_send.cpp new file mode 100644 index 0000000..cf2c9f0 --- /dev/null +++ b/src/thread_ipc_send.cpp @@ -0,0 +1,123 @@ +/////////////////////////////////////////////////////////////////////////////// +// Simple x264 Launcher +// Copyright (C) 2004-2015 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version, but always including the *additional* +// restrictions defined in the "License.txt" file. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#include "thread_ipc_send.h" + +//Internal +#include "Global.h" +#include "cli.h" +#include "ipc.h" + +//MUtils +#include +#include +#include + +//Qt +#include +#include +#include +#include + +//CRT +#include + +//////////////////////////////////////////////////////////// +// Constructor +//////////////////////////////////////////////////////////// + +IPCThread_Send::IPCThread_Send(MUtils::IPCChannel *const ipcChannel) +: + m_ipcChannel(ipcChannel) +{ +} + +IPCThread_Send::~IPCThread_Send(void) +{ +} + +void IPCThread_Send::run() +{ + setTerminationEnabled(true); + bool bSentFiles = false; + const MUtils::OS::ArgumentMap &args = MUtils::OS::arguments(); + + quint32 flags = 0; + bool commandSent = false; + + //Handle flags + if(args.contains(CLI_PARAM_FORCE_START)) + { + flags = ((flags | IPC_FLAG_FORCE_START) & (~IPC_FLAG_FORCE_ENQUEUE)); + } + if(args.contains(CLI_PARAM_FORCE_ENQUEUE)) + { + flags = ((flags | IPC_FLAG_FORCE_ENQUEUE) & (~IPC_FLAG_FORCE_START)); + } + + //Process all command-line arguments + if(args.contains(CLI_PARAM_ADD_FILE)) + { + foreach(const QString &fileName, args.values(CLI_PARAM_ADD_FILE)) + { + if(!m_ipcChannel->send(IPC_OPCODE_ADD_FILE, flags, QStringList() << fileName)) + { + qWarning("Failed to send IPC message!"); + } + commandSent = true; + } + } + if(args.contains(CLI_PARAM_ADD_JOB)) + { + foreach(const QString &options, args.values(CLI_PARAM_ADD_JOB)) + { + const QStringList optionValues = options.split('|', QString::SkipEmptyParts); + if(optionValues.count() == 3) + { + if(!m_ipcChannel->send(IPC_OPCODE_ADD_JOB, flags, optionValues)) + { + qWarning("Failed to send IPC message!"); + } + } + else + { + qWarning("Invalid number of arguments for parameter \"--%s\" detected!", CLI_PARAM_ADD_JOB); + } + commandSent = true; + } + } + + //If no argument has been sent yet, send a ping! + if(!commandSent) + { + if(!m_ipcChannel->send(IPC_OPCODE_PING, 0, QStringList())) + { + qWarning("Failed to send IPC message!"); + } + } +} + +//////////////////////////////////////////////////////////// +// EVENTS +//////////////////////////////////////////////////////////// + +/*NONE*/ \ No newline at end of file diff --git a/src/thread_ipc_send.h b/src/thread_ipc_send.h new file mode 100644 index 0000000..ab12a4a --- /dev/null +++ b/src/thread_ipc_send.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////// +// Simple x264 Launcher +// Copyright (C) 2004-2015 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version, but always including the *additional* +// restrictions defined in the "License.txt" file. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +namespace MUtils +{ + class IPCChannel; +} + +class IPCThread_Send: public QThread +{ + Q_OBJECT + +public: + IPCThread_Send(MUtils::IPCChannel *const ipcChannel); + ~IPCThread_Send(void); + + void run(); + +protected: + MUtils::IPCChannel *const m_ipcChannel; +}; diff --git a/src/version.h b/src/version.h index 227dca2..e4ef184 100644 --- a/src/version.h +++ b/src/version.h @@ -26,7 +26,7 @@ #define VER_X264_MAJOR 2 #define VER_X264_MINOR 4 #define VER_X264_PATCH 6 -#define VER_X264_BUILD 902 +#define VER_X264_BUILD 907 #define VER_X264_PORTABLE_EDITION (0) diff --git a/src/win_about.cpp b/src/win_about.cpp index e33586f..165652a 100644 --- a/src/win_about.cpp +++ b/src/win_about.cpp @@ -20,7 +20,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_about.h" -#include "uic_win_about.h" +#include "UIC_win_about.h" #include "global.h" diff --git a/src/win_addJob.cpp b/src/win_addJob.cpp index 33c9dd4..c3e55b4 100644 --- a/src/win_addJob.cpp +++ b/src/win_addJob.cpp @@ -20,7 +20,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_addJob.h" -#include "uic_win_addJob.h" +#include "UIC_win_addJob.h" #include "global.h" #include "model_options.h" diff --git a/src/win_editor.cpp b/src/win_editor.cpp index 2300e56..829da82 100644 --- a/src/win_editor.cpp +++ b/src/win_editor.cpp @@ -20,7 +20,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_editor.h" -#include "uic_win_editor.h" +#include "UIC_win_editor.h" #include "global.h" diff --git a/src/win_help.cpp b/src/win_help.cpp index f5e3aa2..2c6fed6 100644 --- a/src/win_help.cpp +++ b/src/win_help.cpp @@ -20,7 +20,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_help.h" -#include "uic_win_help.h" +#include "UIC_win_help.h" #include "global.h" #include "model_options.h" diff --git a/src/win_main.cpp b/src/win_main.cpp index 154236d..f03cc78 100644 --- a/src/win_main.cpp +++ b/src/win_main.cpp @@ -20,8 +20,9 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_main.h" -#include "uic_win_main.h" +#include "UIC_win_main.h" +//Internal #include "global.h" #include "cli.h" #include "ipc.h" @@ -43,6 +44,11 @@ #include "binaries.h" #include "resource.h" +//MUtils +#include +#include + +//Qt #include #include #include @@ -87,9 +93,9 @@ static const int vsynth_rev = 24; /* * Constructor */ -MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc) +MainWindow::MainWindow(const MUtils::CPUFetaures::cpu_info_t &cpuFeatures) : - m_ipc(ipc), + m_ipc(NULL), m_sysinfo(NULL), m_options(NULL), m_jobList(NULL), @@ -112,9 +118,9 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc) //Create and initialize the sysinfo object m_sysinfo = new SysinfoModel(); m_sysinfo->setAppPath(QApplication::applicationDirPath()); - m_sysinfo->setMMXSupport(cpuFeatures->mmx && cpuFeatures->mmx2); - m_sysinfo->setSSESupport(cpuFeatures->sse && cpuFeatures->mmx2); //SSE implies MMX2 - m_sysinfo->setX64Support(cpuFeatures->x64 && cpuFeatures->sse2); //X64 implies SSE2 + m_sysinfo->setMMXSupport(cpuFeatures.features && MUtils::CPUFetaures::FLAG_MMX); + m_sysinfo->setSSESupport(cpuFeatures.features && MUtils::CPUFetaures::FLAG_SSE); //SSE implies MMX2 + m_sysinfo->setX64Support(cpuFeatures.x64 && (cpuFeatures.features && MUtils::CPUFetaures::FLAG_SSE2)); //X64 implies SSE2 //Load preferences m_preferences = new PreferencesModel(); @@ -275,10 +281,11 @@ MainWindow::~MainWindow(void) X264_DELETE(temp); } - if(m_ipc->isListening()) - { - m_ipc->stopListening(); - } + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + //if(m_ipc->isListening()) + //{ + // m_ipc->stopListening(); + //} X264_DELETE(m_preferences); X264_DELETE(m_recentlyUsed); @@ -757,18 +764,18 @@ void MainWindow::init(void) } updateLabelPos(); - - const QStringList arguments = x264_arguments(); + const MUtils::OS::ArgumentMap &arguments = MUtils::OS::arguments(); //--------------------------------------- // Create the IPC listener thread //--------------------------------------- - if(m_ipc->isInitialized()) - { - connect(m_ipc, SIGNAL(receivedCommand(int,QStringList,quint32)), this, SLOT(handleCommand(int,QStringList,quint32)), Qt::QueuedConnection); - m_ipc->startListening(); - } + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + //if(m_ipc->isInitialized()) + //{ + // connect(m_ipc, SIGNAL(receivedCommand(int,QStringList,quint32)), this, SLOT(handleCommand(int,QStringList,quint32)), Qt::QueuedConnection); + // m_ipc->startListening(); + //} //--------------------------------------- // Check required binaries @@ -869,14 +876,14 @@ void MainWindow::init(void) } //Skip version check (not recommended!) - if(CLIParser::checkFlag(CLI_PARAM_SKIP_VERSION_CHECK, arguments)) + if(arguments.contains(CLI_PARAM_SKIP_VERSION_CHECK)) { qWarning("Version checks are disabled now, you have been warned!\n"); m_preferences->setSkipVersionTest(true); } //Don't abort encoding process on timeout (not recommended!) - if(CLIParser::checkFlag(CLI_PARAM_NO_DEADLOCK, arguments)) + if(arguments.contains(CLI_PARAM_NO_DEADLOCK)) { qWarning("Deadlock detection disabled, you have been warned!\n"); m_preferences->setAbortOnTimeout(false); @@ -886,7 +893,7 @@ void MainWindow::init(void) // Check Avisynth support //--------------------------------------- - if(!CLIParser::checkFlag(CLI_PARAM_SKIP_AVS_CHECK, arguments)) + if(!arguments.contains(CLI_PARAM_SKIP_AVS_CHECK)) { qDebug("[Check for Avisynth support]"); volatile double avisynthVersion = 0.0; @@ -926,7 +933,7 @@ void MainWindow::init(void) // Check VapurSynth support //--------------------------------------- - if(!CLIParser::checkFlag(CLI_PARAM_SKIP_VPS_CHECK, arguments)) + if(!arguments.contains(CLI_PARAM_SKIP_VPS_CHECK)) { qDebug("[Check for VapourSynth support]"); QString vapoursynthPath; @@ -1008,7 +1015,7 @@ void MainWindow::init(void) else if(!parseCommandLineArgs()) { //Update reminder - if(CLIParser::checkFlag(CLI_PARAM_FIRST_RUN, arguments)) + if(arguments.contains(CLI_PARAM_FIRST_RUN)) { qWarning("First run -> resetting update check now!"); m_recentlyUsed->setLastUpdateCheck(0); @@ -1605,41 +1612,46 @@ void MainWindow::updateTaskbar(JobStatus status, const QIcon &icon) */ bool MainWindow::parseCommandLineArgs(void) { - bool bCommandAccepted = false; - unsigned int flags = 0; + const MUtils::OS::ArgumentMap &args = MUtils::OS::arguments(); - //Initialize command-line parser - CLIParser parser(x264_arguments()); - int identifier; - QStringList options; + quint32 flags = 0; + bool commandSent = false; - //Process all command-line arguments - while(parser.nextOption(identifier, &options)) + //Handle flags + if(args.contains(CLI_PARAM_FORCE_START)) { - switch(identifier) - { - case CLI_PARAM_ADD_FILE: - handleCommand(IPC_OPCODE_ADD_FILE, options, flags); - bCommandAccepted = true; - break; - case CLI_PARAM_ADD_JOB: - handleCommand(IPC_OPCODE_ADD_JOB, options, flags); - bCommandAccepted = true; - break; - case CLI_PARAM_FORCE_START: - flags = ((flags | IPC_FLAG_FORCE_START) & (~IPC_FLAG_FORCE_ENQUEUE)); - break; - case CLI_PARAM_NO_FORCE_START: - flags = (flags & (~IPC_FLAG_FORCE_START)); - break; - case CLI_PARAM_FORCE_ENQUEUE: - flags = ((flags | IPC_FLAG_FORCE_ENQUEUE) & (~IPC_FLAG_FORCE_START)); - break; - case CLI_PARAM_NO_FORCE_ENQUEUE: - flags = (flags & (~IPC_FLAG_FORCE_ENQUEUE)); - break; - } + flags = ((flags | IPC_FLAG_FORCE_START) & (~IPC_FLAG_FORCE_ENQUEUE)); + } + if(args.contains(CLI_PARAM_FORCE_ENQUEUE)) + { + flags = ((flags | IPC_FLAG_FORCE_ENQUEUE) & (~IPC_FLAG_FORCE_START)); } - return bCommandAccepted; + //Process all command-line arguments + if(args.contains(CLI_PARAM_ADD_FILE)) + { + foreach(const QString &fileName, args.values(CLI_PARAM_ADD_FILE)) + { + handleCommand(IPC_OPCODE_ADD_FILE, QStringList() << fileName, flags); + } + commandSent = true; + } + if(args.contains(CLI_PARAM_ADD_JOB)) + { + foreach(const QString &options, args.values(CLI_PARAM_ADD_JOB)) + { + const QStringList optionValues = options.split('|', QString::SkipEmptyParts); + if(optionValues.count() == 3) + { + handleCommand(IPC_OPCODE_ADD_JOB, optionValues, flags); + } + else + { + qWarning("Invalid number of arguments for parameter \"--%s\" detected!", CLI_PARAM_ADD_JOB); + } + } + commandSent = true; + } + + return commandSent; } diff --git a/src/win_main.h b/src/win_main.h index 03129c8..f58b711 100644 --- a/src/win_main.h +++ b/src/win_main.h @@ -21,7 +21,10 @@ #pragma once +//Internal #include "global.h" + +//Qt #include class IPC; @@ -43,12 +46,21 @@ namespace Ui class MainWindow; } +namespace MUtils +{ + namespace CPUFetaures + { + struct _stuctName; + typedef struct _cpu_info_t cpu_info_t; + } +} + class MainWindow: public QMainWindow { Q_OBJECT public: - MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc); + MainWindow(const MUtils::CPUFetaures::cpu_info_t &cpuFeatures); ~MainWindow(void); protected: diff --git a/src/win_preferences.cpp b/src/win_preferences.cpp index 0542be0..4370ccb 100644 --- a/src/win_preferences.cpp +++ b/src/win_preferences.cpp @@ -20,7 +20,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_preferences.h" -#include "uic_win_preferences.h" +#include "UIC_win_preferences.h" #include "global.h" #include "model_preferences.h" diff --git a/src/win_updater.cpp b/src/win_updater.cpp index 86ec9b7..4d62781 100644 --- a/src/win_updater.cpp +++ b/src/win_updater.cpp @@ -20,7 +20,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "win_updater.h" -#include "uic_win_updater.h" +#include "UIC_win_updater.h" #include "global.h" #include "model_sysinfo.h" diff --git a/src/zero.cpp b/src/zero.cpp new file mode 100644 index 0000000..788944f --- /dev/null +++ b/src/zero.cpp @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////////////////// +// Simple x264 Launcher +// Copyright (C) 2004-2015 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +//MUtils +#include + +//Qt +#include + +/////////////////////////////////////////////////////////////////////////////// +// GLOBAL FUNCTIONS +/////////////////////////////////////////////////////////////////////////////// + +static size_t x264_entry_check(void); +static size_t g_x264_entry_check_result = x264_entry_check(); +static size_t g_x264_entry_check_flag = 0x789E09B2; + +/* + * Entry point checks + */ +static size_t x264_entry_check(void) +{ + volatile size_t retVal = 0xA199B5AF; + if(g_x264_entry_check_flag != 0x8761F64D) + { + MUtils::OS::fatal_exit(L"Application initialization has failed, take care!"); + } + return retVal; +} + +/* + * Function declarations + */ +void x264_initialization(void); +extern "C" int mainCRTStartup(void); + +/* + * Application entry point (runs before static initializers) + */ +extern "C" int x264_entry_point(void) +{ + if(g_x264_entry_check_flag != 0x789E09B2) + { + MUtils::OS::fatal_exit(L"Application initialization has failed, take care!"); + } + + //Make sure we will pass the check + g_x264_entry_check_flag = ~g_x264_entry_check_flag; + + //Call global initialization function + x264_initialization(); + + //Now initialize the C Runtime library! + return mainCRTStartup(); +} diff --git a/x264_launcher_MSVC2013.sln b/x264_launcher_MSVC2013.sln index ae0890a..c131296 100644 --- a/x264_launcher_MSVC2013.sln +++ b/x264_launcher_MSVC2013.sln @@ -1,20 +1,33 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 +VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x264_launcher", "x264_launcher_MSVC2013.vcxproj", "{563D953B-CBC3-4C75-AFC2-5BD87531C332}" + ProjectSection(ProjectDependencies) = postProject + {55405FE1-149F-434C-9D72-4B64348D2A08} = {55405FE1-149F-434C-9D72-4B64348D2A08} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MUtilities", "..\MUtilities\MUtilities_VS2013.vcxproj", "{55405FE1-149F-434C-9D72-4B64348D2A08}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + Release_Static|Win32 = Release_Static|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {563D953B-CBC3-4C75-AFC2-5BD87531C332}.Debug|Win32.ActiveCfg = Debug|Win32 {563D953B-CBC3-4C75-AFC2-5BD87531C332}.Debug|Win32.Build.0 = Debug|Win32 + {563D953B-CBC3-4C75-AFC2-5BD87531C332}.Release_Static|Win32.ActiveCfg = Release|Win32 {563D953B-CBC3-4C75-AFC2-5BD87531C332}.Release|Win32.ActiveCfg = Release|Win32 {563D953B-CBC3-4C75-AFC2-5BD87531C332}.Release|Win32.Build.0 = Release|Win32 + {55405FE1-149F-434C-9D72-4B64348D2A08}.Debug|Win32.ActiveCfg = Debug|Win32 + {55405FE1-149F-434C-9D72-4B64348D2A08}.Debug|Win32.Build.0 = Debug|Win32 + {55405FE1-149F-434C-9D72-4B64348D2A08}.Release_Static|Win32.ActiveCfg = Release_Static|Win32 + {55405FE1-149F-434C-9D72-4B64348D2A08}.Release_Static|Win32.Build.0 = Release_Static|Win32 + {55405FE1-149F-434C-9D72-4B64348D2A08}.Release|Win32.ActiveCfg = Release|Win32 + {55405FE1-149F-434C-9D72-4B64348D2A08}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/x264_launcher_MSVC2013.vcxproj b/x264_launcher_MSVC2013.vcxproj index 25ffc67..b58c70d 100644 --- a/x264_launcher_MSVC2013.vcxproj +++ b/x264_launcher_MSVC2013.vcxproj @@ -41,13 +41,13 @@ - $(SolutionDir)bin\$(Configuration)\ - $(SolutionDir)obj\$(Configuration)\ + $(SolutionDir)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\obj\$(Platform)\$(Configuration)\$(ProjectName)\ false - $(SolutionDir)bin\$(Configuration)\ - $(SolutionDir)obj\$(Configuration)\ + $(SolutionDir)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\obj\$(Platform)\$(Configuration)\$(ProjectName)\ @@ -56,11 +56,11 @@ Level3 Disabled WIN32;_DEBUG;QT_DEBUG;QT_DLL;QT_GUI_LIB;%(PreprocessorDefinitions) - $(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtTest;$(SolutionDir)tmp\uic;$(SolutionDir)etc\vld\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\..\MUtilities\include;$(SolutionDir)\tmp\$(ProjectName);$(SolutionDir)\etc\vld\include;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtTest;%(AdditionalIncludeDirectories) NoExtensions - false false Disabled + true Windows @@ -70,7 +70,7 @@ x264_entry_point - del /S /Q "$(TargetDir)\*.dll" + del /S /Q "$(TargetDir)\Qt*.dll" rmdir /S /Q "$(TargetDir)\toolset" rmdir /S /Q "$(TargetDir)\imageformats" @@ -116,7 +116,7 @@ copy /Y "$(SolutionDir)etc\vld\lib\$(Platform)\$(Configuration)\*.manifest" "$(T true true WIN32;NDEBUG;QT_NO_DEBUG;QT_DLL;QT_GUI_LIB;%(PreprocessorDefinitions) - $(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtTest;$(SolutionDir)tmp\uic;$(SolutionDir)etc\vld\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\..\MUtilities\include;$(SolutionDir)\tmp\$(ProjectName);$(SolutionDir)\etc\vld\include;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtTest;%(AdditionalIncludeDirectories) AnySuitable Speed true @@ -128,7 +128,7 @@ copy /Y "$(SolutionDir)etc\vld\lib\$(Platform)\$(Configuration)\*.manifest" "$(T false true false - false + true Windows @@ -156,7 +156,7 @@ copy /Y "$(SolutionDir)etc\vld\lib\$(Platform)\$(Configuration)\*.manifest" "$(T - del /S /Q "$(TargetDir)\*.dll" + del /S /Q "$(TargetDir)\Qt*.dll" rmdir /S /Q "$(TargetDir)\toolset" rmdir /S /Q "$(TargetDir)\imageformats" mkdir "$(TargetDir)\toolset\x86" @@ -183,136 +183,151 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats" Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\uic\uic_%(Filename).h" "%(FullPath)" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - UIC "$(SolutionDir)tmp\uic\uic_%(Filename).h" - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) - $(SolutionDir)tmp\uic\uic_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + UIC "$(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h" + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\UIC_%(Filename).h;%(Outputs) Document - "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\qrc\qrc_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" - RCC "$(SolutionDir)tmp\qrc\qrc_%(Filename).cpp" - $(SolutionDir)tmp\qrc\qrc_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\qrc\qrc_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" - RCC "$(SolutionDir)tmp\qrc\qrc_%(Filename).cpp" - $(SolutionDir)tmp\qrc\qrc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + RCC "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + RCC "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp;%(Outputs) Designer + + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + + + + + + + + - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) @@ -326,37 +341,29 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - - - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) @@ -370,58 +377,55 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" "%(FullPath)" - MOC "$(SolutionDir)tmp\moc\moc_%(Filename).cpp" - $(SolutionDir)tmp\moc\moc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp" + $(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs) - - - @@ -438,6 +442,7 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats" + @@ -448,23 +453,24 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats" - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -475,6 +481,11 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats" + + + {55405fe1-149f-434c-9d72-4b64348d2a08} + + diff --git a/x264_launcher_MSVC2013.vcxproj.filters b/x264_launcher_MSVC2013.vcxproj.filters index 5fe74ca..e4a89b2 100644 --- a/x264_launcher_MSVC2013.vcxproj.filters +++ b/x264_launcher_MSVC2013.vcxproj.filters @@ -108,6 +108,30 @@ Header Files + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Header Files + @@ -119,66 +143,36 @@ Source Files - - Generated Files - - - Generated Files - Source Files - - Generated Files - Source Files - - Generated Files - Source Files - - Generated Files - Source Files - - Generated Files - Source Files Source Files - - Generated Files - Source Files - - Generated Files - Source Files Source Files - - Generated Files - Source Files - - Generated Files - Source Files @@ -188,21 +182,12 @@ Source Files - - Generated Files - Source Files Source Files - - Generated Files - - - Source Files\3rd Party - Source Files @@ -212,18 +197,6 @@ Source Files - - Generated Files - - - Source Files - - - Generated Files - - - Source Files - Source Files @@ -248,15 +221,9 @@ Source Files - - Generated Files - Source Files - - Generated Files - Source Files @@ -266,7 +233,61 @@ Source Files - + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Source Files + + + Source Files + + + Generated Files + + Generated Files @@ -328,9 +349,6 @@ Header Files - - Header Files - Header Files