From 4663c724ef67e07259a2dcbf7009bc8328fcaa7a Mon Sep 17 00:00:00 2001 From: lordmulder Date: Sat, 4 Feb 2012 01:12:21 +0100 Subject: [PATCH] Added option to shutdown the computer when all jobs are completed. --- gui/win_addJob.ui | 63 ++++++++++++++++++++ gui/win_help.ui | 2 +- gui/win_preferences.ui | 110 +++++++++++++++++++++++++++++----- res/buttons/power_off.png | Bin 0 -> 715 bytes res/buttons/power_on.png | Bin 0 -> 718 bytes res/resources.qrc | 2 + res/sounds/beep.wav | Bin 0 -> 8864 bytes res/sounds/beep2.wav | Bin 0 -> 70604 bytes res/sounds/shutdown.wav | Bin 0 -> 47276 bytes src/global.cpp | 27 +++++++++ src/global.h | 1 + src/model_jobList.cpp | 25 +++++++- src/resource.h | Bin 914 -> 1184 bytes src/thread_encode.cpp | 17 +++--- src/thread_encode.h | 11 ++-- src/win_main.cpp | 120 +++++++++++++++++++++++++++----------- src/win_main.h | 3 +- src/win_preferences.cpp | 44 ++++++++++++-- src/win_preferences.h | 2 + x264_launcher.rc | Bin 3256 -> 3914 bytes x264_launcher.vcxproj | 4 +- 21 files changed, 359 insertions(+), 72 deletions(-) create mode 100644 res/buttons/power_off.png create mode 100644 res/buttons/power_on.png create mode 100644 res/sounds/beep.wav create mode 100644 res/sounds/beep2.wav create mode 100644 res/sounds/shutdown.wav diff --git a/gui/win_addJob.ui b/gui/win_addJob.ui index 280af40..bb877d2 100644 --- a/gui/win_addJob.ui +++ b/gui/win_addJob.ui @@ -49,6 +49,9 @@ + + Select the source video file. This can be an Avisynth script or any type of video file supported by FFmpegSource2 (libavformat). + Source Media/Avisynth File: @@ -58,6 +61,9 @@ + + Select the source video file. This can be an Avisynth script or any type of video file supported by FFmpegSource2 (libavformat). + true @@ -100,6 +106,9 @@ + + Select the output H.264/AVC file. This can be a Matroska (MKV,) MPEG-4 Part-14 (MP4) or "raw" H.264 file. + Output AVC/H.264 File: @@ -109,6 +118,9 @@ + + Select the output H.264/AVC file. This can be a Matroska (MKV,) MPEG-4 Part-14 (MP4) or "raw" H.264 file. + true @@ -157,6 +169,9 @@ + + Here you can load a user-defined template that you have saved before. Use the "Save" button to save your current configuration to a new profile. + Template: @@ -176,6 +191,9 @@ 0 + + Here you can load a user-defined template that you have saved before. Use the "Save" button to save your current configuration to a new profile. + -1 @@ -281,6 +299,9 @@ + + Select the x264 rate-control mode. Use 'CRF' mode to hit a specific level of quality or use '2-Pass' mode to hit a specific file size. + Mode: @@ -288,6 +309,9 @@ + + Select the x264 rate-control mode. Use 'CRF' mode to hit a specific level of quality or use '2-Pass' mode to hit a specific file size. + 0 @@ -335,6 +359,9 @@ + + Select the quantizer or CRF value. Smaller value means better quality, but bigger file. Higher value means smaller file, but lower quality. A value of '0' triggers lossless mode. + Quantizer/CRF: @@ -342,6 +369,9 @@ + + Select the quantizer or CRF value. Smaller value means better quality, but bigger file. Higher value means smaller file, but lower quality. A value of '0' triggers lossless mode. + 52 @@ -372,6 +402,9 @@ + + Select the target average(!) bitrate, in kilobit/sec. Higher value means better quality, but bigger file. Lower value means smaller file, but lower quality. + Target Bitrate (kbps): @@ -379,6 +412,9 @@ + + Select the target average(!) bitrate, in kilobit/sec. Higher value means better quality, but bigger file. Lower value means smaller file, but lower quality. + 100 @@ -441,6 +477,9 @@ + + This option controls the "Speed -vs- Quality" trade-off. Use a slower preset to improve the quality at the same bitrate (file size). Use a faster preset to save encoding time, at the cost of reduced quality. + Preset: @@ -448,6 +487,9 @@ + + This option controls the "Speed -vs- Quality" trade-off. Use a slower preset to improve the quality at the same bitrate (file size). Use a faster preset to save encoding time, at the cost of reduced quality. + 5 @@ -525,6 +567,9 @@ + + This option tweaks x264 for a specific type of source/content. For real-life footage, CGI and most other stuff, use the "Film" option. For anime/cartoon use the "Animation" option. + Tuning: @@ -532,6 +577,9 @@ + + This option tweaks x264 for a specific type of source/content. For real-life footage, CGI and most other stuff, use the "Film" option. For anime/cartoon use the "Animation" option. + 1 @@ -609,6 +657,9 @@ + + This option can be used to enforce the restrictions of a specific H.264/AVC Proifle, though it won't force a higher profile than needed. Use "Auto" for an unrestricted encode. + Profile: @@ -616,6 +667,9 @@ + + This option can be used to enforce the restrictions of a specific H.264/AVC Proifle, though it won't force a higher profile than needed. Use "Auto" for an unrestricted encode. + 0 @@ -710,6 +764,9 @@ + + All command-line parameters you enter here will be passed to x264 unmodified and unchecked. Some parameters are forbidden, as they are reserved for the GUI. + Custom x264 Parameters: @@ -838,6 +895,9 @@ PointingHandCursor + + Click here to show a detailed list of all command-line options available in your build of x264! + Show Help Screen @@ -847,6 +907,9 @@ + + All command-line parameters you enter here will be passed to x264 unmodified and unchecked. Some parameters are forbidden, as they are reserved for the GUI. + You can enter custom command-line options here... diff --git a/gui/win_help.ui b/gui/win_help.ui index 5de3565..b59b7f0 100644 --- a/gui/win_help.ui +++ b/gui/win_help.ui @@ -6,7 +6,7 @@ 0 0 - 784 + 800 384 diff --git a/gui/win_preferences.ui b/gui/win_preferences.ui index 375b675..16091a3 100644 --- a/gui/win_preferences.ui +++ b/gui/win_preferences.ui @@ -9,8 +9,8 @@ 0 0 - 375 - 171 + 378 + 193 @@ -34,17 +34,20 @@ - + false + + If the specified number of jobs (or even more) is already running, the next one will NOT be launched yet. + Maximum number of running jobs: - + false @@ -55,6 +58,9 @@ 0 + + If the specified number of jobs (or even more) is already running, the next one will NOT be launched yet. + 1 @@ -63,20 +69,50 @@ - - + + Qt::Horizontal - 1024 + 0 20 - + + + + + + + + + + + Automatically launch next job when a running job completes + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 12 + 20 + + + + + Qt::Horizontal @@ -92,26 +128,68 @@ - - + + - Qt::Horizontal + Qt::Vertical + + + QSizePolicy::Fixed - 0 - 20 + 20 + 8 - - + + - Automatically launch next job when a running job completes + + + + + Shutdown computer as soon as the last job has completed + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 12 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 12 + + + + diff --git a/res/buttons/power_off.png b/res/buttons/power_off.png new file mode 100644 index 0000000000000000000000000000000000000000..27661dc1a1145c1fa2d4dcce95d462a2216a9d86 GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z25un`X1sK_?hjBJ4MLPUT6&cnmGprA@-=xB@U59grspw8shFw;Yd(;^AYO@{EW;+~d zf4Cw4h@1M6^nhdP49AT5PiQip&|*5_Aa_!O;gk;RDP6Wxef6hZRnD05pD`6U>mYYN z*72f;`jwV~Ytc5>V(o91#oo#exLuWWw><9dr22b1)<0~^f7n*=zTGX%@c-Q!!@M;d2KhkmF?hQAxvXpSG4C+o+ixXu*g^KBhw?c;y{i%W zS0kBs8t@*lQatCQb0v&%iyqr{Bi=ohGRNGsE(9B1i88qs%eK{sZ?~oHg)q~ru?!n@ z7`Es#Y}aGhsmHL-fZ>1v!(l^)qlOHpj2X@tGoA(_6Q+HJOoxq`&zLfwF=N?gz;WE1 zbGs?e4s-sk7W_Lb`Onz#pSKs-YAJBsR^YsY@JR=egZ3ilofR(mDxLN*ycB74E!yNt zjQx=W`*X?mH&X*H6a?HU&cD==|EQmSXS|6=3(H=EW!+q?e#{{62{ z?f-P<{@17Xe>}ba^C>VuCiiYg1csnWNswPK129TBbanOgOiWBo*F(WBAb1P`PkL5qrKm|;Z`d?sO#Wi|?`zE_DK<0fC+$K(G4E4qncI1P zO`6zal8`8W-Lft-Anzz%pok8cwswJ-_9`AU$*wUx< sb*sqCGf$jnMBcO06z$(W&EO;ZoB4X_3;)Hh0eX+Y)78&qol`;+0Kv2@S^xk5 literal 0 HcmV?d00001 diff --git a/res/resources.qrc b/res/resources.qrc index 9c2b219..6f13024 100644 --- a/res/resources.qrc +++ b/res/resources.qrc @@ -24,6 +24,8 @@ buttons/pause.png buttons/play.png buttons/play_big.png + buttons/power_off.png + buttons/power_on.png buttons/suspended.png buttons/trash.png buttons/world_link.png diff --git a/res/sounds/beep.wav b/res/sounds/beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..2c740dd7a9af5e0f7d7f9262ecf9ce195fdf76d2 GIT binary patch literal 8864 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

