20 #include <QInputDialog>
22 #include <KMessageBox>
26 using namespace ContactList;
29 :
QWidget( parent ), mChanged( false ), mLoading( false )
33 QList<ContactListTokenConfig> tokens = LayoutManager::instance()->tokens();
34 for (
int i = 0; i < tokens.size(); i++)
40 connect( layoutEdit, SIGNAL(
changed()),
this, SLOT(emitChanged()) );
41 connect( previewButton, SIGNAL(clicked()),
this, SLOT(preview()) );
42 connect( removeButton, SIGNAL(clicked()),
this, SLOT(
remove()) );
43 connect( layoutComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(setLayout(QString)) );
44 connect( LayoutManager::instance(), SIGNAL(layoutListChanged()),
this, SLOT(reloadLayoutList()) );
49 layoutComboBox->clear();
51 QStringList layoutNames = LayoutManager::instance()->layouts();
52 layoutComboBox->addItems( layoutNames );
54 int index = layoutNames.indexOf( LayoutManager::instance()->activeLayoutName() );
56 layoutComboBox->setCurrentIndex( index );
58 setLayout( layoutComboBox->currentText() );
64 QString layoutName = mCurrentLayoutName;
65 if ( !saveLayoutData( layoutName ) )
68 LayoutManager::instance()->setActiveLayout( layoutName );
73 void ContactListLayoutWidget::emitChanged()
75 if ( !mChanged && !mLoading )
82 void ContactListLayoutWidget::setLayout(
const QString &layoutName )
84 if ( mCurrentLayoutName == layoutName )
87 QString layoutNameTmp = mCurrentLayoutName;
88 if ( !layoutNameTmp.isEmpty() && !saveLayoutData( layoutNameTmp,
true ) )
90 int index = layoutComboBox->findText( mCurrentLayoutName );
92 layoutComboBox->setCurrentIndex( index );
98 mCurrentLayoutName = layoutName;
99 removeButton->setEnabled( !LayoutManager::instance()->isDefaultLayout( layoutName ) );
101 layoutEdit->readLayout( layout.
layout() );
107 if ( LayoutManager::instance()->activeLayoutName() != mCurrentLayoutName )
111 void ContactListLayoutWidget::reloadLayoutList()
113 disconnect( layoutComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(setLayout(QString)) );
115 QString layoutName = layoutComboBox->currentText();
116 layoutComboBox->clear();
117 layoutComboBox->addItems( LayoutManager::instance()->layouts() );
118 int index = layoutComboBox->findText( layoutName );
121 layoutComboBox->setCurrentIndex( index );
125 mCurrentLayoutName.clear();
126 setLayout( layoutComboBox->currentText() );
127 LayoutManager::instance()->setActiveLayout( layoutComboBox->currentText() );
130 connect( layoutComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(setLayout(QString)) );
133 void ContactListLayoutWidget::preview()
136 layout.
setLayout( layoutEdit->config() );
137 LayoutManager::instance()->setPreviewLayout( layout );
140 void ContactListLayoutWidget::remove()
142 if ( !LayoutManager::instance()->isDefaultLayout( mCurrentLayoutName ) )
143 LayoutManager::instance()->deleteLayout( mCurrentLayoutName );
146 bool ContactListLayoutWidget::saveLayoutData( QString& layoutName,
bool showPrompt )
152 int ret = KMessageBox::warningYesNoCancel(
this, i18n(
"Unsaved data?" ), i18n(
"Layout" ), KStandardGuiItem::save(),
153 KStandardGuiItem::discard(), KStandardGuiItem::cancel(),
154 "askRemovingContactOrGroup", KMessageBox::Notify | KMessageBox::Dangerous );
155 if ( ret == KMessageBox::Cancel )
157 else if ( ret == KMessageBox::No )
163 QString newLayoutName = QInputDialog::getText(
this, i18n(
"Reserved Layout Name" ),
164 i18n(
"The layout '%1' is one of the default layouts and cannot be overwritten. Please select a different name.", layoutName ), QLineEdit::Normal, layoutName, &ok );
167 else if ( !newLayoutName.isEmpty() )
168 layoutName = newLayoutName;
172 layout.
setLayout( layoutEdit->config() );
173 return LayoutManager::instance()->addUserLayout( layoutName, layout );
178 #include "contactlistlayoutwidget.moc"