玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
ParameterDlgSettings.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QScrollArea>
4#include <QFileDialog>
5#include <QLoggingCategory>
6#include <QScreen>
7#include <QApplication>
8
9#include "ParameterUI.h"
10#include "ParameterDlgSettings.h"
11#include "ui_ParameterDlgSettings.h"
12
13#ifdef HAVE_ICE
14#include "Ice.h"
15#endif
16
17static Q_LOGGING_CATEGORY(log, "App.MainWindow.Parameter")
18
20 QWidget *parent) :
21 QDialog(parent),
23 m_pParameters(pPara)
24{
25 ui->setupUi(this);
26
27#ifdef HAVE_ICE
28 QWidget* pWidget = CICE::Instance()->GetParameterWidget(this);
29 if(pWidget)
30 {
31 ui->tabWidget->addTab(pWidget, pWidget->windowTitle());
32 bool check = false;
33 check = connect(this, SIGNAL(accepted()), pWidget, SLOT(slotAccept()));
34 if(!check)
35 {
36 szMsg = "Class" + QString(p->metaObject()->className())
37 + "must has slot slotAccept(), please add it."
38 + "Or the class derived from CParameterUI";
39 qCritical(log) << szMsg;
40 }
41 Q_ASSERT_X(check, "CParameterDlgSettings", szMsg.toStdString().c_str());
42 }
43#endif
44
45 ui->cbReciverShortCut->setChecked(m_pParameters->GetReceiveShortCut());
46 ui->cbSaveMainWindowStatus->setChecked(m_pParameters->GetSaveMainWindowStatus());
47 ui->cbResumLasterClose->setChecked(m_pParameters->GetOpenLasterClose());
48 ui->cbStartByType->setChecked(m_pParameters->GetStartByType());
49
50 switch (m_pParameters->GetTabPosition()) {
51 case QTabWidget::North:
52 ui->rbNorth->setChecked(true);
53 break;
54 case QTabWidget::South:
55 ui->rbSouth->setChecked(true);
56 break;
57 case QTabWidget::West:
58 ui->rbWest->setChecked(true);
59 break;
60 case QTabWidget::East:
61 ui->rbEast->setChecked(true);
62 break;
63 }
64 ui->cbTabToolTip->setChecked(m_pParameters->GetEnableTabToolTip());
65 ui->cbTabIcon->setChecked(m_pParameters->GetEnableTabIcon());
66 ui->cbElided->setChecked(m_pParameters->GetTabElided());
67
68 ui->sbRecentMenuMaxCount->setValue(m_pParameters->GetRecentMenuMaxCount());
69
70 switch (m_pParameters->GetSystemTrayIconMenuType()) {
71 case CParameterApp::SystemTrayIconMenuType::No:
72 ui->rbSystemTrayIconNo->setChecked(true);
73 break;
74 case CParameterApp::SystemTrayIconMenuType::MenuBar:
75 ui->rbMenuBar->setChecked(true);
76 break;
77 case CParameterApp::SystemTrayIconMenuType::RecentOpen:
78 ui->rbSystemTrayIconRecentOpen->setChecked(true);
79 break;
80 case CParameterApp::SystemTrayIconMenuType::Operate:
81 ui->rbSystemTrayIconOperate->setChecked(true);
82 break;
83 default:
84 break;
85 }
86 ui->cbShowSystemTrayIcon->setChecked(m_pParameters->GetEnableSystemTrayIcon());
87
88 ui->cbFavoriteDoubleEdit->setChecked(m_pParameters->GetFavoriteEdit());
89 ui->cbMessageBoxDisplayInfo->setChecked(m_pParameters->GetMessageBoxDisplayInformation());
90 ui->cbKeepSplitView->setChecked(m_pParameters->GetKeepSplitViewWhenFullScreen());
91}
92
93CParameterDlgSettings::~CParameterDlgSettings()
94{
95 delete ui;
96}
97
98void CParameterDlgSettings::AddViewers(const QList<QWidget *> &wViewer)
99{
100 int nWidth = 0;
101 int nHeigth = 0;
102 foreach(auto p, wViewer) {
103 if(!p) continue;
104 nWidth = qMax(nWidth, p->frameSize().width());
105 nHeigth = qMax(nHeigth, p->frameSize().height());
106 }
107 bool bScroll = false;
108 QScreen* pScreen = QApplication::primaryScreen();
109 QSize size = this->size();
110 if(nWidth > size.width() || nHeigth > size.height())
111 bScroll = true;
112 // [connect accepted to slotAccept of widget]
113 foreach(auto p, wViewer)
114 {
115 QString szMsg;
116 QWidget* pView = p;
117 if(bScroll)
118 {
119 QScrollArea* pScroll = new QScrollArea(ui->tabWidget);
120 if(!pScroll) continue;
121 pScroll->setWidget(p);
122 pView = pScroll;
123 }
124 ui->tabWidget->addTab(pView, p->windowIcon(), p->windowTitle());
125 bool check = false;
126 check = connect(this, SIGNAL(accepted()), p, SLOT(slotAccept()));
127 if(!check)
128 {
129 szMsg = "Class '" + QString(p->metaObject()->className())
130 + "' must has slot slotAccept(), please add it. "
131 + "Or the class derived from CParameterUI";
132 qCritical(log) << szMsg;
133 }
134 Q_ASSERT_X(check, "CParameterDlgSettings", szMsg.toStdString().c_str());
135 }
136 // [connect accepted to slotAccept of widget]
137}
138
139void CParameterDlgSettings::on_pbOk_clicked()
140{
141 if(!m_pParameters) return;
142
143 m_pParameters->SetReceiveShortCut(ui->cbReciverShortCut->isChecked());
144 m_pParameters->SetSaveMainWindowStatus(ui->cbSaveMainWindowStatus->isChecked());
145 m_pParameters->SetOpenLasterClose(ui->cbResumLasterClose->isChecked());
146 m_pParameters->SetStartByType(ui->cbStartByType->isChecked());
147
148 if(ui->rbNorth->isChecked()) m_pParameters->SetTabPosition(QTabWidget::North);
149 if(ui->rbSouth->isChecked()) m_pParameters->SetTabPosition(QTabWidget::South);
150 if(ui->rbEast->isChecked()) m_pParameters->SetTabPosition(QTabWidget::East);
151 if(ui->rbWest->isChecked()) m_pParameters->SetTabPosition(QTabWidget::West);
152 m_pParameters->SetEnableTabToolTip(ui->cbTabToolTip->isChecked());
153 m_pParameters->SetEnableTabIcon(ui->cbTabIcon->isChecked());
154 m_pParameters->SetTabElided(ui->cbElided->isChecked());
155
156 m_pParameters->SetRecentMenuMaxCount(ui->sbRecentMenuMaxCount->value());
157
158 //NOTE: The order cannot be changed
159 m_pParameters->SetEnableSystemTrayIcon(ui->cbShowSystemTrayIcon->isChecked());
160 if(ui->rbSystemTrayIconNo->isChecked())
161 m_pParameters->SetSystemTrayIconMenuType(CParameterApp::SystemTrayIconMenuType::No);
162 if(ui->rbMenuBar->isChecked())
163 m_pParameters->SetSystemTrayIconMenuType(CParameterApp::SystemTrayIconMenuType::MenuBar);
164 if(ui->rbSystemTrayIconRecentOpen->isChecked())
165 m_pParameters->SetSystemTrayIconMenuType(CParameterApp::SystemTrayIconMenuType::RecentOpen);
166 if(ui->rbSystemTrayIconOperate->isChecked())
167 m_pParameters->SetSystemTrayIconMenuType(CParameterApp::SystemTrayIconMenuType::Operate);
168
169 m_pParameters->SetFavoriteEdit(ui->cbFavoriteDoubleEdit->isChecked());
170 m_pParameters->SetMessageBoxDisplayInformation(ui->cbMessageBoxDisplayInfo->isChecked());
171
172 m_pParameters->SetKeepSplitViewWhenFullScreen(ui->cbKeepSplitView->isChecked());
173
174 // Check validity
175 for(int i = 0; i < ui->tabWidget->count(); i++) {
176 QWidget* v = ui->tabWidget->widget(i);
177 CParameterUI* w = qobject_cast<CParameterUI*>(v);
178 if(!w) {
179 QScrollArea* pScroll = qobject_cast<QScrollArea*>(v);
180 if(!pScroll) continue;
181 w = qobject_cast<CParameterUI*>(pScroll->widget());
182 if(!w) continue;
183 }
184
185 bool bRet = w->CheckValidity(true);
186 if(bRet) continue;
187
188 ui->tabWidget->setCurrentIndex(i);
189 return;
190 }
191 accept();
192}
193
194void CParameterDlgSettings::on_pbNo_clicked()
195{
196 reject();
197}
198
199void CParameterDlgSettings::on_cbShowSystemTrayIcon_toggled(bool checked)
200{
201 ui->gbSystemTrayIconContextMenu->setEnabled(checked);
202}
static CICE * Instance()
Single instance
Definition Ice.cpp:55
参数界面接口
Definition ParameterUI.h:15
virtual Q_INVOKABLE bool CheckValidity(bool validity=false)
检查参数的有效性