aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/experimental/lumina-terminal/TerminalWidget.h
blob: 616919c3a9c8c485af3ac3c1227bff9166320eb1 (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
//===========================================
//  Lumina-DE source code
//  Copyright (c) 2015, Ken Moore
//  Available under the 3-clause BSD license
//  See the LICENSE file for full details
//===========================================
#ifndef _LUMINA_DESKTOP_UTILITIES_TERMINAL_PROCESS_WIDGET_H
#define _LUMINA_DESKTOP_UTILITIES_TERMINAL_PROCESS_WIDGET_H

#include <QTextEdit>
#include <QKeyEvent>
#include <QResizeEvent>
#include <QSocketNotifier>
#include <QTimer>
#include <QMenu>
#include <QClipboard>

#include "TtyProcess.h"

class TerminalWidget : public QTextEdit{
	Q_OBJECT
public:
	TerminalWidget(QWidget *parent =0, QString dir="");
	~TerminalWidget();

	void setTerminalFont(QFont);
	void aboutToClose();

private:
	TTYProcess *PROC;
	QTimer *resizeTimer;
	QTextCharFormat DEFFMT, CFMT; //default/current text format
	QTextCursor selCursor, lastCursor;
	QMenu *contextMenu;
	QAction *copyA, *pasteA;
	int selectionStart;
	bool closing;

	//Incoming Data parsing
	void InsertText(QString);
	void applyData(QByteArray data); //overall data parsing
	void applyANSI(QByteArray code); //individual code application
	void applyANSIColor(int code); //Add the designated color code to the  CFMT structure

	//Outgoing Data parsing
	void sendKeyPress(int key);

	//Special incoming data flags
	int startrow, endrow; //indexes for the first/last row ("\x1b[A;Br" CC)
	bool altkeypad;
private slots:
	void UpdateText();
	void ShellClosed();

	void copySelection();
	void pasteSelection();

	void updateTermSize();

signals:
	void ProcessClosed(QString);

protected:
	void keyPressEvent(QKeyEvent *ev);
	void mousePressEvent(QMouseEvent *ev);
	void mouseMoveEvent(QMouseEvent *ev);
	void mouseReleaseEvent(QMouseEvent *ev);
	void mouseDoubleClickEvent(QMouseEvent *ev);
	//void contextMenuEvent(QContextMenuEvent *ev);
	void resizeEvent(QResizeEvent *ev);
};

#endif
bgstack15