/*
 * Copyright (C) 2004 Robert Hogan <robert at roberthogan dot net>
 */

#ifndef _KLAMAV_H_
#define _KLAMAV_H_

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <tdeapplication.h>
#include <tdemainwindow.h>
#include <tqtabwidget.h>

#include <stdlib.h>

class KPrinter;
class TDEToggleAction;
class TDEPopupMenu;
class KURL;
class TQLineEdit;
class TQComboBox;
class TQCheckBox;
class TQListBox;
class TQPushButton;
class TQLabel;
class TDEProcess;
class TDEConfig;
class KURLRequester;
class Freshklam;
class Sigtool;
class Klamscan;
class KlamavDock;
class Kuarantine;
class Activityviewer;
class Aboutklamav;
class KlamDB;
class KSystemTray;
class KlamOnAcc;

/**
 * This class serves as the main window for Klamav.  It handles the
 * menus, toolbars, and status bars.
 *
 * @short Main window class
 * @author $AUTHOR <$EMAIL>
 * @version $APP_VERSION
 */
class Klamav : public TDEMainWindow
{
    TQ_OBJECT
public:
    /**
     * Default Constructor
     */
    Klamav();

    /**
     * Default Destructor
     */
    virtual ~Klamav();

    /**
     * Use this method to load whatever file/URL you have
     */
    void  setDirName(TQString);

    KlamavDock *m_dock;
    KSystemTray *_tray;
    TDEAction *EnableFreshklam;
    TDEAction *DisableFreshklam;
    TDEAction *EnableKlamOnAcc;
    TDEAction *DisableKlamOnAcc;
    Freshklam *freshklam;
    bool firstDownload;
    bool downloadDBForWizard;
    Kuarantine *kuarantine;
    KlamDB *klamdb;
    Klamscan *klamscan;
    Activityviewer *activityviewer;
    void showVirusBrowser();
    TQTabWidget *tab;
    KlamOnAcc *klamonacc;


protected:
    /**
     * Overridden virtuals for TQt drag 'n drop (XDND)
     */
    /*virtual void dragEnterEvent(TQDragEnterEvent *event);
    virtual void dropEvent(TQDropEvent *event);*/
	virtual bool queryClose();


protected:
    /**
     * This function is called when it is time for the app to save its
     * properties for session management purposes.
     */
    //void saveProperties(TDEConfig *);

    /**
     * This function is called when this app is restored.  The TDEConfig
     * object points to the session management config file that was saved
     * with @ref saveProperties
     */
    //void readProperties(TDEConfig *);

public slots:
	void slotConfigKlamav( const TQCString& page );
private slots:
	void slotScanFile();
	void slotScanDir();
	void slotScheduleScan();
	void slotOptions();
	void slotToggleWelcome();
	void slotToggleQuarantine();
	void slotToggleDBViewer();
	void slotToggleEvents();
  void slotKOAStateUpdate();
	void contextEnableFK();
  void contextUpdateFK();
  void contextDisableFK();
  void contextEnableKOA();
  void contextDisableKOA();
	void tabClosed(TQString name);

private:
    void setupAccel();
    void setupActions();
    void firstRunWizard();
    void createDefaultKlamAVDir(TQString type);
    void checkDir(TQString path);
    void updateTabState(int tabId, bool init);

private:
    //KlamavView *m_view;



signals:
    void itemSelected(TQString abs_filename, int line);

public slots:
private slots:
    void shuttingDown();
private:
    void processOutput();
    void finish();
    void getout();

    TQLineEdit *template_edit;
    TQComboBox *files_combo, *pattern_combo/*, *dir_combo*/;
    KURLRequester *dir_combo;
    TQCheckBox *recursive_box;
    TQListBox *resultbox;
    TQPushButton *search_button, *cancel_button;
    TQLabel *status_label, *matches_label;
    TDEProcess *childproc;
    TQString buf;
    TDEConfig* config;
    TQStringList lastSearchItems;
    TQStringList lastSearchPaths;
    Sigtool *sigtool;
    Aboutklamav *aboutklamav;

    TDEPopupMenu *tabs_menu;
    int showWelcomeTab;
    int showQuarantineTab;
    int showDBViewerTab;
    int showEventsTab;
};

extern Klamav *tdemain;

#endif // _KLAMAV_H_
