/***********************************************************************
 *
 *  kftabdlg.h
 *
 ***********************************************************************/

#ifndef KFTABDLG_H
#define KFTABDLG_H

#include <tqtabwidget.h>
#include <tqvalidator.h> // for KDigitValidator

#include <kurl.h>
#include <kmimetype.h>

#include "kdatecombo.h"

class TQButtonGroup;
class TQPushButton;
class TQRadioButton;
class TQCheckBox;
class TQLineEdit;
class TQString;
class TQDate;
class TQRegExp;
class TQDialog;
class TQComboBox;
class TQSpinBox;

class KfDirDialog;

class KfindTabWidget: public TQTabWidget
{
  TQ_OBJECT

public:
  KfindTabWidget(TQWidget * parent = 0, const char *name=0);
  virtual ~KfindTabWidget();
  void initMimeTypes();
  void initSpecialMimeTypes();
  void setQuery(class KQuery * query);
  void setDefaults();

  void beginSearch();
  void endSearch();
  void loadHistory();
  void saveHistory();
  bool isSearchRecursive();

  void setURL( const KURL & url );

  virtual TQSize sizeHint() const;

public slots:
  void setFocus();

private slots:
  void getDirectory();
  void fixLayout();
  void slotSizeBoxChanged(int);
  void slotEditRegExp();

signals:
    void startSearch();

protected:
public:
  TQComboBox   *nameBox;
  TQComboBox   *dirBox;
  // for first page
  TQCheckBox   *subdirsCb;
  TQCheckBox *useLocateCb;
  // for third page
  TQComboBox *typeBox;
  TQLineEdit * textEdit;
  TQCheckBox *caseSensCb;
  TQComboBox *m_usernameBox;
  TQComboBox *m_groupBox;
  //for fourth page
  TQLineEdit *metainfoEdit;
  TQLineEdit *metainfokeyEdit;

private:
  bool isDateValid();

  TQString date2String(const TQDate &);
  TQDate &string2Date(const TQString &, TQDate * );

  TQWidget *pages[3];

  //1st page
  TQPushButton *browseB;

  KfDirDialog *dirselector;

  //2nd page
  TQCheckBox   *findCreated;
  TQComboBox   *betweenType;
  TQButtonGroup *bg;
  TQRadioButton *rb[2];
  KDateCombo * fromDate;
  KDateCombo * toDate;
  TQSpinBox *timeBox;

  //3rd page
  TQComboBox *sizeBox;
  TQComboBox *sizeUnitBox;
  TQSpinBox *sizeEdit;
  TQCheckBox *caseContextCb;
  TQCheckBox *binaryContextCb;
  TQCheckBox *regexpContentCb;
  TQDialog *regExpDialog;

  KURL m_url;

  KMimeType::List m_types;
  TQStringList m_ImageTypes;
  TQStringList m_VideoTypes;
  TQStringList m_AudioTypes;
};

class KDigitValidator : public TQValidator
{
  TQ_OBJECT

public:
  KDigitValidator(TQWidget * parent, const char *name = 0 );
  ~KDigitValidator();

  TQValidator::State validate(TQString & input, int &) const;

 private:
  TQRegExp *r;
};

#endif
