OSDN Git Service

Removed a lot of old cruft and use MUtils functions where possible.
[x264-launcher/x264-launcher.git] / src / win_preferences.cpp
index c5912d3..5a12bb3 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Simple x264 Launcher
-// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2015 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) \
-{ \
-       if((CHKBOX)->isChecked() != (VALUE)) (CHKBOX)->click(); \
-       if((CHKBOX)->isChecked() != (VALUE)) (CHKBOX)->setChecked(VALUE); \
+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, Preferences *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());
-
-       labelRunNextJob->installEventFilter(this);
-       labelUse10BitEncoding->installEventFilter(this);
-       labelUse64BitAvs2YUV->installEventFilter(this);
-       labelShutdownComputer->installEventFilter(this);
-       labelSaveLogFiles->installEventFilter(this);
-       labelSaveToSourceFolder->installEventFilter(this);
-       labelEnableSounds->installEventFilter(this);
-
-       connect(resetButton, SIGNAL(clicked()), this, SLOT(resetButtonPressed()));
-       connect(checkUse10BitEncoding, SIGNAL(toggled(bool)), this, SLOT(use10BitEncodingToggled(bool)));
-
+       MUtils::GUI::enable_close_button(this, false);
+       
+       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->labelShutdownComputer->installEventFilter(this);
+       ui->labelSaveLogFiles->installEventFilter(this);
+       ui->labelSaveToSourceFolder->installEventFilter(this);
+       ui->labelEnableSounds->installEventFilter(this);
+       ui->labelDisableWarnings->installEventFilter(this);
+       ui->labelNoUpdateReminder->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);
-       UPDATE_CHECKBOX(checkShutdownComputer, m_preferences->shutdownComputer);
-       UPDATE_CHECKBOX(checkUse64BitAvs2YUV, m_preferences->useAvisyth64Bit);
-       UPDATE_CHECKBOX(checkSaveLogFiles, m_preferences->saveLogFiles);
-       UPDATE_CHECKBOX(checkSaveToSourceFolder, m_preferences->saveToSourcePath);
-       UPDATE_CHECKBOX(checkEnableSounds, m_preferences->enableSounds);
-
-       checkUse10BitEncoding->blockSignals(true);
-       UPDATE_CHECKBOX(checkUse10BitEncoding, m_preferences->use10BitEncoding);
-       checkUse10BitEncoding->blockSignals(false);
-
-       spinBoxJobCount->setValue(m_preferences->maxRunningJobCount);
-       comboBoxPriority->setCurrentIndex(qBound(0U, m_preferences->processPriority, 2U));
-
-       checkUse64BitAvs2YUV->setEnabled(m_x64);
-       labelUse64BitAvs2YUV->setEnabled(m_x64);
+       UPDATE_CHECKBOX(ui->checkRunNextJob,         m_preferences->getAutoRunNextJob());
+       UPDATE_CHECKBOX(ui->checkShutdownComputer,   m_preferences->getShutdownComputer());
+       UPDATE_CHECKBOX(ui->checkUse64BitAvs2YUV,    m_preferences->getUseAvisyth64Bit() && m_sysinfo->hasX64Support());
+       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);
+       
+       ui->spinBoxJobCount->setValue(m_preferences->getMaxRunningJobCount());
+       
+       UPDATE_COMBOBOX(ui->comboBoxPriority, qBound(-2, m_preferences->getProcessPriority(), 1), 0);
+       
+       ui->checkUse64BitAvs2YUV->setEnabled(m_sysinfo->hasX64Support());
+       ui->labelUse64BitAvs2YUV->setEnabled(m_sysinfo->hasX64Support());
 }
 
 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);
+       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->labelShutdownComputer,   ui->checkShutdownComputer);
+               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);
+       }
        return false;
 }
 
@@ -99,113 +143,69 @@ 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->autoRunNextJob = checkRunNextJob->isChecked();
-       m_preferences->shutdownComputer = checkShutdownComputer->isChecked();
-       m_preferences->use10BitEncoding = checkUse10BitEncoding->isChecked();
-       m_preferences->useAvisyth64Bit = checkUse64BitAvs2YUV->isChecked();
-       m_preferences->saveLogFiles = checkSaveLogFiles->isChecked();
-       m_preferences->saveToSourcePath = checkSaveToSourceFolder->isChecked();
-       m_preferences->maxRunningJobCount = spinBoxJobCount->value();
-       m_preferences->processPriority = comboBoxPriority->currentIndex();
-       m_preferences->enableSounds = checkEnableSounds->isChecked();
-
-       savePreferences(m_preferences);
+       m_preferences->setAutoRunNextJob(ui->checkRunNextJob->isChecked());
+       m_preferences->setShutdownComputer(ui->checkShutdownComputer->isChecked());
+       m_preferences->setUseAvisyth64Bit(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());
+
+       PreferencesModel::savePreferences(m_preferences);
        QDialog::done(n);
 }
 
 void PreferencesDialog::resetButtonPressed(void)
 {
-       initPreferences(m_preferences);
+       PreferencesModel::initPreferences(m_preferences);
        showEvent(NULL);
 }
 
