summaryrefslogtreecommitdiffstats
path: root/src/server/connectionframe/connectionframe.h
blob: 9d86c700162b73cce309af11f742d0ad6badfa73 (plain) (blame)
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
#ifndef _CONNECTIONFRAME_H_
#define _CONNECTIONFRAME_H_
#include <QtGui>
#include "../net/client.h"

/**
 * Class for representing the clients of current session, with a specific frame
 * displaying username and hostname for each one.
 */
class ConnectionFrame : public QGroupBox
{

	Q_OBJECT

private:

	QString _computerId;

	QBoxLayout *_mainLayout;
	QBoxLayout *_iconLayout;
	QLabel *_lblUserName;
	QLabel *_lblHostName;
	QLabel *_lblExamMode;

	QLabel *_icoCam, *_icoEye, *_icoLock;
	QList<QLabel*> _icons;

	QPixmap _remoteScreen;

	QPoint _clickPoint;
	QPoint _previousPosition;
	QPoint _currentPosition;

	QPoint _gridPosition;


	Client *_client;

	int _timerId, _timerCounter;
	bool _isSelected;
	bool _isTutor;

	static const int _startDragDistance = 40;

	void showDefaultThumb();
	QLabel* addIcon(const QIcon* icon);

public:
	ConnectionFrame(QWidget* parent, int width, int height);
	virtual ~ConnectionFrame();

	const QPixmap& getFramePixmap() const { return _remoteScreen; }
	void setSize(int width, int height);
	const inline QPoint& getPreviousPosition() const { return _previousPosition; }
	void assignClient(Client *client);
	void setSelection(bool selected);
	const inline bool isSelected() const { return _isSelected; }

	inline void setGridPosition(QPoint pos) { _gridPosition = pos; }
	inline QPoint getGridPosition() const { return _gridPosition; };
	const inline void setCurrentPosition(QPoint position) { _currentPosition = position; }
	const inline QPoint& getCurrentPosition() const { return _currentPosition; }

	const QString& computerId() const { return _computerId; }
	void setComputerId(QString computerId) { if (_client != NULL) return; _computerId = computerId; updateLabels(); }
	Client* client() const { return _client; }

	inline const bool isTutor() const { return _isTutor; }
	void setTutor(bool b);

protected:
	void mouseDoubleClickEvent(QMouseEvent* event);
	void mouseReleaseEvent(QMouseEvent* e);
	void enterEvent(QEvent* event);
	void leaveEvent(QEvent* event);
	void mousePressEvent(QMouseEvent* event);
	void mouseMoveEvent(QMouseEvent* event);
	void paintEvent(QPaintEvent *event);
	void timerEvent(QTimerEvent* event);

signals:
	void frameMoved(bool activateTrash, ConnectionFrame* frame);
	void doubleClicked(ConnectionFrame* frame);
	void clicked(ConnectionFrame* frame);

private slots:
	void onClientDisconnected();
	void onThumbUpdated(Client* client, const QPixmap& thumb, const QByteArray& rawImage);
	void updateAppearance();
	void updateLabels();
};

#endif