4#include "ui_mainwindow.h"
8#include "RabbitCommonDir.h"
9#include "RabbitCommonTools.h"
15#include "QUIWidget/QUIWidget.h"
19#include "FrmFullScreenToolBar.h"
20#include "ParameterDlgSettings.h"
21#include "FrmListRecent.h"
24#include "ViewSplitter.h"
30#include <QFontMetrics>
35#include <QApplication>
37#include <QDesktopServices>
38#include <QWidgetAction>
42#include <QKeySequence>
46#include <QLoggingCategory>
49static Q_LOGGING_CATEGORY(log,
"App.MainWindow")
50static Q_LOGGING_CATEGORY(logRecord, "App.
MainWindow.Record")
54 , m_pToolBarMenuAction(
nullptr)
55 , m_pMenuActivityGroup(
nullptr)
56 , m_ptbMenuActivity(
nullptr)
57 , m_pActionOperateMenu(
nullptr)
58 , m_pTBOperate(
nullptr)
59 , m_pActionTBOperate(
nullptr)
60 , m_pDockListRecent(
nullptr)
61 , m_pDockActive(
nullptr)
62 , m_pFrmActive(
nullptr)
63 , m_pSecureLevel(
nullptr)
64 , m_pSignalStatus(
nullptr)
67 , m_pFullScreenToolBar(
nullptr)
68 , m_pRecentMenu(
nullptr)
69 , m_pDockFavorite(
nullptr)
70 , m_pFavoriteView(
nullptr)
71 , m_StatusBarMessage(this)
78 m_StatusBarMessage.setSizePolicy(QSizePolicy::Policy::Expanding,
79 QSizePolicy::Policy::Fixed);
81 this->statusBar()->addWidget(&m_StatusBarMessage);
83 m_SendRate.setToolTip(tr(
"Send rate"));
84 m_SendRate.setStatusTip(tr(
"Send rate"));
87 this->statusBar()->addPermanentWidget(&m_SendRate);
88 m_ReceivesRate.setToolTip(tr(
"Receives rate"));
89 m_ReceivesRate.setStatusTip(tr(
"Receives rate"));
92 this->statusBar()->addPermanentWidget(&m_ReceivesRate);
93 m_TotalSends.setToolTip(tr(
"Total sends"));
94 m_TotalSends.setStatusTip(tr(
"Total sends"));
97 this->statusBar()->addPermanentWidget(&m_TotalSends);
98 m_TotalReceives.setToolTip(tr(
"Total receives"));
99 m_TotalReceives.setStatusTip(tr(
"Total receives"));
102 this->statusBar()->addPermanentWidget(&m_TotalReceives);
104 check = connect(&m_Timer, SIGNAL(timeout()),
this, SLOT(slotTimeOut()));
107 m_pSecureLevel =
new QLabel(statusBar());
111 m_pSecureLevel->hide();
112 statusBar()->addPermanentWidget(m_pSecureLevel);
116 setAcceptDrops(
true);
118 RabbitCommon::CTools::AddStyleMenu(ui->menuTools);
119 ui->menuTools->addMenu(RabbitCommon::CTools::GetLogMenu(
this));
121 m_pRecentMenu =
new RabbitCommon::CRecentMenu(
123 QIcon::fromTheme(
"document-open-recent"),
125 check = connect(m_pRecentMenu, SIGNAL(recentFileTriggered(
const QString&)),
126 this, SLOT(slotOpenFile(
const QString&)));
128 check = connect(&m_Parameter, SIGNAL(sigRecentMenuMaxCountChanged(
int)),
129 m_pRecentMenu, SLOT(setMaxCount(
int)));
131 QAction* pRecentAction = ui->menuOperate->insertMenu(
132 ui->actionOpenListRecent, m_pRecentMenu);
133 pRecentAction->setStatusTip(pRecentAction->text());
134 QToolButton* tbRecent =
new QToolButton(ui->toolBar);
135 tbRecent->setFocusPolicy(Qt::NoFocus);
136 tbRecent->setPopupMode(QToolButton::InstantPopup);
137 tbRecent->setMenu(m_pRecentMenu);
138 tbRecent->setIcon(pRecentAction->icon());
139 tbRecent->setText(pRecentAction->text());
140 tbRecent->setToolTip(pRecentAction->toolTip());
141 tbRecent->setStatusTip(pRecentAction->statusTip());
142 ui->toolBar->insertWidget(ui->actionOpenListRecent, tbRecent);
146 ui->actionUpdate->setIcon(updater.windowIcon());
149 QToolButton* tbStart =
new QToolButton(ui->toolBar);
150 tbStart->setFocusPolicy(Qt::NoFocus);
151 tbStart->setPopupMode(QToolButton::InstantPopup);
153 tbStart->setMenu(ui->menuStart);
154 tbStart->setIcon(QIcon::fromTheme(
"media-playback-start"));
155 tbStart->setText(tr(
"Start"));
156 tbStart->setToolTip(tr(
"Start"));
157 tbStart->setStatusTip(tr(
"Start"));
158 ui->toolBar->insertWidget(ui->actionStop, tbStart);
162 check = connect(&m_Parameter, SIGNAL(sigReceiveShortCutChanged()),
163 this, SLOT(slotShortCut()));
165 slotSystemTrayIconTypeChanged();
166 check = connect(&m_Parameter, SIGNAL(sigSystemTrayIconTypeChanged()),
168 SLOT(slotSystemTrayIconTypeChanged()));
170 check = connect(&m_Parameter, SIGNAL(sigEnableSystemTrayIcon()),
171 this, SLOT(slotEnableSystemTrayIcon()));
173 check = connect(&m_Parameter, SIGNAL(sigEnableTabToolTipChanged()),
174 this, SLOT(slotUpdateName()));
176 check = connect(&m_Parameter, SIGNAL(sigEnableTabIconChanged()),
177 this, SLOT(slotUpdateName()));
180 auto pTbMenu =
new QToolButton(ui->toolBar);
181 pTbMenu->setFocusPolicy(Qt::NoFocus);
182 pTbMenu->setPopupMode(QToolButton::InstantPopup);
184 pTbMenu->setText(ui->actionMain_menu_bar_M->text());
185 pTbMenu->setIcon(ui->actionMain_menu_bar_M->icon());
186 pTbMenu->setToolTip(ui->actionMain_menu_bar_M->toolTip());
187 pTbMenu->setStatusTip(ui->actionMain_menu_bar_M->statusTip());
188 QMenu *pMenu =
new QMenu(pTbMenu);
189 pMenu->addActions(this->menuBar()->actions());
190 pTbMenu->setMenu(pMenu);
191 m_pToolBarMenuAction = ui->toolBar->insertWidget(ui->actionTabBar_B, pTbMenu);
192#if defined(Q_OS_ANDROID)
193 m_pToolBarMenuAction->setVisible(
true);
195 m_pToolBarMenuAction->setVisible(
false);
198 m_Manager.EnumPlugins(
this);
199 check = connect(&m_Parameter, SIGNAL(sigStartByTypeChanged()),
200 this, SLOT(slotStartByType()));
203 m_pDockFavorite =
new QDockWidget(
this);
209 m_pDockFavorite->setTitleBarWidget(m_pFavoriteView->m_pDockTitleBar);
210 check = connect(m_pFavoriteView, SIGNAL(sigStart(
const QString&,
bool)),
211 this, SLOT(slotOpenFile(
const QString&,
bool)));
213 check = connect(m_pFavoriteView, SIGNAL(sigFavorite()),
214 this, SLOT(on_actionAdd_to_favorite_triggered()));
216 check = connect(&m_Parameter, SIGNAL(sigFavoriteEditChanged(
bool)),
217 m_pFavoriteView, SLOT(slotDoubleEditNode(
bool)));
219 emit m_Parameter.sigFavoriteEditChanged(m_Parameter.GetFavoriteEdit());
220 m_pDockFavorite->setWidget(m_pFavoriteView);
221 m_pDockFavorite->setWindowTitle(m_pFavoriteView->windowTitle());
224 m_pDockFavorite->setObjectName(
"dockFavorite");
225#if defined(Q_OS_ANDROID)
226 m_pDockFavorite->hide();
228 ui->menuView->addAction(m_pDockFavorite->toggleViewAction());
229 m_pDockFavorite->toggleViewAction()->setIcon(QIcon::fromTheme(
"emblem-favorite"));
230 addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea, m_pDockFavorite);
233 m_pDockListRecent =
new QDockWidget(
this);
234 if(m_pDockListRecent)
240 if(pListRecent->m_pDockTitleBar)
241 m_pDockListRecent->setTitleBarWidget(
242 pListRecent->m_pDockTitleBar);
243 check = connect(pListRecent,
244 SIGNAL(sigStart(
const QString&,
bool)),
245 this, SLOT(slotOpenFile(
const QString&,
bool)));
247 check = connect(pListRecent, SIGNAL(sigAddToFavorite(QString,QString,QIcon,QString)),
248 m_pFavoriteView, SLOT(slotAddToFavorite(QString,QString,QIcon,QString)));
250 m_pDockListRecent->setWidget(pListRecent);
251 m_pDockListRecent->setWindowTitle(
252 pListRecent->windowTitle());
255 m_pDockListRecent->setObjectName(
"dockListRecent");
256#if defined(Q_OS_ANDROID)
257 m_pDockListRecent->hide();
259 ui->menuView->addAction(m_pDockListRecent->toggleViewAction());
260 m_pDockListRecent->toggleViewAction()->setIcon(QIcon::fromTheme(
"document-open-recent"));
261 tabifyDockWidget(m_pDockFavorite, m_pDockListRecent);
264 m_pDockActive =
new QDockWidget(
this);
268 m_Operates, m_Parameter,
269 ui->menuStart, ui->actionStop,
270 m_pRecentMenu, m_pDockActive);
272 m_pDockActive->setWidget(m_pFrmActive);
273 if(m_pFrmActive->m_pDockTitleBar)
274 m_pDockActive->setTitleBarWidget(
275 m_pFrmActive->m_pDockTitleBar);
276 m_pDockActive->setWindowTitle(m_pFrmActive->windowTitle());
277 check = connect(m_pFrmActive, SIGNAL(sigChanged(
COperate*)),
278 this, SLOT(slotOperateChanged(
COperate*)));
280 check = connect(m_pFrmActive, SIGNAL(sigAddToFavorite(QString,QString,QIcon,QString)),
281 m_pFavoriteView, SLOT(slotAddToFavorite(QString,QString,QIcon,QString)));
284 m_pDockActive->setObjectName(
"dockListActive");
285#if defined(Q_OS_ANDROID)
286 m_pDockActive->hide();
288 ui->menuView->addAction(m_pDockActive->toggleViewAction());
289 m_pDockActive->toggleViewAction()->setIcon(QIcon::fromTheme(
"network-wired"));
290 tabifyDockWidget(m_pDockFavorite, m_pDockActive);
293 QActionGroup* pGBView =
new QActionGroup(
this);
295 pGBView->addAction(ui->actionViewTab);
296 pGBView->addAction(ui->actionViewSplit);
298 qDebug(log) <<
"View type:" << m_Parameter.GetViewType();
299 if(CParameterApp::ViewType::Tab == m_Parameter.GetViewType()) {
300 ui->actionViewTab->setChecked(
true);
301 on_actionViewTab_triggered();
303 if(CParameterApp::ViewType::Splitter == m_Parameter.GetViewType()) {
304 ui->actionViewSplit->setChecked(
true);
305 on_actionViewSplit_triggered();
307 check = connect(&m_Parameter, &CParameterApp::sigViewTypeChanged,
313 m_pMenuActivityGroup =
new QActionGroup(ui->menuActivity);
314 m_ptbMenuActivity =
new QToolButton(ui->toolBar);
315 m_ptbMenuActivity->setFocusPolicy(Qt::NoFocus);
316 m_ptbMenuActivity->setPopupMode(QToolButton::InstantPopup);
317 m_ptbMenuActivity->setMenu(ui->menuActivity);
318 m_ptbMenuActivity->setIcon(ui->menuActivity->icon());
319 m_ptbMenuActivity->setText(ui->menuActivity->title());
320 m_ptbMenuActivity->setToolTip(ui->menuActivity->toolTip());
321 m_ptbMenuActivity->setStatusTip(ui->menuActivity->statusTip());
322 ui->toolBar->insertWidget(ui->actionTabBar_B, m_ptbMenuActivity);
331 SIGNAL(sigConnected()),
332 this, SLOT(slotSignalConnected()));
335 SIGNAL(sigDisconnected()),
336 this, SLOT(slotSignalDisconnected()));
339 SIGNAL(sigError(
const int,
const QString&)),
340 this, SLOT(slotSignalError(
const int,
const QString&)));
344 m_pSignalStatus =
new QPushButton();
345 m_pSignalStatus->setToolTip(tr(
"ICE signal status"));
346 m_pSignalStatus->setStatusTip(m_pSignalStatus->toolTip());
347 m_pSignalStatus->setWhatsThis(m_pSignalStatus->toolTip());
348 slotSignalDisconnected();
349 statusBar()->addPermanentWidget(m_pSignalStatus);
352 if(m_Parameter.GetSaveMainWindowStatus())
354 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
355 QSettings::IniFormat);
357 = set.value(
"MainWindow/Status/Geometry").toByteArray();
358 if(!geometry.isEmpty())
359 restoreGeometry(geometry);
361 QByteArray state = set.value(
"MainWindow/Status/State").toByteArray();
365 ui->actionTabBar_B->setChecked(m_Parameter.GetTabBar());
366 on_actionTabBar_B_toggled(m_Parameter.GetTabBar());
367 ui->actionStatus_bar_S->setChecked(m_Parameter.GetStatusBar());
368 statusBar()->setVisible(m_Parameter.GetStatusBar());
369 ui->actionMain_menu_bar_M->setChecked(m_Parameter.GetMenuBar());
370 menuBar()->setVisible(m_Parameter.GetMenuBar());
371 ui->actionToolBar_T->setChecked(!ui->toolBar->isHidden());
375 ui->actionMain_menu_bar_M->setVisible(
false);
378 if(!m_Parameter.GetMenuBar()) {
379 m_pToolBarMenuAction->setVisible(
true);
384 slotEnableSystemTrayIcon();
386 LoadOperateLasterClose();
389MainWindow::~MainWindow()
391 qDebug(log) <<
"MainWindow::~MainWindow()";
392 if(m_pFullScreenToolBar) m_pFullScreenToolBar->close();
396void MainWindow::SetView(
CView* pView)
398 qDebug(log) << Q_FUNC_INFO;
402 m_pView->disconnect();
405 setCentralWidget(m_pView);
409 check = connect(m_pView, SIGNAL(sigCloseView(
const QWidget*)),
412 check = connect(m_pView, SIGNAL(sigCurrentChanged(
const QWidget*)),
413 this, SLOT(slotCurrentViewChanged(
const QWidget*)));
416 check = connect(m_pView, SIGNAL(sigCurrentChanged(
const QWidget*)),
417 m_pFrmActive, SLOT(slotViewChanged(
const QWidget*)));
420 check = connect(m_pView, SIGNAL(customContextMenuRequested(
const QPoint&)),
424 foreach (
auto c, m_Operates) {
425 m_pView->
AddView(c->GetViewer());
426 m_pView->SetWidowsTitle(
427 c->GetViewer(), c->Name(), c->Icon(), c->Description());
429 m_pView->SetVisibleTab(m_Parameter.GetTabBar());
432void MainWindow::on_actionViewTab_triggered()
434 qDebug(log) << Q_FUNC_INFO;
435 if(!ui->actionViewTab->isChecked())
return;
436 m_Parameter.SetViewType(CParameterApp::ViewType::Tab);
440void MainWindow::on_actionViewSplit_triggered()
442 qDebug(log) << Q_FUNC_INFO;
443 if(!ui->actionViewSplit->isChecked())
return;
444 m_Parameter.SetViewType(CParameterApp::ViewType::Splitter);
448void MainWindow::on_actionAbout_triggered()
451 CDlgAbout *about =
new CDlgAbout(
this);
452 QIcon icon = QIcon::fromTheme(
"app");
454 auto sizeList = icon.availableSizes();
455 if(!sizeList.isEmpty()) {
456 QPixmap p = icon.pixmap(*sizeList.begin());
457 about->m_AppIcon = p.toImage();
460 about->m_szCopyrightStartTime =
"2020";
461 about->m_szVersionRevision = RabbitRemoteControl_REVISION;
462 about->m_szDetails = m_Manager.Details();
463 RC_SHOW_WINDOW(about);
467void MainWindow::on_actionUpdate_triggered()
469 if(!qEnvironmentVariable(
"SNAP").isEmpty()) {
470 QDesktopServices::openUrl(QUrl(
"https://snapcraft.io/rabbitremotecontrol"));
471 }
else if(!qEnvironmentVariable(
"FLATPAK_ID").isEmpty()) {
472 QDesktopServices::openUrl(QUrl(
"https://flathub.org/apps/io.github.KangLin.RabbitRemoteControl"));
475 CFrmUpdater* m_pfrmUpdater =
new CFrmUpdater();
476 QIcon icon = QIcon::fromTheme(
"app");
478 auto sizeList = icon.availableSizes();
479 if(!sizeList.isEmpty()) {
480 QPixmap p = icon.pixmap(*sizeList.begin());
481 m_pfrmUpdater->SetTitle(p.toImage());
484 m_pfrmUpdater->SetInstallAutoStartup();
485 RC_SHOW_WINDOW(m_pfrmUpdater);
490void MainWindow::on_actionFull_screen_F_triggered()
492 CView* pView = qobject_cast<CView*>(this->centralWidget());
495 pView->SetFullScreen(!isFullScreen());
500 qDebug(log) <<
"Exit full screen";
501 ui->actionFull_screen_F->setIcon(QIcon::fromTheme(
"view-fullscreen"));
502 ui->actionFull_screen_F->setText(tr(
"Full screen(&F)"));
503 ui->actionFull_screen_F->setToolTip(tr(
"Full screen"));
504 ui->actionFull_screen_F->setStatusTip(tr(
"Full screen"));
505 ui->actionFull_screen_F->setWhatsThis(tr(
"Full screen"));
507 ui->toolBar->setVisible(m_FullState.toolBar);
508 ui->statusbar->setVisible(m_FullState.statusbar);
509 ui->menubar->setVisible(m_FullState.menubar);
511 m_pDockActive->setVisible(m_FullState.dockListActive);
512 m_pDockListRecent->setVisible(m_FullState.dockListRecent);
513 m_pDockFavorite->setVisible(m_FullState.dockFavorite);
515 QDockWidget* pDockDebugLog = findChild<QDockWidget*>(
"dockDebugLog");
518 pDockDebugLog->setVisible(m_FullState.dockDebugLog);
521 if(m_pFullScreenToolBar)
524 m_pFullScreenToolBar->close();
525 m_pFullScreenToolBar =
nullptr;
528 emit sigShowNormal();
530 this->activateWindow();
535 qDebug(log) <<
"Entry full screen";
536 emit sigFullScreen();
538 this->showFullScreen();
540 ui->actionFull_screen_F->setIcon(QIcon::fromTheme(
"view-restore"));
541 ui->actionFull_screen_F->setText(tr(
"Exit full screen(&E)"));
542 ui->actionFull_screen_F->setToolTip(tr(
"Exit full screen"));
543 ui->actionFull_screen_F->setStatusTip(tr(
"Exit full screen"));
544 ui->actionFull_screen_F->setWhatsThis(tr(
"Exit full screen"));
546 m_FullState.toolBar = ui->toolBar->isVisible();
547 ui->toolBar->setVisible(
false);
548 m_FullState.statusbar = ui->statusbar->isVisible();
549 ui->statusbar->setVisible(
false);
550 m_FullState.menubar = ui->menubar->isVisible();
551 ui->menubar->setVisible(
false);
553 m_FullState.dockListActive = m_pDockActive->isVisible();
554 m_pDockActive->setVisible(
false);
555 m_FullState.dockListRecent = m_pDockListRecent->isVisible();
556 m_pDockListRecent->setVisible(
false);
557 m_FullState.dockFavorite = m_pDockFavorite->isVisible();
558 m_pDockFavorite->setVisible(
false);
560 QDockWidget* pDockDebugLog = findChild<QDockWidget*>(
"dockDebugLog");
563 m_FullState.dockDebugLog = pDockDebugLog->isVisible();
564 pDockDebugLog->setVisible(
false);
567 if(m_pFullScreenToolBar) m_pFullScreenToolBar->close();
570 QScreen* pScreen = qApp->primaryScreen();
572 QPoint pos(pScreen->geometry().left()
573 + (pScreen->geometry().width()
574 - m_pFullScreenToolBar->frameGeometry().width()) / 2,
575 pScreen->geometry().top());
576 qDebug(log) <<
"Primary screen geometry:" << pScreen->geometry()
577 <<
"availableGeometry:" << pScreen->availableGeometry()
578 << pos << mapToGlobal(pos);
579 m_pFullScreenToolBar->move(pos);
581 bool check = connect(m_pFullScreenToolBar, SIGNAL(sigExitFullScreen()),
582 this, SLOT(on_actionFull_screen_F_triggered()));
584 check = connect(m_pFullScreenToolBar, SIGNAL(sigExit()),
585 this, SLOT(on_actionExit_E_triggered()));
588 check = connect(
this, SIGNAL(sigOperateMenuChanged(QAction*)),
589 m_pFullScreenToolBar,
590 SLOT(slotOperateMenuChanged(QAction*)));
593 m_pFullScreenToolBar->show();
596void MainWindow::slotViewerFocusIn(QWidget *pView)
598 COperate* c = qobject_cast<COperate*>(sender());
599 qDebug(log) << Q_FUNC_INFO <<
"Focus:" << c << pView;
605void MainWindow::slotOperateChanged(
COperate *o)
612void MainWindow::slotCurrentViewChanged(
const QWidget* pView)
614 qDebug(log) << Q_FUNC_INFO;
620 foreach(
auto o, m_Operates) {
623 SetStatsVisible(o->GetStats());
624 foreach (
auto a, ui->menuActivity->actions()) {
625 if(a->data().value<
COperate*>() == o)
632void MainWindow::EnableMenu(
bool bEnable)
634 qDebug(log) << Q_FUNC_INFO << bEnable;
635 ui->actionClone->setEnabled(bEnable);
636 ui->actionAdd_to_favorite->setEnabled(bEnable);
637 ui->actionStop->setEnabled(bEnable);
638 ui->actionTabBar_B->setEnabled(bEnable);
639 ui->menuActivity->setEnabled(bEnable);
640 m_ptbMenuActivity->setEnabled(bEnable);
641 slotLoadOperateMenu();
644void MainWindow::slotMenuActivity()
646 QAction* pAction = qobject_cast<QAction*>(sender());
651 slotOperateChanged(p);
654void MainWindow::slotLoadOperateMenu()
656 qDebug(log) << Q_FUNC_INFO;
658 if(m_pActionOperateMenu) {
659 ui->menuOperate->removeAction(m_pActionOperateMenu);
660 m_pActionOperateMenu =
nullptr;
662 ui->toolBar->removeAction(m_pActionTBOperate);
668 qDebug(log) <<
"The current view is empty";
671 foreach(
auto op, m_Operates)
673 if(op->GetViewer() == pWin)
675 qDebug(log) <<
"Load plugin menu";
676 auto m = op->GetMenu(ui->menuTools);
679 m_pActionOperateMenu = ui->menuOperate->insertMenu(ui->actionAdd_to_favorite, m);
682 m_pTBOperate =
new QToolButton(ui->toolBar);
684 m_pTBOperate->setFocusPolicy(Qt::NoFocus);
685 m_pTBOperate->setPopupMode(QToolButton::InstantPopup);
686 m_pTBOperate->setMenu(m);
687 m_pTBOperate->setIcon(m->icon());
688 m_pTBOperate->setText(m->title());
689 m_pTBOperate->setToolTip(m->toolTip());
690 m_pTBOperate->setStatusTip(m->statusTip());
691 m_pTBOperate->show();
692 m_pActionTBOperate = ui->toolBar->insertWidget(ui->actionAdd_to_favorite, m_pTBOperate);
694 emit sigOperateMenuChanged(m_pActionOperateMenu);
711 qDebug(log) <<
"The current view is empty";
714 foreach(
auto p, m_Operates)
718 qDebug(log) <<
"Load plugin menu";
719 auto m = p->
GetMenu(ui->menuTools);
727void MainWindow::on_actionExit_E_triggered()
732void MainWindow::keyReleaseEvent(QKeyEvent *event)
738 on_actionFull_screen_F_triggered();
741 QMainWindow::keyReleaseEvent(event);
744void MainWindow::slotUpdateParameters(
COperate *pOperate)
749void MainWindow::on_actionClone_triggered()
753 foreach(
auto pOperate, m_Operates)
757 QString szFile = pOperate->GetSettingsFile();
759 if(!pOperate)
return;
760 Start(pOperate,
false, szFile);
766void MainWindow::slotOpenFile(
const QString& szFile,
bool bOpenSettings)
768 if(szFile.isEmpty())
return;
772 slotStatusMessage(tr(
"Load file fail: ") + szFile, MessageLevel::Error);
776 Start(p, bOpenSettings, szFile);
779void MainWindow::on_actionOpenRRCFile_triggered()
781 QString szFile = QFileDialog::getOpenFileName(
783 tr(
"Open rabbit remote control file"),
784 RabbitCommon::CDir::Instance()->GetDirUserData(),
785 tr(
"Rabbit remote control Files (*.rrc);;All files(*.*)"));
786 if(szFile.isEmpty())
return;
791 slotStatusMessage(tr(
"Load file fail: ") + szFile, MessageLevel::Error);
798void MainWindow::slotStart()
800 if(
nullptr == m_pView)
805 QAction* pAction = qobject_cast<QAction*>(this->sender());
808 if(
nullptr == p)
return;
824 qDebug(log) <<
"MainWindow::Start: set:" << set <<
"; File:" << szFile;
827 bool check = connect(pOperate, SIGNAL(sigRunning()),
830 check = connect(pOperate, SIGNAL(sigStop()),
831 this, SLOT(slotStop()));
833 check = connect(pOperate, SIGNAL(sigFinished()),
834 this, SLOT(slotFinished()));
836 check = connect(pOperate, SIGNAL(sigError(
const int,
const QString &)),
837 this, SLOT(slotError(
const int,
const QString&)));
839 check = connect(pOperate, SIGNAL(sigShowMessageBox(
const QString&,
const QString&,
840 const QMessageBox::Icon&)),
842 const QMessageBox::Icon&)));
844 check = connect(pOperate, SIGNAL(sigInformation(
const QString&)),
847 check = connect(pOperate, SIGNAL(sigUpdateName(
const QString&)),
848 this, SLOT(slotUpdateName(
const QString&)));
850 check = connect(pOperate, SIGNAL(sigUpdateParameters(
COperate*)),
851 this, SLOT(slotUpdateParameters(
COperate*)));
859 case QDialog::Rejected:
862 case QDialog::Accepted:
869 szFile = pOperate->GetSettingsFile();
871 pOperate->SetSettingsFile(szFile);
877 m_pRecentMenu->addRecentFile(szFile, pOperate->
Name());
879 if(!pOperate->
Name().isEmpty())
883 if(-1 < m_Operates.indexOf(pOperate)) {
885 m_pView->SetCurrentView(pOperate->
GetViewer());
891 m_pView->SetWidowsTitle(pOperate->
GetViewer(), pOperate->
Name(),
894 check = connect(pOperate, SIGNAL(sigViewerFocusIn(QWidget*)),
895 this, SLOT(slotViewerFocusIn(QWidget*)));
898 m_Operates.push_back(pOperate);
901 m_pFrmActive->slotLoad();
905 vOperate.setValue(pOperate);
906 QAction* m_pActionmenuActivity = ui->menuActivity->addAction(
907 pOperate->
Icon(), pOperate->
Name(),
this, SLOT(slotMenuActivity()));
908 m_pActionmenuActivity->setData(vOperate);
909 m_pActionmenuActivity->setCheckable(
true);
910 m_pMenuActivityGroup->addAction(m_pActionmenuActivity);
911 m_pActionmenuActivity->setChecked(
true);
914 nRet = pOperate->
Start();
926 COperate* p = qobject_cast<COperate*>(sender());
951 m->addAction(ui->actionClone);
953 slotLoadOperateMenu();
956 qDebug(log) << Q_FUNC_INFO << p->
Name();
962 qDebug(log) <<
"MainWindow::slotCloseView" << pView;
964 foreach(
auto p, m_Operates)
975void MainWindow::on_actionStop_triggered()
977 qDebug(log) << Q_FUNC_INFO;
984void MainWindow::slotStop()
986 COperate* pOperate = qobject_cast<COperate*>(sender());
987 if(!pOperate)
return;
988 qDebug(log) << Q_FUNC_INFO << pOperate->
Name();
994void MainWindow::slotFinished()
996 COperate* pOperate = qobject_cast<COperate*>(sender());
997 if(!pOperate)
return;
999 qDebug(log) << Q_FUNC_INFO << pOperate->
Name();
1000 foreach(
auto a, ui->menuActivity->actions()) {
1003 ui->menuActivity->removeAction(a);
1004 m_pMenuActivityGroup->removeAction(a);
1007 foreach(
auto p, m_Operates)
1012 m_Operates.removeAll(p);
1014 m_pFrmActive->slotLoad();
1019 if(m_Operates.isEmpty())
1020 if(m_pActionOperateMenu) {
1021 ui->menuTools->removeAction(m_pActionOperateMenu);
1022 ui->toolBar->removeAction(m_pActionOperateMenu);
1023 m_pActionOperateMenu =
nullptr;
1031void SetIndicator(QLabel* label, QColor color,
int size)
1033 QString min_width = QString(
"min-width: %1px;").arg(size);
1034 QString min_height = QString(
"min-height: %1px;").arg(size);
1035 QString max_width = QString(
"max-width: %1px;").arg(size);
1036 QString max_height = QString(
"max-height: %1px;").arg(size);
1038 QString border_radius = QString(
"border-radius: %1px;").arg(size / 2);
1039 QString border = QString(
"border:1px solid ") + color.name() +
";";
1041 QString background =
"background-color: ";
1042 background += color.name() +
";";
1043 QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
1044 label->setStyleSheet(SheetStyle);
1047void MainWindow::SetSecureLevel(
COperate* o)
1049 if(!m_pSecureLevel)
return;
1051 if(COperate::SecurityLevel::No == o->GetSecurityLevel())
1053 m_pSecureLevel->hide();
1056 SetIndicator(m_pSecureLevel, o->GetSecurityLevelColor(), statusBar()->height() / 2);
1057 m_pSecureLevel->setToolTip(o->GetSecurityLevelString());
1058 m_pSecureLevel->setStatusTip(o->GetSecurityLevelString());
1059 m_pSecureLevel->show();
1061 m_pSecureLevel->hide();
1064void MainWindow::slotSignalConnected()
1066 m_pSignalStatus->setToolTip(tr(
"ICE signal status: Connected"));
1067 m_pSignalStatus->setStatusTip(m_pSignalStatus->toolTip());
1068 m_pSignalStatus->setWhatsThis(m_pSignalStatus->toolTip());
1070 m_pSignalStatus->setIcon(QIcon::fromTheme(
"network-wired"));
1073void MainWindow::slotSignalDisconnected()
1075 m_pSignalStatus->setToolTip(tr(
"ICE signal status: Disconnected"));
1076 m_pSignalStatus->setStatusTip(m_pSignalStatus->toolTip());
1077 m_pSignalStatus->setWhatsThis(m_pSignalStatus->toolTip());
1079 m_pSignalStatus->setIcon(QIcon::fromTheme(
"network-wireless"));
1082void MainWindow::slotSignalError(
const int nError,
const QString &szInfo)
1084 slotSignalDisconnected();
1085 slotError(nError, szInfo);
1088void MainWindow::slotSignalPushButtonClicked(
bool checked)
1098void MainWindow::slotError(
const int nError,
const QString &szInfo)
1101 slotStatusMessage(szInfo, MessageLevel::Error);
1105 const QString &title,
const QString &message,
1106 const QMessageBox::Icon &icon)
1109 if(!m_Parameter.GetMessageBoxDisplayInformation())
1112 QMessageBox msg(icon, title, message, QMessageBox::Ok,
this);
1113 QCheckBox* cb =
new QCheckBox(
1114 tr(
"Use message box to display information"),
this);
1115 cb->setChecked(
true);
1116 msg.setCheckBox(cb);
1117 RC_SHOW_WINDOW(&msg);
1118 if(!cb->isChecked())
1120 m_Parameter.SetMessageBoxDisplayInformation(
false);
1127 slotStatusMessage(szInfo, MessageLevel::Normal);
1130void MainWindow::slotStatusMessage(QString szMessage, MessageLevel level)
1133 switch ((MessageLevel)level) {
1134 case MessageLevel::Error:
1135 pe.setColor(QPalette::WindowText, Qt::red);
1137 case MessageLevel::Warning:
1138 pe.setColor(QPalette::WindowText, Qt::yellow);
1144 m_StatusBarMessage.setPalette(pe);
1145 m_StatusBarMessage.setToolTip(szMessage);
1146 QFontMetrics metrics(m_StatusBarMessage.font());
1148 szMessage = metrics.elidedText(szMessage, Qt::ElideRight, m_StatusBarMessage.width());
1150 m_StatusBarMessage.setText(szMessage);
1153void MainWindow::slotUpdateName()
1155 foreach (
auto p, m_Operates)
1164void MainWindow::slotUpdateName(
const QString& szName)
1166 COperate* p = qobject_cast<COperate*>(sender());
1168 m_pView->SetWidowsTitle(p->
GetViewer(), szName,
1170 foreach(
auto a, ui->menuActivity->actions()) {
1171 if(a->data().value<
COperate*>() == p) {
1173 a->setIcon(p->
Icon());
1179QAction* MainWindow::GetStartAction(QMenu* pMenu,
CPlugin *pPlug)
1183 szTitle = pPlug->
Protocol() +
": ";
1185 QAction* p = pMenu->addAction(szTitle);
1188 p->setData(pPlug->
Id());
1189 p->setIcon(pPlug->Icon());
1193void MainWindow::slotStartByType()
1195 qDebug(log) << Q_FUNC_INFO;
1196 auto m = ui->menuStart->actions();
1197 foreach(
auto a, m) {
1200 foreach (
auto a, m_MenuStartByType) {
1203 ui->menuStart->clear();
1204 m_MenuStartByType.clear();
1211 QMenu* m = ui->menuStart;
1212 if(m_Parameter.GetStartByType()) {
1213 auto it = m_MenuStartByType.find(pPlugin->Type());
1214 if(it == m_MenuStartByType.end()) {
1215 m =
new QMenu(pPlugin->TypeName(pPlugin->Type()), ui->menuStart);
1216 m_MenuStartByType[pPlugin->Type()] = m;
1217 ui->menuStart->addMenu(m);
1222 QAction* p = GetStartAction(m, pPlugin);
1224 check = connect(p, SIGNAL(triggered()),
this, SLOT(slotStart()));
1229void MainWindow::closeEvent(QCloseEvent *event)
1231 qDebug(log) <<
"MainWindow::closeEvent()";
1233 if(m_Parameter.GetSaveMainWindowStatus())
1235 on_actionFull_screen_F_triggered();
1237 SaveOperateLasterClose();
1239 foreach (
auto it, m_Operates)
1242 emit it->sigUpdateParameters(it);
1246 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
1247 QSettings::IniFormat);
1248 if(m_Parameter.GetSaveMainWindowStatus())
1250 set.setValue(
"MainWindow/Status/Geometry", saveGeometry());
1251 set.setValue(
"MainWindow/Status/State", saveState());
1253 m_Parameter.SetTabBar(ui->actionTabBar_B->isChecked());
1254 m_Parameter.SetMenuBar(menuBar()->isVisible());
1255 m_Parameter.SetStatusBar(statusBar()->isVisible());
1257 set.remove(
"MainWindow/Status/Geometry");
1258 set.remove(
"MainWindow/Status/State");
1264 QMainWindow::closeEvent(event);
1270int MainWindow::LoadOperateLasterClose()
1272 if(!m_Parameter.GetOpenLasterClose())
1275 QFile f(RabbitCommon::CDir::Instance()->GetDirUserConfig()
1276 + QDir::separator() +
"LasterClose.dat");
1277 if(f.open(QFile::ReadOnly))
1283 if(szFile.isEmpty())
1285 slotOpenFile(szFile);
1292int MainWindow::SaveOperateLasterClose()
1294 QFile f(RabbitCommon::CDir::Instance()->GetDirUserConfig()
1295 + QDir::separator() +
"LasterClose.dat");
1296 f.open(QFile::WriteOnly);
1297 if(m_Parameter.GetOpenLasterClose())
1300 foreach(
auto it, m_Operates)
1302 d << it->GetSettingsFile();
1309void MainWindow::on_actionTabBar_B_toggled(
bool bShow)
1313 m_pView->SetVisibleTab(bShow);
1314 m_Parameter.SetTabBar(bShow);
1317 m_pDockActive->setVisible(bShow);
1321void MainWindow::on_actionMain_menu_bar_M_toggled(
bool checked)
1323 qDebug(log) << Q_FUNC_INFO << checked;
1324 if(ui->toolBar->isHidden() && !checked)
1326 if( QMessageBox::StandardButton::Yes
1327 == QMessageBox::information(
this, tr(
"Hide menu bar"),
1328 tr(
"The menu bar will be hidden, the tool bar must be showed."),
1329 QMessageBox::StandardButton::Yes
1330 | QMessageBox::StandardButton::No))
1332 ui->actionToolBar_T->setChecked(
true);
1333 if(m_pToolBarMenuAction)
1334 m_pToolBarMenuAction->setVisible(
true);
1336 ui->actionMain_menu_bar_M->setChecked(
true);
1337#if !defined(Q_OS_ANDROID)
1338 if(m_pToolBarMenuAction)
1339 m_pToolBarMenuAction->setVisible(
false);
1345 menuBar()->setVisible(checked);
1346 m_Parameter.SetMenuBar(checked);
1347#if !defined(Q_OS_ANDROID)
1348 if(m_pToolBarMenuAction)
1349 m_pToolBarMenuAction->setVisible(!checked);
1353void MainWindow::on_actionToolBar_T_toggled(
bool checked)
1355 qDebug(log) << Q_FUNC_INFO << checked;
1356 if(menuBar()->isHidden() && !checked)
1358 if( QMessageBox::StandardButton::Yes
1359 == QMessageBox::information(
this, tr(
"Hide tool bar"),
1360 tr(
"The tool bar will be hidden, the menu bar must be showed."),
1361 QMessageBox::StandardButton::Yes
1362 | QMessageBox::StandardButton::No))
1364 ui->actionMain_menu_bar_M->setChecked(
true);
1366 ui->actionToolBar_T->setChecked(
true);
1370 ui->toolBar->setVisible(checked);
1373void MainWindow::on_actionStatus_bar_S_toggled(
bool checked)
1375 statusBar()->setVisible(checked);
1376 m_Parameter.SetStatusBar(checked);
1380void MainWindow::on_actionSettings_triggered()
1383 if(CParameterDlgSettings::Accepted == RC_SHOW_WINDOW(&set))
1391void MainWindow::slotShortCut()
1393 if(m_Parameter.GetReceiveShortCut())
1395 setFocusPolicy(Qt::WheelFocus);
1396#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
1397 ui->actionFull_screen_F->setShortcut(
1398 QKeySequence(QKeyCombination(Qt::CTRL, Qt::Key_R),
1399 QKeyCombination(Qt::Key_F)));
1400 ui->actionScreenshot->setShortcut(
1401 QKeySequence(QKeyCombination(Qt::CTRL, Qt::Key_R),
1402 QKeyCombination(Qt::Key_S)));
1404 ui->actionFull_screen_F->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_R, Qt::Key_F));
1405 ui->actionScreenshot->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_R, Qt::Key_S));
1408 setFocusPolicy(Qt::NoFocus);
1409 ui->actionFull_screen_F->setShortcut(QKeySequence());
1410 ui->actionScreenshot->setShortcut(QKeySequence());
1414void MainWindow::on_actionOpenListRecent_triggered()
1418 bool check = connect(p, SIGNAL(sigStart(
const QString&,
bool)),
1419 this, SLOT(slotOpenFile(
const QString&,
bool)));
1421 check = connect(p, SIGNAL(sigAddToFavorite(QString,QString,QIcon,QString)),
1422 m_pFavoriteView, SLOT(slotAddToFavorite(QString,QString,QIcon,QString)));
1427 d.setWindowIcon(windowIcon());
1428 d.setWindowTitle(p->windowTitle());
1429 QGridLayout* pLayout =
new QGridLayout(&d);
1431 pLayout->addWidget(p);
1432 check = connect(p, SIGNAL(destroyed()), &d, SLOT(reject()));
1433 d.setLayout(pLayout);
1438void MainWindow::on_actionAdd_to_favorite_triggered()
1440 if(!m_pView || !m_pFavoriteView)
return;
1442 foreach(
auto c, m_Operates)
1447 c->
Icon(), c->GetSettingsFile());
1452void MainWindow::dragEnterEvent(QDragEnterEvent *event)
1454 qDebug(log) <<
"dragEnterEvent";
1456 if(event->mimeData()->hasUrls())
1458 qWarning(log) <<
event->mimeData()->urls();
1459 event->acceptProposedAction();
1463void MainWindow::dragMoveEvent(QDragMoveEvent *event)
1468void MainWindow::dropEvent(QDropEvent *event)
1470 qDebug(log) <<
"dropEvent";
1471 if(!event->mimeData()->hasUrls())
1473 auto urls =
event->mimeData()->urls();
1474 foreach(
auto url, urls)
1476 if(url.isLocalFile())
1477 slotOpenFile(url.toLocalFile());
1481void MainWindow::slotSystemTrayIconActivated(QSystemTrayIcon::ActivationReason reason)
1486#if defined(Q_OS_ANDROID)
1491 case QSystemTrayIcon::Trigger:
1503void MainWindow::slotSystemTrayIconTypeChanged()
1506 if(!QSystemTrayIcon::isSystemTrayAvailable())
1508 qWarning(log) <<
"System tray is not available";
1512 if(!m_Parameter.GetEnableSystemTrayIcon())
1514 qDebug(log) <<
"Disable system tray icon";
1521 m_TrayIcon = QSharedPointer<QSystemTrayIcon>(
new QSystemTrayIcon(
this));
1522 if(QSystemTrayIcon::isSystemTrayAvailable())
1524 bool check = connect(
1526 SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
1528 SLOT(slotSystemTrayIconActivated(QSystemTrayIcon::ActivationReason)));
1530 m_TrayIcon->setIcon(this->windowIcon());
1531 m_TrayIcon->setToolTip(windowTitle());
1534 qWarning(log) <<
"System tray is not available";
1536 switch (m_Parameter.GetSystemTrayIconMenuType())
1538 case CParameterApp::SystemTrayIconMenuType::MenuBar:
1540 QMenu* pMenu =
new QMenu(
this);
1541 pMenu->addMenu(ui->menuOperate);
1542 pMenu->addMenu(ui->menuView);
1543 pMenu->addMenu(ui->menuTools);
1544 m_TrayIcon->setContextMenu(pMenu);
1547 case CParameterApp::SystemTrayIconMenuType::Operate:
1548 m_TrayIcon->setContextMenu(ui->menuOperate);
1550 case CParameterApp::SystemTrayIconMenuType::RecentOpen:
1551 m_TrayIcon->setContextMenu(m_pRecentMenu);
1553 case CParameterApp::SystemTrayIconMenuType::View:
1554 m_TrayIcon->setContextMenu(ui->menuView);
1556 case CParameterApp::SystemTrayIconMenuType::Tools:
1557 m_TrayIcon->setContextMenu(ui->menuTools);
1559 case CParameterApp::SystemTrayIconMenuType::No:
1560 m_TrayIcon->setContextMenu(
nullptr);
1565void MainWindow::slotEnableSystemTrayIcon()
1570 if(!m_Parameter.GetEnableSystemTrayIcon())
1573 slotSystemTrayIconTypeChanged();
1576void MainWindow::slotTimeOut()
1580 qDebug(log) <<
"The current view is empty";
1583 foreach(
auto p, m_Operates)
1585 if(p->GetViewer() == pWin)
1587 auto pStats = p->GetStats();
1589 SetStatsVisible(
false);
1592 SetStatsVisible(
true);
1593 pStats->slotCalculating();
1594 m_TotalSends.setText(
"⇈ " + pStats->TotalSends());
1595 m_TotalReceives.setText(
"⇊ " + pStats->TotalReceives());
1596 m_SendRate.setText(
"↑ " + pStats->SendRate());
1597 m_ReceivesRate.setText(
"↓ " + pStats->ReceiveRate());
1603void MainWindow::SetStatsVisible(
bool visible)
1605 if(m_SendRate.isVisible() == visible)
1607 m_SendRate.setVisible(visible);
1608 m_ReceivesRate.setVisible(visible);
1609 m_TotalSends.setVisible(visible);
1610 m_TotalReceives.setVisible(visible);
1613void MainWindow::StartTimer()
1615 bool bStart =
false;
1616 int nMinInterval = 60;
1617 foreach(
auto o, m_Operates) {
1618 if(o && o->GetStats()) {
1619 nMinInterval = qMin(nMinInterval, o->GetStats()->
GetInterval());
1624 m_Timer.start(1000);
1629void MainWindow::on_actionUser_manual_triggered()
1631 QString szUrl =
"https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual";
1632 if(RabbitCommon::CTools::GetLanguage() ==
"zh_CN"
1633 || RabbitCommon::CTools::GetLanguage() ==
"zh_TW")
1637void MainWindow::on_actionLayoutDefault_triggered()
1639 qDebug(log) << Q_FUNC_INFO;
1640 if(!m_pDockActive->toggleViewAction()->isChecked())
1641 m_pDockActive->toggleViewAction()->trigger();
1642 if(!m_pDockFavorite->toggleViewAction()->isChecked())
1643 m_pDockFavorite->toggleViewAction()->trigger();
1644 if(!m_pDockListRecent->toggleViewAction()->isChecked())
1645 m_pDockListRecent->toggleViewAction()->trigger();
1646 m_Parameter.SetTabPosition(QTabWidget::North);
1647 if(!ui->actionTabBar_B->isChecked())
1648 ui->actionTabBar_B->trigger();
1649 if(!ui->actionMain_menu_bar_M->isChecked()) {
1650 ui->actionMain_menu_bar_M->trigger();
1651#if !defined(Q_OS_ANDROID)
1652 m_pToolBarMenuAction->setVisible(
false);
1655 if(!ui->actionToolBar_T->isChecked())
1656 ui->actionToolBar_T->trigger();
1657 addToolBar(Qt::TopToolBarArea, ui->toolBar);
1658 if(!ui->actionStatus_bar_S->isChecked())
1659 ui->actionStatus_bar_S->trigger();
1662void MainWindow::on_actionLayoutSimple_triggered()
1664 qDebug(log) << Q_FUNC_INFO;
1665 if(m_pDockActive->toggleViewAction()->isChecked())
1666 m_pDockActive->toggleViewAction()->trigger();
1667 if(m_pDockFavorite->toggleViewAction()->isChecked())
1668 m_pDockFavorite->toggleViewAction()->trigger();
1669 if(m_pDockListRecent->toggleViewAction()->isChecked())
1670 m_pDockListRecent->toggleViewAction()->trigger();
1671 m_Parameter.SetTabPosition(QTabWidget::East);
1672 if(!ui->actionTabBar_B->isChecked())
1673 ui->actionTabBar_B->trigger();
1674 if(!ui->actionMain_menu_bar_M->isChecked()) {
1675 ui->actionMain_menu_bar_M->trigger();
1676#if !defined(Q_OS_ANDROID)
1677 m_pToolBarMenuAction->setVisible(
false);
1680 if(!ui->actionToolBar_T->isChecked())
1681 ui->actionToolBar_T->trigger();
1682 addToolBar(Qt::LeftToolBarArea, ui->toolBar);
1683 if(!ui->actionStatus_bar_S->isChecked())
1684 ui->actionStatus_bar_S->trigger();
1687void MainWindow::on_actionLayoutMinimalism_triggered()
1689 qDebug(log) << Q_FUNC_INFO;
1690 if(m_pDockActive->toggleViewAction()->isChecked())
1691 m_pDockActive->toggleViewAction()->trigger();
1692 if(m_pDockFavorite->toggleViewAction()->isChecked())
1693 m_pDockFavorite->toggleViewAction()->trigger();
1694 if(m_pDockListRecent->toggleViewAction()->isChecked())
1695 m_pDockListRecent->toggleViewAction()->trigger();
1696 m_Parameter.SetTabPosition(QTabWidget::East);
1697 if(ui->actionTabBar_B->isChecked())
1698 ui->actionTabBar_B->trigger();
1699#if !defined(Q_OS_MACOS)
1700 if(ui->actionMain_menu_bar_M->isChecked()) {
1701 ui->actionMain_menu_bar_M->trigger();
1702 m_pToolBarMenuAction->setVisible(
true);
1705 if(!ui->actionToolBar_T->isChecked())
1706 ui->actionToolBar_T->trigger();
1707#if defined(Q_OS_LINUX)
1708 addToolBar(Qt::RightToolBarArea, ui->toolBar);
1710 addToolBar(Qt::LeftToolBarArea, ui->toolBar);
1712 if(ui->actionStatus_bar_S->isChecked())
1713 ui->actionStatus_bar_S->trigger();
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.
virtual int OpenDialogSettings(QWidget *parent=nullptr)
Open settings dialog.
virtual const QIcon Icon() const
Icon.
virtual int Start()=0
Start.
virtual QWidget * GetViewer()=0
Get Viewer.
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 QMenu * GetMenu(QWidget *parent=nullptr)
Get menu.
virtual int Save(QString szFile=QString(), bool bForce=true)
Save to file.
virtual const QString Id()
ID. Default: Type() + ":" + Protocol() + ":" + Name()
virtual const QString DisplayName() const
The plugin display name.
virtual const QString Protocol() const =0
Plugin Protocol.
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
int Start(COperate *pOperate, bool set, QString szFile=QString())
Start.
virtual int onProcess(const QString &id, CPlugin *pPlugin) override
Process plugins.
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.