1 /****************************************************************************
3 ** Copyright (C) 2007-2008 Urs Wolfer <uwolfer @ kde.org>
5 ** This file is part of KDE.
7 ** This program is free software; you can redistribute it and/or modify
8 ** it under the terms of the GNU General Public License as published by
9 ** the Free Software Foundation; either version 2 of the License, or
10 ** (at your option) any later version.
12 ** This program is distributed in the hope that it will be useful,
13 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ** GNU General Public License for more details.
17 ** You should have received a copy of the GNU General Public License
18 ** along with this program; see the file COPYING. If not, write to
19 ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 ** Boston, MA 02110-1301, USA.
22 ****************************************************************************/
24 #ifndef VNCCLIENTTHREAD_H
25 #define VNCCLIENTTHREAD_H
29 #define kDebug(n) qDebug()
30 #define kBacktrace() ""
37 #include "remoteview.h"
45 #include <rfb/rfbclient.h>
51 virtual ~ClientEvent();
53 virtual void fire(rfbClient*) = 0;
56 class KeyClientEvent : public ClientEvent
59 KeyClientEvent(int key, int pressed)
60 : m_key(key), m_pressed(pressed) {}
62 void fire(rfbClient*);
69 class PointerClientEvent : public ClientEvent
72 PointerClientEvent(int x, int y, int buttonMask)
73 : m_x(x), m_y(y), m_buttonMask(buttonMask) {}
75 void fire(rfbClient*);
83 class ClientCutEvent : public ClientEvent
86 ClientCutEvent(const QString &text)
89 void fire(rfbClient*);
95 class VncClientThread: public QThread
108 explicit VncClientThread(QObject *parent = 0);
110 const QImage image(int x = 0, int y = 0, int w = 0, int h = 0);
111 void setImage(const QImage &img);
112 void emitUpdated(int x, int y, int w, int h);
113 void emitGotCut(const QString &text);
115 void setHost(const QString &host);
116 void setPort(int port);
117 void setQuality(RemoteView::Quality quality);
118 void setPassword(const QString &password) {
119 m_password = password;
121 const QString password() const {
125 RemoteView::Quality quality() const;
126 ColorDepth colorDepth() const;
127 uint8_t *frameBuffer;
130 void imageUpdated(int x, int y, int w, int h);
131 void gotCut(const QString &text);
132 void passwordRequest();
133 void outputErrorMessage(const QString &message);
136 void mouseEvent(int x, int y, int buttonMask);
137 void keyEvent(int key, bool pressed);
138 void clientCut(const QString &text);
144 static void setClientColorDepth(rfbClient *cl, ColorDepth cd);
145 void setColorDepth(ColorDepth colorDepth);
146 //these static methods are callback functions for libvncclient
147 static rfbBool newclient(rfbClient *cl);
148 static void updatefb(rfbClient *cl, int x, int y, int w, int h);
149 static void cuttext(rfbClient *cl, const char *text, int textlen);
150 static char* passwdHandler(rfbClient *cl);
151 static void outputHandler(const char *format, ...);
159 RemoteView::Quality m_quality;
160 ColorDepth m_colorDepth;
161 QQueue<ClientEvent* > m_eventQueue;
162 //color table for 8bit indexed colors
163 static QVector<QRgb> m_colorTable;
165 volatile bool m_stopped;
166 volatile bool m_passwordError;
169 void checkOutputErrorMessage();