summaryrefslogtreecommitdiffstats
path: root/libkdepim/kconfigwizard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/kconfigwizard.cpp')
-rw-r--r--libkdepim/kconfigwizard.cpp197
1 files changed, 197 insertions, 0 deletions
diff --git a/libkdepim/kconfigwizard.cpp b/libkdepim/kconfigwizard.cpp
new file mode 100644
index 000000000..3e0a18b10
--- /dev/null
+++ b/libkdepim/kconfigwizard.cpp
@@ -0,0 +1,197 @@
+/*
+ This file is part of libkdepim.
+
+ Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kconfigwizard.h"
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kconfigskeleton.h>
+#include <kmessagebox.h>
+#include <kapplication.h>
+
+#include <qlistview.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+KConfigWizard::KConfigWizard( QWidget *parent,
+ char *name, bool modal )
+ : KDialogBase( TreeList, i18n("Configuration Wizard"), Ok|Cancel, Ok, parent,
+ name, modal ),
+ mPropagator( 0 ), mChangesPage( 0 )
+{
+ init();
+}
+
+KConfigWizard::KConfigWizard( KConfigPropagator *propagator, QWidget *parent,
+ char *name, bool modal )
+ : KDialogBase( TreeList, i18n("Configuration Wizard"), Ok|Cancel, Ok, parent,
+ name, modal ),
+ mPropagator( propagator ), mChangesPage( 0 )
+{
+ init();
+}
+
+KConfigWizard::~KConfigWizard()
+{
+ delete mPropagator;
+}
+
+void KConfigWizard::init()
+{
+ connect( this, SIGNAL( aboutToShowPage( QWidget * ) ),
+ SLOT( slotAboutToShowPage( QWidget * ) ) );
+
+ QTimer::singleShot( 0, this, SLOT( readConfig() ) );
+}
+
+void KConfigWizard::setPropagator( KConfigPropagator *p )
+{
+ mPropagator = p;
+}
+
+void KConfigWizard::slotAboutToShowPage( QWidget *page )
+{
+ if ( page == mChangesPage ) {
+ updateChanges();
+ }
+}
+
+QFrame *KConfigWizard::createWizardPage( const QString &title )
+{
+ return addPage( title );
+}
+
+void KConfigWizard::setupRulesPage()
+{
+ QFrame *topFrame = addPage( i18n("Rules") );
+ QVBoxLayout *topLayout = new QVBoxLayout( topFrame );
+
+ mRuleView = new QListView( topFrame );
+ topLayout->addWidget( mRuleView );
+
+ mRuleView->addColumn( i18n("Source") );
+ mRuleView->addColumn( i18n("Target") );
+ mRuleView->addColumn( i18n("Condition") );
+
+ updateRules();
+}
+
+void KConfigWizard::updateRules()
+{
+ if ( !mPropagator ) {
+ kdError() << "KConfigWizard: No KConfigPropagator set." << endl;
+ return;
+ }
+
+ mRuleView->clear();
+
+ KConfigPropagator::Rule::List rules = mPropagator->rules();
+ KConfigPropagator::Rule::List::ConstIterator it;
+ for( it = rules.begin(); it != rules.end(); ++it ) {
+ KConfigPropagator::Rule r = *it;
+ QString source = r.sourceFile + "/" + r.sourceGroup + "/" +
+ r.sourceEntry;
+ QString target = r.targetFile + "/" + r.targetGroup + "/" +
+ r.targetEntry;
+ QString condition;
+ KConfigPropagator::Condition c = r.condition;
+ if ( c.isValid ) {
+ condition = c.file + "/" + c.group + "/" + c.key + " = " + c.value;
+ }
+ new QListViewItem( mRuleView, source, target, condition );
+ }
+}
+
+void KConfigWizard::setupChangesPage()
+{
+ QFrame *topFrame = addPage( i18n("Changes") );
+ QVBoxLayout *topLayout = new QVBoxLayout( topFrame );
+
+ mChangeView = new QListView( topFrame );
+ topLayout->addWidget( mChangeView );
+
+ mChangeView->addColumn( i18n("Action") );
+ mChangeView->addColumn( i18n("Option") );
+ mChangeView->addColumn( i18n("Value") );
+ mChangeView->setSorting( -1 );
+
+ mChangesPage = topFrame;
+}
+
+void KConfigWizard::updateChanges()
+{
+ kdDebug() << "KConfigWizard::updateChanges()" << endl;
+
+ if ( !mPropagator ) {
+ kdError() << "KConfigWizard: No KConfigPropagator set." << endl;
+ return;
+ }
+
+ usrWriteConfig();
+
+ mPropagator->updateChanges();
+
+ mChangeView->clear();
+
+ KConfigPropagator::Change::List changes = mPropagator->changes();
+ KConfigPropagator::Change *c;
+ for( c = changes.first(); c; c = changes.next() ) {
+ new QListViewItem( mChangeView, mChangeView->lastItem(), c->title(), c->arg1(), c->arg2() );
+ }
+}
+
+void KConfigWizard::readConfig()
+{
+ kdDebug() << "KConfigWizard::readConfig()" << endl;
+
+ int result = KMessageBox::warningContinueCancel( this,
+ i18n("Please make sure that the programs which are "
+ "configured by the wizard do not run in parallel to the wizard; "
+ "otherwise, changes done by the wizard could be lost."),
+ i18n("Warning"), i18n("Run Wizard Now"), "warning_running_instances" );
+ if ( result != KMessageBox::Continue ) kapp->quit();
+
+ usrReadConfig();
+}
+
+void KConfigWizard::slotOk()
+{
+ QString error = validate();
+ if ( error.isNull() ) {
+ usrWriteConfig();
+
+ if ( !mPropagator ) {
+ kdError() << "KConfigWizard: No KConfigPropagator set." << endl;
+ return;
+ } else {
+ if ( mPropagator->skeleton() ) {
+ mPropagator->skeleton()->writeConfig();
+ }
+ mPropagator->commit();
+ }
+
+ accept();
+ } else {
+ KMessageBox::sorry( this, error );
+ }
+}
+
+#include "kconfigwizard.moc"