玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
ParameterDatabaseUI.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QSqlDatabase>
4#include <QLoggingCategory>
5#include <QSet>
6#include <QFileDialog>
7#include <QWhatsThisClickedEvent>
8#include <QDesktopServices>
9
10#include "RabbitCommonDir.h"
11#include "ParameterNet.h"
12#include "ParameterUser.h"
13#include "ParameterDatabaseUI.h"
14#include "ui_ParameterDatabaseUI.h"
15
16static Q_LOGGING_CATEGORY(log, "Para.Database.UI")
18 : CParameterUI(parent)
19 , ui(new Ui::CParameterDatabaseUI)
20 , m_pPara(nullptr)
21{
22 bool check = false;
23 ui->setupUi(this);
24
25 setWindowTitle(tr("Database"));
26
27 ui->leDatabaseName->installEventFilter(this);
28 ui->pbBrowser->setVisible(false);
29
30 QStringList drivers = QSqlDatabase::drivers();
31 qDebug(log) << "Database:" << drivers;
32 QSet<QString> supportDrivers;
33 supportDrivers << "QSQLITE" << "QMYSQL" << "QODBC";
34 QSet<QString> drv(drivers.begin(), drivers.end());
35 QSet<QString> interDb = drv.intersect(supportDrivers);
36 QStringList lstDb(interDb.begin(), interDb.end());
37 ui->cbType->addItems(lstDb);
38 slotTypeCurrentTextChanged(ui->cbType->currentText());
39 check = connect(ui->cbType, &QComboBox::currentTextChanged,
40 this, &CParameterDatabaseUI::slotTypeCurrentTextChanged);
41 Q_ASSERT(check);
42}
43
44CParameterDatabaseUI::~CParameterDatabaseUI()
45{
46 delete ui;
47}
48
50{
51 m_pPara = qobject_cast<CParameterDatabase*>(pParameter);
52 if(!m_pPara) return -1;
53
54 ui->wNet->SetParameter(&m_pPara->m_Net);
55
56 ui->cbType->setCurrentText(m_pPara->GetType());
57 ui->leDatabaseName->setText(m_pPara->GetDatabaseName());
58 ui->leOptions->setText(m_pPara->GetOptions());
59
60 return 0;
61}
62
64{
65 ui->wNet->Accept();
66 m_pPara->SetType(ui->cbType->currentText());
67
68 m_pPara->SetDatabaseName(ui->leDatabaseName->text());
69 m_pPara->SetOptions(ui->leOptions->text());
70
71 return 0;
72}
73
74void CParameterDatabaseUI::slotTypeCurrentTextChanged(const QString &text)
75{
76 QString szMsg;
77 QString szHelp;
78 szMsg = tr("Set the database name");
79
80 bool bBrowser = false;
81 bool bNet = true;
82 if("QSQLITE" == text) {
83 szMsg = tr("Set the sqlite database file. If is empty, then use default database file.");
84 bBrowser = true;
85 bNet = false;
86 } else if("QODBC" == text) {
87 szMsg = tr("The name can either be a DSN, a DSN filename (in which case the file must have a .dsn extension), or a connection string.");
88 szHelp = szMsg + " <a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual_zh_CN#%E5%9C%A8-windows-%E4%B8%8B%E4%BD%BF%E7%94%A8-odbc-%E8%AE%BF%E9%97%AE-mysql-%E6%95%B0%E6%8D%AE%E5%BA%93>" + tr("Configure database") + "</a>";
89 bNet = false;
90 } else if("QMYSQL" == text) {
91 bNet = true;
92 }
93
94 if(szHelp.isEmpty())
95 szHelp = szMsg + " <a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual_zh_CN#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93>" + tr("Configure database") + "</a>";
96 ui->leDatabaseName->setWhatsThis(szHelp);
97 ui->leDatabaseName->setPlaceholderText(szMsg);
98 ui->leDatabaseName->setToolTip(szMsg);
99 ui->pbBrowser->setVisible(bBrowser);
100 ui->wNet->setVisible(bNet);
101}
102
103void CParameterDatabaseUI::on_pbBrowser_clicked()
104{
105 QString szTitle;
106 QString szFilter;
107 szTitle = tr("Database file");
108 szFilter = tr("Database file (*.db);; All files (*.*)");
109 QString szFile = QFileDialog::getSaveFileName(
110 nullptr, szTitle,
111 RabbitCommon::CDir::Instance()->GetDirUserDatabase(),
112 szFilter);
113 if(szFile.isEmpty()) return;
114 ui->leDatabaseName->setText(szFile);
115}
116
117bool CParameterDatabaseUI::eventFilter(QObject *watched, QEvent *event)
118{
119 if(ui->leDatabaseName == watched) {
120 if(event->type() == QEvent::WhatsThisClicked) {
121 QWhatsThisClickedEvent* e = (QWhatsThisClickedEvent*)event;
122 if(e) {
123 qDebug(log) << e->href();
124 return QDesktopServices::openUrl(e->href());
125 }
126 }
127 }
128 return QWidget::eventFilter(watched, event);
129}
virtual int SetParameter(CParameter *pParameter) override
[override functions]
virtual int Accept() override
接受参数
参数界面接口
Definition ParameterUI.h:15
参数接口
Definition Parameter.h:209