4#include <QLoggingCategory> 
    5#include <qtermwidget.h> 
   10#include "RabbitCommonTools.h" 
   11#include "DlgSettingsTerminal.h" 
   12#include "ui_DlgSettingsTerminal.h" 
   14static Q_LOGGING_CATEGORY(log, 
"Plugin.Terminal.DlgSettings")
 
   27    AddShell(
"/bin/bash");
 
   28    AddShell(
"/bin/dash");
 
   29    AddShell(qgetenv(
"SHELL"));
 
   30#elif defined(Q_OS_WIN) 
   31    AddShell(
"C:\\Windows\\System32\\cmd.exe");
 
   32    AddShell(
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe");
 
   34    if(fi.exists(
"c:\\msys64\\usr\\bin\\bash.exe"))
 
   35        AddShell(
"C:\\Windows\\System32\\cmd.exe", 
"msys64 bash shell");
 
   36    if(fi.exists(
"c:\\cygwin64\\bin\\bash.exe"))
 
   37        AddShell(
"C:\\Windows\\System32\\cmd.exe", 
"cygwin64 bash shell");
 
   38    if(fi.exists(
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat")) {
 
   39        AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2022 Community x86"));
 
   40        AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2022 Community x64"));
 
   42    if(fi.exists(
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat")) {
 
   43        AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2022 Professional x86"));
 
   44        AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2022 Professional x64"));
 
   46    if(fi.exists(
"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat")) {
 
   47        AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2019 Professional x86"));
 
   48        AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2019 Professional x64"));
 
   50    AddShell(qgetenv(
"ComSpec"));
 
   52    szHelp = tr(
"Help:") + 
"\n";
 
   53    szHelp += tr(
"- Set bash shell:") + 
"\n";
 
   54    szHelp += tr(
"  cmd shell with parameters:") + 
" \"/k %BASH_PATH% -l\"\n";
 
   55    szHelp += tr(
"  eg:") + 
"\n";
 
   56    szHelp += tr(
"    - msys64 bash shell default path:") + 
" \"c:\\msys64\\usr\\bin\\bash.exe\",\n";
 
   57    szHelp += tr(
"      So that cmd shell with parameters:") + 
" \"/k \"c:\\msys64\\usr\\bin\\bash.exe\" -l\"\n";
 
   58    szHelp += tr(
"    - cygwin64 bash shell default path:") + 
" \"c:\\cygwin64\\bin\\bash.exe\",\n";
 
   59    szHelp += tr(
"      So that cmd shell with parameters:") + 
" \"/k \"c:\\cygwin64\\bin\\bash.exe\" -l\"\n";
 
   60    szHelp += tr(
"- Set sh shell:") + 
"\n";
 
   61    szHelp += tr(
"  cmd shell with parameters:") + 
" \"/k %SH_PATH% -l\"\n";
 
   62    szHelp += tr(
"  eg:") + 
"\n";
 
   63    szHelp += tr(
"    - msys64 sh shell default path:") + 
" \"c:\\msys64\\usr\\bin\\sh.exe\",\n";
 
   64    szHelp += tr(
"      So that cmd shell with parameters:") + 
" \"/k \"c:\\msys64\\usr\\bin\\sh.exe\" -l\"\n";
 
   65    szHelp += tr(
"    - cygwin64 sh shell default path:") + 
" \"c:\\cygwin64\\bin\\sh.exe\",\n";
 
   66    szHelp += tr(
"      So that cmd shell with parameters:") + 
" \"/k \"c:\\cygwin64\\bin\\sh.exe\" -l\"\n";
 
   67    szHelp += tr(
"- Set dash shell:") + 
"\n";
 
   68    szHelp += tr(
"  cmd shell with parameters:") + 
" \"/k %DASH_PATH% -l\"\n";
 
   69    szHelp += tr(
"  eg:") + 
"\n";
 
   70    szHelp += tr(
"    - msys64 dash shell default path:") + 
" \"c:\\msys64\\usr\\bin\\dash.exe\",\n";
 
   71    szHelp += tr(
"      So that cmd shell with parameters:") + 
" \"/k \"c:\\msys64\\usr\\bin\\dash.exe\" -l\"\n";
 
   72    szHelp += tr(
"    - cygwin64 dash shell default path:") + 
" \"c:\\cygwin64\\bin\\dash.exe\",\n";
 
   73    szHelp += tr(
"      So that cmd shell with parameters:") + 
" \"/k \"c:\\cygwin64\\bin\\dash.exe\" -l\"\n";
 
   74    szHelp += tr(
"- Set VS sdk shell:") + 
"\n";
 
   75    szHelp += tr(
"  cmd shell with parameters:") + 
" \"/k %SDK_PATH%\"\n";
 
   76    szHelp += tr(
"  eg:") + 
"\n";
 
   77    szHelp += tr(
"    - VS 2022 Community x64 default path:") + 
" \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
 
   78    szHelp += tr(
"      So that cmd shell with parameters:") + 
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n";
 
   79    szHelp += tr(
"    - VS 2022 Community x86 default path:") + 
" \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
 
   80    szHelp += tr(
"      So that cmd shell with parameters:") + 
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86\n";
 
   81    szHelp += tr(
"    - VS 2022 Professional x64 default path:") + 
" \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
 
   82    szHelp += tr(
"      So that cmd shell with parameters:") + 
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n";
 
   83    szHelp += tr(
"    - VS 2022 Professional x86 default path:") + 
" \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
 
   84    szHelp += tr(
"      So that cmd shell with parameters:") + 
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86\n";
 
   85    szHelp += tr(
"    - VS 2019 Professional x64 default path:") + 
" \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
 
   86    szHelp += tr(
"      So that cmd shell with parameters:") + 
"/k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n";
 
   87    szHelp += tr(
"    - VS 2019 Professional x86 default path:") + 
" \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
 
   88    szHelp += tr(
"      So that cmd shell with parameters:") + 
"/k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86\n";
 
   89    ui->teHelp->setMarkdown(szHelp);
 
   93    ui->leName->setText(m_pPara->GetName());
 
   95    QString szShell(m_pPara->GetShell());
 
   98    if(!m_pPara->GetShellName().isEmpty()) {
 
   99        ui->cbShellName->setCurrentText(m_pPara->GetShellName());
 
  100        int nIndex = ui->cbShellName->findText(m_pPara->GetShellName(), Qt::MatchFixedString);
 
  102            ui->cbShellName->setCurrentIndex(nIndex);
 
  104    ui->leShellPath->setText(m_pPara->GetShell());
 
  105    ui->leParameters->setText(m_pPara->GetShellParameters());
 
  107    ui->cbRestoreDirctory->setChecked(m_pPara->GetRestoreDirectory());
 
  108    m_pFrmParaAppearnce =
 
  110    if(m_pFrmParaAppearnce) {
 
  111        m_pFrmParaAppearnce->SetParameter(&m_pPara->m_Terminal);
 
  112        ui->tabWidget->addTab(m_pFrmParaAppearnce,
 
  113                          m_pFrmParaAppearnce->windowTitle());
 
  116    ui->cbTitleChanged->setChecked(m_pPara->GetEnableTitleChanged());
 
  118    foreach(
auto c, m_pPara->GetCommands()) {
 
  119        ui->lvCommands->addItem(c);
 
  123CDlgSettingsTerminal::~CDlgSettingsTerminal()
 
  125    qDebug(log) << 
"CDlgSettingsTerminal::~CDlgSettingsTerminal()";
 
  129void CDlgSettingsTerminal::on_pbOk_clicked()
 
  131    if(ui->leShellPath->text().isEmpty())
 
  133        ui->tabWidget->setCurrentIndex(0);
 
  134        ui->leShellPath->setFocus();
 
  135        QMessageBox::critical(
this, tr(
"Error"), tr(
"The shell is empty"));
 
  138    m_pPara->SetName(ui->leName->text());
 
  139    m_pPara->SetShellName(ui->cbShellName->currentText());
 
  140    m_pPara->SetShell(ui->leShellPath->text());
 
  141    m_pPara->SetShellParameters(ui->leParameters->text());
 
  142    m_pPara->SetRestoreDirectory(ui->cbRestoreDirctory->isChecked());
 
  143    if(m_pFrmParaAppearnce)
 
  144        m_pFrmParaAppearnce->
Accept();
 
  146    m_pPara->SetEnableTitleChanged(ui->cbTitleChanged->isChecked());
 
  148    for(
int i = 0; i < ui->lvCommands->count(); i++) {
 
  149        auto c = ui->lvCommands->item(i)->data(Qt::DisplayRole).toString();
 
  153        m_pPara->SetCommands(cmds);
 
  158void CDlgSettingsTerminal::on_pbCancel_clicked()
 
  163int CDlgSettingsTerminal::AddShell(QString szShell, 
const QString &name)
 
  166    QString szName = name;
 
  167    QFileInfo fi(szShell);
 
  170        qCritical(log) << 
"The shell is not exist:" << szShell;
 
  174        szName = fi.baseName();
 
  176    nIndex = ui->cbShellName->findText(szName, Qt::MatchFixedString);
 
  178        ui->cbShellName->addItem(szName, szShell);
 
  179        nIndex = ui->cbShellName->findText(szName, Qt::MatchFixedString);
 
  182    ui->cbShellName->setItemData(nIndex, szShell, Qt::ToolTipRole);
 
  183    ui->cbShellName->setItemData(nIndex, szShell, Qt::StatusTipRole);
 
  184    ui->cbShellName->setCurrentIndex(nIndex);
 
  189void CDlgSettingsTerminal::on_pbShellBrowse_clicked()
 
  191    QUrl url = QFileDialog::getOpenFileUrl(
 
  192        this, tr(
"Select shell"),
 
  193        QUrl::fromLocalFile(ui->leShellPath->text()));
 
  196    AddShell(url.toLocalFile());
 
  199void CDlgSettingsTerminal::on_cbShellName_currentIndexChanged(
int index)
 
  201    QString szData, szName;
 
  202    szData = ui->cbShellName->itemData(index).toString();
 
  203    szName = ui->cbShellName->itemText(index);
 
  204    ui->cbShellName->setToolTip(szData);
 
  205    ui->cbShellName->setStatusTip(szData);
 
  206    ui->leShellPath->setText(szData);
 
  207    ui->leParameters->setText(
"");
 
  209    if(
"msys64 bash shell" == szName)
 
  210        ui->leParameters->setText(
"/k c:\\msys64\\usr\\bin\\bash.exe -l");
 
  211    if(
"cygwin64 bash shell" == szName)
 
  212        ui->leParameters->setText(
"/k c:\\cygwin64\\bin\\bash.exe -l");
 
  213    if(tr(
"VS 2022 Community x64") == szName)
 
  214        ui->leParameters->setText(
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64");
 
  215    if(tr(
"VS 2022 Community x86") == szName)
 
  216        ui->leParameters->setText(
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86");
 
  217    if(tr(
"VS 2022 Professional x64") == szName)
 
  218        ui->leParameters->setText(
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64");
 
  219    if(tr(
"VS 2022 Professional x86") == szName)
 
  220        ui->leParameters->setText(
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86");
 
  221    if(tr(
"VS 2019 Professional x64") == szName)
 
  222        ui->leParameters->setText(
"/k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64");
 
  223    if(tr(
"VS 2019 Professional x86") == szName)
 
  224        ui->leParameters->setText(
"/k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86");
 
  226    if(m_pPara->GetShellName() == szName)
 
  227        ui->leParameters->setText(m_pPara->GetShellParameters());
 
  230void CDlgSettingsTerminal::on_pbAddCommand_clicked()
 
  232    QString szCmd = ui->leCommand->text();
 
  235    if(ui->lvCommands->findItems(szCmd, Qt::MatchCaseSensitive).isEmpty())
 
  236        ui->lvCommands->addItem(szCmd);
 
  237    ui->leCommand->setText(QString());
 
  240void CDlgSettingsTerminal::on_leCommand_editingFinished()
 
  242    on_pbAddCommand_clicked();
 
  245void CDlgSettingsTerminal::on_pbDeleteCommands_clicked()
 
  247    auto item = ui->lvCommands->currentItem();
 
  251void CDlgSettingsTerminal::on_pbHelp_clicked()
 
  253    if(ui->teHelp->isVisible())
 
  256        ui->pbHelp->setText(tr(
"Help(&H)"));
 
  259        ui->pbHelp->setText(tr(
"Hide help(&H)"));
 
virtual int Accept() override
Accept parameters.