OSDN Git Service

Updated copyright year.
[x264-launcher/x264-launcher.git] / src / win_preferences.cpp
index 157b8db..74a98fd 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Simple x264 Launcher
-// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2019 LoRd_MuldeR <MuldeR2@GMX.de>
 //
 // 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
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "win_preferences.h"
+#include "UIC_win_preferences.h"
 
+//Internal
 #include "global.h"
 #include "model_preferences.h"
+#include "model_sysinfo.h"
 
+//MUtils
+#include <MUtils/GUI.h>
+
+//Qt
 #include <QSettings>
 #include <QDesktopServices>
 #include <QMouseEvent>
 #include <QMessageBox>
 
-#define UPDATE_CHECKBOX(CHKBOX, VALUE, BLOCK) \
-{ \
-       if((BLOCK)) { (CHKBOX)->blockSignals(true); } \
-       if((CHKBOX)->isChecked() != (VALUE)) (CHKBOX)->click(); \
-       if((CHKBOX)->isChecked() != (VALUE)) (CHKBOX)->setChecked(VALUE); \
-       if((BLOCK)) { (CHKBOX)->blockSignals(false); } \
+static inline void UPDATE_CHECKBOX(QCheckBox *const chkbox, const bool value, const bool block = false)
+{
+       if(block) { chkbox->blockSignals(true); }
+       if(chkbox->isChecked() != value) chkbox->click();
+       if(chkbox->isChecked() != value) chkbox->setChecked(value);
+       if(block) { chkbox->blockSignals(false); }
+}
+
+static inline void UPDATE_COMBOBOX(QComboBox *const cobox, const int value, const int defVal)
+{
+       const int count = cobox->count();
+       for(int i = 0; i < count; i++)
+       {
+               const int current = cobox->itemData(i).toInt();
+               if((current == value) || (current == defVal))
+               {
+                       cobox->setCurrentIndex(i);
+                       if((current == value)) break;
+               }
+       }
 }
 
-PreferencesDialog::PreferencesDialog(QWidget *parent, PreferencesModel *preferences, bool x64)
+PreferencesDialog::PreferencesDialog(QWidget *parent, PreferencesModel *preferences, const SysinfoModel *sysinfo)
 :
        QDialog(parent),
-       m_x64(x64)
+       m_sysinfo(sysinfo),
+       ui(new Ui::PreferencesDialog())
 {
-       setupUi(this);
+       ui->setupUi(this);
        setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint));
        setFixedSize(minimumSize());
-       x264_enable_close_button(this, false);
+       MUtils::GUI::enable_close_button(this, false);
        
