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
|
// Copyright (C) 2011 David Sugar, Haakon Eriksen, GNU Free Call Foundation
//
// This file is part of SwitchView.
//
// SwitchView 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 3 of the License, or
// (at your option) any later version.
//
// SwitchView 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 SwitchView. If not, see <http://www.gnu.org/licenses/>.
#ifndef SWITCHVIEW_H_
#define SWITCHVIEW_H_
#include <config.h>
#include <ucommon/ucommon.h>
#include <sipwitch/sipwitch.h>
#include <QWidget>
#include <QTabWidget>
#include <QSystemTrayIcon>
#include <QObject>
#include <QMenu>
#include <QApplication>
#include <QMessageBox>
#include <QCheckBox>
#include <QLayout>
#include <QCloseEvent>
#include <QPushButton>
#include <QLabel>
#include <QListWidget>
#include <QMainWindow>
#include <QSettings>
#include <QIcon>
using namespace UCOMMON_NAMESPACE;
using namespace SIPWITCH_NAMESPACE;
typedef mapped_view<stats> statmap_t;
typedef mapped_view<MappedRegistry> usermap_t;
typedef mapped_view<MappedCall> callmap_t;
enum {
NOTIFY_CONNECTING = 0, NOTIFY_DISCONNECT,
NOTIFY_ERRORS, NOTIFY_WARNING, NOTIFY_INFO,
NOTIFY_REGISTRY, NOTIFY_CALLS, NOTIFY_COUNT};
class __LOCAL SwitchView : public QMainWindow
{
Q_OBJECT
private:
SwitchView();
~SwitchView();
public:
inline static void start(void)
{new SwitchView();};
public slots:
void stop(void);
void online(void);
void offline(void);
void reconnect(void);
void about(void);
void action(QSystemTrayIcon::ActivationReason reason);
void openMapped(void);
void openOptions(void);
void mappedClosed(void); // user dialog view closed.
void optionsClosed(void); // options closed
};
// sipwitch event manager, will signal other things when sipwitch
// events occur.
class __LOCAL Events : public QObject, public JoinableThread
{
Q_OBJECT
public:
Events();
~Events();
void run(void);
bool dispatch(events *msg);
static bool reconnect(void);
static void start(void);
static void stop(void);
static bool isAdmin(void);
static bool realm(const char *new_realm);
static bool state(const char *new_state);
public slots:
void reload(void);
void changeRealm(void);
void changeState(void);
signals:
void serverOnlineSignal(void);
void serverOfflineSignal(void);
void activateSignal(events*);
void releaseSignal(events*);
void callSignal(events*);
void dropSignal(events*);
void notifySignal(events*);
void stateSignal(char *changed, char *started = NULL);
void realmSignal(char *changed);
};
class __LOCAL Mapped : public QDialog
{
Q_OBJECT
private:
void closeEvent(QCloseEvent *event);
void started(const char *text);
public:
enum {ACTIVITY = 0, CALLS, HISTORY, STATS, USERS};
Mapped();
static void start(void);
static void stop(void);
void open(void);
const char *realm(void);
const char *state(void);
signals:
void closed(void);
void clearActivity();
void clearHistory();
public slots:
void mappedMenu(const QPoint&);
void selectedTab(int index);
void clearList(void);
void activateUser(events *msg);
void releaseUser(events *msg);
void callUpdate(events *msg);
void dropUpdate(events *msg);
void notifyActivity(events *msg);
void realm(char *text);
void state(char *text, char *start);
};
class __LOCAL Options : public QDialog
{
Q_OBJECT
private:
void closeEvent(QCloseEvent *event);
void reload(void);
public:
Options();
QCheckBox *notify[NOTIFY_COUNT];
static void start(void);
static void stop(void);
static bool isTray(void);
public slots:
void accept(void);
void cancel(void);
signals:
void closed(void);
};
// why make singleton access complex?
extern SwitchView *switchview;
extern Events *dispatcher;
extern Mapped *mapped;
extern Options *options;
extern QSystemTrayIcon *trayicon;
extern bool alwaysopen;
extern bool testing;
extern bool startup;
extern callmap_t *mapped_calls;
extern usermap_t *mapped_users;
extern statmap_t *mapped_stats;
#endif
|