RabbitCommon v2.3.3
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 <QDir>
26#include <QDesktopServices>
27#include <QDockWidget>
28#include <QFileDialog>
29#include <QLoggingCategory>
30#include <QThread>
31//#include <source_location>
32
39#if defined(Q_OS_WIN)
40// See: https://learn.microsoft.com/zh-cn/cpp/preprocessor/predefined-macros?view=msvc-170
41#define __FUN__ Q_FUNC_INFO
42#else
43#define __FUN__ __PRETTY_FUNCTION__
44#endif
45
46Q_LOGGING_CATEGORY(log, "RabbitCommon.MainWindow")
47
48MainWindow::MainWindow(QWidget *parent) :
49 QMainWindow(parent),
50 ui(new Ui::MainWindow),
51 m_pDownload(nullptr)
52{
53 ui->setupUi(this);
54
55 //https://en.cppreference.com/w/cpp/utility/source_location
56 qDebug(log) << "\n"
57 << "Q_FUNC_INFO " << Q_FUNC_INFO << "\n"
58 << "__func__ " << __func__ << "\n"
59 << "Q_FUNC_INFO " << Q_FUNC_INFO << "\n"
60#if defined(_MSC_VER)
61 << "__FUNCDNAME__ " << __FUNCDNAME__ << "\n"
62 << "__FUNCSIG__ " << __FUNCSIG__ << "\n"
63#else
64 << "__PRETTY_FUNCTION__ " << __PRETTY_FUNCTION__ << "\n"
65#endif
66 ;
67 // std::source_location location = std::source_location::current();
68 // << "std::source_location" << location.function_name()
69 // ;
70
71#ifdef HAVE_RABBITCOMMON_GUI
72 RabbitCommon::CTools::AddStyleMenu(ui->menuTools);
73 ui->menuTools->addMenu(RabbitCommon::CTools::GetLogMenu(this));
74 ui->tbLog->setMenu(RabbitCommon::CTools::GetLogMenu(this));
75
76 // [Use CDockFolderBrowser]
77 CDockFolderBrowser* pDock = new CDockFolderBrowser(tr("Folder browser"), this);
78 pDock->setRootPath(RabbitCommon::CDir::Instance()->GetDirIcons(true));
79 qDebug(log) << pDock->rootPath();
80 addDockWidget(Qt::LeftDockWidgetArea, pDock);
81 // Add the action of dock to menu
82 ui->menuTools->addAction(pDock->toggleViewAction());
83 // [Use CDockFolderBrowser]
84#endif
85
86#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
87 ui->leCommand->setText("mkdir");
88 ui->lePara->setText("-p /opt/RabbitCommonAdminAuthoriseTest");
89#endif
90#if defined(Q_OS_WIN)
91 ui->leCommand->setText("regedit");
92#endif
93}
94
95MainWindow::~MainWindow()
96{
97 qApp->quit();
98 delete ui;
99}
100
101void MainWindow::on_actionAbout_triggered()
102{
103#ifdef HAVE_ABOUT
104 CDlgAbout* dlg = new CDlgAbout();
105 dlg->setAttribute(Qt::WA_QuitOnClose, true);
106 RC_SHOW_WINDOW(dlg);
107#endif
108}
109
110void MainWindow::on_actionUpdate_triggered()
111{
112#ifdef HAVE_UPDATE
113 // [Use CFrmUpdater]
114 CFrmUpdater* m_pfrmUpdater = new CFrmUpdater();
115 QIcon icon = windowIcon();
116 if(!icon.isNull()) {
117 auto sizeList = icon.availableSizes();
118 if(!sizeList.isEmpty()) {
119 QPixmap p = icon.pixmap(*sizeList.begin());
120 m_pfrmUpdater->SetTitle(p.toImage());
121 }
122 }
123 m_pfrmUpdater->SetInstallAutoStartup();
124 RC_SHOW_WINDOW(m_pfrmUpdater);
125 // [Use CFrmUpdater]
126#endif
127#ifdef BUILD_QUIWidget
128 QUIWidget::setFormInCenter(m_pfrmUpdater);
129#endif
130}
131
132void MainWindow::on_pushButton_clicked()
133{
134 //RabbitCommon::CTools::GenerateDesktopFile(QDir::currentPath());
135 QStringList paras;
136 if(!ui->lePara->text().isEmpty())
137 paras = ui->lePara->text().split(' ');
138 qDebug(log) << "RabbitCommon::CTools::executeByRoot("
139 + ui->leCommand->text() + "," + ui->lePara->text() + ");"
140 << RabbitCommon::CTools::executeByRoot(ui->leCommand->text(), paras);
141}
142
143void MainWindow::on_pbEncrypt_clicked()
144{
146 e.SetPassword(ui->lePassword->text().toStdString().c_str());
147 QByteArray out;
148 int nRet = e.Encode(ui->teInput->toPlainText(), out);
149 if(!nRet)
150 {
151 QString szOut;
152 nRet = e.Dencode(out, szOut);
153 if(nRet)
154 {
155 szOut = tr("Encrypt:") + QString(out) + "\n" + tr("Source:") + szOut;
156 ui->teOutput->setPlainText(szOut);
157 }
158 }
159}
160
161void MainWindow::on_pbAddFile_clicked()
162{
163 ui->cmbDownloadFiles->addItem(ui->cmbDownloadFiles->currentText());
164}
165
166void MainWindow::on_pbDownload_clicked()
167{
168 if(m_pDownload)
169 m_pDownload->deleteLater();
170 QVector<QUrl> urls;
171 for(int i = 0; i < ui->cmbDownloadFiles->count(); i++)
172 {
173 urls.push_back(QUrl(ui->cmbDownloadFiles->itemText(i)));
174 }
175 m_pDownload = new RabbitCommon::CDownload();
176 bool check = connect(m_pDownload, SIGNAL(sigFinished(const QString)),
177 this, SLOT(slotDownloadFile(const QString)));
178 Q_ASSERT(check);
179 check = connect(m_pDownload, SIGNAL(sigError(int, const QString)),
180 this, SLOT(slotDownloadError(int, const QString)));
181 Q_ASSERT(check);
182 m_pDownload->Start(urls);
183}
184
185void MainWindow::slotDownloadFile(const QString szFile)
186{
187 qDebug(log) << "Download file:" << szFile;
188 QDesktopServices::openUrl(QUrl::fromLocalFile(szFile));
189}
190
191void MainWindow::slotDownloadError(int nErr, const QString szErr)
192{
193 qDebug(log) << "Download file error:" << nErr << szErr;
194}
195
196void MainWindow::on_actionFolder_browser_triggered()
197{
199 RC_SHOW_WINDOW(&fb);
200}
201
202class CCoreThread : public QThread
203{
204public:
205 CCoreThread(QObject *parent = nullptr) : QThread(parent)
206 {
207 connect(this, SIGNAL(destroyed(QObject*)),
208 this, SLOT(deleteLater()));
209 }
210 virtual ~CCoreThread()
211 {
212 qDebug(log) << "CCoreThread::~CCoreThread()";
213 }
214
215 // QThread interface
216protected:
217 virtual void run() override;
218};
219
220void CCoreThread::run()
221{
222#if defined(Q_OS_WIN)
223 strcpy(0,0);
224#else
225 free((void*)11);
226#endif
227}
228
229void MainWindow::on_pbThreadCore_clicked()
230{
231 CCoreThread* pThread = new CCoreThread(this);
232 pThread->start();
233}
234
235void MainWindow::on_pbGenerateCoreFile_clicked()
236{
237#if defined(Q_OS_WIN)
238 strcpy(0,0);
239#else
240 free((void*)11);
241#endif
242}
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:75
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