diff --git a/gui/win_main.ui b/gui/win_main.ui
index e26ab73..0e1c449 100644
--- a/gui/win_main.ui
+++ b/gui/win_main.ui
@@ -403,6 +403,9 @@
+
+
+
@@ -741,6 +744,30 @@
Codecs.com Mirror
+
+
+ false
+
+
+
+ :/buttons/arrow_up.png:/buttons/arrow_up.png
+
+
+ Move Up
+
+
+
+
+ false
+
+
+
+ :/buttons/arrow_down.png:/buttons/arrow_down.png
+
+
+ Move Down
+
+
buttonAddJob
diff --git a/res/resources.qrc b/res/resources.qrc
index 04ec74c..e5be481 100644
--- a/res/resources.qrc
+++ b/res/resources.qrc
@@ -4,6 +4,8 @@
icons/movie.ico
buttons/accept.png
buttons/add.png
+ buttons/arrow_down.png
+ buttons/arrow_up.png
buttons/bomb.png
buttons/book_open.png
buttons/cancel.png
diff --git a/src/encoder_abstract.cpp b/src/encoder_abstract.cpp
index 3da8b56..d0144ad 100644
--- a/src/encoder_abstract.cpp
+++ b/src/encoder_abstract.cpp
@@ -184,7 +184,7 @@ bool AbstractEncoder::runEncodingPass(AbstractSource* pipedSource, const QString
processEncode.waitForFinished(5000);
if(processEncode.state() != QProcess::NotRunning)
{
- qWarning("x264 process still running, going to kill it!");
+ qWarning("Encoder process still running, going to kill it!");
processEncode.kill();
processEncode.waitForFinished(-1);
}
@@ -217,7 +217,8 @@ bool AbstractEncoder::runEncodingPass(AbstractSource* pipedSource, const QString
const int exitCode = processEncode.exitCode();
if((exitCode < 0) || (exitCode >= 32))
{
- log(tr("\nFATAL ERROR: The encoder process has crashed, your encode probably is *incomplete* !!!"));
+ log(tr("\nFATAL ERROR: The encoder process has *crashed* -> your encode probably is *incomplete* !!!"));
+ log(tr("Note that this indicates a bug in the current encoder, *not* in Simple x264/x265 Launcher."));
}
log(tr("\nPROCESS EXITED WITH ERROR CODE: %1").arg(QString::number(exitCode)));
}
diff --git a/src/encoder_x265.cpp b/src/encoder_x265.cpp
index d89fe4f..3113193 100644
--- a/src/encoder_x265.cpp
+++ b/src/encoder_x265.cpp
@@ -33,7 +33,7 @@
//x265 version info
static const unsigned int VERSION_X265_MINIMUM_VER = 9;
-static const unsigned int VERSION_X265_MINIMUM_REV = 53;
+static const unsigned int VERSION_X265_MINIMUM_REV = 68;
// ------------------------------------------------------------
// Helper Macros
diff --git a/src/input_filter.cpp b/src/input_filter.cpp
new file mode 100644
index 0000000..45d4733
--- /dev/null
+++ b/src/input_filter.cpp
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////////////
+// Simple x264 Launcher
+// Copyright (C) 2004-2014 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 "input_filter.h"
+
+#include "global.h"
+
+#include
+#include
+#include
+#include
+
+InputEventFilter::InputEventFilter(QWidget *target)
+:
+ m_target(target),
+ m_keyMapping(new QHash()),
+ m_mouseMapping(new QHash())
+{
+ m_target->installEventFilter(this);
+}
+
+InputEventFilter::~InputEventFilter(void)
+{
+ m_target->removeEventFilter(this);
+ X264_DELETE(m_keyMapping);
+ X264_DELETE(m_mouseMapping);
+}
+
+void InputEventFilter::addKeyFilter(const int &keyCode, const int &tag)
+{
+ m_keyMapping->insert(keyCode, tag);
+}
+
+void InputEventFilter::addMouseFilter(const int &mouseCode, const int &tag)
+{
+ m_mouseMapping->insert(mouseCode, tag);
+}
+
+bool InputEventFilter::eventFilter(QObject *obj, QEvent *event)
+{
+ if(obj == m_target)
+ {
+ if(event->type() == QEvent::KeyPress)
+ {
+ QKeyEvent *keyEvent = dynamic_cast(event);
+ if(keyEvent)
+ {
+ return eventFilter(keyEvent);
+ }
+ }
+ else if(event->type() == QEvent::MouseButtonPress)
+ {
+ QMouseEvent *mouseEvent = dynamic_cast(event);
+ if(mouseEvent)
+ {
+ return eventFilter(mouseEvent);
+ }
+ }
+ }
+ return false;
+}
+
+bool InputEventFilter::eventFilter(QKeyEvent *keyEvent)
+{
+ const int keyCode = keyEvent->key() | keyEvent->modifiers();
+ if(m_keyMapping->contains(keyCode))
+ {
+ emit keyPressed(m_keyMapping->value(keyCode));
+ return true;
+ }
+ return false;
+}
+
+bool InputEventFilter::eventFilter(QMouseEvent *mouseEvent)
+{
+ if(m_mouseMapping->contains(mouseEvent->button()))
+ {
+ emit mouseClicked(m_mouseMapping->value(mouseEvent->button()));
+ return true;
+ }
+ return false;
+}
diff --git a/src/input_filter.h b/src/input_filter.h
new file mode 100644
index 0000000..e216753
--- /dev/null
+++ b/src/input_filter.h
@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////////
+// Simple x264 Launcher
+// Copyright (C) 2004-2014 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
+
+template class QHash;
+class QKeyEvent;
+class QMouseEvent;
+
+class InputEventFilter : public QObject
+{
+ Q_OBJECT
+
+public:
+ InputEventFilter(QWidget *target);
+ ~InputEventFilter(void);
+
+ void addKeyFilter(const int &keyCode, const int &tag);
+ void addMouseFilter(const int &keyCode, const int &tag);
+
+signals:
+ void keyPressed(const int &tag);
+ void mouseClicked(const int &tag);
+
+protected:
+ bool eventFilter(QObject *obj, QEvent *event);
+ bool eventFilter(QKeyEvent *keyEvent);
+ bool eventFilter(QMouseEvent *mouseEvent);
+
+ QWidget *const m_target;
+ QHash *m_keyMapping;
+ QHash *m_mouseMapping;
+};
diff --git a/src/model_jobList.cpp b/src/model_jobList.cpp
index f265f70..57131a0 100644
--- a/src/model_jobList.cpp
+++ b/src/model_jobList.cpp
@@ -37,6 +37,8 @@ static const char *KEY_ENC_OPTIONS = "enc_options";
static const char *JOB_TEMPLATE = "job_%08x";
+#define VALID_INDEX(INDEX) ((INDEX).isValid() && ((INDEX).row() >= 0) && ((INDEX).row() < m_jobs.count()))
+
JobListModel::JobListModel(PreferencesModel *preferences)
{
m_preferences = preferences;
@@ -311,7 +313,7 @@ QModelIndex JobListModel::insertJob(EncodeThread *thread)
bool JobListModel::startJob(const QModelIndex &index)
{
- if(index.isValid() && index.row() >= 0 && index.row() < m_jobs.count())
+ if(VALID_INDEX(index))
{
QUuid id = m_jobs.at(index.row());
if(m_status.value(id) == JobStatus_Enqueued)
@@ -328,7 +330,7 @@ bool JobListModel::startJob(const QModelIndex &index)
bool JobListModel::pauseJob(const QModelIndex &index)
{
- if(index.isValid() && index.row() >= 0 && index.row() < m_jobs.count())
+ if(VALID_INDEX(index))
{
QUuid id = m_jobs.at(index.row());
JobStatus status = m_status.value(id);
@@ -346,7 +348,7 @@ bool JobListModel::pauseJob(const QModelIndex &index)
bool JobListModel::resumeJob(const QModelIndex &index)
{
- if(index.isValid() && index.row() >= 0 && index.row() < m_jobs.count())
+ if(VALID_INDEX(index))
{
QUuid id = m_jobs.at(index.row());
JobStatus status = m_status.value(id);
@@ -363,7 +365,7 @@ bool JobListModel::resumeJob(const QModelIndex &index)
bool JobListModel::abortJob(const QModelIndex &index)
{
- if(index.isValid() && index.row() >= 0 && index.row() < m_jobs.count())
+ if(VALID_INDEX(index))
{
QUuid id = m_jobs.at(index.row());
if(m_status.value(id) == JobStatus_Indexing || m_status.value(id) == JobStatus_Running ||
@@ -380,7 +382,7 @@ bool JobListModel::abortJob(const QModelIndex &index)
bool JobListModel::deleteJob(const QModelIndex &index)
{
- if(index.isValid() && index.row() >= 0 && index.row() < m_jobs.count())
+ if(VALID_INDEX(index))
{
QUuid id = m_jobs.at(index.row());
if(m_status.value(id) == JobStatus_Completed || m_status.value(id) == JobStatus_Failed ||
@@ -412,6 +414,29 @@ bool JobListModel::deleteJob(const QModelIndex &index)
return false;
}
+bool JobListModel::moveJob(const QModelIndex &index, const int &direction)
+{
+ if(VALID_INDEX(index))
+ {
+ if((direction == MOVE_UP) && (index.row() > 0))
+ {
+ beginMoveRows(QModelIndex(), index.row(), index.row(), QModelIndex(), index.row() - 1);
+ m_jobs.swap(index.row(), index.row() - 1);
+ endMoveRows();
+ return true;
+ }
+ if((direction == MOVE_DOWN) && (index.row() < m_jobs.size() - 1))
+ {
+ beginMoveRows(QModelIndex(), index.row(), index.row(), QModelIndex(), index.row() + 2);
+ m_jobs.swap(index.row(), index.row() + 1);
+ endMoveRows();
+ return true;
+ }
+ }
+
+ return false;
+}
+
LogFileModel *JobListModel::getLogFile(const QModelIndex &index)
{
if(index.isValid() && index.row() >= 0 && index.row() < m_jobs.count())
@@ -591,8 +616,16 @@ size_t JobListModel::loadQueuedJobs(const SysinfoModel *sysinfo)
return 0;
}
- size_t jobsCreated = 0;
+ const QStringList groups = settings.childGroups();
+ for(size_t i = 0; i < jobCounter; i++)
+ {
+ if(!groups.contains(QString().sprintf(JOB_TEMPLATE, i)))
+ {
+ return 0;
+ }
+ }
+ size_t jobsCreated = 0;
for(size_t i = 0; i < jobCounter; i++)
{
settings.beginGroup(QString().sprintf(JOB_TEMPLATE, i));
@@ -628,4 +661,6 @@ void JobListModel::clearQueuedJobs(void)
const QString appDir = x264_data_path();
QSettings settings(QString("%1/queue.ini").arg(appDir), QSettings::IniFormat);
settings.clear();
+ settings.setValue(KEY_ENTRY_COUNT, 0);
+ settings.sync();
}
diff --git a/src/model_jobList.h b/src/model_jobList.h
index 648b9f3..fd8d446 100644
--- a/src/model_jobList.h
+++ b/src/model_jobList.h
@@ -52,6 +52,7 @@ public:
bool resumeJob(const QModelIndex &index);
bool abortJob(const QModelIndex &index);
bool deleteJob(const QModelIndex &index);
+ bool moveJob(const QModelIndex &index, const int &direction);
LogFileModel *getLogFile(const QModelIndex &index);
const QString &getJobSourceFile(const QModelIndex &index);
const QString &getJobOutputFile(const QModelIndex &index);
@@ -64,6 +65,13 @@ public:
size_t loadQueuedJobs(const SysinfoModel *sysinfo);
void clearQueuedJobs(void);
+ typedef enum
+ {
+ MOVE_UP = +1,
+ MOVE_DOWN = -1
+ }
+ move_t;
+
protected:
QList m_jobs;
QMap m_name;
diff --git a/src/version.h b/src/version.h
index d06b6ec..410c1c2 100644
--- a/src/version.h
+++ b/src/version.h
@@ -26,7 +26,7 @@
#define VER_X264_MAJOR 2
#define VER_X264_MINOR 3
#define VER_X264_PATCH 7
-#define VER_X264_BUILD 838
+#define VER_X264_BUILD 843
#define VER_X264_PORTABLE_EDITION (0)
diff --git a/src/win_main.cpp b/src/win_main.cpp
index ac25891..02c7874 100644
--- a/src/win_main.cpp
+++ b/src/win_main.cpp
@@ -35,6 +35,7 @@
#include "thread_vapoursynth.h"
#include "thread_encode.h"
#include "taskbar7.h"
+#include "input_filter.h"
#include "win_addJob.h"
#include "win_about.h"
#include "win_preferences.h"
@@ -71,7 +72,6 @@ const char *tpl_last = "";
#define NEXT(X) ((*reinterpret_cast(&(X)))++)
#define SETUP_WEBLINK(OBJ, URL) do { (OBJ)->setData(QVariant(QUrl(URL))); connect((OBJ), SIGNAL(triggered()), this, SLOT(showWebLink())); } while(0)
-
///////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor
///////////////////////////////////////////////////////////////////////////////
@@ -125,7 +125,6 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc)
//Update title
ui->labelBuildDate->setText(tr("Built on %1 at %2").arg(x264_version_date().toString(Qt::ISODate), QString::fromLatin1(x264_version_time())));
- ui->labelBuildDate->installEventFilter(this);
if(X264_DEBUG)
{
@@ -152,6 +151,18 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc)
ui->jobsView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
connect(ui->jobsView->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(jobSelected(QModelIndex, QModelIndex)));
+ //Setup key listener
+ m_inputFilter_jobList = new InputEventFilter(ui->jobsView);
+ m_inputFilter_jobList->addKeyFilter(Qt::ControlModifier | Qt::Key_Up, 1);
+ m_inputFilter_jobList->addKeyFilter(Qt::ControlModifier | Qt::Key_Down, 2);
+ connect(m_inputFilter_jobList, SIGNAL(keyPressed(int)), this, SLOT(jobListKeyPressed(int)));
+
+ //Setup mouse listener
+ m_inputFilter_version = new InputEventFilter(ui->labelBuildDate);
+ m_inputFilter_version->addMouseFilter(Qt::LeftButton, 0);
+ m_inputFilter_version->addMouseFilter(Qt::RightButton, 0);
+ connect(m_inputFilter_version, SIGNAL(mouseClicked(int)), this, SLOT(versionLabelMouseClicked(int)));
+
//Create context menu
QAction *actionClipboard = new QAction(QIcon(":/buttons/page_paste.png"), tr("Copy to Clipboard"), ui->logView);
actionClipboard->setEnabled(false);
@@ -160,13 +171,15 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc)
ui->jobsView->addActions(ui->menuJob->actions());
//Enable buttons
- connect(ui->buttonAddJob, SIGNAL(clicked()), this, SLOT(addButtonPressed()));
- connect(ui->buttonStartJob, SIGNAL(clicked()), this, SLOT(startButtonPressed()));
- connect(ui->buttonAbortJob, SIGNAL(clicked()), this, SLOT(abortButtonPressed()));
- connect(ui->buttonPauseJob, SIGNAL(toggled(bool)), this, SLOT(pauseButtonPressed(bool)));
- connect(ui->actionJob_Delete, SIGNAL(triggered()), this, SLOT(deleteButtonPressed()));
- connect(ui->actionJob_Restart, SIGNAL(triggered()), this, SLOT(restartButtonPressed()));
- connect(ui->actionJob_Browse, SIGNAL(triggered()), this, SLOT(browseButtonPressed()));
+ connect(ui->buttonAddJob, SIGNAL(clicked()), this, SLOT(addButtonPressed() ));
+ connect(ui->buttonStartJob, SIGNAL(clicked()), this, SLOT(startButtonPressed() ));
+ connect(ui->buttonAbortJob, SIGNAL(clicked()), this, SLOT(abortButtonPressed() ));
+ connect(ui->buttonPauseJob, SIGNAL(toggled(bool)), this, SLOT(pauseButtonPressed(bool)));
+ connect(ui->actionJob_Delete, SIGNAL(triggered()), this, SLOT(deleteButtonPressed() ));
+ connect(ui->actionJob_Restart, SIGNAL(triggered()), this, SLOT(restartButtonPressed() ));
+ connect(ui->actionJob_Browse, SIGNAL(triggered()), this, SLOT(browseButtonPressed() ));
+ connect(ui->actionJob_MoveUp, SIGNAL(triggered()), this, SLOT(moveButtonPressed() ));
+ connect(ui->actionJob_MoveDown, SIGNAL(triggered()), this, SLOT(moveButtonPressed() ));
//Enable menu
connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(openActionTriggered()));
@@ -222,6 +235,8 @@ MainWindow::~MainWindow(void)
X264_DELETE(m_options);
X264_DELETE(m_pendingFiles);
X264_DELETE(m_label);
+ X264_DELETE(m_inputFilter_jobList);
+ X264_DELETE(m_inputFilter_version);
while(!m_toolsList.isEmpty())
{
@@ -354,6 +369,37 @@ void MainWindow::browseButtonPressed(void)
m_status = STATUS_IDLE;
}
+/*
+ * The "browse" button was clicked
+ */
+void MainWindow::moveButtonPressed(void)
+{
+ ENSURE_APP_IS_IDLE();
+
+ if(sender() == ui->actionJob_MoveUp)
+ {
+ qDebug("Move job %d (direction: UP)", ui->jobsView->currentIndex().row());
+ if(!m_jobList->moveJob(ui->jobsView->currentIndex(), JobListModel::MOVE_UP))
+ {
+ x264_beep(x264_beep_error);
+ }
+ ui->jobsView->scrollTo(ui->jobsView->currentIndex(), QAbstractItemView::PositionAtCenter);
+ }
+ else if(sender() == ui->actionJob_MoveDown)
+ {
+ qDebug("Move job %d (direction: DOWN)", ui->jobsView->currentIndex().row());
+ if(!m_jobList->moveJob(ui->jobsView->currentIndex(), JobListModel::MOVE_DOWN))
+ {
+ x264_beep(x264_beep_error);
+ }
+ ui->jobsView->scrollTo(ui->jobsView->currentIndex(), QAbstractItemView::PositionAtCenter);
+ }
+ else
+ {
+ qWarning("[moveButtonPressed] Error: Unknown sender!");
+ }
+}
+
/*
* The "pause" button was clicked
*/
@@ -996,6 +1042,7 @@ void MainWindow::init(void)
if(m_jobList->loadQueuedJobs(m_sysinfo) > 0)
{
m_label->setVisible(m_jobList->rowCount(QModelIndex()) == 0);
+ m_jobList->clearQueuedJobs();
}
}
@@ -1152,6 +1199,27 @@ void MainWindow::checkUpdates(void)
}
}
+void MainWindow::versionLabelMouseClicked(const int &tag)
+{
+ if(tag == 0)
+ {
+ QTimer::singleShot(0, this, SLOT(showAbout()));
+ }
+}
+
+void MainWindow::jobListKeyPressed(const int &tag)
+{
+ switch(tag)
+ {
+ case 1:
+ ui->actionJob_MoveUp->trigger();
+ break;
+ case 2:
+ ui->actionJob_MoveDown->trigger();
+ break;
+ }
+}
+
///////////////////////////////////////////////////////////////////////////////
// Event functions
///////////////////////////////////////////////////////////////////////////////
@@ -1174,8 +1242,6 @@ void MainWindow::showEvent(QShowEvent *e)
*/
void MainWindow::closeEvent(QCloseEvent *e)
{
- bool bJobsHaveBeenSaved = false;
-
if((m_status != STATUS_IDLE) && (m_status != STATUS_EXITTING))
{
e->ignore();
@@ -1202,10 +1268,7 @@ void MainWindow::closeEvent(QCloseEvent *e)
int ret = QMessageBox::question(this, tr("Jobs Are Pending"), tr("You still have pending jobs. How do you want to proceed?"), tr("Save Pending Jobs"), tr("Discard"));
if(ret == 0)
{
- if(m_jobList->saveQueuedJobs() > 0)
- {
- bJobsHaveBeenSaved = true;
- }
+ m_jobList->saveQueuedJobs();
}
else
{
@@ -1219,12 +1282,6 @@ void MainWindow::closeEvent(QCloseEvent *e)
}
}
- //Clear "old" pending jobs for next startup (only if we have not saved "new" jobs already!)
- if(!bJobsHaveBeenSaved)
- {
- m_jobList->clearQueuedJobs();
- }
-
//Delete remaining jobs
while(m_jobList->rowCount(QModelIndex()) > 0)
{
@@ -1255,19 +1312,6 @@ void MainWindow::resizeEvent(QResizeEvent *e)
updateLabelPos();
}
-/*
- * Event filter
- */
-bool MainWindow::eventFilter(QObject *o, QEvent *e)
-{
- if((o == ui->labelBuildDate) && (e->type() == QEvent::MouseButtonPress))
- {
- QTimer::singleShot(0, this, SLOT(showAbout()));
- return true;
- }
- return false;
-}
-
/*
* Win32 message filter
*/
@@ -1493,6 +1537,8 @@ void MainWindow::updateButtons(JobStatus status)
ui->actionJob_Delete->setEnabled(status == JobStatus_Completed || status == JobStatus_Aborted || status == JobStatus_Failed || status == JobStatus_Enqueued);
ui->actionJob_Restart->setEnabled(status == JobStatus_Completed || status == JobStatus_Aborted || status == JobStatus_Failed || status == JobStatus_Enqueued);
ui->actionJob_Browse->setEnabled(status == JobStatus_Completed);
+ ui->actionJob_MoveUp->setEnabled(status != JobStatus_Undefined);
+ ui->actionJob_MoveDown->setEnabled(status != JobStatus_Undefined);
ui->actionJob_Start->setEnabled(ui->buttonStartJob->isEnabled());
ui->actionJob_Abort->setEnabled(ui->buttonAbortJob->isEnabled());
diff --git a/src/win_main.h b/src/win_main.h
index 8a4f9b6..2ea8fff 100644
--- a/src/win_main.h
+++ b/src/win_main.h
@@ -32,6 +32,7 @@ class QFile;
class QLibrary;
class PreferencesModel;
class RecentlyUsed;
+class InputEventFilter;
class QModelIndex;
class QLabel;
enum JobStatus;
@@ -53,7 +54,6 @@ protected:
virtual void closeEvent(QCloseEvent *e);
virtual void showEvent(QShowEvent *e);
virtual void resizeEvent(QResizeEvent *e);
- virtual bool eventFilter(QObject *o, QEvent *e);
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
virtual bool winEvent(MSG *message, long *result);
@@ -76,6 +76,9 @@ private:
QLabel *m_label;
IPC *const m_ipc;
+ InputEventFilter *m_inputFilter_jobList;
+ InputEventFilter *m_inputFilter_version;
+
JobListModel *m_jobList;
OptionsModel *m_options;
QStringList *m_pendingFiles;
@@ -110,7 +113,9 @@ private slots:
void jobSelected(const QModelIndex ¤t, const QModelIndex &previous);
void jobChangedData(const QModelIndex &top, const QModelIndex &bottom);
void jobLogExtended(const QModelIndex & parent, int start, int end);
+ void jobListKeyPressed(const int &tag);
void launchNextJob();
+ void moveButtonPressed(void);
void pauseButtonPressed(bool checked);
void restartButtonPressed(void);
void saveLogFile(const QModelIndex &index);
@@ -120,4 +125,5 @@ private slots:
void shutdownComputer(void);
void startButtonPressed(void);
void updateLabelPos(void);
+ void versionLabelMouseClicked(const int &tag);
};
diff --git a/x264_launcher_MSVC2013.vcxproj b/x264_launcher_MSVC2013.vcxproj
index 3976c95..3b89649 100644
--- a/x264_launcher_MSVC2013.vcxproj
+++ b/x264_launcher_MSVC2013.vcxproj
@@ -343,6 +343,14 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats"
$(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)
+
@@ -408,6 +416,7 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats"
+
@@ -432,6 +441,7 @@ copy /Y "$(QTDIR)\plugins\imageformats\qgif4.dll" "$(TargetDir)\imageformats"
+
diff --git a/x264_launcher_MSVC2013.vcxproj.filters b/x264_launcher_MSVC2013.vcxproj.filters
index 32f450b..7934e3e 100644
--- a/x264_launcher_MSVC2013.vcxproj.filters
+++ b/x264_launcher_MSVC2013.vcxproj.filters
@@ -108,6 +108,9 @@
Header Files
+
+ Header Files
+
@@ -263,6 +266,12 @@
Source Files
+
+ Source Files
+
+
+ Generated Files
+