6#include <QLoggingCategory>
7#include <QDesktopServices>
14#include "ParameterOperate.h"
16#include "BackendThread.h"
17#include "OperateTerminal.h"
20static Q_LOGGING_CATEGORY(log,
"Operate.Terminal")
24 , m_pTerminal(
nullptr)
26 , m_pActionFind(
nullptr)
27 , m_pActionOpenWithSystem(
nullptr)
28 , m_pParameters(
nullptr)
29 , m_pEditCopy(
nullptr)
30 , m_pEditPaste(
nullptr)
33 , m_pZoomOriginal(
nullptr)
36 QTermWidget::addCustomColorSchemeDir(QApplication::applicationDirPath()
37 + QDir::separator() +
"color-schemes");
38 QTermWidget::addCustomColorSchemeDir(QApplication::applicationDirPath()
39 + QDir::separator() +
".."
40 + QDir::separator() +
"share"
41 + QDir::separator() +
"qtermwidget6"
42 + QDir::separator() +
"color-schemes");
50 m_pTerminal =
new QTermWidget(0);
52 qCritical(log) <<
"new QTermWidget() fail";
55 m_pTerminal->setAutoClose(
true);
58 m_pTerminal->setContextMenuPolicy(Qt::CustomContextMenu);
59 check = connect(m_pTerminal, SIGNAL(customContextMenuRequested(
const QPoint &)),
60 this, SLOT(slotCustomContextMenu(
const QPoint &)));
62 check = connect(m_pTerminal, SIGNAL(urlActivated(
const QUrl&,
bool)),
63 this, SLOT(slotActivateUrl(
const QUrl&,
bool)));
68 check = connect(m_pTerminal, SIGNAL(finished()),
69 this, SIGNAL(sigStop()));
74 check = connect(m_pTerminal, SIGNAL(termGetFocus()),
75 this, SLOT(slotFocusIn()));
77 check = connect(m_pTerminal, SIGNAL(termLostFocus()),
78 this, SLOT(slotFocusOut()));
82COperateTerminal::~COperateTerminal()
84 qDebug(log) << Q_FUNC_INFO;
87 m_pTerminal->deleteLater();
88 m_pTerminal =
nullptr;
94 QString szDescription;
96 szDescription = tr(
"Name: ") +
Name() +
"\n";
99 szDescription += tr(
"Type: ") +
GetTypeName() +
"\n";
102 szDescription += tr(
"Protocol: ") +
Protocol();
104 if(!
GetPlugin()->DisplayName().isEmpty())
107 szDescription +=
"\n";
110 if(GetSecurityLevel() != SecurityLevel::No)
111 szDescription += tr(
"Security level: ") + GetSecurityLevelString() +
"\n";
116 return szDescription;
129 if(!pPara)
return -1;
130 nRet = pPara->Load(set);
139 if(!pPara)
return -1;
140 nRet = pPara->Save(set);
152 m_pEditCopy = m_Menu.addAction(QIcon::fromTheme(
"edit-copy"),
153 tr(
"Copy selection to clipboard") +
"\tCtrl+Shift+C",
154 m_pTerminal, SLOT(copyClipboard()));
155 m_pEditPaste = m_Menu.addAction(QIcon::fromTheme(
"edit-paste"),
156 tr(
"Paste clipboard") +
"\tCtrl+V",
157 m_pTerminal, SLOT(pasteClipboard()));
158 m_Menu.addAction(tr(
"Paste selection"), m_pTerminal, SLOT(pasteSelection()));
159 m_Menu.addSeparator();
160 m_pZoomIn = m_Menu.addAction(QIcon::fromTheme(
"zoom-in"), tr(
"Zoom in") +
"\tCtrl++",
161 m_pTerminal, SLOT(zoomIn()));
162 m_pZoomOut = m_Menu.addAction(QIcon::fromTheme(
"zoom-out"), tr(
"Zoom out") +
"\tCtrl+-",
163 m_pTerminal, SLOT(zoomOut()));
164 m_pZoomOriginal = m_Menu.addAction(QIcon::fromTheme(
"zoom-original"), tr(
"Zoom reset") +
"\tCtrl+0",
165 this, SLOT(slotZoomReset()));
167 m_Menu.addSeparator();
178 m_pActionFind = m_Menu.addAction(
179 QIcon::fromTheme(
"edit-find"), tr(
"Find ......") +
"\tCtrl+F",
180 m_pTerminal, &QTermWidget::toggleShowSearchBar);
182 m_Menu.addSeparator();
183 m_pClear = m_Menu.addAction(QIcon::fromTheme(
"edit-clear"),
184 tr(
"Clear") +
"\tCtrl+R",
185 m_pTerminal, SLOT(clear()));
187 if(m_pActionSettings) {
188 m_Menu.addSeparator();
189 m_Menu.addAction(m_pActionSettings);
202int COperateTerminal::Start()
206 slotUpdateParameter(
this);
209 qCritical(log) <<
"new CBackendThread fail";
216int COperateTerminal::Stop()
218 qDebug(log) << Q_FUNC_INFO;
231 return m_pParameters;
239 Q_ASSERT(!m_pParameters);
241 m_pParameters = pPara;
243 if(!pPara || !m_pTerminal)
return -1;
251 this, SLOT(slotUpdateParameter(
COperate*)));
257void COperateTerminal::slotUpdateParameter(
COperate* pOperate)
259 qDebug(log) << Q_FUNC_INFO;
260 if(
this != pOperate)
return;
265#if QTERMWIDGET_VERSION >= QT_VERSION_CHECK(0, 9, 0)
266 m_pTerminal->setTerminalSizeHint(pPara->GetSizeHint());
267 m_pTerminal->setBidiEnabled(pPara->GetDirectional());
268 m_pTerminal->disableBracketedPasteMode(pPara->GetDisableBracketedPasteMode());
270 m_pTerminal->setTerminalFont(pPara->GetFont());
271 m_pTerminal->setKeyboardCursorShape(pPara->GetCursorShape());
272 m_pTerminal->setColorScheme(pPara->GetColorScheme());
273 m_pTerminal->setScrollBarPosition(pPara->GetScrollBarPosition());
274 m_pTerminal->setFlowControlEnabled(pPara->GetFlowControl());
275 m_pTerminal->setFlowControlWarningEnabled(pPara->GetFlowControlWarning());
276 m_pTerminal->setMotionAfterPasting(pPara->GetMotionAfterPasting());
277 m_pTerminal->setTerminalOpacity(1.0 - pPara->GetTransparency() / 100.0);
278 m_pTerminal->setTerminalBackgroundImage(pPara->GetBackgroupImage());
280 m_pTerminal->setKeyBindings(pPara->GetKeyBindings());
281 m_pTerminal->setHistorySize(pPara->GetHistorySize());
288void COperateTerminal::slotZoomReset()
290 if(!m_pTerminal)
return;
293 m_pTerminal->setTerminalFont(pPara->GetFont());
296void COperateTerminal::slotCustomContextMenu(
const QPoint & pos)
298 if(!m_pTerminal)
return;
304 m_Menu.exec(m_pTerminal->mapToGlobal(pos));
307void COperateTerminal::slotActivateUrl(
const QUrl& url,
bool fromContextMenu)
309 if (QApplication::keyboardModifiers() & Qt::ControlModifier || fromContextMenu) {
310 QDesktopServices::openUrl(url);
314void COperateTerminal::slotTermKeyPressed(QKeyEvent* e)
316 qDebug(log) << Q_FUNC_INFO << e;
319void COperateTerminal::slotFocusIn()
325void COperateTerminal::slotFocusOut()
335const QString COperateTerminal::Details()
338 szDetails =
"- " + tr(
"QTermWidget:") +
" "
339 + QString(
"%1.%2.%3").arg(QTERMWIDGET_VERSION_MAJOR)
340 .arg(QTERMWIDGET_VERSION_MINOR)
341 .arg(QTERMWIDGET_VERSION_PATCH) +
"\n";
353 QString szMsg =
"There is not parameters! "
354 "please first create parameters, "
355 "then call SetParameter() in the ";
356 szMsg += metaObject()->className() + QString(
"::")
357 + metaObject()->className();
358 szMsg += QString(
"() or ") + metaObject()->className()
359 + QString(
"::") +
"Initial()";
360 szMsg +=
" to set the parameters pointer. "
361 "Default set CParameterPlugin for the parameters of operate "
362 "(CParameterOperate or its derived classes) "
363 "See CManager::CreateOperate. "
364 "If you are sure the parameter of operate "
365 "does not need CParameterPlugin. "
366 "Please overload the SetGlobalParameters() in the ";
367 szMsg += QString(metaObject()->className()) +
" . don't set it";
368 qCritical(log) << szMsg.toStdString().c_str();
374int COperateTerminal::WriteTerminal(
const char *buf,
int len)
379 m_pTerminal->receiveData(buf, len);
382 nRet = write(m_pTerminal->getPtySlaveFd(), buf, len);
387void COperateTerminal::SetShotcuts(
bool bEnable)
390 m_pEditCopy->setShortcuts(
391 QList<QKeySequence>() << QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_C)
392 << QKeySequence(Qt::CTRL | Qt::Key_Insert));
393 m_pEditPaste->setShortcuts(QList<QKeySequence>()
394 << QKeySequence(QKeySequence::Paste)
395 << QKeySequence(Qt::SHIFT | Qt::Key_Insert));
396 m_pZoomIn->setShortcut(QKeySequence(QKeySequence::ZoomIn));
397 m_pZoomOut->setShortcut(QKeySequence(QKeySequence::ZoomOut));
398 m_pZoomOriginal->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
399 m_pActionFind->setShortcut(QKeySequence(QKeySequence::Find));
400 m_pClear->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_R));
404 m_pEditCopy->setShortcuts(QList<QKeySequence>());
405 m_pEditPaste->setShortcut(QKeySequence());
406 m_pZoomIn->setShortcut(QKeySequence());
407 m_pZoomOut->setShortcut(QKeySequence());
408 m_pZoomOriginal->setShortcut(QKeySequence());
409 m_pActionFind->setShortcut(QKeySequence());
410 m_pClear->setShortcut(QKeySequence());
418 szId +=
"_" +
Name();
422 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
423 szId = szId.replace(exp,
"_");
Terminal operate interface.
virtual int Save(QSettings &set) override
Save parameters.
virtual const qint16 Version() const override
Version.
virtual int Initial() override
Initial parameters and resource.
virtual CParameterTerminalBase * GetParameter()
Get parameters.
virtual const QString Name() override
Name.
virtual int Clean() override
Clean parameters and resource.
virtual int Load(QSettings &set) override
Load parameters.
virtual const QString Id() override
Identity.
virtual int SetParameter(CParameterTerminalBase *pPara)
Set parameter pointer.
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
Apply the global parameters of the plug-in.
virtual const QString Description() override
Description.
QWidget * GetViewer() override
Get Viewer.
virtual Q_INVOKABLE int Initial()
Initial parameters and resource.
virtual const QString Protocol() const
Protocol.
virtual Q_INVOKABLE int SetGlobalParameters(CParameterPlugin *pPara)=0
Apply the global parameters of the plug-in.
virtual Q_INVOKABLE int Clean()
Clean parameters and resource.
void sigViewerFocusIn(QWidget *pView)
The view is focus.
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
virtual const QString Name()
Name.
void sigUpdateParameters(COperate *pOperate)
Update parameters, notify application to save or show parameters.
virtual const QString Id()
Identity.
virtual const QString GetTypeName() const
Get type name.
Global parameters of plugins.
void sigChanged()
emit when the parameter changes Usually if required, the corresponding parameter corresponds to a cha...
virtual const QString DisplayName() const
The plugin display name.
virtual const QString Description() const =0
Plugin description.