summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/comm/keypebble/keypebble.pro16
-rw-r--r--noncore/comm/keypebble/krfbbuffer.cpp33
-rw-r--r--noncore/comm/keypebble/krfbcanvas.cpp39
-rw-r--r--noncore/comm/keypebble/krfbcanvas.h6
-rw-r--r--noncore/comm/keypebble/krfbconnection.cpp272
-rw-r--r--noncore/comm/keypebble/krfbconnection.h19
-rw-r--r--noncore/comm/keypebble/krfbdecoder.cpp3
-rw-r--r--noncore/comm/keypebble/krfblogin.cpp8
-rw-r--r--noncore/comm/keypebble/krfboptions.cpp56
-rw-r--r--noncore/comm/keypebble/krfboptions.h31
-rw-r--r--noncore/comm/keypebble/krfbserver.cpp39
-rw-r--r--noncore/comm/keypebble/kvnc.cpp168
-rw-r--r--noncore/comm/keypebble/kvnc.h14
-rw-r--r--noncore/comm/keypebble/kvncbookmarkdlg.cpp220
-rw-r--r--noncore/comm/keypebble/kvncconndlg.cpp75
-rw-r--r--noncore/comm/keypebble/kvncconnectdlg.cpp79
-rw-r--r--noncore/comm/keypebble/kvncconnectdlg.h39
-rw-r--r--noncore/comm/keypebble/kvncoptionsdlg.cpp54
-rw-r--r--noncore/comm/keypebble/kvncoptionsdlg.h30
-rw-r--r--noncore/comm/keypebble/main.cpp4
20 files changed, 682 insertions, 523 deletions
diff --git a/noncore/comm/keypebble/keypebble.pro b/noncore/comm/keypebble/keypebble.pro
index a102381..1017133 100644
--- a/noncore/comm/keypebble/keypebble.pro
+++ b/noncore/comm/keypebble/keypebble.pro
@@ -1,47 +1,49 @@
TEMPLATE = app
CONFIG += qt warn_on release
DESTDIR = $(OPIEDIR)/bin
HEADERS = d3des.h \
krfbbuffer.h \
krfbcanvas.h \
krfbconnection.h \
krfbdecoder.h \
krfblogin.h \
- krfboptions.h \
+ krfbserver.h \
krfbserverinfo.h \
kvnc.h \
- kvncconnectdlg.h \
- kvncoptionsdlg.h \
+ kvncconndlg.h \
+ kvncbookmarkdlg.h \
+ version.h \
vncauth.h
SOURCES = d3des.c \
vncauth.c \
krfbbuffer.cpp \
krfbcanvas.cpp \
krfbconnection.cpp \
krfbdecoder.cpp \
krfblogin.cpp \
- krfboptions.cpp \
+ krfbserver.cpp \
kvnc.cpp \
- kvncconnectdlg.cpp \
- kvncoptionsdlg.cpp \
+ kvncconndlg.cpp \
+ kvncbookmarkdlg.cpp \
main.cpp
-INTERFACES = vncoptionsbase.ui
+INTERFACES = kvncconndlgbase.ui \
+ kvncbookmarkdlgbase.ui
TARGET = keypebble
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe
TRANSLATIONS = ../../../i18n/de/keypebble.ts \
../../../i18n/en/keypebble.ts \
../../../i18n/es/keypebble.ts \
../../../i18n/fr/keypebble.ts \
../../../i18n/hu/keypebble.ts \
../../../i18n/ja/keypebble.ts \
../../../i18n/ko/keypebble.ts \
../../../i18n/no/keypebble.ts \
../../../i18n/pl/keypebble.ts \
../../../i18n/pt/keypebble.ts \
../../../i18n/pt_BR/keypebble.ts \
../../../i18n/sl/keypebble.ts \
../../../i18n/zh_CN/keypebble.ts \
../../../i18n/zh_TW/keypebble.ts
diff --git a/noncore/comm/keypebble/krfbbuffer.cpp b/noncore/comm/keypebble/krfbbuffer.cpp
index 4885261..5a52f31 100644
--- a/noncore/comm/keypebble/krfbbuffer.cpp
+++ b/noncore/comm/keypebble/krfbbuffer.cpp
@@ -129,35 +129,66 @@ void KRFBBuffer::drawRawRectChunk( void *data,
for ( int i = 0; i < w ; i++ ) {
ulong pixel = d[ j * w + i ];
pixel = Swap32IfLE( pixel );
r = pixel;
r = r >> decoder->format->redShift;
r = r & redMax;
g = pixel;
g = g >> decoder->format->greenShift;
g = g & greenMax;
b = pixel;
b = b >> decoder->format->blueShift;
b = b & blueMax;
r = ( r * 255 ) / redMax;
g = ( g * 255 ) / greenMax;
b = ( b * 255 ) / blueMax;
uint *p = ( uint * ) img.scanLine( j ) + i;
*p = qRgb( r,g,b );
}
}
- }
+ } else if (decoder->format->bpp == 16 ) {
+
+ CARD16 *d = (CARD16 *) data;
+
+ uint r,g,b;
+
+ for ( int j = 0; j < h; j++ ) {
+ for ( int i = 0; i < w ; i++ ) {
+ CARD16 pixel = d[ j * w + i ];
+ pixel = Swap16IfLE( pixel );
+
+ r = pixel;
+ r = r >> decoder->format->redShift;
+ r = r & redMax;
+
+ g = pixel;
+ g = g >> decoder->format->greenShift;
+ g = g & greenMax;
+
+ b = pixel;
+ b = b >> decoder->format->blueShift;
+ b = b & blueMax;
+
+ r = ( r * 255 ) / redMax;
+ g = ( g * 255 ) / greenMax;
+ b = ( b * 255 ) / blueMax;
+
+ ulong *p = ( ulong * ) img.scanLine( j ) + i;
+ *p = qRgb( r,g,b );
+ }
+ }
+ }
else {
p.setBrush( QBrush( Qt::black ) );
p.drawRect( x, y, w, h );
}
p.drawImage( x, y, img );
emit updated( x, y, w, h );
}
diff --git a/noncore/comm/keypebble/krfbcanvas.cpp b/noncore/comm/keypebble/krfbcanvas.cpp
index f74ab7b..8b56795 100644
--- a/noncore/comm/keypebble/krfbcanvas.cpp
+++ b/noncore/comm/keypebble/krfbcanvas.cpp
@@ -1,99 +1,93 @@
-#include "kvncconnectdlg.h"
#include "krfbconnection.h"
#include "krfbcanvas.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbbuffer.h"
#include <qpe/config.h>
+#include <qpe/qpeapplication.h>
#include <qapplication.h>
#include <qclipboard.h>
#include <qaction.h>
#include <qpixmap.h>
#include <qapplication.h>
#include <qmainwindow.h>
#include <qiconset.h>
KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name )
: QScrollView( parent, name )
{
connection_ = new KRFBConnection();
- connect( connection_, SIGNAL( passwordRequired( KRFBConnection * ) ),
- this, SLOT( passwordRequired( KRFBConnection * ) ) );
connect( connection_, SIGNAL( loggedIn() ),
this, SLOT( loggedIn() ) );
loggedIn_ = false;
+ QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold);
viewport()->setFocusPolicy( QWidget::StrongFocus );
viewport()->setFocus();
}
KRFBCanvas::~KRFBCanvas()
{
}
-void KRFBCanvas::openConnection()
+
+void KRFBCanvas::openConnection(KRFBServer server)
{
- KVNCConnectDlg dlg( connection_, this, "connect dialog" );
- if ( dlg.exec() ) {
- QCString host = dlg.hostname().latin1();
- password = dlg.password();
- connection_->connectTo( host, dlg.display() );
- }
+
+
+ QCString host = server.hostname.latin1();
+ password=server.password;
+ connection_->connectTo( server);
}
+
void KRFBCanvas::openURL( const QUrl &url )
{
if ( loggedIn_ ) {
qWarning( "openURL invoked when logged in\n" );
return;
}
QCString host = url.host().latin1();
int display = url.port();
- if ( url.hasPassword() )
- connection_->setPassword( url.password().latin1() );
- connection_->connectTo( host, display );
+// connection_->connectTo( host, display );
}
void KRFBCanvas::closeConnection()
{
loggedIn_ = false;
connection_->disconnect();
viewport()->setMouseTracking( false );
viewport()->setBackgroundMode( PaletteDark );
setBackgroundMode( PaletteDark );
update();
}
-void KRFBCanvas::passwordRequired( KRFBConnection *con )
-{
- con->setPassword( password.latin1() );
-}
void KRFBCanvas::bell()
{
if ( connection_->options()->deIconify ) {
topLevelWidget()->raise();
topLevelWidget()->show();
}
}
void KRFBCanvas::loggedIn()
{
qWarning( "Ok, we're logged in" );
//
// Get ready for action
//
loggedIn_ = true;
viewport()->setMouseTracking( true );
viewport()->setBackgroundMode( NoBackground );
setBackgroundMode( NoBackground );
// Start using the buffer
connect( connection_->buffer(), SIGNAL( sizeChanged( int, int ) ),
this, SLOT( resizeContents(int,int) ) );
@@ -146,24 +140,33 @@ void KRFBCanvas::contentsMouseMoveEvent( QMouseEvent *e )
void KRFBCanvas::keyPressEvent( QKeyEvent *e )
{
if ( loggedIn_ )
connection_->buffer()->keyPressEvent( e );
}
void KRFBCanvas::keyReleaseEvent( QKeyEvent *e )
{
if ( loggedIn_ )
connection_->buffer()->keyReleaseEvent( e );
}
void KRFBCanvas::refresh()
{
if ( loggedIn_ )
connection_->refresh();
}
void KRFBCanvas::clipboardChanged()
{
if ( loggedIn_ ) {
connection_->sendCutText( qApp->clipboard()->text() );
}
}
+void KRFBCanvas::sendCtlAltDel( void)
+{
+
+ qDebug("Here");
+ if ( loggedIn_ ) {
+ connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyPress,Qt::Key_Delete, 0x7f,ControlButton|AltButton));
+ // connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyRelease,Qt::Key_Delete, 0x7f,ControlButton|AltButton));
+ }
+}
diff --git a/noncore/comm/keypebble/krfbcanvas.h b/noncore/comm/keypebble/krfbcanvas.h
index 7864f1c..cd3047c 100644
--- a/noncore/comm/keypebble/krfbcanvas.h
+++ b/noncore/comm/keypebble/krfbcanvas.h
@@ -1,54 +1,56 @@
// -*- c++ -*-
#ifndef KRFBCANVAS_H
#define KRFBCANVAS_H
#include <qscrollview.h>
#include <qurl.h>
class KRFBConnection;
+class KRFBServer;
/**
* Displays data from an KRFBDecoder, and sends events to the
* KRFBConnection.
*/
class KRFBCanvas : public QScrollView
{
Q_OBJECT
public:
KRFBCanvas( QWidget *parent, const char *name=0 );
~KRFBCanvas();
void setConnection( KRFBConnection * );
KRFBConnection *connection() { return connection_; };
public slots:
- void openConnection();
+
+ void openConnection (KRFBServer);
void openURL( const QUrl & );
void closeConnection();
- void passwordRequired( KRFBConnection * );
void refresh();
void bell();
+ void sendCtlAltDel(void);
protected:
virtual void keyPressEvent( QKeyEvent * );
virtual void keyReleaseEvent( QKeyEvent * );
virtual void contentsMousePressEvent( QMouseEvent * );
virtual void contentsMouseReleaseEvent( QMouseEvent * );
virtual void contentsMouseMoveEvent( QMouseEvent * );
virtual void viewportPaintEvent( QPaintEvent *e );
protected slots:
void loggedIn();
void viewportUpdate( int x, int y, int w, int h );
void clipboardChanged();
private:
KRFBConnection *connection_;
QString password;
bool loggedIn_;
};
#endif // KRFBCANVAS_H
diff --git a/noncore/comm/keypebble/krfbconnection.cpp b/noncore/comm/keypebble/krfbconnection.cpp
index c51f18a..389c836 100644
--- a/noncore/comm/keypebble/krfbconnection.cpp
+++ b/noncore/comm/keypebble/krfbconnection.cpp
@@ -1,242 +1,234 @@
#include <assert.h>
#include <qsocket.h>
#include <qtimer.h>
#include <string.h>
#include "krfbconnection.h"
#include "krfblogin.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbdecoder.h"
#include "krfbbuffer.h"
KRFBConnection::KRFBConnection( QObject *parent )
- : QObject( parent, "KRFBConnection" )
+ : QObject( parent, "KRFBConnection" )
{
- portBase_ = 5900;
- currentState_ = Disconnected;
- sock = 0;
- minData_ = 0;
- options_ = new KRFBOptions();
- updater = 0;
- decoder_ = 0;
- buffer_ = 0;
+ portBase_ = 5900;
+ currentState_ = Disconnected;
+ sock = 0;
+ minData_ = 0;
+ options_ = new KRFBServer();
+ updater = 0;
+ decoder_ = 0;
+ buffer_ = 0;
}
KRFBConnection::~KRFBConnection()
{
- if ( ( currentState_ != Disconnected ) && ( currentState_ != Disconnecting ) && sock ) {
- disconnectDone();
- }
- delete options_;
+ if ( ( currentState_ != Disconnected ) && ( currentState_ != Disconnecting ) && sock ) {
+ disconnectDone();
+ }
+ delete options_;
}
-void KRFBConnection::connectTo( const QCString &host, int display )
+void KRFBConnection::connectTo( KRFBServer server)
{
- if ( currentState_ != Disconnected );
- disconnect();
+ if ( currentState_ != Disconnected )
+ disconnect();
+
+ (*options_)=server;
- this->host_= host;
- this->display_ = display;
+ sock = new QSocket( this, "rfbSocket" );
+ CHECK_PTR( sock );
- sock = new QSocket( this, "rfbSocket" );
- CHECK_PTR( sock );
+ // Connect to something to notice connection or error
+ connect( sock, SIGNAL( error( int ) ), SLOT( gotSocketError( int ) ) );
+ connect( sock, SIGNAL( connected() ), SLOT( gotSocketConnection() ) );
- // Connect to something to notice connection or error
- connect( sock, SIGNAL( error( int ) ), SLOT( gotSocketError( int ) ) );
- connect( sock, SIGNAL( connected() ), SLOT( gotSocketConnection() ) );
+ qWarning( "Connecting..." );
- qWarning( "Connecting..." );
-
- currentState_ = Connecting;
- sock->connectToHost( host_, portBase_ + display_ );
+ currentState_ = Connecting;
+ sock->connectToHost( options_->hostname.latin1(), portBase_ + options_->display );
}
void KRFBConnection::disconnect()
{
- qWarning( "Disconnecting from server" );
+ qWarning( "Disconnecting from server" );
- if ( ( currentState_ != Disconnected )
- && ( currentState_ != Disconnecting )
- && sock ) {
- currentState_ = Disconnecting;
+ if ( ( currentState_ != Disconnected )
+ && ( currentState_ != Disconnecting )
+ && sock ) {
+ currentState_ = Disconnecting;
- connect( sock, SIGNAL( delayedCloseFinished() ), SLOT( disconnectDone() ) );
- sock->close();
+ connect( sock, SIGNAL( delayedCloseFinished() ), SLOT( disconnectDone() ) );
+ sock->close();
- if ( sock->state() != QSocket::Closing )
- disconnectDone();
- }
+ if ( sock->state() != QSocket::Closing )
+ disconnectDone();
+ }
}
void KRFBConnection::disconnectDone()
{
- qWarning( "KRFBConnection disconnected" );
- currentState_ = Disconnected;
- delete sock;
- sock = 0;
- minData_ = 0;
- delete updater;
- delete decoder_;
- delete buffer_;
- emit disconnected();
+ currentState_ = Disconnected;
+ delete sock;
+ sock = 0;
+ minData_ = 0;
+ delete updater;
+ delete decoder_;
+ delete buffer_;
+ emit disconnected();
}
void KRFBConnection::gotSocketConnection()
{
- currentState_ = LoggingIn;
+ currentState_ = LoggingIn;
- qWarning( "Connected, logging in..." );
+ qWarning( "Connected, logging in..." );
- static QString statusMsg = tr( "Connected" );
- emit statusChanged( statusMsg );
+ static QString statusMsg = tr( "Connected" );
+ emit statusChanged( statusMsg );
- // Do some login stuff
- login = new KRFBLogin( this );
+ // Do some login stuff
+ login = new KRFBLogin( this );
}
void KRFBConnection::gotRFBConnection()
{
- qWarning( "Logged into server" );
+ qWarning( "Logged into server" );
- currentState_ = Connected;
- emit connected();
+ currentState_ = Connected;
+ emit connected();
- // Create the decoder and start doing stuff
- decoder_ = new KRFBDecoder( this );
- CHECK_PTR( decoder_ );
+ // Create the decoder and start doing stuff
+ decoder_ = new KRFBDecoder( this );
+ CHECK_PTR( decoder_ );
- buffer_ = new KRFBBuffer( decoder_, this, "RFB Buffer" );
- CHECK_PTR( buffer_ );
- decoder_->setBuffer( buffer_ );
+ buffer_ = new KRFBBuffer( decoder_, this, "RFB Buffer" );
+ CHECK_PTR( buffer_ );
+ decoder_->setBuffer( buffer_ );
- connect( decoder_, SIGNAL( status( const QString & ) ),
- this, SIGNAL( statusChanged( const QString & ) ) );
- emit loggedIn();
+ connect( decoder_, SIGNAL( status( const QString & ) ),
+ this, SIGNAL( statusChanged( const QString & ) ) );
+ emit loggedIn();
- decoder_->start();
+ decoder_->start();
- updater = new QTimer;
- connect( updater, SIGNAL( timeout() ), SLOT( updateTimer() ) );
- updater->start( options_->updateRate );
+ updater = new QTimer;
+ connect( updater, SIGNAL( timeout() ), SLOT( updateTimer() ) );
+ updater->start( options_->updateRate );
}
void KRFBConnection::gotSocketError( int err )
{
- currentState_ = Error;
-
- // Do some error handling stuff
- qWarning( "KRFBConnection: Socket error %d", err );
-
- static QString refused = tr( "Connection Refused" );
- static QString host = tr( "Host not found" );
- static QString read = tr( "Read Error: QSocket reported an error reading\n"
- "data, the remote host has probably dropped the\n"
- "connection." );
- static QString confused = tr( "QSocket reported an invalid error code" );
-
- QString msg;
- switch ( err ) {
- case QSocket::ErrConnectionRefused:
- msg = refused;
- break;
- case QSocket::ErrHostNotFound:
- msg = host;
- break;
- case QSocket::ErrSocketRead:
- msg = read;
- break;
- default:
- msg = confused;
- };
-
- QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );
- delete sock;
- sock = 0;
- currentState_ = Disconnected;
-
- emit error( msg );
+ currentState_ = Error;
+
+ // Do some error handling stuff
+ qWarning( "KRFBConnection: Socket error %d", err );
+
+ static QString refused = tr( "Connection Refused" );
+ static QString host = tr( "Host not found" );
+ static QString read = tr( "Read Error: QSocket reported an error reading\n"
+ "data, the remote host has probably dropped the\n"
+ "connection." );
+ static QString confused = tr( "QSocket reported an invalid error code" );
+
+ QString msg;
+ switch ( err ) {
+ case QSocket::ErrConnectionRefused:
+ msg = refused;
+ break;
+ case QSocket::ErrHostNotFound:
+ msg = host;
+ break;
+ case QSocket::ErrSocketRead:
+ msg = read;
+ break;
+ default:
+ msg = confused;
+ };
+
+ QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );
+ delete sock;
+ sock = 0;
+ currentState_ = Disconnected;
+
+ emit error( msg );
}
void KRFBConnection::gotMoreData()
{
- assert( minData_ > 0 );
+ assert( minData_ > 0 );
- if ( sock->size() >= minData_ ) {
- minData_ = 0;
- QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );
- emit gotEnoughData();
- }
+ if ( sock->size() >= minData_ ) {
+ minData_ = 0;
+ QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );
+ emit gotEnoughData();
+ }
}
void KRFBConnection::waitForData( unsigned int sz )
{
- assert( minData_ == 0 );
- assert( sz > 0 );
- assert( currentState_ != Error );
-
- if ( sock->size() >= sz ) {
- // qWarning( "No need to wait for data" );
- emit gotEnoughData();
- }
- else {
- // qWarning( "Waiting for %u bytes", sz );
-
- minData_ = sz;
- connect( sock, SIGNAL( readyRead() ), SLOT( gotMoreData() ) );
- }
+ assert( minData_ == 0 );
+ assert( sz > 0 );
+ assert( currentState_ != Error );
+
+ if ( sock->size() >= sz ) {
+ // qWarning( "No need to wait for data" );
+ emit gotEnoughData();
+ }
+ else {
+ // qWarning( "Waiting for %u bytes", sz );
+ minData_ = sz;
+ connect( sock, SIGNAL( readyRead() ), SLOT( gotMoreData() ) );
+ }
}
int KRFBConnection::read( void *buf, int sz )
{
- return sock->readBlock( (char *) buf, sz );
+ return sock->readBlock( (char *) buf, sz );
}
int KRFBConnection::write( void *buf, int sz )
{
- return sock->writeBlock( (const char *) buf, sz );
+ return sock->writeBlock( (const char *) buf, sz );
}
KRFBConnection::State KRFBConnection::state() const
{
- return currentState_;
+ return currentState_;
}
void KRFBConnection::setPortBase( int base )
{
- portBase_ = base;
+ portBase_ = base;
}
int KRFBConnection::portBase() const
{
- return portBase_;
-}
-
-void KRFBConnection::setPassword( const QCString &pass )
-{
- this->pass_ = pass;
+ return portBase_;
}
void KRFBConnection::updateTimer()
{
- decoder_->sendUpdateRequest( true );
+ decoder_->sendUpdateRequest( true );
}
void KRFBConnection::refresh()
{
- decoder_->sendUpdateRequest( false );
+ decoder_->sendUpdateRequest( false );
}
void KRFBConnection::sendCutText( const QString &text )
{
- decoder_->sendCutEvent( text );
+ decoder_->sendCutEvent( text );
}
const QUrl &KRFBConnection::url()
{
- url_.setProtocol( "vnc" );
- url_.setPort( display() );
- url_.setHost( host() );
- url_.setPath( "/" );
+ url_.setProtocol( "vnc" );
+ url_.setPort( display() );
+ url_.setHost( host() );
+ url_.setPath( "/" );
- return url_;
+ return url_;
}
diff --git a/noncore/comm/keypebble/krfbconnection.h b/noncore/comm/keypebble/krfbconnection.h
index fe477c1..a8d3457 100644
--- a/noncore/comm/keypebble/krfbconnection.h
+++ b/noncore/comm/keypebble/krfbconnection.h
@@ -1,97 +1,95 @@
// -*- c++ -*-
#ifndef KRFBCONNECTION_H
#define KRFBCONNECTION_H
#include <qobject.h>
#include <qstring.h>
#include <qcstring.h>
+#include "krfbserver.h"
#include <qurl.h>
class KRFBLogin;
class KRBUpdateHandler;
-class KRFBOptions;
+class KRFBServer;
class QSocket;
class KRFBDecoder;
class KRFBBuffer;
class QTimer;
/**
* Encapsulates the RFB socket.
*
*/
class KRFBConnection : public QObject
{
Q_OBJECT
public:
friend class KRFBLogin;
friend class KRFBDecoder;
//* The state of the connection.
enum State {
Connecting,
LoggingIn,
Connected,
Disconnecting,
Disconnected,
Error
};
KRFBConnection( QObject *parent = 0 );
~KRFBConnection();
//* Get the state of a connection.
State state() const;
//* Get the options for this connection
- KRFBOptions *options() const { return options_; };
+ KRFBServer *options() const { return options_; };
KRFBBuffer *buffer() const { return buffer_; };
KRFBDecoder *decoder() const { return decoder_; };
//* Set the base from which the port for a given display will be calculated.
void setPortBase( int base );
//* Get the base from which the port for a given display is calculated.
int portBase() const;
- //* Set the password which will be used to login
- void setPassword( const QCString &pass );
-
//* Open a connection
- void connectTo( const QCString &host, int display );
+ void connectTo( KRFBServer);
//* Close the connection
void disconnect();
//* Get the host
- const QCString host() const { return host_; };
+ const QCString host() const { return options_->hostname.latin1(); };
//* Get the display
- int display() const { return display_; };
+ int display() const { return options_->display; };
//* Get the current host/display as a URL
const QUrl &url();
//* Reload the display
void refresh();
//* Send text to the remote clipboard
void sendCutText( const QString & );
protected slots:
//* When the shit hits the fan
void gotSocketError( int );
//* When we have an open socket
void gotSocketConnection();
//* When we have logged in
void gotRFBConnection();
//* When some more data arrived
void gotMoreData();
void updateTimer();
@@ -112,41 +110,38 @@ signals:
//* When we have a working RFB connection
void connected();
void loggedIn();
void disconnected();
//* What happened?
void error( const QString &msg );
//* Emitted in response to a waitForData() call.
void gotEnoughData();
private:
//
// The following are called by our friends.
//
void waitForData( unsigned int );
int read( void *buf, int sz );
int write( void *buf, int sz );
private:
- QCString host_;
int portBase_;
- int display_;
- QCString pass_;
QSocket *sock;
State currentState_;
unsigned int minData_;
QTimer *updater;
KRFBLogin *login;
KRFBDecoder *decoder_;
- KRFBOptions *options_;
+ KRFBServer *options_;
KRFBBuffer *buffer_;
QUrl url_;
};
#endif // KRFBCONNECTION_H
diff --git a/noncore/comm/keypebble/krfbdecoder.cpp b/noncore/comm/keypebble/krfbdecoder.cpp
index 174dd7b..a964c09 100644
--- a/noncore/comm/keypebble/krfbdecoder.cpp
+++ b/noncore/comm/keypebble/krfbdecoder.cpp
@@ -1,26 +1,26 @@
#include "krfbconnection.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbserverinfo.h"
#include "krfbdecoder.h"
#include "krfbbuffer.h"
#include <qpe/qpeapplication.h>
#include <qpixmap.h>
#include <qsocket.h>
#include <qevent.h>
#include <qstring.h>
#include <qclipboard.h>
#include <assert.h>
//
// Endian stuff
//
#ifndef KDE_USE_FINAL
const int endianTest = 1;
#endif
#define Swap16IfLE(s) \
(*(char *)&endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s))
@@ -775,48 +775,49 @@ void KRFBDecoder::sendKeyPressEvent( QKeyEvent *event )
con->write( &KeyEventId, 1 );
con->write( &mask, 1 );
con->write( &padding, 2 );
con->write( &key, 4 );
}
}
void KRFBDecoder::sendKeyReleaseEvent( QKeyEvent *event )
{
int key;
key = toKeySym( event );
if ( key ) {
key = Swap32IfLE( key );
CARD8 mask = false;
CARD16 padding = 0;
con->write( &KeyEventId, 1 );
con->write( &mask, 1 );
con->write( &padding, 2 );
con->write( &key, 4 );
}
}
+
int KRFBDecoder::toKeySym( QKeyEvent *k )
{
int ke = 0;
ke = k->ascii();
// Markus: Crappy hack. I dont know why lower case letters are
// not defined in qkeydefs.h. The key() for e.g. 'l' == 'L'.
// This sucks. :-(
if ( (ke == 'a') || (ke == 'b') || (ke == 'c') || (ke == 'd')
|| (ke == 'e') || (ke == 'f') || (ke == 'g') || (ke == 'h')
|| (ke == 'i') || (ke == 'j') || (ke == 'k') || (ke == 'l')
|| (ke == 'm') || (ke == 'n') || (ke == 'o') || (ke == 'p')
|| (ke == 'q') || (ke == 'r') || (ke == 's') || (ke == 't')
|| (ke == 'u') || (ke == 'v') ||( ke == 'w') || (ke == 'x')
|| (ke == 'y') || (ke == 'z') ) {
ke = k->key();
ke = ke + 0x20;
return ke;
}
// qkeydefs = xkeydefs! :-)
if ( ( k->key() >= 0x0a0 ) && k->key() <= 0x0ff )
return k->key();
diff --git a/noncore/comm/keypebble/krfblogin.cpp b/noncore/comm/keypebble/krfblogin.cpp
index cc3a8fa..0d2a205 100644
--- a/noncore/comm/keypebble/krfblogin.cpp
+++ b/noncore/comm/keypebble/krfblogin.cpp
@@ -31,50 +31,48 @@ typedef unsigned short CARD16;
typedef unsigned long CARD32;
const int endianTest = 1;
// Endian stuff
#define Swap16IfLE(s) \
(*(char *)&endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s))
#define Swap32IfLE(l) \
(*(char *)&endianTest ? ((((l) & 0xff000000) >> 24) | \
(((l) & 0x00ff0000) >> 8) | \
(((l) & 0x0000ff00) << 8) | \
(((l) & 0x000000ff) << 24)) : (l))
KRFBLogin::KRFBLogin( KRFBConnection *con )
: QObject( con, "RFB login manager" )
{
assert( con );
this->con = con;
currentState = AwaitingServerVersion;
connect( this, SIGNAL( error( const QString & ) ),
con, SIGNAL( error( const QString & ) ) );
- connect( this, SIGNAL( passwordRequired( KRFBConnection * ) ),
- con, SIGNAL( passwordRequired( KRFBConnection * ) ) );
qWarning( "Waiting for server version..." );
static QString statusMsg = tr( "Waiting for server version..." );
emit status( statusMsg );
// Kick off the state machine
connect( con, SIGNAL( gotEnoughData() ), SLOT( gotServerVersion() ) );
con->waitForData( ServerVersionLength );
}
KRFBLogin::~KRFBLogin()
{
}
KRFBLogin::State KRFBLogin::state() const
{
return currentState;
}
void KRFBLogin::gotServerVersion()
{
qWarning( "Got server version" );
@@ -162,62 +160,62 @@ void KRFBLogin::gotAuthScheme()
con->waitForData( ChallengeLength );
break;
default:
qWarning( "Unknown authentication scheme, 0x%08lx", scheme );
currentState = Error;
break;
};
}
void KRFBLogin::gotChallenge()
{
disconnect( con, SIGNAL( gotEnoughData() ),
this, SLOT( gotChallenge() ) );
QTimer::singleShot( 0, this, SLOT(getPassword()) );
}
void KRFBLogin::getPassword()
{
// Got data
CARD8 challenge[ ChallengeLength ];
con->read( challenge, ChallengeLength );
// Last chance to enter a password
- if ( con->pass_.isNull() ) {
+ if ( con->options_->password.isNull() ) {
qWarning( "krfblogin needs a password" );
emit passwordRequired( con );
}
- if ( con->pass_.isNull() ) {
+ if ( con->options_->password.isNull() ) {
QString msg = tr( "Error: This server requires a password, but none "
"has been specified.\n" );
emit error( msg );
return;
}
- vncEncryptBytes( (unsigned char *) challenge, con->pass_.data() );
+ vncEncryptBytes( (unsigned char *) challenge, QCString(con->options_->password.latin1()).data() );
con->write( challenge, ChallengeLength );
connect( con, SIGNAL( gotEnoughData() ), SLOT( gotAuthResult() ) );
con->waitForData( AuthResultLength );
}
void KRFBLogin::gotFailureReasonSize()
{
disconnect( con, SIGNAL( gotEnoughData() ), this,
SLOT( gotFailureReasonSize() ) );
}
void KRFBLogin::gotAuthResult()
{
// Got data
disconnect( con, SIGNAL( gotEnoughData() ), this,
SLOT( gotAuthResult() ) );
long result;
con->read( &result, AuthResultLength );
result = Swap32IfLE( result );
qWarning( "Authentication Result is 0x%08lx", result );
diff --git a/noncore/comm/keypebble/krfboptions.cpp b/noncore/comm/keypebble/krfboptions.cpp
deleted file mode 100644
index 8c4320b..0000000
--- a/noncore/comm/keypebble/krfboptions.cpp
+++ b/dev/null
@@ -1,56 +0,0 @@
-#include <qpe/config.h>
-#include <qpe/qpeapplication.h>
-#include "krfboptions.h"
-
-KRFBOptions::KRFBOptions()
-{
- readSettings();
-}
-
-KRFBOptions::~KRFBOptions()
-{
- writeSettings();
-}
-
-void KRFBOptions::readSettings()
-{
- Config config( "keypebble" );
- config.setGroup("Settings");
- hexTile = config.readBoolEntry( "HexTile", 0 );
- corre = config.readBoolEntry( "CORRE", 0 );
- rre = config.readBoolEntry( "RRE", 0 );
- copyrect = config.readBoolEntry( "CopyRect", 1 );
- colors256 = config.readBoolEntry( "Colors256", 0 );
- shared = config.readBoolEntry( "Shared", 0 );
- readOnly = config.readBoolEntry( "ReadOnly", 0 );
- updateRate = config.readNumEntry( "UpdateRate", 50 );
- deIconify = config.readBoolEntry( "DeIconify", 0 );
-}
-
-void KRFBOptions::writeSettings()
-{
- Config config( "keypebble" );
- config.setGroup("Settings");
- config.writeEntry( "HexTile", hexTile );
- config.writeEntry( "CORRE", corre );
- config.writeEntry( "RRE", rre );
- config.writeEntry( "CopyRect", copyrect );
- config.writeEntry( "Colors256", colors256 );
- config.writeEntry( "Shared", shared );
- config.writeEntry( "ReadOnly", readOnly );
- config.writeEntry( "UpdateRate", updateRate );
- config.writeEntry( "DeIconify", deIconify );
-}
-
-int KRFBOptions::encodings()
-{
- // Initially one because we always support raw encoding
- int count = 1;
-
- count += hexTile ? 1 : 0;
- count += corre ? 1 : 0;
- count += rre ? 1 : 0;
- count += copyrect ? 1 : 0;
-
- return count;
-}
diff --git a/noncore/comm/keypebble/krfboptions.h b/noncore/comm/keypebble/krfboptions.h
deleted file mode 100644
index fd2b65c..0000000
--- a/noncore/comm/keypebble/krfboptions.h
+++ b/dev/null
@@ -1,31 +0,0 @@
-// -*- c++ -*-
-
-#ifndef KRFBOPTIONS_H
-#define KRFBOPTIONS_H
-
-class Config;
-
-class KRFBOptions
-{
-public:
- KRFBOptions();
- ~KRFBOptions();
-
- int encodings();
- void readSettings();
- void writeSettings();
-
- bool hexTile;
- bool corre;
- bool rre;
- bool copyrect;
-
- bool colors256;
- bool shared;
- bool readOnly;
- bool deIconify;
-
- int updateRate;
-};
-
-#endif // KRFBOPTIONS_H
diff --git a/noncore/comm/keypebble/krfbserver.cpp b/noncore/comm/keypebble/krfbserver.cpp
new file mode 100644
index 0000000..5775f09
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbserver.cpp
@@ -0,0 +1,39 @@
+#include <qpe/config.h>
+#include <qpe/qpeapplication.h>
+#include "krfbserver.h"
+
+KRFBServer::KRFBServer()
+{
+ QString name;
+ QString hostname;
+ QString password;
+ display=0;
+
+ hexTile=0;
+ corre=0;
+ rre=0;
+ copyrect=1;
+
+ colors256=1;
+ shared=0;
+ readOnly=0;
+ deIconify=0;
+
+ updateRate=0;
+}
+KRFBServer::~KRFBServer()
+{
+}
+
+int KRFBServer::encodings()
+{
+ // Initially one because we always support raw encoding
+ int count = 1;
+
+ count += hexTile ? 1 : 0;
+ count += corre ? 1 : 0;
+ count += rre ? 1 : 0;
+ count += copyrect ? 1 : 0;
+
+ return count;
+}
diff --git a/noncore/comm/keypebble/kvnc.cpp b/noncore/comm/keypebble/kvnc.cpp
index 43cffc5..aa46e2f 100644
--- a/noncore/comm/keypebble/kvnc.cpp
+++ b/noncore/comm/keypebble/kvnc.cpp
@@ -1,190 +1,272 @@
#include <qiconset.h>
#include <qdialog.h>
#include <qpixmap.h>
#include <qdom.h>
#include <qaction.h>
#include <qpe/qpemenubar.h>
#include <qstatusbar.h>
#include <qpopupmenu.h>
#include <qpushbutton.h>
#include <qpe/qpetoolbar.h>
#include <qtimer.h>
#include <qmessagebox.h>
+#include <qspinbox.h>
+#include <qlistbox.h>
+#include <qlineedit.h>
#include <qpe/qpeapplication.h>
#include <qpe/global.h>
+#include <qpe/qpetoolbar.h>
+#include <qpe/resource.h>
+
#include <assert.h>
#include "kvnc.h"
#include "krfbcanvas.h"
-#include "kvncoptionsdlg.h"
#include "krfbconnection.h"
+#include "kvncconndlg.h"
+#include "krfbserver.h"
+
+static int u_id = 1;
+static int get_unique_id()
+{
+ return u_id++;
+}
/* XPM */
static char * menu_xpm[] = {
"12 12 5 1",
" c None",
". c #000000",
"+ c #FFFDAD",
"@ c #FFFF00",
"# c #E5E100",
" ",
" ",
" ......... ",
" .+++++++. ",
" .+@@@@#. ",
" .+@@@#. ",
" .+@@#. ",
" .+@#. ",
" .+#. ",
" .+. ",
" .. ",
" "};
const int StatusTextId = 0;
KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
{
setCaption( tr("VNC Viewer") );
fullscreen = false;
- canvas = new KRFBCanvas( this, "canvas" );
- setCentralWidget( canvas );
+ stack = new QWidgetStack( this );
+ setCentralWidget( stack );
+ bookmarkSelector=new KVNCBookmarkDlg();
+ stack->addWidget(bookmarkSelector,get_unique_id());
+ stack->raiseWidget( bookmarkSelector );
+
+ canvas = new KRFBCanvas( stack, "canvas" );
+ stack->addWidget(canvas,get_unique_id());
+ setCentralWidget( stack );
+
+ connect( bookmarkSelector->bookmarkList, SIGNAL(doubleClicked(QListBoxItem *)),
+ this, SLOT(openConnection(QListBoxItem *)) );
connect( canvas->connection(), SIGNAL(statusChanged(const QString &)),
this, SLOT(statusMessage(const QString &)) );
connect( canvas->connection(), SIGNAL(error(const QString &)),
this, SLOT(error(const QString &)) );
connect( canvas->connection(), SIGNAL(connected()), this, SLOT(connected()) );
connect( canvas->connection(), SIGNAL(loggedIn()), this, SLOT(loggedIn()) );
connect( canvas->connection(), SIGNAL(disconnected()), this, SLOT(disconnected()) );
setupActions();
cornerButton = new QPushButton( this );
cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) );
connect( cornerButton, SIGNAL(pressed()), this, SLOT(showMenu()) );
canvas->setCornerWidget( cornerButton );
- QTimer::singleShot( 0, canvas, SLOT(openConnection()) );
+ stack->raiseWidget( bookmarkSelector );
+
+
+ QPEToolBar *bar = new QPEToolBar( this );
+
+ QAction *n = new QAction( tr( "New Connection" ), Resource::loadPixmap( "new" ),
+ QString::null, 0, this, 0 );
+ connect( n, SIGNAL( activated() ),
+ this, SLOT( newConnection() ) );
+ n->addTo( bar );
+
+ QAction *o = new QAction( tr( "Open Bookmark" ), Resource::loadPixmap( "edit" ),
+ QString::null, 0, this, 0 );
+ connect( o, SIGNAL( activated() ),
+ this, SLOT( openConnection() ) );
+ o->addTo( bar );
+
+ QAction *d = new QAction( tr( "Delete Bookmark" ), Resource::loadPixmap( "trash" ),
+ QString::null, 0, this, 0 );
+ connect( d, SIGNAL( activated() ),
+ this, SLOT( deleteBookmark() ) );
+ d->addTo( bar );
}
KVNC::~KVNC()
{
+
+}
+
+void KVNC::newConnection()
+{
+ curServer=new KRFBServer;
+
+ KVNCConnDlg dlg( curServer,this);
+ dlg.showMaximized();
+ if ( dlg.exec()) {
+ if (!curServer->name.isEmpty())
+ bookmarkSelector->addBookmark(curServer);
+ canvas->openConnection(*curServer);
+ } else
+ curServer=0;
+}
+
+void KVNC::openConnection( QString name)
+{
+ curServer=bookmarkSelector->getServer(name);
+
+ if (curServer) {
+ KVNCConnDlg dlg( curServer,this);
+ dlg.showMaximized();
+
+ if ( dlg.exec() ) {
+ canvas->openConnection(*curServer);
+ bookmarkSelector->writeBookmarks();
+ } else
+ curServer=0;
+ }
+}
+
+void KVNC::openConnection( void )
+{
+ openConnection( bookmarkSelector->selectedBookmark());
}
-void KVNC::openURL( const QUrl &url )
+void KVNC::openConnection( QListBoxItem * item)
{
- canvas->openURL( url );
+ openConnection(item->text());
}
void KVNC::setupActions()
{
cornerMenu = new QPopupMenu( this );
fullScreenAction = new QAction( tr("Full Screen"), QString::null, 0, 0 );
connect( fullScreenAction, SIGNAL(activated()),
this, SLOT( toggleFullScreen() ) );
fullScreenAction->addTo( cornerMenu );
fullScreenAction->setEnabled( false );
- optionsAction = new QAction( tr("Settings"), QString::null, 0, 0 );
- connect( optionsAction, SIGNAL(activated()), this, SLOT( showOptions() ) );
- optionsAction->addTo( cornerMenu );
-
- connectAction = new QAction( tr("Connect..."), QString::null, 0, 0 );
- connect( connectAction, SIGNAL(activated()),
- canvas, SLOT( openConnection() ) );
- connectAction->addTo( cornerMenu );
+ ctlAltDelAction = new QAction( tr("Send Contrl-Alt-Delete"), QString::null, 0, 0 );
+ connect( ctlAltDelAction, SIGNAL(activated()),
+ canvas, SLOT( sendCtlAltDel() ) );
+ ctlAltDelAction->addTo( cornerMenu );
+ ctlAltDelAction->setEnabled( false );
disconnectAction = new QAction( tr("Disconnect"), QString::null, 0, 0 );
connect( disconnectAction, SIGNAL(activated()),
this, SLOT( closeConnection() ) );
disconnectAction->addTo( cornerMenu );
disconnectAction->setEnabled( false );
}
void KVNC::toggleFullScreen()
{
- if ( fullscreen ) {
- canvas->releaseKeyboard();
- canvas->reparent( this, 0, QPoint(0,0), false );
- canvas->setFrameStyle( QFrame::Panel | QFrame::Sunken );
- setCentralWidget( canvas );
- canvas->show();
- fullScreenAction->setText( tr("Full Screen") );
- } else {
- canvas->setFrameStyle( QFrame::NoFrame );
- canvas->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop,
- QPoint(0,0),false);
- canvas->resize(qApp->desktop()->width(), qApp->desktop()->height());
- canvas->raise();
- canvas->setFocus();
- canvas->grabKeyboard();
- canvas->show();
-
- fullScreenAction->setText( tr("Stop Full Screen") );
- }
-
+ if ( fullscreen ) {
+ canvas->releaseKeyboard();
+ canvas->reparent( stack, 0, QPoint(0,0), false );
+ canvas->setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ setCentralWidget( stack );
+ stack->addWidget(canvas,get_unique_id());
+ stack->raiseWidget(canvas);
+ canvas->show();
+ stack->show();
+ fullScreenAction->setText( tr("Full Screen") );
+ } else {
+ canvas->setFrameStyle( QFrame::NoFrame );
+ stack->removeWidget(canvas);
+ canvas->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop,
+ QPoint(0,0),false);
+ canvas->resize(qApp->desktop()->width(), qApp->desktop()->height());
+ canvas->raise();
+ canvas->setFocus();
+ canvas->grabKeyboard();
+ canvas->show();
+
+ fullScreenAction->setText( tr("Stop Full Screen") );
+ }
+
+
fullscreen = !fullscreen;
}
void KVNC::closeConnection()
{
if ( fullscreen )
toggleFullScreen();
canvas->closeConnection();
}
void KVNC::showMenu()
{
QPoint pt = mapToGlobal(cornerButton->pos());
QSize s = cornerMenu->sizeHint();
pt.ry() -= s.height();
pt.rx() -= s.width();
cornerMenu->popup( pt );
}
void KVNC::connected()
{
static QString msg = tr( "Connected to remote host" );
statusMessage( msg );
- connectAction->setEnabled( false );
+ ctlAltDelAction->setEnabled(true);
disconnectAction->setEnabled( true );
fullScreenAction->setEnabled( true );
+ stack->raiseWidget(canvas);
}
void KVNC::loggedIn()
{
static QString msg = tr( "Logged in to remote host" );
statusMessage( msg );
}
void KVNC::disconnected()
{
+
+ if ( fullscreen )
+ toggleFullScreen();
static QString msg = tr( "Connection closed" );
statusMessage( msg );
- connectAction->setEnabled( true );
+ ctlAltDelAction->setEnabled(false);
disconnectAction->setEnabled( false );
fullScreenAction->setEnabled( false );
+ stack->raiseWidget(bookmarkSelector);
}
void KVNC::statusMessage( const QString &m )
{
Global::statusMessage( m );
}
void KVNC::error( const QString &msg )
{
statusMessage( msg );
QMessageBox::warning( this, tr("VNC Viewer"), msg );
}
-
-void KVNC::showOptions()
+void KVNC::deleteBookmark(void)
{
- KVNCOptionsDlg *wdg = new KVNCOptionsDlg( canvas->connection()->options(), this );
- wdg->showMaximized();
- wdg->exec();
- delete wdg;
+ bookmarkSelector->deleteBookmark(bookmarkSelector->selectedBookmark());
}
-
diff --git a/noncore/comm/keypebble/kvnc.h b/noncore/comm/keypebble/kvnc.h
index 92666c5..6e0a385 100644
--- a/noncore/comm/keypebble/kvnc.h
+++ b/noncore/comm/keypebble/kvnc.h
@@ -1,56 +1,66 @@
// -*- c++ -*-
#ifndef KVNC_H
#define KVNC_H
#include <qmainwindow.h>
#include <qurl.h>
+#include <qwidgetstack.h>
+#include "kvncbookmarkdlg.h"
class QAction;
class KRFBCanvas;
class QPushButton;
class QToolBar;
/**
* Top level window for Keystone.
*
* @author Richard Moore, rich@kde.org
* @version $Id$
*/
class KVNC : public QMainWindow
{
Q_OBJECT
public:
KVNC( const char *name = 0 );
~KVNC();
public slots:
+ void newConnection();
+ void deleteBookmark();
+ void openConnection(QListBoxItem *);
+ void openConnection(QString);
+ void openConnection(void);
void toggleFullScreen();
- void openURL( const QUrl & );
void closeConnection();
- void showOptions();
protected:
void setupActions();
protected slots:
void showMenu();
void connected();
void loggedIn();
void disconnected();
void statusMessage( const QString & );
void error( const QString & );
private:
bool fullscreen;
KRFBCanvas *canvas;
QPopupMenu *cornerMenu;
QPushButton *cornerButton;
QAction *fullScreenAction;
QAction *optionsAction;
QAction *disconnectAction;
+ QAction *ctlAltDelAction;;
QAction *connectAction;
+
+ KVNCBookmarkDlg * bookmarkSelector;
+ QWidgetStack * stack;
+ KRFBServer * curServer;
};
#endif // KVNC_H
diff --git a/noncore/comm/keypebble/kvncbookmarkdlg.cpp b/noncore/comm/keypebble/kvncbookmarkdlg.cpp
new file mode 100644
index 0000000..1f97d13
--- a/dev/null
+++ b/noncore/comm/keypebble/kvncbookmarkdlg.cpp
@@ -0,0 +1,220 @@
+#include <qframe.h>
+#include <qvbox.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qfile.h>
+#include <qdir.h>
+#include <qstring.h>
+#include <qapplication.h>
+#include <qlineedit.h>
+#include <qtextstream.h>
+#include <qpushbutton.h>
+#include <qlistbox.h>
+#include <qpe/config.h>
+#include <qpe/global.h>
+#include "krfbserver.h"
+#include "kvncbookmarkdlg.h"
+
+KVNCBookmarkDlg::KVNCBookmarkDlg( QWidget * parent=0, const char * name=0, WFlags f=0 )
+
+: KVNCBookmarkDlgBase( parent, name,f)
+{
+ readBookmarks();
+ refresh();
+
+}
+
+KVNCBookmarkDlg::~KVNCBookmarkDlg()
+{
+}
+
+void KVNCBookmarkDlg::addBookmark(KRFBServer * server)
+{
+ if (server) {
+ servers.append(server);
+ bookmarkList->insertItem(server->name);
+ writeBookmarks();
+ refresh();
+ }
+}
+
+void KVNCBookmarkDlg::deleteBookmark(QString name)
+{
+ KRFBServer * server=0;
+ for ( server=servers.first(); server != 0; server=servers.next() ) {
+ if (server->name==name) {
+ servers.remove(servers.at());
+ writeBookmarks();
+ refresh();
+ return;
+ }
+ }
+}
+KRFBServer *KVNCBookmarkDlg::getServer(QString name)
+{
+ KRFBServer * server=0;
+ for ( server=servers.first(); server != 0; server=servers.next() ) {
+ if (server->name==name)
+
+ return server;
+ }
+ return 0;
+}
+
+
+/*
+ Note that the degree of protection offered by the encryption here is
+ only sufficient to avoid the most casual observation of the configuration
+ files. People with access to the files can write down the contents and
+ decrypt it using this source code.
+
+ Conceivably, and at some burden to the user, this encryption could
+ be improved.
+*/
+QString KVNCBookmarkDlg::encipher(const QString& plain)
+{
+ // mainly, we make it long
+ QString cipher;
+ int mix=28730492;
+ for (int i=0; i<(int)plain.length(); i++) {
+ int u = plain[i].unicode();
+ int c = u ^ mix;
+ QString x = QString::number(c,36);
+ cipher.append(QChar('a'+x.length()));
+ cipher.append(x);
+ mix *= u;
+ }
+ return cipher;
+}
+
+QString KVNCBookmarkDlg::decipher(const QString& cipher)
+{
+ QString plain;
+ int mix=28730492;
+ for (int i=0; i<(int)cipher.length();) {
+ int l = cipher[i].unicode()-'a';
+ QString x = cipher.mid(i+1,l); i+=l+1;
+ int u = x.toInt(0,36) ^ mix;
+ plain.append(QChar(u));
+ mix *= u;
+ }
+ return plain;
+}
+
+void KVNCBookmarkDlg::readBookmarks(void)
+{
+ QFile f(QDir::homeDirPath() + QString("/Applications/keypebble/bookmarks"));
+
+ QStringList entry;
+ QString key, val;
+ KRFBServer * server=0;
+
+ if ( f.open(IO_ReadOnly) ) {
+ QTextStream t( &f );
+ QString s;
+ int n = 1;
+ while ( !t.eof() ) {
+ s = t.readLine();
+
+
+ entry=QStringList::split('=',s);
+ key=entry[0].stripWhiteSpace().lower();
+ val=entry[1].stripWhiteSpace();
+
+ if (key=="server") {
+
+ if (server){
+ servers.append(server);
+ server=0;
+ }
+ server = new KRFBServer();
+
+ if (!server)
+ return;
+ server->name=val;
+
+ }
+ else if (key=="hostname")
+ server->hostname=val;
+ else if (key=="password")
+ server->password=decipher(val);
+ else if (key=="display")
+ server->display=val.toInt();
+ else if (key=="hextile")
+ server->hexTile=val.toInt();
+ else if (key=="corre")
+ server->corre=val.toInt();
+ else if (key=="rre")
+ server->rre=val.toInt();
+ else if (key=="copyrect")
+ server->copyrect=val.toInt();
+ else if (key=="colors256")
+ server->colors256=val.toInt();
+ else if (key=="shared")
+ server->shared=val.toInt();
+ else if (key=="readonly")
+ server->readOnly=val.toInt();
+ else if (key=="deiconify")
+ server->deIconify=val.toInt();
+ else if (key=="updaterate")
+ server->updateRate=val.toInt();
+
+ }
+ if (server){
+ servers.append(server);
+ server=0;
+ }
+ f.close();
+ }
+}
+
+void KVNCBookmarkDlg::writeBookmarks(void)
+{
+ QString filename=Global::applicationFileName("keypebble","bookmarks");
+
+ QFile f(filename);
+
+ QString key, val;
+ KRFBServer * server=0;
+
+ if ( f.open(IO_ReadWrite) ) {
+ QTextStream t( &f );
+ QString s;
+ int n = 1;
+ KRFBServer *server;
+
+ for ( server=servers.first(); server != 0; server=servers.next() ) {
+ qDebug(server->name);
+ t << "server=" << server->name << '\n';
+ t << "\thostname=" << server->hostname << '\n';
+ t << "\tpassword=" << encipher(server->password )<< '\n';
+ t << "\tdisplay=" << server->display << '\n';
+ t << "\thextile=" << server->hexTile << '\n';
+ t << "\tcorre=" << server->corre << '\n';
+ t << "\trre=" << server->rre << '\n';
+ t << "\tcopyrect=" << server->copyrect << '\n';
+ t << "\tshared=" << server->shared << '\n';
+ t << "\treadonly=" << server->readOnly << '\n';
+ t << "\tdeiconify=" << server->deIconify << '\n';
+ t << "\tupdaterate=" << server->updateRate << '\n';
+
+ }
+ f.close();
+ }
+}
+void KVNCBookmarkDlg::refresh(void)
+{
+ bookmarkList->clear();
+ KRFBServer * server=0;
+ for ( server=servers.first(); server != 0; server=servers.next() ) {
+ bookmarkList->insertItem(server->name);
+ }
+}
+
+QString KVNCBookmarkDlg::selectedBookmark()
+{
+ return bookmarkList->currentText();
+}
diff --git a/noncore/comm/keypebble/kvncconndlg.cpp b/noncore/comm/keypebble/kvncconndlg.cpp
new file mode 100644
index 0000000..6873feb
--- a/dev/null
+++ b/noncore/comm/keypebble/kvncconndlg.cpp
@@ -0,0 +1,75 @@
+#include <qframe.h>
+#include <qvbox.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qapplication.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include "krfbserver.h"
+
+#include "kvncconndlg.h"
+
+KVNCConnDlg::KVNCConnDlg( KRFBServer *options,
+ QWidget *parent, char *name, bool modal )
+: KVNCConnDlgBase( parent, name, modal )
+{
+ this->options=options;
+ tmpOptions=*options;
+
+ serverHostname->setText(options->hostname);
+ serverDisplay->setValue(options->display);
+ serverPassword->setText(options->password);
+ serverBookmark->setText(options->name);
+
+ hex->setChecked( options->hexTile );
+ corre->setChecked( options->corre );
+ rre->setChecked( options->rre );
+ copyRect->setChecked( options->copyrect );
+
+ // TODO
+ hex->setEnabled( false );
+ corre->setEnabled( false );
+ rre->setEnabled( false );
+ // /TODO
+
+ deIconify->setChecked( options->deIconify );
+ bit->setChecked( options->colors256 );
+ shared->setChecked( options->shared );
+ timeBox->setValue( options->updateRate );
+
+
+}
+
+KVNCConnDlg::~KVNCConnDlg()
+{
+}
+
+void KVNCConnDlg::accept()
+{
+ save();
+ QDialog::accept();
+}
+
+void KVNCConnDlg::save()
+{
+ tmpOptions.hexTile = hex->isChecked();
+ tmpOptions.corre = corre->isChecked();
+ tmpOptions.rre = rre->isChecked();
+ tmpOptions.copyrect = copyRect->isChecked();
+ tmpOptions.deIconify = deIconify->isChecked();
+ tmpOptions.colors256 = bit->isChecked();
+ tmpOptions.shared = shared->isChecked();
+ tmpOptions.hostname = serverHostname->text();
+ tmpOptions.password = serverPassword->text();
+ tmpOptions.display = serverDisplay->value();
+ tmpOptions.name = serverBookmark->text();
+
+ if (!serverBookmark->text().isEmpty()) {
+ if ( options) {
+ *options=tmpOptions;
+ }
+ }
+}
diff --git a/noncore/comm/keypebble/kvncconnectdlg.cpp b/noncore/comm/keypebble/kvncconnectdlg.cpp
deleted file mode 100644
index 467cebf..0000000
--- a/noncore/comm/keypebble/kvncconnectdlg.cpp
+++ b/dev/null
@@ -1,79 +0,0 @@
-#include <qstring.h>
-#include <qlayout.h>
-#include <qframe.h>
-#include <qspinbox.h>
-#include <qcombobox.h>
-#include <qlabel.h>
-#include <qfont.h>
-
-#include <assert.h>
-
-#include "krfbconnection.h"
-#include "kvncoptionsdlg.h"
-#include "kvncconnectdlg.h"
-
-
-KVNCConnectDlg::KVNCConnectDlg( KRFBConnection *con,
- QWidget *parent, const char *name )
- : QDialog( parent, name, true )
-{
- setCaption( tr("Connect to VNC server") );
- assert( con );
- this->con = con;
-
- QGridLayout *inner = new QGridLayout( this, 3, 2, 6 );
-
- QLabel *label = new QLabel( tr("Host Name:"),
- this , "hostLabel");
- hostNameCombo = new QComboBox( true, this );
- hostNameCombo->setInsertionPolicy( QComboBox::AtTop );
- hostNameCombo->setMaxCount( 10 );
- hostNameCombo->insertItem( "localhost" );
- hostNameCombo->setFocus();
-
- inner->addWidget( label, 0, 0 );
- inner->addWidget( hostNameCombo, 0, 1 );
-
- label = new QLabel( tr("Display Number:"), this, "displayNumber" );
- displayNumberEdit = new QSpinBox( this );
-
- inner->addWidget( label, 1, 0 );
- inner->addWidget( displayNumberEdit, 1, 1 );
-
- // if ( viewer->display() != -1 ) {
- // displayNumberEdit->setValue( viewer->display() );
- displayNumberEdit->setValue( 1 );
- // }
-
- label = new QLabel( tr("Password:"), this );
- inner->addWidget( label, 2, 0 );
-
- passwordEdit = new QLineEdit( this );
- passwordEdit->setEchoMode( QLineEdit::Password );
- inner->addWidget( passwordEdit, 2, 1 );
-
- inner->setColStretch( 0, 0 );
- inner->setColStretch( 1, 15 );
-}
-
-
-void KVNCConnectDlg::accept()
-{
- int dis;
- // viewer->setHost(hostNameCombo->currentText());
- QString temp = displayNumberEdit->text();
- if(temp.isEmpty())
- dis = -1;
- else
- dis = temp.toUInt();
- // viewer->setDisplay(dis);
- QDialog::accept();
-}
-
-void KVNCConnectDlg::options()
-{
- KVNCOptionsDlg *wdg = new KVNCOptionsDlg( con->options(), this );
- wdg->exec();
- delete wdg;
-}
-
diff --git a/noncore/comm/keypebble/kvncconnectdlg.h b/noncore/comm/keypebble/kvncconnectdlg.h
deleted file mode 100644
index cf34aab..0000000
--- a/noncore/comm/keypebble/kvncconnectdlg.h
+++ b/dev/null
@@ -1,39 +0,0 @@
-// -*- c++ -*-
-
-#ifndef KVNCCONNECTDLG_H
-#define KVNCCONNECTDLG_H
-
-#include <qdialog.h>
-#include <qspinbox.h>
-#include <qcombobox.h>
-#include <qlineedit.h>
-#include <qurl.h>
-
-class KRFBConnection;
-
-class KVNCConnectDlg : public QDialog
-{
- Q_OBJECT
-
-public:
- KVNCConnectDlg( KRFBConnection *con,
- QWidget *parent = 0, const char *name = 0 );
-
- QString hostname() { return hostNameCombo->currentText(); };
- int display() { return displayNumberEdit->value(); };
- QString password() const { return passwordEdit->text(); }
-
-protected:
- void accept();
-
-protected slots:
- void options();
-
-private:
- QComboBox *hostNameCombo;
- QSpinBox *displayNumberEdit;
- QLineEdit *passwordEdit;
- KRFBConnection *con;
-};
-
-#endif // KVNCCONNECTDLG_H
diff --git a/noncore/comm/keypebble/kvncoptionsdlg.cpp b/noncore/comm/keypebble/kvncoptionsdlg.cpp
deleted file mode 100644
index 9d61c7b..0000000
--- a/noncore/comm/keypebble/kvncoptionsdlg.cpp
+++ b/dev/null
@@ -1,54 +0,0 @@
-#include <qframe.h>
-#include <qvbox.h>
-#include <qcheckbox.h>
-#include <qspinbox.h>
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qwhatsthis.h>
-#include <qapplication.h>
-#include "krfboptions.h"
-
-#include "kvncoptionsdlg.h"
-
-KVNCOptionsDlg::KVNCOptionsDlg( KRFBOptions *options,
- QWidget *parent, char *name, bool modal )
- : VncOptionsBase( parent, name, modal )
-{
- this->options = options;
-
- hex->setChecked( options->hexTile );
- corre->setChecked( options->corre );
- rre->setChecked( options->rre );
- copyRect->setChecked( options->copyrect );
-
- // TODO
- hex->setEnabled( false );
- corre->setEnabled( false );
- rre->setEnabled( false );
- // /TODO
-
- deIconify->setChecked( options->deIconify );
- bit->setChecked( options->colors256 );
- shared->setChecked( options->shared );
- timeBox->setValue( options->updateRate );
-}
-
-KVNCOptionsDlg::~KVNCOptionsDlg()
-{
-}
-
-void KVNCOptionsDlg::accept()
-{
- options->hexTile = hex->isChecked();
- options->corre = corre->isChecked();
- options->rre = rre->isChecked();
- options->copyrect = copyRect->isChecked();
- options->deIconify = deIconify->isChecked();
- options->colors256 = bit->isChecked();
- options->shared = shared->isChecked();
- options->updateRate = timeBox->value();
- options->writeSettings();
-
- QDialog::accept();
-}
-
diff --git a/noncore/comm/keypebble/kvncoptionsdlg.h b/noncore/comm/keypebble/kvncoptionsdlg.h
deleted file mode 100644
index a166490..0000000
--- a/noncore/comm/keypebble/kvncoptionsdlg.h
+++ b/dev/null
@@ -1,30 +0,0 @@
-// -*- c++ -*-
-
-#ifndef KVNCOPTIONSDIALOG_H
-#define KVNCOPTIONSDIALOG_H
-
-#include "vncoptionsbase.h"
-
-class KRFBOptions;
-
-class KVNCOptionsDlg : public VncOptionsBase
-{
-Q_OBJECT
-
-public:
- KVNCOptionsDlg( KRFBOptions *options,
- QWidget *parent = 0, char *name = 0, bool modal = true );
- ~KVNCOptionsDlg();
-
-protected:
- void accept();
-
-private:
- KRFBOptions *options;
-};
-
-#endif // KVNCOPTIONSDIALOG_H
-
-
-
-
diff --git a/noncore/comm/keypebble/main.cpp b/noncore/comm/keypebble/main.cpp
index ee3cd79..bc7782c 100644
--- a/noncore/comm/keypebble/main.cpp
+++ b/noncore/comm/keypebble/main.cpp
@@ -1,17 +1,15 @@
#include <qurl.h>
#include <qpe/qpeapplication.h>
#include "kvnc.h"
int main( int argc, char **argv )
{
QPEApplication app( argc, argv );
KVNC *view = new KVNC( "Keypebble" );
app.showMainWidget( view );
- if ( argc > 1 )
- view->openURL( QUrl(argv[1]) );
-
return app.exec();
}
+