summaryrefslogtreecommitdiffstats
path: root/ksysguard/gui/ksgrd/SensorManager.h
blob: 27b24e6deba4ec3544bf273fa1de9beda0718e37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
    KSysGuard, the KDE System Guard
   
    Copyright (c) 1999, 2000 Chris Schlaeger <[email protected]>
    
    This program is free software; you can redistribute it and/or
    modify it under the terms of version 2 of the GNU General Public
    License as published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

*/

#ifndef KSG_SENSORMANAGER_H
#define KSG_SENSORMANAGER_H

#include <tdeconfig.h>

#include <tqdict.h>
#include <tqobject.h>

#include <SensorAgent.h>

class HostConnector;

namespace KSGRD {

class SensorManagerIterator;

/**
  The SensorManager handles all interaction with the connected
  hosts. Connections to a specific hosts are handled by
  SensorAgents. Use engage() to establish a connection and
  disengage() to terminate the connection. If you don't know if a
  certain host is already connected use engageHost(). If there is no
  connection yet or the hostname is empty, a dialog will be shown to
  enter the connections details.
 */
class TDE_EXPORT SensorManager : public TQObject
{
  TQ_OBJECT

  friend class SensorManagerIterator;

  public:
    SensorManager();
    ~SensorManager();

    bool engageHost( const TQString &hostName );
    bool engage( const TQString &hostName, const TQString &shell = "ssh",
                 const TQString &command = "", int port = -1 );

    void requestDisengage( const SensorAgent *agent );
    bool disengage( const SensorAgent *agent );
    bool disengage( const TQString &hostName );
    bool resynchronize( const TQString &hostName );
    void hostLost( const SensorAgent *agent );
    void notify( const TQString &msg ) const;

    void setBroadcaster( TQWidget *wdg );

    virtual bool event( TQEvent *event );

    bool sendRequest( const TQString &hostName, const TQString &request,
                      SensorClient *client, int id = 0 );

    const TQString hostName( const SensorAgent *sensor ) const;
    bool hostInfo( const TQString &host, TQString &shell,
                   TQString &command, int &port );

    const TQString& translateUnit( const TQString &unit ) const;
    const TQString& translateSensorPath( const TQString &path ) const;
    const TQString& translateSensorType( const TQString &type ) const;
    TQString translateSensor(const TQString& u) const;

    void readProperties( TDEConfig *cfg );
    void saveProperties( TDEConfig *cfg );

    void disconnectClient( SensorClient *client );
	
  public slots:
    void reconfigure( const SensorAgent *agent );

  signals:
    void update();
    void hostConnectionLost( const TQString &hostName );

  protected:
    TQDict<SensorAgent> mAgents;

  private:
    /**
      These dictionary stores the localized versions of the sensor
      descriptions and units.
     */
    TQDict<TQString> mDescriptions;
    TQDict<TQString> mUnits;
    TQDict<TQString> mDict;
    TQDict<TQString> mTypes;

    TQWidget* mBroadcaster;

    HostConnector* mHostConnector;
};

TDE_EXPORT extern SensorManager* SensorMgr;

class TDE_EXPORT SensorManagerIterator : public TQDictIterator<SensorAgent>
{
  public:
    SensorManagerIterator( const SensorManager *sm )
      : TQDictIterator<SensorAgent>( sm->mAgents ) { }

    ~SensorManagerIterator() { }
};

}

#endif