summaryrefslogtreecommitdiffstats
path: root/krdc/krdc.h
blob: 1cd5b739ef407d95ecc80d1079d52c18352945b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/***************************************************************************
                            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 <tqscrollview.h>
#include <tqlayout.h>
#include <tqsize.h>
#include <tqrect.h>
#include <tqtimer.h>
#include <tqdesktopwidget.h>

#include "vnc/kvncview.h"
#include "rdp/krdpview.h"
#include "kfullscreenpanel.h"
#include "vidmode.h"
#include "smartptr.h"
#include "keycapturedialog.h"

class TQPixmap;
class KToolBar;
class TQPopupMenu;
class TQDockArea;

enum WindowMode {
	WINDOW_MODE_AUTO,
	WINDOW_MODE_NORMAL,
	WINDOW_MODE_FULLSCREEN
};

// known protocols
enum Protocol {
	PROTOCOL_AUTO,
	PROTOCOL_VNC,
	PROTOCOL_RDP
};

// Overloaded TQScrollView, to let mouse move events through to remote widget
class TQScrollView2 : public TQScrollView {
public:
	TQScrollView2(TQWidget *w, const char *name);
protected:
	virtual void mouseMoveEvent(TQMouseEvent *e);
};


class KRDC : public TQWidget
{
	Q_OBJECT
  TQ_OBJECT
private:
	SmartPtr<KProgressDialog> m_progressDialog; // dialog, displayed while connecting
	TQVBoxLayout *m_layout;     // the tqlayout for autosizing the scrollview
	TQScrollView *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)
	TQWidget *m_fsToolbarWidget;        // qt designer widget for fs toolbar
                                           //     (invalid in normal mode)
	TQPixmap m_pinup, m_pindown;        // fs toolbar imaged for autohide button
	KToolBar *m_toolbar;               // toolbar in normal mode (0 in fs mode)
	TQDockArea *m_dockArea;             // dock area for toolbar in normal mode (0 in fs mode)
	TQPopupMenu *m_popup;               // advanced options popup (0 in fs mode)
	TQDesktopWidget m_desktopWidget;

	static const int TOOLBAR_AUTOHIDE_TIMEOUT;
	bool m_ftAutoHide; // if true auto hide in fs is activated
	TQTimer m_autoHideTimer; // timer for autohide

	TQTimer m_bumpScrollTimer; // timer for bump scrolling (in fs, when res too large)

	bool m_showProgress; // can disable showing the progress dialog temporary
	TQString m_host;      // host string as given from user
	Protocol m_protocol; // the used protocol
	Quality m_quality;   // current quality setting
	TQString m_encodings; // string containing the encodings, space separated,
	                     // used for config before connection
	TQString m_password;  // if not null, contains the password to use
	TQString m_resolution;// contains an alternative resolution
	TQString 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
	TQSize 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
	TQSize m_initialWindowSize;    // initial window size (windowed mode only),
	                              // invalid after first use
	static TQString m_lastHost; // remembers last value of host input

	bool parseHost(TQString &s, Protocol &prot, TQString &serverHost, int &serverPort,
	               TQString &userName, TQString &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();
	TQPopupMenu *createPopupMenu(TQWidget *tqparent) const;

protected:
	virtual void mouseMoveEvent(TQMouseEvent *e);
	virtual bool event(TQEvent *e);
	virtual bool eventFilter(TQObject *watched, TQEvent *e);
	virtual TQSize tqsizeHint();

public:
	KRDC(WindowMode wm = WINDOW_MODE_AUTO,
	     const TQString &host = TQString(),
	     Quality q = TQUALITY_UNKNOWN,
	     const TQString &encodings = TQString(),
	     const TQString &password = TQString(),
	     bool scale = false,
	     bool localCursor = false,
	     TQSize initialWindowSize = TQSize());
	~KRDC();

	bool start();

	static void setLastHost(const TQString &host);

private slots:
	void changeProgress(RemoteViewtqStatus 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