/* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2005-05-19 * Description : a dialog to perform simple search in albums * * Copyright (C) 2005 by Renchi Raju * Copyright (C) 2006-2008 by Gilles Caulier * * 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, 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. * * ============================================================ */ /** @file searchquickdialog.cpp */ // TQt includes. #include #include #include #include #include #include // KDE includes. #include #include #include // Local includes. #include "ddebug.h" #include "searchtextbar.h" #include "searchresultsview.h" #include "searchquickdialog.h" #include "searchquickdialog.moc" namespace Digikam { class SearchQuickDialogPriv { public: SearchQuickDialogPriv() { timer = 0; searchEdit = 0; nameEdit = 0; resultsView = 0; } TQTimer *timer; KLineEdit *nameEdit; SearchTextBar *searchEdit; SearchResultsView *resultsView; }; SearchQuickDialog::SearchQuickDialog(TQWidget* parent, KURL& url) : KDialogBase(Plain, i18n("Quick Search"), Help|Ok|Cancel, Ok, parent, 0, true, true), m_url(url) { d = new SearchQuickDialogPriv; d->timer = new TQTimer(this); setHelp("quicksearchtool.anchor", "digikam"); TQGridLayout* grid = new TQGridLayout(plainPage(), 2, 2, 0, spacingHint()); TQLabel *label1 = new TQLabel("" + i18n("Search:") + "", plainPage()); d->searchEdit = new SearchTextBar(plainPage(), "SearchQuickDialogSearchEdit", i18n("Enter here your search criteria")); TQWhatsThis::add( d->searchEdit, i18n("

Enter your search criteria to find items in the album library")); d->resultsView = new SearchResultsView(plainPage()); d->resultsView->setMinimumSize(320, 200); TQWhatsThis::add( d->resultsView, i18n("

Here you can see the items found in album library, " "using the current search criteria")); TQLabel *label2 = new TQLabel(i18n("Save search as:"), plainPage()); d->nameEdit = new KLineEdit(plainPage()); d->nameEdit->setText(i18n("Last Search")); TQWhatsThis::add( d->nameEdit, i18n("

Enter the name of the current search to save in the " "\"My Searches\" view")); grid->addMultiCellWidget(label1, 0, 0, 0, 0); grid->addMultiCellWidget(d->searchEdit, 0, 0, 1, 2); grid->addMultiCellWidget(d->resultsView, 1, 1, 0, 2); grid->addMultiCellWidget(label2, 2, 2, 0, 1); grid->addMultiCellWidget(d->nameEdit, 2, 2, 2, 2); connect(d->searchEdit, TQ_SIGNAL(signalTextChanged(const TQString&)), this, TQ_SLOT(slotSearchChanged(const TQString&))); connect(d->resultsView, TQ_SIGNAL(signalSearchResultsMatch(bool)), d->searchEdit, TQ_SLOT(slotSearchResult(bool))); connect(d->timer, TQ_SIGNAL(timeout()), this, TQ_SLOT(slotTimeOut())); enableButtonOK(false); resize(configDialogSize("QuickSearch Dialog")); // check if we are being passed a valid url if (m_url.isValid()) { int count = m_url.queryItem("count").toInt(); if (count > 0) { TQStringList strList; for (int i=1; i<=count; i++) { TQString val = m_url.queryItem(TQString::number(i) + ".val"); if (!strList.contains(val)) { strList.append(val); } } d->searchEdit->setText(strList.join(" ")); d->nameEdit->setText(url.queryItem("name")); d->timer->start(0, true); } } } SearchQuickDialog::~SearchQuickDialog() { saveDialogSize(("QuickSearch Dialog")); delete d->timer; delete d; } void SearchQuickDialog::slotTimeOut() { if (d->searchEdit->text().isEmpty()) { d->resultsView->clear(); enableButtonOK(false); return; } enableButtonOK(true); KURL url; url.setProtocol("digikamsearch"); TQString path, num; int count = 0; TQStringList textList = TQStringList::split(' ', d->searchEdit->text()); for (TQStringList::iterator it = textList.begin(); it != textList.end(); ++it) { if (count != 0) path += " AND "; path += TQString(" %1 ").arg(count + 1); num = TQString::number(++count); url.addQueryItem(num + ".key", "keyword"); url.addQueryItem(num + ".op", "like"); url.addQueryItem(num + ".val", *it); } url.setPath(path); url.addQueryItem("name", "Live Search"); url.addQueryItem("count", num); m_url = url; d->resultsView->openURL(url); } void SearchQuickDialog::slotSearchChanged(const TQString&) { d->timer->start(500, true); } void SearchQuickDialog::hideEvent(TQHideEvent* e) { m_url.removeQueryItem("name"); m_url.addQueryItem("name", d->nameEdit->text().isEmpty() ? i18n("Last Search") : d->nameEdit->text()); KDialogBase::hideEvent(e); } } // namespace Digikam