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;
 
  195CStats* CTerminal::GetStats()
 
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.