|
|
|
/* This file is part of the KDE projects
|
|
|
|
Copyright (C) 2000 David Faure <faure@kde.org>
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
This program 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
|
|
|
|
General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; see the file COPYING. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "kfind.h"
|
|
|
|
#include "kfindpart.h"
|
|
|
|
#include "kquery.h"
|
|
|
|
|
|
|
|
#include <kparts/genericfactory.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
|
|
|
|
#include <tqdir.h>
|
|
|
|
#include <kinstance.h>
|
|
|
|
|
|
|
|
class KonqDirPart;
|
|
|
|
|
|
|
|
typedef KParts::GenericFactory<KFindPart> KFindFactory;
|
|
|
|
K_EXPORT_COMPONENT_FACTORY( libkfindpart, KFindFactory )
|
|
|
|
|
|
|
|
KFindPart::KFindPart( TQWidget * parentWidget, const char *widgetName,
|
|
|
|
TQObject *parent, const char *name ,
|
|
|
|
const TQStringList & /*args*/ )
|
|
|
|
: KonqDirPart (parent, name )/*KParts::ReadOnlyPart*/
|
|
|
|
{
|
|
|
|
setInstance( KFindFactory::instance() );
|
|
|
|
|
|
|
|
setBrowserExtension( new KonqDirPartBrowserExtension( this ) );
|
|
|
|
|
|
|
|
kdDebug() << "KFindPart::KFindPart " << this << endl;
|
|
|
|
m_kfindWidget = new Kfind( parentWidget, widgetName );
|
|
|
|
m_kfindWidget->setMaximumHeight(m_kfindWidget->minimumSizeHint().height());
|
|
|
|
const KFileItem *item = ((KonqDirPart*)parent)->currentItem();
|
|
|
|
kdDebug() << "Kfind: currentItem: " << ( item ? item->url().path().local8Bit() : TQString("null") ) << endl;
|
|
|
|
TQDir d;
|
|
|
|
if( item && d.exists( item->url().path() ))
|
|
|
|
m_kfindWidget->setURL( item->url() );
|
|
|
|
|
|
|
|
setWidget( m_kfindWidget );
|
|
|
|
|
|
|
|
connect( m_kfindWidget, TQT_SIGNAL(started()),
|
|
|
|
this, TQT_SLOT(slotStarted()) );
|
|
|
|
connect( m_kfindWidget, TQT_SIGNAL(destroyMe()),
|
|
|
|
this, TQT_SLOT(slotDestroyMe()) );
|
|
|
|
connect(m_kfindWidget->dirlister,TQT_SIGNAL(deleteItem(KFileItem*)), this, TQT_SLOT(removeFile(KFileItem*)));
|
|
|
|
connect(m_kfindWidget->dirlister,TQT_SIGNAL(newItems(const KFileItemList&)), this, TQT_SLOT(newFiles(const KFileItemList&)));
|
|
|
|
//setXMLFile( "kfind.rc" );
|
|
|
|
query = new KQuery(this);
|
|
|
|
connect(query, TQT_SIGNAL(addFile(const KFileItem *, const TQString&)),
|
|
|
|
TQT_SLOT(addFile(const KFileItem *, const TQString&)));
|
|
|
|
connect(query, TQT_SIGNAL(result(int)),
|
|
|
|
TQT_SLOT(slotResult(int)));
|
|
|
|
|
|
|
|
m_kfindWidget->setQuery(query);
|
|
|
|
m_bShowsResult = false;
|
|
|
|
|
|
|
|
m_lstFileItems.setAutoDelete( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
KFindPart::~KFindPart()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
KAboutData *KFindPart::createAboutData()
|
|
|
|
{
|
|
|
|
return new KAboutData( "kfindpart", I18N_NOOP( "Find Component" ), "1.0" );
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KFindPart::doOpenURL( const KURL &url )
|
|
|
|
{
|
|
|
|
m_kfindWidget->setURL( url );
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::slotStarted()
|
|
|
|
{
|
|
|
|
kdDebug() << "KFindPart::slotStarted" << endl;
|
|
|
|
m_bShowsResult = true;
|
|
|
|
m_lstFileItems.clear(); // clear our internal list
|
|
|
|
emit started();
|
|
|
|
emit clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::addFile(const KFileItem *item, const TQString& /*matchingLine*/)
|
|
|
|
{
|
|
|
|
// item is deleted by caller
|
|
|
|
// we need to clone it
|
|
|
|
KFileItem *clonedItem = new KFileItem(*item);
|
|
|
|
m_lstFileItems.append( clonedItem );
|
|
|
|
|
|
|
|
KFileItemList lstNewItems;
|
|
|
|
lstNewItems.append(clonedItem);
|
|
|
|
emit newItems(lstNewItems);
|
|
|
|
|
|
|
|
/*
|
|
|
|
win->insertItem(item);
|
|
|
|
|
|
|
|
if (!isResultReported)
|
|
|
|
{
|
|
|
|
emit haveResults(true);
|
|
|
|
isResultReported = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
|
|
|
|
/* An item has been removed, so update konqueror's view */
|
|
|
|
void KFindPart::removeFile(KFileItem *item)
|
|
|
|
{
|
|
|
|
KFileItem *iter;
|
|
|
|
KFileItemList listiter;
|
|
|
|
|
|
|
|
emit started();
|
|
|
|
emit clear();
|
|
|
|
|
|
|
|
m_lstFileItems.remove( item ); //not working ?
|
|
|
|
|
|
|
|
for(iter=m_lstFileItems.first(); iter; iter=m_lstFileItems.next() ) {
|
|
|
|
if(iter->url()!=item->url())
|
|
|
|
listiter.append(iter);
|
|
|
|
}
|
|
|
|
|
|
|
|
emit newItems(listiter);
|
|
|
|
emit finished();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::newFiles(const KFileItemList&)
|
|
|
|
{
|
|
|
|
if(m_bShowsResult)
|
|
|
|
return;
|
|
|
|
emit started();
|
|
|
|
emit clear();
|
|
|
|
if (m_lstFileItems.count())
|
|
|
|
emit newItems(m_lstFileItems);
|
|
|
|
emit finished();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::slotResult(int errorCode)
|
|
|
|
{
|
|
|
|
if (errorCode == 0)
|
|
|
|
emit finished();
|
|
|
|
//setStatusMsg(i18n("Ready."));
|
|
|
|
else if (errorCode == KIO::ERR_USER_CANCELED)
|
|
|
|
emit canceled();
|
|
|
|
//setStatusMsg(i18n("Aborted."));
|
|
|
|
else
|
|
|
|
emit canceled(); // TODO ?
|
|
|
|
//setStatusMsg(i18n("Error."));
|
|
|
|
m_bShowsResult=false;
|
|
|
|
m_kfindWidget->searchFinished();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::slotDestroyMe()
|
|
|
|
{
|
|
|
|
m_kfindWidget->stopSearch();
|
|
|
|
emit clear(); // this is necessary to clear the delayed-mimetypes items list
|
|
|
|
m_lstFileItems.clear(); // clear our internal list
|
|
|
|
emit findClosed();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::saveState( TQDataStream& stream )
|
|
|
|
{
|
|
|
|
KonqDirPart::saveState(stream);
|
|
|
|
|
|
|
|
m_kfindWidget->saveState( &stream );
|
|
|
|
//Now we'll save the search result
|
|
|
|
KFileItem *fileitem=m_lstFileItems.first();
|
|
|
|
stream << m_lstFileItems.count();
|
|
|
|
while(fileitem!=NULL)
|
|
|
|
{
|
|
|
|
stream << *fileitem;
|
|
|
|
fileitem=m_lstFileItems.next();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFindPart::restoreState( TQDataStream& stream )
|
|
|
|
{
|
|
|
|
KonqDirPart::restoreState(stream);
|
|
|
|
int nbitems;
|
|
|
|
KURL itemUrl;
|
|
|
|
|
|
|
|
m_kfindWidget->restoreState( &stream );
|
|
|
|
|
|
|
|
stream >> nbitems;
|
|
|
|
slotStarted();
|
|
|
|
for(int i=0;i<nbitems;i++)
|
|
|
|
{
|
|
|
|
KFileItem* item = new KFileItem( KFileItem::Unknown, KFileItem::Unknown, KURL() );
|
|
|
|
stream >> *item;
|
|
|
|
m_lstFileItems.append(item);
|
|
|
|
}
|
|
|
|
if (nbitems)
|
|
|
|
emit newItems(m_lstFileItems);
|
|
|
|
|
|
|
|
emit finished();
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kfindpart.moc"
|