?JTIkFDT1ES7k*xY5*7jDFH*gHrJ_aaT7S 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%0DZoUwclCW*>$--HVPa{mBxt(sky@*$( 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

)AN!Pa`G5hrM}}{A?#=385jnoCYb^2&- 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 bNACddIQ4*+#EIiRZna5yDFyvD`f>jU^KoJy literal 0 HcmV?d00001 diff --git a/res/sounds/shutdown.wav b/res/sounds/shutdown.wav new file mode 100644 index 0000000000000000000000000000000000000000..6bfb8d6d345fc9ff87cca2aba5ff242d713932cc GIT binary patch literal 47276 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%0Df9*6Y|6!8E%eyR+C$Kr4ANFPu(q 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 ZTij(QWCHAR(message)), timeout, forceShutdown ? TRUE : FALSE, FALSE, reason); + } + } + } + + return false; +} + /* * Check for debugger (detect routine) */ diff --git a/src/global.h b/src/global.h index cf1ac03..84cdd76 100644 --- a/src/global.h +++ b/src/global.h @@ -102,5 +102,6 @@ const char *x264_version_arch(void); void x264_init_console(int argc, char* argv[]); bool x264_init_qt(int argc, char* argv[]); x264_cpu_t x264_detect_cpu_features(int argc, char **argv); +bool x264_shutdown_computer(const QString &message, const unsigned long timeout, const bool forceShutdown); SIZE_T x264_dbg_private_bytes(void); void x264_finalization(void); diff --git a/src/model_jobList.cpp b/src/model_jobList.cpp index 21a6247..38d2544 100644 --- a/src/model_jobList.cpp +++ b/src/model_jobList.cpp @@ -22,6 +22,7 @@ #include "model_jobList.h" #include "global.h" #include "thread_encode.h" +#include "model_options.h" #include #include @@ -227,9 +228,27 @@ QModelIndex JobListModel::insertJob(EncodeThread *thread) { return QModelIndex(); } - + + QString config = "N/A"; + + switch(thread->options()->rcMode()) + { + case OptionsModel::RCMode_CQ: + config = QString("CQ@%1").arg(QString::number(thread->options()->quantizer())); + break; + case OptionsModel::RCMode_CRF: + config = QString("CRF@%1").arg(QString::number(thread->options()->quantizer())); + break; + case OptionsModel::RCMode_2Pass: + config = QString("2Pass@%1").arg(QString::number(thread->options()->bitrate())); + break; + case OptionsModel::RCMode_ABR: + config = QString("ABR@%1").arg(QString::number(thread->options()->bitrate())); + break; + } + int n = 2; - QString jobName = QFileInfo(thread->sourceFileName()).completeBaseName(); + QString jobName = QString("%1 [%2]").arg(QFileInfo(thread->sourceFileName()).completeBaseName(), config); forever { @@ -244,7 +263,7 @@ QModelIndex JobListModel::insertJob(EncodeThread *thread) } if(!unique) { - jobName = QString("%1 (%2)").arg(QFileInfo(thread->sourceFileName()).completeBaseName(), QString::number(n++)); + jobName = QString("%1 (%2) [%3]").arg(QFileInfo(thread->sourceFileName()).completeBaseName(), QString::number(n++), config); continue; } break; diff --git a/src/resource.h b/src/resource.h index ca52f9c307f4d12ba3ff19496daf9479b0885e44..50c069483d2f2b3eb89e9d4a2d6981efdd9d6f7a 100644 GIT binary patch delta 124 zcmbQlzJPOs9^+&QW&uG@1{a1PhIoc>21kZ423H2d$&8H3lLZ)gCWkOdVaOW6WLXUv n3>b_jo|oiB)@+O-ZL(RDQJ;~~bn<^j&B+g#ST?sY@h}1atKAq9 delta 21 ccmZ3$If;FP9^+;kCN0LvO^jljYnW9S0Y)hW!2kdN diff --git a/src/thread_encode.cpp b/src/thread_encode.cpp index f21421f..60cd7d9 100644 --- a/src/thread_encode.cpp +++ b/src/thread_encode.cpp @@ -47,11 +47,13 @@ QMutex EncodeThread::m_mutex_startProcess; { \ log("\nPROCESS ABORTED BY USER !!!"); \ setStatus(JobStatus_Aborted); \ + if(QFileInfo(indexFile).exists()) QFile::remove(indexFile); \ return; \ } \ else if(!(OK_FLAG)) \ { \ setStatus(JobStatus_Failed); \ + if(QFileInfo(indexFile).exists()) QFile::remove(indexFile); \ return; \ } \ } @@ -178,6 +180,7 @@ void EncodeThread::encode(void) //Use Avisynth? const bool usePipe = (QFileInfo(m_sourceFileName).suffix().compare("avs", Qt::CaseInsensitive) == 0); + const QString indexFile = QString("%1/%2.ffindex").arg(QDir::tempPath(), m_jobId.toString()); //Checking x264 version log(tr("\n--- CHECK VERSION ---\n")); @@ -242,27 +245,28 @@ void EncodeThread::encode(void) } log(tr("\n--- PASS 1 ---\n")); - ok = runEncodingPass(m_x64, usePipe, frames, 1, passLogFile); + ok = runEncodingPass(m_x64, usePipe, frames, indexFile, 1, passLogFile); CHECK_STATUS(m_abort, ok); log(tr("\n--- PASS 2 ---\n")); - ok = runEncodingPass(m_x64, usePipe, frames, 2, passLogFile); + ok = runEncodingPass(m_x64, usePipe, frames, indexFile, 2, passLogFile); CHECK_STATUS(m_abort, ok); } else { log(tr("\n--- ENCODING ---\n")); - ok = runEncodingPass(m_x64, usePipe, frames); + ok = runEncodingPass(m_x64, usePipe, frames, indexFile); CHECK_STATUS(m_abort, ok); } log(tr("\n--- DONE ---\n")); + if(QFileInfo(indexFile).exists()) QFile::remove(indexFile); int timePassed = startTime.secsTo(QDateTime::currentDateTime()); log(tr("Job finished at %1, %2. Process took %3 minutes, %4 seconds.").arg(QDate::currentDate().toString(Qt::ISODate), QTime::currentTime().toString( Qt::ISODate), QString::number(timePassed / 60), QString::number(timePassed % 60))); setStatus(JobStatus_Completed); } -bool EncodeThread::runEncodingPass(bool x64, bool usePipe, unsigned int frames, int pass, const QString &passLogFile) +bool EncodeThread::runEncodingPass(bool x64, bool usePipe, unsigned int frames, const QString &indexFile, int pass, const QString &passLogFile) { QProcess processEncode, processAvisynth; @@ -280,7 +284,7 @@ bool EncodeThread::runEncodingPass(bool x64, bool usePipe, unsigned int frames, } } - QStringList cmdLine_Encode = buildCommandLine(usePipe, frames, pass, passLogFile); + QStringList cmdLine_Encode = buildCommandLine(usePipe, frames, indexFile, pass, passLogFile); log("Creating x264 process:"); if(!startProcess(processEncode, QString("%1/%2.exe").arg(m_binDir, x64 ? "x264_x64" : "x264"), cmdLine_Encode)) @@ -458,7 +462,7 @@ bool EncodeThread::runEncodingPass(bool x64, bool usePipe, unsigned int frames, return true; } -QStringList EncodeThread::buildCommandLine(bool usePipe, unsigned int frames, int pass, const QString &passLogFile) +QStringList EncodeThread::buildCommandLine(bool usePipe, unsigned int frames, const QString &indexFile, int pass, const QString &passLogFile) { QStringList cmdLine; @@ -514,7 +518,6 @@ QStringList EncodeThread::buildCommandLine(bool usePipe, unsigned int frames, in } else { - QString indexFile = QString("%1/%2.ffindex").arg(QDir::tempPath(), m_jobId.toString()); cmdLine << "--index" << QDir::toNativeSeparators(indexFile); cmdLine << QDir::toNativeSeparators(m_sourceFileName); } diff --git a/src/thread_encode.h b/src/thread_encode.h index 3526947..5cd3b7d 100644 --- a/src/thread_encode.h +++ b/src/thread_encode.h @@ -57,9 +57,10 @@ public: ~EncodeThread(void); QUuid getId(void) { return this->m_jobId; }; - const QString &sourceFileName(void) { return this->m_sourceFileName; }; - const QString &outputFileName(void) { return this->m_outputFileName; }; - + const QString &sourceFileName(void) { return this->m_sourceFileName; } + const QString &outputFileName(void) { return this->m_outputFileName; } + const OptionsModel *options(void) { return m_options; } + void pauseJob(void) { m_pause = true; @@ -108,8 +109,8 @@ protected: //Encode functions void encode(void); - bool runEncodingPass(bool x64, bool usePipe, unsigned int frames, int pass = 0, const QString &passLogFile = QString()); - QStringList buildCommandLine(bool usePipe, unsigned int frames, int pass = 0, const QString &passLogFile = QString()); + bool runEncodingPass(bool x64, bool usePipe, unsigned int frames, const QString &indexFile, int pass = 0, const QString &passLogFile = QString()); + QStringList buildCommandLine(bool usePipe, unsigned int frames, const QString &indexFile, int pass = 0, const QString &passLogFile = QString()); unsigned int checkVersionX264(bool x64, bool &modified); unsigned int checkVersionAvs2yuv(void); bool checkProperties(unsigned int &frames); diff --git a/src/win_main.cpp b/src/win_main.cpp index df5493b..e6e7190 100644 --- a/src/win_main.cpp +++ b/src/win_main.cpp @@ -26,6 +26,7 @@ #include "model_options.h" #include "win_addJob.h" #include "win_preferences.h" +#include "resource.h" #include #include @@ -36,8 +37,9 @@ #include #include #include +#include -//#include +#include const char *home_url = "http://mulder.brhack.net/"; @@ -154,13 +156,12 @@ void MainWindow::addButtonPressed(const QString &filePath, bool *ok) if(ok) *ok = false; AddJobDialog *addDialog = new AddJobDialog(this, m_options, m_x64supported); - addDialog->setRunImmediately(countPendingJobs() < m_preferences.maxRunningJobCount); + addDialog->setRunImmediately(countRunningJobs() < (m_preferences.autoRunNextJob ? m_preferences.maxRunningJobCount : 1)); if(!filePath.isEmpty()) addDialog->setSourceFile(filePath); + int result = addDialog->exec(); - if(result == QDialog::Accepted) { - EncodeThread *thrd = new EncodeThread ( addDialog->sourceFile(), @@ -270,15 +271,16 @@ void MainWindow::jobChangedData(const QModelIndex &topLeft, const QModelIndex & { for(int i = topLeft.row(); i <= bottomRight.row(); i++) { - EncodeThread::JobStatus status = m_jobList->getJobStatus(m_jobList->index(i, 0, QModelIndex())); + EncodeThread::JobStatus status = m_jobList->getJobStatus(m_jobList->index(i, 0, QModelIndex())); if(i == selected) { qDebug("Current job changed status!"); updateButtons(status); } - if((status == EncodeThread::JobStatus_Completed || status == EncodeThread::JobStatus_Failed) && m_preferences.autoRunNextJob) + if((status == EncodeThread::JobStatus_Completed) || (status == EncodeThread::JobStatus_Failed)) { - QTimer::singleShot(0, this, SLOT(launchNextJob())); + if(m_preferences.autoRunNextJob) QTimer::singleShot(0, this, SLOT(launchNextJob())); + if(m_preferences.shutdownComputer) QTimer::singleShot(0, this, SLOT(shutdownComputer())); } } } @@ -325,7 +327,7 @@ void MainWindow::showAbout(void) forever { - int ret = QMessageBox::information(this, tr("About..."), text.replace("-", "−"), tr("About x264"), tr("About Qt"), tr("Close")); + int ret = QMessageBox::information(this, tr("About..."), text.replace("-", "−"), tr("About x264"), tr("About Qt"), tr("Close"), 0, 2); switch(ret) { @@ -367,44 +369,96 @@ void MainWindow::showPreferences(void) void MainWindow::launchNextJob(void) { - const int rows = m_jobList->rowCount(QModelIndex()); - unsigned int running = countRunningJobs(); + qDebug("launchNextJob(void)"); - if(running >= m_preferences.maxRunningJobCount) + + const int rows = m_jobList->rowCount(QModelIndex()); + + if(countRunningJobs() >= m_preferences.maxRunningJobCount) { - qWarning("Still have too many jobs running, won't launch next one yet!"); + qDebug("Still have too many jobs running, won't launch next one yet!"); return; } - bool first = true; - while(running < m_preferences.maxRunningJobCount) + int startIdx= jobsView->currentIndex().isValid() ? qBound(0, jobsView->currentIndex().row(), rows-1) : 0; + + for(int i = 0; i < rows; i++) { - bool ok = false; - for(int i = 0; i < rows; i++) + int currentIdx = (i + startIdx) % rows; + EncodeThread::JobStatus status = m_jobList->getJobStatus(m_jobList->index(currentIdx, 0, QModelIndex())); + if(status == EncodeThread::JobStatus_Enqueued) { - EncodeThread::JobStatus status = m_jobList->getJobStatus(m_jobList->index(i, 0, QModelIndex())); - if(status == EncodeThread::JobStatus_Enqueued) + if(m_jobList->startJob(m_jobList->index(currentIdx, 0, QModelIndex()))) { - if(m_jobList->startJob(m_jobList->index(i, 0, QModelIndex()))) - { - if(first) - { - first = false; - jobsView->selectRow(i); - } - running++; - ok = true; - qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - break; - } + jobsView->selectRow(currentIdx); + return; } } + } - if(!ok) + qWarning("No enqueued jobs left!"); +} + +void MainWindow::shutdownComputer(void) +{ + qDebug("shutdownComputer(void)"); + + if(countPendingJobs() > 0) + { + qDebug("Still have pending jobs, won't shutdown yet!"); + return; + } + + const int iTimeout = 30; + const Qt::WindowFlags flags = Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint; + const QString text = QString("%1%2%1").arg(QString().fill(' ', 18), tr("Warning: Computer will shutdown in %1 seconds...")); + + qWarning("Initiating shutdown sequence!"); + + QProgressDialog progressDialog(text.arg(iTimeout), tr("Cancel Shutdown"), 0, iTimeout + 1, this, flags); + QPushButton *cancelButton = new QPushButton(tr("Cancel Shutdown"), &progressDialog); + cancelButton->setIcon(QIcon(":/buttons/power_on.png")); + progressDialog.setModal(true); + progressDialog.setAutoClose(false); + progressDialog.setAutoReset(false); + progressDialog.setWindowIcon(QIcon(":/buttons/power_off.png")); + progressDialog.setWindowTitle(windowTitle()); + progressDialog.setCancelButton(cancelButton); + progressDialog.show(); + + QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + QApplication::setOverrideCursor(Qt::WaitCursor); + PlaySound(MAKEINTRESOURCE(IDR_WAVE1), GetModuleHandle(NULL), SND_RESOURCE | SND_SYNC); + QApplication::restoreOverrideCursor(); + + QTimer timer; + timer.setInterval(1000); + timer.start(); + + QEventLoop eventLoop(this); + connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); + connect(&progressDialog, SIGNAL(canceled()), &eventLoop, SLOT(quit())); + + for(int i = 1; i <= iTimeout; i++) + { + eventLoop.exec(); + if(progressDialog.wasCanceled()) { - qWarning("No enqueued jobs left!"); - break; + progressDialog.close(); + return; } + progressDialog.setValue(i+1); + progressDialog.setLabelText(text.arg(iTimeout-i)); + if(iTimeout-i == 3) progressDialog.setCancelButton(NULL); + QApplication::processEvents(); + PlaySound(MAKEINTRESOURCE((i < iTimeout) ? IDR_WAVE2 : IDR_WAVE3), GetModuleHandle(NULL), SND_RESOURCE | SND_SYNC); + } + + qWarning("Shutting down !!!"); + + if(x264_shutdown_computer("Simple x264 Launcher: All jobs completed, shutting down!", 10, true)) + { + qApp->closeAllWindows(); } } diff --git a/src/win_main.h b/src/win_main.h index 8fc5103..f6746e9 100644 --- a/src/win_main.h +++ b/src/win_main.h @@ -72,11 +72,12 @@ private slots: void jobSelected(const QModelIndex & current, const QModelIndex & previous); void jobChangedData(const QModelIndex &top, const QModelIndex &bottom); void jobLogExtended(const QModelIndex & parent, int start, int end); - void launchNextJob(void); + void launchNextJob(); void pauseButtonPressed(bool checked); void showAbout(void); void showPreferences(void); void showWebLink(void); + void shutdownComputer(void); void startButtonPressed(void); void updateLabel(void); }; diff --git a/src/win_preferences.cpp b/src/win_preferences.cpp index f09bf9c..e03d9bc 100644 --- a/src/win_preferences.cpp +++ b/src/win_preferences.cpp @@ -25,6 +25,7 @@ #include #include +#include PreferencesDialog::PreferencesDialog(QWidget *parent, Preferences *preferences) : @@ -32,10 +33,10 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Preferences *preferences) { setupUi(this); setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint)); - setFixedSize(size()); + setFixedSize(minimumSize()); - HMENU hMenu = GetSystemMenu((HWND) winId(), FALSE); - EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); + labelRunNextJob->installEventFilter(this); + labelShutdownComputer->installEventFilter(this); m_preferences = preferences; } @@ -46,17 +47,50 @@ PreferencesDialog::~PreferencesDialog(void) void PreferencesDialog::showEvent(QShowEvent *event) { + QDialog::showEvent(event); + while(checkRunNextJob->isChecked() != m_preferences->autoRunNextJob) { checkRunNextJob->click(); } - + while(checkShutdownComputer->isChecked() != m_preferences->shutdownComputer) + { + checkShutdownComputer->click(); + } spinBoxJobCount->setValue(m_preferences->maxRunningJobCount); } +bool PreferencesDialog::eventFilter(QObject *o, QEvent *e) +{ + if(o == labelRunNextJob && e->type() == QEvent::MouseButtonRelease) + { + QMouseEvent *mouseEvent = dynamic_cast(e); + if(mouseEvent) + { + if(qApp->widgetAt(mouseEvent->globalPos()) == labelRunNextJob) + { + checkRunNextJob->click(); + } + } + } + if(o == labelShutdownComputer && e->type() == QEvent::MouseButtonRelease) + { + QMouseEvent *mouseEvent = dynamic_cast(e); + if(mouseEvent) + { + if(qApp->widgetAt(mouseEvent->globalPos()) == labelShutdownComputer) + { + checkShutdownComputer->click(); + } + } + } + return false; +} + void PreferencesDialog::accept(void) { m_preferences->autoRunNextJob = checkRunNextJob->isChecked(); + m_preferences->shutdownComputer = checkShutdownComputer->isChecked(); m_preferences->maxRunningJobCount = spinBoxJobCount->value(); savePreferences(m_preferences); @@ -71,6 +105,7 @@ void PreferencesDialog::loadPreferences(Preferences *preferences) settings.beginGroup("preferences"); preferences->autoRunNextJob = settings.value("auto_run_next_job", QVariant(true)).toBool(); preferences->maxRunningJobCount = qBound(1U, settings.value("max_running_job_count", QVariant(1U)).toUInt(), 16U); + preferences->shutdownComputer = settings.value("shutdown_computer_on_completion", QVariant(false)).toBool(); } void PreferencesDialog::savePreferences(Preferences *preferences) @@ -80,6 +115,7 @@ void PreferencesDialog::savePreferences(Preferences *preferences) settings.beginGroup("preferences"); settings.setValue("auto_run_next_job", preferences->autoRunNextJob); + settings.setValue("shutdown_computer_on_completion", preferences->shutdownComputer); settings.setValue("max_running_job_count", preferences->maxRunningJobCount); settings.sync(); } diff --git a/src/win_preferences.h b/src/win_preferences.h index aee5e44..59e5970 100644 --- a/src/win_preferences.h +++ b/src/win_preferences.h @@ -32,6 +32,7 @@ public: { bool autoRunNextJob; unsigned int maxRunningJobCount; + bool shutdownComputer; } Preferences; @@ -44,6 +45,7 @@ public: protected: virtual void accept(void); virtual void showEvent(QShowEvent *event); + virtual bool eventFilter(QObject *o, QEvent *e); private: Preferences *m_preferences; diff --git a/x264_launcher.rc b/x264_launcher.rc index b5869ba21fe0cc913e4185a8597c871032f8c176..2c8f572e9a912884bbd906f2ab6c1c17681108f6 100644 GIT binary patch delta 285 zcmdlXc}i}>2UgBvh9ZV!h8TvJ&F@*~GEdfES~PhABcEnCgCj#2gDV3s0~don5Q1nB z_GEBj2x5q5fXN$9Hsq9Nhw^}IQ~P3ue1=knJcbm8Vvw;wG6Tpj0rK-1%7Nl~Kr)e` rj6n&jc}D2wnWLMR#E=Sv1q947MmI+pmpMiVlO_wY%Wq!BDZ~r_qbxRL delta 21 dcmX>lw?lHn2iDEMSm!WLR$!OfY{4VM3;<@32ao^& diff --git a/x264_launcher.vcxproj b/x264_launcher.vcxproj index ba56db3..134f490 100644 --- a/x264_launcher.vcxproj +++ b/x264_launcher.vcxproj @@ -60,7 +60,7 @@ Windows true $(QTDIR)\lib;%(AdditionalLibraryDirectories) - QtMaind.lib;QtCored4.lib;QtGuid4.lib;psapi.lib;%(AdditionalDependencies) + QtMaind.lib;QtCored4.lib;QtGuid4.lib;Winmm.lib;psapi.lib;%(AdditionalDependencies) @@ -88,7 +88,7 @@ true true $(QTDIR)\lib;%(AdditionalLibraryDirectories) - QtMain.lib;QtCore4.lib;QtGui4.lib;%(AdditionalDependencies) + QtMain.lib;QtCore4.lib;QtGui4.lib;Winmm.lib;%(AdditionalDependencies) UseLinkTimeCodeGeneration