X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmainwindow.cpp;h=042b685ad1228090796d4250d032276e8e54a1a3;hb=176eaefb1342526e63f64a672cd8d4ce46a9f35d;hp=0a46c653d2a5e9dcbea05510cbcf10570d153cd9;hpb=03a77587be4d8663073de5d01d8c53dd006560b9;p=presencevnc diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0a46c65..042b685 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -32,22 +32,20 @@ #endif - MainWindow::MainWindow(QString url, int quality): QMainWindow(0), vnc_view(0), scroll_area(new ScrollArea(0)), - key_menu(0) + key_menu(new KeyMenu(this)) { setWindowTitle("Presence VNC"); - - migrateConfiguration(); - QSettings settings; - + setContextMenuPolicy(Qt::NoContextMenu); #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5StackedWindow); #endif + migrateConfiguration(); + //set up toolbar toolbar = new QToolBar(0); toolbar->addAction(QChar(0x2026), this, SLOT(showKeyMenu())); //"..." button @@ -67,16 +65,20 @@ MainWindow::MainWindow(QString url, int quality): toolbar->addWidget(spacer); */ + QSettings settings; zoom_slider = new QSlider(Qt::Horizontal, 0); zoom_slider->setRange(0, 100); connect(zoom_slider, SIGNAL(valueChanged(int)), this, SLOT(setZoomLevel(int))); + connect(zoom_slider, SIGNAL(sliderReleased()), + this, SLOT(forceRepaint())); zoom_slider->setValue(settings.value("zoomlevel", 95).toInt()); toolbar->addWidget(zoom_slider); toolbar->addAction(QIcon("/usr/share/icons/hicolor/48x48/hildon/general_fullsize.png"), "", this, SLOT(toggleFullscreen())); addToolBar(toolbar); toolbar->setVisible(settings.value("show_toolbar", true).toBool()); + toolbar->setEnabled(false); //set up menu QAction *connect_action = new QAction(tr("Connect"), this); @@ -130,7 +132,6 @@ MainWindow::MainWindow(QString url, int quality): if(url.isNull()) { disconnect_action->setEnabled(false); - toolbar->setEnabled(false); showConnectDialog(); } else { vnc_view = new VncView(this, url, RemoteView::Quality(quality)); @@ -138,7 +139,6 @@ MainWindow::MainWindow(QString url, int quality): this, SLOT(statusChanged(RemoteView::RemoteStatus))); scroll_area->setWidget(vnc_view); vnc_view->start(); - key_menu = new KeyMenu(this); } } @@ -183,26 +183,26 @@ and LibVNCServer, © 2001-2003 Johannes E. Schindelin

\ void MainWindow::showConnectDialog() { ConnectDialog *connect_dialog = new ConnectDialog(this); - connect(connect_dialog, SIGNAL(connectToHost(QString, int)), - this, SLOT(connectToHost(QString, int))); + connect(connect_dialog, SIGNAL(connectToHost(QString, int, int)), + this, SLOT(connectToHost(QString, int, int))); connect_dialog->exec(); } -void MainWindow::connectToHost(QString url, int quality) +void MainWindow::connectToHost(QString url, int quality, int listen_port) { disconnectFromHost(); - vnc_view = new VncView(this, url, RemoteView::Quality(quality)); + vnc_view = new VncView(this, url, RemoteView::Quality(quality), listen_port); connect(vnc_view, SIGNAL(statusChanged(RemoteView::RemoteStatus)), this, SLOT(statusChanged(RemoteView::RemoteStatus))); scroll_area->setWidget(vnc_view); vnc_view->start(); + disconnect_action->setEnabled(true); - toolbar->setEnabled(true); - if(key_menu) //reset - delete key_menu; + //reset key menu + delete key_menu; key_menu = new KeyMenu(this); } @@ -211,12 +211,12 @@ void MainWindow::disconnectFromHost() if(!vnc_view) return; + disconnect_action->setEnabled(false); + toolbar->setEnabled(false); scroll_area->setWidget(0); delete vnc_view; vnc_view = 0; - disconnect_action->setEnabled(false); - toolbar->setEnabled(false); } void MainWindow::statusChanged(RemoteView::RemoteStatus status) @@ -233,13 +233,16 @@ void MainWindow::statusChanged(RemoteView::RemoteStatus status) #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); #endif + toolbar->setEnabled(true); + vnc_view->setZoomLevel(zoom_slider->value()); vnc_view->forceFullRepaint(); break; case RemoteView::Disconnecting: if(old_status != RemoteView::Disconnected) { //Disconnecting also occurs while connecting, so check last state #ifdef Q_WS_MAEMO_5 - QMaemo5InformationBox::information(this, tr("Connection lost")); + if(disconnect_action->isEnabled()) //don't show when manually disconnecting + QMaemo5InformationBox::information(this, tr("Connection lost")); #endif //clean up @@ -268,7 +271,13 @@ void MainWindow::statusChanged(RemoteView::RemoteStatus status) old_status = status; } -//resizes the widget to use available screen space +void MainWindow::forceRepaint() +{ + if(vnc_view) + vnc_view->forceFullRepaint(); +} + +//updates available screen space for current zoom level //necessary when rotating, showing fullscreen, etc. void MainWindow::forceResize() { @@ -355,6 +364,21 @@ void MainWindow::showInputPanel() void MainWindow::setZoomLevel(int level) { - if(vnc_view) - vnc_view->setZoomLevel(level); + if(!vnc_view) + return; + + int old_width = vnc_view->width(); + QPoint center = vnc_view->visibleRegion().boundingRect().center(); + + vnc_view->setZoomLevel(level); + + int new_width = vnc_view->width(); + + //scroll to center, if zoom level actually changed + if(new_width != old_width) { + center = center * (double(new_width)/old_width); + scroll_area->ensureVisible(center.x(), center.y(), + scroll_area->width()/2, scroll_area->height()/2); + vnc_view->update(); + } }