RabbitCommon v2.3.4
Loading...
Searching...
No Matches
MainWindow.cpp
1
5#include "MainWindow.h"
6#include "ui_MainWindow.h"
7
8#ifdef HAVE_ABOUT
9#include "DlgAbout.h"
10#endif
11#ifdef HAVE_UPDATE
12#include "FrmUpdater.h"
13#endif
14#ifdef BUILD_QUIWidget
15#include "QUIWidget/QUIWidget.h"
16#endif
17#include "RabbitCommonTools.h"
18#include "RabbitCommonEncrypt.h"
19#ifdef HAVE_RABBITCOMMON_GUI
20#include "DockFolderBrowser.h"
21#include "FileBrowser.h"
22#endif
23#include "RabbitCommonDir.h"
24
25#include <QMetaObject>
26#include <QDir>
27#include <QDesktopServices>
28#include <QDockWidget>
29#include <QFileDialog>
30#include <QLoggingCategory>
31#include <QThread>
32//#include <source_location>
33
40#if defined(Q_OS_WIN)
41// See: https://learn.microsoft.com/zh-cn/cpp/preprocessor/predefined-macros?view=msvc-170
42#define __FUN__ Q_FUNC_INFO
43#else
44#define __FUN__ __PRETTY_FUNCTION__
45#endif
46
47Q_LOGGING_CATEGORY(log, "RabbitCommon.MainWindow")
48
49MainWindow::MainWindow(QWidget *parent) :
50 QMainWindow(parent),
51 ui(new Ui::MainWindow),
52 m_pDownload(nullptr)
53{
54 ui->setupUi(this);
55
56 //https://en.cppreference.com/w/cpp/utility/source_location
57 qDebug(log) << "\n"
58 << "Q_FUNC_INFO " << Q_FUNC_INFO << "\n"
59 << "__func__ " << __func__ << "\n"
60 << "Q_FUNC_INFO " << Q_FUNC_INFO << "\n"
61#if defined(_MSC_VER)
62 << "__FUNCDNAME__ " << __FUNCDNAME__ << "\n"
63 << "__FUNCSIG__ " << __FUNCSIG__ << "\n"
64#else
65 << "__PRETTY_FUNCTION__ " << __PRETTY_FUNCTION__ << "\n"
66#endif
67 ;
68 // std::source_location location = std::source_location::current();
69 // << "std::source_location" << location.function_name()
70 // ;
71
72#ifdef HAVE_RABBITCOMMON_GUI
73 RabbitCommon::CTools::AddStyleMenu(ui->menuTools);
74 ui->menuTools->addMenu(RabbitCommon::CTools::GetLogMenu(this));
75 ui->tbLog->setMenu(RabbitCommon::CTools::GetLogMenu(this));
76
77 // [Use CDockFolderBrowser]
78 CDockFolderBrowser* pDock = new CDockFolderBrowser(tr("Folder browser"), this);
79 pDock->setRootPath(RabbitCommon::CDir::Instance()->GetDirIcons(true));
80 qDebug(log) << pDock->rootPath();
81 addDockWidget(Qt::LeftDockWidgetArea, pDock);
82 // Add the action of dock to menu
83 ui->menuTools->addAction(pDock->toggleViewAction());
84 // [Use CDockFolderBrowser]
85#endif
86
87#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
88 ui->leCommand->setText("mkdir");
89 ui->lePara->setText("-p /opt/RabbitCommonAdminAuthoriseTest");
90#endif
91#if defined(Q_OS_WIN)
92 ui->leCommand->setText("regedit");
93#endif
94}
95
96MainWindow::~MainWindow()
97{
98 qApp->quit();
99 delete ui;
100}
101
102void MainWindow::on_actionAbout_triggered()
103{
104#ifdef HAVE_ABOUT
105 CDlgAbout* dlg = new CDlgAbout();
106 dlg->setAttribute(Qt::WA_QuitOnClose, true);
107 RC_SHOW_WINDOW(dlg);
108#endif
109}
110
111void MainWindow::on_actionUpdate_triggered()
112{
113#ifdef HAVE_UPDATE
114 // [Use CFrmUpdater]
115 CFrmUpdater* m_pfrmUpdater = new CFrmUpdater();
116 QIcon icon = windowIcon();
117 if(!icon.isNull()) {
118 auto sizeList = icon.availableSizes();
119 if(!sizeList.isEmpty()) {
120 QPixmap p = icon.pixmap(*sizeList.begin());
121 m_pfrmUpdater->SetTitle(p.toImage());
122 }
123 }
124 m_pfrmUpdater->SetInstallAutoStartup();
125 RC_SHOW_WINDOW(m_pfrmUpdater);
126 // [Use CFrmUpdater]
127#endif
128#ifdef BUILD_QUIWidget
129 QUIWidget::setFormInCenter(m_pfrmUpdater);
130#endif
131}
132
133void MainWindow::on_pushButton_clicked()
134{
135 //RabbitCommon::CTools::GenerateDesktopFile(QDir::currentPath());
136 QStringList paras;
137 if(!ui->lePara->text().isEmpty())
138 paras = ui->lePara->text().split(' ');
139 qDebug(log) << "RabbitCommon::CTools::executeByRoot("
140 + ui->leCommand->text() + "," + ui->lePara->text() + ");"
141 << RabbitCommon::CTools::executeByRoot(ui->leCommand->text(), paras);
142}
143
144void MainWindow::on_pbEncrypt_clicked()
145{
147 e.SetPassword(ui->lePassword->text().toStdString().c_str());
148 QByteArray out;
149 int nRet = e.Encode(ui->teInput->toPlainText(), out);
150 if(!nRet)
151 {
152 QString szOut;
153 nRet = e.Dencode(out, szOut);
154 if(nRet)
155 {
156 szOut = tr("Encrypt:") + QString(out) + "\n" + tr("Source:") + szOut;
157 ui->teOutput->setPlainText(szOut);
158 }
159 }
160}
161
162void MainWindow::on_pbAddFile_clicked()
163{
164 ui->cmbDownloadFiles->addItem(ui->cmbDownloadFiles->currentText());
165}
166
167void MainWindow::on_pbDownload_clicked()
168{
169 if(m_pDownload)
170 m_pDownload->deleteLater();
171 QVector<QUrl> urls;
172 for(int i = 0; i < ui->cmbDownloadFiles->count(); i++)
173 {
174 urls.push_back(QUrl(ui->cmbDownloadFiles->itemText(i)));
175 }
176 m_pDownload = new RabbitCommon::CDownload();
177 bool check = connect(m_pDownload, SIGNAL(sigFinished(const QString)),
178 this, SLOT(slotDownloadFile(const QString)));
179 Q_ASSERT(check);
180 check = connect(m_pDownload, SIGNAL(sigError(int, const QString)),
181 this, SLOT(slotDownloadError(int, const QString)));
182 Q_ASSERT(check);
183 m_pDownload->Start(urls);
184}
185
186void MainWindow::slotDownloadFile(const QString szFile)
187{
188 qDebug(log) << "Download file:" << szFile;
189 QDesktopServices::openUrl(QUrl::fromLocalFile(szFile));
190}
191
192void MainWindow::slotDownloadError(int nErr, const QString szErr)
193{
194 qDebug(log) << "Download file error:" << nErr << szErr;
195}
196
197void MainWindow::on_actionFolder_browser_triggered()
198{
200 RC_SHOW_WINDOW(&fb);
201}
202
203class CCoreThread : public QThread
204{
205public:
206 CCoreThread(QObject *parent = nullptr) : QThread(parent)
207 {
208 connect(this, SIGNAL(destroyed(QObject*)),
209 this, SLOT(deleteLater()));
210 }
211 virtual ~CCoreThread()
212 {
213 qDebug(log) << "CCoreThread::~CCoreThread()";
214 }
215
216 // QThread interface
217protected:
218 virtual void run() override;
219};
220
221void CCoreThread::run()
222{
223#if defined(Q_OS_WIN)
224 strcpy(0,0);
225#else
226 free((void*)11);
227#endif
228}
229
230void MainWindow::on_pbThreadCore_clicked()
231{
232 CCoreThread* pThread = new CCoreThread(this);
233 pThread->start();
234}
235
236void MainWindow::on_pbGenerateCoreFile_clicked()
237{
238#if defined(Q_OS_WIN)
239 strcpy(0,0);
240#else
241 free((void*)11);
242#endif
243}
244
245void MainWindow::on_pbExecuteUpdate_clicked()
246{
247#ifdef HAVE_UPDATE
248 int nRet = 0;
249 CFrmUpdater updater;
250 bool bRet = QMetaObject::invokeMethod(
251 &updater,
252 "Execute",
253 Qt::DirectConnection,
254 Q_RETURN_ARG(int, nRet),
255 Q_ARG(QString, ui->leUpdateFIle->text()));
256 if(!bRet || nRet) {
257 qCritical(log) << "Execute update fail." << nRet;
258 }
259#endif
260}
261
262void MainWindow::on_pbUpdateBrowse_clicked()
263{
264 QString szFile = QFileDialog::getOpenFileName(this);
265 if(szFile.isEmpty())
266 return;
267 ui->leUpdateFIle->setText(szFile);
268}
About dialog.
Definition DlgAbout.h:72
File browser dialog.
Definition FileBrowser.h:75
void setRootPath(const QString dir)
Set root path.
QString rootPath() const
Get root path.
Updater.
Definition FrmUpdater.h:77
int SetTitle(QImage icon=QImage(), const QString &szTitle=QString())
SetTitle.
int SetInstallAutoStartup(bool bAutoStart=true)
Set install and automation startup.
Download the same file from multiple URLs.
Definition Download.h:48
int Start(QVector< QUrl > urls, QString szFileName=QString(), bool bSequence=false)
Definition Download.cpp:22
int Encode(const char *pIn, const int &inLen, char **pOut, int &outLen)
int Dencode(const char *pIn, const int &inLen, char **pOut, int &outLen)
static bool executeByRoot(const QString &program, const QStringList &arguments=QStringList())
executeByRoot: Run with administrator privileges