10#include <QDesktopServices>
11#include <QWidgetAction>
15#include <QKeySequence>
19#include <QLoggingCategory>
22#include "mainwindow.h"
23#include "ui_mainwindow.h"
25 #include "FrmUpdater.h"
27#include "RabbitCommonDir.h"
28#include "RabbitCommonTools.h"
34 #include "QUIWidget/QUIWidget.h"
38#include "FrmFullScreenToolBar.h"
39#include "ParameterDlgSettings.h"
42#include "ViewSplitter.h"
48static Q_LOGGING_CATEGORY(log,
"App.MainWindow")
49static Q_LOGGING_CATEGORY(logRecord, "App.
MainWindow.Record")
53 , m_pToolBarMenuAction(
nullptr)
54 , m_pMenuActivityGroup(
nullptr)
55 , m_ptbMenuActivity(
nullptr)
56 , m_pActionOperateMenu(
nullptr)
57 , m_pTBOperate(
nullptr)
58 , m_pActionTBOperate(
nullptr)
59 , m_pDockRecent(
nullptr)
61 , m_pRecentDb(
nullptr)
62 , m_pDockActive(
nullptr)
63 , m_pFrmActive(
nullptr)
64 , m_pSecureLevel(
nullptr)
65 , m_pSignalStatus(
nullptr)
68 , m_pFullScreenToolBar(
nullptr)
69 , m_pRecentMenu(
nullptr)
70 , m_pDockFavorite(
nullptr)
71 , m_pFavoriteView(
nullptr)
72 , m_StatusBarMessage(this)
80 this, [&](
COperate* pOperate,
bool bOpenSettingsDialog){
81 Start(pOperate, bOpenSettingsDialog);
85#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_MACOS)
87 setWindowIcon(QIcon(
":/images/app"));
90 m_StatusBarMessage.setSizePolicy(QSizePolicy::Policy::Expanding,
91 QSizePolicy::Policy::Fixed);
93 this->statusBar()->addWidget(&m_StatusBarMessage);
95 m_SendRate.setToolTip(tr(
"Send rate"));
96 m_SendRate.setStatusTip(tr(
"Send rate"));
99 this->statusBar()->addPermanentWidget(&m_SendRate);
100 m_ReceivesRate.setToolTip(tr(
"Receives rate"));
101 m_ReceivesRate.setStatusTip(tr(
"Receives rate"));
104 this->statusBar()->addPermanentWidget(&m_ReceivesRate);
105 m_TotalSends.setToolTip(tr(
"Total sends"));
106 m_TotalSends.setStatusTip(tr(
"Total sends"));
109 this->statusBar()->addPermanentWidget(&m_TotalSends);
110 m_TotalReceives.setToolTip(tr(
"Total receives"));
111 m_TotalReceives.setStatusTip(tr(
"Total receives"));
114 this->statusBar()->addPermanentWidget(&m_TotalReceives);
116 check = connect(&m_Timer, SIGNAL(timeout()),
this, SLOT(slotTimeOut()));
119 m_pSecureLevel =
new QLabel(statusBar());
123 m_pSecureLevel->hide();
124 statusBar()->addPermanentWidget(m_pSecureLevel);
128 setAcceptDrops(
true);
130 RabbitCommon::CTools::AddStyleMenu(ui->menuTools);
131 ui->menuTools->addMenu(RabbitCommon::CTools::GetLogMenu(
this));
133 m_pRecentMenu =
new RabbitCommon::CRecentMenu(
134 tr(
"Recently"), QIcon::fromTheme(
"document-open-recent"),
false,
this);
135 check = connect(m_pRecentMenu, SIGNAL(recentFileTriggered(
const QString&)),
136 this, SLOT(slotOpenFile(
const QString&)));
138 check = connect(&m_Parameter, SIGNAL(sigRecentMenuMaxCountChanged(
int)),
139 m_pRecentMenu, SLOT(setMaxCount(
int)));
141 QAction* pRecentAction = ui->menuOperate->insertMenu(
142 ui->actionOpenListRecent, m_pRecentMenu);
143 pRecentAction->setStatusTip(pRecentAction->text());
144 QToolButton* tbRecent =
new QToolButton(ui->toolBar);
145 tbRecent->setFocusPolicy(Qt::NoFocus);
146 tbRecent->setPopupMode(QToolButton::InstantPopup);
147 tbRecent->setMenu(m_pRecentMenu);
148 tbRecent->setIcon(pRecentAction->icon());
149 tbRecent->setText(pRecentAction->text());
150 tbRecent->setToolTip(pRecentAction->toolTip());
151 tbRecent->setStatusTip(pRecentAction->statusTip());
152 ui->toolBar->insertWidget(ui->actionOpenListRecent, tbRecent);
156 ui->actionUpdate->setIcon(updater.windowIcon());
159 QToolButton* tbStart =
new QToolButton(ui->toolBar);
160 tbStart->setFocusPolicy(Qt::NoFocus);
161 tbStart->setPopupMode(QToolButton::InstantPopup);
163 tbStart->setMenu(ui->menuStart);
164 tbStart->setIcon(QIcon::fromTheme(
"media-playback-start"));
165 tbStart->setText(tr(
"Start"));
166 tbStart->setToolTip(tr(
"Start"));
167 tbStart->setStatusTip(tr(
"Start"));
168 ui->toolBar->insertWidget(ui->actionStop, tbStart);
172 check = connect(&m_Parameter, SIGNAL(sigReceiveShortCutChanged()),
173 this, SLOT(slotShortCut()));
175 slotSystemTrayIconTypeChanged();
176 check = connect(&m_Parameter, SIGNAL(sigSystemTrayIconTypeChanged()),
178 SLOT(slotSystemTrayIconTypeChanged()));
180 check = connect(&m_Parameter, SIGNAL(sigEnableSystemTrayIcon()),
181 this, SLOT(slotEnableSystemTrayIcon()));
183 check = connect(&m_Parameter, SIGNAL(sigEnableTabToolTipChanged()),
184 this, SLOT(slotUpdateName()));
186 check = connect(&m_Parameter, SIGNAL(sigEnableTabIconChanged()),
187 this, SLOT(slotUpdateName()));
190 auto pTbMenu =
new QToolButton(ui->toolBar);
191 pTbMenu->setFocusPolicy(Qt::NoFocus);
192 pTbMenu->setPopupMode(QToolButton::InstantPopup);
194 pTbMenu->setText(ui->actionMain_menu_bar_M->text());
195 pTbMenu->setIcon(ui->actionMain_menu_bar_M->icon());
196 pTbMenu->setToolTip(ui->actionMain_menu_bar_M->toolTip());
197 pTbMenu->setStatusTip(ui->actionMain_menu_bar_M->statusTip());
198 QMenu *pMenu =
new QMenu(pTbMenu);
199 pMenu->addActions(this->menuBar()->actions());
200 pTbMenu->setMenu(pMenu);
201 m_pToolBarMenuAction = ui->toolBar->insertWidget(ui->actionTabBar_B, pTbMenu);
202#if defined(Q_OS_ANDROID)
203 m_pToolBarMenuAction->setVisible(
true);
205 m_pToolBarMenuAction->setVisible(
false);
208 check = connect(&m_Parameter, SIGNAL(sigStartByTypeChanged()),
209 this, SLOT(slotStartByType()));
212 m_pDockFavorite =
new QDockWidget(
this);
215 m_pFavoriteView =
new CFavoriteView(&m_Parameter, m_pDockFavorite);
218 if(m_pFavoriteView->m_pDockTitleBar)
219 m_pDockFavorite->setTitleBarWidget(m_pFavoriteView->m_pDockTitleBar);
220 check = connect(m_pFavoriteView, SIGNAL(sigStart(
const QString&,
bool)),
221 this, SLOT(slotOpenFile(
const QString&,
bool)));
223 check = connect(m_pFavoriteView, SIGNAL(sigFavorite()),
224 this, SLOT(on_actionAdd_to_favorite_triggered()));
226 check = connect(&m_Parameter, SIGNAL(sigFavoriteEditChanged(
bool)),
227 m_pFavoriteView, SLOT(slotDoubleEditNode(
bool)));
229 emit m_Parameter.sigFavoriteEditChanged(m_Parameter.GetFavoriteEdit());
230 m_pDockFavorite->setWidget(m_pFavoriteView);
231 m_pDockFavorite->setWindowTitle(m_pFavoriteView->windowTitle());
234 m_pDockFavorite->setObjectName(
"dockFavorite");
235#if defined(Q_OS_ANDROID)
236 m_pDockFavorite->hide();
238 ui->menuView->addAction(m_pDockFavorite->toggleViewAction());
239 m_pDockFavorite->toggleViewAction()->setIcon(QIcon::fromTheme(
"emblem-favorite"));
240 addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea, m_pDockFavorite);
244 m_pDockRecent =
new QDockWidget(
this);
248 =
new CFrmRecent(
this, &m_Manager, m_pRecentDb, m_Parameter,
true,
251 if(m_pRecent->m_pDockTitleBar)
252 m_pDockRecent->setTitleBarWidget(
253 m_pRecent->m_pDockTitleBar);
254 check = connect(m_pRecent,
255 SIGNAL(sigStart(
const QString&,
bool)),
256 this, SLOT(slotOpenFile(
const QString&,
bool)));
258 check = connect(m_pRecent, &CFrmRecent::sigAddToFavorite,
259 m_pFavoriteView, &CFavoriteView::slotAddToFavorite);
261 m_pDockRecent->setWidget(m_pRecent);
262 m_pDockRecent->setWindowTitle(
263 m_pRecent->windowTitle());
266 m_pDockRecent->setObjectName(
"dockRecent");
267#if defined(Q_OS_ANDROID)
268 m_pDockRecent->hide();
270 ui->menuView->addAction(m_pDockRecent->toggleViewAction());
271 m_pDockRecent->toggleViewAction()->setIcon(QIcon::fromTheme(
"document-open-recent"));
272 tabifyDockWidget(m_pDockFavorite, m_pDockRecent);
275 m_pDockActive =
new QDockWidget(
this);
279 m_Operates, m_Parameter,
280 ui->menuStart, ui->actionStop,
281 m_pRecentMenu, m_pDockActive);
283 m_pDockActive->setWidget(m_pFrmActive);
284 if(m_pFrmActive->m_pDockTitleBar)
285 m_pDockActive->setTitleBarWidget(
286 m_pFrmActive->m_pDockTitleBar);
287 m_pDockActive->setWindowTitle(m_pFrmActive->windowTitle());
288 check = connect(m_pFrmActive, SIGNAL(sigChanged(
COperate*)),
289 this, SLOT(slotOperateChanged(
COperate*)));
291 check = connect(m_pFrmActive, &CFrmActive::sigAddToFavorite,
292 m_pFavoriteView, &CFavoriteView::slotAddToFavorite);
295 m_pDockActive->setObjectName(
"dockListActive");
296#if defined(Q_OS_ANDROID)
297 m_pDockActive->hide();
299 ui->menuView->addAction(m_pDockActive->toggleViewAction());
300 m_pDockActive->toggleViewAction()->setIcon(QIcon::fromTheme(
"network-wired"));
301 tabifyDockWidget(m_pDockFavorite, m_pDockActive);
304 QActionGroup* pGBView =
new QActionGroup(
this);
306 pGBView->addAction(ui->actionViewTab);
307 pGBView->addAction(ui->actionViewSplit);
309 qDebug(log) <<
"View type:" << m_Parameter.GetViewType();
310 if(CParameterApp::ViewType::Tab == m_Parameter.GetViewType()) {
311 ui->actionViewTab->setChecked(
true);
312 on_actionViewTab_triggered();
314 if(CParameterApp::ViewType::Splitter == m_Parameter.GetViewType()) {
315 ui->actionViewSplit->setChecked(
true);
316 on_actionViewSplit_triggered();
318 check = connect(&m_Parameter, &CParameterApp::sigViewTypeChanged,
324 m_pMenuActivityGroup =
new QActionGroup(ui->menuActivity);
325 m_ptbMenuActivity =
new QToolButton(ui->toolBar);
326 m_ptbMenuActivity->setFocusPolicy(Qt::NoFocus);
327 m_ptbMenuActivity->setPopupMode(QToolButton::InstantPopup);
328 m_ptbMenuActivity->setMenu(ui->menuActivity);
329 m_ptbMenuActivity->setIcon(ui->menuActivity->icon());
330 m_ptbMenuActivity->setText(ui->menuActivity->title());
331 m_ptbMenuActivity->setToolTip(ui->menuActivity->toolTip());
332 m_ptbMenuActivity->setStatusTip(ui->menuActivity->statusTip());
333 ui->toolBar->insertWidget(ui->actionTabBar_B, m_ptbMenuActivity);
342 SIGNAL(sigConnected()),
343 this, SLOT(slotSignalConnected()));
346 SIGNAL(sigDisconnected()),
347 this, SLOT(slotSignalDisconnected()));
350 SIGNAL(sigError(
const int,
const QString&)),
351 this, SLOT(slotSignalError(
const int,
const QString&)));
355 m_pSignalStatus =
new QPushButton();
356 m_pSignalStatus->setToolTip(tr(
"ICE signal status"));
357 m_pSignalStatus->setStatusTip(m_pSignalStatus->toolTip());
358 m_pSignalStatus->setWhatsThis(m_pSignalStatus->toolTip());
359 slotSignalDisconnected();
360 statusBar()->addPermanentWidget(m_pSignalStatus);
363 if(m_Parameter.GetSaveMainWindowStatus())
365 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
366 QSettings::IniFormat);
368 = set.value(
"MainWindow/Status/Geometry").toByteArray();
369 if(!geometry.isEmpty())
370 restoreGeometry(geometry);
372 QByteArray state = set.value(
"MainWindow/Status/State").toByteArray();
376 ui->actionTabBar_B->setChecked(m_Parameter.GetTabBar());
377 on_actionTabBar_B_toggled(m_Parameter.GetTabBar());
378 ui->actionStatus_bar_S->setChecked(m_Parameter.GetStatusBar());
379 statusBar()->setVisible(m_Parameter.GetStatusBar());
380 ui->actionMain_menu_bar_M->setChecked(m_Parameter.GetMenuBar());
381 menuBar()->setVisible(m_Parameter.GetMenuBar());
382 ui->actionToolBar_T->setChecked(!ui->toolBar->isHidden());
386 ui->actionMain_menu_bar_M->setVisible(
false);
389 if(!m_Parameter.GetMenuBar()) {
390 m_pToolBarMenuAction->setVisible(
true);
396MainWindow::~MainWindow()
398 qDebug(log) <<
"MainWindow::~MainWindow()";
399 if(m_pFullScreenToolBar) m_pFullScreenToolBar->close();
406 qDebug(log) << Q_FUNC_INFO;
408 QMessageBox box(QMessageBox::Information, tr(
"Load"),
"");
413 szMsg = tr(
"Load plugins ......");
416 qApp->processEvents();
427 szMsg = tr(
"Load recent menu ......");
430 qApp->processEvents();
431 auto recents = m_pRecentDb->GetRecents(m_Parameter.GetRecentMenuMaxCount());
433 for(
auto it = recents.rbegin(); it != recents.rend(); it++) {
434 m_pRecentMenu->addRecentFile(it->szFile, it->szName, it->icon);
439 szMsg = tr(
"Load list recent dock ......");
442 qApp->processEvents();
446 if(m_pFavoriteView) {
447 szMsg = tr(
"Load favorite ......");
450 qApp->processEvents();
451 m_pFavoriteView->Initial();
454 slotEnableSystemTrayIcon();
458 szMsg = tr(
"Load laster operate ......");
461 qApp->processEvents();
462 LoadOperateLasterClose();
469void MainWindow::SetView(
CView* pView)
471 qDebug(log) << Q_FUNC_INFO;
475 m_pView->disconnect();
478 setCentralWidget(m_pView);
482 check = connect(m_pView, SIGNAL(sigCloseView(
const QWidget*)),
485 check = connect(m_pView, SIGNAL(sigCurrentChanged(
const QWidget*)),
486 this, SLOT(slotCurrentViewChanged(
const QWidget*)));
489 check = connect(m_pView, SIGNAL(sigCurrentChanged(
const QWidget*)),
490 m_pFrmActive, SLOT(slotViewChanged(
const QWidget*)));
493 check = connect(m_pView, SIGNAL(customContextMenuRequested(
const QPoint&)),
497 foreach (
auto c, m_Operates) {
498 m_pView->
AddView(c->GetViewer());
499 m_pView->SetWidowsTitle(
500 c->GetViewer(), c->Name(), c->Icon(), c->Description());
502 m_pView->SetVisibleTab(m_Parameter.GetTabBar());
505void MainWindow::on_actionViewTab_triggered()
507 qDebug(log) << Q_FUNC_INFO;
508 if(!ui->actionViewTab->isChecked())
return;
509 m_Parameter.SetViewType(CParameterApp::ViewType::Tab);
513void MainWindow::on_actionViewSplit_triggered()
515 qDebug(log) << Q_FUNC_INFO;
516 if(!ui->actionViewSplit->isChecked())
return;
517 m_Parameter.SetViewType(CParameterApp::ViewType::Splitter);
521void MainWindow::on_actionAbout_triggered()
524 CDlgAbout *about =
new CDlgAbout(
this);
525 QIcon icon = QIcon::fromTheme(
"app");
527 auto sizeList = icon.availableSizes();
528 if(!sizeList.isEmpty()) {
529 QPixmap p = icon.pixmap(*sizeList.begin());
530 about->m_AppIcon = p.toImage();
533 about->m_szCopyrightStartTime =
"2020";
534 about->m_szVersionRevision = RabbitRemoteControl_REVISION;
535 about->m_szDetails = m_Manager.Details();
536 RC_SHOW_WINDOW(about);
540void MainWindow::on_actionUpdate_triggered()
542 if(!qEnvironmentVariable(
"SNAP").isEmpty()) {
543 QDesktopServices::openUrl(QUrl(
"https://snapcraft.io/rabbitremotecontrol"));
544 }
else if(!qEnvironmentVariable(
"FLATPAK_ID").isEmpty()) {
545 QDesktopServices::openUrl(QUrl(
"https://flathub.org/apps/io.github.KangLin.RabbitRemoteControl"));
548 CFrmUpdater* m_pfrmUpdater =
new CFrmUpdater();
549 QIcon icon = QIcon::fromTheme(
"app");
551 auto sizeList = icon.availableSizes();
552 if(!sizeList.isEmpty()) {
553 QPixmap p = icon.pixmap(*sizeList.begin());
554 m_pfrmUpdater->SetTitle(p.toImage());
557 m_pfrmUpdater->SetInstallAutoStartup();
558 RC_SHOW_WINDOW(m_pfrmUpdater);
563void MainWindow::on_actionFull_screen_F_triggered()
565 CView* pView = qobject_cast<CView*>(this->centralWidget());
568 pView->SetFullScreen(!isFullScreen());
573 qDebug(log) <<
"Exit full screen";
574 ui->actionFull_screen_F->setIcon(QIcon::fromTheme(
"view-fullscreen"));
575 ui->actionFull_screen_F->setText(tr(
"Full screen"));
576 ui->actionFull_screen_F->setToolTip(tr(
"Full screen"));
577 ui->actionFull_screen_F->setStatusTip(tr(
"Full screen"));
578 ui->actionFull_screen_F->setWhatsThis(tr(
"Full screen"));
580 ui->toolBar->setVisible(m_FullState.toolBar);
581 ui->statusbar->setVisible(m_FullState.statusbar);
582 ui->menubar->setVisible(m_FullState.menubar);
584 m_pDockActive->setVisible(m_FullState.dockListActive);
585 m_pDockRecent->setVisible(m_FullState.dockListRecent);
586 m_pDockFavorite->setVisible(m_FullState.dockFavorite);
588 QDockWidget* pDockDebugLog = findChild<QDockWidget*>(
"dockDebugLog");
591 pDockDebugLog->setVisible(m_FullState.dockDebugLog);
594 if(m_pFullScreenToolBar)
597 m_pFullScreenToolBar->close();
598 m_pFullScreenToolBar =
nullptr;
601 emit sigShowNormal();
603 this->activateWindow();
605 emit sigFullScreen(
false);
609 qDebug(log) <<
"Entry full screen";
612 this->showFullScreen();
613 emit sigFullScreen(
true);
615 ui->actionFull_screen_F->setIcon(QIcon::fromTheme(
"view-restore"));
616 ui->actionFull_screen_F->setText(tr(
"Exit full screen"));
617 ui->actionFull_screen_F->setToolTip(tr(
"Exit full screen"));
618 ui->actionFull_screen_F->setStatusTip(tr(
"Exit full screen"));
619 ui->actionFull_screen_F->setWhatsThis(tr(
"Exit full screen"));
621 m_FullState.toolBar = ui->toolBar->isVisible();
622 ui->toolBar->setVisible(
false);
623 m_FullState.statusbar = ui->statusbar->isVisible();
624 ui->statusbar->setVisible(
false);
625 m_FullState.menubar = ui->menubar->isVisible();
626 ui->menubar->setVisible(
false);
628 m_FullState.dockListActive = m_pDockActive->isVisible();
629 m_pDockActive->setVisible(
false);
630 m_FullState.dockListRecent = m_pDockRecent->isVisible();
631 m_pDockRecent->setVisible(
false);
632 m_FullState.dockFavorite = m_pDockFavorite->isVisible();
633 m_pDockFavorite->setVisible(
false);
635 QDockWidget* pDockDebugLog = findChild<QDockWidget*>(
"dockDebugLog");
638 m_FullState.dockDebugLog = pDockDebugLog->isVisible();
639 pDockDebugLog->setVisible(
false);
642 if(m_pFullScreenToolBar) m_pFullScreenToolBar->close();
645 QScreen* pScreen = qApp->primaryScreen();
647 QPoint pos(pScreen->geometry().left()
648 + (pScreen->geometry().width()
649 - m_pFullScreenToolBar->frameGeometry().width()) / 2,
650 pScreen->geometry().top());
651 qDebug(log) <<
"Primary screen geometry:" << pScreen->geometry()
652 <<
"availableGeometry:" << pScreen->availableGeometry()
653 << pos << mapToGlobal(pos);
654 m_pFullScreenToolBar->move(pos);
656 bool check = connect(m_pFullScreenToolBar, SIGNAL(sigExitFullScreen()),
657 this, SLOT(on_actionFull_screen_F_triggered()));
659 check = connect(m_pFullScreenToolBar, SIGNAL(sigExit()),
660 this, SLOT(on_actionExit_E_triggered()));
663 check = connect(
this, SIGNAL(sigOperateMenuChanged(QAction*)),
664 m_pFullScreenToolBar,
665 SLOT(slotOperateMenuChanged(QAction*)));
668 m_pFullScreenToolBar->show();
671void MainWindow::slotViewerFocusIn(QWidget *pView)
673 COperate* c = qobject_cast<COperate*>(sender());
674 qDebug(log) << Q_FUNC_INFO <<
"Focus:" << c << pView;
680void MainWindow::slotOperateChanged(
COperate *o)
687void MainWindow::slotCurrentViewChanged(
const QWidget* pView)
689 qDebug(log) << Q_FUNC_INFO;
695 foreach(
auto o, m_Operates) {
698 SetStatsVisible(o->GetStats());
699 foreach (
auto a, ui->menuActivity->actions()) {
700 if(a->data().value<
COperate*>() == o)
707void MainWindow::EnableMenu(
bool bEnable)
709 qDebug(log) << Q_FUNC_INFO << bEnable;
710 ui->actionClone->setEnabled(bEnable);
711 ui->actionAdd_to_favorite->setEnabled(bEnable);
712 ui->actionStop->setEnabled(bEnable);
713 ui->actionTabBar_B->setEnabled(bEnable);
714 ui->menuActivity->setEnabled(bEnable);
715 m_ptbMenuActivity->setEnabled(bEnable);
716 slotLoadOperateMenu();
719void MainWindow::slotMenuActivity()
721 QAction* pAction = qobject_cast<QAction*>(sender());
726 slotOperateChanged(p);
729void MainWindow::slotLoadOperateMenu()
731 qDebug(log) << Q_FUNC_INFO;
733 if(m_pActionOperateMenu) {
734 ui->menuOperate->removeAction(m_pActionOperateMenu);
735 m_pActionOperateMenu =
nullptr;
737 ui->toolBar->removeAction(m_pActionTBOperate);
743 qDebug(log) <<
"The current view is empty";
746 foreach(
auto op, m_Operates)
748 if(op->GetViewer() == pWin)
750 qDebug(log) <<
"Load plugin menu";
751 auto m = op->GetMenu(ui->menuTools);
754 m_pActionOperateMenu = ui->menuOperate->insertMenu(ui->actionAdd_to_favorite, m);
757 m_pTBOperate =
new QToolButton(ui->toolBar);
759 m_pTBOperate->setFocusPolicy(Qt::NoFocus);
760 m_pTBOperate->setPopupMode(QToolButton::InstantPopup);
761 m_pTBOperate->setMenu(m);
762 m_pTBOperate->setIcon(m->icon());
763 m_pTBOperate->setText(m->title());
764 m_pTBOperate->setToolTip(m->toolTip());
765 m_pTBOperate->setStatusTip(m->statusTip());
766 m_pTBOperate->show();
767 m_pActionTBOperate = ui->toolBar->insertWidget(ui->actionAdd_to_favorite, m_pTBOperate);
769 emit sigOperateMenuChanged(m_pActionOperateMenu);
786 qDebug(log) <<
"The current view is empty";
789 foreach(
auto p, m_Operates)
793 qDebug(log) <<
"Load plugin menu";
794 auto m = p->
GetMenu(ui->menuTools);
802void MainWindow::on_actionExit_E_triggered()
807void MainWindow::keyReleaseEvent(QKeyEvent *event)
813 on_actionFull_screen_F_triggered();
816 QMainWindow::keyReleaseEvent(event);
819void MainWindow::slotUpdateParameters(
COperate *pOperate)
824void MainWindow::on_actionClone_triggered()
828 foreach(
auto pOperate, m_Operates)
832 QString szFile = pOperate->GetSettingsFile();
834 if(!pOperate)
return;
835 Start(pOperate,
false, szFile);
841void MainWindow::slotOpenFile(
const QString& szFile,
bool bOpenSettings)
843 if(szFile.isEmpty())
return;
847 slotStatusMessage(tr(
"Load file fail: ") + szFile, MessageLevel::Error);
851 Start(p, bOpenSettings, szFile);
854void MainWindow::on_actionOpenRRCFile_triggered()
856 QString szFile = QFileDialog::getOpenFileName(
858 tr(
"Open rabbit remote control file"),
859 RabbitCommon::CDir::Instance()->GetDirUserData(),
860 tr(
"Rabbit remote control Files (*.rrc);;All files(*.*)"));
861 if(szFile.isEmpty())
return;
866 slotStatusMessage(tr(
"Load file fail: ") + szFile, MessageLevel::Error);
873void MainWindow::slotStart()
875 if(
nullptr == m_pView)
880 QAction* pAction = qobject_cast<QAction*>(this->sender());
883 if(
nullptr == p)
return;
899 qDebug(log) <<
"MainWindow::Start: set:" << set <<
"; File:" << szFile;
902 bool check = connect(pOperate, SIGNAL(sigRunning()),
905 check = connect(pOperate, SIGNAL(sigStop()),
906 this, SLOT(slotStop()));
908 check = connect(pOperate, SIGNAL(sigFinished()),
909 this, SLOT(slotFinished()));
911 check = connect(pOperate, SIGNAL(sigError(
const int,
const QString &)),
912 this, SLOT(slotError(
const int,
const QString&)));
914 check = connect(pOperate, SIGNAL(sigShowMessageBox(
const QString&,
const QString&,
915 const QMessageBox::Icon&)),
917 const QMessageBox::Icon&)));
919 check = connect(pOperate, SIGNAL(sigInformation(
const QString&)),
922 check = connect(pOperate, SIGNAL(sigUpdateName(
const QString&)),
923 this, SLOT(slotUpdateName(
const QString&)));
925 check = connect(pOperate, SIGNAL(sigUpdateParameters(
COperate*)),
926 this, SLOT(slotUpdateParameters(
COperate*)));
929 this, [
this, pOperate](
bool bFull) {
931 if((bFull && !isFullScreen()) || (!bFull && isFullScreen()))
932 on_actionFull_screen_F_triggered();
941 case QDialog::Rejected:
944 case QDialog::Accepted:
951 szFile = pOperate->GetSettingsFile();
953 pOperate->SetSettingsFile(szFile);
959 m_pRecentMenu->addRecentFile(szFile, pOperate->
Name(), pOperate->
Icon());
961 item.szOperateId = pOperate->
Id();
962 item.icon = pOperate->
Icon();
963 item.szName = pOperate->
Name();
964 item.szProtocol = pOperate->
Protocol();
967 item.szFile = szFile;
968 item.time = QDateTime::currentDateTime();
969 m_pRecentDb->AddRecent(item);
972 if(!pOperate->
Name().isEmpty())
976 if(m_Operates.contains(pOperate)) {
978 m_pView->SetCurrentView(pOperate->
GetViewer());
984 m_pView->SetWidowsTitle(pOperate->
GetViewer(), pOperate->
Name(),
987 check = connect(pOperate, SIGNAL(sigViewerFocusIn(QWidget*)),
988 this, SLOT(slotViewerFocusIn(QWidget*)));
991 m_Operates.insert(pOperate);
994 m_pFrmActive->slotLoad();
998 vOperate.setValue(pOperate);
999 QAction* m_pActionmenuActivity = ui->menuActivity->addAction(
1000 pOperate->
Icon(), pOperate->
Name(),
this, SLOT(slotMenuActivity()));
1001 m_pActionmenuActivity->setData(vOperate);
1002 m_pActionmenuActivity->setCheckable(
true);
1003 m_pMenuActivityGroup->addAction(m_pActionmenuActivity);
1004 m_pActionmenuActivity->setChecked(
true);
1007 nRet = pOperate->
Start();
1019 COperate* p = qobject_cast<COperate*>(sender());
1044 m->addAction(ui->actionClone);
1046 slotLoadOperateMenu();
1049 qDebug(log) << Q_FUNC_INFO << p->
Name();
1055 qDebug(log) <<
"MainWindow::slotCloseView" << pView;
1057 foreach(
auto p, m_Operates)
1068void MainWindow::on_actionStop_triggered()
1070 qDebug(log) << Q_FUNC_INFO;
1071 if(!m_pView)
return;
1077void MainWindow::slotStop()
1079 COperate* pOperate = qobject_cast<COperate*>(sender());
1080 if(!pOperate)
return;
1081 qDebug(log) << Q_FUNC_INFO << pOperate->
Name();
1087void MainWindow::slotFinished()
1089 COperate* pOperate = qobject_cast<COperate*>(sender());
1090 if(!pOperate)
return;
1092 qDebug(log) << Q_FUNC_INFO << pOperate->
Name();
1093 foreach(
auto a, ui->menuActivity->actions()) {
1096 ui->menuActivity->removeAction(a);
1097 m_pMenuActivityGroup->removeAction(a);
1100 foreach(
auto p, m_Operates)
1105 m_Operates.remove(p);
1107 m_pFrmActive->slotLoad();
1112 if(m_Operates.isEmpty())
1113 if(m_pActionOperateMenu) {
1114 ui->menuTools->removeAction(m_pActionOperateMenu);
1115 ui->toolBar->removeAction(m_pActionOperateMenu);
1116 m_pActionOperateMenu =
nullptr;
1124void SetIndicator(QLabel* label, QColor color,
int size)
1126 QString min_width = QString(
"min-width: %1px;").arg(size);
1127 QString min_height = QString(
"min-height: %1px;").arg(size);
1128 QString max_width = QString(
"max-width: %1px;").arg(size);
1129 QString max_height = QString(
"max-height: %1px;").arg(size);
1131 QString border_radius = QString(
"border-radius: %1px;").arg(size / 2);
1132 QString border = QString(
"border:1px solid ") + color.name() +
";";
1134 QString background =
"background-color: ";
1135 background += color.name() +
";";
1136 QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
1137 label->setStyleSheet(SheetStyle);
1140void MainWindow::SetSecureLevel(
COperate* o)
1142 if(!m_pSecureLevel)
return;
1144 if(COperate::SecurityLevel::No == o->GetSecurityLevel())
1146 m_pSecureLevel->hide();
1149 SetIndicator(m_pSecureLevel, o->GetSecurityLevelColor(), statusBar()->height() / 2);
1150 m_pSecureLevel->setToolTip(o->GetSecurityLevelString());
1151 m_pSecureLevel->setStatusTip(o->GetSecurityLevelString());
1152 m_pSecureLevel->show();
1154 m_pSecureLevel->hide();
1157void MainWindow::slotSignalConnected()
1159 m_pSignalStatus->setToolTip(tr(
"ICE signal status: Connected"));
1160 m_pSignalStatus->setStatusTip(m_pSignalStatus->toolTip());
1161 m_pSignalStatus->setWhatsThis(m_pSignalStatus->toolTip());
1163 m_pSignalStatus->setIcon(QIcon::fromTheme(
"network-wired"));
1166void MainWindow::slotSignalDisconnected()
1168 m_pSignalStatus->setToolTip(tr(
"ICE signal status: Disconnected"));
1169 m_pSignalStatus->setStatusTip(m_pSignalStatus->toolTip());
1170 m_pSignalStatus->setWhatsThis(m_pSignalStatus->toolTip());
1172 m_pSignalStatus->setIcon(QIcon::fromTheme(
"network-wireless"));
1175void MainWindow::slotSignalError(
const int nError,
const QString &szInfo)
1177 slotSignalDisconnected();
1178 slotError(nError, szInfo);
1181void MainWindow::slotSignalPushButtonClicked(
bool checked)
1191void MainWindow::slotError(
const int nError,
const QString &szInfo)
1194 slotStatusMessage(szInfo, MessageLevel::Error);
1198 const QString &title,
const QString &message,
1199 const QMessageBox::Icon &icon)
1202 if(!m_Parameter.GetMessageBoxDisplayInformation())
1205 QMessageBox msg(icon, title, message, QMessageBox::Ok,
this);
1206 QCheckBox* cb =
new QCheckBox(
1207 tr(
"Use message box to display information"),
this);
1208 cb->setChecked(
true);
1209 msg.setCheckBox(cb);
1210 RC_SHOW_WINDOW(&msg);
1211 if(!cb->isChecked())
1213 m_Parameter.SetMessageBoxDisplayInformation(
false);
1220 slotStatusMessage(szInfo, MessageLevel::Normal);
1223void MainWindow::slotStatusMessage(QString szMessage, MessageLevel level)
1226 switch ((MessageLevel)level) {
1227 case MessageLevel::Error:
1228 pe.setColor(QPalette::WindowText, Qt::red);
1230 case MessageLevel::Warning:
1231 pe.setColor(QPalette::WindowText, Qt::yellow);
1237 m_StatusBarMessage.setPalette(pe);
1238 m_StatusBarMessage.setToolTip(szMessage);
1239 QFontMetrics metrics(m_StatusBarMessage.font());
1241 szMessage = metrics.elidedText(szMessage, Qt::ElideRight, m_StatusBarMessage.width());
1243 m_StatusBarMessage.setText(szMessage);
1246void MainWindow::slotUpdateName()
1248 foreach (
auto p, m_Operates)
1257void MainWindow::slotUpdateName(
const QString& szName)
1259 COperate* p = qobject_cast<COperate*>(sender());
1262 m_pView->SetWidowsTitle(p->
GetViewer(), szName,
1267 m_pRecentMenu->updateRecentFile(p->GetSettingsFile(), szName, p->
Icon());
1271 m_pRecentDb->UpdateRecent(
1276 foreach(
auto a, ui->menuActivity->actions()) {
1277 if(a->data().value<
COperate*>() == p) {
1279 a->setIcon(p->
Icon());
1285 m_pFavoriteView->slotUpdateFavorite(
1289 m_pFrmActive->slotLoad();
1292QAction* MainWindow::GetStartAction(QMenu* pMenu,
CPlugin *pPlug)
1296 szTitle = pPlug->
Protocol() +
": ";
1298 QAction* p = pMenu->addAction(szTitle);
1301 p->setData(pPlug->
Id());
1302 p->setIcon(pPlug->Icon());
1306void MainWindow::slotStartByType()
1308 qDebug(log) << Q_FUNC_INFO;
1309 auto m = ui->menuStart->actions();
1310 foreach(
auto a, m) {
1313 foreach (
auto a, m_MenuStartByType) {
1316 ui->menuStart->clear();
1317 m_MenuStartByType.clear();
1324 QMenu* m = ui->menuStart;
1325 if(m_Parameter.GetStartByType()) {
1326 auto it = m_MenuStartByType.find(pPlugin->Type());
1327 if(it == m_MenuStartByType.end()) {
1328 m =
new QMenu(pPlugin->TypeName(pPlugin->Type()), ui->menuStart);
1329 m_MenuStartByType[pPlugin->Type()] = m;
1330 ui->menuStart->addMenu(m);
1335 QAction* p = GetStartAction(m, pPlugin);
1337 check = connect(p, SIGNAL(triggered()),
this, SLOT(slotStart()));
1342void MainWindow::closeEvent(QCloseEvent *event)
1344 qDebug(log) <<
"MainWindow::closeEvent()";
1346 if(m_Parameter.GetSaveMainWindowStatus())
1348 on_actionFull_screen_F_triggered();
1350 SaveOperateLasterClose();
1352 foreach (
auto it, m_Operates)
1355 emit it->sigUpdateParameters(it);
1359 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
1360 QSettings::IniFormat);
1361 if(m_Parameter.GetSaveMainWindowStatus())
1363 set.setValue(
"MainWindow/Status/Geometry", saveGeometry());
1364 set.setValue(
"MainWindow/Status/State", saveState());
1366 m_Parameter.SetTabBar(ui->actionTabBar_B->isChecked());
1367 m_Parameter.SetMenuBar(menuBar()->isVisible());
1368 m_Parameter.SetStatusBar(statusBar()->isVisible());
1370 set.remove(
"MainWindow/Status/Geometry");
1371 set.remove(
"MainWindow/Status/State");
1377 QMainWindow::closeEvent(event);
1383int MainWindow::LoadOperateLasterClose()
1385 if(!m_Parameter.GetOpenLasterClose())
1388 QFile f(RabbitCommon::CDir::Instance()->GetDirUserConfig()
1389 + QDir::separator() +
"LasterClose.dat");
1390 if(f.open(QFile::ReadOnly))
1396 if(szFile.isEmpty())
1398 slotOpenFile(szFile);
1405int MainWindow::SaveOperateLasterClose()
1407 QFile f(RabbitCommon::CDir::Instance()->GetDirUserConfig()
1408 + QDir::separator() +
"LasterClose.dat");
1409 bool bRet = f.open(QFile::WriteOnly);
1410 if(bRet && m_Parameter.GetOpenLasterClose())
1413 foreach(
auto it, m_Operates)
1415 d << it->GetSettingsFile();
1422void MainWindow::on_actionTabBar_B_toggled(
bool bShow)
1426 m_pView->SetVisibleTab(bShow);
1427 m_Parameter.SetTabBar(bShow);
1430 m_pDockActive->setVisible(bShow);
1434void MainWindow::on_actionMain_menu_bar_M_toggled(
bool checked)
1436 qDebug(log) << Q_FUNC_INFO << checked;
1437 if(ui->toolBar->isHidden() && !checked)
1439 if( QMessageBox::StandardButton::Yes
1440 == QMessageBox::information(
this, tr(
"Hide menu bar"),
1441 tr(
"The menu bar will be hidden, the tool bar must be showed."),
1442 QMessageBox::StandardButton::Yes
1443 | QMessageBox::StandardButton::No))
1445 ui->actionToolBar_T->setChecked(
true);
1446 if(m_pToolBarMenuAction)
1447 m_pToolBarMenuAction->setVisible(
true);
1449 ui->actionMain_menu_bar_M->setChecked(
true);
1450#if !defined(Q_OS_ANDROID)
1451 if(m_pToolBarMenuAction)
1452 m_pToolBarMenuAction->setVisible(
false);
1458 menuBar()->setVisible(checked);
1459 m_Parameter.SetMenuBar(checked);
1460#if !defined(Q_OS_ANDROID)
1461 if(m_pToolBarMenuAction)
1462 m_pToolBarMenuAction->setVisible(!checked);
1466void MainWindow::on_actionToolBar_T_toggled(
bool checked)
1468 qDebug(log) << Q_FUNC_INFO << checked;
1469 if(menuBar()->isHidden() && !checked)
1471 if( QMessageBox::StandardButton::Yes
1472 == QMessageBox::information(
this, tr(
"Hide tool bar"),
1473 tr(
"The tool bar will be hidden, the menu bar must be showed."),
1474 QMessageBox::StandardButton::Yes
1475 | QMessageBox::StandardButton::No))
1477 ui->actionMain_menu_bar_M->setChecked(
true);
1479 ui->actionToolBar_T->setChecked(
true);
1483 ui->toolBar->setVisible(checked);
1486void MainWindow::on_actionStatus_bar_S_toggled(
bool checked)
1488 statusBar()->setVisible(checked);
1489 m_Parameter.SetStatusBar(checked);
1493void MainWindow::on_actionSettings_triggered()
1497 set.AddViewers(viewers);
1498 if(CParameterDlgSettings::Accepted == RC_SHOW_WINDOW(&set))
1503 foreach(
auto v, viewers) {
1509void MainWindow::slotShortCut()
1511 if(m_Parameter.GetReceiveShortCut())
1513 setFocusPolicy(Qt::WheelFocus);
1514 ui->actionFull_screen_F->setShortcuts(QKeySequence::FullScreen);
1516 setFocusPolicy(Qt::NoFocus);
1517 ui->actionFull_screen_F->setShortcut(QKeySequence());
1521void MainWindow::on_actionOpenListRecent_triggered()
1525 bool check = connect(p, SIGNAL(sigStart(
const QString&,
bool)),
1526 this, SLOT(slotOpenFile(
const QString&,
bool)));
1528 check = connect(p, SIGNAL(sigAddToFavorite(QString,QString,QString,QIcon)),
1529 m_pFavoriteView, SLOT(slotAddToFavorite(QString,QString,QString,QIcon)));
1535 d.setWindowIcon(windowIcon());
1536 d.setWindowTitle(p->windowTitle());
1537 QGridLayout* pLayout =
new QGridLayout(&d);
1539 pLayout->addWidget(p);
1540 check = connect(p, SIGNAL(destroyed()), &d, SLOT(reject()));
1541 d.setLayout(pLayout);
1546void MainWindow::on_actionAdd_to_favorite_triggered()
1548 if(!m_pView || !m_pFavoriteView)
return;
1550 foreach(
auto c, m_Operates)
1554 m_pFavoriteView->slotAddToFavorite(
1560void MainWindow::dragEnterEvent(QDragEnterEvent *event)
1562 qDebug(log) <<
"dragEnterEvent";
1564 if(event->mimeData()->hasUrls())
1566 qWarning(log) <<
event->mimeData()->urls();
1567 event->acceptProposedAction();
1571void MainWindow::dragMoveEvent(QDragMoveEvent *event)
1576void MainWindow::dropEvent(QDropEvent *event)
1578 qDebug(log) <<
"dropEvent";
1579 if(!event->mimeData()->hasUrls())
1581 auto urls =
event->mimeData()->urls();
1582 foreach(
auto url, urls)
1584 if(url.isLocalFile())
1585 slotOpenFile(url.toLocalFile());
1589void MainWindow::slotSystemTrayIconActivated(QSystemTrayIcon::ActivationReason reason)
1594#if defined(Q_OS_ANDROID)
1599 case QSystemTrayIcon::Trigger:
1611void MainWindow::slotSystemTrayIconTypeChanged()
1614 if(!QSystemTrayIcon::isSystemTrayAvailable())
1616 qWarning(log) <<
"System tray is not available";
1620 if(!m_Parameter.GetEnableSystemTrayIcon())
1622 qDebug(log) <<
"Disable system tray icon";
1629 m_TrayIcon = QSharedPointer<QSystemTrayIcon>(
new QSystemTrayIcon(
this));
1630 if(QSystemTrayIcon::isSystemTrayAvailable())
1632 bool check = connect(
1634 SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
1636 SLOT(slotSystemTrayIconActivated(QSystemTrayIcon::ActivationReason)));
1638 m_TrayIcon->setIcon(this->windowIcon());
1639 m_TrayIcon->setToolTip(windowTitle());
1642 qWarning(log) <<
"System tray is not available";
1644 switch (m_Parameter.GetSystemTrayIconMenuType())
1646 case CParameterApp::SystemTrayIconMenuType::MenuBar:
1648 QMenu* pMenu =
new QMenu(
this);
1649 pMenu->addMenu(ui->menuOperate);
1650 pMenu->addMenu(ui->menuView);
1651 pMenu->addMenu(ui->menuTools);
1652 m_TrayIcon->setContextMenu(pMenu);
1655 case CParameterApp::SystemTrayIconMenuType::Operate:
1656 m_TrayIcon->setContextMenu(ui->menuOperate);
1658 case CParameterApp::SystemTrayIconMenuType::RecentOpen:
1659 m_TrayIcon->setContextMenu(m_pRecentMenu);
1661 case CParameterApp::SystemTrayIconMenuType::View:
1662 m_TrayIcon->setContextMenu(ui->menuView);
1664 case CParameterApp::SystemTrayIconMenuType::Tools:
1665 m_TrayIcon->setContextMenu(ui->menuTools);
1667 case CParameterApp::SystemTrayIconMenuType::No:
1668 m_TrayIcon->setContextMenu(
nullptr);
1673void MainWindow::slotEnableSystemTrayIcon()
1678 if(!m_Parameter.GetEnableSystemTrayIcon())
1681 slotSystemTrayIconTypeChanged();
1684void MainWindow::slotTimeOut()
1688 qDebug(log) <<
"The current view is empty";
1691 foreach(
auto p, m_Operates)
1693 if(p->GetViewer() == pWin)
1695 auto pStats = p->GetStats();
1697 SetStatsVisible(
false);
1700 SetStatsVisible(
true);
1701 pStats->slotCalculating();
1702 m_TotalSends.setText(
"⇈ " + pStats->TotalSends());
1703 m_TotalReceives.setText(
"⇊ " + pStats->TotalReceives());
1704 m_SendRate.setText(
"↑ " + pStats->SendRate());
1705 m_ReceivesRate.setText(
"↓ " + pStats->ReceiveRate());
1711void MainWindow::SetStatsVisible(
bool visible)
1713 if(m_SendRate.isVisible() == visible)
1715 m_SendRate.setVisible(visible);
1716 m_ReceivesRate.setVisible(visible);
1717 m_TotalSends.setVisible(visible);
1718 m_TotalReceives.setVisible(visible);
1721void MainWindow::StartTimer()
1723 bool bStart =
false;
1724 int nMinInterval = 60;
1725 foreach(
auto o, m_Operates) {
1726 if(o && o->GetStats()) {
1727 nMinInterval = qMin(nMinInterval, o->GetStats()->
GetInterval());
1732 m_Timer.start(nMinInterval * 1000);
1737void MainWindow::on_actionUser_manual_triggered()
1739 QString szUrl =
"https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual";
1740 if(RabbitCommon::CTools::GetLanguage() ==
"zh_CN"
1741 || RabbitCommon::CTools::GetLanguage() ==
"zh_TW")
1745void MainWindow::on_actionLayoutDefault_triggered()
1747 qDebug(log) << Q_FUNC_INFO;
1748 if(!m_pDockActive->toggleViewAction()->isChecked())
1749 m_pDockActive->toggleViewAction()->trigger();
1750 if(!m_pDockFavorite->toggleViewAction()->isChecked())
1751 m_pDockFavorite->toggleViewAction()->trigger();
1752 if(!m_pDockRecent->toggleViewAction()->isChecked())
1753 m_pDockRecent->toggleViewAction()->trigger();
1754 m_Parameter.SetTabPosition(QTabWidget::North);
1755 if(!ui->actionTabBar_B->isChecked())
1756 ui->actionTabBar_B->trigger();
1757 if(!ui->actionMain_menu_bar_M->isChecked()) {
1758 ui->actionMain_menu_bar_M->trigger();
1759#if !defined(Q_OS_ANDROID)
1760 m_pToolBarMenuAction->setVisible(
false);
1763 if(!ui->actionToolBar_T->isChecked())
1764 ui->actionToolBar_T->trigger();
1765 addToolBar(Qt::TopToolBarArea, ui->toolBar);
1766 if(!ui->actionStatus_bar_S->isChecked())
1767 ui->actionStatus_bar_S->trigger();
1770void MainWindow::on_actionLayoutSimple_triggered()
1772 qDebug(log) << Q_FUNC_INFO;
1773 if(m_pDockActive->toggleViewAction()->isChecked())
1774 m_pDockActive->toggleViewAction()->trigger();
1775 if(m_pDockFavorite->toggleViewAction()->isChecked())
1776 m_pDockFavorite->toggleViewAction()->trigger();
1777 if(m_pDockRecent->toggleViewAction()->isChecked())
1778 m_pDockRecent->toggleViewAction()->trigger();
1779 m_Parameter.SetTabPosition(QTabWidget::East);
1780 if(!ui->actionTabBar_B->isChecked())
1781 ui->actionTabBar_B->trigger();
1782 if(!ui->actionMain_menu_bar_M->isChecked()) {
1783 ui->actionMain_menu_bar_M->trigger();
1784#if !defined(Q_OS_ANDROID)
1785 m_pToolBarMenuAction->setVisible(
false);
1788 if(!ui->actionToolBar_T->isChecked())
1789 ui->actionToolBar_T->trigger();
1790 addToolBar(Qt::LeftToolBarArea, ui->toolBar);
1791 if(!ui->actionStatus_bar_S->isChecked())
1792 ui->actionStatus_bar_S->trigger();
1795void MainWindow::on_actionLayoutMinimalism_triggered()
1797 qDebug(log) << Q_FUNC_INFO;
1798 if(m_pDockActive->toggleViewAction()->isChecked())
1799 m_pDockActive->toggleViewAction()->trigger();
1800 if(m_pDockFavorite->toggleViewAction()->isChecked())
1801 m_pDockFavorite->toggleViewAction()->trigger();
1802 if(m_pDockRecent->toggleViewAction()->isChecked())
1803 m_pDockRecent->toggleViewAction()->trigger();
1804 m_Parameter.SetTabPosition(QTabWidget::East);
1805 if(ui->actionTabBar_B->isChecked())
1806 ui->actionTabBar_B->trigger();
1807#if !defined(Q_OS_MACOS)
1808 if(ui->actionMain_menu_bar_M->isChecked()) {
1809 ui->actionMain_menu_bar_M->trigger();
1810 m_pToolBarMenuAction->setVisible(
true);
1813 if(!ui->actionToolBar_T->isChecked())
1814 ui->actionToolBar_T->trigger();
1815#if defined(Q_OS_LINUX)
1816 addToolBar(Qt::RightToolBarArea, ui->toolBar);
1818 addToolBar(Qt::LeftToolBarArea, ui->toolBar);
1820 if(ui->actionStatus_bar_S->isChecked())
1821 ui->actionStatus_bar_S->trigger();
virtual bool OpenDatabase(CParameterDatabase *pPara=nullptr)
OpenDatabase.
List the connect of be existed.
static CICE * Instance()
Single instance.
virtual QList< QWidget * > GetSettingsWidgets(QWidget *parent)
Get parameter settings widget.
virtual int EnumPlugins(Handle *handle)
Enum plugins.
virtual COperate * CreateOperate(const QString &id)
New COperate pointer, the owner is caller.
virtual COperate * LoadOperate(const QString &szFile)
New COperate pointer from file, the owner is caller.
virtual int DeleteOperate(COperate *p)
Delete COperate.
virtual int SaveOperate(COperate *pOperate)
Accept Operate parameters to file.
virtual int SaveSettings(const QString szFile=QString())
Save Client parameters to file.
CParameterGlobal * GetGlobalParameters()
Get Global Parameters.
void sigNewOperate(COperate *pOperate, bool bOpenSettingsDialog)
This signal is triggered when a new operate is created in the plugin.
virtual int OpenDialogSettings(QWidget *parent=nullptr)
Open settings dialog.
virtual const QIcon Icon() const
Icon.
virtual int Start()=0
Start.
void sigFullScreen(bool bFullScreen)
Full screen.
virtual QWidget * GetViewer()=0
Get Viewer.
virtual const QString Protocol() const
Protocol.
virtual const QString Name()
Name.
virtual int Stop()=0
Stop.
virtual const QString Description()
Description.
void sigUpdateParameters(COperate *pOperate)
Update parameters, notify application to save or show parameters.
virtual const QString Id()
Identity.
virtual const QString GetTypeName() const
Get type name.
virtual QMenu * GetMenu(QWidget *parent=nullptr)
Get menu.
virtual int Save(QString szFile=QString(), bool bForce=true)
Save to file.
virtual const QString DisplayName() const
The plugin display name.
virtual const QString Protocol() const =0
Plugin Protocol.
virtual const QString Id() const
ID. Default: Type() + ":" + Protocol() + ":" + Name()
virtual const QString Description() const =0
Plugin description.
int GetInterval()
Get interval.
virtual int AddView(QWidget *pView)=0
virtual QWidget * GetCurrentView()=0
virtual int RemoveView(QWidget *pView)=0
Q_INVOKABLE int Start(COperate *pOperate, bool set, QString szFile=QString())
Start.
virtual int onProcess(const QString &id, CPlugin *pPlugin) override
Process plugins.
void slotInitial()
For time-consuming operations.
void slotInformation(const QString &szInfo)
Show information.
virtual void slotShowMessageBox(const QString &title, const QString &message, const QMessageBox::Icon &icon)
Use message box display information.
void slotRunning()
[MainWindow slotRunning]
void slotCloseView(const QWidget *pView)
[MainWindow slotRunning]
void slotCustomContextMenuRequested(const QPoint &pos)
MainWindow::slotCustomContextMenuRequested.