summaryrefslogtreecommitdiffstats
path: root/kdebugdialog/klistdebugdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdebugdialog/klistdebugdialog.cpp')
-rw-r--r--kdebugdialog/klistdebugdialog.cpp193
1 files changed, 193 insertions, 0 deletions
diff --git a/kdebugdialog/klistdebugdialog.cpp b/kdebugdialog/klistdebugdialog.cpp
new file mode 100644
index 000000000..8dade2895
--- /dev/null
+++ b/kdebugdialog/klistdebugdialog.cpp
@@ -0,0 +1,193 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2000 David Faure <faure@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 "klistdebugdialog.h"
+#include <kconfig.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <qlayout.h>
+#include <qscrollview.h>
+#include <qvbox.h>
+#include <klocale.h>
+#include <qpushbutton.h>
+#include <klineedit.h>
+#include <dcopclient.h>
+
+KListDebugDialog::KListDebugDialog( QStringList areaList, QWidget *parent, const char *name, bool modal )
+ : KAbstractDebugDialog( parent, name, modal ),
+ m_areaList( areaList )
+{
+ setCaption(i18n("Debug Settings"));
+
+ QVBoxLayout *lay = new QVBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint() );
+
+ m_incrSearch = new KLineEdit( this );
+ lay->addWidget( m_incrSearch );
+ connect( m_incrSearch, SIGNAL( textChanged( const QString& ) ),
+ SLOT( generateCheckBoxes( const QString& ) ) );
+
+ QScrollView * scrollView = new QScrollView( this );
+ scrollView->setResizePolicy( QScrollView::AutoOneFit );
+ lay->addWidget( scrollView );
+
+ m_box = new QVBox( scrollView->viewport() );
+ scrollView->addChild( m_box );
+
+ generateCheckBoxes( QString::null );
+
+ QHBoxLayout* selectButs = new QHBoxLayout( lay );
+ QPushButton* all = new QPushButton( i18n("&Select All"), this );
+ QPushButton* none = new QPushButton( i18n("&Deselect All"), this );
+ selectButs->addWidget( all );
+ selectButs->addWidget( none );
+
+ connect( all, SIGNAL( clicked() ), this, SLOT( selectAll() ) );
+ connect( none, SIGNAL( clicked() ), this, SLOT( deSelectAll() ) );
+
+ buildButtons( lay );
+ resize( 350, 400 );
+}
+
+void KListDebugDialog::generateCheckBoxes( const QString& filter )
+{
+ QPtrListIterator<QCheckBox> cb_it ( boxes );
+ for( ; cb_it.current() ; ++cb_it )
+ {
+ if( (*cb_it)->state() != QButton::NoChange )
+ m_changes.insert( (*cb_it)->name(), (*cb_it)->isChecked() ? 2 : 4 );
+ }
+
+ boxes.setAutoDelete( true );
+ boxes.clear();
+ boxes.setAutoDelete( false );
+
+ QWidget* taborder = m_incrSearch;
+ QStringList::Iterator it = m_areaList.begin();
+ for ( ; it != m_areaList.end() ; ++it )
+ {
+ QString data = (*it).simplifyWhiteSpace();
+ if ( filter.isEmpty() || data.lower().contains( filter.lower() ) )
+ {
+ int space = data.find(" ");
+ if (space == -1)
+ kdError() << "No space:" << data << endl;
+
+ QString areaNumber = data.left(space);
+ //kdDebug() << areaNumber << endl;
+ QCheckBox * cb = new QCheckBox( data, m_box, areaNumber.latin1() );
+ cb->show();
+ boxes.append( cb );
+ setTabOrder( taborder, cb );
+ taborder = cb;
+ }
+ }
+
+ load();
+}
+
+void KListDebugDialog::selectAll()
+{
+ QPtrListIterator<QCheckBox> it ( boxes );
+ for ( ; it.current() ; ++it ) {
+ (*it)->setChecked( true );
+ m_changes.insert( (*it)->name(), 2 );
+ }
+}
+
+void KListDebugDialog::deSelectAll()
+{
+ QPtrListIterator<QCheckBox> it ( boxes );
+ for ( ; it.current() ; ++it ) {
+ (*it)->setChecked( false );
+ m_changes.insert( (*it)->name(), 4 );
+ }
+}
+
+void KListDebugDialog::load()
+{
+ QPtrListIterator<QCheckBox> it ( boxes );
+ for ( ; it.current() ; ++it )
+ {
+ pConfig->setGroup( (*it)->name() ); // Group name = debug area code = cb's name
+
+ int setting = pConfig->readNumEntry( "InfoOutput", 2 );
+ // override setting if in m_changes
+ if( m_changes.find( (*it)->name() ) != m_changes.end() ) {
+ setting = m_changes[ (*it)->name() ];
+ }
+
+ switch (setting) {
+ case 4: // off
+ (*it)->setChecked(false);
+ break;
+ case 2: //shell
+ (*it)->setChecked(true);
+ break;
+ case 3: //syslog
+ case 1: //msgbox
+ case 0: //file
+ default:
+ (*it)->setNoChange();
+ /////// Uses the triState capability of checkboxes
+ ////// Note: it seems some styles don't draw that correctly (BUG)
+ break;
+ }
+ }
+}
+
+void KListDebugDialog::save()
+{
+ QPtrListIterator<QCheckBox> it ( boxes );
+ for ( ; it.current() ; ++it )
+ {
+ pConfig->setGroup( (*it)->name() ); // Group name = debug area code = cb's name
+ if ( (*it)->state() != QButton::NoChange )
+ {
+ int setting = (*it)->isChecked() ? 2 : 4;
+ pConfig->writeEntry( "InfoOutput", setting );
+ }
+ }
+ //sync done by main.cpp
+
+ // send DCOP message to all clients
+ QByteArray data;
+ if (!kapp->dcopClient()->send("*", "KDebug", "notifyKDebugConfigChanged()", data))
+ {
+ kdError() << "Unable to send DCOP message" << endl;
+ }
+
+ m_changes.clear();
+}
+
+void KListDebugDialog::activateArea( QCString area, bool activate )
+{
+ QPtrListIterator<QCheckBox> it ( boxes );
+ for ( ; it.current() ; ++it )
+ {
+ if ( area == (*it)->name() // debug area code = cb's name
+ || (*it)->text().find( QString::fromLatin1(area) ) != -1 ) // area name included in cb text
+ {
+ (*it)->setChecked( activate );
+ return;
+ }
+ }
+}
+
+#include "klistdebugdialog.moc"