summaryrefslogtreecommitdiff
authortreke <treke>2002-09-04 17:53:12 (UTC)
committer treke <treke>2002-09-04 17:53:12 (UTC)
commit605d854057eb470a1d75210193b82eb0b1ad6b53 (patch) (side-by-side diff)
treec411b661d5211fefbd83a7c8f63eef8c9cca72ee
parentc35a5eabd8f5ed18e4216f6c88ee6794bacfb491 (diff)
downloadopie-605d854057eb470a1d75210193b82eb0b1ad6b53.zip
opie-605d854057eb470a1d75210193b82eb0b1ad6b53.tar.gz
opie-605d854057eb470a1d75210193b82eb0b1ad6b53.tar.bz2
Major modifications to the User Interface
1) Bookmark support added, all options are stored on a per bookmark basis 2) 16 Bit color is now a supported bit depth for the server
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/comm/keypebble/keypebble.pro16
-rw-r--r--noncore/comm/keypebble/krfbbuffer.cpp31
-rw-r--r--noncore/comm/keypebble/krfbcanvas.cpp39
-rw-r--r--noncore/comm/keypebble/krfbcanvas.h6
-rw-r--r--noncore/comm/keypebble/krfbconnection.cpp20
-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.cpp132
-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, 537 insertions, 378 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
@@ -7,11 +7,12 @@ HEADERS = d3des.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 \
@@ -20,12 +21,13 @@ SOURCES = d3des.c \
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
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
@@ -150,6 +150,37 @@ void KRFBBuffer::drawRawRectChunk( void *data,
*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 ) );
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,10 +1,10 @@
-#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>
@@ -18,12 +18,11 @@ 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();
@@ -33,16 +32,17 @@ 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_ ) {
@@ -52,10 +52,8 @@ void KRFBCanvas::openURL( const QUrl &url )
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()
@@ -69,10 +67,6 @@ void KRFBCanvas::closeConnection()
update();
}
-void KRFBCanvas::passwordRequired( KRFBConnection *con )
-{
- con->setPassword( password.latin1() );
-}
void KRFBCanvas::bell()
{
@@ -167,3 +161,12 @@ void KRFBCanvas::clipboardChanged()
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
@@ -7,6 +7,7 @@
#include <qurl.h>
class KRFBConnection;
+class KRFBServer;
/**
* Displays data from an KRFBDecoder, and sends events to the
@@ -23,13 +24,14 @@ public:
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 * );
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
@@ -5,7 +5,7 @@
#include "krfbconnection.h"
#include "krfblogin.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbdecoder.h"
#include "krfbbuffer.h"
@@ -16,7 +16,7 @@ KRFBConnection::KRFBConnection( QObject *parent )
currentState_ = Disconnected;
sock = 0;
minData_ = 0;
- options_ = new KRFBOptions();
+ options_ = new KRFBServer();
updater = 0;
decoder_ = 0;
buffer_ = 0;
@@ -30,13 +30,12 @@ KRFBConnection::~KRFBConnection()
delete options_;
}
-void KRFBConnection::connectTo( const QCString &host, int display )
+void KRFBConnection::connectTo( KRFBServer server)
{
- if ( currentState_ != Disconnected );
+ if ( currentState_ != Disconnected )
disconnect();
- this->host_= host;
- this->display_ = display;
+ (*options_)=server;
sock = new QSocket( this, "rfbSocket" );
CHECK_PTR( sock );
@@ -48,7 +47,7 @@ void KRFBConnection::connectTo( const QCString &host, int display )
qWarning( "Connecting..." );
currentState_ = Connecting;
- sock->connectToHost( host_, portBase_ + display_ );
+ sock->connectToHost( options_->hostname.latin1(), portBase_ + options_->display );
}
void KRFBConnection::disconnect()
@@ -70,7 +69,6 @@ void KRFBConnection::disconnect()
void KRFBConnection::disconnectDone()
{
- qWarning( "KRFBConnection disconnected" );
currentState_ = Disconnected;
delete sock;
sock = 0;
@@ -180,7 +178,6 @@ void KRFBConnection::waitForData( unsigned int sz )
}
else {
// qWarning( "Waiting for %u bytes", sz );
-
minData_ = sz;
connect( sock, SIGNAL( readyRead() ), SLOT( gotMoreData() ) );
}
@@ -211,11 +208,6 @@ int KRFBConnection::portBase() const
return portBase_;
}
-void KRFBConnection::setPassword( const QCString &pass )
-{
- this->pass_ = pass;
-}
-
void KRFBConnection::updateTimer()
{
decoder_->sendUpdateRequest( true );
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
@@ -6,11 +6,12 @@
#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;
@@ -45,7 +46,7 @@ public:
State state() const;
//* Get the options for this connection
- KRFBOptions *options() const { return options_; };
+ KRFBServer *options() const { return options_; };
KRFBBuffer *buffer() const { return buffer_; };
@@ -57,20 +58,17 @@ public:
//* 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();
@@ -133,17 +131,14 @@ private:
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_;
};
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,5 +1,5 @@
#include "krfbconnection.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbserverinfo.h"
#include "krfbdecoder.h"
#include "krfbbuffer.h"
@@ -796,6 +796,7 @@ void KRFBDecoder::sendKeyReleaseEvent( QKeyEvent *event )
}
}
+
int KRFBDecoder::toKeySym( QKeyEvent *k )
{
int ke = 0;
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
@@ -52,8 +52,6 @@ KRFBLogin::KRFBLogin( KRFBConnection *con )
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..." );
@@ -183,12 +181,12 @@ void KRFBLogin::getPassword()
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" );
@@ -196,7 +194,7 @@ void KRFBLogin::getPassword()
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() ) );
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
@@ -10,14 +10,27 @@
#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 */
@@ -48,9 +61,19 @@ 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 &)),
@@ -66,16 +89,73 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
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::openURL( const QUrl &url )
+void KVNC::newConnection()
{
- canvas->openURL( url );
+ 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::openConnection( QListBoxItem * item)
+{
+ openConnection(item->text());
}
void KVNC::setupActions()
@@ -88,14 +168,11 @@ void KVNC::setupActions()
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()),
@@ -108,13 +185,17 @@ void KVNC::toggleFullScreen()
{
if ( fullscreen ) {
canvas->releaseKeyboard();
- canvas->reparent( this, 0, QPoint(0,0), false );
+ canvas->reparent( stack, 0, QPoint(0,0), false );
canvas->setFrameStyle( QFrame::Panel | QFrame::Sunken );
- setCentralWidget( canvas );
+ 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());
@@ -126,6 +207,7 @@ void KVNC::toggleFullScreen()
fullScreenAction->setText( tr("Stop Full Screen") );
}
+
fullscreen = !fullscreen;
}
@@ -149,9 +231,10 @@ 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()
@@ -162,11 +245,15 @@ void KVNC::loggedIn()
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 )
@@ -179,12 +266,7 @@ 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
@@ -5,6 +5,8 @@
#include <qmainwindow.h>
#include <qurl.h>
+#include <qwidgetstack.h>
+#include "kvncbookmarkdlg.h"
class QAction;
class KRFBCanvas;
@@ -25,10 +27,13 @@ public:
~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();
@@ -50,7 +55,12 @@ private:
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
@@ -10,8 +10,6 @@ int main( int argc, char **argv )
KVNC *view = new KVNC( "Keypebble" );
app.showMainWidget( view );
- if ( argc > 1 )
- view->openURL( QUrl(argv[1]) );
-
return app.exec();
}
+