diff options
Diffstat (limited to 'kdebugdialog/tdelistdebugdialog.cpp')
-rw-r--r-- | kdebugdialog/tdelistdebugdialog.cpp | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/kdebugdialog/tdelistdebugdialog.cpp b/kdebugdialog/tdelistdebugdialog.cpp new file mode 100644 index 000000000..68d02fd7b --- /dev/null +++ b/kdebugdialog/tdelistdebugdialog.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 <tdeconfig.h> +#include <kapplication.h> +#include <kdebug.h> +#include <tqlayout.h> +#include <tqscrollview.h> +#include <tqvbox.h> +#include <klocale.h> +#include <tqpushbutton.h> +#include <klineedit.h> +#include <dcopclient.h> + +TDEListDebugDialog::TDEListDebugDialog( TQStringList areaList, TQWidget *parent, const char *name, bool modal ) + : KAbstractDebugDialog( parent, name, modal ), + m_areaList( areaList ) +{ + setCaption(i18n("Debug Settings")); + + TQVBoxLayout *lay = new TQVBoxLayout( this, KDialog::marginHint(), KDialog::spacingHint() ); + + m_incrSearch = new KLineEdit( this ); + lay->addWidget( m_incrSearch ); + connect( m_incrSearch, TQT_SIGNAL( textChanged( const TQString& ) ), + TQT_SLOT( generateCheckBoxes( const TQString& ) ) ); + + TQScrollView * scrollView = new TQScrollView( this ); + scrollView->setResizePolicy( TQScrollView::AutoOneFit ); + lay->addWidget( scrollView ); + + m_box = new TQVBox( scrollView->viewport() ); + scrollView->addChild( m_box ); + + generateCheckBoxes( TQString::null ); + + TQHBoxLayout* selectButs = new TQHBoxLayout( lay ); + TQPushButton* all = new TQPushButton( i18n("&Select All"), this ); + TQPushButton* none = new TQPushButton( i18n("&Deselect All"), this ); + selectButs->addWidget( all ); + selectButs->addWidget( none ); + + connect( all, TQT_SIGNAL( clicked() ), this, TQT_SLOT( selectAll() ) ); + connect( none, TQT_SIGNAL( clicked() ), this, TQT_SLOT( deSelectAll() ) ); + + buildButtons( lay ); + resize( 350, 400 ); +} + +void TDEListDebugDialog::generateCheckBoxes( const TQString& filter ) +{ + TQPtrListIterator<TQCheckBox> cb_it ( boxes ); + for( ; cb_it.current() ; ++cb_it ) + { + if( (*cb_it)->state() != TQButton::NoChange ) + m_changes.insert( (*cb_it)->name(), (*cb_it)->isChecked() ? 2 : 4 ); + } + + boxes.setAutoDelete( true ); + boxes.clear(); + boxes.setAutoDelete( false ); + + TQWidget* taborder = m_incrSearch; + TQStringList::Iterator it = m_areaList.begin(); + for ( ; it != m_areaList.end() ; ++it ) + { + TQString data = (*it).simplifyWhiteSpace(); + if ( filter.isEmpty() || data.lower().contains( filter.lower() ) ) + { + int space = data.find(" "); + if (space == -1) + kdError() << "No space:" << data << endl; + + TQString areaNumber = data.left(space); + //kdDebug() << areaNumber << endl; + TQCheckBox * cb = new TQCheckBox( data, m_box, areaNumber.latin1() ); + cb->show(); + boxes.append( cb ); + setTabOrder( taborder, cb ); + taborder = cb; + } + } + + load(); +} + +void TDEListDebugDialog::selectAll() +{ + TQPtrListIterator<TQCheckBox> it ( boxes ); + for ( ; it.current() ; ++it ) { + (*it)->setChecked( true ); + m_changes.insert( (*it)->name(), 2 ); + } +} + +void TDEListDebugDialog::deSelectAll() +{ + TQPtrListIterator<TQCheckBox> it ( boxes ); + for ( ; it.current() ; ++it ) { + (*it)->setChecked( false ); + m_changes.insert( (*it)->name(), 4 ); + } +} + +void TDEListDebugDialog::load() +{ + TQPtrListIterator<TQCheckBox> 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 TDEListDebugDialog::save() +{ + TQPtrListIterator<TQCheckBox> it ( boxes ); + for ( ; it.current() ; ++it ) + { + pConfig->setGroup( (*it)->name() ); // Group name = debug area code = cb's name + if ( (*it)->state() != TQButton::NoChange ) + { + int setting = (*it)->isChecked() ? 2 : 4; + pConfig->writeEntry( "InfoOutput", setting ); + } + } + //sync done by main.cpp + + // send DCOP message to all clients + TQByteArray data; + if (!kapp->dcopClient()->send("*", "KDebug", "notifyKDebugConfigChanged()", data)) + { + kdError() << "Unable to send DCOP message" << endl; + } + + m_changes.clear(); +} + +void TDEListDebugDialog::activateArea( TQCString area, bool activate ) +{ + TQPtrListIterator<TQCheckBox> it ( boxes ); + for ( ; it.current() ; ++it ) + { + if ( area == (*it)->name() // debug area code = cb's name + || (*it)->text().find( TQString::fromLatin1(area) ) != -1 ) // area name included in cb text + { + (*it)->setChecked( activate ); + return; + } + } +} + +#include "klistdebugdialog.moc" |