summaryrefslogtreecommitdiffstats
path: root/kontact/src/profiledialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kontact/src/profiledialog.cpp')
-rw-r--r--kontact/src/profiledialog.cpp267
1 files changed, 267 insertions, 0 deletions
diff --git a/kontact/src/profiledialog.cpp b/kontact/src/profiledialog.cpp
new file mode 100644
index 000000000..9525c968a
--- /dev/null
+++ b/kontact/src/profiledialog.cpp
@@ -0,0 +1,267 @@
+/*
+ This file is part of KDE Kontact.
+
+ Copyright (c) 2007 Frank Osterfeld <frank.osterfeld@kdemail.net>
+
+ 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.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include "profiledialog.h"
+#include "profilemanager.h"
+
+#include <kfiledialog.h>
+#include <klistview.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qstring.h>
+
+Kontact::ProfileDialog::ProfileDialog( QWidget* parent, WFlags flags ) : KDialogBase( parent, /*name=*/0, /*modal=*/true, /*caption=*/QString(), /*buttonMask=*/KDialogBase::Ok|KDialogBase::Close )
+{
+ setWFlags( flags );
+ setCaption( i18n("Configure Profiles") );
+ setButtonOK( i18n("Load Profile") );
+
+ QWidget* mainWidget = new QWidget( this );
+
+ QHBoxLayout* horizontalLayout = new QHBoxLayout( mainWidget );
+ horizontalLayout->setSpacing( 5 );
+
+ m_list = new KListView( mainWidget );
+ m_list->addColumn( i18n("Name") );
+ m_list->addColumn( i18n("Description") );
+ m_list->setSelectionMode( QListView::Single );
+ m_list->setItemsRenameable( true );
+ m_list->setRenameable( NameColumn, true );
+ m_list->setRenameable( DescriptionColumn, true );
+
+ connect( m_list, SIGNAL( selectionChanged() ),
+ this, SLOT( listSelectionChanged() ) );
+ connect( m_list, SIGNAL( itemRenamed( QListViewItem*, const QString&, int ) ),
+ this, SLOT( listItemRenamed( QListViewItem*, const QString&, int ) ) );
+ horizontalLayout->addWidget( m_list );
+
+ QVBoxLayout* buttonLayout = new QVBoxLayout( horizontalLayout );
+ buttonLayout->setSpacing( 5 );
+
+ m_newProfileButton = new QPushButton( mainWidget );
+ m_newProfileButton->setText( i18n("New Profile") );
+ connect( m_newProfileButton, SIGNAL( clicked() ),
+ this, SLOT( addNewProfile() ) );
+ buttonLayout->addWidget( m_newProfileButton );
+
+ m_deleteProfileButton = new QPushButton( mainWidget );
+ m_deleteProfileButton->setText( i18n("Delete Profile") );
+ m_deleteProfileButton->setEnabled( false );
+ connect( m_deleteProfileButton, SIGNAL( clicked() ),
+ this, SLOT( deleteSelectedProfile() ) );
+ buttonLayout->addWidget( m_deleteProfileButton );
+
+ m_saveProfileButton = new QPushButton( mainWidget );
+ m_saveProfileButton->setText( i18n("Save Profile") );
+ m_saveProfileButton->setEnabled( false );
+ connect( m_saveProfileButton, SIGNAL( clicked() ),
+ this, SLOT( saveToSelectedProfile() ) );
+ buttonLayout->addWidget( m_saveProfileButton );
+
+ buttonLayout->addStretch();
+
+ m_importProfileButton = new QPushButton( mainWidget );
+ m_importProfileButton->setText( i18n("Import Profile") );
+ connect( m_importProfileButton, SIGNAL( clicked() ),
+ this, SLOT( importProfile() ) );
+ buttonLayout->addWidget( m_importProfileButton );
+
+ m_exportProfileButton = new QPushButton( mainWidget );
+ m_exportProfileButton->setText( i18n("Export Profile") );
+ m_exportProfileButton->setEnabled( false );
+ connect( m_exportProfileButton, SIGNAL( clicked() ),
+ this, SLOT( exportSelectedProfile() ) );
+ buttonLayout->addWidget( m_exportProfileButton );
+
+ setMainWidget( mainWidget );
+
+ connect( Kontact::ProfileManager::self(), SIGNAL( profileAdded( const QString& ) ),
+ this, SLOT( profileAdded( const QString& ) ) );
+ connect( Kontact::ProfileManager::self(), SIGNAL( profileRemoved( const QString& ) ),
+ this, SLOT( profileRemoved( const QString& ) ) );
+ connect( Kontact::ProfileManager::self(), SIGNAL( profileLoaded( const QString& ) ),
+ this, SLOT( profileLoaded( const QString& ) ) );
+ connect( Kontact::ProfileManager::self(), SIGNAL( profileUpdated( const QString& ) ),
+ this, SLOT( profileUpdated( const QString& ) ) );
+
+ const QValueList<Kontact::Profile> profiles = Kontact::ProfileManager::self()->profiles();
+ for ( QValueList<Kontact::Profile>::ConstIterator it = profiles.begin(), end = profiles.end(); it != end; ++it )
+ {
+ profileAdded( (*it).id() );
+ }
+ updateButtonState();
+}
+
+void Kontact::ProfileDialog::slotOk()
+{
+ loadSelectedProfile();
+ KDialogBase::slotOk();
+}
+
+QString Kontact::ProfileDialog::selectedProfile() const
+{
+ return m_itemToProfile[m_list->selectedItem()];
+}
+
+void Kontact::ProfileDialog::loadSelectedProfile()
+{
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( selectedProfile() );
+ if ( profile.isNull() )
+ return;
+ Kontact::ProfileManager::self()->loadProfile( profile.id() );
+}
+
+void Kontact::ProfileDialog::profileLoaded( const QString& id )
+{
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( id );
+ if ( profile.isNull() )
+ return;
+ KMessageBox::information( this, i18n("The profile \"%1\" was successfully loaded. Some profile settings require a restart to get activated.").arg( profile.name() ), i18n("Profile Loaded") );
+}
+
+void Kontact::ProfileDialog::saveToSelectedProfile()
+{
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( selectedProfile() );
+ if ( profile.isNull() )
+ return;
+ if ( KMessageBox::Yes != KMessageBox::warningYesNo( this, i18n("The profile \"%1\" will be overwritten with the current settings. Are you sure?").arg( profile.name() ), i18n("Save to Profile"), KStdGuiItem::overwrite(), KStdGuiItem::cancel() ) )
+ return;
+ Kontact::ProfileManager::self()->saveToProfile( profile.id() );
+}
+
+void Kontact::ProfileDialog::deleteSelectedProfile()
+{
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( selectedProfile() );
+ if ( profile.isNull() )
+ return;
+ if ( KMessageBox::Yes != KMessageBox::warningYesNo( this, i18n("Do you really want to delete the profile \"%1\"? All profile settings will be lost!").arg( profile.name() ), i18n("Delete Profile"), KStdGuiItem::del(), KStdGuiItem::cancel() ) )
+ return;
+ Kontact::ProfileManager::self()->removeProfile( profile );
+}
+
+void Kontact::ProfileDialog::exportSelectedProfile()
+{
+ const QString id = selectedProfile();
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( id );
+ if ( profile.isNull() )
+ return;
+ const QString path = KFileDialog::getExistingDirectory( QString(), this, i18n("Select Profile Folder") );
+ if ( path.isNull() )
+ return;
+ const Kontact::ProfileManager::ExportError error = Kontact::ProfileManager::self()->exportProfileToDirectory( id, path );
+ if ( error == Kontact::ProfileManager::SuccessfulExport )
+ {
+ KMessageBox::information( this, i18n("The profile \"%1\" was successfully exported.").arg( profile.name() ), i18n("Profile Exported") );
+ }
+ else
+ {
+ // TODO print error
+ }
+}
+
+void Kontact::ProfileDialog::importProfile()
+{
+ const QString path = KFileDialog::getExistingDirectory( QString(), this, i18n("Select Profile Folder") );
+ if ( path.isNull() )
+ return;
+ const Kontact::ProfileManager::ImportError error = Kontact::ProfileManager::self()->importProfileFromDirectory( path );
+ if ( error != Kontact::ProfileManager::SuccessfulImport )
+ {
+ // TODO print error
+ }
+}
+
+void Kontact::ProfileDialog::profileAdded( const QString& id )
+{
+ Q_ASSERT( !m_profileToItem[id] );
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( id );
+ Q_ASSERT( !profile.isNull() );
+ QListViewItem* const item = new QListViewItem( m_list );
+ m_profileToItem[id] = item;
+ m_itemToProfile[item] = id;
+ profileUpdated( id );
+}
+
+void Kontact::ProfileDialog::profileRemoved( const QString& id )
+{
+ QListViewItem* item = m_profileToItem[id];
+ Q_ASSERT( item );
+ m_profileToItem.remove( id );
+ m_itemToProfile.remove( item );
+ delete item;
+}
+
+void Kontact::ProfileDialog::profileUpdated( const QString& id )
+{
+ QListViewItem* item = m_profileToItem[id];
+ Q_ASSERT( item );
+ const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( id );
+ Q_ASSERT( !profile.isNull() );
+ item->setText( NameColumn, profile.name() );
+ item->setText( DescriptionColumn, profile.description() );
+}
+
+void Kontact::ProfileDialog::addNewProfile()
+{
+ Kontact::Profile profile( Kontact::ProfileManager::self()->generateNewId(), true );
+ profile.setName( i18n("New profile") );
+ profile.setDescription( i18n("Enter description") );
+ Kontact::ProfileManager::self()->addProfile( profile );
+}
+
+void Kontact::ProfileDialog::listItemRenamed( QListViewItem* item, const QString& text, int col )
+{
+ Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( m_itemToProfile[item] );
+ Q_ASSERT( !profile.isNull() );
+ switch ( col )
+ {
+ case NameColumn:
+ profile.setName( text );
+ Kontact::ProfileManager::self()->updateProfile( profile );
+ break;
+ case DescriptionColumn:
+ profile.setDescription( text );
+ Kontact::ProfileManager::self()->updateProfile( profile );
+ break;
+ }
+}
+
+void Kontact::ProfileDialog::updateButtonState()
+{
+ const bool hasSelection = m_list->selectedItem() != 0;
+ m_deleteProfileButton->setEnabled( hasSelection );
+ m_saveProfileButton->setEnabled( hasSelection);
+ actionButton( KDialogBase::Ok )->setEnabled( hasSelection );
+ m_exportProfileButton->setEnabled( hasSelection );
+}
+
+void Kontact::ProfileDialog::listSelectionChanged()
+{
+ updateButtonState();
+}
+
+#include "profiledialog.moc"