2012-02-03 00:53:14 +01:00
///////////////////////////////////////////////////////////////////////////////
// Simple x264 Launcher
// Copyright (C) 2004-2012 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
// 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 "win_preferences.h"
# include "global.h"
# include <QSettings>
# include <QDesktopServices>
2012-02-04 01:12:21 +01:00
# include <QMouseEvent>
2012-03-25 22:11:07 +02:00
# include <QMessageBox>
2012-02-03 00:53:14 +01:00
2012-02-06 16:13:24 +01:00
# define UPDATE_CHECKBOX(CHKBOX, VALUE) \
{ \
if ( ( CHKBOX ) - > isChecked ( ) ! = ( VALUE ) ) ( CHKBOX ) - > click ( ) ; \
if ( ( CHKBOX ) - > isChecked ( ) ! = ( VALUE ) ) ( CHKBOX ) - > setChecked ( VALUE ) ; \
}
2012-02-05 02:49:08 +01:00
PreferencesDialog : : PreferencesDialog ( QWidget * parent , Preferences * preferences , bool x64 )
2012-02-03 00:53:14 +01:00
:
2012-02-05 02:49:08 +01:00
QDialog ( parent ) ,
m_x64 ( x64 )
2012-02-03 00:53:14 +01:00
{
setupUi ( this ) ;
setWindowFlags ( windowFlags ( ) & ( ~ Qt : : WindowContextHelpButtonHint ) ) ;
2012-02-04 01:12:21 +01:00
setFixedSize ( minimumSize ( ) ) ;
2012-02-03 00:53:14 +01:00
2012-02-04 01:12:21 +01:00
labelRunNextJob - > installEventFilter ( this ) ;
2012-03-25 22:11:07 +02:00
labelUse10BitEncoding - > installEventFilter ( this ) ;
2012-02-05 02:49:08 +01:00
labelUse64BitAvs2YUV - > installEventFilter ( this ) ;
2012-02-04 01:12:21 +01:00
labelShutdownComputer - > installEventFilter ( this ) ;
2012-02-03 00:53:14 +01:00
2012-02-05 15:42:41 +01:00
connect ( resetButton , SIGNAL ( clicked ( ) ) , this , SLOT ( resetButtonPressed ( ) ) ) ;
2012-03-25 22:11:07 +02:00
connect ( checkUse10BitEncoding , SIGNAL ( toggled ( bool ) ) , this , SLOT ( use10BitEncodingToggled ( bool ) ) ) ;
2012-02-05 15:42:41 +01:00
2012-02-03 00:53:14 +01:00
m_preferences = preferences ;
}
PreferencesDialog : : ~ PreferencesDialog ( void )
{
}
void PreferencesDialog : : showEvent ( QShowEvent * event )
{
2012-02-05 15:42:41 +01:00
if ( event ) QDialog : : showEvent ( event ) ;
2012-02-04 01:12:21 +01:00
2012-02-06 16:13:24 +01:00
UPDATE_CHECKBOX ( checkRunNextJob , m_preferences - > autoRunNextJob ) ;
UPDATE_CHECKBOX ( checkShutdownComputer , m_preferences - > shutdownComputer ) ;
UPDATE_CHECKBOX ( checkUse64BitAvs2YUV , m_preferences - > useAvisyth64Bit ) ;
2012-03-25 22:11:07 +02:00
checkUse10BitEncoding - > blockSignals ( true ) ;
UPDATE_CHECKBOX ( checkUse10BitEncoding , m_preferences - > use10BitEncoding ) ;
checkUse10BitEncoding - > blockSignals ( false ) ;
2012-02-03 12:31:51 +01:00
spinBoxJobCount - > setValue ( m_preferences - > maxRunningJobCount ) ;
2012-02-05 02:49:08 +01:00
checkUse64BitAvs2YUV - > setEnabled ( m_x64 ) ;
labelUse64BitAvs2YUV - > setEnabled ( m_x64 ) ;
2012-02-03 00:53:14 +01:00
}
2012-02-04 01:12:21 +01:00
bool PreferencesDialog : : eventFilter ( QObject * o , QEvent * e )
{
2012-02-05 04:41:42 +01:00
emulateMouseEvent ( o , e , labelRunNextJob , checkRunNextJob ) ;
emulateMouseEvent ( o , e , labelShutdownComputer , checkShutdownComputer ) ;
2012-03-25 22:11:07 +02:00
emulateMouseEvent ( o , e , labelUse10BitEncoding , checkUse10BitEncoding ) ;
2012-02-05 04:41:42 +01:00
emulateMouseEvent ( o , e , labelUse64BitAvs2YUV , checkUse64BitAvs2YUV ) ;
return false ;
}
void PreferencesDialog : : emulateMouseEvent ( QObject * object , QEvent * event , QWidget * source , QWidget * target )
{
if ( object = = source )
2012-02-04 01:12:21 +01:00
{
2012-02-05 04:41:42 +01:00
if ( ( event - > type ( ) = = QEvent : : MouseButtonPress ) | | ( event - > type ( ) = = QEvent : : MouseButtonRelease ) )
2012-02-04 01:12:21 +01:00
{
2012-02-05 04:41:42 +01:00
if ( QMouseEvent * mouseEvent = dynamic_cast < QMouseEvent * > ( event ) )
2012-02-04 01:12:21 +01:00
{
2012-02-05 04:41:42 +01:00
qApp - > postEvent ( target , new QMouseEvent
(
event - > type ( ) ,
qApp - > widgetAt ( mouseEvent - > globalPos ( ) ) = = source ? QPoint ( 1 , 1 ) : QPoint ( INT_MAX , INT_MAX ) ,
Qt : : LeftButton ,
0 , 0
) ) ;
2012-02-04 01:12:21 +01:00
}
}
}
}
2012-02-05 15:42:41 +01:00
void PreferencesDialog : : done ( int n )
2012-02-03 00:53:14 +01:00
{
m_preferences - > autoRunNextJob = checkRunNextJob - > isChecked ( ) ;
2012-02-04 01:12:21 +01:00
m_preferences - > shutdownComputer = checkShutdownComputer - > isChecked ( ) ;
2012-03-25 22:11:07 +02:00
m_preferences - > use10BitEncoding = checkUse10BitEncoding - > isChecked ( ) ;
2012-02-05 02:49:08 +01:00
m_preferences - > useAvisyth64Bit = checkUse64BitAvs2YUV - > isChecked ( ) ;
2012-02-03 12:31:51 +01:00
m_preferences - > maxRunningJobCount = spinBoxJobCount - > value ( ) ;
2012-02-03 00:53:14 +01:00
savePreferences ( m_preferences ) ;
2012-02-05 15:42:41 +01:00
QDialog : : done ( n ) ;
}
void PreferencesDialog : : resetButtonPressed ( void )
{
initPreferences ( m_preferences ) ;
showEvent ( NULL ) ;
}
2012-03-25 22:11:07 +02:00
void PreferencesDialog : : use10BitEncodingToggled ( bool checked )
{
if ( checked )
{
QString text ;
text + = tr ( " <nobr>Please note that 10−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−to−date</i> ffdshow−tryouts, CoreAVC 3.x or another supported s/w decoder.</nobr><br> " ) ;
text + = tr ( " <nobr>Also be aware that hardware−acceleration (CUDA, DXVA, etc) usually will <b>not</b> work with 10−Bit H.264 streams.</nobr><br> " ) ;
if ( QMessageBox : : warning ( this , tr ( " 10-Bit Encoding " ) , text , tr ( " Continue " ) , tr ( " Revert " ) , QString ( ) , 1 ) ! = 0 )
{
UPDATE_CHECKBOX ( checkUse10BitEncoding , false ) ;
}
}
}
2012-02-05 15:42:41 +01:00
///////////////////////////////////////////////////////////////////////////////
// Static Functions
///////////////////////////////////////////////////////////////////////////////
void PreferencesDialog : : initPreferences ( Preferences * preferences )
{
memset ( preferences , 0 , sizeof ( Preferences ) ) ;
preferences - > autoRunNextJob = true ;
preferences - > maxRunningJobCount = 1 ;
preferences - > shutdownComputer = false ;
2012-03-25 22:11:07 +02:00
preferences - > use10BitEncoding = false ;
2012-02-05 15:42:41 +01:00
preferences - > useAvisyth64Bit = false ;
2012-02-03 00:53:14 +01:00
}
void PreferencesDialog : : loadPreferences ( Preferences * preferences )
{
2012-02-10 18:40:28 +01:00
const QString appDir = x264_data_path ( ) ;
2012-02-03 00:53:14 +01:00
QSettings settings ( QString ( " %1/preferences.ini " ) . arg ( appDir ) , QSettings : : IniFormat ) ;
2012-02-05 15:42:41 +01:00
Preferences defaults ;
initPreferences ( & defaults ) ;
2012-02-03 00:53:14 +01:00
settings . beginGroup ( " preferences " ) ;
2012-02-05 15:42:41 +01:00
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 ( ) ;
2012-03-25 22:11:07 +02:00
preferences - > use10BitEncoding = settings . value ( " use_10bit_encoding " , QVariant ( defaults . use10BitEncoding ) ) . toBool ( ) ;
2012-02-05 15:42:41 +01:00
preferences - > useAvisyth64Bit = settings . value ( " use_64bit_avisynth " , QVariant ( defaults . useAvisyth64Bit ) ) . toBool ( ) ;
2012-02-03 00:53:14 +01:00
}
void PreferencesDialog : : savePreferences ( Preferences * preferences )
{
2012-02-10 18:40:28 +01:00
const QString appDir = x264_data_path ( ) ;
2012-02-03 00:53:14 +01:00
QSettings settings ( QString ( " %1/preferences.ini " ) . arg ( appDir ) , QSettings : : IniFormat ) ;
settings . beginGroup ( " preferences " ) ;
settings . setValue ( " auto_run_next_job " , preferences - > autoRunNextJob ) ;
2012-02-04 01:12:21 +01:00
settings . setValue ( " shutdown_computer_on_completion " , preferences - > shutdownComputer ) ;
2012-02-03 12:31:51 +01:00
settings . setValue ( " max_running_job_count " , preferences - > maxRunningJobCount ) ;
2012-03-25 22:11:07 +02:00
settings . setValue ( " use_10bit_encoding " , preferences - > use10BitEncoding ) ;
2012-02-05 02:49:08 +01:00
settings . setValue ( " use_64bit_avisynth " , preferences - > useAvisyth64Bit ) ;
2012-02-03 00:53:14 +01:00
settings . sync ( ) ;
}