Rabbit Remote Control 0.1.0-de
Loading...
Searching...
No Matches
DlgSettingsTerminal.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QMessageBox>
4#include <QLoggingCategory>
5#include <qtermwidget.h>
6#include <QFileInfo>
7#include <QFileDialog>
8#include <QUrl>
9
10#include "RabbitCommonTools.h"
11#include "DlgSettingsTerminal.h"
12#include "ui_DlgSettingsTerminal.h"
13
14static Q_LOGGING_CATEGORY(log, "Plugin.Terminal.DlgSettings")
15
17 QDialog(parent)
18 , ui(new Ui::CDlgSettingsTerminal)
19 , m_pPara(pPara)
20{
21 ui->setupUi(this);
22 ui->teHelp->hide();
23
24#if defined(Q_OS_UNIX)
25 AddShell("/bin/sh");
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"));
39 QString szHelp;
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);
74 ui->teHelp->show();
75#endif
76
77 ui->leName->setText(m_pPara->GetName());
78
79 QString szShell(m_pPara->GetShell());
80 AddShell(szShell);
81 if(!m_pPara->GetShellName().isEmpty())
82 ui->cbShell->setCurrentText(m_pPara->GetShellName());
83 ui->leParameters->setText(m_pPara->GetShellParameters());
84
85 ui->cbRestoreDirctory->setChecked(m_pPara->GetRestoreDirectory());
86 m_pFrmParaAppearnce =
87 new CParameterTerminalUI(this);
88 if(m_pFrmParaAppearnce) {
89 m_pFrmParaAppearnce->SetParameter(&m_pPara->m_Terminal);
90 ui->tabWidget->addTab(m_pFrmParaAppearnce,
91 m_pFrmParaAppearnce->windowTitle());
92 }
93
94 ui->cbTitleChanged->setChecked(m_pPara->GetEnableTitleChanged());
95
96 foreach(auto c, m_pPara->GetCommands()) {
97 ui->lvCommands->addItem(c);
98 }
99}
100
101CDlgSettingsTerminal::~CDlgSettingsTerminal()
102{
103 qDebug(log) << "CDlgSettingsTerminal::~CDlgSettingsTerminal()";
104 delete ui;
105}
106
107void CDlgSettingsTerminal::on_pbOk_clicked()
108{
109 if(!ui->cbShell->currentData().isValid())
110 {
111 ui->tabWidget->setCurrentIndex(0);
112 ui->cbShell->setFocus();
113 QMessageBox::critical(this, tr("Error"), tr("The shell is empty"));
114 return;
115 }
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();
123
124 m_pPara->SetEnableTitleChanged(ui->cbTitleChanged->isChecked());
125 QStringList cmds;
126 for(int i = 0; i < ui->lvCommands->count(); i++) {
127 auto c = ui->lvCommands->item(i)->data(Qt::DisplayRole).toString();
128 cmds << c;
129 }
130 if(!cmds.isEmpty())
131 m_pPara->SetCommands(cmds);
132
133 accept();
134}
135
136void CDlgSettingsTerminal::on_pbCancel_clicked()
137{
138 this->reject();
139}
140
141int CDlgSettingsTerminal::AddShell(QString szShell, const QString &name)
142{
143 int nIndex = 0;
144 QString szName = name;
145 QFileInfo fi(szShell);
146 if(!fi.exists())
147 {
148 qCritical(log) << "The shell is not exist:" << szShell;
149 return -1;
150 }
151 if(szName.isEmpty())
152 szName = fi.baseName();
153
154 nIndex = ui->cbShell->findText(szName, Qt::MatchFixedString);
155 if(-1 == nIndex) {
156 ui->cbShell->addItem(szName, szShell);
157 nIndex = ui->cbShell->findText(szName, Qt::MatchFixedString);
158 }
159
160 ui->cbShell->setItemData(nIndex, szShell, Qt::ToolTipRole);
161 ui->cbShell->setItemData(nIndex, szShell, Qt::StatusTipRole);
162 ui->cbShell->setCurrentIndex(nIndex);
163
164 return 0;
165}
166
167void CDlgSettingsTerminal::on_pbShellBrowse_clicked()
168{
169 QUrl url = QFileDialog::getOpenFileUrl(
170 this, tr("Select shell"),
171 QUrl::fromLocalFile(ui->cbShell->currentData().toString()));
172 if(url.isEmpty())
173 return;
174 AddShell(url.toLocalFile());
175}
176
177void CDlgSettingsTerminal::on_cbShell_currentIndexChanged(int index)
178{
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");
196}
197
198void CDlgSettingsTerminal::on_pbAddCommand_clicked()
199{
200 QString szCmd = ui->leCommand->text();
201 if(szCmd.isEmpty())
202 return;
203 if(ui->lvCommands->findItems(szCmd, Qt::MatchCaseSensitive).isEmpty())
204 ui->lvCommands->addItem(szCmd);
205 ui->leCommand->setText(QString());
206}
207
208void CDlgSettingsTerminal::on_leCommand_editingFinished()
209{
210 on_pbAddCommand_clicked();
211}
212
213void CDlgSettingsTerminal::on_pbDeleteCommands_clicked()
214{
215 auto item = ui->lvCommands->currentItem();
216 delete item;
217}
virtual int Accept() override
Accept parameters.