PreferencesDialog.cpp

Go to the documentation of this file.
00001 #include "PreferencesDialog.h"
00002 
00003 const QString PreferencesDialog::fontSizeNameList[] = { 
00004     QT_TR_NOOP( "VerySmall" ), QT_TR_NOOP( "Small" ), QT_TR_NOOP( "Medium" ), QT_TR_NOOP( "Large" ), QT_TR_NOOP( "VeryLarge" ) 
00005 };
00006 
00007 const QString PreferencesDialog::firstLanguageList[] = { 
00008     QString( "en" ), QString( "fr" ), QString( "es" ), QString( "ja" ) 
00009 };
00010 
00011 const QString PreferencesDialog::studyLanguageList[] = { 
00012     QString( "en" ), QString( "fr" ), QString( "es" ), QString( "ja" ), QString( "de" ), QString( "ar" ), QString( "bg" ), QString( "el" ),
00013     QString( "it" ), QString( "ko" ), QString( "nl" ), QString( "pt" ), QString( "ru" ), QString( "sw" ), QString( "th" ), QString( "vi" ),
00014     QString( "zh" )
00015 };
00016 
00017 PreferencesDialog::PreferencesDialog( QWidget* parent, Preferences* prefs ) 
00018     : QDialog( parent, 0, true ), prefs( prefs ), grabAccelKeyFor( NULL ), ignoreReturn( false ), keyboardAccelModified( false )  {
00019     init();
00020 }
00021 
00022 PreferencesDialog::~PreferencesDialog() {
00023     delete languageUpdateNotifier;
00024 }
00025 
00026 void PreferencesDialog::init() {
00027     tab = new QTabWidget( this, "Tab" );
00028 
00029     quizPage = new QWidget( tab, "QuizPage" );
00030 
00031     quizLengthOptionsPanel = new QVGroupBox( tr( "Length" ), quizPage, "QuizLengthOptionsPanel" );
00032     revealingOptionsPanel = new QHGroupBox( tr( "RevealingOrders" ), quizPage, "RevealingOptionsPanel" );
00033   
00034     sequencesViewPanel = new QVBox( revealingOptionsPanel ); 
00035     sequencesViewPanel->setSpacing( 2 );
00036     sequencesView = new SmartListView( sequencesViewPanel, "SequencesView" );
00037     sequencesView->addColumn( QString::null );
00038     sequencesView->header()->hide();
00039     sequencesViewButtons = new QHBox( sequencesViewPanel );
00040     sequencesViewButtons->setSpacing( 2 );
00041     //sequencesViewButtonsFiller = new QWidget( sequencesViewButtons, "SequenceViewButtonsFiller" ); 
00042     addSequenceButton = new QPushButton( "+", sequencesViewButtons, "AddSequenceButton" );
00043     QToolTip::add( addSequenceButton, tr( "Add revealing sequence" ) );
00044     connect( addSequenceButton, SIGNAL( clicked() ), this, SLOT( addSequence() ) );
00045     removeSequenceButton = new QPushButton( "-", sequencesViewButtons, "RemoveSequenceButton" );
00046     QToolTip::add( removeSequenceButton, tr( "Remove revealing sequence" ) );
00047     connect( removeSequenceButton, SIGNAL( clicked() ), this, SLOT( removeSequence() ) );
00048     //sequencesViewButtons->setStretchFactor( sequencesViewButtonsFiller, 1 );
00049 
00050     initSequences();
00051     connect( sequencesView, SIGNAL( selectionChanged( QListViewItem* ) ), this, SLOT( updateUi() ) );
00052 
00053     revealingOptionsPanel->addSpace( 6 );
00054 
00055     sequencesLabelBox = new QVGroupBox( tr( "QuizWindow" ), revealingOptionsPanel, "SequencesLabelBox" );
00056     sequencesLabel = new QLabel( sequencesLabelBox );
00057     sequencesLabel->setPixmap( Resource::loadPixmap( "SequenceMapLandscape" ) );
00058 
00059     sequencesViewPanel->setMaximumHeight( sequencesLabelBox->sizeHint().height() );
00060 
00061     quizLengthSlider = new QSlider( 0, TermScheduler::poolCount - 1, 1, 1, QSlider::Horizontal, quizLengthOptionsPanel, "QuizLengthSlider" );
00062     quizLengthLabelsPanel = new QHBox( quizLengthOptionsPanel, "QuizLengthLabelsPanel" );
00063     quizLengthShortestLabel = new QLabel( tr( "QuizLengthShortest" ), quizLengthLabelsPanel, "QuizLengthShortestLabel" );
00064     quizLengthMediumLabel = new QLabel( tr( "QuizLengthMedium" ), quizLengthLabelsPanel, "QuizLengthMediumLabel" );
00065     quizLengthMediumLabel->setAlignment( QLabel::AlignCenter );
00066     quizLengthLongestLabel = new QLabel( tr( "QuizLengthLongest" ), quizLengthLabelsPanel, "QuizLengthLongestLabel" );
00067     quizLengthLongestLabel->setAlignment( QLabel::AlignRight );
00068     
00069     quizLengthSlider->setValue( prefs->getQuizLength() ); 
00070 
00071     quizPageFiller = new QWidget( quizPage, "QuizPageFiller" );
00072 
00073     quizLayout = new QVBoxLayout( quizPage );
00074     quizLayout->addWidget( quizLengthOptionsPanel );
00075     quizLayout->addWidget( revealingOptionsPanel );
00076     quizLayout->addWidget( quizPageFiller, 1 );
00077 
00078     fontPage = new QWidget( tab, "FontPage" );
00079 
00080     //fontsPanel = new QVGroupBox( tr( "Fonts" ), fontPage, "FontsPanel" );
00081     fontsPanel = new QVBox( fontPage, "FontsPanel" );
00082     fontsPanel->setSpacing( 2 );
00083 
00084     labelsFontPanel = new QHBox( fontsPanel, "LabelsFontPanel" );
00085     labelsFontPanel->setSpacing( 2 );
00086     labelsFontLabel = new QLabel( tr( "LabelsFont" ), labelsFontPanel, "LabelsFontLabel" );
00087     labelsFontFamilyComboBox = new QComboBox( labelsFontPanel, "LabelsFontFamilyComboBox" );
00088     labelsFontSizeComboBox = new QComboBox( labelsFontPanel, "LabelsFontSizeComboBox" );
00089     resetDefaultLabelsFontButton = new QPushButton( tr( "ResetDefaultValue" ), labelsFontPanel, "ResetDefaultLabelsFontButton" );
00090     connect( resetDefaultLabelsFontButton, SIGNAL( clicked() ), this, SLOT( resetDefaultLabelsFont() ) );
00091 
00092     initFontFamilyValues( labelsFontFamilyComboBox );
00093     selectFontFamily( labelsFontFamilyComboBox, prefs->getLabelsFontFamily() );
00094     initFontSizeValues( labelsFontSizeComboBox );
00095     selectFontSize( labelsFontSizeComboBox, prefs->getLabelsFontSizeModifier() );
00096 
00097     fontPanel = new QHBox( fontsPanel, "FontPanel" );
00098     fontPanel->setSpacing( 2 );
00099     fontLabel = new QLabel( tr( "FieldsFont" ), fontPanel, "FontLabel" );
00100     fontFamilyComboBox = new QComboBox( fontPanel, "FontFamilyComboBox" );
00101     fontSizeComboBox = new QComboBox( fontPanel, "FontSizeComboBox" );
00102     resetDefaultFontButton = new QPushButton( tr( "ResetDefaultValue" ), fontPanel, "ResetDefaultFontButton" );
00103     connect( resetDefaultFontButton, SIGNAL( clicked() ), this, SLOT( resetDefaultFont() ) );
00104 
00105     initFontFamilyValues( fontFamilyComboBox );
00106     selectFontFamily( fontFamilyComboBox, prefs->getFontFamily() );
00107     initFontSizeValues( fontSizeComboBox );
00108     selectFontSize( fontSizeComboBox, prefs->getFontSizeModifier() );
00109 
00110     fontOverridesPanel = new QVGroupBox( tr( "LanguageFontOverrides" ), fontsPanel, "LanguageFontsPanel" );
00111     fontOverridesScrollView = new QScrollView( fontOverridesPanel, "FontOverridesScrollView" );
00112     fontOverridesScrollView->setResizePolicy( QScrollView::AutoOneFit );
00113     fontOverridesBox = new QWidget( fontOverridesScrollView->viewport() );
00114     fontOverridesBoxLayout = new QVBoxLayout( fontOverridesBox );
00115     fontOverridesScrollView->addChild( fontOverridesBox );
00116     initFontOverrides();
00117 
00118     fontPageFiller = new QWidget( fontPage, "FontPageFiller" );
00119 
00120     fontPageLayout = new QVBoxLayout( fontPage );
00121     fontPageLayout->setSpacing( 2 );
00122     fontPageLayout->addWidget( fontsPanel );
00123     fontPageLayout->addWidget( fontPageFiller, 1 );
00124 
00125     interfacePage = new QWidget( tab, "InterfacePage" );
00126 
00127     miscInterfaceOptionsPanel = new QGrid( 2, interfacePage, "MiscInterfaceOptionsPanel" );
00128 
00129     digraphPanel = new QVGroupBox( tr( "BuiltInSupportForAccents" ), miscInterfaceOptionsPanel, "DigraphPanel" );
00130     digraphCheckBox = new QCheckBox( tr( "DigraphesEnabled" ), digraphPanel, "DigraphCheckBox" );
00131     digraphCheckBox->setChecked( prefs->isDigraphEnabled() );
00132 
00133     hideQuizButtonPanel = new QVGroupBox( tr( "QuizOptions" ), miscInterfaceOptionsPanel, "HideQuizButtonPanel" );
00134     hideQuizButtonCheckBox = new QCheckBox( tr( "hideQuizButtons" ), hideQuizButtonPanel, "HideQuizButtonCheckBox" );
00135     hideQuizButtonCheckBox->setChecked( prefs->areQuizButtonsHidden() );
00136 
00137     showAltTextInTermListPanel = new QVGroupBox( tr( "GlossaryManagerOptions" ), miscInterfaceOptionsPanel, "ShowAltTextInTermListPanel" );
00138     showAltTextInTermListCheckBox = new QCheckBox( tr( "ShowAltInTermList" ), showAltTextInTermListPanel, "ShowAltInTermListCheckBox" );
00139     showAltTextInTermListCheckBox->setChecked( prefs->isAltInTermListShown() );
00140 
00141     keyboardAccelPanel = new QVGroupBox( tr( "Keyboard Accelerators" ), interfacePage, "KeyboardAccelPanel" );
00142     keyboardAccelListView = new SmartListView( keyboardAccelPanel, "KeyboardAccelListView" );
00143     keyboardAccelListView->addColumn( tr( "Action" ), 280 );
00144     keyboardAccelListView->addColumn( tr( "Key" ), 140 );
00145     keyboardAccelListView->setSorting( -1 );
00146     keyboardAccelListView->setAllColumnsShowFocus( true );
00147     keyboardAccelListView->setStretchColumn( 0 );
00148     int actionCount = sizeof( action ) / sizeof( QAction* );
00149     for( int i = actionCount - 1; i >= 0; i-- ) {
00150         KeyActionListViewItem* actionItem = new KeyActionListViewItem( keyboardAccelListView, action[ i ], (Action)i );
00151         actionItem->setText( 0, action[ i ]->text() );
00152         actionItem->setPixmap( 0, action[ i ]->iconSet().pixmap() );
00153         keyboardAccelListView->insertItem( actionItem );
00154     }
00155     connect( keyboardAccelListView, SIGNAL( returnPressed( QListViewItem* ) ), this, SLOT( keyActionClicked( QListViewItem* ) ) );
00156     connect( keyboardAccelListView, SIGNAL( currentChanged( QListViewItem* ) ), this, SLOT( cancelSetAccelKey() ) );
00157     connect( tab, SIGNAL( selected( const QString& ) ), this, SLOT( cancelSetAccelKey() ) );
00158 
00159     keyboardAccelButtonPanel = new QWidget( keyboardAccelPanel, "KeyboardAccelButtonPanel" );
00160     keyboardAccelButtonPanelFiller = new QWidget( keyboardAccelButtonPanel, "KeyboardAccelButtonPanelFiller" );  
00161     clearAccelKeyButton = new QPushButton( tr( "Clear key" ), keyboardAccelButtonPanel );
00162     setAccelKeyButton = new QPushButton( tr( "Set key" ), keyboardAccelButtonPanel );
00163     resetAccelKeyButton = new QPushButton( tr( "Reset key" ), keyboardAccelButtonPanel );
00164     
00165     keyboardAccelButtonPanelLayout = new QHBoxLayout( keyboardAccelButtonPanel );
00166     keyboardAccelButtonPanelLayout->setSpacing( 2 );
00167     keyboardAccelButtonPanelLayout->addWidget( keyboardAccelButtonPanelFiller, 1 );
00168     keyboardAccelButtonPanelLayout->addWidget( clearAccelKeyButton );
00169     keyboardAccelButtonPanelLayout->addWidget( setAccelKeyButton );
00170     keyboardAccelButtonPanelLayout->addWidget( resetAccelKeyButton );
00171 
00172     connect( clearAccelKeyButton, SIGNAL( clicked() ), this, SLOT( clearAccelKey() ) );
00173     connect( setAccelKeyButton, SIGNAL( clicked() ), this, SLOT( setAccelKey() ) );
00174     connect( resetAccelKeyButton, SIGNAL( clicked() ), this, SLOT( resetAccelKey() ) );
00175 
00176     interfacePageFiller = new QWidget( interfacePage, "InterfacePageFiller" );
00177 
00178     interfacePageLayout = new QVBoxLayout( interfacePage );
00179     interfacePageLayout->setSpacing( 2 );
00180     interfacePageLayout->addWidget( miscInterfaceOptionsPanel );
00181     interfacePageLayout->addWidget( keyboardAccelPanel );
00182     interfacePageLayout->addWidget( interfacePageFiller, 1 );
00183 
00184     languagePage = new QWidget( tab, "LanguagePage" );
00185 
00186     languagesPanel = new QVBox( languagePage, "LanguagesPanel" );
00187     languagesPanel->setSpacing( 2 );
00188 
00189     studyLanguagesListView = new SmartListView( languagesPanel, "StudyLanguagesListView" );
00190     studyLanguagesListView->setAllColumnsShowFocus( true );
00191     studyLanguagesListView->addColumn( tr( "StudyLanguages" ) );
00192     studyLanguagesListView->setStretchColumn( 0 );
00193     languagesPanel->setStretchFactor( studyLanguagesListView, 1 );
00194    
00195     languageUpdateNotifier = new LanguageUpdateNotifier();
00196     connect( languageUpdateNotifier, SIGNAL( languageAdded( const QString& ) ), this, SLOT( addFontOverride( const QString& ) ) );
00197     connect( languageUpdateNotifier, SIGNAL( languageRemoved( const QString& ) ), this, SLOT( removeFontOverride( const QString& ) ) );
00198 
00199     initStudyLanguageValues();
00200 
00201     languagesRightPanel = new QWidget( languagesPanel, "LanguagesRightPanel" );
00202     languagesRightPanelLayout = new QVBoxLayout( languagesRightPanel );
00203 
00204     languagesRightPanelFiller = new QWidget( languagesRightPanel, "LanguageRightPanelFiller" );
00205 
00206     languagesRightPanelLayout->addWidget( languagesRightPanelFiller, 1 );
00207 
00208     languagePageFiller = new QWidget( languagePage, "LanguagePageFiller" );
00209 
00210     languageLayout = new QVBoxLayout( languagePage );
00211     languageLayout->setSpacing( 2 );
00212     languageLayout->addWidget( languagesPanel );
00213     languageLayout->addWidget( languagePageFiller, 1 );
00214     tab->addTab( quizPage, tr( "Quiz" ) );
00215     tab->addTab( languagePage, tr( "Languages" ) );
00216     tab->addTab( fontPage, tr( "Fonts" ) );
00217     tab->addTab( interfacePage, tr( "Interface" ) );
00218 
00219     mainLayout = new QVBoxLayout( this );
00220     mainLayout->addWidget( tab, 1 );
00221 
00222     setCaption( tr( "Preferences..." ) );
00223 
00224     updateUi();
00225 }
00226 
00227 void PreferencesDialog::initFontFamilyValues( QComboBox* comboBox, bool withEmptyEntry = false ) const {
00228     QFontDatabase fontDatabase;
00229     QStringList families = fontDatabase.families( false );
00230     if( withEmptyEntry ) 
00231         comboBox->insertItem( QString::null );
00232     comboBox->insertStringList( families );
00233 }
00234 
00235 void PreferencesDialog::initFontSizeValues( QComboBox* comboBox, bool withEmptyEntry = false ) const {
00236     int fontSizeNameListLength = sizeof( fontSizeNameList ) / sizeof( QString );
00237     if( withEmptyEntry ) 
00238         comboBox->insertItem( QString::null );
00239     for( int i = 0; i < fontSizeNameListLength; i++ )
00240         comboBox->insertItem( tr( fontSizeNameList[ i ] ) );
00241 }
00242 
00243 void PreferencesDialog::initFontOverrides() {
00244     QValueList<QString> lang( prefs->getStudyLanguages() );
00245     int i = 0;
00246     for( QValueList<QString>::ConstIterator it = lang.begin(); it != lang.end(); it++, i++ ) {
00247         QString language( *it );
00248         QHBox* fontOverrideBox = new QHBox( fontOverridesBox );
00249         fontOverrideBox->setSpacing( 2 );
00250         fontOverrideBox->setMargin( 2 );
00251         QLabel* fontOverrideLabel = new QLabel( QObject::tr( language ), fontOverrideBox );
00252         QComboBox* fontOverrideFamilyComboBox = new QComboBox( fontOverrideBox );
00253         initFontFamilyValues( fontOverrideFamilyComboBox, true );
00254         if( prefs->isFontOverrideFamilyDefined( language ) ) 
00255             selectFontFamily( fontOverrideFamilyComboBox, prefs->getFontOverrideFamily( language ) );
00256         QComboBox* fontOverrideSizeComboBox = new QComboBox( fontOverrideBox );
00257         initFontSizeValues( fontOverrideSizeComboBox, true );
00258         if( prefs->isFontOverrideSizeDefined( language ) ) 
00259             selectFontSize( fontOverrideSizeComboBox, prefs->getFontOverrideSize( language ), true );
00260         fontOverrideBox->setStretchFactor( fontOverrideLabel, 1 );
00261 
00262         fontOverrideBoxes.append( fontOverrideBox );
00263         fontOverrideLabels.append( fontOverrideLabel );
00264         fontOverrideFamilyComboBoxes.append( fontOverrideFamilyComboBox );
00265         fontOverrideSizeComboBoxes.append( fontOverrideSizeComboBox );
00266 
00267         fontOverridesBoxLayout->addWidget( fontOverrideBox, 0 );
00268     }
00269     fontOverridesBoxFiller = new QWidget( fontOverridesBox );
00270     fontOverridesBoxLayout->addWidget( fontOverridesBoxFiller, 1 );
00271 }
00272 
00273 void PreferencesDialog::initSequences() {
00274     int seqCount = prefs->getRevealingSequenceCount();
00275     for( int i = 0; i < seqCount; i++ ) {
00276         Sequence seq = prefs->getRevealingSequenceAt( i );
00277         SequenceListItem* item = new SequenceListItem( sequencesView, seq.toHumanReadableString(), seq ); 
00278         item->setOn( seq.isEnabled() );
00279     }
00280 }
00281 
00282 void PreferencesDialog::initStudyLanguageValues() const {
00283     int studyLanguageListLength = sizeof( studyLanguageList ) / sizeof( QString );
00284     for( int i = 0; i < studyLanguageListLength; i++ ) {
00285         StudyLanguageItem* lang = new StudyLanguageItem( studyLanguagesListView, languageUpdateNotifier );
00286         lang->setText( 0, QObject::tr( studyLanguageList[ i ] ) );
00287         bool isStudied( prefs->isStudyLanguage( studyLanguageList[ i ] ) );
00288         lang->setOn( isStudied );
00289         studyLanguagesListView->insertItem( lang );
00290     }
00291 }
00292 
00293 void PreferencesDialog::selectFontFamily( QComboBox* comboBox, const QString& fontFamily ) {
00294     for( int i = 0; i < comboBox->count(); i++ ) {
00295         if( comboBox->text( i ) == fontFamily )
00296             comboBox->setCurrentItem( i );
00297     }
00298 }
00299 
00300 void PreferencesDialog::selectFontSize( QComboBox* comboBox, int fontSizeModifier, bool withEmptyEntry = false ) {
00301     int fontSizeNameListLength = sizeof( fontSizeNameList ) / sizeof( QString );
00302     int sizeIndex = fontSizeModifier + ( fontSizeNameListLength - 1 ) / 2;
00303     if( withEmptyEntry )
00304         sizeIndex++;
00305     comboBox->setCurrentItem( sizeIndex );
00306 }
00307 
00308 void PreferencesDialog::selectLanguage( QComboBox* comboBox, const QString& langCode ) {
00309     int itemCount = comboBox->count();
00310     for( int i = 0; i < itemCount; i++ ) {
00311         if( comboBox->text( i ) == QObject::tr( langCode ) ) {
00312             comboBox->setCurrentItem( i );
00313             return;
00314         }
00315     }
00316 }
00317 
00318 void PreferencesDialog::accept() {
00319     cancelSetAccelKey();
00320 
00321     if( !isRevealingSequenceSelectionValid() ) {
00322         tab->showPage( quizPage ); 
00323         QMessageBox::warning( this, QObject::tr( "Warning" ), tr( "RevealingOrderMandatory" ) );
00324         return;
00325     }
00326 
00327     if( !isStudyLanguageSelectionValid() ) {
00328         tab->showPage( languagePage ); 
00329         QMessageBox::warning( this, QObject::tr( "Warning" ), tr( "StudyLanguagesMandatory" ) );
00330         return;
00331     }
00332 
00333     prefs->setQuizLength( quizLengthSlider->value() );
00334 
00335     prefs->clearRevealingSequences();
00336     for( SequenceListItem* item = (SequenceListItem*)sequencesView->firstChild(); item; item = (SequenceListItem*)item->nextSibling() )
00337         prefs->addRevealingSequence( item->getSequence() );
00338 
00339     prefs->setLabelsFontFamily( labelsFontFamilyComboBox->text( labelsFontFamilyComboBox->currentItem() ) );
00340     int fontSizeNameListLength = sizeof( fontSizeNameList ) / sizeof( QString );
00341     int labelsFontSizeModifier =  labelsFontSizeComboBox->currentItem() - ( fontSizeNameListLength - 1 ) / 2;
00342     prefs->setLabelsFontSizeModifier( labelsFontSizeModifier );
00343 
00344     prefs->setFontFamily( fontFamilyComboBox->text( fontFamilyComboBox->currentItem() ) );
00345     int fontSizeModifier =  fontSizeComboBox->currentItem() - ( fontSizeNameListLength - 1 ) / 2;
00346     prefs->setFontSizeModifier( fontSizeModifier );
00347 
00348     prefs->clearFontOverrideFamilies();
00349     prefs->clearFontOverrideSizes();
00350     int fontOverrideCount = fontOverrideLabels.count();
00351     for( int i = 0; i < fontOverrideCount; i++ ) {
00352         const QString& language = Util::getLanguageCode( fontOverrideLabels.at( i )->text() );
00353         if( fontOverrideFamilyComboBoxes.at( i )->currentItem() > 0 )
00354             prefs->setFontOverrideFamily( language, fontOverrideFamilyComboBoxes.at( i )->currentText() );
00355         if( fontOverrideSizeComboBoxes.at( i )->currentItem() > 0 ) {
00356             int fontSizeModifier =  ( fontOverrideSizeComboBoxes.at( i )->currentItem() - 1 ) - ( fontSizeNameListLength - 1 ) / 2;
00357             prefs->setFontOverrideSize( language, fontSizeModifier );
00358         }
00359     }
00360 
00361     bool firstLanguageExists = false;
00362     bool testLanguageExists = false;
00363     prefs->clearStudyLanguages();
00364     for( QCheckListItem* item = (QCheckListItem*)studyLanguagesListView->firstChild(); item; item = (QCheckListItem*)item->nextSibling() ) {
00365         if( item->isOn() ) {
00366             QString langCode( Util::getLanguageCode( item->text() ) );
00367             prefs->addStudyLanguage( langCode );
00368             if( !firstLanguageExists )
00369                 firstLanguageExists = ( prefs->getFirstLanguage() == langCode );
00370             if( !testLanguageExists )
00371                 testLanguageExists = (prefs->getTestLanguage() == langCode );
00372         }
00373     }
00374     if( !firstLanguageExists )
00375         prefs->setFirstLanguage( QString::null );
00376     if( !testLanguageExists )
00377         prefs->setTestLanguage( QString::null );
00378 
00379     prefs->setDigraphEnabled( digraphCheckBox->isOn() );
00380     prefs->setQuizButtonsHidden( hideQuizButtonCheckBox->isOn() );
00381     prefs->setAltInTermListShown( showAltTextInTermListCheckBox->isOn() );
00382 
00383     if( keyboardAccelModified ) {
00384         for( KeyActionListViewItem* item = (KeyActionListViewItem*)keyboardAccelListView->firstChild(); item ; 
00385             item = (KeyActionListViewItem*)item->nextSibling() ) {
00386             QAction *action = item->getAction();
00387             action->setAccel( item->getKey() );
00388             prefs->setAccelerator( item->getActionIndex(), item->getKey() );
00389         }
00390     }
00391 
00392     QDialog::accept();
00393 }
00394 
00395 void PreferencesDialog::updateUi() {
00396     removeSequenceButton->setEnabled( sequencesView->currentItem() ); 
00397 }
00398 
00399 bool PreferencesDialog::isRevealingSequenceSelectionValid() const {
00400     for( SequenceListItem* item = (SequenceListItem*)sequencesView->firstChild(); item; item = (SequenceListItem*)item->nextSibling() ) {
00401         if( item->isOn() )
00402             return( true );
00403     }
00404 
00405     return( false );
00406 }
00407 
00408 bool PreferencesDialog::isRevealingSequenceDefined( const QString& seqStr ) const {
00409     for( SequenceListItem* item = (SequenceListItem*)sequencesView->firstChild(); item; item = (SequenceListItem*)item->nextSibling() ) {
00410         if( item->getSequence().toHumanReadableString() == seqStr )
00411             return( true );
00412     }
00413 
00414     return( false );
00415 }
00416 
00417 bool PreferencesDialog::isStudyLanguageSelectionValid() const {
00418     int checkedLangCount = 0;
00419     for( QCheckListItem* item = (QCheckListItem*)studyLanguagesListView->firstChild(); item; item = (QCheckListItem*)item->nextSibling() ) {
00420         if( item->isOn() )
00421             checkedLangCount++;
00422     }
00423     return( checkedLangCount >= 2 );
00424 }
00425 
00426 void PreferencesDialog::resizeEvent( QResizeEvent* evt ) {
00427     QString pictFilename( "SequenceMap" + (QString)( evt->size().width() > evt->size().height() ? "Landscape" : "Portrait" ) );
00428     sequencesLabel->setPixmap( Resource::loadPixmap( pictFilename ) );
00429     sequencesViewPanel->setMaximumHeight( sequencesLabelBox->sizeHint().height() );
00430     QDialog::resizeEvent( evt );
00431 }
00432 
00433 void PreferencesDialog::resetDefaultLabelsFont() {
00434     selectFontFamily( labelsFontFamilyComboBox, prefs->getDefaultLabelsFontFamily() );
00435     selectFontSize( labelsFontSizeComboBox, prefs->getDefaultLabelsFontSizeModifier() );
00436 }
00437 
00438 void PreferencesDialog::resetDefaultFont() {
00439     selectFontFamily( fontFamilyComboBox, prefs->getDefaultFontFamily() );
00440     selectFontSize( fontSizeComboBox, prefs->getDefaultFontSizeModifier() );
00441 }
00442 
00443 void PreferencesDialog::addFontOverride( const QString& language ) {
00444     // Do nothing if the font override already exists.
00445     int fontOverrideCount = fontOverrideLabels.count();
00446     for( int i = 0; i < fontOverrideCount; i++ ) {
00447         if( fontOverrideLabels.at( i )->text() == QObject::tr( language ) )
00448             return;
00449     }
00450     
00451     QHBox* fontOverrideBox = new QHBox( fontOverridesBox );
00452     fontOverrideBox->setSpacing( 2 );
00453     fontOverrideBox->setMargin( 2 );
00454     QLabel* fontOverrideLabel = new QLabel( QObject::tr( language ), fontOverrideBox );
00455     QComboBox* fontOverrideFamilyComboBox = new QComboBox( fontOverrideBox );
00456     initFontFamilyValues( fontOverrideFamilyComboBox, true );
00457     if( prefs->isFontOverrideFamilyDefined( language ) ) 
00458         selectFontFamily( fontOverrideFamilyComboBox, prefs->getFontOverrideFamily( language ) );
00459     QComboBox* fontOverrideSizeComboBox = new QComboBox( fontOverrideBox );
00460     initFontSizeValues( fontOverrideSizeComboBox, true );
00461     if( prefs->isFontOverrideSizeDefined( language ) ) 
00462         selectFontSize( fontOverrideSizeComboBox, prefs->getFontOverrideSize( language ), true );
00463     fontOverrideBox->setStretchFactor( fontOverrideLabel, 1 );
00464 
00465     fontOverrideBoxes.append( fontOverrideBox );
00466     fontOverrideLabels.append( fontOverrideLabel );
00467     fontOverrideFamilyComboBoxes.append( fontOverrideFamilyComboBox );
00468     fontOverrideSizeComboBoxes.append( fontOverrideSizeComboBox );
00469 
00470     int indexOfFiller = fontOverridesBoxLayout->findWidget( fontOverridesBoxFiller );
00471     fontOverridesBoxLayout->insertWidget( indexOfFiller, fontOverrideBox ); 
00472 }
00473 
00474 void PreferencesDialog::removeFontOverride( const QString& language ) {
00475     int fontOverrideCount = fontOverrideLabels.count();
00476     for( int i = 0; i < fontOverrideCount; i++ ) {
00477         if( fontOverrideLabels.at( i )->text() == QObject::tr( language ) ) {
00478             QHBox* fontOverrideBox = fontOverrideBoxes.at( i );
00479 
00480             fontOverrideLabels.remove( i );
00481             fontOverrideFamilyComboBoxes.remove( i );
00482             fontOverrideSizeComboBoxes.remove( i );
00483             fontOverrideBoxes.remove( i );
00484             
00485             fontOverridesBox->removeChild( fontOverrideBox );
00486 
00487             break;
00488         }
00489     }
00490 }
00491 
00492 void PreferencesDialog::setAccelKey() {
00493     KeyActionListViewItem* item = (KeyActionListViewItem*)keyboardAccelListView->currentItem();
00494     if( item == NULL ) 
00495         return;
00496     item->setText( 1, tr( "<press key>" ) ); 
00497     grabAccelKeyFor = item;
00498     grabKeyboard();  
00499 }
00500 
00501 void PreferencesDialog::clearAccelKey() {
00502     cancelSetAccelKey();
00503 
00504     KeyActionListViewItem* item = (KeyActionListViewItem*)keyboardAccelListView->currentItem();
00505     if( item == NULL ) 
00506         return;
00507     item->setKey( 0 );
00508     keyboardAccelModified = true;
00509 }
00510 
00511 void PreferencesDialog::resetAccelKey() {
00512     cancelSetAccelKey();
00513 
00514     KeyActionListViewItem* item = (KeyActionListViewItem*)keyboardAccelListView->currentItem();
00515     if( item == NULL ) 
00516         return;
00517     item->setKey( prefs->getDefaultAccelerator( item->getActionIndex() ) );
00518     keyboardAccelModified = true;
00519 }
00520 
00521 void PreferencesDialog::cancelSetAccelKey() {
00522     if( grabAccelKeyFor != NULL ) {
00523         KeyActionListViewItem* ka = (KeyActionListViewItem*)grabAccelKeyFor;
00524         ka->updateText();
00525         grabAccelKeyFor = NULL;
00526         releaseKeyboard();
00527     }
00528 }
00529 
00530 void PreferencesDialog::keyActionClicked( QListViewItem* ) {
00531     ignoreReturn = true;
00532     setAccelKey();
00533 }
00534 
00535 void PreferencesDialog::keyPressEvent( QKeyEvent *evt ) {
00536     if( grabAccelKeyFor != NULL ) {
00537         switch (evt->key()) {
00538             case Key_Shift:
00539             case Key_Control:
00540             case Key_Meta:
00541             case Key_Alt:
00542             case Key_CapsLock:
00543             case Key_NumLock:
00544             case Key_ScrollLock:
00545             case Key_F22:
00546                 evt->ignore();
00547                 break;
00548             default:
00549                 if( ignoreReturn && evt->key() == Key_Return ) {
00550                     evt->ignore();
00551                     break;
00552                 }
00553                 //      printf( "key: %x modif: %x\n", evt->key(), evt->state() );
00554 
00555                 KeyActionListViewItem *ka = (KeyActionListViewItem*)grabAccelKeyFor;
00556 
00557                 int keyCode = evt->key();
00558                 if( (evt->state() & ShiftButton) != 0 )
00559                     keyCode |= SHIFT;
00560                 if( (evt->state() & AltButton) != 0 )
00561                     keyCode |= ALT;
00562                 if( (evt->state() & ControlButton) != 0 )
00563                     keyCode |= CTRL;      
00564 
00565                 //    printf( "keycode: %x\n", keyCode );
00566                 releaseKeyboard();
00567 
00568                 // Check for duplicate key codes
00569                 bool cancelBinding = false;
00570                 for( KeyActionListViewItem *item = (KeyActionListViewItem*)keyboardAccelListView->firstChild(); item != NULL; 
00571                     item = (KeyActionListViewItem*)item->nextSibling() ) {
00572                     if( item == ka ) 
00573                         continue;
00574 
00575                     if( item->getKey() == keyCode ) {
00576                         int sel = QMessageBox::warning( this, tr( "Duplicate key binding" ),
00577                         tr( "Key '" ) + Util::describeKey( keyCode ) + tr( "'\nis currently assigned to\n'" ) + item->getAction()->text() +
00578                             tr( "'.\nOverwrite the current assignment?" ), QMessageBox::No, QMessageBox::Yes );
00579                         if( sel == QMessageBox::Yes ) 
00580                             item->setKey( 0 );
00581                         else {
00582                             cancelBinding = true;
00583                             break;
00584                         }
00585                     }
00586                 }
00587 
00588                 if( cancelBinding ) 
00589                     ka->updateText();
00590                 else {
00591                     ka->setKey( keyCode );
00592                     keyboardAccelModified = true;
00593                 }
00594 
00595                 grabAccelKeyFor = NULL;
00596                 evt->accept();
00597                 break;
00598         }
00599     }
00600     ignoreReturn = false;
00601 
00602     QDialog::keyPressEvent( evt );
00603 }
00604 
00605 void PreferencesDialog::addSequence() {
00606     SequenceDialog dialog( prefs, this );
00607     dialog.showMaximized();
00608     int result = dialog.exec();
00609     if( result ) {
00610         Sequence sequence = dialog.getSequence();
00611         // Just add new sequence.  Ignore duplicates.
00612         if( !isRevealingSequenceDefined( sequence.toHumanReadableString() ) ) {
00613             SequenceListItem* item = new SequenceListItem( sequencesView, sequence.toHumanReadableString(), sequence ); 
00614             item->setOn( true );
00615         }
00616     }
00617 }
00618 
00619 void PreferencesDialog::removeSequence() {
00620     QListViewItem* currSeqItem = sequencesView->currentItem();
00621     if( currSeqItem ) {
00622         delete( currSeqItem );
00623         updateUi();
00624     }
00625 }

Generated on Sun Mar 1 17:30:47 2009 for toMOTko by  doxygen 1.5.6