3#include <QDesktopServices>
4#include <QLoggingCategory>
9#include "DlgSettingsTerminal.h"
12static Q_LOGGING_CATEGORY(log,
"Plugin.Terminal.Operate")
16 , m_pOpenFolderWithExplorer(
nullptr)
17 , m_pCopyToClipboard(
nullptr)
19 qDebug(log) << Q_FUNC_INFO;
20 SetParameter(&m_Parameters);
23CTerminal::~CTerminal()
25 qDebug(log) << Q_FUNC_INFO;
35 slotUpdateParameter(
this);
37 bool check = connect(m_pTerminal, &QTermWidget::titleChanged,
39 qDebug(log) <<
"Title changed:" << m_pTerminal->title()
40 <<
"; Working directory:"
41 << m_pTerminal->workingDirectory();
42 if(m_Parameters.GetEnableTitleChanged()) {
43 m_pTerminal->setWindowTitle(m_pTerminal->title());
46 if(m_Parameters.GetRestoreDirectory()) {
47 if(!m_pTerminal->workingDirectory().isEmpty())
48 m_Parameters.SetLasterDirectory(m_pTerminal->workingDirectory());
52 if(!m_Parameters.GetShell().isEmpty())
53 m_pTerminal->setShellProgram(m_Parameters.GetShell());
54 if(!m_Parameters.GetShellParameters().isEmpty())
55 m_pTerminal->setArgs(QStringList() << m_Parameters.GetShellParameters());
56 qDebug(log) <<
"Start:" << m_Parameters.GetShell() << m_Parameters.GetShellParameters();
57 m_pTerminal->startShellProgram();
58 if(m_Parameters.GetRestoreDirectory() && !m_Parameters.GetLasterDirectory().isEmpty())
59 m_pTerminal->sendText(
"cd " + m_Parameters.GetLasterDirectory() +
"\r");
60 if(!m_Parameters.GetCommands().isEmpty()) {
61 foreach (
auto c, m_Parameters.GetCommands())
62 m_pTerminal->sendText(c +
"\r");
95 m_pOpenFolderWithExplorer = m_Menu.addAction(
96 QIcon::fromTheme(
"folder-open"),
97 tr(
"Open working directory with file explorer") +
"\tCtrl+O",
98 QKeySequence(QKeySequence::Open),
100 QDesktopServices::openUrl(
101 QUrl::fromLocalFile(m_pTerminal->workingDirectory()));
103 m_Menu.insertAction(m_pActionFind, m_pOpenFolderWithExplorer);
104 m_pCopyToClipboard = m_Menu.addAction(
105 QIcon::fromTheme(
"edit-copy"),
106 tr(
"Copy working directory to clipboard"),
108 if(!m_pTerminal)
return;
109 QClipboard* pClipboard = QApplication::clipboard();
110 if(!pClipboard)
return;
111 pClipboard->setText(m_pTerminal->workingDirectory());
113 m_Menu.insertAction(m_pActionFind, m_pCopyToClipboard);
119 if(!m_Parameters.GetName().isEmpty())
120 return m_Parameters.GetName();
121 if(!m_Parameters.GetShellName().isEmpty())
126void CTerminal::SetShotcuts(
bool bEnable)
128 COperateTerminal::SetShotcuts(bEnable);
130 m_pOpenFolderWithExplorer->setShortcut(QKeySequence(QKeySequence::Open));
133 m_pOpenFolderWithExplorer->setShortcut(QKeySequence());
134 m_pCopyToClipboard->setShortcut(QKeySequence());
140 QString szDescription;
141 if(!
Name().isEmpty())
142 szDescription = tr(
"Name: ") +
Name() +
"\n";
145 szDescription += tr(
"Type: ") +
GetTypeName() +
"\n";
148 szDescription += tr(
"Protocol: ") +
Protocol();
150 if(!
GetPlugin()->DisplayName().isEmpty())
153 szDescription +=
"\n";
156 if(!m_Parameters.GetShellName().isEmpty())
157 szDescription += tr(
"Shell name: ") + m_Parameters.GetShellName() +
"\n";
158 if(!m_Parameters.GetShell().isEmpty())
159 szDescription += tr(
"Shell path: ") + m_Parameters.GetShell() +
"\n";
160 if(!m_Parameters.GetShellParameters().isEmpty())
161 szDescription += tr(
"Shell parameters: ") + m_Parameters.GetShellParameters() +
"\n";
162 if(m_Parameters.GetCommands().size() > 0) {
163 szDescription += tr(
"Start commands:") +
"\n";
164 foreach(
auto cmd, m_Parameters.GetCommands())
165 szDescription +=
" " + cmd +
"\n";
167 if(GetSecurityLevel() != SecurityLevel::No)
168 szDescription += tr(
"Security level: ") + GetSecurityLevelString() +
"\n";
173 return szDescription;
178 bool check = connect(&m_Parameters, &CTerminalParameter::sigEnableTitleChanged,
179 this, [&](
bool changed) {
181 slotTerminalTitleChanged();
189void CTerminal::slotTerminalTitleChanged()
191 if(!m_pTerminal)
return;
Terminal operate interface.
virtual int Initial() override
Initial parameters and resource.
virtual const QString Name() override
Name.
virtual int SetParameter(CParameterTerminalBase *pPara)
Set parameter pointer.
void sigFinished()
Successful disconnection signal.
void sigRunning()
Start success signal.
virtual const QString Protocol() const
Protocol.
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
void sigUpdateName(const QString &szName)
virtual const QString GetTypeName() const
Get type name.
virtual const QString DisplayName() const
The plugin display name.
virtual const QString Description() const =0
Plugin description.
virtual int Initial() override
Initial parameters and resource.
virtual int SetParameter(CParameterTerminalBase *pPara) override
Set parameter pointer.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
virtual const QString Description() override
Description.
virtual const QString Name() override
Name.
virtual CBackend * InstanceBackend() override
New CBackend.