* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "dialogs/preferences.hpp"
-#include "dialogs_provider.hpp"
#include "util/qvlcframe.hpp"
+#include "dialogs/errors.hpp"
#include "components/complete_preferences.hpp"
#include "components/simple_preferences.hpp"
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
-#include <QVBoxLayout>
#include <QPushButton>
-#include <QCheckBox>
#include <QMessageBox>
#include <QDialogButtonBox>
-PrefsDialog *PrefsDialog::instance = NULL;
-
PrefsDialog::PrefsDialog( QWidget *parent, intf_thread_t *_p_intf )
: QVLCDialog( parent, _p_intf )
{
QGridLayout *main_layout = new QGridLayout( this );
setWindowTitle( qtr( "Preferences" ) );
+ setWindowRole( "vlc-preferences" );
+ setWindowModality( Qt::WindowModal );
+
+ /* Whether we want it or not, we need to destroy on close to get
+ consistency when reset */
+ setAttribute( Qt::WA_DeleteOnClose );
/* Create Panels */
tree_panel = new QWidget;
main_panel->setLayout( main_panel_l );
/* Choice for types */
- types = new QGroupBox( "Show settings" );
+ types = new QGroupBox( qtr("Show settings") );
types->setAlignment( Qt::AlignHCenter );
QHBoxLayout *types_l = new QHBoxLayout;
types_l->setSpacing( 3 ); types_l->setMargin( 3 );
small = new QRadioButton( qtr( "Simple" ), types );
+ small->setToolTip( qtr( "Switch to simple preferences view" ) );
types_l->addWidget( small );
all = new QRadioButton( qtr("All"), types ); types_l->addWidget( all );
+ all->setToolTip( qtr( "Switch to full preferences view" ) );
types->setLayout( types_l );
small->setChecked( true );
/* Buttons */
QDialogButtonBox *buttonsBox = new QDialogButtonBox();
QPushButton *save = new QPushButton( qtr( "&Save" ) );
+ save->setToolTip( qtr( "Save and close the dialog" ) );
QPushButton *cancel = new QPushButton( qtr( "&Cancel" ) );
QPushButton *reset = new QPushButton( qtr( "&Reset Preferences" ) );
main_layout->setColumnMinimumWidth( 1, 10 );
main_layout->setColumnStretch( 0, 1 );
main_layout->setColumnStretch( 1, 0 );
- main_layout->setColumnStretch( 2, 3 );
+ main_layout->setColumnStretch( 2, 10 );
main_layout->setRowStretch( 2, 4 );
/* Margins */
tree_panel_l->setMargin( 1 );
- main_panel_l->setLayoutMargins( 6, 0, 0, 3, 3 );
+ main_panel_l->setContentsMargins( 6, 0, 0, 3 );
+ b_small = (p_intf->p_sys->i_screenHeight < 750);
+ if( b_small ) msg_Dbg( p_intf, "Small");
+ setMaximumHeight( p_intf->p_sys->i_screenHeight );
for( int i = 0; i < SPrefsMax ; i++ ) simple_panels[i] = NULL;
- if( config_GetInt( p_intf, "qt-advanced-pref" ) == 1 )
+ if( var_InheritBool( p_intf, "qt-advanced-pref" )
+ || var_InheritBool( p_intf, "advanced" ) )
setAdvanced();
else
setSmall();
BUTTONACT( small, setSmall() );
BUTTONACT( all, setAdvanced() );
- resize( 750, sizeHint().height() );
+ resize( 780, sizeHint().height() );
}
void PrefsDialog::setAdvanced()
/* If no simple_tree, create one, connect it */
if( !simple_tree )
{
- simple_tree = new SPrefsCatList( p_intf, tree_panel );
+ simple_tree = new SPrefsCatList( p_intf, tree_panel, b_small );
CONNECT( simple_tree,
currentItemChanged( int ),
this, changeSimplePanel( int ) );
if( !current_simple_panel )
{
current_simple_panel =
- new SPrefsPanel( p_intf, main_panel, SPrefsDefaultCat );
+ new SPrefsPanel( p_intf, main_panel, SPrefsDefaultCat, b_small );
simple_panels[SPrefsDefaultCat] = current_simple_panel;
main_panel_l->addWidget( current_simple_panel );
}
current_simple_panel = simple_panels[number];
if( !current_simple_panel )
{
- current_simple_panel = new SPrefsPanel( p_intf, main_panel, number );
+ current_simple_panel = new SPrefsPanel( p_intf, main_panel, number, b_small );
simple_panels[number] = current_simple_panel;
main_panel_l->addWidget( current_simple_panel );
}
/* Changing from one Advanced Panel to another */
void PrefsDialog::changeAdvPanel( QTreeWidgetItem *item )
{
+ if( item == NULL ) return;
PrefsItemData *data = item->data( 0, Qt::UserRole ).value<PrefsItemData*>();
if( advanced_panel )
}
/* Save to file */
- config_SaveConfigFile( p_intf, NULL );
-
- destroyPanels();
-
- hide();
-}
-
-void PrefsDialog::destroyPanels()
-{
- msg_Dbg( p_intf, "Destroying the Panels" );
- /* Delete the other panel in order to force its reload after clicking
- on apply. In fact, if we don't do that, the preferences from the other
- panels won't be accurate, so we would have to recreate the whole dialog,
- and we don't want that.*/
- if( small->isChecked() && advanced_panel )
- {
- /* Deleting only the active panel from the advanced config doesn't work
- because the data records of PrefsItemData contains still a
- reference to it only cleanAll() is sure to remove all Panels! */
- advanced_tree->cleanAll();
- advanced_panel = NULL;
- }
- if( all->isChecked() && current_simple_panel )
+ if( config_SaveConfigFile( p_intf, NULL ) != 0 )
{
- for( int i = 0 ; i< SPrefsMax; i++ )
- {
- if( simple_panels[i] )
- {
- delete simple_panels[i];
- simple_panels[i] = NULL;
- }
- }
- current_simple_panel = NULL;
+ ErrorsDialog::getInstance (p_intf)->addError( qtr( "Cannot save Configuration" ),
+ qtr("Preferences file could not be saved") );
}
+ accept();
}
-
/* Clean the preferences, dunno if it does something really */
void PrefsDialog::cancel()
{
- if( small->isChecked() && simple_tree )
- {
- for( int i = 0 ; i< SPrefsMax; i++ )
- if( simple_panels[i] ) simple_panels[i]->clean();
- }
- else if( all->isChecked() && advanced_tree )
- {
- advanced_tree->cleanAll();
- advanced_panel = NULL;
- }
- hide();
+ reject();
}
/* Reset all the preferences, when you click the button */
int ret = QMessageBox::question(
this,
qtr( "Reset Preferences" ),
- qtr( "This will reset your VLC media player preferences.\n"
- "Are you sure you want to continue?" ),
+ qtr( "Are you sure you want to reset your VLC media player preferences?" ),
QMessageBox::Ok | QMessageBox::Cancel,
QMessageBox::Ok);
{
config_ResetAll( p_intf );
config_SaveConfigFile( p_intf, NULL );
- /* FIXME reset the panels */
- destroyPanels();
+ getSettings()->clear();
+
+ accept();
}
}