-       labelRunNextJob->installEventFilter(this);
-       labelUse10BitEncoding->installEventFilter(this);
-       labelUse64BitAvs2YUV->installEventFilter(this);
-       labelShutdownComputer->installEventFilter(this);
-       labelSaveLogFiles->installEventFilter(this);
-       labelSaveToSourceFolder->installEventFilter(this);
-       labelEnableSounds->installEventFilter(this);
-       labelDisableWarnings->installEventFilter(this);
-
-       connect(resetButton, SIGNAL(clicked()), this, SLOT(resetButtonPressed()));
-       connect(checkUse10BitEncoding, SIGNAL(toggled(bool)), this, SLOT(use10BitEncodingToggled(bool)));
-       connect(checkDisableWarnings, SIGNAL(toggled(bool)), this, SLOT(disableWarningsToggled(bool)));
+       ui->comboBoxPriority->setItemData(0, QVariant::fromValue( 1)); //Above Normal
+       ui->comboBoxPriority->setItemData(1, QVariant::fromValue( 0)); //Normal
+       ui->comboBoxPriority->setItemData(2, QVariant::fromValue(-1)); //Below Normal
+       ui->comboBoxPriority->setItemData(3, QVariant::fromValue(-2)); //Idle
+
+       ui->labelRunNextJob        ->installEventFilter(this);
+       ui->labelUse64BitAvs2YUV   ->installEventFilter(this);
+       ui->labelSaveLogFiles      ->installEventFilter(this);
+       ui->labelSaveToSourceFolder->installEventFilter(this);
+       ui->labelEnableSounds      ->installEventFilter(this);
+       ui->labelDisableWarnings   ->installEventFilter(this);
+       ui->labelNoUpdateReminder  ->installEventFilter(this);
+       ui->labelSaveQueueNoConfirm->installEventFilter(this);
+
+       ui->checkBoxDummy1->installEventFilter(this);
+       ui->checkBoxDummy2->installEventFilter(this);
+
+       connect(ui->resetButton, SIGNAL(clicked()), this, SLOT(resetButtonPressed()));
+       connect(ui->checkDisableWarnings, SIGNAL(toggled(bool)), this, SLOT(disableWarningsToggled(bool)));
        
        m_preferences = preferences;
 }
 
 PreferencesDialog::~PreferencesDialog(void)
 {
+       delete ui;
 }
 
 void PreferencesDialog::showEvent(QShowEvent *event)
 {
        if(event) QDialog::showEvent(event);
        
-       UPDATE_CHECKBOX(checkRunNextJob, m_preferences->autoRunNextJob(), false);
-       UPDATE_CHECKBOX(checkShutdownComputer, m_preferences->shutdownComputer(), false);
-       UPDATE_CHECKBOX(checkUse64BitAvs2YUV, m_preferences->useAvisyth64Bit(), false);
-       UPDATE_CHECKBOX(checkSaveLogFiles, m_preferences->saveLogFiles(), false);
-       UPDATE_CHECKBOX(checkSaveToSourceFolder, m_preferences->saveToSourcePath(), false);
-       UPDATE_CHECKBOX(checkEnableSounds, m_preferences->enableSounds(), false);
-       UPDATE_CHECKBOX(checkDisableWarnings, m_preferences->disableWarnings(), true);
-       UPDATE_CHECKBOX(checkUse10BitEncoding, m_preferences->use10BitEncoding(), true);
-
-       spinBoxJobCount->setValue(m_preferences->maxRunningJobCount());
-       comboBoxPriority->setCurrentIndex(qBound(0, m_preferences->processPriority() + 2, comboBoxPriority->count()-1));
-
-       checkUse64BitAvs2YUV->setEnabled(m_x64);
-       labelUse64BitAvs2YUV->setEnabled(m_x64);
+       UPDATE_CHECKBOX(ui->checkRunNextJob,         m_preferences->getAutoRunNextJob());
+       UPDATE_CHECKBOX(ui->checkUse64BitAvs2YUV,    m_preferences->getPrefer64BitSource() && m_sysinfo->getCPUFeatures(SysinfoModel::CPUFeatures_X64));
+       UPDATE_CHECKBOX(ui->checkSaveLogFiles,       m_preferences->getSaveLogFiles());
+       UPDATE_CHECKBOX(ui->checkSaveToSourceFolder, m_preferences->getSaveToSourcePath());
+       UPDATE_CHECKBOX(ui->checkEnableSounds,       m_preferences->getEnableSounds());
+       UPDATE_CHECKBOX(ui->checkNoUpdateReminder,   m_preferences->getNoUpdateReminder());
+       UPDATE_CHECKBOX(ui->checkDisableWarnings,    m_preferences->getDisableWarnings(), true);
+       UPDATE_CHECKBOX(ui->checkSaveQueueNoConfirm, m_preferences->getSaveQueueNoConfirm());
+       
+       ui->spinBoxJobCount->setValue(m_preferences->getMaxRunningJobCount());
+       UPDATE_COMBOBOX(ui->comboBoxPriority, qBound(-2, m_preferences->getProcessPriority(), 1), 0);
+       
+       const bool hasX64 = m_sysinfo->getCPUFeatures(SysinfoModel::CPUFeatures_X64);
+       ui->checkUse64BitAvs2YUV->setEnabled(hasX64);
+       ui->labelUse64BitAvs2YUV->setEnabled(hasX64);
 }
 
 bool PreferencesDialog::eventFilter(QObject *o, QEvent *e)
 {
-       emulateMouseEvent(o, e, labelRunNextJob, checkRunNextJob);
-       emulateMouseEvent(o, e, labelShutdownComputer, checkShutdownComputer);
-       emulateMouseEvent(o, e, labelUse10BitEncoding, checkUse10BitEncoding);
-       emulateMouseEvent(o, e, labelUse64BitAvs2YUV, checkUse64BitAvs2YUV);
-       emulateMouseEvent(o, e, labelSaveLogFiles, checkSaveLogFiles);
-       emulateMouseEvent(o, e, labelSaveToSourceFolder, checkSaveToSourceFolder);
-       emulateMouseEvent(o, e, labelEnableSounds, checkEnableSounds);
-       emulateMouseEvent(o, e, labelDisableWarnings, checkDisableWarnings);
+       if(e->type() == QEvent::Paint)
+       {
+               if(o == ui->checkBoxDummy1) return true;
+               if(o == ui->checkBoxDummy2) return true;
+       }
+       else if((e->type() == QEvent::MouseButtonPress) || (e->type() == QEvent::MouseButtonRelease))
+       {
+               emulateMouseEvent(o, e, ui->labelRunNextJob,         ui->checkRunNextJob);
+               emulateMouseEvent(o, e, ui->labelUse64BitAvs2YUV,    ui->checkUse64BitAvs2YUV);
+               emulateMouseEvent(o, e, ui->labelSaveLogFiles,       ui->checkSaveLogFiles);
+               emulateMouseEvent(o, e, ui->labelSaveToSourceFolder, ui->checkSaveToSourceFolder);
+               emulateMouseEvent(o, e, ui->labelEnableSounds,       ui->checkEnableSounds);
+               emulateMouseEvent(o, e, ui->labelDisableWarnings,    ui->checkDisableWarnings);
+               emulateMouseEvent(o, e, ui->labelNoUpdateReminder,   ui->checkNoUpdateReminder);
+               emulateMouseEvent(o, e, ui->labelSaveQueueNoConfirm, ui->checkSaveQueueNoConfirm);
+       }
        return false;
 }
 
