2001-10-18 09:14:25 +00:00
|
|
|
/***********************************************************************
|
|
|
|
*
|
|
|
|
* kftabdlg.cpp
|
|
|
|
*
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#include <qbuttongroup.h>
|
|
|
|
#include <qradiobutton.h>
|
|
|
|
#include <qlabel.h>
|
|
|
|
#include <qlayout.h>
|
|
|
|
#include <qcheckbox.h>
|
2002-03-27 23:23:32 +00:00
|
|
|
#include <qwhatsthis.h>
|
2002-04-11 22:41:29 +00:00
|
|
|
#include <qtooltip.h>
|
2003-01-01 11:47:54 +00:00
|
|
|
#include <qcombobox.h>
|
|
|
|
#include <qspinbox.h>
|
2003-04-20 19:38:31 +00:00
|
|
|
#include <qpushbutton.h>
|
|
|
|
#include <qapplication.h>
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2003-01-03 20:31:27 +00:00
|
|
|
#include <kcalendarsystem.h>
|
2003-04-20 19:38:31 +00:00
|
|
|
#include <kglobal.h>
|
2002-04-26 00:21:21 +00:00
|
|
|
#include <kcombobox.h>
|
|
|
|
#include <klineedit.h>
|
2001-10-18 09:14:25 +00:00
|
|
|
#include <klocale.h>
|
|
|
|
#include <kmessagebox.h>
|
|
|
|
#include <kfiledialog.h>
|
2001-10-26 09:25:21 +00:00
|
|
|
#include <kregexpeditorinterface.h>
|
|
|
|
#include <kparts/componentfactory.h>
|
2003-04-20 19:38:31 +00:00
|
|
|
#include <kstandarddirs.h>
|
2005-12-19 14:02:54 +00:00
|
|
|
#include <q3ptrlist.h>
|
2001-10-18 09:14:25 +00:00
|
|
|
#include "kquery.h"
|
2003-04-20 19:38:31 +00:00
|
|
|
#include "kftabdlg.h"
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
// Static utility functions
|
|
|
|
static void save_pattern(QComboBox *, const QString &, const QString &);
|
|
|
|
|
|
|
|
#define SPECIAL_TYPES 7
|
|
|
|
|
2005-07-28 14:59:42 +00:00
|
|
|
class KSortedMimeTypeList : public Q3PtrList<KMimeType>
|
2001-10-18 09:14:25 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
KSortedMimeTypeList() { };
|
2005-07-28 14:59:42 +00:00
|
|
|
int compareItems(Q3PtrCollection::Item s1, Q3PtrCollection::Item s2)
|
2001-10-18 09:14:25 +00:00
|
|
|
{
|
|
|
|
KMimeType *item1 = (KMimeType *) s1;
|
|
|
|
KMimeType *item2 = (KMimeType *) s2;
|
|
|
|
if (item1->comment() > item2->comment()) return 1;
|
|
|
|
if (item1->comment() == item2->comment()) return 0;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
KfindTabWidget::KfindTabWidget(QWidget *parent, const char *name)
|
2001-10-18 18:10:30 +00:00
|
|
|
: QTabWidget( parent, name ), regExpDialog(0)
|
2001-10-18 09:14:25 +00:00
|
|
|
{
|
|
|
|
// This validator will be used for all numeric edit fields
|
2002-04-07 11:10:21 +00:00
|
|
|
//KDigitValidator *digitV = new KDigitValidator(this);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
// ************ Page One ************
|
|
|
|
|
|
|
|
pages[0] = new QWidget( this, "page1" );
|
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
nameBox = new KComboBox(true, pages[0]);
|
2004-12-28 18:54:55 +00:00
|
|
|
nameBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); // allow smaller than widest entry
|
2001-10-18 09:14:25 +00:00
|
|
|
QLabel * namedL = new QLabel(nameBox, i18n("&Named:"), pages[0], "named");
|
2005-09-21 09:17:56 +00:00
|
|
|
namedL->setToolTip( i18n("You can use wildcard matching and \";\" for separating multiple names") );
|
2005-10-03 13:23:25 +00:00
|
|
|
dirBox = new KComboBox(true, pages[0]);
|
2004-12-28 18:54:55 +00:00
|
|
|
dirBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); // allow smaller than widest entry
|
2004-03-28 07:21:35 +00:00
|
|
|
QLabel * lookinL = new QLabel(dirBox, i18n("Look &in:"), pages[0], "named");
|
2003-10-21 23:27:16 +00:00
|
|
|
subdirsCb = new QCheckBox(i18n("Include &subfolders"), pages[0]);
|
2002-07-12 08:08:43 +00:00
|
|
|
caseSensCb = new QCheckBox(i18n("Case s&ensitive search"), pages[0]);
|
2001-10-18 09:14:25 +00:00
|
|
|
browseB = new QPushButton(i18n("&Browse..."), pages[0]);
|
2004-04-30 19:10:36 +00:00
|
|
|
useLocateCb = new QCheckBox(i18n("&Use files index"), pages[0]);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
// Setup
|
|
|
|
|
|
|
|
subdirsCb->setChecked(true);
|
2002-09-23 18:55:22 +00:00
|
|
|
caseSensCb->setChecked(false);
|
2003-04-20 19:38:31 +00:00
|
|
|
useLocateCb->setChecked(false);
|
2005-07-28 14:59:42 +00:00
|
|
|
if(KStandardDirs::findExe("locate").isEmpty())
|
2003-04-20 19:38:31 +00:00
|
|
|
useLocateCb->setEnabled(false);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
nameBox->setDuplicatesEnabled(false);
|
2002-10-29 01:02:46 +00:00
|
|
|
nameBox->setFocus();
|
2005-10-03 13:23:25 +00:00
|
|
|
dirBox->setDuplicatesEnabled(false);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
nameBox->setInsertionPolicy(QComboBox::AtTop);
|
|
|
|
dirBox->setInsertionPolicy(QComboBox::AtTop);
|
|
|
|
|
2002-09-02 16:26:45 +00:00
|
|
|
const QString nameWhatsThis
|
2004-07-13 22:10:40 +00:00
|
|
|
= i18n("<qt>Enter the filename you are looking for. <br>"
|
2002-09-02 16:26:45 +00:00
|
|
|
"Alternatives may be separated by a semicolon \";\".<br>"
|
2002-03-27 23:23:32 +00:00
|
|
|
"<br>"
|
2004-07-13 22:10:40 +00:00
|
|
|
"The filename may contain the following special characters:"
|
2002-03-27 23:23:32 +00:00
|
|
|
"<ul>"
|
|
|
|
"<li><b>?</b> matches any single character</li>"
|
|
|
|
"<li><b>*</b> matches zero or more of any characters</li>"
|
|
|
|
"<li><b>[...]</b> matches any of the characters in braces</li>"
|
|
|
|
"</ul>"
|
|
|
|
"<br>"
|
|
|
|
"Example searches:"
|
|
|
|
"<ul>"
|
|
|
|
"<li><b>*.kwd;*.txt</b> finds all files ending with .kwd or .txt</li>"
|
|
|
|
"<li><b>go[dt]</b> finds god and got</li>"
|
|
|
|
"<li><b>Hel?o</b> finds all files that start with \"Hel\" and end with \"o\", "
|
|
|
|
"having one character in between</li>"
|
|
|
|
"<li><b>My Document.kwd</b> finds a file of exactly that name</li>"
|
|
|
|
"</ul></qt>");
|
|
|
|
QWhatsThis::add(nameBox,nameWhatsThis);
|
|
|
|
QWhatsThis::add(namedL,nameWhatsThis);
|
2003-04-20 19:38:31 +00:00
|
|
|
const QString whatsfileindex
|
2003-10-21 14:51:55 +00:00
|
|
|
= i18n("<qt>This lets you use the files' index created by the <i>slocate</i> "
|
2004-05-19 14:10:16 +00:00
|
|
|
"package to speed-up the search; remember to update the index from time to time "
|
2003-10-21 14:51:55 +00:00
|
|
|
"(using <i>updatedb</i>)."
|
|
|
|
"</qt>");
|
|
|
|
QWhatsThis::add(useLocateCb,whatsfileindex);
|
2002-03-27 23:23:32 +00:00
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
// Layout
|
|
|
|
|
2002-04-11 22:41:29 +00:00
|
|
|
QGridLayout *grid = new QGridLayout( pages[0], 3, 2,
|
2001-10-18 09:14:25 +00:00
|
|
|
KDialog::marginHint(),
|
|
|
|
KDialog::spacingHint() );
|
2004-12-28 18:54:55 +00:00
|
|
|
QBoxLayout *subgrid = new QVBoxLayout( -1 , "subgrid" );
|
2001-10-18 09:14:25 +00:00
|
|
|
grid->addWidget( namedL, 0, 0 );
|
|
|
|
grid->addMultiCellWidget( nameBox, 0, 0, 1, 2 );
|
|
|
|
grid->addWidget( lookinL, 1, 0 );
|
|
|
|
grid->addWidget( dirBox, 1, 1 );
|
|
|
|
grid->addWidget( browseB, 1, 2);
|
|
|
|
grid->setColStretch(1,1);
|
|
|
|
grid->addMultiCellLayout( subgrid, 2, 2, 1, 2 );
|
|
|
|
subgrid->addWidget( subdirsCb );
|
|
|
|
subgrid->addWidget( caseSensCb);
|
2003-04-20 19:38:31 +00:00
|
|
|
subgrid->addWidget( useLocateCb );
|
2004-12-28 18:54:55 +00:00
|
|
|
subgrid->addStretch(1);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
// Signals
|
|
|
|
|
|
|
|
connect( browseB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(getDirectory()) );
|
|
|
|
|
2002-07-19 23:32:40 +00:00
|
|
|
connect( nameBox, SIGNAL(activated(int)),
|
|
|
|
this, SIGNAL(startSearch()));
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
// ************ Page Two
|
|
|
|
|
|
|
|
pages[1] = new QWidget( this, "page2" );
|
|
|
|
|
|
|
|
findCreated = new QCheckBox(i18n("Find all files created or &modified:"), pages[1]);
|
|
|
|
bg = new QButtonGroup();
|
|
|
|
rb[0] = new QRadioButton(i18n("&between"), pages[1] );
|
2002-08-03 17:23:53 +00:00
|
|
|
rb[1] = new QRadioButton(i18n("&during the previous"), pages[1] );
|
2001-10-18 09:14:25 +00:00
|
|
|
QLabel * andL = new QLabel(i18n("and"), pages[1], "and");
|
2005-10-03 13:23:25 +00:00
|
|
|
betweenType = new KComboBox(false, pages[1] );
|
|
|
|
betweenType->setObjectName( "comboBetweenType" );
|
2001-10-18 09:14:25 +00:00
|
|
|
betweenType->insertItem(i18n("minute(s)"));
|
|
|
|
betweenType->insertItem(i18n("hour(s)"));
|
|
|
|
betweenType->insertItem(i18n("day(s)"));
|
|
|
|
betweenType->insertItem(i18n("month(s)"));
|
|
|
|
betweenType->insertItem(i18n("year(s)"));
|
|
|
|
betweenType->setCurrentItem(1);
|
|
|
|
|
2003-07-24 17:20:12 +00:00
|
|
|
|
2003-04-21 22:53:08 +00:00
|
|
|
QDate dt = KGlobal::locale()->calendar()->addYears(QDate::currentDate(), -1);
|
2003-07-24 17:20:12 +00:00
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
fromDate = new KDateCombo(dt, pages[1] );
|
|
|
|
fromDate->setObjectName( "fromDate" );
|
|
|
|
toDate = new KDateCombo(pages[1] );
|
|
|
|
toDate->setObjectName( "toDate" );
|
|
|
|
timeBox = new QSpinBox(1, 60, 1, pages[1] );
|
|
|
|
timeBox->setObjectName( "timeBox" );
|
|
|
|
|
|
|
|
sizeBox =new KComboBox(false, pages[1] );
|
|
|
|
sizeBox->setObjectName( "sizeBox" );
|
|
|
|
QLabel * sizeL =new QLabel(sizeBox,i18n("File &size is:"), pages[1]);
|
|
|
|
sizeEdit=new QSpinBox(0, INT_MAX, 1, pages[1] );
|
|
|
|
sizeEdit->setObjectName( "sizeEdit" );
|
2002-07-08 21:57:47 +00:00
|
|
|
sizeEdit->setValue(1);
|
2005-10-03 13:23:25 +00:00
|
|
|
sizeUnitBox =new KComboBox(false, pages[1] );
|
|
|
|
sizeUnitBox->setObjectName( "sizeUnitBox" );
|
2002-07-08 21:57:47 +00:00
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
m_usernameBox = new KComboBox( true, pages[1] );
|
|
|
|
m_usernameBox->setObjectName( "m_combo1");
|
2002-07-08 21:57:47 +00:00
|
|
|
QLabel *usernameLabel= new QLabel(m_usernameBox,i18n("Files owned by &user:"),pages[1]);
|
2005-10-03 13:23:25 +00:00
|
|
|
m_groupBox = new KComboBox( true, pages[1] );
|
|
|
|
m_groupBox->setObjectName( "m_combo2" );
|
2002-07-08 21:57:47 +00:00
|
|
|
QLabel *groupLabel= new QLabel(m_groupBox,i18n("Owned by &group:"),pages[1]);
|
|
|
|
|
|
|
|
sizeBox ->insertItem( i18n("(none)") );
|
|
|
|
sizeBox ->insertItem( i18n("At Least") );
|
|
|
|
sizeBox ->insertItem( i18n("At Most") );
|
|
|
|
sizeBox ->insertItem( i18n("Equal To") );
|
|
|
|
|
2002-09-02 16:26:45 +00:00
|
|
|
sizeUnitBox ->insertItem( i18n("Bytes") );
|
|
|
|
sizeUnitBox ->insertItem( i18n("KB") );
|
|
|
|
sizeUnitBox ->insertItem( i18n("MB") );
|
2002-07-08 21:57:47 +00:00
|
|
|
sizeUnitBox ->setCurrentItem(1);
|
|
|
|
|
|
|
|
int tmp = sizeEdit->fontMetrics().width(" 000000000 ");
|
|
|
|
sizeEdit->setMinimumSize(tmp, sizeEdit->sizeHint().height());
|
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
m_usernameBox->setDuplicatesEnabled(false);
|
|
|
|
m_groupBox->setDuplicatesEnabled(false);
|
2002-07-08 21:57:47 +00:00
|
|
|
m_usernameBox->setInsertionPolicy(QComboBox::AtTop);
|
|
|
|
m_groupBox->setInsertionPolicy(QComboBox::AtTop);
|
|
|
|
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
// Setup
|
2003-07-24 17:20:12 +00:00
|
|
|
timeBox->setButtonSymbols(QSpinBox::PlusMinus);
|
|
|
|
rb[0]->setChecked(true);
|
2001-10-18 09:14:25 +00:00
|
|
|
bg->insert( rb[0] );
|
|
|
|
bg->insert( rb[1] );
|
|
|
|
|
|
|
|
// Layout
|
|
|
|
|
2002-07-08 21:57:47 +00:00
|
|
|
QGridLayout *grid1 = new QGridLayout( pages[1], 5, 6,
|
2001-10-18 09:14:25 +00:00
|
|
|
KDialog::marginHint(),
|
|
|
|
KDialog::spacingHint() );
|
2002-07-08 21:57:47 +00:00
|
|
|
|
|
|
|
grid1->addMultiCellWidget(findCreated, 0, 0, 0, 3 );
|
2001-10-18 09:14:25 +00:00
|
|
|
grid1->addColSpacing(0, KDialog::spacingHint());
|
2002-07-08 21:57:47 +00:00
|
|
|
|
|
|
|
grid1->addWidget(rb[0], 1, 1 );
|
|
|
|
grid1->addWidget(fromDate, 1, 2 );
|
2005-07-28 14:59:42 +00:00
|
|
|
grid1->addWidget(andL, 1, 3, Qt::AlignHCenter );
|
2002-07-08 21:57:47 +00:00
|
|
|
grid1->addWidget(toDate, 1, 4 );
|
|
|
|
|
|
|
|
grid1->addWidget(rb[1], 2, 1 );
|
|
|
|
grid1->addMultiCellWidget(timeBox, 2, 2, 2, 3);
|
|
|
|
grid1->addWidget(betweenType, 2, 4 );
|
|
|
|
|
|
|
|
grid1->addMultiCellWidget(sizeL,3,3,0,1);
|
|
|
|
grid1->addWidget(sizeBox,3,2);
|
|
|
|
grid1->addWidget(sizeEdit,3,3);
|
|
|
|
grid1->addWidget(sizeUnitBox,3,4);
|
|
|
|
|
|
|
|
grid1->addMultiCellWidget(usernameLabel,4,4,0,1);
|
|
|
|
grid1->addWidget(m_usernameBox,4,2);
|
|
|
|
grid1->addWidget(groupLabel,4,3);
|
|
|
|
grid1->addWidget(m_groupBox,4,4);
|
|
|
|
|
2002-04-11 22:41:29 +00:00
|
|
|
for (int c=1; c<=4; c++)
|
|
|
|
grid1->setColStretch(c,1);
|
2002-07-08 21:57:47 +00:00
|
|
|
|
|
|
|
grid1->setRowStretch(6,1);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
// Connect
|
2003-07-24 17:20:12 +00:00
|
|
|
connect( findCreated, SIGNAL(toggled(bool)), SLOT(fixLayout()) );
|
2005-07-28 14:59:42 +00:00
|
|
|
connect( bg, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(fixLayout()) );
|
2003-07-24 17:20:12 +00:00
|
|
|
connect( sizeBox, SIGNAL(highlighted(int)), this, SLOT(slotSizeBoxChanged(int)));
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2003-10-21 14:51:55 +00:00
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
// ************ Page Three
|
|
|
|
|
|
|
|
pages[2] = new QWidget( this, "page3" );
|
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
typeBox =new KComboBox(false, pages[2] );
|
|
|
|
typeBox->setObjectName( "typeBox" );
|
2004-12-28 18:54:55 +00:00
|
|
|
typeBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); // allow smaller than widest entry
|
2005-10-03 13:23:25 +00:00
|
|
|
QLabel * typeL =new QLabel(typeBox, i18n("File &type:"), pages[2] );
|
|
|
|
textEdit=new KLineEdit(pages[2]);
|
|
|
|
textEdit->setObjectName( "textEdit" );
|
|
|
|
QLabel * textL =new QLabel(textEdit, i18n("C&ontaining text:"), pages[2]);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2004-05-29 23:43:07 +00:00
|
|
|
connect( textEdit, SIGNAL(returnPressed(const QString &)), SIGNAL( startSearch()));
|
|
|
|
|
2003-05-25 15:31:34 +00:00
|
|
|
const QString containingtext
|
|
|
|
= i18n("<qt>If specified, only files that contain this text"
|
|
|
|
" are found. Note that not all file types from the list"
|
|
|
|
" above are supported. Please refer to the documentation"
|
|
|
|
" for a list of supported file types."
|
|
|
|
"</qt>");
|
2005-09-21 09:17:56 +00:00
|
|
|
textEdit->setToolTip(containingtext);
|
2003-05-25 15:31:34 +00:00
|
|
|
QWhatsThis::add(textL,containingtext);
|
|
|
|
|
2002-09-10 09:51:20 +00:00
|
|
|
caseContextCb =new QCheckBox(i18n("Case s&ensitive"), pages[2]);
|
2003-05-26 18:16:17 +00:00
|
|
|
binaryContextCb =new QCheckBox(i18n("Include &binary files"), pages[2]);
|
2002-07-08 21:57:47 +00:00
|
|
|
regexpContentCb =new QCheckBox(i18n("Regular e&xpression"), pages[2]);
|
2001-11-04 08:56:15 +00:00
|
|
|
|
2003-08-21 21:12:25 +00:00
|
|
|
const QString binaryTooltip
|
|
|
|
= i18n("<qt>This lets you search in any type of file, "
|
|
|
|
"even those that usually do not contain text (for example "
|
|
|
|
"program files and images).</qt>");
|
2005-09-21 09:17:56 +00:00
|
|
|
binaryContextCb->setToolTip(binaryTooltip);
|
2003-08-21 21:12:25 +00:00
|
|
|
|
2001-11-04 08:56:15 +00:00
|
|
|
QPushButton* editRegExp = 0;
|
2002-03-31 14:48:15 +00:00
|
|
|
if ( !KTrader::self()->query("KRegExpEditor/KRegExpEditor").isEmpty() ) {
|
2005-10-03 13:23:25 +00:00
|
|
|
// The editor is available, so lets use it.
|
|
|
|
editRegExp = new QPushButton(i18n("&Edit..."), pages[2]);
|
|
|
|
editRegExp->setObjectName( "editRegExp" );
|
2001-11-04 08:56:15 +00:00
|
|
|
}
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2005-10-03 13:23:25 +00:00
|
|
|
metainfokeyEdit=new KLineEdit(pages[2]);
|
|
|
|
metainfoEdit=new KLineEdit(pages[2]);
|
|
|
|
QLabel * textMetaInfo = new QLabel(metainfoEdit, i18n("fo&r:"), pages[2]);
|
|
|
|
QLabel * textMetaKey = new QLabel(metainfokeyEdit, i18n("Search &metainfo sections:"), pages[2]);
|
2002-04-11 22:41:29 +00:00
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
// Setup
|
2003-10-21 23:27:16 +00:00
|
|
|
typeBox->insertItem(i18n("All Files & Folders"));
|
2001-10-18 09:14:25 +00:00
|
|
|
typeBox->insertItem(i18n("Files"));
|
2003-10-21 23:27:16 +00:00
|
|
|
typeBox->insertItem(i18n("Folders"));
|
2001-12-30 09:19:53 +00:00
|
|
|
typeBox->insertItem(i18n("Symbolic Links"));
|
2005-01-29 16:13:58 +00:00
|
|
|
typeBox->insertItem(i18n("Special Files (Sockets, Device Files, ...)"));
|
2001-12-30 09:19:53 +00:00
|
|
|
typeBox->insertItem(i18n("Executable Files"));
|
|
|
|
typeBox->insertItem(i18n("SUID Executable Files"));
|
2004-05-29 18:00:17 +00:00
|
|
|
typeBox->insertItem(i18n("All Images"));
|
|
|
|
typeBox->insertItem(i18n("All Video"));
|
|
|
|
typeBox->insertItem(i18n("All Sounds"));
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
initMimeTypes();
|
2003-10-29 18:33:34 +00:00
|
|
|
initSpecialMimeTypes();
|
2004-04-30 19:10:36 +00:00
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
for ( KMimeType::List::ConstIterator it = m_types.begin();
|
|
|
|
it != m_types.end(); ++it )
|
|
|
|
{
|
|
|
|
KMimeType::Ptr typ = *it;
|
2003-06-09 01:58:26 +00:00
|
|
|
typeBox->insertItem(typ->pixmap( KIcon::Small ), typ->comment());
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
2002-03-31 14:48:15 +00:00
|
|
|
if ( editRegExp ) {
|
2001-11-04 08:56:15 +00:00
|
|
|
// The editor was available, so lets use it.
|
|
|
|
connect( regexpContentCb, SIGNAL(toggled(bool) ), editRegExp, SLOT(setEnabled(bool)) );
|
|
|
|
editRegExp->setEnabled(false);
|
|
|
|
connect( editRegExp, SIGNAL(clicked()), this, SLOT( slotEditRegExp() ) );
|
|
|
|
}
|
2003-01-08 14:53:53 +00:00
|
|
|
else
|
|
|
|
regexpContentCb->hide();
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
// Layout
|
|
|
|
tmp = sizeEdit->fontMetrics().width(" 00000 ");
|
|
|
|
sizeEdit->setMinimumSize(tmp, sizeEdit->sizeHint().height());
|
|
|
|
|
2002-04-11 22:41:29 +00:00
|
|
|
QGridLayout *grid2 = new QGridLayout( pages[2], 5, 4,
|
2001-10-18 09:14:25 +00:00
|
|
|
KDialog::marginHint(),
|
|
|
|
KDialog::spacingHint() );
|
|
|
|
grid2->addWidget( typeL, 0, 0 );
|
|
|
|
grid2->addWidget( textL, 1, 0 );
|
2002-04-03 04:14:24 +00:00
|
|
|
grid2->addMultiCellWidget( typeBox, 0, 0, 1, 3 );
|
|
|
|
grid2->addMultiCellWidget( textEdit, 1, 1, 1, 3 );
|
|
|
|
grid2->addWidget( regexpContentCb, 2, 2);
|
2002-04-03 01:48:35 +00:00
|
|
|
grid2->addWidget( caseContextCb, 2, 1 );
|
2003-05-26 18:16:17 +00:00
|
|
|
grid2->addWidget( binaryContextCb, 3, 1);
|
2001-11-04 08:56:15 +00:00
|
|
|
|
2003-05-26 18:16:17 +00:00
|
|
|
grid2->addWidget( textMetaKey, 4, 0 );
|
|
|
|
grid2->addWidget( metainfokeyEdit, 4, 1 );
|
2005-07-28 14:59:42 +00:00
|
|
|
grid2->addWidget( textMetaInfo, 4, 2, Qt::AlignHCenter );
|
2003-05-26 18:16:17 +00:00
|
|
|
grid2->addWidget( metainfoEdit, 4, 3 );
|
2002-07-08 21:57:47 +00:00
|
|
|
|
|
|
|
metainfokeyEdit->setText("*");
|
2002-04-11 22:41:29 +00:00
|
|
|
|
2002-03-31 14:48:15 +00:00
|
|
|
if ( editRegExp ) {
|
2001-11-04 08:56:15 +00:00
|
|
|
// The editor was available, so lets use it.
|
2002-04-03 04:14:24 +00:00
|
|
|
grid2->addWidget( editRegExp, 2, 3 );
|
2001-11-04 08:56:15 +00:00
|
|
|
}
|
2002-09-02 16:26:45 +00:00
|
|
|
|
2002-08-12 14:30:20 +00:00
|
|
|
addTab( pages[0], i18n("Name/&Location") );
|
|
|
|
addTab( pages[2], i18n("C&ontents") );
|
|
|
|
addTab( pages[1], i18n("&Properties") );
|
2002-06-22 10:18:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Setup
|
|
|
|
const QString whatsmetainfo
|
|
|
|
= i18n("<qt>Search within files' specific comments/metainfo<br>"
|
2002-06-30 01:41:13 +00:00
|
|
|
"These are some examples:<br>"
|
2002-06-22 10:18:04 +00:00
|
|
|
"<ul>"
|
|
|
|
"<li><b>Audio files (mp3...)</b> Search in id3 tag for a title, an album</li>"
|
|
|
|
"<li><b>Images (png...)</b> Search images with a special resolution, comment...</li>"
|
|
|
|
"</ul>"
|
|
|
|
"</qt>");
|
|
|
|
const QString whatsmetainfokey
|
|
|
|
= i18n("<qt>If specified, search only in this field<br>"
|
|
|
|
"<ul>"
|
2003-05-25 18:49:55 +00:00
|
|
|
"<li><b>Audio files (mp3...)</b> This can be Title, Album...</li>"
|
|
|
|
"<li><b>Images (png...)</b> Search only in Resolution, Bitdepth...</li>"
|
2002-06-22 10:18:04 +00:00
|
|
|
"</ul>"
|
|
|
|
"</qt>");
|
|
|
|
QWhatsThis::add(textMetaInfo,whatsmetainfo);
|
2005-09-21 09:17:56 +00:00
|
|
|
metainfoEdit->setToolTip(whatsmetainfo);
|
2002-06-22 10:18:04 +00:00
|
|
|
QWhatsThis::add(textMetaKey,whatsmetainfokey);
|
2005-09-21 09:17:56 +00:00
|
|
|
metainfokeyEdit->setToolTip(whatsmetainfokey);
|
2002-06-22 10:18:04 +00:00
|
|
|
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
fixLayout();
|
|
|
|
loadHistory();
|
|
|
|
}
|
|
|
|
|
|
|
|
KfindTabWidget::~KfindTabWidget()
|
|
|
|
{
|
|
|
|
delete pages[0];
|
|
|
|
delete pages[1];
|
|
|
|
delete pages[2];
|
|
|
|
}
|
|
|
|
|
2006-01-24 08:32:09 +00:00
|
|
|
void KfindTabWidget::setURL( const KUrl & url )
|
2001-10-18 09:14:25 +00:00
|
|
|
{
|
|
|
|
KConfig *conf = KGlobal::config();
|
|
|
|
conf->setGroup("History");
|
|
|
|
m_url = url;
|
2003-11-25 20:07:33 +00:00
|
|
|
QStringList sl = conf->readPathListEntry("Directories");
|
2002-02-10 00:23:04 +00:00
|
|
|
dirBox->clear(); // make sure there is no old Stuff in there
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
if(!sl.isEmpty()) {
|
|
|
|
dirBox->insertStringList(sl);
|
|
|
|
// If the _searchPath already exists in the list we do not
|
|
|
|
// want to add it again
|
|
|
|
int indx = sl.findIndex(m_url.url());
|
|
|
|
if(indx == -1)
|
|
|
|
dirBox->insertItem(m_url.url(), 0); // make it the first one
|
|
|
|
else
|
|
|
|
dirBox->setCurrentItem(indx);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QDir m_dir("/lib");
|
|
|
|
dirBox ->insertItem( m_url.url() );
|
2005-11-08 10:20:07 +00:00
|
|
|
dirBox ->insertItem( "file:" + QDir::homePath() );
|
2001-10-18 09:14:25 +00:00
|
|
|
dirBox ->insertItem( "file:/" );
|
|
|
|
dirBox ->insertItem( "file:/usr" );
|
|
|
|
if (m_dir.exists())
|
|
|
|
dirBox ->insertItem( "file:/lib" );
|
|
|
|
dirBox ->insertItem( "file:/home" );
|
|
|
|
dirBox ->insertItem( "file:/etc" );
|
|
|
|
dirBox ->insertItem( "file:/var" );
|
|
|
|
dirBox ->insertItem( "file:/mnt" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-08 21:57:47 +00:00
|
|
|
void KfindTabWidget::initMimeTypes()
|
2001-10-18 09:14:25 +00:00
|
|
|
{
|
|
|
|
KMimeType::List tmp = KMimeType::allMimeTypes();
|
|
|
|
KSortedMimeTypeList sortedList;
|
|
|
|
for ( KMimeType::List::ConstIterator it = tmp.begin();
|
|
|
|
it != tmp.end(); ++it )
|
|
|
|
{
|
2005-11-01 17:49:30 +00:00
|
|
|
const KMimeType*type = (*it).data();
|
2003-10-21 14:51:55 +00:00
|
|
|
if ((!type->comment().isEmpty())
|
2003-06-09 03:06:36 +00:00
|
|
|
&& (!type->name().startsWith("kdedevice/"))
|
|
|
|
&& (!type->name().startsWith("all/")))
|
2002-04-26 00:21:21 +00:00
|
|
|
sortedList.append(type);
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
sortedList.sort();
|
|
|
|
for ( KMimeType *type = sortedList.first(); type; type = sortedList.next())
|
|
|
|
{
|
|
|
|
m_types.append(type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-10-29 18:33:34 +00:00
|
|
|
void KfindTabWidget::initSpecialMimeTypes()
|
|
|
|
{
|
|
|
|
KMimeType::List tmp = KMimeType::allMimeTypes();
|
|
|
|
|
|
|
|
for ( KMimeType::List::ConstIterator it = tmp.begin(); it != tmp.end(); ++it )
|
|
|
|
{
|
2005-11-01 17:49:30 +00:00
|
|
|
const KMimeType* type = (*it).data();
|
2003-10-29 18:33:34 +00:00
|
|
|
|
|
|
|
if(!type->comment().isEmpty()) {
|
|
|
|
if(type->name().startsWith("image/"))
|
|
|
|
m_ImageTypes.append(type->name());
|
|
|
|
else if(type->name().startsWith("video/"))
|
|
|
|
m_VideoTypes.append(type->name());
|
|
|
|
else if(type->name().startsWith("audio/"))
|
|
|
|
m_AudioTypes.append(type->name());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
void KfindTabWidget::saveHistory()
|
|
|
|
{
|
|
|
|
save_pattern(nameBox, "History", "Patterns");
|
|
|
|
save_pattern(dirBox, "History", "Directories");
|
|
|
|
}
|
|
|
|
|
|
|
|
void KfindTabWidget::loadHistory()
|
|
|
|
{
|
|
|
|
// Load pattern history
|
|
|
|
KConfig *conf = KGlobal::config();
|
|
|
|
conf->setGroup("History");
|
2006-01-25 08:42:27 +00:00
|
|
|
QStringList sl = conf->readEntry("Patterns", QStringList());
|
2001-10-18 09:14:25 +00:00
|
|
|
if(!sl.isEmpty())
|
|
|
|
nameBox->insertStringList(sl);
|
|
|
|
else
|
|
|
|
nameBox->insertItem("*");
|
2001-10-18 21:30:11 +00:00
|
|
|
|
2003-11-25 20:07:33 +00:00
|
|
|
sl = conf->readPathListEntry("Directories");
|
2001-10-18 21:30:11 +00:00
|
|
|
if(!sl.isEmpty()) {
|
|
|
|
dirBox->insertStringList(sl);
|
|
|
|
// If the _searchPath already exists in the list we do not
|
|
|
|
// want to add it again
|
|
|
|
int indx = sl.findIndex(m_url.url());
|
|
|
|
if(indx == -1)
|
|
|
|
dirBox->insertItem(m_url.url(), 0); // make it the first one
|
|
|
|
else
|
|
|
|
dirBox->setCurrentItem(indx);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QDir m_dir("/lib");
|
|
|
|
dirBox ->insertItem( m_url.url() );
|
2005-11-08 10:20:07 +00:00
|
|
|
dirBox ->insertItem( "file:" + QDir::homePath() );
|
2001-10-18 21:30:11 +00:00
|
|
|
dirBox ->insertItem( "file:/" );
|
|
|
|
dirBox ->insertItem( "file:/usr" );
|
|
|
|
if (m_dir.exists())
|
|
|
|
dirBox ->insertItem( "file:/lib" );
|
|
|
|
dirBox ->insertItem( "file:/home" );
|
|
|
|
dirBox ->insertItem( "file:/etc" );
|
|
|
|
dirBox ->insertItem( "file:/var" );
|
|
|
|
dirBox ->insertItem( "file:/mnt" );
|
|
|
|
}
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
2002-03-31 14:48:15 +00:00
|
|
|
void KfindTabWidget::slotEditRegExp()
|
2001-10-18 18:10:30 +00:00
|
|
|
{
|
|
|
|
if ( ! regExpDialog )
|
2006-01-02 17:28:18 +00:00
|
|
|
regExpDialog = KParts::ComponentFactory::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor", QString(), this );
|
2001-10-18 18:10:30 +00:00
|
|
|
|
2005-07-28 14:59:42 +00:00
|
|
|
KRegExpEditorInterface *iface = dynamic_cast<KRegExpEditorInterface *>( regExpDialog );
|
2001-10-20 18:45:15 +00:00
|
|
|
if ( !iface )
|
2002-03-31 14:48:15 +00:00
|
|
|
return;
|
2001-10-20 18:45:15 +00:00
|
|
|
|
2001-10-26 09:25:21 +00:00
|
|
|
iface->setRegExp( textEdit->text() );
|
2001-10-18 18:10:30 +00:00
|
|
|
bool ok = regExpDialog->exec();
|
|
|
|
if ( ok )
|
2001-10-26 09:25:21 +00:00
|
|
|
textEdit->setText( iface->regExp() );
|
2001-10-18 18:10:30 +00:00
|
|
|
}
|
|
|
|
|
2002-10-17 11:12:58 +00:00
|
|
|
void KfindTabWidget::setFocus()
|
|
|
|
{
|
|
|
|
nameBox->setFocus();
|
|
|
|
nameBox->lineEdit()->selectAll();
|
|
|
|
}
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
void KfindTabWidget::slotSizeBoxChanged(int index)
|
|
|
|
{
|
|
|
|
sizeEdit->setEnabled((bool)(index != 0));
|
|
|
|
sizeUnitBox->setEnabled((bool)(index != 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
void KfindTabWidget::setDefaults()
|
|
|
|
{
|
2003-04-21 22:53:08 +00:00
|
|
|
QDate dt = KGlobal::locale()->calendar()->addYears(QDate::currentDate(), -1);
|
2003-07-24 17:20:12 +00:00
|
|
|
|
2003-01-03 20:31:27 +00:00
|
|
|
fromDate ->setDate(dt);
|
2001-10-18 09:14:25 +00:00
|
|
|
toDate ->setDate(QDate::currentDate());
|
|
|
|
|
|
|
|
timeBox->setValue(1);
|
|
|
|
betweenType->setCurrentItem(1);
|
|
|
|
|
|
|
|
typeBox ->setCurrentItem(0);
|
|
|
|
sizeBox ->setCurrentItem(0);
|
|
|
|
sizeUnitBox ->setCurrentItem(1);
|
|
|
|
sizeEdit->setValue(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Checks if dates are correct and popups a error box
|
|
|
|
if they are not.
|
|
|
|
*/
|
|
|
|
bool KfindTabWidget::isDateValid()
|
|
|
|
{
|
|
|
|
// All files
|
2005-10-03 13:23:25 +00:00
|
|
|
if ( !findCreated->isChecked() ) return true;
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
if (rb[1]->isChecked())
|
|
|
|
{
|
2005-10-03 13:23:25 +00:00
|
|
|
if (timeBox->value() > 0 ) return true;
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2002-04-21 13:03:25 +00:00
|
|
|
KMessageBox::sorry(this, i18n("Unable to search within a period which is less than a minute."));
|
2005-10-03 13:23:25 +00:00
|
|
|
return false;
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// If we can not parse either of the dates or
|
2005-10-03 13:23:25 +00:00
|
|
|
// "from" date is bigger than "to" date return false.
|
2001-10-18 09:14:25 +00:00
|
|
|
QDate hi1, hi2;
|
|
|
|
|
|
|
|
QString str;
|
|
|
|
if ( ! fromDate->getDate(&hi1).isValid() ||
|
|
|
|
! toDate->getDate(&hi2).isValid() )
|
2004-05-19 14:10:16 +00:00
|
|
|
str = i18n("The date is not valid.");
|
2001-10-18 09:14:25 +00:00
|
|
|
else if ( hi1 > hi2 )
|
2004-05-19 14:10:16 +00:00
|
|
|
str = i18n("Invalid date range.");
|
2001-10-18 09:14:25 +00:00
|
|
|
else if ( QDate::currentDate() < hi1 )
|
2002-04-21 13:03:25 +00:00
|
|
|
str = i18n("Unable to search dates in the future.");
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
if (!str.isNull()) {
|
|
|
|
KMessageBox::sorry(0, str);
|
2005-10-03 13:23:25 +00:00
|
|
|
return false;
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
2005-10-03 13:23:25 +00:00
|
|
|
return true;
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void KfindTabWidget::setQuery(KQuery *query)
|
|
|
|
{
|
|
|
|
int size;
|
2001-10-18 21:30:11 +00:00
|
|
|
bool itemAlreadyContained(false);
|
2001-10-18 09:14:25 +00:00
|
|
|
// only start if we have valid dates
|
|
|
|
if (!isDateValid()) return;
|
|
|
|
|
2005-09-24 12:19:34 +00:00
|
|
|
query->setPath(KURL(dirBox->currentText().trimmed()));
|
2001-10-18 09:14:25 +00:00
|
|
|
|
2001-10-18 21:30:11 +00:00
|
|
|
for (int idx=0; idx<dirBox->count(); idx++)
|
|
|
|
if (dirBox->text(idx)==dirBox->currentText())
|
|
|
|
itemAlreadyContained=true;
|
|
|
|
|
|
|
|
if (!itemAlreadyContained)
|
2005-09-24 12:19:34 +00:00
|
|
|
dirBox->insertItem(dirBox->currentText().trimmed(),0);
|
2001-10-18 21:30:11 +00:00
|
|
|
|
2002-03-30 16:06:39 +00:00
|
|
|
QString regex = nameBox->currentText().isEmpty() ? "*" : nameBox->currentText();
|
|
|
|
query->setRegExp(regex, caseSensCb->isChecked());
|
2001-10-18 21:30:11 +00:00
|
|
|
itemAlreadyContained=false;
|
|
|
|
for (int idx=0; idx<nameBox->count(); idx++)
|
|
|
|
if (nameBox->text(idx)==nameBox->currentText())
|
|
|
|
itemAlreadyContained=true;
|
|
|
|
|
|
|
|
if (!itemAlreadyContained)
|
|
|
|
nameBox->insertItem(nameBox->currentText(),0);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
query->setRecursive(subdirsCb->isChecked());
|
|
|
|
|
|
|
|
switch (sizeUnitBox->currentItem())
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
size = 1; //one byte
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
size = 1048576; //1M
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
default:
|
|
|
|
size=1024; //1k
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
size = sizeEdit->value() * size;
|
|
|
|
if (size < 0) // overflow
|
2005-07-08 19:31:49 +00:00
|
|
|
if (KMessageBox::warningYesNo(this, i18n("Size is too big. Set maximum size value?"), i18n("Error"),i18n("Set"),i18n("Do Not Set"))
|
2001-10-18 09:14:25 +00:00
|
|
|
== KMessageBox::Yes)
|
|
|
|
{
|
|
|
|
sizeEdit->setValue(INT_MAX);
|
|
|
|
sizeUnitBox->setCurrentItem(0);
|
|
|
|
size = INT_MAX;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return;
|
|
|
|
|
|
|
|
switch (sizeBox->currentItem())
|
|
|
|
{
|
|
|
|
case 1:
|
2002-04-29 22:30:49 +00:00
|
|
|
query->setSizeRange(size, -1);
|
2001-10-18 09:14:25 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2002-04-29 22:30:49 +00:00
|
|
|
query->setSizeRange(-1, size);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
query->setSizeRange(size,size);
|
2001-10-18 09:14:25 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
query->setSizeRange(-1, -1);
|
|
|
|
}
|
|
|
|
|
|
|
|
// dates
|
|
|
|
QDateTime epoch;
|
|
|
|
epoch.setTime_t(0);
|
|
|
|
|
|
|
|
// Add date predicate
|
|
|
|
if (findCreated->isChecked()) { // Modified
|
|
|
|
if (rb[0]->isChecked()) { // Between dates
|
|
|
|
QDate q1, q2;
|
|
|
|
fromDate->getDate(&q1);
|
|
|
|
toDate->getDate(&q2);
|
|
|
|
|
|
|
|
// do not generate negative numbers .. find doesn't handle that
|
2005-07-28 14:59:42 +00:00
|
|
|
time_t time1 = epoch.secsTo(QDateTime(q1));
|
|
|
|
time_t time2 = epoch.secsTo(QDateTime(q2.addDays(1))) - 1; // Include the last day
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
query->setTimeRange(time1, time2);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
time_t cur = time(NULL);
|
|
|
|
time_t minutes = cur;
|
|
|
|
|
|
|
|
switch (betweenType->currentItem())
|
|
|
|
{
|
|
|
|
case 0: // minutes
|
|
|
|
minutes = timeBox->value();
|
|
|
|
break;
|
|
|
|
case 1: // hours
|
|
|
|
minutes = 60 * timeBox->value();
|
|
|
|
break;
|
|
|
|
case 2: // days
|
|
|
|
minutes = 60 * 24 * timeBox->value();
|
|
|
|
break;
|
|
|
|
case 3: // months
|
|
|
|
minutes = 60 * 24 * (time_t)(timeBox->value() * 30.41667);
|
|
|
|
break;
|
|
|
|
case 4: // years
|
|
|
|
minutes = 12 * 60 * 24 * (time_t)(timeBox->value() * 30.41667);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
query->setTimeRange(cur - minutes * 60, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
query->setTimeRange(0, 0);
|
|
|
|
|
2002-04-11 22:41:29 +00:00
|
|
|
query->setUsername( m_usernameBox->currentText() );
|
|
|
|
query->setGroupname( m_groupBox->currentText() );
|
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
query->setFileType(typeBox->currentItem());
|
|
|
|
|
2003-10-29 18:33:34 +00:00
|
|
|
int id = typeBox->currentItem()-10;
|
|
|
|
|
|
|
|
if ((id >= -3) && (id < (int) m_types.count()))
|
2001-10-18 09:14:25 +00:00
|
|
|
{
|
2003-10-29 18:33:34 +00:00
|
|
|
switch(id)
|
|
|
|
{
|
|
|
|
case -3:
|
|
|
|
query->setMimeType( m_ImageTypes );
|
|
|
|
break;
|
|
|
|
case -2:
|
|
|
|
query->setMimeType( m_VideoTypes );
|
|
|
|
break;
|
|
|
|
case -1:
|
|
|
|
query->setMimeType( m_AudioTypes );
|
|
|
|
break;
|
2004-04-30 19:10:36 +00:00
|
|
|
default:
|
2005-07-28 14:59:42 +00:00
|
|
|
query->setMimeType( QStringList() += m_types[id]->name() );
|
2003-10-29 18:33:34 +00:00
|
|
|
}
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-07-28 14:59:42 +00:00
|
|
|
query->setMimeType( QStringList() );
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
2002-06-22 10:18:04 +00:00
|
|
|
//Metainfo
|
|
|
|
query->setMetaInfo(metainfoEdit->text(), metainfokeyEdit->text());
|
|
|
|
|
2003-04-20 19:38:31 +00:00
|
|
|
//Use locate to speed-up search ?
|
|
|
|
query->setUseFileIndex(useLocateCb->isChecked());
|
|
|
|
|
2003-10-21 14:51:55 +00:00
|
|
|
query->setContext(textEdit->text(), caseContextCb->isChecked(),
|
2003-05-26 18:16:17 +00:00
|
|
|
binaryContextCb->isChecked(), regexpContentCb->isChecked());
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QString KfindTabWidget::date2String(const QDate & date) {
|
|
|
|
return(KGlobal::locale()->formatDate(date, true));
|
|
|
|
}
|
|
|
|
|
|
|
|
QDate &KfindTabWidget::string2Date(const QString & str, QDate *qd) {
|
|
|
|
return *qd = KGlobal::locale()->readDate(str);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KfindTabWidget::getDirectory()
|
|
|
|
{
|
|
|
|
QString result =
|
2005-09-24 12:19:34 +00:00
|
|
|
KFileDialog::getExistingDirectory( dirBox->text(dirBox->currentItem()).trimmed(),
|
2001-10-18 09:14:25 +00:00
|
|
|
this );
|
|
|
|
|
|
|
|
if (!result.isEmpty())
|
|
|
|
{
|
|
|
|
for (int i = 0; i < dirBox->count(); i++)
|
|
|
|
if (result == dirBox->text(i)) {
|
|
|
|
dirBox->setCurrentItem(i);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
dirBox->insertItem(result, 0);
|
|
|
|
dirBox->setCurrentItem(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KfindTabWidget::beginSearch()
|
|
|
|
{
|
2005-09-24 12:19:34 +00:00
|
|
|
/// dirlister->openURL(KURL(dirBox->currentText().trimmed()));
|
2003-04-20 19:38:31 +00:00
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
saveHistory();
|
2005-10-03 13:23:25 +00:00
|
|
|
setEnabled( false );
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void KfindTabWidget::endSearch()
|
|
|
|
{
|
2005-10-03 13:23:25 +00:00
|
|
|
setEnabled( true );
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Disables/enables all edit fields depending on their
|
|
|
|
respective check buttons.
|
|
|
|
*/
|
|
|
|
void KfindTabWidget::fixLayout()
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
// If "All files" is checked - disable all edits
|
|
|
|
// and second radio group on page two
|
|
|
|
|
|
|
|
if(! findCreated->isChecked()) {
|
2005-10-03 13:23:25 +00:00
|
|
|
fromDate->setEnabled(false);
|
|
|
|
toDate->setEnabled(false);
|
|
|
|
timeBox->setEnabled(false);
|
2001-10-18 09:14:25 +00:00
|
|
|
for(i=0; i<2; i++)
|
2005-10-03 13:23:25 +00:00
|
|
|
rb[i]->setEnabled(false);
|
|
|
|
betweenType->setEnabled(false);
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
for(i=0; i<2; i++)
|
2005-10-03 13:23:25 +00:00
|
|
|
rb[i]->setEnabled(true);
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
fromDate->setEnabled(rb[0]->isChecked());
|
|
|
|
toDate->setEnabled(rb[0]->isChecked());
|
|
|
|
timeBox->setEnabled(rb[1]->isChecked());
|
|
|
|
betweenType->setEnabled(rb[1]->isChecked());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Size box on page three
|
|
|
|
sizeEdit->setEnabled(sizeBox->currentItem() != 0);
|
|
|
|
sizeUnitBox->setEnabled(sizeBox->currentItem() != 0);
|
|
|
|
}
|
|
|
|
|
2003-07-28 15:17:58 +00:00
|
|
|
bool KfindTabWidget::isSearchRecursive()
|
|
|
|
{
|
|
|
|
return subdirsCb->isChecked();
|
|
|
|
}
|
|
|
|
|
2003-10-21 14:51:55 +00:00
|
|
|
|
2001-10-18 09:14:25 +00:00
|
|
|
/**
|
|
|
|
Digit validator. Allows only digits to be typed.
|
|
|
|
**/
|
|
|
|
KDigitValidator::KDigitValidator( QWidget * parent, const char *name )
|
|
|
|
: QValidator( parent, name )
|
|
|
|
{
|
|
|
|
r = new QRegExp("^[0-9]*$");
|
|
|
|
}
|
|
|
|
|
|
|
|
KDigitValidator::~KDigitValidator()
|
2002-03-05 13:33:10 +00:00
|
|
|
{
|
|
|
|
delete r;
|
|
|
|
}
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
QValidator::State KDigitValidator::validate( QString & input, int & ) const
|
|
|
|
{
|
|
|
|
if (r->search(input) < 0) {
|
|
|
|
// Beep on user if he enters non-digit
|
|
|
|
QApplication::beep();
|
|
|
|
return QValidator::Invalid;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return QValidator::Acceptable;
|
|
|
|
}
|
|
|
|
|
|
|
|
//*******************************************************
|
|
|
|
// Static utility functions
|
|
|
|
//*******************************************************
|
|
|
|
static void save_pattern(QComboBox *obj,
|
|
|
|
const QString & group, const QString & entry)
|
|
|
|
{
|
|
|
|
// QComboBox allows insertion of items more than specified by
|
|
|
|
// maxCount() (QT bug?). This API call will truncate list if needed.
|
|
|
|
obj->setMaxCount(15);
|
|
|
|
|
2003-05-25 14:00:26 +00:00
|
|
|
// make sure the current item is saved first so it will be the
|
|
|
|
// default when started next time
|
2001-10-18 09:14:25 +00:00
|
|
|
QStringList sl;
|
2003-05-25 14:00:26 +00:00
|
|
|
QString cur = obj->currentText();
|
|
|
|
sl.append(cur);
|
|
|
|
for (int i = 0; i < obj->count(); i++) {
|
|
|
|
if( cur != obj->text(i) ) {
|
|
|
|
sl.append(obj->text(i));
|
|
|
|
}
|
|
|
|
}
|
2001-10-18 09:14:25 +00:00
|
|
|
|
|
|
|
KConfig *conf = KGlobal::config();
|
|
|
|
conf->setGroup(group);
|
2003-11-25 20:07:33 +00:00
|
|
|
conf->writePathEntry(entry, sl);
|
2001-10-18 09:14:25 +00:00
|
|
|
}
|
2003-04-20 19:38:31 +00:00
|
|
|
|
|
|
|
#include "kftabdlg.moc"
|