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
@@ -9,7 +9,8 @@ HEADERS = d3des.h \
krfblogin.h \
- krfboptions.h \
+ krfbserver.h \
krfbserverinfo.h \
kvnc.h \
- kvncconnectdlg.h \
- kvncoptionsdlg.h \
+ kvncconndlg.h \
+ kvncbookmarkdlg.h \
+ version.h \
vncauth.h
@@ -22,8 +23,9 @@ SOURCES = d3des.c \
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
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
@@ -152,2 +152,33 @@ void KRFBBuffer::drawRawRectChunk( void *data,
}
+ } 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 );
+ }
+ }
}
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,5 +1,4 @@
-#include "kvncconnectdlg.h"
#include "krfbconnection.h"
#include "krfbcanvas.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbbuffer.h"
@@ -7,2 +6,3 @@
#include <qpe/config.h>
+#include <qpe/qpeapplication.h>
@@ -20,4 +20,2 @@ KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name )
connection_ = new KRFBConnection();
- connect( connection_, SIGNAL( passwordRequired( KRFBConnection * ) ),
- this, SLOT( passwordRequired( KRFBConnection * ) ) );
connect( connection_, SIGNAL( loggedIn() ),
@@ -26,2 +24,3 @@ KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name )
loggedIn_ = false;
+ QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold);
@@ -35,12 +34,13 @@ 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 )
@@ -54,6 +54,4 @@ void KRFBCanvas::openURL( const QUrl &url )
int display = url.port();
- if ( url.hasPassword() )
- connection_->setPassword( url.password().latin1() );
- connection_->connectTo( host, display );
+// connection_->connectTo( host, display );
}
@@ -71,6 +69,2 @@ void KRFBCanvas::closeConnection()
-void KRFBCanvas::passwordRequired( KRFBConnection *con )
-{
- con->setPassword( password.latin1() );
-}
@@ -169 +163,10 @@ void KRFBCanvas::clipboardChanged()
}
+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
@@ -9,2 +9,3 @@
class KRFBConnection;
+class KRFBServer;
@@ -25,6 +26,6 @@ public:
public slots:
- void openConnection();
+
+ void openConnection (KRFBServer);
void openURL( const QUrl & );
void closeConnection();
- void passwordRequired( KRFBConnection * );
@@ -32,2 +33,3 @@ public slots:
void bell();
+ void sendCtlAltDel(void);
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
@@ -7,3 +7,3 @@
#include "krfblogin.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbdecoder.h"
@@ -18,3 +18,3 @@ KRFBConnection::KRFBConnection( QObject *parent )
minData_ = 0;
- options_ = new KRFBOptions();
+ options_ = new KRFBServer();
updater = 0;
@@ -32,9 +32,8 @@ KRFBConnection::~KRFBConnection()
-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;
@@ -50,3 +49,3 @@ void KRFBConnection::connectTo( const QCString &host, int display )
currentState_ = Connecting;
- sock->connectToHost( host_, portBase_ + display_ );
+ sock->connectToHost( options_->hostname.latin1(), portBase_ + options_->display );
}
@@ -72,3 +71,2 @@ void KRFBConnection::disconnectDone()
{
- qWarning( "KRFBConnection disconnected" );
currentState_ = Disconnected;
@@ -182,3 +180,2 @@ void KRFBConnection::waitForData( unsigned int sz )
// qWarning( "Waiting for %u bytes", sz );
-
minData_ = sz;
@@ -213,7 +210,2 @@ int KRFBConnection::portBase() const
-void KRFBConnection::setPassword( const QCString &pass )
-{
- this->pass_ = pass;
-}
-
void KRFBConnection::updateTimer()
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
@@ -8,2 +8,3 @@
#include <qcstring.h>
+#include "krfbserver.h"
#include <qurl.h>
@@ -12,3 +13,3 @@ class KRFBLogin;
class KRBUpdateHandler;
-class KRFBOptions;
+class KRFBServer;
class QSocket;
@@ -47,3 +48,3 @@ public:
//* Get the options for this connection
- KRFBOptions *options() const { return options_; };
+ KRFBServer *options() const { return options_; };
@@ -59,7 +60,4 @@ public:
- //* 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);
@@ -69,6 +67,6 @@ public:
//* 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; };
@@ -135,6 +133,3 @@ private:
private:
- QCString host_;
int portBase_;
- int display_;
- QCString pass_;
QSocket *sock;
@@ -145,3 +140,3 @@ private:
KRFBDecoder *decoder_;
- KRFBOptions *options_;
+ KRFBServer *options_;
KRFBBuffer *buffer_;
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,3 +1,3 @@
#include "krfbconnection.h"
-#include "krfboptions.h"
+#include "krfbserver.h"
#include "krfbserverinfo.h"
@@ -798,2 +798,3 @@ void KRFBDecoder::sendKeyReleaseEvent( QKeyEvent *event )
+
int KRFBDecoder::toKeySym( QKeyEvent *k )
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
@@ -54,4 +54,2 @@ KRFBLogin::KRFBLogin( KRFBConnection *con )
- connect( this, SIGNAL( passwordRequired( KRFBConnection * ) ),
- con, SIGNAL( passwordRequired( KRFBConnection * ) ) );
@@ -185,3 +183,3 @@ void KRFBLogin::getPassword()
// Last chance to enter a password
- if ( con->pass_.isNull() ) {
+ if ( con->options_->password.isNull() ) {
qWarning( "krfblogin needs a password" );
@@ -190,3 +188,3 @@ void KRFBLogin::getPassword()
- if ( con->pass_.isNull() ) {
+ if ( con->options_->password.isNull() ) {
QString msg = tr( "Error: This server requires a password, but none "
@@ -198,3 +196,3 @@ void KRFBLogin::getPassword()
- vncEncryptBytes( (unsigned char *) challenge, con->pass_.data() );
+ vncEncryptBytes( (unsigned char *) challenge, QCString(con->options_->password.latin1()).data() );
con->write( challenge, ChallengeLength );
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
@@ -12,4 +12,10 @@
#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>
@@ -18,4 +24,11 @@
#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++;
+}
@@ -50,5 +63,15 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
- 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 &)),
@@ -68,3 +91,24 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
- 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 );
}
@@ -73,7 +117,43 @@ 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());
}
@@ -90,10 +170,7 @@ void KVNC::setupActions()
- 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 );
@@ -110,6 +187,9 @@ void KVNC::toggleFullScreen()
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") );
@@ -117,2 +197,3 @@ void KVNC::toggleFullScreen()
canvas->setFrameStyle( QFrame::NoFrame );
+ stack->removeWidget(canvas);
canvas->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop,
@@ -128,2 +209,3 @@ void KVNC::toggleFullScreen()
+
fullscreen = !fullscreen;
@@ -151,5 +233,6 @@ void KVNC::connected()
statusMessage( msg );
- connectAction->setEnabled( false );
+ ctlAltDelAction->setEnabled(true);
disconnectAction->setEnabled( true );
fullScreenAction->setEnabled( true );
+ stack->raiseWidget(canvas);
}
@@ -164,7 +247,11 @@ 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);
}
@@ -181,10 +268,5 @@ void KVNC::error( const QString &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
@@ -7,2 +7,4 @@
#include <qurl.h>
+#include <qwidgetstack.h>
+#include "kvncbookmarkdlg.h"
@@ -27,6 +29,9 @@ public:
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();
@@ -52,3 +57,8 @@ private:
QAction *disconnectAction;
+ QAction *ctlAltDelAction;;
QAction *connectAction;
+
+ KVNCBookmarkDlg * bookmarkSelector;
+ QWidgetStack * stack;
+ KRFBServer * curServer;
};
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
@@ -12,6 +12,4 @@ int main( int argc, char **argv )
- if ( argc > 1 )
- view->openURL( QUrl(argv[1]) );
-
return app.exec();
}
+