Mercurial > hg > octave-nkf
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 |