#ifndef KDE_USE_FINAL #define TQT_NO_CAST_ASCII #endif // configuredialog_p.cpp: classes internal to ConfigureDialog // see configuredialog.cpp for details. // This must be first #ifdef HAVE_CONFIG_H #include #endif // my header: #include "configuredialog_p.h" // other KMail headers: #include "kmtransport.h" #include "globalsettings.h" #include "kmacctcachedimap.h" // other tdenetwork headers: (none) // other KDE headers: #include #include #include #include // TQt headers: #include #include #include #include #include #include // Other headers: #include NewIdentityDialog::NewIdentityDialog( const TQStringList & identities, TQWidget *parent, const char *name, bool modal ) : KDialogBase( parent, name, modal, i18n("New Identity"), Ok|Cancel|Help, Ok, true ) { setHelp( TQString::fromLatin1("configure-identity-newidentitydialog") ); TQWidget * page = makeMainWidget(); TQVBoxLayout * vlay = new TQVBoxLayout( page, 0, spacingHint() ); // row 0: line edit with label TQHBoxLayout * hlay = new TQHBoxLayout( vlay ); // inherits spacing mLineEdit = new KLineEdit( page ); mLineEdit->setFocus(); hlay->addWidget( new TQLabel( mLineEdit, i18n("&New identity:"), page ) ); hlay->addWidget( mLineEdit, 1 ); connect( mLineEdit, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(slotEnableOK(const TQString&)) ); mButtonGroup = new TQButtonGroup( page ); mButtonGroup->hide(); // row 1: radio button TQRadioButton *radio = new TQRadioButton( i18n("&With empty fields"), page ); radio->setChecked( true ); mButtonGroup->insert( radio, Empty ); vlay->addWidget( radio ); // row 2: radio button radio = new TQRadioButton( i18n("&Use Control Center settings"), page ); mButtonGroup->insert( radio, ControlCenter ); vlay->addWidget( radio ); // row 3: radio button radio = new TQRadioButton( i18n("&Duplicate existing identity"), page ); mButtonGroup->insert( radio, ExistingEntry ); vlay->addWidget( radio ); // row 4: combobox with existing identities and label hlay = new TQHBoxLayout( vlay ); // inherits spacing mComboBox = new TQComboBox( false, page ); mComboBox->insertStringList( identities ); mComboBox->setEnabled( false ); TQLabel *label = new TQLabel( mComboBox, i18n("&Existing identities:"), page ); label->setEnabled( false ); hlay->addWidget( label ); hlay->addWidget( mComboBox, 1 ); vlay->addStretch( 1 ); // spacer // enable/disable combobox and label depending on the third radio // button's state: connect( radio, TQT_SIGNAL(toggled(bool)), label, TQT_SLOT(setEnabled(bool)) ); connect( radio, TQT_SIGNAL(toggled(bool)), mComboBox, TQT_SLOT(setEnabled(bool)) ); enableButtonOK( false ); // since line edit is empty } NewIdentityDialog::DuplicateMode NewIdentityDialog::duplicateMode() const { int id = mButtonGroup->id( mButtonGroup->selected() ); assert( id == (int)Empty || id == (int)ControlCenter || id == (int)ExistingEntry ); return static_cast( id ); } void NewIdentityDialog::slotEnableOK( const TQString & proposedIdentityName ) { // OK button is disabled if TQString name = proposedIdentityName.stripWhiteSpace(); // name isn't empty if ( name.isEmpty() ) { enableButtonOK( false ); return; } // or name doesn't yet exist. for ( int i = 0 ; i < mComboBox->count() ; i++ ) if ( mComboBox->text(i) == name ) { enableButtonOK( false ); return; } enableButtonOK( true ); } ListView::ListView( TQWidget *parent, const char *name, int visibleItem ) : KListView( parent, name ) { setVisibleItem(visibleItem); } void ListView::resizeEvent( TQResizeEvent *e ) { KListView::resizeEvent(e); resizeColums(); } void ListView::showEvent( TQShowEvent *e ) { KListView::showEvent(e); resizeColums(); } void ListView::resizeColums() { int c = columns(); if( c == 0 ) { return; } int w1 = viewport()->width(); int w2 = w1 / c; int w3 = w1 - (c-1)*w2; for( int i=0; isizeHint().width() + lineWidth() * 2, s.height() ); } } TQSize ListView::sizeHint() const { TQSize s = TQListView::sizeHint(); int h = fontMetrics().height() + 2*itemMargin(); if( h % 2 > 0 ) { h++; } s.setHeight( h*mVisibleItem + lineWidth()*2 + header()->sizeHint().height()); return s; } static TQString flagPng = TQString::fromLatin1("/flag.png"); NewLanguageDialog::NewLanguageDialog( LanguageItemList & suppressedLangs, TQWidget *parent, const char *name, bool modal ) : KDialogBase( parent, name, modal, i18n("New Language"), Ok|Cancel, Ok, true ) { // layout the page (a combobox with label): TQWidget *page = makeMainWidget(); TQHBoxLayout *hlay = new TQHBoxLayout( page, 0, spacingHint() ); mComboBox = new TQComboBox( false, page ); hlay->addWidget( new TQLabel( mComboBox, i18n("Choose &language:"), page ) ); hlay->addWidget( mComboBox, 1 ); TQStringList pathList = KGlobal::dirs()->findAllResources( "locale", TQString::fromLatin1("*/entry.desktop") ); // extract a list of language tags that should not be included: TQStringList suppressedAcronyms; for ( LanguageItemList::Iterator lit = suppressedLangs.begin(); lit != suppressedLangs.end(); ++lit ) suppressedAcronyms << (*lit).mLanguage; // populate the combo box: for ( TQStringList::ConstIterator it = pathList.begin(); it != pathList.end(); ++it ) { KSimpleConfig entry( *it ); entry.setGroup( "KCM Locale" ); // full name: TQString name = entry.readEntry( "Name" ); // {2,3}-letter abbreviation: // we extract it from the path: "/prefix/de/entry.desktop" -> "de" TQString acronym = (*it).section( '/', -2, -2 ); if ( suppressedAcronyms.find( acronym ) == suppressedAcronyms.end() ) { // not found: TQString displayname = TQString::fromLatin1("%1 (%2)") .arg( name ).arg( acronym ); TQPixmap flag( locate("locale", acronym + flagPng ) ); mComboBox->insertItem( flag, displayname ); } } if ( !mComboBox->count() ) { mComboBox->insertItem( i18n("No More Languages Available") ); enableButtonOK( false ); } else mComboBox->listBox()->sort(); } TQString NewLanguageDialog::language() const { TQString s = mComboBox->currentText(); int i = s.findRev( '(' ); return s.mid( i + 1, s.length() - i - 2 ); } LanguageComboBox::LanguageComboBox( bool rw, TQWidget *parent, const char *name ) : TQComboBox( rw, parent, name ) { } int LanguageComboBox::insertLanguage( const TQString & language ) { static TQString entryDesktop = TQString::fromLatin1("/entry.desktop"); KSimpleConfig entry( locate("locale", language + entryDesktop) ); entry.setGroup( "KCM Locale" ); TQString name = entry.readEntry( "Name" ); TQString output = TQString::fromLatin1("%1 (%2)").arg( name ).arg( language ); insertItem( TQPixmap( locate("locale", language + flagPng ) ), output ); return listBox()->index( listBox()->findItem(output) ); } TQString LanguageComboBox::language() const { TQString s = currentText(); int i = s.findRev( '(' ); return s.mid( i + 1, s.length() - i - 2 ); } void LanguageComboBox::setLanguage( const TQString & language ) { TQString parenthizedLanguage = TQString::fromLatin1("(%1)").arg( language ); for (int i = 0; i < count(); i++) // ### FIXME: use .endWith(): if ( text(i).find( parenthizedLanguage ) >= 0 ) { setCurrentItem(i); return; } } // // // ProfileDialog // // ProfileDialog::ProfileDialog( TQWidget * parent, const char * name, bool modal ) : KDialogBase( parent, name, modal, i18n("Load Profile"), Ok|Cancel, Ok, true ) { // tmp. vars: TQWidget * page = makeMainWidget(); TQVBoxLayout * vlay = new TQVBoxLayout( page, 0, spacingHint() ); mListView = new KListView( page, "mListView" ); mListView->addColumn( i18n("Available Profiles") ); mListView->addColumn( i18n("Description") ); mListView->setFullWidth( true ); mListView->setAllColumnsShowFocus( true ); mListView->setSorting( -1 ); vlay->addWidget( new TQLabel( mListView, i18n("&Select a profile and click 'OK' to " "load its settings:"), page ) ); vlay->addWidget( mListView, 1 ); setup(); connect( mListView, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotSelectionChanged()) ); connect( mListView, TQT_SIGNAL(doubleClicked ( TQListViewItem *, const TQPoint &, int ) ), TQT_SLOT(slotOk()) ); connect( this, TQT_SIGNAL(finished()), TQT_SLOT(delayedDestruct()) ); enableButtonOK( false ); } void ProfileDialog::slotSelectionChanged() { enableButtonOK( mListView->selectedItem() ); } void ProfileDialog::setup() { mListView->clear(); // find all profiles (config files named "profile-xyz-rc"): const TQString profileFilenameFilter = TQString::fromLatin1("kmail/profile-*-rc"); mProfileList = KGlobal::dirs()->findAllResources( "data", profileFilenameFilter ); kdDebug(5006) << "Profile manager: found " << mProfileList.count() << " profiles:" << endl; // build the list and populate the list view: TQListViewItem * listItem = 0; for ( TQStringList::const_iterator it = mProfileList.begin() ; it != mProfileList.end() ; ++it ) { KConfig profile( *it, true /* read-only */, false /* no KDE global */ ); profile.setGroup("KMail Profile"); TQString name = profile.readEntry( "Name" ); if ( name.isEmpty() ) { kdWarning(5006) << "File \"" << (*it) << "\" doesn't provide a profile name!" << endl; name = i18n("Missing profile name placeholder","Unnamed"); } TQString desc = profile.readEntry( "Comment" ); if ( desc.isEmpty() ) { kdWarning(5006) << "File \"" << (*it) << "\" doesn't provide a description!" << endl; desc = i18n("Missing profile description placeholder","Not available"); } listItem = new TQListViewItem( mListView, listItem, name, desc ); } } void ProfileDialog::slotOk() { const int index = mListView->itemIndex( mListView->selectedItem() ); if ( index < 0 ) return; // none selected assert( (unsigned int)index < mProfileList.count() ); KConfig profile( *mProfileList.at(index), true, false ); emit profileSelected( &profile ); KDialogBase::slotOk(); } ConfigModuleWithTabs::ConfigModuleWithTabs( TQWidget * parent, const char * name ) : ConfigModule( parent, name ) { TQVBoxLayout *vlay = new TQVBoxLayout( this, 0, KDialog::spacingHint() ); mTabWidget = new TQTabWidget( this ); vlay->addWidget( mTabWidget ); } void ConfigModuleWithTabs::addTab( ConfigModuleTab* tab, const TQString & title ) { mTabWidget->addTab( tab, title ); connect( tab, TQT_SIGNAL(changed( bool )), this, TQT_SIGNAL(changed( bool )) ); } void ConfigModuleWithTabs::load() { for ( int i = 0 ; i < mTabWidget->count() ; ++i ) { ConfigModuleTab *tab = dynamic_cast( mTabWidget->page(i) ); if ( tab ) tab->load(); } KCModule::load(); } void ConfigModuleWithTabs::save() { KCModule::save(); for ( int i = 0 ; i < mTabWidget->count() ; ++i ) { ConfigModuleTab *tab = dynamic_cast( mTabWidget->page(i) ); if ( tab ) tab->save(); } } void ConfigModuleWithTabs::defaults() { ConfigModuleTab *tab = dynamic_cast( mTabWidget->currentPage() ); if ( tab ) tab->defaults(); KCModule::defaults(); } void ConfigModuleWithTabs::installProfile(KConfig * /* profile */ ) { for ( int i = 0 ; i < mTabWidget->count() ; ++i ) { ConfigModuleTab *tab = dynamic_cast( mTabWidget->page(i) ); if ( tab ) tab->installProfile(); } } void ConfigModuleTab::load() { doLoadFromGlobalSettings(); doLoadOther(); } void ConfigModuleTab::defaults() { // reset settings which are available via GlobalSettings to their defaults // (stolen from KConfigDialogManager::updateWidgetsDefault()) const bool bUseDefaults = GlobalSettings::self()->useDefaults( true ); doLoadFromGlobalSettings(); GlobalSettings::self()->useDefaults( bUseDefaults ); // reset other settings to default values doResetToDefaultsOther(); } void ConfigModuleTab::slotEmitChanged( void ) { emit changed( true ); } #include "configuredialog_p.moc"