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;
124CStats* COperateTerminal::GetStats()
134 if(!pPara)
return -1;
135 nRet = pPara->Load(set);
144 if(!pPara)
return -1;
145 nRet = pPara->Save(set);
157 m_pEditCopy = m_Menu.addAction(QIcon::fromTheme(
"edit-copy"),
158 tr(
"Copy selection to clipboard") +
"\tCtrl+Shift+C",
159 m_pTerminal, SLOT(copyClipboard()));
160 m_pEditPaste = m_Menu.addAction(QIcon::fromTheme(
"edit-paste"),
161 tr(
"Paste clipboard") +
"\tCtrl+V",
162 m_pTerminal, SLOT(pasteClipboard()));
163 m_Menu.addAction(tr(
"Paste selection"), m_pTerminal, SLOT(pasteSelection()));
164 m_Menu.addSeparator();
165 m_pZoomIn = m_Menu.addAction(QIcon::fromTheme(
"zoom-in"), tr(
"Zoom in") +
"\tCtrl++",
166 m_pTerminal, SLOT(zoomIn()));
167 m_pZoomOut = m_Menu.addAction(QIcon::fromTheme(
"zoom-out"), tr(
"Zoom out") +
"\tCtrl+-",
168 m_pTerminal, SLOT(zoomOut()));
169 m_pZoomOriginal = m_Menu.addAction(QIcon::fromTheme(
"zoom-original"), tr(
"Zoom reset") +
"\tCtrl+0",
170 this, SLOT(slotZoomReset()));
172 m_Menu.addSeparator();
183 m_pActionFind = m_Menu.addAction(
184 QIcon::fromTheme(
"edit-find"), tr(
"Find ......") +
"\tCtrl+F",
185 m_pTerminal, &QTermWidget::toggleShowSearchBar);
187 m_Menu.addSeparator();
188 m_pClear = m_Menu.addAction(QIcon::fromTheme(
"edit-clear"),
189 tr(
"Clear") +
"\tCtrl+R",
190 m_pTerminal, SLOT(clear()));
192 if(m_pActionSettings) {
193 m_Menu.addSeparator();
194 m_Menu.addAction(m_pActionSettings);
207int COperateTerminal::Start()
211 slotUpdateParameter(
this);
214 qCritical(log) <<
"new CBackendThread fail";
221int COperateTerminal::Stop()
223 qDebug(log) << Q_FUNC_INFO;
236 return m_pParameters;
244 Q_ASSERT(!m_pParameters);
246 m_pParameters = pPara;
248 if(!pPara || !m_pTerminal)
return -1;
256 this, SLOT(slotUpdateParameter(
COperate*)));
262void COperateTerminal::slotUpdateParameter(
COperate* pOperate)
264 qDebug(log) << Q_FUNC_INFO;
265 if(
this != pOperate)
return;
270#if QTERMWIDGET_VERSION >= QT_VERSION_CHECK(0, 9, 0)
271 m_pTerminal->setTerminalSizeHint(pPara->GetSizeHint());
272 m_pTerminal->setBidiEnabled(pPara->GetDirectional());
273 m_pTerminal->disableBracketedPasteMode(pPara->GetDisableBracketedPasteMode());
275 m_pTerminal->setTerminalFont(pPara->GetFont());
276 m_pTerminal->setKeyboardCursorShape(pPara->GetCursorShape());
277 m_pTerminal->setColorScheme(pPara->GetColorScheme());
278 m_pTerminal->setScrollBarPosition(pPara->GetScrollBarPosition());
279 m_pTerminal->setFlowControlEnabled(pPara->GetFlowControl());
280 m_pTerminal->setFlowControlWarningEnabled(pPara->GetFlowControlWarning());
281 m_pTerminal->setMotionAfterPasting(pPara->GetMotionAfterPasting());
282 m_pTerminal->setTerminalOpacity(1.0 - pPara->GetTransparency() / 100.0);
283 m_pTerminal->setTerminalBackgroundImage(pPara->GetBackgroupImage());
285 m_pTerminal->setKeyBindings(pPara->GetKeyBindings());
286 m_pTerminal->setHistorySize(pPara->GetHistorySize());
293void COperateTerminal::slotZoomReset()
295 if(!m_pTerminal)
return;
298 m_pTerminal->setTerminalFont(pPara->GetFont());
301void COperateTerminal::slotCustomContextMenu(
const QPoint & pos)
303 if(!m_pTerminal)
return;
309 m_Menu.exec(m_pTerminal->mapToGlobal(pos));
312void COperateTerminal::slotActivateUrl(
const QUrl& url,
bool fromContextMenu)
314 if (QApplication::keyboardModifiers() & Qt::ControlModifier || fromContextMenu) {
315 QDesktopServices::openUrl(url);
319void COperateTerminal::slotTermKeyPressed(QKeyEvent* e)
321 qDebug(log) << Q_FUNC_INFO << e;
324void COperateTerminal::slotFocusIn()
330void COperateTerminal::slotFocusOut()
340const QString COperateTerminal::Details()
343 szDetails =
"- " + tr(
"QTermWidget:") +
" "
344 + QString(
"%1.%2.%3").arg(QTERMWIDGET_VERSION_MAJOR)
345 .arg(QTERMWIDGET_VERSION_MINOR)
346 .arg(QTERMWIDGET_VERSION_PATCH) +
"\n";
358 QString szMsg =
"There is not parameters! "
359 "please first create parameters, "
360 "then call SetParameter() in the ";
361 szMsg += metaObject()->className() + QString(
"::")
362 + metaObject()->className();
363 szMsg += QString(
"() or ") + metaObject()->className()
364 + QString(
"::") +
"Initial()";
365 szMsg +=
" to set the parameters pointer. "
366 "Default set CParameterPlugin for the parameters of operate "
367 "(CParameterOperate or its derived classes) "
368 "See CManager::CreateOperate. "
369 "If you are sure the parameter of operate "
370 "does not need CParameterPlugin. "
371 "Please overload the SetGlobalParameters() in the ";
372 szMsg += QString(metaObject()->className()) +
" . don't set it";
373 qCritical(log) << szMsg.toStdString().c_str();
379int COperateTerminal::WriteTerminal(
const char *buf,
int len)
384 m_pTerminal->receiveData(buf, len);
387 nRet = write(m_pTerminal->getPtySlaveFd(), buf, len);
392void COperateTerminal::SetShotcuts(
bool bEnable)
395 m_pEditCopy->setShortcuts(
396 QList<QKeySequence>() << QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_C)
397 << QKeySequence(Qt::CTRL | Qt::Key_Insert));
398 m_pEditPaste->setShortcuts(QList<QKeySequence>()
399 << QKeySequence(QKeySequence::Paste)
400 << QKeySequence(Qt::SHIFT | Qt::Key_Insert));
401 m_pZoomIn->setShortcut(QKeySequence(QKeySequence::ZoomIn));
402 m_pZoomOut->setShortcut(QKeySequence(QKeySequence::ZoomOut));
403 m_pZoomOriginal->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
404 m_pActionFind->setShortcut(QKeySequence(QKeySequence::Find));
405 m_pClear->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_R));
409 m_pEditCopy->setShortcuts(QList<QKeySequence>());
410 m_pEditPaste->setShortcut(QKeySequence());
411 m_pZoomIn->setShortcut(QKeySequence());
412 m_pZoomOut->setShortcut(QKeySequence());
413 m_pZoomOriginal->setShortcut(QKeySequence());
414 m_pActionFind->setShortcut(QKeySequence());
415 m_pClear->setShortcut(QKeySequence());
423 szId +=
"_" +
Name();
427 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
428 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.