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.