diff --git a/src/EditProfileDialog.cpp b/src/EditProfileDialog.cpp index 0fbffe136..2d8aa821b 100644 --- a/src/EditProfileDialog.cpp +++ b/src/EditProfileDialog.cpp @@ -61,6 +61,11 @@ EditProfileDialog::EditProfileDialog(QWidget* parent) _ui = new Ui::EditProfileDialog(); _ui->setupUi(mainWidget()); + _pageInvalidated.resize( _ui->tabWidget->count() ); + + connect( _ui->tabWidget , SIGNAL(currentChanged(int)) , this , + SLOT(ensurePageLoaded(int)) ); + _tempProfile = new Profile; qDebug() << "Is modal = " << isModal(); @@ -109,11 +114,14 @@ void EditProfileDialog::setProfile(const QString& key) setCaption( i18n("Edit Profile \"%1\"",info->name()) ); // setup each page of the dialog - setupGeneralPage(info); - setupAppearancePage(info); - setupKeyboardPage(info); - setupScrollingPage(info); - setupAdvancedPage(info); + _pageInvalidated.fill(true); + ensurePageLoaded( _ui->tabWidget->currentIndex() ); + + // setupGeneralPage(info); + // setupAppearancePage(info); + // setupKeyboardPage(info); + // setupScrollingPage(info); + // setupAdvancedPage(info); if ( _tempProfile ) { @@ -121,6 +129,33 @@ void EditProfileDialog::setProfile(const QString& key) _tempProfile = new Profile; } } +void EditProfileDialog::ensurePageLoaded(int page) +{ + const Profile* info = SessionManager::instance()->profile(_profileKey); + + Q_ASSERT( _pageInvalidated.count() > page ); + Q_ASSERT( info ); + + if ( _pageInvalidated[page] ) + { + QWidget* pageWidget = _ui->tabWidget->widget(page); + + if ( pageWidget == _ui->generalTab ) + setupGeneralPage(info); + else if ( pageWidget == _ui->appearanceTab ) + setupAppearancePage(info); + else if ( pageWidget == _ui->scrollingTab ) + setupScrollingPage(info); + else if ( pageWidget == _ui->keyboardTab ) + setupKeyboardPage(info); + else if ( pageWidget == _ui->advancedTab ) + setupAdvancedPage(info); + else + Q_ASSERT(false); + + _pageInvalidated[page] = false; + } +} void EditProfileDialog::setupGeneralPage(const Profile* info) { _ui->profileNameEdit->setText( info->name() ); diff --git a/src/EditProfileDialog.h b/src/EditProfileDialog.h index d7d152b1d..4321b5ef8 100644 --- a/src/EditProfileDialog.h +++ b/src/EditProfileDialog.h @@ -87,6 +87,9 @@ protected: virtual bool eventFilter(QObject* watched , QEvent* event); private slots: + // sets up the specified tab page if necessary + void ensurePageLoaded(int); + // saves changes to profile void save(); @@ -187,6 +190,7 @@ private: Profile* _tempProfile; QString _profileKey; + QVector _pageInvalidated; QHash _previewedProperties; }; diff --git a/src/EditProfileDialog.ui b/src/EditProfileDialog.ui index 7251807e5..280c1b4e3 100644 --- a/src/EditProfileDialog.ui +++ b/src/EditProfileDialog.ui @@ -39,7 +39,7 @@ false - + General @@ -317,7 +317,7 @@ - + Appearance @@ -492,7 +492,7 @@ - + Keyboard Setup @@ -574,7 +574,7 @@ - + Scrolling @@ -744,7 +744,7 @@ - + Advanced