-void PreferencesDialog::use10BitEncodingToggled(bool checked)
+//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(ui->checkUse10BitEncoding, false, true);
+//             }
+//     }
+//}
+
+void PreferencesDialog::disableWarningsToggled(bool checked)
 {
        if(checked)
        {
                QString text;
-               text += tr("<nobr>Please note that 10&minus;Bit H.264 streams are <b>not</b> currently supported by hardware (standalone) players!</nobr><br>");
-               text += tr("<nobr>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.</nobr><br>");
-               text += tr("<nobr>Also be aware that hardware&minus;acceleration (CUDA, DXVA, etc) usually will <b>not</b> work with 10&minus;Bit H.264 streams.</nobr><br>");
-               
-               if(QMessageBox::warning(this, tr("10-Bit Encoding"), text, tr("Continue"), tr("Revert"), QString(), 1) != 0)
+               text += QString("<nobr>%1</nobr><br>").arg(tr("Please note that Avisynth and/or VapourSynth support might be unavailable <b>without</b> any notice!"));
+               text += QString("<nobr>%1</nobr><br>").arg(tr("Also note that the CLI option <tt>--console</tt> may be used to get more diagnostic infomation."));
+
+               if(QMessageBox::warning(this, tr("Avisynth/VapourSynth Warnings"), text.replace("-", "&minus;"), tr("Continue"), tr("Revert"), QString(), 1) != 0)
                {
-                       UPDATE_CHECKBOX(checkUse10BitEncoding, false);
+                       UPDATE_CHECKBOX(ui->checkDisableWarnings, false, true);
                }
        }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Static Functions
-///////////////////////////////////////////////////////////////////////////////
-
-void PreferencesDialog::initPreferences(Preferences *preferences)
-{
-       memset(preferences, 0, sizeof(Preferences));
-
-       preferences->autoRunNextJob = true;
-       preferences->maxRunningJobCount = 1;
-       preferences->shutdownComputer = false;
-       preferences->use10BitEncoding = false;
-       preferences->useAvisyth64Bit = false;
-       preferences->saveLogFiles = false;
-       preferences->saveToSourcePath = false;
-       preferences->processPriority = X264_PRIORITY_BELOWNORMAL;
-       preferences->enableSounds = false;
-}
-
-void PreferencesDialog::loadPreferences(Preferences *preferences)
-{
-       const QString appDir = x264_data_path();
-       QSettings settings(QString("%1/preferences.ini").arg(appDir), QSettings::IniFormat);
-
-       Preferences defaults;
-       initPreferences(&defaults);
-
-       settings.beginGroup("preferences");
-       preferences->autoRunNextJob = settings.value("auto_run_next_job", QVariant(defaults.autoRunNextJob)).toBool();
-       preferences->maxRunningJobCount = qBound(1U, settings.value("max_running_job_count", QVariant(defaults.maxRunningJobCount)).toUInt(), 16U);
-       preferences->shutdownComputer = settings.value("shutdown_computer_on_completion", QVariant(defaults.shutdownComputer)).toBool();
-       preferences->use10BitEncoding = settings.value("use_10bit_encoding", QVariant(defaults.use10BitEncoding)).toBool();
-       preferences->useAvisyth64Bit = settings.value("use_64bit_avisynth", QVariant(defaults.useAvisyth64Bit)).toBool();
-       preferences->saveLogFiles = settings.value("save_log_files", QVariant(defaults.saveLogFiles)).toBool();
-       preferences->saveToSourcePath = settings.value("save_to_source_path", QVariant(defaults.saveToSourcePath)).toBool();
-       preferences->processPriority = settings.value("process_priority", QVariant(defaults.processPriority)).toUInt();
-       preferences->enableSounds = settings.value("enable_sounds", QVariant(defaults.enableSounds)).toBool();
-}
-
-void PreferencesDialog::savePreferences(Preferences *preferences)
-{
-       const QString appDir = x264_data_path();
-       QSettings settings(QString("%1/preferences.ini").arg(appDir), QSettings::IniFormat);
-
-       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.setValue("use_10bit_encoding", preferences->use10BitEncoding);
-       settings.setValue("use_64bit_avisynth", preferences->useAvisyth64Bit);
-       settings.setValue("save_log_files", preferences->saveLogFiles);
-       settings.setValue("save_to_source_path", preferences->saveToSourcePath);
-       settings.setValue("process_priority", preferences->processPriority);
-       settings.setValue("enable_sounds", preferences->enableSounds);
-       settings.sync();
-}
+}
\ No newline at end of file