-
#include "mainwindow.h"
#include "vncview.h"
+#include <QtMaemo5>
#include <QX11Info>
#include <X11/Xlib.h>
#include <iostream>
MainWindow::MainWindow(QString url, int quality):
- QScrollArea(0)
+ QMainWindow(0),
+ vnc_view(0),
+ scroll_area(new QScrollArea(0))
{
swipe_start = QPoint(0,0);
setAttribute(Qt::WA_Maemo5StackedWindow);
+ //set up toolbar
+ toolbar = new QToolBar(0);
+ toolbar->addAction("Esc", this, SLOT(sendEsc()));
+ toolbar->addAction("Tab", this, SLOT(sendTab()));
+ addToolBar(toolbar);
+
//set up menu
QMenuBar *menu = new QMenuBar(this);
QAction *connect_action = new QAction("Connect", this);
disconnect_action = new QAction("Disconnect", this);
+ menu->addAction(connect_action);
+ menu->addAction(disconnect_action);
scaling = new QAction("Rescale Remote Screen", this);
scaling->setCheckable(true);
scaling->setChecked(true);
menu->addAction(scaling);
+ QAction *show_toolbar = new QAction("Show Toolbar", this);
+ show_toolbar->setCheckable(true);
+ show_toolbar->setChecked(true);
+ menu->addAction(show_toolbar);
QAction *about_action = new QAction("About", this);
menu->addAction(about_action);
this, SLOT(connectDialog()));
connect(disconnect_action, SIGNAL(triggered()),
this, SLOT(disconnectFromHost()));
+ connect(show_toolbar, SIGNAL(toggled(bool)),
+ toolbar, SLOT(setVisible(bool)));
+
+ setCentralWidget(scroll_area);
grabZoomKeys(true);
setAttribute(Qt::WA_Maemo5AutoOrientation, true);
vnc_view = new VncView(0, url, RemoteView::Quality(quality));
connect(scaling, SIGNAL(toggled(bool)),
vnc_view, SLOT(enableScaling(bool)));
- setWidget(vnc_view);
+ connect(vnc_view, SIGNAL(statusChanged(RemoteView::RemoteStatus)),
+ this, SLOT(statusChanged(RemoteView::RemoteStatus)));
+ scroll_area->setWidget(vnc_view);
vnc_view->start();
}
}
void MainWindow::closeEvent(QCloseEvent*) {
hide();
grabZoomKeys(false);
- vnc_view->startQuitting();
+ disconnectFromHost();
}
void MainWindow::about() {
void MainWindow::connectDialog()
{
- QString url = QInputDialog::getText(this, "Connect to Host", "VNC Server:");
+ QSettings settings;
+ QString url = QInputDialog::getText(this, "Connect to Host", "VNC Server:", QLineEdit::Normal, settings.value("last_hostname", "").toString());
if(url.isEmpty()) { //dialog dismissed or nothing entered
return;
}
+ settings.setValue("last_hostname", url);
url = "vnc://" + url;
disconnectFromHost();
vnc_view = new VncView(0, url, RemoteView::Quality(2)); //TODO: get quality in dialog
- setWidget(vnc_view);
+ scroll_area->setWidget(vnc_view);
connect(scaling, SIGNAL(toggled(bool)),
vnc_view, SLOT(enableScaling(bool)));
+ connect(vnc_view, SIGNAL(statusChanged(RemoteView::RemoteStatus)),
+ this, SLOT(statusChanged(RemoteView::RemoteStatus)));
vnc_view->start();
disconnect_action->setEnabled(true);
}
void MainWindow::disconnectFromHost()
{
+ if(!vnc_view)
+ return;
+
vnc_view->startQuitting();
- setWidget(0);
+ scroll_area->setWidget(0);
- disconnect(scaling, SIGNAL(toggled(bool)),
- vnc_view, SLOT(enableScaling(bool)));
+ vnc_view->disconnect(); //remove all connections
delete vnc_view;
vnc_view = 0;
disconnect_action->setEnabled(false);
}
+
+void MainWindow::statusChanged(RemoteView::RemoteStatus status)
+{
+ static RemoteView::RemoteStatus old_status = RemoteView::Disconnected;
+
+ switch(status) {
+ case RemoteView::Connecting:
+ setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true);
+ break;
+ case RemoteView::Connected:
+ setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false);
+ break;
+ case RemoteView::Disconnecting:
+ if(old_status != RemoteView::Disconnected) { //Disconnecting also occurs while connecting, so check last state
+ QMaemo5InformationBox::information(this, "Connection lost");
+ }
+ break;
+ case RemoteView::Disconnected:
+ if(old_status == RemoteView::Disconnecting) {
+ scroll_area->setWidget(0); //remove widget
+ }
+ break;
+ }
+
+ old_status = status;
+}