comparison libqterminal/unix/QUnixTerminalImpl.cpp @ 15658:eaa7da75d202

Added QTerminalInteface class.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Tue, 31 Jan 2012 11:14:38 +0100
parents c05926c0657d
children 739f0f73e772
comparison
equal deleted inserted replaced
15657:17ef804ef614 15658:eaa7da75d202
22 #include "unix/QUnixTerminalImpl.h" 22 #include "unix/QUnixTerminalImpl.h"
23 #include "unix/kpty.h" 23 #include "unix/kpty.h"
24 24
25 #include <termios.h> 25 #include <termios.h>
26 26
27 QTerminal::QTerminal(QWidget *parent) 27 QUnixTerminalImpl::QUnixTerminalImpl(QWidget *parent)
28 : QWidget(parent) { 28 : QTerminalInterface(parent) {
29 setMinimumSize(600, 400); 29 setMinimumSize(600, 400);
30 initialize(); 30 initialize();
31 } 31 }
32 32
33 void QTerminal::initialize() 33 void QUnixTerminalImpl::initialize()
34 { 34 {
35 m_kpty = new KPty(); 35 m_kpty = new KPty();
36 m_kpty->open(); 36 m_kpty->open();
37 37
38 m_sessionModel = new TerminalModel(m_kpty); 38 m_sessionModel = new TerminalModel(m_kpty);
58 58
59 m_sessionModel->run(); 59 m_sessionModel->run();
60 m_sessionModel->addView(m_sessionView); 60 m_sessionModel->addView(m_sessionView);
61 m_sessionView->setScrollBarPosition(TerminalView::ScrollBarRight); 61 m_sessionView->setScrollBarPosition(TerminalView::ScrollBarRight);
62 62
63 connect(m_sessionModel, SIGNAL(finished()), this, SLOT(sessionFinished()));
64 setFocusProxy(m_sessionView); 63 setFocusProxy(m_sessionView);
65 64
66 setFocus(Qt::OtherFocusReason); 65 setFocus(Qt::OtherFocusReason);
67 m_sessionView->resize(this->size()); 66 m_sessionView->resize(this->size());
68 67
69 connectToPty(); 68 connectToPty();
70 } 69 }
71 70
72 void QTerminal::connectToPty() 71 void QUnixTerminalImpl::connectToPty()
73 { 72 {
74 int fds = m_kpty->slaveFd(); 73 int fds = m_kpty->slaveFd();
75 74
76 dup2 (fds, STDIN_FILENO); 75 dup2 (fds, STDIN_FILENO);
77 dup2 (fds, STDOUT_FILENO); 76 dup2 (fds, STDOUT_FILENO);
88 if(!isatty(STDERR_FILENO)) { 87 if(!isatty(STDERR_FILENO)) {
89 qDebug("Error: stderr is not a tty."); 88 qDebug("Error: stderr is not a tty.");
90 } 89 }
91 } 90 }
92 91
93 QTerminal::~QTerminal() 92 QUnixTerminalImpl::~QUnixTerminalImpl()
94 { 93 {
95 emit destroyed(); 94 emit destroyed();
96 } 95 }
97 96
98 void QTerminal::setTerminalFont(QFont &font) 97 void QUnixTerminalImpl::setTerminalFont(QFont &font)
99 { 98 {
100 if(!m_sessionView) 99 if(!m_sessionView)
101 return; 100 return;
102 m_sessionView->setVTFont(font); 101 m_sessionView->setVTFont(font);
103 } 102 }
104 103
105 void QTerminal::setTextCodec(QTextCodec *codec) 104 void QUnixTerminalImpl::setSize(int h, int v)
106 {
107 if(!m_sessionModel)
108 return;
109 m_sessionModel->setCodec(codec);
110 }
111
112 void QTerminal::setSize(int h, int v)
113 { 105 {
114 if(!m_sessionView) 106 if(!m_sessionView)
115 return; 107 return;
116 m_sessionView->setSize(h, v); 108 m_sessionView->setSize(h, v);
117 } 109 }
118 110
119 void QTerminal::setHistorySize(int lines) 111 void QUnixTerminalImpl::sendText(QString text)
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::sendText(QString text)
133 { 112 {
134 m_sessionModel->sendText(text); 113 m_sessionModel->sendText(text);
135 } 114 }
136 115
137 void QTerminal::focusInEvent(QFocusEvent *focusEvent) 116 void QUnixTerminalImpl::focusInEvent(QFocusEvent *focusEvent)
138 { 117 {
139 Q_UNUSED(focusEvent); 118 Q_UNUSED(focusEvent);
140 m_sessionView->updateImage(); 119 m_sessionView->updateImage();
141 m_sessionView->repaint(); 120 m_sessionView->repaint();
142 m_sessionView->update(); 121 m_sessionView->update();
143 } 122 }
144 123
145 void QTerminal::showEvent(QShowEvent *) 124 void QUnixTerminalImpl::showEvent(QShowEvent *)
146 { 125 {
147 m_sessionView->updateImage(); 126 m_sessionView->updateImage();
148 m_sessionView->repaint(); 127 m_sessionView->repaint();
149 m_sessionView->update(); 128 m_sessionView->update();
150 } 129 }
151 130
152 void QTerminal::resizeEvent(QResizeEvent*) 131 void QUnixTerminalImpl::resizeEvent(QResizeEvent*)
153 { 132 {
154 m_sessionView->resize(this->size()); 133 m_sessionView->resize(this->size());
155 m_sessionView->updateImage(); 134 m_sessionView->updateImage();
156 m_sessionView->repaint(); 135 m_sessionView->repaint();
157 m_sessionView->update(); 136 m_sessionView->update();
158 } 137 }
159 138
160 void QTerminal::sessionFinished() 139 void QUnixTerminalImpl::copyClipboard()
161 {
162 emit finished();
163 }
164
165 void QTerminal::copyClipboard()
166 { 140 {
167 m_sessionView->copyClipboard(); 141 m_sessionView->copyClipboard();
168 } 142 }
169 143
170 void QTerminal::pasteClipboard() 144 void QUnixTerminalImpl::pasteClipboard()
171 { 145 {
172 m_sessionView->pasteClipboard(); 146 m_sessionView->pasteClipboard();
173 } 147 }
174 148