@@ -104,34 +143,31 @@ void PreferencesDialog::emulateMouseEvent(QObject *object, QEvent *event, QWidge
 {
        if(object == source)
        {
-               if((event->type() == QEvent::MouseButtonPress) || (event->type() == QEvent::MouseButtonRelease))
+               if(QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event))
                {
-                       if(QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event))
-                       {
-                               qApp->postEvent(target, new QMouseEvent
-                               (
-                                       event->type(),
-                                       qApp->widgetAt(mouseEvent->globalPos()) == source ? QPoint(1, 1) : QPoint(INT_MAX, INT_MAX),
-                                       Qt::LeftButton,
-                                       0, 0
-                               ));
-                       }
+                       qApp->postEvent(target, new QMouseEvent
+                       (
+                               event->type(),
+                               (qApp->widgetAt(mouseEvent->globalPos()) == source) ? QPoint(1, 1) : QPoint(INT_MAX, INT_MAX),
+                               Qt::LeftButton,
+                               0, 0
+                       ));
                }
        }
 }
 
 void PreferencesDialog::done(int n)
 {
-       m_preferences->setAutoRunNextJob(checkRunNextJob->isChecked());
-       m_preferences->setShutdownComputer(checkShutdownComputer->isChecked());
-       m_preferences->setUse10BitEncoding(checkUse10BitEncoding->isChecked());
-       m_preferences->setUseAvisyth64Bit(checkUse64BitAvs2YUV->isChecked());
-       m_preferences->setSaveLogFiles(checkSaveLogFiles->isChecked());
-       m_preferences->setSaveToSourcePath(checkSaveToSourceFolder->isChecked());
-       m_preferences->setMaxRunningJobCount(spinBoxJobCount->value());
-       m_preferences->setProcessPriority(comboBoxPriority->currentIndex() - 2);
-       m_preferences->setEnableSounds(checkEnableSounds->isChecked());
-       m_preferences->setDisableWarnings(checkDisableWarnings->isChecked());
+       m_preferences->setAutoRunNextJob    (ui->checkRunNextJob->isChecked());
+       m_preferences->setPrefer64BitSource (ui->checkUse64BitAvs2YUV->isChecked());
+       m_preferences->setSaveLogFiles      (ui->checkSaveLogFiles->isChecked());
+       m_preferences->setSaveToSourcePath  (ui->checkSaveToSourceFolder->isChecked());
+       m_preferences->setMaxRunningJobCount(ui->spinBoxJobCount->value());
+       m_preferences->setProcessPriority   (ui->comboBoxPriority->itemData(ui->comboBoxPriority->currentIndex()).toInt());
+       m_preferences->setEnableSounds      (ui->checkEnableSounds->isChecked());
+       m_preferences->setDisableWarnings   (ui->checkDisableWarnings->isChecked());
+       m_preferences->setNoUpdateReminder  (ui->checkNoUpdateReminder->isChecked());
+       m_preferences->setSaveQueueNoConfirm(ui->checkSaveQueueNoConfirm->isChecked());
 
        PreferencesModel::savePreferences(m_preferences);
        QDialog::done(n);
@@ -143,22 +179,6 @@ void PreferencesDialog::resetButtonPressed(void)
        showEvent(NULL);
 }
 
-void PreferencesDialog::use10BitEncodingToggled(bool checked)
-{
-       if(checked)
-       {
-               QString text;
-               text += QString("<nobr>%1</nobr><br>").arg(tr("Please note that 10&minus;Bit H.264 streams are <b>not</b> currently supported by hardware (standalone) players!"));
-               text += QString("<nobr>%1</nobr><br>").arg(tr("To play such streams, you will need an <i>up&minus;to&minus;date</i> ffdshow&minus;tryouts, CoreAVC 3.x or another supported s/w decoder."));
-               text += QString("<nobr>%1</nobr><br>").arg(tr("Also be aware that hardware&minus;acceleration (CUDA, DXVA, etc) usually will <b>not</b> work with 10&minus;Bit H.264 streams."));
-               
-               if(QMessageBox::warning(this, tr("10-Bit Encoding"), text.replace("-", "&minus;"), tr("Continue"), tr("Revert"), QString(), 1) != 0)
-               {
-                       UPDATE_CHECKBOX(checkUse10BitEncoding, false, true);
-               }
-       }
-}
-
 void PreferencesDialog::disableWarningsToggled(bool checked)
 {
        if(checked)
@@ -169,7 +189,7 @@ void PreferencesDialog::disableWarningsToggled(bool checked)
 
                if(QMessageBox::warning(this, tr("Avisynth/VapourSynth Warnings"), text.replace("-", "&minus;"), tr("Continue"), tr("Revert"), QString(), 1) != 0)
                {
-                       UPDATE_CHECKBOX(checkDisableWarnings, false, true);
+                       UPDATE_CHECKBOX(ui->checkDisableWarnings, false, true);
                }
        }
 }
\ No newline at end of file