/*
    From WebMaker - KDE HTML Editor
    Copyright (C) 1998, 1999 Alexei Dets <dets@services.ru>
    Rewritten for Quanta Plus: (C) 2002 Andras Mantia <amantia@freemail.hu>

    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.
*/

#ifndef _TQEXTFILEINFO_H_
#define _TQEXTFILEINFO_H_

#include <tdeio/global.h>
#include <tdeio/job.h>
#include <kurl.h>
#include <tdefileitem.h>

#include <tqobject.h>
#include <tqptrlist.h>
#include <tqregexp.h>

class QExtFileInfo:public TQObject
{
 TQ_OBJECT
  
public:
  QExtFileInfo() {};
  ~QExtFileInfo() {};

  /** create to ralative short name */
  static KURL toRelative(const KURL& urlToConvert,const KURL& baseURL);
  /** convert relative filename to absolute */
  static KURL toAbsolute(const KURL& urlToConvert,const KURL& baseURL);
  /** recurse function for all files in dir */
  static KURL::List allFiles( const KURL& path, const TQString &mask);
  static KURL::List allFilesRelative( const KURL& path, const TQString &mask);
  /** create dir if don't exists */
  static bool createDir(const KURL & path );
  static KURL cdUp(const KURL &dir);
  static TQString shortName(const TQString &fname );
  static KURL path(const KURL &);
  static KURL home();
  static bool exists(const KURL& url);
  static bool copy( const KURL& src, const KURL& dest, int permissions=-1,
                    bool overwrite=false, bool resume=false, TQWidget* window = 0L );

  void enter_loop();

private:
  bool internalExists(const KURL& url);
  bool internalCopy(const KURL& src, const KURL& target, int permissions,
                    bool overwrite, bool resume, TQWidget* window);

  bool bJobOK;
  static TQString lastErrorMsg;
  TDEIO::UDSEntry m_entry;
  KURL::List dirListItems;
  TQPtrList<TQRegExp> lstFilters;

  /** No descriptions */
  KURL::List allFilesInternal(const KURL& startURL, const TQString& mask);

//  friend class I_like_this_class;

private slots:
   void slotResult( TDEIO::Job * job );
   void slotNewEntries(TDEIO::Job *job, const TDEIO::UDSEntryList& udsList);
public slots: // Public slots
  /** Timeout occured while waiting for some network function to return. */
  void slotTimeout();
};


#endif
