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.
tdebase/kfind/kfind.cpp

193 lines
5.0 KiB

/***********************************************************************
*
* Kfind.cpp
*
* This is KFind, released under GPL
*
* 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.
*
* KFind (c) 1998-2003 The KDE Developers
Martin Hartig
Stephan Kulow <coolo@kde.org>
Mario Weilguni <mweilguni@sime.com>
Alex Zepeda <zipzippy@sonic.net>
Miroslav Fl<EFBFBD>dr <flidr@kky.zcu.cz>
Harri Porten <porten@kde.org>
Dima Rogozin <dima@mercury.co.il>
Carsten Pfeiffer <pfeiffer@kde.org>
Hans Petter Bieker <bieker@kde.org>
Waldo Bastian <bastian@kde.org>
Beppe Grimaldi <grimalkin@ciaoweb.it>
Eric Coquelle <coquelle@caramail.com>
**********************************************************************/
#include <kpushbutton.h>
#include <qlayout.h>
#include <qvbox.h>
#include <kdialog.h>
#include <kdebug.h>
#include <klocale.h>
#include <kseparator.h>
#include <qlineedit.h>
#include <qcheckbox.h>
#include <kstdguiitem.h>
#include "kftabdlg.h"
#include "kquery.h"
#include "kfind.moc"
Kfind::Kfind(QWidget *parent, const char *name)
: QWidget( parent, name )
{
kdDebug() << "Kfind::Kfind " << this << endl;
QBoxLayout * mTopLayout = new QBoxLayout( this, QBoxLayout::LeftToRight,
KDialog::marginHint(), KDialog::spacingHint() );
// create tabwidget
tabWidget = new KfindTabWidget( this );
mTopLayout->addWidget(tabWidget);
/*
* This is ugly. Might be a KSeparator bug, but it makes a small black
* pixel for me which is visually distracting (GS).
// create separator
KSeparator * mActionSep = new KSeparator( this );
mActionSep->setFocusPolicy( QWidget::ClickFocus );
mActionSep->setOrientation( QFrame::VLine );
mTopLayout->addWidget(mActionSep);
*/
// create button box
QVBox * mButtonBox = new QVBox( this );
QVBoxLayout *lay = (QVBoxLayout*)mButtonBox->layout();
lay->addStretch(1);
mTopLayout->addWidget(mButtonBox);
mSearch = new KPushButton( KGuiItem(i18n("&Find"), "find"), mButtonBox );
mButtonBox->setSpacing( (tabWidget->sizeHint().height()-4*mSearch->sizeHint().height()) / 4);
connect( mSearch, SIGNAL(clicked()), this, SLOT( startSearch() ) );
mStop = new KPushButton( KGuiItem(i18n("Stop"), "stop"), mButtonBox );
connect( mStop, SIGNAL(clicked()), this, SLOT( stopSearch() ) );
mSave = new KPushButton( KStdGuiItem::saveAs(), mButtonBox );
connect( mSave, SIGNAL(clicked()), this, SLOT( saveResults() ) );
KPushButton * mClose = new KPushButton( KStdGuiItem::close(), mButtonBox );
connect( mClose, SIGNAL(clicked()), this, SIGNAL( destroyMe() ) );
// react to search requests from widget
connect( tabWidget, SIGNAL(startSearch()), this, SLOT( startSearch() ) );
mSearch->setEnabled(true); // Enable "Search"
mStop->setEnabled(false); // Disable "Stop"
mSave->setEnabled(false); // Disable "Save..."
dirlister=new KDirLister();
}
Kfind::~Kfind()
{
stopSearch();
dirlister->stop();
delete dirlister;
kdDebug() << "Kfind::~Kfind" << endl;
}
void Kfind::setURL( const KURL &url )
{
tabWidget->setURL( url );
}
void Kfind::startSearch()
{
tabWidget->setQuery(query);
emit started();
//emit resultSelected(false);
//emit haveResults(false);
mSearch->setEnabled(false); // Disable "Search"
mStop->setEnabled(true); // Enable "Stop"
mSave->setEnabled(false); // Disable "Save..."
tabWidget->beginSearch();
dirlister->openURL(KURL(tabWidget->dirBox->currentText().stripWhiteSpace()));
query->start();
}
void Kfind::stopSearch()
{
// will call KFindPart::slotResult, which calls searchFinished here
query->kill();
}
/*
void Kfind::newSearch()
{
// WABA: Not used any longer?
stopSearch();
tabWidget->setDefaults();
emit haveResults(false);
emit resultSelected(false);
setFocus();
}
*/
void Kfind::searchFinished()
{
mSearch->setEnabled(true); // Enable "Search"
mStop->setEnabled(false); // Disable "Stop"
// ## TODO mSave->setEnabled(true); // Enable "Save..."
tabWidget->endSearch();
setFocus();
}
void Kfind::saveResults()
{
// TODO
}
void Kfind::setFocus()
{
tabWidget->setFocus();
}
void Kfind::saveState( QDataStream *stream )
{
query->kill();
*stream << tabWidget->nameBox->currentText();
*stream << tabWidget->dirBox->currentText();
*stream << tabWidget->typeBox->currentItem();
*stream << tabWidget->textEdit->text();
*stream << (int)( tabWidget->subdirsCb->isChecked() ? 0 : 1 );
}
void Kfind::restoreState( QDataStream *stream )
{
QString namesearched, dirsearched,containing;
int typeIdx;
int subdirs;
*stream >> namesearched;
*stream >> dirsearched;
*stream >> typeIdx;
*stream >> containing;
*stream >> subdirs;
tabWidget->nameBox->insertItem( namesearched, 0);
tabWidget->dirBox->insertItem ( dirsearched, 0);
tabWidget->typeBox->setCurrentItem(typeIdx);
tabWidget->textEdit->setText ( containing );
tabWidget->subdirsCb->setChecked( ( subdirs==0 ? true : false ));
}