summaryrefslogtreecommitdiffstats
path: root/src/knemod/interface.h
blob: 06bea0a6afd38e2e8c2642cd4f00f51a5d40842e (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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
/* This file is part of KNemo
   Copyright (C) 2004, 2006 Percy Leonhardt <percy@eris23.de>

   KNemo is free software; you can redistribute it and/or modify
   it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of
   the License, or (at your option) any later version.

   KNemo 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 Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.
*/

#ifndef INTERFACE_H
#define INTERFACE_H

#include <qobject.h>
#include <qstring.h>
#include <qdatetime.h>

#include "data.h"
#include "global.h"
#include "interfaceicon.h"
#include "interfacemonitor.h"

class QTimer;
class SignalPlotter;
class InterfaceStatistics;
class InterfaceStatusDialog;
class InterfaceStatisticsDialog;

/**
 * This class is the central place for all things that belong to an
 * interface. It stores some information and knows about the interface
 * data, icon, monitor and settings.
 *
 * @short Central class for every interface
 * @author Percy Leonhardt <percy@eris23.de>
 */
class Interface : public QObject
{
    Q_OBJECT
public:
    /**
     * Default Constructor
     */
    Interface(QString ifname,
              const GeneralData& generalData,
              const PlotterSettings& plotterSettings );

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

    void setType( int type )
    {
        mType = type;
    }

    int getType()
    {
        return mType;
    }

    void setState( int state )
    {
        mState = state;
    }

    int getState()
    {
        return mState;
    }

    const QDateTime& getStartTime() const
    {
        return mStartTime;
    }

    const QString& getName() const
    {
        return mName;
    }

    InterfaceData& getData()
    {
        return mData;
    }

    InterfaceSettings& getSettings()
    {
        return mSettings;
    }

    WirelessData& getWirelessData()
    {
        return mWirelessData;
    }

    const GeneralData& getGeneralData() const
    {
        return mGeneralData;
    }

    InterfaceStatistics* getStatistics()
    {
        return mStatistics;
    }

    /**
     * Called from reparseConfiguration() when the user changed
     * the settings.
     */
    void configChanged();

    /**
     * Called from the interface updater class after new data from
     * 'ifconfig' has been read. This will trigger the monitor to
     * to look for changes in interface data or interface state.
     */
    void activateMonitor();

    enum InterfaceState
    {
        UNKNOWN_STATE = -1,
        NOT_EXISTING  = 0,
        NOT_AVAILABLE = 1,
        AVAILABLE     = 2,
        RX_TRAFFIC    = 4,
        TX_TRAFFIC    = 8
    };

    enum InterfaceType
    {
        UNKNOWN_TYPE,
        ETHERNET,
        PPP
    };

    enum IconSet
    {
        MONITOR = 0,
        MODEM,
        NETWORK,
        WIRELESS
    };

public slots:
    /*
     * Called when the user left-clicks on the tray icon
     * Toggles the status dialog by showing it on the first click and
     * hiding it on the second click.
     */
    void showStatusDialog();

    /*
     * Called when the user middle-clicks on the tray icon
     * Toggles the signal plotter that displays the incoming and
     * outgoing traffic.
     */
    void showSignalPlotter( bool wasMiddleButton );

    /*
     * Called when the user selects the appropriate entry in the context menu.
     */
    void showStatisticsDialog();

    /*
     * Reset data when PPP interface is disconnected
     */
    void resetData( int state );

private slots:
    /**
     * Start the uptimer when the interface is connected
     */
    void setStartTime( int );

    /**
     * Update the signal plotter with new data
     */
    void updatePlotter();

    /**
     * Configure the signal plotter with user settings
     */
    void configurePlotter();

private:
    /**
     * Start the statistics and load previously saved ones
     */
    void startStatistics();

    /**
     * Store the statistics and stop collecting any further data
     */
    void stopStatistics();

    /**
     * The following function is taken from ksystemtray.cpp for
     * correct show, raise, focus and hide of status dialog and
     * signal plotter.
     */
    void activateOrHide( QWidget* widget, bool onlyActivate = false );

    enum VisibleBeams
    {
        NONE = 0,
        INCOMING_TRAFFIC = 1,
        OUTGOING_TRAFFIC = 2,
        BOTH = 3
    };

    int mType;
    int mState;
    int mOutgoingPos;
    int mIncomingPos;
    QString mName;
    QTimer* mPlotterTimer;
    QDateTime mStartTime;
    InterfaceIcon mIcon;
    InterfaceData mData;
    InterfaceMonitor mMonitor;
    InterfaceSettings mSettings;
    InterfaceStatistics* mStatistics;
    WirelessData mWirelessData;
    InterfaceStatusDialog* mStatusDialog;
    InterfaceStatisticsDialog* mStatisticsDialog;
    SignalPlotter* mPlotter;
    VisibleBeams mVisibleBeams;
    const GeneralData& mGeneralData;
    const PlotterSettings& mPlotterSettings;
};

#endif // INTERFACE_H