summaryrefslogtreecommitdiffstats
path: root/krdc/krdc.h
diff options
context:
space:
mode:
Diffstat (limited to 'krdc/krdc.h')
-rw-r--r--krdc/krdc.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/krdc/krdc.h b/krdc/krdc.h
new file mode 100644
index 00000000..5bf9a4bd
--- /dev/null
+++ b/krdc/krdc.h
@@ -0,0 +1,175 @@
+/***************************************************************************
+ krdc.h - main window
+ -------------------
+ begin : Tue May 13 23:10:42 CET 2002
+ copyright : (C) 2002-2003 by Tim Jansen
+ email : tim@tjansen.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef KRDC_H
+#define KRDC_H
+
+#include <kprogress.h>
+#include <qscrollview.h>
+#include <qlayout.h>
+#include <qsize.h>
+#include <qrect.h>
+#include <qtimer.h>
+#include <qdesktopwidget.h>
+
+#include "vnc/kvncview.h"
+#include "rdp/krdpview.h"
+#include "kfullscreenpanel.h"
+#include "vidmode.h"
+#include "smartptr.h"
+#include "keycapturedialog.h"
+
+class QPixmap;
+class KToolBar;
+class QPopupMenu;
+class QDockArea;
+
+enum WindowMode {
+ WINDOW_MODE_AUTO,
+ WINDOW_MODE_NORMAL,
+ WINDOW_MODE_FULLSCREEN
+};
+
+// known protocols
+enum Protocol {
+ PROTOCOL_AUTO,
+ PROTOCOL_VNC,
+ PROTOCOL_RDP
+};
+
+// Overloaded QScrollView, to let mouse move events through to remote widget
+class QScrollView2 : public QScrollView {
+public:
+ QScrollView2(QWidget *w, const char *name);
+protected:
+ virtual void mouseMoveEvent(QMouseEvent *e);
+};
+
+
+class KRDC : public QWidget
+{
+ Q_OBJECT
+private:
+ SmartPtr<KProgressDialog> m_progressDialog; // dialog, displayed while connecting
+ QVBoxLayout *m_layout; // the layout for autosizing the scrollview
+ QScrollView *m_scrollView; // scrollview that contains the remote widget
+ KProgress *m_progress; // progress bar for the dialog
+ KRemoteView *m_view; // the remote widget (e.g. KVncView)
+
+ SmartPtr<KeyCaptureDialog> m_keyCaptureDialog; // dialog for key capturing
+ KFullscreenPanel *m_fsToolbar; // toolbar for fullscreen (0 in normal mode)
+ QWidget *m_fsToolbarWidget; // qt designer widget for fs toolbar
+ // (invalid in normal mode)
+ QPixmap m_pinup, m_pindown; // fs toolbar imaged for autohide button
+ KToolBar *m_toolbar; // toolbar in normal mode (0 in fs mode)
+ QDockArea *m_dockArea; // dock area for toolbar in normal mode (0 in fs mode)
+ QPopupMenu *m_popup; // advanced options popup (0 in fs mode)
+ QDesktopWidget m_desktopWidget;
+
+ static const int TOOLBAR_AUTOHIDE_TIMEOUT;
+ bool m_ftAutoHide; // if true auto hide in fs is activated
+ QTimer m_autoHideTimer; // timer for autohide
+
+ QTimer m_bumpScrollTimer; // timer for bump scrolling (in fs, when res too large)
+
+ bool m_showProgress; // can disable showing the progress dialog temporary
+ QString m_host; // host string as given from user
+ Protocol m_protocol; // the used protocol
+ Quality m_quality; // current quality setting
+ QString m_encodings; // string containing the encodings, space separated,
+ // used for config before connection
+ QString m_password; // if not null, contains the password to use
+ QString m_resolution;// contains an alternative resolution
+ QString m_keymap; // keymap on the terminal server
+
+ WindowMode m_isFullscreen; // fs/normal state
+ Resolution m_oldResolution; // conatins encoded res before fs
+ bool m_fullscreenMinimized; // true if window is currently minimized from fs
+ QSize m_fullscreenResolution; // xvidmode size (valid only in fs)
+ bool m_windowScaling; // used in startup and fullscreen to determine
+ // whether scaling should be enabled in norm mode.
+ // The current state is m_view->scaled().
+ bool m_localCursor; // show local cursor no matter what
+ QSize m_initialWindowSize; // initial window size (windowed mode only),
+ // invalid after first use
+ static QString m_lastHost; // remembers last value of host input
+
+ bool parseHost(QString &s, Protocol &prot, QString &serverHost, int &serverPort,
+ QString &userName, QString &password);
+
+ void repositionView(bool fullscreen);
+
+ void showProgressDialog();
+ void hideProgressDialog();
+
+ static const int TOOLBAR_FPS_1000;
+ static const int TOOLBAR_SPEED_DOWN;
+ static const int TOOLBAR_SPEED_UP;
+ void fsToolbarScheduleHidden();
+ QPopupMenu *createPopupMenu(QWidget *parent) const;
+
+protected:
+ virtual void mouseMoveEvent(QMouseEvent *e);
+ virtual bool event(QEvent *e);
+ virtual bool eventFilter(QObject *watched, QEvent *e);
+ virtual QSize sizeHint();
+
+public:
+ KRDC(WindowMode wm = WINDOW_MODE_AUTO,
+ const QString &host = QString::null,
+ Quality q = QUALITY_UNKNOWN,
+ const QString &encodings = QString::null,
+ const QString &password = QString::null,
+ bool scale = false,
+ bool localCursor = false,
+ QSize initialWindowSize = QSize());
+ ~KRDC();
+
+ bool start();
+
+ static void setLastHost(const QString &host);
+
+private slots:
+ void changeProgress(RemoteViewStatus s);
+ void showingPasswordDialog(bool b);
+ void showProgressTimeout();
+
+ void setSize(int w, int h);
+ void iconify();
+ void toolbarChanged();
+ void bumpScroll();
+
+ void toggleFsToolbarAutoHide();
+ void setFsToolbarAutoHide(bool on);
+ void showFullscreenToolbar();
+ void hideFullscreenToolbarDelayed();
+ void hideFullscreenToolbarNow();
+
+public slots:
+ void quit();
+ void enableFullscreen(bool full = false);
+ void switchToNormal(bool scaling = false);
+ void switchToFullscreen(bool scaling = false);
+ void viewOnlyToggled();
+ void showLocalCursorToggled();
+
+signals:
+ void disconnected();
+ void disconnectedError();
+};
+
+#endif