diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 37333bf25ad9a4c538250f5af2f9f1d666362883 (patch) | |
tree | c45e8df5b9efbffe07eb3d9340df7811c7e16943 /kpackage/findf.cpp | |
download | tdeadmin-37333bf25ad9a4c538250f5af2f9f1d666362883.tar.gz tdeadmin-37333bf25ad9a4c538250f5af2f9f1d666362883.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeadmin@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kpackage/findf.cpp')
-rw-r--r-- | kpackage/findf.cpp | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/kpackage/findf.cpp b/kpackage/findf.cpp new file mode 100644 index 0000000..20e6a7c --- /dev/null +++ b/kpackage/findf.cpp @@ -0,0 +1,228 @@ +/* +** Copyright (C) 1999,2000 Toivo Pedaste <toivo@ucs.uwa.edu.au> +** +*/ + +/* +** 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 in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to kde-devel@kde.org +*/ + +#include "../config.h" + +#include <qlineedit.h> +#include <qpainter.h> + +#include <klocale.h> +#include <kdebug.h> +#include <kurldrag.h> +#include <kiconloader.h> + +#include "kpackage.h" +#include "managementWidget.h" +#include "findf.h" +#include "options.h" +#include "pkgInterface.h" + +extern pkgInterface *kpinterface[]; +extern Opts *opts; + +FindF::FindF(QWidget *parent) + : KDialogBase(parent, "find_file", false, + i18n("Find File"), + User1 | Close, User1, true, + KGuiItem(i18n("&Find"),"filefind")) +{ + tick = UserIcon("ptick"); + + QFrame *page = makeMainWidget(); + + setFocusPolicy(QWidget::StrongFocus); + + QVBoxLayout* vtop = new QVBoxLayout( page, 10, 10, "vtop"); + QFrame *frame1 = new QGroupBox(i18n("Find Package"), page, "frame1"); + vtop->addWidget(frame1,1); + + QGridLayout* gtop = new QGridLayout( frame1, 1, 1, 20 ); + // gtop->setMargin( KDialog::marginHint() ); + gtop->setSpacing( KDialog::spacingHint() ); + + value = new QLineEdit( frame1, "value" ); + connect(value,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & ))); + value->setFocus(); + + QLabel *valueLabel = new QLabel(value, i18n("Find:"), frame1); + valueLabel->setAlignment( AlignRight ); + + tab = new KListView(frame1, "tab"); + connect(tab, SIGNAL(selectionChanged ( QListViewItem * )), + this, SLOT(search( QListViewItem * ))); + tab->addColumn(i18n("Installed"),18); + tab->addColumn(i18n("Type"),110); + tab->addColumn("",0); // Hidden column for package type + tab->addColumn(i18n("Package"),180); + tab->addColumn(i18n("File Name"),330); + tab->setAllColumnsShowFocus(TRUE); + tab->setSorting(1); + + if (kpackage->management->dirInstPackages->find("apt-file/deb")) { + searchAll = new QCheckBox(i18n("Also search uninstalled packages"), frame1, "searchAll"); + } else { + searchAll = new QCheckBox(i18n("Also search uninstalled packages (apt-file needs to be installed)"), frame1, "searchAll"); + } + searchAll->setChecked(FALSE); + + gtop->addWidget(valueLabel, 0, 0); + gtop->addWidget(value, 0, 1); + gtop->addMultiCellWidget(tab, 1, 1, 0, 1); + + gtop->addWidget(searchAll, 2, 0); + + connect(this, SIGNAL(user1Clicked()), this, SLOT(ok_slot())); + connect(this, SIGNAL(closeClicked()), this, SLOT(done_slot())); + enableButton(User1 , false); + show(); + + setAcceptDrops(true); +} + +FindF::~FindF() +{ +} + +void FindF::checkSearchAll() +{ + // button not enabled if no package interface has search uninstalled + // packages for files ability + bool hasAll = FALSE; + for (int i = 0; i < kpinterfaceN; i++) { + if (kpinterface[i] && opts->handlePackage[i]) { + if (kpinterface[i]->hasSearchAll) + hasAll = TRUE; + } + } + + searchAll->setEnabled(hasAll); +} + +void FindF::textChanged ( const QString & text) +{ + enableButton(User1 , !text.isEmpty()); +} + +void FindF::ok_slot() +{ + doFind(value->text()); +} + +void FindF::doFind(const QString &str) +{ + QString t; + int i, cnt = 0; + + bool all = searchAll->isChecked(); + + QApplication::setOverrideCursor( waitCursor ); + + tab->clear(); + + for (i = 0; i < kpinterfaceN; i++) { + if (kpinterface[i] && opts->handlePackage[i]) { + QStringList filelist = kpinterface[i]->FindFile(str, all); + + if (filelist.count() > 0) { + cnt++; + + for ( QStringList::Iterator it = filelist.begin(); it != filelist.end(); ++it ) { + if ((*it).find("diversion by") >= 0) { + new QListViewItem(tab, "", *it); + } + + int t1 = (*it).find('\t'); + QString s1 = (*it).left(t1); + QString s2 = (*it).right((*it).length()-t1); + s2 = s2.stripWhiteSpace(); + + QListViewItem *ql = new QListViewItem(tab, "", kpinterface[i]->name, kpinterface[i]->head, s1, s2); + + QString tx = s1 + kpinterface[i]->typeID; + if (kpackage->management->dirInstPackages->find(tx)) { + ql->setPixmap(0,tick); + } + } + } + } + } + + if (!cnt) { + new QListViewItem(tab, "", i18n("--Nothing found--")); + } + + QApplication::restoreOverrideCursor(); +} + +void FindF::done_slot() +{ + hide(); +} + +void FindF::resizeEvent(QResizeEvent *){ +} + +void FindF::search(QListViewItem *item) +{ + int p; + + QString s = item->text(3); + s = s.stripWhiteSpace(); + kdDebug() << "searchF=" << s << "\n"; + + p = s.find(','); + if (p > 0) { + s.truncate(p); + } + + KpTreeListItem *k = kpackage->management->treeList->search(s ,item->text(2)); + if (k) + kpackage->management->treeList->changePack(k); +} + +void FindF::dragEnterEvent(QDragEnterEvent* e) +{ + e->accept(KURLDrag::canDecode(e)); +} + +void FindF::dropEvent(QDropEvent *de) // something has been dropped +{ + KURL::List list; + if (!KURLDrag::decode(de, list) || list.isEmpty()) + return; + + const KURL &url = list.first(); + + if (url.isLocalFile()) { + QString file = url.path(-1); + value->setText(file); + doFind(file); + } else { + KpMsgE(i18n("Incorrect URL type"),FALSE); + } +} + +#include "findf.moc" |