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.
tdewebdev/klinkstatus/src/ui/resultssearchbar.cpp

237 lines
7.1 KiB

/***************************************************************************
* Copyright (C) 2004 by Paulo Moura Guedes *
* moura@tdewebdev.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; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include "resultssearchbar.h"
#include <kcombobox.h>
#include <kiconloader.h>
#include <klineedit.h>
#include <klocale.h>
#include <kstandarddirs.h>
#include <kdebug.h>
#include <tqapplication.h>
#include <tqhbox.h>
#include <tqlabel.h>
#include <tqpixmap.h>
#include <tqstring.h>
#include <tqtimer.h>
#include <tqtoolbutton.h>
#include <tqtooltip.h>
#include <tqlayout.h>
class ResultsSearchBar::ResultsSearchBarPrivate
{
public:
ResultsSearchBarPrivate()
: tqlayout(0), searchLine(0), searchCombo(0), delay(400), m_lastComboIndex(0)
{}
TQString searchText;
TQTimer timer;
TQHBoxLayout* tqlayout;
KLineEdit* searchLine;
KComboBox* searchCombo;
int delay;
int m_lastComboIndex;
};
ResultsSearchBar::ResultsSearchBar(TQWidget* parent, const char* name)
: TQWidget(parent, name), d(new ResultsSearchBar::ResultsSearchBarPrivate)
{
tqsetSizePolicy(TQSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::Fixed));
d->tqlayout = new TQHBoxLayout(this);
d->tqlayout->setMargin(2);
d->tqlayout->setSpacing(5);
TQToolButton* clearButton = new TQToolButton(this);
clearButton->setIconSet(SmallIconSet(TQApplication::reverseLayout() ? "clear_left" : "locationbar_erase"));
clearButton->setAutoRaise(true);
d->tqlayout->addWidget(clearButton);
TQLabel* searchLabel = new TQLabel(this);
searchLabel->setText(i18n("S&earch:"));
d->tqlayout->addWidget(searchLabel);
d->searchLine = new KLineEdit(this, "searchline");
connect(d->searchLine, TQT_SIGNAL(textChanged(const TQString &)),
this, TQT_SLOT(slotSearchStringChanged(const TQString &)));
searchLabel->setBuddy(d->searchLine);
d->tqlayout->addWidget(d->searchLine);
TQLabel* statusLabel = new TQLabel(this);
statusLabel->setText( i18n("Status:") );
d->tqlayout->addWidget(statusLabel);
d->searchCombo = new KComboBox(this, "searchcombo");
TQPixmap iconAll = KGlobal::iconLoader()->loadIcon("exec", KIcon::Small);
TQPixmap iconGood = KGlobal::iconLoader()->loadIcon("ok", KIcon::Small);
TQPixmap iconBroken = KGlobal::iconLoader()->loadIcon("no", KIcon::Small);
TQPixmap iconMalformed = KGlobal::iconLoader()->loadIcon("bug", KIcon::Small);
TQPixmap iconUndetermined = KGlobal::iconLoader()->loadIcon("help", KIcon::Small);
d->searchCombo->insertItem(iconAll, i18n("All Links"));
d->searchCombo->insertItem(iconGood, i18n("Good Links"));
d->searchCombo->insertItem(iconBroken, i18n("Broken Links"));
d->searchCombo->insertItem(iconMalformed, i18n("Malformed Links"));
d->searchCombo->insertItem(iconUndetermined, i18n("Undetermined Links"));
d->tqlayout->addWidget(d->searchCombo);
TQToolTip::add(clearButton, i18n("Clear filter"));
TQToolTip::add( d->searchLine, i18n("Enter the terms to filter the result link list"));
TQToolTip::add( d->searchCombo, i18n("Choose what kind of link status to show in result list"));
connect(clearButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT(slotClearSearch()) );
connect(d->searchCombo, TQT_SIGNAL(activated(int)),
this, TQT_SLOT(slotSearchComboChanged(int)));
connect(&(d->timer), TQT_SIGNAL(timeout()), this, TQT_SLOT(slotActivateSearch()));
}
ResultsSearchBar::~ResultsSearchBar()
{
delete d;
d = 0;
}
TQString const& ResultsSearchBar::text() const
{
return d->searchText;
}
int ResultsSearchBar::status() const
{
return d->searchCombo->currentItem();
}
void ResultsSearchBar::setDelay(int ms)
{
d->delay = ms;
}
int ResultsSearchBar::delay() const
{
return d->delay;
}
void ResultsSearchBar::slotClearSearch()
{
if(status() != 0 || !d->searchLine->text().isEmpty())
{
d->searchLine->clear();
d->searchCombo->setCurrentItem(0);
d->timer.stop();
slotActivateSearch();
}
}
void ResultsSearchBar::slotSettqStatus(int status)
{
d->searchCombo->setCurrentItem(status);
}
void ResultsSearchBar::slotSetText(const TQString& text)
{
d->searchLine->setText(text);
}
void ResultsSearchBar::slotSearchComboChanged(int index)
{
if(d->timer.isActive())
d->timer.stop();
if(d->m_lastComboIndex == index)
return;
d->m_lastComboIndex = index;
d->timer.start(200, true);
}
void ResultsSearchBar::slotSearchStringChanged(const TQString& search)
{
if(d->timer.isActive())
d->timer.stop();
if(d->searchText == search)
return;
d->searchText = search;
d->timer.start(200, true);
}
void ResultsSearchBar::slotActivateSearch()
{
kdDebug(23100) << "ResultsSearchBar::slotActivateSearch" << endl;
ResultView::tqStatus status = selectedtqStatus();
emit signalSearch(LinkMatcher(d->searchLine->text(), status));
}
LinkMatcher ResultsSearchBar::currentLinkMatcher() const
{
return LinkMatcher(d->searchLine->text(), selectedtqStatus());
}
ResultView::tqStatus ResultsSearchBar::selectedtqStatus() const
{
ResultView::tqStatus status = ResultView::none;
if(d->searchCombo->currentItem())
{
switch(d->searchCombo->currentItem())
{
case 1: // Good
{
status = ResultView::good;
break;
}
case 2: // Broken
{
status = ResultView::bad;
break;
}
case 3: // Malformed
{
status = ResultView::malformed;
break;
}
case 4: // Undetermined
{
status = ResultView::undetermined;
break;
}
default:
break;
}
}
return status;
}
#include "resultssearchbar.moc"