comparison libqterminal/unix/QUnixTerminalImpl.cpp @ 15651:845cebf281aa

Added files of QConsole.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Mon, 30 Jan 2012 11:23:13 +0100
parents
children 2d6724358c12
comparison
equal deleted inserted replaced
15650:ba360324035e 15651:845cebf281aa
1 /* Copyright (C) 2008 e_k (e_k@users.sourceforge.net)
2 Copyright (C) 2012 Jacob Dawid <jacob.dawid@googlemail.com>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18 */
19
20 #include <QDebug>
21
22 #include "QTerminal.h"
23 #include "kpty.h"
24
25 #include <termios.h>
26
27 QTerminal::QTerminal(QWidget *parent)
28 : QWidget(parent) {
29 setMinimumSize(600, 400);
30 initialize();
31 }
32
33 void QTerminal::initialize()
34 {
35 m_kpty = new KPty();
36 m_kpty->open();
37
38 m_sessionModel = new TerminalModel(m_kpty);
39
40 m_sessionModel->setAutoClose(true);
41 m_sessionModel->setCodec(QTextCodec::codecForName("UTF-8"));
42 m_sessionModel->setHistoryType(HistoryTypeBuffer(1000));
43 m_sessionModel->setDarkBackground(true);
44 m_sessionModel->setKeyBindings("");
45
46 m_sessionView = new TerminalView(this);
47 m_sessionView->setBellMode(TerminalView::NotifyBell);
48 m_sessionView->setTerminalSizeHint(true);
49 m_sessionView->setTripleClickMode(TerminalView::SelectWholeLine);
50 m_sessionView->setTerminalSizeStartup(true);
51 m_sessionView->setSize(80, 40);
52
53 QFont font = QApplication::font();
54 font.setFamily("Monospace");
55 font.setPointSize(10);
56 font.setStyleHint(QFont::TypeWriter);
57 setTerminalFont(font);
58
59 m_sessionModel->run();
60 m_sessionModel->addView(m_sessionView);
61 m_sessionView->setScrollBarPosition(TerminalView::ScrollBarRight);
62
63 connect(m_sessionModel, SIGNAL(finished()), this, SLOT(sessionFinished()));
64 setFocusProxy(m_sessionView);
65
66 setFocus(Qt::OtherFocusReason);
67 m_sessionView->resize(this->size());
68
69 connectToPty();
70 }
71
72 void QTerminal::connectToPty()
73 {
74 int fds = m_kpty->slaveFd();
75
76 dup2 (fds, STDIN_FILENO);
77 dup2 (fds, STDOUT_FILENO);
78 dup2 (fds, STDERR_FILENO);
79
80 if(!isatty(STDIN_FILENO)) {
81 qDebug("Error: stdin is not a tty.");
82 }
83
84 if(!isatty(STDOUT_FILENO)) {
85 qDebug("Error: stdout is not a tty.");
86 }
87
88 if(!isatty(STDERR_FILENO)) {
89 qDebug("Error: stderr is not a tty.");
90 }
91 }
92
93 QTerminal::~QTerminal()
94 {
95 emit destroyed();
96 }
97
98 void QTerminal::setTerminalFont(QFont &font)
99 {
100 if(!m_sessionView)
101 return;
102 m_sessionView->setVTFont(font);
103 }
104
105 void QTerminal::setTextCodec(QTextCodec *codec)
106 {
107 if(!m_sessionModel)
108 return;
109 m_sessionModel->setCodec(codec);
110 }
111
112 void QTerminal::setSize(int h, int v)
113 {
114 if(!m_sessionView)
115 return;
116 m_sessionView->setSize(h, v);
117 }
118
119 void QTerminal::setHistorySize(int lines)
120 {
121 if(lines < 0)
122 m_sessionModel->setHistoryType(HistoryTypeFile());
123 else
124 m_sessionModel->setHistoryType(HistoryTypeBuffer(lines));
125 }
126
127 void QTerminal::setReadOnly(bool readonly)
128 {
129 m_sessionView->setReadOnly(readonly);
130 }
131
132 void QTerminal::focusInEvent(QFocusEvent *focusEvent)
133 {
134 Q_UNUSED(focusEvent);
135 m_sessionView->updateImage();
136 m_sessionView->repaint();
137 m_sessionView->update();
138 }
139
140 void QTerminal::showEvent(QShowEvent *)
141 {
142 m_sessionView->updateImage();
143 m_sessionView->repaint();
144 m_sessionView->update();
145 }
146
147 void QTerminal::resizeEvent(QResizeEvent*)
148 {
149 m_sessionView->resize(this->size());
150 m_sessionView->updateImage();
151 m_sessionView->repaint();
152 m_sessionView->update();
153 }
154
155 void QTerminal::sessionFinished()
156 {
157 emit finished();
158 }
159
160 void QTerminal::copyClipboard()
161 {
162 m_sessionView->copyClipboard();
163 }
164
165 void QTerminal::pasteClipboard()
166 {
167 m_sessionView->pasteClipboard();
168 }
169