/* -*- C++ -*- */

/**********************************************************************/
/*   TimeMon (c)  1994  Helmut Maierhofer			      */
/*   KDE-ified M. Maierhofer 1998                                     */
/*   maintained by Dirk A. Mueller <mueller@kde.org                   */
/**********************************************************************/

/*
 * timemon.h
 *
 * Definitions for the timemon widget.
 */

#ifndef TIMEMON_H
#define TIMEMON_H

#include <tqtooltip.h>
#include <kiconloader.h>
#include <kpanelapplet.h>

// -- global constants ---------------------------------------------------

const int MAX_MOUSE_ACTIONS = 3; // event handlers for the three buttons only

// -- forward declaration ------------------------------------------------
class KSample;
class KConfDialog;
class TQPaintEvent;
class TQMouseEvent;
class TQPainter;
class TDEProcess;
class KShellProcess;
class KHelpMenu;
class TDEPopupMenu;

// -- KTimeMon declaration -----------------------------------------------

/*
 * KTimeMon
 *
 * This is the main widget of the application. It handles the configuration
 * dialog and may have an associated KTimeMonWidget in the panel (in which
 * case it hides itself).
 */

class KTimeMon : public KPanelApplet, TQToolTip {
    Q_OBJECT
  
public:
    enum MouseAction { NOTHING, SWITCH, MENU, COMMAND };

    KTimeMon(const TQString& configFile, Type t = Normal, int actions = 0,
             TQWidget *parent = 0, const char *name = 0);
    virtual ~KTimeMon();

    void writeConfiguration();	// write back the configuration data

    // reimplemented from KPanelApplet
    virtual int widthForHeight(int height) const;
    virtual int heightForWidth(int width) const;

    virtual void preferences();

    void stop();
    void cont();

public slots:
    void timeout();		// timer expired
    void save();			// session management callback
    void apply();			// apply configuration information

protected:
    virtual void maybeTip(const TQPoint&);
    virtual void mousePressEvent(TQMouseEvent *event);
    virtual void updateConfig(KConfDialog *d);
    virtual void paintEvent(TQPaintEvent *event);

private slots:			// called from the menu
    void configure();		// show the configuration dialog
    void orientation();		// switch vertical/horizontal orientation
    void commandStderr(TDEProcess *proc, char *buffer, int length);

private:
    void runCommand(int index);
    void paintRect(int x, int y, int w, int h, TQColor c, TQPainter *p);

    unsigned interval;
    bool autoScale;
    unsigned pageScale, swapScale, ctxScale;
    TDEPopupMenu* menu;
    KHelpMenu* hmenu;
    TQTimer* timer;
    KConfDialog *configDialog;
    MouseAction mouseAction[MAX_MOUSE_ACTIONS];
    TQString mouseActionCommand[MAX_MOUSE_ACTIONS];
    KShellProcess *bgProcess;

    KSample *sample;
    TQColor kernelColour, userColour, niceColour, iowaitColour;
    TQColor usedColour, buffersColour, cachedColour, mkernelColour;
    TQColor swapColour, bgColour;
    bool vertical, tooltip;

    friend class KConfDialog;
};

#endif // TIMEMON_H
