You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/kontact/src/profiledialog.cpp

268 lines
10 KiB

/*
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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#include "profiledialog.h"
#include "profilemanager.h"
#include <tdefiledialog.h>
#include <tdelistview.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <tqlayout.h>
#include <tqpushbutton.h>
#include <tqstring.h>
Kontact::ProfileDialog::ProfileDialog( TQWidget* parent, WFlags flags ) : KDialogBase( parent, /*name=*/0, /*modal=*/true, /*caption=*/TQString(), /*buttonMask=*/KDialogBase::Ok|KDialogBase::Close )
{
setWFlags( flags );
setCaption( i18n("Configure Profiles") );
setButtonOK( i18n("Load Profile") );
TQWidget* mainWidget = new TQWidget( this );
TQHBoxLayout* horizontalLayout = new TQHBoxLayout( mainWidget );
horizontalLayout->setSpacing( 5 );
m_list = new TDEListView( mainWidget );
m_list->addColumn( i18n("Name") );
m_list->addColumn( i18n("Description") );
m_list->setSelectionMode( TQListView::Single );
m_list->setItemsRenameable( true );
m_list->setRenameable( NameColumn, true );
m_list->setRenameable( DescriptionColumn, true );
connect( m_list, TQT_SIGNAL( selectionChanged() ),
this, TQT_SLOT( listSelectionChanged() ) );
connect( m_list, TQT_SIGNAL( itemRenamed( TQListViewItem*, const TQString&, int ) ),
this, TQT_SLOT( listItemRenamed( TQListViewItem*, const TQString&, int ) ) );
horizontalLayout->addWidget( m_list );
TQVBoxLayout* buttonLayout = new TQVBoxLayout( horizontalLayout );
buttonLayout->setSpacing( 5 );
m_newProfileButton = new TQPushButton( mainWidget );
m_newProfileButton->setText( i18n("New Profile") );
connect( m_newProfileButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( addNewProfile() ) );
buttonLayout->addWidget( m_newProfileButton );
m_deleteProfileButton = new TQPushButton( mainWidget );
m_deleteProfileButton->setText( i18n("Delete Profile") );
m_deleteProfileButton->setEnabled( false );
connect( m_deleteProfileButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( deleteSelectedProfile() ) );
buttonLayout->addWidget( m_deleteProfileButton );
m_saveProfileButton = new TQPushButton( mainWidget );
m_saveProfileButton->setText( i18n("Save Profile") );
m_saveProfileButton->setEnabled( false );
connect( m_saveProfileButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( saveToSelectedProfile() ) );
buttonLayout->addWidget( m_saveProfileButton );
buttonLayout->addStretch();
m_importProfileButton = new TQPushButton( mainWidget );
m_importProfileButton->setText( i18n("Import Profile") );
connect( m_importProfileButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( importProfile() ) );
buttonLayout->addWidget( m_importProfileButton );
m_exportProfileButton = new TQPushButton( mainWidget );
m_exportProfileButton->setText( i18n("Export Profile") );
m_exportProfileButton->setEnabled( false );
connect( m_exportProfileButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( exportSelectedProfile() ) );
buttonLayout->addWidget( m_exportProfileButton );
setMainWidget( mainWidget );
connect( Kontact::ProfileManager::self(), TQT_SIGNAL( profileAdded( const TQString& ) ),
this, TQT_SLOT( profileAdded( const TQString& ) ) );
connect( Kontact::ProfileManager::self(), TQT_SIGNAL( profileRemoved( const TQString& ) ),
this, TQT_SLOT( profileRemoved( const TQString& ) ) );
connect( Kontact::ProfileManager::self(), TQT_SIGNAL( profileLoaded( const TQString& ) ),
this, TQT_SLOT( profileLoaded( const TQString& ) ) );
connect( Kontact::ProfileManager::self(), TQT_SIGNAL( profileUpdated( const TQString& ) ),
this, TQT_SLOT( profileUpdated( const TQString& ) ) );
const TQValueList<Kontact::Profile> profiles = Kontact::ProfileManager::self()->profiles();
for ( TQValueList<Kontact::Profile>::ConstIterator it = profiles.begin(), end = profiles.end(); it != end; ++it )
{
profileAdded( (*it).id() );
}
updateButtonState();
}
void Kontact::ProfileDialog::slotOk()
{
loadSelectedProfile();
KDialogBase::slotOk();
}
TQString 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 TQString& 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 TQString id = selectedProfile();
const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( id );
if ( profile.isNull() )
return;
const TQString path = KFileDialog::getExistingDirectory( TQString(), 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 TQString path = KFileDialog::getExistingDirectory( TQString(), 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 TQString& id )
{
Q_ASSERT( !m_profileToItem[id] );
const Kontact::Profile profile = Kontact::ProfileManager::self()->profileById( id );
Q_ASSERT( !profile.isNull() );
TQListViewItem* const item = new TQListViewItem( m_list );
m_profileToItem[id] = item;
m_itemToProfile[item] = id;
profileUpdated( id );
}
void Kontact::ProfileDialog::profileRemoved( const TQString& id )
{
TQListViewItem* item = m_profileToItem[id];
Q_ASSERT( item );
m_profileToItem.remove( id );
m_itemToProfile.remove( item );
delete item;
}
void Kontact::ProfileDialog::profileUpdated( const TQString& id )
{
TQListViewItem* 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( TQListViewItem* item, const TQString& 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"