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")
26 AddShell(
"/bin/bash");
27 AddShell(
"/bin/dash");
28 AddShell(qgetenv(
"SHELL"));
29#elif defined(Q_OS_WIN)
30 AddShell(
"C:\\Windows\\System32\\cmd.exe");
31 AddShell(
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe");
32 AddShell(
"C:\\Windows\\System32\\cmd.exe",
"msys64 bash shell");
33 AddShell(
"C:\\Windows\\System32\\cmd.exe",
"cygwin64 bash shell");
34 AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2022 Professional x86"));
35 AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2022 Professional x64"));
36 AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2019 Professional x86"));
37 AddShell(
"C:\\Windows\\System32\\cmd.exe", tr(
"VS 2019 Professional x64"));
38 AddShell(qgetenv(
"ComSpec"));
40 szHelp = tr(
"Help:") +
"\n";
41 szHelp += tr(
"- Set bash shell:") +
"\n";
42 szHelp += tr(
" cmd shell with parameters:") +
" \"/k %BASH_PATH% -l\"\n";
43 szHelp += tr(
" eg:") +
"\n";
44 szHelp += tr(
" - msys64 bash shell default path:") +
" \"c:\\msys64\\usr\\bin\\bash.exe\",\n";
45 szHelp += tr(
" So that cmd shell with parameters:") +
" \"/k \"c:\\msys64\\usr\\bin\\bash.exe\" -l\"\n";
46 szHelp += tr(
" - cygwin64 bash shell default path:") +
" \"c:\\cygwin64\\bin\\bash.exe\",\n";
47 szHelp += tr(
" So that cmd shell with parameters:") +
" \"/k \"c:\\cygwin64\\bin\\bash.exe\" -l\"\n";
48 szHelp += tr(
"- Set sh shell:") +
"\n";
49 szHelp += tr(
" cmd shell with parameters:") +
" \"/k %SH_PATH% -l\"\n";
50 szHelp += tr(
" eg:") +
"\n";
51 szHelp += tr(
" - msys64 sh shell default path:") +
" \"c:\\msys64\\usr\\bin\\sh.exe\",\n";
52 szHelp += tr(
" So that cmd shell with parameters:") +
" \"/k \"c:\\msys64\\usr\\bin\\sh.exe\" -l\"\n";
53 szHelp += tr(
" - cygwin64 sh shell default path:") +
" \"c:\\cygwin64\\bin\\sh.exe\",\n";
54 szHelp += tr(
" So that cmd shell with parameters:") +
" \"/k \"c:\\cygwin64\\bin\\sh.exe\" -l\"\n";
55 szHelp += tr(
"- Set dash shell:") +
"\n";
56 szHelp += tr(
" cmd shell with parameters:") +
" \"/k %DASH_PATH% -l\"\n";
57 szHelp += tr(
" eg:") +
"\n";
58 szHelp += tr(
" - msys64 dash shell default path:") +
" \"c:\\msys64\\usr\\bin\\dash.exe\",\n";
59 szHelp += tr(
" So that cmd shell with parameters:") +
" \"/k \"c:\\msys64\\usr\\bin\\dash.exe\" -l\"\n";
60 szHelp += tr(
" - cygwin64 dash shell default path:") +
" \"c:\\cygwin64\\bin\\dash.exe\",\n";
61 szHelp += tr(
" So that cmd shell with parameters:") +
" \"/k \"c:\\cygwin64\\bin\\dash.exe\" -l\"\n";
62 szHelp += tr(
"- Set VS sdk shell:") +
"\n";
63 szHelp += tr(
" cmd shell with parameters:") +
" \"/k %SDK_PATH%\"\n";
64 szHelp += tr(
" eg:") +
"\n";
65 szHelp += tr(
" - VS 2022 Professional x64 default path:") +
" \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
66 szHelp += tr(
" So that cmd shell with parameters:") +
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n";
67 szHelp += tr(
" - VS 2022 Professional x86 default path:") +
" \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
68 szHelp += tr(
" So that cmd shell with parameters:") +
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86\n";
69 szHelp += tr(
" - VS 2019 Professional x64 default path:") +
" \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
70 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";
71 szHelp += tr(
" - VS 2019 Professional x86 default path:") +
" \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\",\n";
72 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";
73 ui->teHelp->setMarkdown(szHelp);
77 ui->leName->setText(m_pPara->GetName());
79 QString szShell(m_pPara->GetShell());
81 if(!m_pPara->GetShellName().isEmpty())
82 ui->cbShell->setCurrentText(m_pPara->GetShellName());
83 ui->leParameters->setText(m_pPara->GetShellParameters());
85 ui->cbRestoreDirctory->setChecked(m_pPara->GetRestoreDirectory());
88 if(m_pFrmParaAppearnce) {
89 m_pFrmParaAppearnce->SetParameter(&m_pPara->m_Terminal);
90 ui->tabWidget->addTab(m_pFrmParaAppearnce,
91 m_pFrmParaAppearnce->windowTitle());
94 ui->cbTitleChanged->setChecked(m_pPara->GetEnableTitleChanged());
96 foreach(
auto c, m_pPara->GetCommands()) {
97 ui->lvCommands->addItem(c);
101CDlgSettingsTerminal::~CDlgSettingsTerminal()
103 qDebug(log) <<
"CDlgSettingsTerminal::~CDlgSettingsTerminal()";
107void CDlgSettingsTerminal::on_pbOk_clicked()
109 if(!ui->cbShell->currentData().isValid())
111 ui->tabWidget->setCurrentIndex(0);
112 ui->cbShell->setFocus();
113 QMessageBox::critical(
this, tr(
"Error"), tr(
"The shell is empty"));
116 m_pPara->SetName(ui->leName->text());
117 m_pPara->SetShell(ui->cbShell->currentData().toString());
118 m_pPara->SetShellName(ui->cbShell->currentText());
119 m_pPara->SetShellParameters(ui->leParameters->text());
120 m_pPara->SetRestoreDirectory(ui->cbRestoreDirctory->isChecked());
121 if(m_pFrmParaAppearnce)
122 m_pFrmParaAppearnce->
Accept();
124 m_pPara->SetEnableTitleChanged(ui->cbTitleChanged->isChecked());
126 for(
int i = 0; i < ui->lvCommands->count(); i++) {
127 auto c = ui->lvCommands->item(i)->data(Qt::DisplayRole).toString();
131 m_pPara->SetCommands(cmds);
136void CDlgSettingsTerminal::on_pbCancel_clicked()
141int CDlgSettingsTerminal::AddShell(QString szShell,
const QString &name)
144 QString szName = name;
145 QFileInfo fi(szShell);
148 qCritical(log) <<
"The shell is not exist:" << szShell;
152 szName = fi.baseName();
154 nIndex = ui->cbShell->findText(szName, Qt::MatchFixedString);
156 ui->cbShell->addItem(szName, szShell);
157 nIndex = ui->cbShell->findText(szName, Qt::MatchFixedString);
160 ui->cbShell->setItemData(nIndex, szShell, Qt::ToolTipRole);
161 ui->cbShell->setItemData(nIndex, szShell, Qt::StatusTipRole);
162 ui->cbShell->setCurrentIndex(nIndex);
167void CDlgSettingsTerminal::on_pbShellBrowse_clicked()
169 QUrl url = QFileDialog::getOpenFileUrl(
170 this, tr(
"Select shell"),
171 QUrl::fromLocalFile(ui->cbShell->currentData().toString()));
174 AddShell(url.toLocalFile());
177void CDlgSettingsTerminal::on_cbShell_currentIndexChanged(
int index)
179 QString szData, szName;
180 szData = ui->cbShell->itemData(index).toString();
181 szName = ui->cbShell->itemText(index);
182 ui->cbShell->setToolTip(szData);
183 ui->cbShell->setStatusTip(szData);
184 if(
"msys64 bash shell" == szName && ui->leParameters->text().isEmpty())
185 ui->leParameters->setText(
"/k c:\\msys64\\usr\\bin\\bash.exe -l");
186 if(
"cygwin64 bash shell" == szName && ui->leParameters->text().isEmpty())
187 ui->leParameters->setText(
"/k c:\\cygwin64\\bin\\bash.exe -l");
188 if(tr(
"VS 2022 Professional x64") == szName && ui->leParameters->text().isEmpty())
189 ui->leParameters->setText(
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64");
190 if(tr(
"VS 2022 Professional x86") == szName && ui->leParameters->text().isEmpty())
191 ui->leParameters->setText(
"/k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86");
192 if(tr(
"VS 2019 Professional x64") == szName && ui->leParameters->text().isEmpty())
193 ui->leParameters->setText(
"/k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64");
194 if(tr(
"VS 2019 Professional x86") == szName && ui->leParameters->text().isEmpty())
195 ui->leParameters->setText(
"/k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x86");
198void CDlgSettingsTerminal::on_pbAddCommand_clicked()
200 QString szCmd = ui->leCommand->text();
203 if(ui->lvCommands->findItems(szCmd, Qt::MatchCaseSensitive).isEmpty())
204 ui->lvCommands->addItem(szCmd);
205 ui->leCommand->setText(QString());
208void CDlgSettingsTerminal::on_leCommand_editingFinished()
210 on_pbAddCommand_clicked();
213void CDlgSettingsTerminal::on_pbDeleteCommands_clicked()
215 auto item = ui->lvCommands->currentItem();
virtual int Accept() override
Accept parameters.