summaryrefslogtreecommitdiffstats
path: root/src/app/Filter/advancedfilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/Filter/advancedfilter.cpp')
-rw-r--r--src/app/Filter/advancedfilter.cpp711
1 files changed, 711 insertions, 0 deletions
diff --git a/src/app/Filter/advancedfilter.cpp b/src/app/Filter/advancedfilter.cpp
new file mode 100644
index 0000000..299a5d8
--- /dev/null
+++ b/src/app/Filter/advancedfilter.cpp
@@ -0,0 +1,711 @@
+/***************************************************************************
+ advancedfilter.cpp - description
+ -------------------
+ copyright : (C) 2003 + by Shie Erlich & Rafi Yanai & Csaba Karai
+ e-mail : krusader@users.sourceforge.net
+ web site : http://krusader.sourceforge.net
+ ---------------------------------------------------------------------------
+ Description
+ ***************************************************************************
+
+ A
+
+ db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b.
+ 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D
+ 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY'
+ 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b
+ 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88.
+ YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD
+
+ S o u r c e F i l e
+
+ ***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "../krusader.h"
+#include "advancedfilter.h"
+#include "../Dialogs/krdialogs.h"
+
+#include <tqgroupbox.h>
+#include <tdelocale.h>
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqbuttongroup.h>
+#include <tqfile.h>
+#include <kdebug.h>
+#include <tdemessagebox.h>
+#include <time.h>
+#include <kiconloader.h>
+
+#define USERSFILE TQString("/etc/passwd")
+#define GROUPSFILE TQString("/etc/group")
+
+AdvancedFilter::AdvancedFilter( FilterTabs *tabs, TQWidget *parent, const char *name ) : TQWidget( parent, name ), fltTabs( tabs )
+{
+ TQGridLayout *filterLayout = new TQGridLayout( this );
+ filterLayout->setSpacing( 6 );
+ filterLayout->setMargin( 11 );
+
+ // Options for size
+
+ TQGroupBox *sizeGroup = new TQGroupBox( this, "sizeGroup" );
+ sizeGroup->setSizePolicy( TQSizePolicy( (TQSizePolicy::SizeType)5, (TQSizePolicy::SizeType)1, sizeGroup->sizePolicy().hasHeightForWidth() ) );
+ sizeGroup->setTitle( i18n( "Size" ) );
+ sizeGroup->setColumnLayout(0, TQt::Vertical );
+ sizeGroup->layout()->setSpacing( 0 );
+ sizeGroup->layout()->setMargin( 0 );
+ TQGridLayout *sizeLayout = new TQGridLayout( sizeGroup->layout() );
+ sizeLayout->setAlignment( TQt::AlignTop );
+ sizeLayout->setSpacing( 6 );
+ sizeLayout->setMargin( 11 );
+
+ biggerThanEnabled = new TQCheckBox( sizeGroup, "biggerThanEnabled" );
+ biggerThanEnabled->setText( i18n( "&Bigger than" ) );
+ sizeLayout->addWidget( biggerThanEnabled, 0, 0 );
+
+ biggerThanAmount = new TQLineEdit( sizeGroup, "biggerThanAmount" );
+ biggerThanAmount->setEnabled( false );
+ biggerThanAmount->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed, biggerThanAmount->sizePolicy().hasHeightForWidth() ) );
+ sizeLayout->addWidget( biggerThanAmount, 0, 1 );
+
+ biggerThanType = new KComboBox( false, sizeGroup, "biggerThanType" );
+ biggerThanType->insertItem( i18n( "Bytes" ) );
+ biggerThanType->insertItem( i18n( "KB" ) );
+ biggerThanType->insertItem( i18n( "MB" ) );
+ biggerThanType->setEnabled( false );
+ sizeLayout->addWidget( biggerThanType, 0, 2 );
+
+ smallerThanEnabled = new TQCheckBox( sizeGroup, "smallerThanEnabled" );
+ smallerThanEnabled->setText( i18n( "&Smaller than" ) );
+ sizeLayout->addWidget( smallerThanEnabled, 0, 3 );
+
+ smallerThanAmount = new TQLineEdit( sizeGroup, "smallerThanAmount" );
+ smallerThanAmount->setEnabled( false );
+ smallerThanAmount->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed, smallerThanAmount->sizePolicy().hasHeightForWidth() ) );
+ sizeLayout->addWidget( smallerThanAmount, 0, 4 );
+
+ smallerThanType = new KComboBox( false, sizeGroup, "smallerThanType" );
+ smallerThanType->insertItem( i18n( "Bytes" ) );
+ smallerThanType->insertItem( i18n( "KB" ) );
+ smallerThanType->insertItem( i18n( "MB" ) );
+ smallerThanType->setEnabled( false );
+ sizeLayout->addWidget( smallerThanType, 0, 5 );
+
+ // set a tighter box around the type box
+
+ int height = TQFontMetrics(biggerThanType->font()).height()+2;
+ biggerThanType->setMaximumHeight(height);
+ smallerThanType->setMaximumHeight(height);
+
+ filterLayout->addWidget( sizeGroup, 0, 0 );
+
+ // Options for date
+
+ TQPixmap iconDate = krLoader->loadIcon( "date", TDEIcon::Toolbar, 16 );
+
+ TQButtonGroup *dateGroup = new TQButtonGroup( this, "dateGroup" );
+ dateGroup->setTitle( i18n( "Date" ) );
+ dateGroup->setExclusive( true );
+ dateGroup->setColumnLayout(0, TQt::Vertical );
+ dateGroup->layout()->setSpacing( 0 );
+ dateGroup->layout()->setMargin( 0 );
+ TQGridLayout *dateLayout = new TQGridLayout( dateGroup->layout() );
+ dateLayout->setAlignment( TQt::AlignTop );
+ dateLayout->setSpacing( 6 );
+ dateLayout->setMargin( 11 );
+
+ modifiedBetweenEnabled = new TQRadioButton( dateGroup, "modifiedBetweenEnabled" );
+ modifiedBetweenEnabled->setText( i18n( "&Modified between" ) );
+ dateGroup->insert( modifiedBetweenEnabled, 0 );
+
+ dateLayout->addMultiCellWidget( modifiedBetweenEnabled, 0, 0, 0, 1 );
+
+ modifiedBetweenData1 = new TQLineEdit( dateGroup, "modifiedBetweenData1" );
+ modifiedBetweenData1->setEnabled( false );
+ modifiedBetweenData1->setText( "" );
+ dateLayout->addMultiCellWidget( modifiedBetweenData1, 0, 0, 2, 3 );
+
+ modifiedBetweenBtn1 = new TQToolButton( dateGroup, "modifiedBetweenBtn1" );
+ modifiedBetweenBtn1->setEnabled( false );
+ modifiedBetweenBtn1->setText( "" );
+ modifiedBetweenBtn1->setPixmap( iconDate );
+ dateLayout->addWidget( modifiedBetweenBtn1, 0, 4 );
+
+ TQLabel *andLabel = new TQLabel( dateGroup, "andLabel" );
+ andLabel->setText( i18n( "an&d" ) );
+ dateLayout->addWidget( andLabel, 0, 5 );
+
+ modifiedBetweenData2 = new TQLineEdit( dateGroup, "modifiedBetweenData2" );
+ modifiedBetweenData2->setEnabled( false );
+ modifiedBetweenData2->setText( "" );
+ andLabel->setBuddy(modifiedBetweenData2);
+ dateLayout->addWidget( modifiedBetweenData2, 0, 6 );
+
+ modifiedBetweenBtn2 = new TQToolButton( dateGroup, "modifiedBetweenBtn2" );
+ modifiedBetweenBtn2->setEnabled( false );
+ modifiedBetweenBtn2->setText( "" );
+ modifiedBetweenBtn2->setPixmap( iconDate );
+ dateLayout->addWidget( modifiedBetweenBtn2, 0, 7 );
+
+ notModifiedAfterEnabled = new TQRadioButton( dateGroup, "notModifiedAfterEnabled" );
+ notModifiedAfterEnabled->setText( i18n( "&Not modified after" ) );
+ dateGroup->insert( notModifiedAfterEnabled, 0 );
+ dateLayout->addMultiCellWidget( notModifiedAfterEnabled, 1, 1, 0, 1 );
+
+ notModifiedAfterData = new TQLineEdit( dateGroup, "notModifiedAfterData" );
+ notModifiedAfterData->setEnabled( false );
+ notModifiedAfterData->setText( "" );
+ dateLayout->addMultiCellWidget( notModifiedAfterData, 1, 1, 2, 3 );
+
+ notModifiedAfterBtn = new TQToolButton( dateGroup, "notModifiedAfterBtn" );
+ notModifiedAfterBtn->setEnabled( false );
+ notModifiedAfterBtn->setText( "" );
+ notModifiedAfterBtn->setPixmap( iconDate );
+ dateLayout->addWidget( notModifiedAfterBtn, 1, 4 );
+
+ modifiedInTheLastEnabled = new TQRadioButton( dateGroup, "modifiedInTheLastEnabled" );
+ modifiedInTheLastEnabled->setText( i18n("Mod&ified in the last") );
+ dateGroup->insert( modifiedInTheLastEnabled, 0 );
+ dateLayout->addWidget( modifiedInTheLastEnabled, 2, 0 );
+
+ modifiedInTheLastData = new TQLineEdit( dateGroup, "modifiedInTheLastData" );
+ modifiedInTheLastData->setEnabled( false );
+ modifiedInTheLastData->setText( "" );
+ dateLayout->addWidget( modifiedInTheLastData, 2, 2 );
+
+ modifiedInTheLastType = new TQComboBox( false, dateGroup, "modifiedInTheLastType" );
+ modifiedInTheLastType->insertItem( i18n( "days" ) );
+ modifiedInTheLastType->insertItem( i18n( "weeks" ) );
+ modifiedInTheLastType->insertItem( i18n( "months" ) );
+ modifiedInTheLastType->insertItem( i18n( "years" ) );
+ modifiedInTheLastType->setEnabled( false );
+ dateLayout->addMultiCellWidget( modifiedInTheLastType, 2, 2, 3, 4 );
+
+ notModifiedInTheLastData = new TQLineEdit( dateGroup, "notModifiedInTheLastData" );
+ notModifiedInTheLastData->setEnabled( false );
+ notModifiedInTheLastData->setText( "" );
+ dateLayout->addWidget( notModifiedInTheLastData, 3, 2 );
+
+ TQLabel *notModifiedInTheLastLbl = new TQLabel( dateGroup, "notModifiedInTheLastLbl" );
+ notModifiedInTheLastLbl->setText( i18n( "No&t modified in the last" ) );
+ notModifiedInTheLastLbl->setBuddy(notModifiedInTheLastData);
+ dateLayout->addWidget( notModifiedInTheLastLbl, 3, 0 );
+
+ notModifiedInTheLastType = new TQComboBox( false, dateGroup, "notModifiedInTheLastType" );
+ notModifiedInTheLastType->insertItem( i18n( "days" ) );
+ notModifiedInTheLastType->insertItem( i18n( "weeks" ) );
+ notModifiedInTheLastType->insertItem( i18n( "months" ) );
+ notModifiedInTheLastType->insertItem( i18n( "years" ) );
+ notModifiedInTheLastType->setEnabled( false );
+ dateLayout->addMultiCellWidget( notModifiedInTheLastType, 3, 3, 3, 4 );
+
+ filterLayout->addWidget( dateGroup, 1, 0 );
+
+ // Options for ownership
+
+ TQGroupBox *ownershipGroup = new TQGroupBox( this, "ownershipGroup" );
+ ownershipGroup->setTitle( i18n( "Ownership" ) );
+ ownershipGroup->setColumnLayout(0, TQt::Vertical );
+ ownershipGroup->layout()->setSpacing( 0 );
+ ownershipGroup->layout()->setMargin( 0 );
+ TQGridLayout *ownershipLayout = new TQGridLayout( ownershipGroup->layout() );
+ ownershipLayout->setAlignment( TQt::AlignTop );
+ ownershipLayout->setSpacing( 6 );
+ ownershipLayout->setMargin( 11 );
+
+ TQHBoxLayout *hboxLayout = new TQHBoxLayout();
+ hboxLayout->setSpacing( 6 );
+ hboxLayout->setMargin( 0 );
+
+ belongsToUserEnabled = new TQCheckBox( ownershipGroup, "belongsToUserEnabled" );
+ belongsToUserEnabled->setText( i18n( "Belongs to &user" ) );
+ hboxLayout->addWidget( belongsToUserEnabled );
+
+ belongsToUserData = new TQComboBox( false, ownershipGroup, "belongsToUserData" );
+ belongsToUserData->setEnabled( false );
+ belongsToUserData->setEditable( false );
+ hboxLayout->addWidget( belongsToUserData );
+
+ belongsToGroupEnabled = new TQCheckBox( ownershipGroup, "belongsToGroupEnabled" );
+ belongsToGroupEnabled->setText( i18n( "Belongs to gr&oup" ) );
+ hboxLayout->addWidget( belongsToGroupEnabled );
+
+ belongsToGroupData = new TQComboBox( false, ownershipGroup, "belongsToGroupData" );
+ belongsToGroupData->setEnabled( false );
+ belongsToGroupData->setEditable( false );
+ hboxLayout->addWidget( belongsToGroupData );
+
+ ownershipLayout->addMultiCellLayout( hboxLayout, 0, 0, 0, 3 );
+
+ permissionsEnabled = new TQCheckBox( ownershipGroup, "permissionsEnabled" );
+ permissionsEnabled->setText( i18n( "P&ermissions" ) );
+ ownershipLayout->addWidget( permissionsEnabled, 1, 0 );
+
+ TQGroupBox *ownerGroup = new TQGroupBox( ownershipGroup, "ownerGroup" );
+ ownerGroup->setTitle( i18n( "O&wner" ) );
+ int width = 2*height + height / 2;
+
+ ownerR = new TQComboBox( false, ownerGroup, "ownerR" );
+ ownerR->insertItem( i18n( "?" ) );
+ ownerR->insertItem( i18n( "r" ) );
+ ownerR->insertItem( i18n( "-" ) );
+ ownerR->setEnabled( false );
+ ownerR->setGeometry( TQRect( 10, 20, width, height+6 ) );
+
+ ownerW = new TQComboBox( false, ownerGroup, "ownerW" );
+ ownerW->insertItem( i18n( "?" ) );
+ ownerW->insertItem( i18n( "w" ) );
+ ownerW->insertItem( i18n( "-" ) );
+ ownerW->setEnabled( false );
+ ownerW->setGeometry( TQRect( 10 + width, 20, width, height+6 ) );
+
+ ownerX = new TQComboBox( false, ownerGroup, "ownerX" );
+ ownerX->insertItem( i18n( "?" ) );
+ ownerX->insertItem( i18n( "x" ) );
+ ownerX->insertItem( i18n( "-" ) );
+ ownerX->setEnabled( false );
+ ownerX->setGeometry( TQRect( 10 + 2*width, 20, width, height+6 ) );
+
+ ownershipLayout->addWidget( ownerGroup, 1, 1 );
+
+ TQGroupBox *groupGroup = new TQGroupBox( ownershipGroup, "groupGroup" );
+ groupGroup->setTitle( i18n( "Grou&p" ) );
+
+ groupR = new TQComboBox( false, groupGroup, "groupR" );
+ groupR->insertItem( i18n( "?" ) );
+ groupR->insertItem( i18n( "r" ) );
+ groupR->insertItem( i18n( "-" ) );
+ groupR->setEnabled( false );
+ groupR->setGeometry( TQRect( 10, 20, width, height+6 ) );
+
+ groupW = new TQComboBox( false, groupGroup, "groupW" );
+ groupW->insertItem( i18n( "?" ) );
+ groupW->insertItem( i18n( "w" ) );
+ groupW->insertItem( i18n( "-" ) );
+ groupW->setEnabled( false );
+ groupW->setGeometry( TQRect( 10 + width, 20, width, height+6 ) );
+
+ groupX = new TQComboBox( false, groupGroup, "groupX" );
+ groupX->insertItem( i18n( "?" ) );
+ groupX->insertItem( i18n( "x" ) );
+ groupX->insertItem( i18n( "-" ) );
+ groupX->setEnabled( false );
+ groupX->setGeometry( TQRect( 10 + 2*width, 20, width, height+6 ) );
+
+ ownershipLayout->addWidget( groupGroup, 1, 2 );
+
+ TQGroupBox *allGroup = new TQGroupBox( ownershipGroup, "allGroup" );
+ allGroup->setTitle( i18n( "A&ll" ) );
+
+ allR = new TQComboBox( false, allGroup, "allR" );
+ allR->insertItem( i18n( "?" ) );
+ allR->insertItem( i18n( "r" ) );
+ allR->insertItem( i18n( "-" ) );
+ allR->setEnabled( false );
+ allR->setGeometry( TQRect( 10, 20, width, height+6 ) );
+
+ allW = new TQComboBox( false, allGroup, "allW" );
+ allW->insertItem( i18n( "?" ) );
+ allW->insertItem( i18n( "w" ) );
+ allW->insertItem( i18n( "-" ) );
+ allW->setEnabled( false );
+ allW->setGeometry( TQRect( 10 + width, 20, width, height+6 ) );
+
+ allX = new TQComboBox( false, allGroup, "allX" );
+ allX->insertItem( i18n( "?" ) );
+ allX->insertItem( i18n( "x" ) );
+ allX->insertItem( i18n( "-" ) );
+ allX->setEnabled( false );
+ allX->setGeometry( TQRect( 10 + 2*width, 20, width, height+6 ) );
+
+ ownershipLayout->addWidget( allGroup, 1, 3 );
+
+ TQLabel *infoLabel = new TQLabel( ownershipGroup, "TextLabel4" );
+ TQFont infoLabel_font( infoLabel->font() );
+ infoLabel_font.setFamily( "adobe-helvetica" );
+ infoLabel_font.setItalic( true );
+ infoLabel->setFont( infoLabel_font );
+ infoLabel->setText( i18n( "Note: a '?' is a wildcard" ) );
+
+ ownershipLayout->addMultiCellWidget( infoLabel, 2, 2, 0, 3, TQt::AlignRight );
+
+ filterLayout->addWidget( ownershipGroup, 2, 0 );
+
+ // Connection table
+
+ connect( biggerThanEnabled, TQ_SIGNAL( toggled(bool) ), biggerThanAmount, TQ_SLOT( setEnabled(bool) ) );
+ connect( biggerThanEnabled, TQ_SIGNAL( toggled(bool) ), biggerThanType, TQ_SLOT( setEnabled(bool) ) );
+ connect( smallerThanEnabled, TQ_SIGNAL( toggled(bool) ), smallerThanAmount, TQ_SLOT( setEnabled(bool) ) );
+ connect( smallerThanEnabled, TQ_SIGNAL( toggled(bool) ), smallerThanType, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedBetweenEnabled, TQ_SIGNAL( toggled(bool) ), modifiedBetweenData1, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedBetweenEnabled, TQ_SIGNAL( toggled(bool) ), modifiedBetweenBtn1, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedBetweenEnabled, TQ_SIGNAL( toggled(bool) ), modifiedBetweenData2, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedBetweenEnabled, TQ_SIGNAL( toggled(bool) ), modifiedBetweenBtn2, TQ_SLOT( setEnabled(bool) ) );
+ connect( notModifiedAfterEnabled, TQ_SIGNAL( toggled(bool) ), notModifiedAfterData, TQ_SLOT( setEnabled(bool) ) );
+ connect( notModifiedAfterEnabled, TQ_SIGNAL( toggled(bool) ), notModifiedAfterBtn, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedInTheLastEnabled, TQ_SIGNAL( toggled(bool) ), modifiedInTheLastData, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedInTheLastEnabled, TQ_SIGNAL( toggled(bool) ), modifiedInTheLastType, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedInTheLastEnabled, TQ_SIGNAL( toggled(bool) ), notModifiedInTheLastData, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedInTheLastEnabled, TQ_SIGNAL( toggled(bool) ), notModifiedInTheLastType, TQ_SLOT( setEnabled(bool) ) );
+ connect( belongsToUserEnabled, TQ_SIGNAL( toggled(bool) ), belongsToUserData, TQ_SLOT( setEnabled(bool) ) );
+ connect( belongsToGroupEnabled, TQ_SIGNAL( toggled(bool) ), belongsToGroupData, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), ownerR, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), ownerW, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), ownerX, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), groupR, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), groupW, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), groupX, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), allR, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), allW, TQ_SLOT( setEnabled(bool) ) );
+ connect( permissionsEnabled, TQ_SIGNAL( toggled(bool) ), allX, TQ_SLOT( setEnabled(bool) ) );
+ connect( modifiedBetweenBtn1, TQ_SIGNAL( clicked() ), this, TQ_SLOT( modifiedBetweenSetDate1() ) );
+ connect( modifiedBetweenBtn2, TQ_SIGNAL( clicked() ), this, TQ_SLOT( modifiedBetweenSetDate2() ) );
+ connect( notModifiedAfterBtn, TQ_SIGNAL( clicked() ), this, TQ_SLOT( notModifiedAfterSetDate() ) );
+
+ // fill the users and groups list
+
+ fillList(belongsToUserData, USERSFILE);
+ fillList(belongsToGroupData, GROUPSFILE);
+
+ // tab order
+ setTabOrder( biggerThanEnabled, biggerThanAmount );
+ setTabOrder( biggerThanAmount, smallerThanEnabled );
+ setTabOrder( smallerThanEnabled, smallerThanAmount );
+ setTabOrder( smallerThanAmount, modifiedBetweenEnabled );
+ setTabOrder( modifiedBetweenEnabled, modifiedBetweenData1 );
+ setTabOrder( modifiedBetweenData1, modifiedBetweenData2 );
+ setTabOrder( modifiedBetweenData2, notModifiedAfterEnabled );
+ setTabOrder( notModifiedAfterEnabled, notModifiedAfterData );
+ setTabOrder( notModifiedAfterData, modifiedInTheLastEnabled );
+ setTabOrder( modifiedInTheLastEnabled, modifiedInTheLastData );
+ setTabOrder( modifiedInTheLastData, notModifiedInTheLastData );
+ setTabOrder( notModifiedInTheLastData, belongsToUserEnabled );
+ setTabOrder( belongsToUserEnabled, belongsToUserData );
+ setTabOrder( belongsToUserData, belongsToGroupEnabled );
+ setTabOrder( belongsToGroupEnabled, belongsToGroupData );
+ setTabOrder( belongsToGroupData, permissionsEnabled );
+ setTabOrder( permissionsEnabled, ownerR );
+ setTabOrder( ownerR, ownerW );
+ setTabOrder( ownerW, ownerX );
+ setTabOrder( ownerX, groupR );
+ setTabOrder( groupR, groupW );
+ setTabOrder( groupW, groupX );
+ setTabOrder( groupX, allR );
+ setTabOrder( allR, allW );
+ setTabOrder( allW, allX );
+ setTabOrder( allX, biggerThanType );
+ setTabOrder( biggerThanType, smallerThanType );
+ setTabOrder( smallerThanType, modifiedInTheLastType );
+ setTabOrder( modifiedInTheLastType, notModifiedInTheLastType );
+}
+
+void AdvancedFilter::modifiedBetweenSetDate1()
+{
+ changeDate(modifiedBetweenData1);
+}
+
+void AdvancedFilter::modifiedBetweenSetDate2()
+{
+ changeDate(modifiedBetweenData2);
+}
+
+void AdvancedFilter::notModifiedAfterSetDate()
+{
+ changeDate(notModifiedAfterData);
+}
+
+void AdvancedFilter::changeDate(TQLineEdit *p) {
+ // check if the current date is valid
+ TQDate d = TDEGlobal::locale()->readDate(p->text());
+ if (!d.isValid()) d = TQDate::currentDate();
+
+ KRGetDate *gd = new KRGetDate(d, this);
+ d = gd->getDate();
+ // if a user pressed ESC or closed the dialog, we'll return an invalid date
+ if (d.isValid())
+ p->setText(TDEGlobal::locale()->formatDate(d, true));
+ delete gd;
+}
+
+// bool start: set it to true if this date is the beginning of the search,
+// if it's the end, set it to false
+void AdvancedFilter::qdate2time_t(time_t *dest, TQDate d, bool start) {
+ struct tm t;
+ t.tm_sec = (start ? 0 : 59);
+ t.tm_min = (start ? 0 : 59);
+ t.tm_hour = (start ? 0 : 23);
+ t.tm_mday = d.day();
+ t.tm_mon = d.month() - 1;
+ t.tm_year = d.year() - 1900;
+ t.tm_wday = d.dayOfWeek() - 1; // actually ignored by mktime
+ t.tm_yday = d.dayOfYear() - 1; // actually ignored by mktime
+ t.tm_isdst = -1; // daylight saving time information isn't availble
+
+ (*dest) = mktime( &t );
+}
+
+
+void AdvancedFilter::fillList(TQComboBox *list, TQString filename) {
+ TQFile data(filename);
+ if (!data.open(IO_ReadOnly))
+ {
+ krOut << "Search: Unable to read " << filename << " !!!" << endl;
+ return;
+ }
+ // and read it into the temporary array
+ TQTextStream t(&data);
+ while (!data.atEnd())
+ {
+ TQString s = t.readLine();
+ TQString name = s.left(s.find(':'));
+ list->insertItem(name);
+ }
+}
+
+void AdvancedFilter::invalidDateMessage(TQLineEdit *p)
+{
+ // FIXME p->text() is empty sometimes (to reproduce, set date to "13.09.005")
+ KMessageBox::detailedError(this, i18n("Invalid date entered."),
+ i18n("The date %1 is not valid according to your locale. Please re-enter a valid date (use the date button for easy access).").arg(p->text()) );
+ p->setFocus();
+}
+
+bool AdvancedFilter::fillQuery( KRQuery *query )
+{
+ TDEIO::filesize_t minSize = 0, maxSize = 0;
+
+ // size calculations ////////////////////////////////////////////////
+ if ( biggerThanEnabled->isChecked() &&
+ !(biggerThanAmount->text().simplifyWhiteSpace()).isEmpty() ) {
+ minSize = biggerThanAmount->text().toULong();
+ switch ( biggerThanType->currentItem() ) {
+ case 1 : minSize *= 1024;
+ break;
+ case 2 : minSize *= (1024*1024);
+ break;
+ }
+ query->setMinimumFileSize( minSize );
+ }
+ if ( smallerThanEnabled->isChecked() &&
+ !(smallerThanAmount->text().simplifyWhiteSpace()).isEmpty()) {
+ maxSize = smallerThanAmount->text().toULong();
+ switch (smallerThanType->currentItem()) {
+ case 1 : maxSize *= 1024;
+ break;
+ case 2 : maxSize *= (1024*1024);
+ break;
+ }
+ query->setMaximumFileSize( maxSize );
+ }
+ // check that minSize is smaller than maxSize
+ if ( ( minSize > 0) && ( maxSize > 0) && ( maxSize < minSize)) {
+ KMessageBox::detailedError(this, i18n("Specified sizes are inconsistent!"),
+ i18n("Please re-enter the values, so that the left side size will be smaller than (or equal to) the right side size."));
+ biggerThanAmount->setFocus();
+ return false;
+ }
+
+ // date calculations ////////////////////////////////////////////////////
+ if (modifiedBetweenEnabled->isChecked()) {
+ // first, if both dates are empty, than don't use them
+ if ( !(modifiedBetweenData1->text().simplifyWhiteSpace().isEmpty() &&
+ modifiedBetweenData2->text().simplifyWhiteSpace().isEmpty()) ) {
+ // check if date is valid
+ TQDate d1 = TDEGlobal::locale()->readDate(modifiedBetweenData1->text());
+ if (!d1.isValid()) { invalidDateMessage(modifiedBetweenData1); return false; }
+ TQDate d2 = TDEGlobal::locale()->readDate(modifiedBetweenData2->text());
+ if (!d2.isValid()) { invalidDateMessage(modifiedBetweenData2); return false; }
+
+ if (d1 > d2) {
+ KMessageBox::detailedError(this, i18n("Dates are inconsistent!"),
+ i18n("The date on the left is later than the date on the right. Please re-enter the dates, so that the left side date will be earlier than the right side date."));
+ modifiedBetweenData1->setFocus();
+ return false;
+ }
+ // all seems to be ok, create time_t
+
+ time_t newerTime, olderTime;
+ qdate2time_t(&newerTime, d1, true);
+ qdate2time_t(&olderTime, d2, false);
+ query->setNewerThan( newerTime );
+ query->setOlderThan( olderTime );
+ }
+ } else if (notModifiedAfterEnabled->isChecked()) {
+ if ( !notModifiedAfterData->text().simplifyWhiteSpace().isEmpty() ) {
+ TQDate d = TDEGlobal::locale()->readDate(notModifiedAfterData->text());
+ if (!d.isValid()) { invalidDateMessage(notModifiedAfterData); return false; }
+ time_t olderTime;
+ qdate2time_t(&olderTime, d, false);
+ query->setOlderThan( olderTime );
+ }
+ } else if (modifiedInTheLastEnabled->isChecked()) {
+ if ( !(modifiedInTheLastData->text().simplifyWhiteSpace().isEmpty() &&
+ notModifiedInTheLastData->text().simplifyWhiteSpace().isEmpty()) ) {
+ TQDate d1 = TQDate::currentDate(); TQDate d2 = TQDate::currentDate();
+ if (!modifiedInTheLastData->text().simplifyWhiteSpace().isEmpty()) {
+ int tmp1 = modifiedInTheLastData->text().simplifyWhiteSpace().toInt();
+ switch (modifiedInTheLastType->currentItem()) {
+ case 1 : tmp1 *= 7;
+ break;
+ case 2 : tmp1 *= 30;
+ break;
+ case 3 : tmp1 *= 365;
+ break;
+ }
+ d1 = d1.addDays((-1) * tmp1);
+ time_t newerTime;
+ qdate2time_t(&newerTime, d1, true);
+ query->setNewerThan( newerTime );
+ }
+ if (!notModifiedInTheLastData->text().simplifyWhiteSpace().isEmpty()) {
+ int tmp2 = notModifiedInTheLastData->text().simplifyWhiteSpace().toInt();
+ switch (notModifiedInTheLastType->currentItem()) {
+ case 1 : tmp2 *= 7;
+ break;
+ case 2 : tmp2 *= 30;
+ break;
+ case 3 : tmp2 *= 365;
+ break;
+ }
+ d2 = d2.addDays((-1) * tmp2);
+ time_t olderTime;
+ qdate2time_t(&olderTime, d2, true);
+ query->setOlderThan( olderTime );
+ }
+ if ( !modifiedInTheLastData->text().simplifyWhiteSpace().isEmpty() &&
+ !notModifiedInTheLastData->text().simplifyWhiteSpace().isEmpty() ) {
+ if (d1 > d2) {
+ KMessageBox::detailedError(this, i18n("Dates are inconsistent!"),
+ i18n("The date on top is later than the date on the bottom. Please re-enter the dates, so that the top date will be earlier than the bottom date."));
+ modifiedInTheLastData->setFocus();
+ return false;
+ }
+ }
+ }
+ }
+ // permissions and ownership /////////////////////////////////////
+ if (permissionsEnabled->isChecked()) {
+ TQString perm = ownerR->currentText() + ownerW->currentText() + ownerX->currentText() +
+ groupR->currentText() + groupW->currentText() + groupX->currentText() +
+ allR->currentText() + allW->currentText() + allX->currentText();
+ query->setPermissions( perm );
+ }
+ if (belongsToUserEnabled->isChecked())
+ query->setOwner( belongsToUserData->currentText() );
+ if (belongsToGroupEnabled->isChecked())
+ query->setGroup( belongsToGroupData->currentText() );
+
+ return true;
+}
+
+void AdvancedFilter::loadFromProfile( TQString name )
+{
+ krConfig->setGroup( name );
+
+ smallerThanEnabled->setChecked( krConfig->readBoolEntry( "Smaller Than Enabled", false ) );
+ smallerThanAmount->setText( krConfig->readEntry( "Smaller Than Amount", "" ) );
+ smallerThanType->setCurrentItem( krConfig->readNumEntry( "Smaller Than Type", 0 ) );
+
+ biggerThanEnabled->setChecked( krConfig->readBoolEntry( "Bigger Than Enabled", false ) );
+ biggerThanAmount->setText( krConfig->readEntry( "Bigger Than Amount", "" ) );
+ biggerThanType->setCurrentItem( krConfig->readNumEntry( "Bigger Than Type", 0 ) );
+
+ modifiedBetweenEnabled->setChecked( krConfig->readBoolEntry( "Modified Between Enabled", false ) );
+ notModifiedAfterEnabled->setChecked( krConfig->readBoolEntry( "Not Modified After Enabled", false ) );
+ modifiedInTheLastEnabled->setChecked( krConfig->readBoolEntry( "Modified In The Last Enabled", false ) );
+
+ modifiedBetweenData1->setText( krConfig->readEntry( "Modified Between 1", "" ) );
+ modifiedBetweenData2->setText( krConfig->readEntry( "Modified Between 2", "" ) );
+
+ notModifiedAfterData->setText( krConfig->readEntry( "Not Modified After", "" ) );
+ modifiedInTheLastData->setText( krConfig->readEntry( "Modified In The Last", "" ) );
+ notModifiedInTheLastData->setText( krConfig->readEntry( "Not Modified In The Last", "" ) );
+
+ modifiedInTheLastType->setCurrentItem( krConfig->readNumEntry( "Modified In The Last Type", 0 ) );
+ notModifiedInTheLastType->setCurrentItem( krConfig->readNumEntry( "Not Modified In The Last Type", 0 ) );
+
+ belongsToUserEnabled->setChecked( krConfig->readBoolEntry( "Belongs To User Enabled", false ) );
+ belongsToGroupEnabled->setChecked( krConfig->readBoolEntry( "Belongs To Group Enabled", false ) );
+
+ TQString user = krConfig->readEntry( "Belongs To User", "" );
+ for( int i = belongsToUserData->count(); i >= 0; i-- )
+ {
+ belongsToUserData->setCurrentItem( i );
+ if( belongsToUserData->currentText() == user )
+ break;
+ }
+
+ TQString group = krConfig->readEntry( "Belongs To Group", "" );
+ for( int i = belongsToGroupData->count(); i >= 0; i-- )
+ {
+ belongsToGroupData->setCurrentItem( i );
+ if( belongsToGroupData->currentText() == group )
+ break;
+ }
+
+ permissionsEnabled->setChecked( krConfig->readBoolEntry( "Permissions Enabled", false ) );
+
+ ownerW->setCurrentItem( krConfig->readNumEntry( "Owner Write", 0 ) );
+ ownerR->setCurrentItem( krConfig->readNumEntry( "Owner Read", 0 ) );
+ ownerX->setCurrentItem( krConfig->readNumEntry( "Owner Execute", 0 ) );
+ groupW->setCurrentItem( krConfig->readNumEntry( "Group Write", 0 ) );
+ groupR->setCurrentItem( krConfig->readNumEntry( "Group Read", 0 ) );
+ groupX->setCurrentItem( krConfig->readNumEntry( "Group Execute", 0 ) );
+ allW->setCurrentItem( krConfig->readNumEntry( "All Write", 0 ) );
+ allR->setCurrentItem( krConfig->readNumEntry( "All Read", 0 ) );
+ allX->setCurrentItem( krConfig->readNumEntry( "All Execute", 0 ) );
+}
+
+void AdvancedFilter::saveToProfile( TQString name )
+{
+ krConfig->setGroup( name );
+
+ krConfig->writeEntry( "Smaller Than Enabled", smallerThanEnabled->isChecked() );
+ krConfig->writeEntry( "Smaller Than Amount", smallerThanAmount->text() );
+ krConfig->writeEntry( "Smaller Than Type", smallerThanType->currentItem() );
+
+ krConfig->writeEntry( "Bigger Than Enabled", biggerThanEnabled->isChecked() );
+ krConfig->writeEntry( "Bigger Than Amount", biggerThanAmount->text() );
+ krConfig->writeEntry( "Bigger Than Type", biggerThanType->currentItem() );
+
+ krConfig->writeEntry( "Modified Between Enabled", modifiedBetweenEnabled->isChecked() );
+ krConfig->writeEntry( "Not Modified After Enabled", notModifiedAfterEnabled->isChecked() );
+ krConfig->writeEntry( "Modified In The Last Enabled", modifiedInTheLastEnabled->isChecked() );
+
+ krConfig->writeEntry( "Modified Between 1", modifiedBetweenData1->text() );
+ krConfig->writeEntry( "Modified Between 2", modifiedBetweenData2->text() );
+
+ krConfig->writeEntry( "Not Modified After", notModifiedAfterData->text() );
+ krConfig->writeEntry( "Modified In The Last", modifiedInTheLastData->text() );
+ krConfig->writeEntry( "Not Modified In The Last", notModifiedInTheLastData->text() );
+
+ krConfig->writeEntry( "Modified In The Last Type", modifiedInTheLastType->currentItem() );
+ krConfig->writeEntry( "Not Modified In The Last Type", notModifiedInTheLastType->currentItem() );
+
+ krConfig->writeEntry( "Belongs To User Enabled", belongsToUserEnabled->isChecked() );
+ krConfig->writeEntry( "Belongs To Group Enabled", belongsToGroupEnabled->isChecked() );
+
+ krConfig->writeEntry( "Belongs To User", belongsToUserData->currentText() );
+ krConfig->writeEntry( "Belongs To Group", belongsToGroupData->currentText() );
+
+ krConfig->writeEntry( "Permissions Enabled", permissionsEnabled->isChecked() );
+
+ krConfig->writeEntry( "Owner Write", ownerW->currentItem() );
+ krConfig->writeEntry( "Owner Read", ownerR->currentItem() );
+ krConfig->writeEntry( "Owner Execute", ownerX->currentItem() );
+ krConfig->writeEntry( "Group Write", groupW->currentItem() );
+ krConfig->writeEntry( "Group Read", groupR->currentItem() );
+ krConfig->writeEntry( "Group Execute", groupX->currentItem() );
+ krConfig->writeEntry( "All Write", allW->currentItem() );
+ krConfig->writeEntry( "All Read", allR->currentItem() );
+ krConfig->writeEntry( "All Execute", allX->currentItem() );
+}
+
+
+#include "advancedfilter.moc"