1#include "FrmListRecentConnects.h"
2#include "RabbitCommonDir.h"
5#include <QStandardItem>
10CFrmListRecentConnects::CFrmListRecentConnects(
14 m_ParameterApp(parameterApp),
16 m_ptbConnect(nullptr),
22 m_pDockTitleBar(nullptr)
24 setFocusPolicy(Qt::NoFocus);
25 setAttribute(Qt::WA_DeleteOnClose);
26 setLayout(
new QVBoxLayout(
this));
27 setWindowTitle(tr(
"List recent connections"));
29 m_pToolBar =
new QToolBar(
this);
31 m_pConnect = m_pToolBar->addAction(
32 QIcon::fromTheme(
"network-wired"), tr(
"Connect"),
33 this, SLOT(slotConnect()));
34 m_pConnect->setStatusTip(tr(
"Connect"));
35 m_pConnect->setToolTip(tr(
"Connect"));
36 m_pEditConnect = m_pToolBar->addAction(
37 QIcon::fromTheme(
"edit-connect"), tr(
"Edit and Connect"),
38 this, SLOT(slotEditConnect()));
39 m_pEditConnect->setStatusTip(tr(
"Edit and Connect"));
40 m_pEditConnect->setToolTip(tr(
"Edit and Connect"));
41 m_pToolBar->addSeparator();
43 m_ptbConnect =
new QToolButton(m_pToolBar);
44 m_ptbConnect->setFocusPolicy(Qt::NoFocus);
45 m_ptbConnect->setPopupMode(QToolButton::InstantPopup);
47 m_pMenuNew =
new QMenu(tr(
"New"),
this);
48 m_pMenuNew->setIcon(QIcon::fromTheme(
"add"));
49 m_ptbConnect->setMenu(m_pMenuNew);
50 m_ptbConnect->setIcon(m_pMenuNew->icon());
51 m_ptbConnect->setText(tr(
"New"));
52 m_ptbConnect->setToolTip(tr(
"New"));
53 m_ptbConnect->setStatusTip(tr(
"New"));
54 m_pToolBar->addWidget(m_ptbConnect);
55 m_pClient->EnumPlugins(
this);
56 m_pEdit = m_pToolBar->addAction(QIcon::fromTheme(
"edit"), tr(
"Edit"),
57 this, SLOT(slotEdit()));
58 m_pEdit->setStatusTip(tr(
"Edit"));
59 m_pEdit->setToolTip(tr(
"Edit"));
60 m_pCopy = m_pToolBar->addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy"),
61 this, SLOT(slotCopy()));
62 m_pCopy->setStatusTip(tr(
"Copy"));
63 m_pCopy->setToolTip(tr(
"Copy"));
64 m_pDelete = m_pToolBar->addAction(
65 QIcon::fromTheme(
"edit-delete"), tr(
"Delete"),
66 this, SLOT(slotDelete()));
67 m_pDelete->setToolTip(tr(
"Delete"));
68 m_pDelete->setStatusTip(tr(
"Delete"));
69 m_pDetail = m_pToolBar->addAction(
70 QIcon::fromTheme(
"dialog-information"), tr(
"Detail"),
71 this, SLOT(slotDetail()));
72 m_pDetail->setCheckable(
true);
73 m_pDetail->setChecked(
false);
74 m_pDetail->setToolTip(tr(
"Detail"));
75 m_pDetail->setStatusTip(tr(
"Detail"));
76 m_pToolBar->addSeparator();
78 m_pRefresh = m_pToolBar->addAction(
79 QIcon::fromTheme(
"view-refresh"),
81 this, SLOT(slotLoadFiles()));
82 m_pRefresh->setToolTip(tr(
"Refresh"));
83 m_pRefresh->setStatusTip(tr(
"Refresh"));
85 QAction* pClose = m_pToolBar->addAction(
86 QIcon::fromTheme(
"window-close"), tr(
"Close"),
88 pClose->setStatusTip(tr(
"Close"));
89 pClose->setToolTip(tr(
"Close"));
92 layout()->addWidget(m_pToolBar);
95 m_pDockTitleBar =
new RabbitCommon::CTitleBar(parent);
97 QMenu* pMenu =
new QMenu(tr(
"Tools"), m_pDockTitleBar);
98 QPushButton* pTools = m_pDockTitleBar->CreateSmallPushButton(
99 QIcon::fromTheme(
"tools"), m_pDockTitleBar);
100 pTools->setToolTip(tr(
"Tools"));
101 pTools->setMenu(pMenu);
102 QList<QWidget*> lstWidget;
104 m_pDockTitleBar->AddWidgets(lstWidget);
106 pMenu->addAction(m_pConnect);
107 pMenu->addAction(m_pEditConnect);
108 pMenu->addMenu(m_pMenuNew);
109 pMenu->addAction(m_pEdit);
110 pMenu->addAction(m_pCopy);
111 pMenu->addAction(m_pDelete);
112 pMenu->addAction(m_pDetail);
113 pMenu->addAction(m_pRefresh);
114 pMenu->addSeparator();
115 auto pShowToolBar = pMenu->addAction(tr(
"Show tool bar"),
this, [&](){
116 QAction* a = (QAction*)sender();
118 m_pToolBar->setVisible(a->isChecked());
119 m_ParameterApp.SetDockListRecentShowToolBar(a->isChecked());
120 m_ParameterApp.Save();
123 pShowToolBar->setCheckable(
true);
124 pShowToolBar->setChecked(m_ParameterApp.GetDockListRecentShowToolBar());
125 m_pToolBar->setVisible(m_ParameterApp.GetDockListRecentShowToolBar());
129 m_pTableView =
new QTableView(
this);
130 m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
131 bool check = connect(m_pTableView,
132 SIGNAL(customContextMenuRequested(
const QPoint &)),
133 this, SLOT(slotCustomContextMenu(
const QPoint &)));
135 check = connect(m_pTableView, SIGNAL(doubleClicked(
const QModelIndex &)),
136 this, SLOT(slotDoubleClicked(
const QModelIndex&)));
138 layout()->addWidget(m_pTableView);
140 m_pModel =
new QStandardItemModel(m_pTableView);
141 m_pTableView->setModel(m_pModel);
142 m_pTableView->verticalHeader()->hide();
143 m_pTableView->setSelectionMode(QAbstractItemView::SingleSelection);
144 m_pTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
145 m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
146 m_pModel->setHorizontalHeaderItem(0,
new QStandardItem(tr(
"Name")));
147 m_pModel->setHorizontalHeaderItem(1,
new QStandardItem(tr(
"Protocol")));
148 m_pModel->setHorizontalHeaderItem(2,
new QStandardItem(tr(
"Date")));
149 m_pModel->setHorizontalHeaderItem(3,
new QStandardItem(tr(
"ID")));
151 m_pModel->setHorizontalHeaderItem(m_nFileRow,
new QStandardItem(tr(
"File")));
152 if(!m_pDetail->isChecked()) {
153 m_pTableView->hideColumn(3);
154 m_pTableView->hideColumn(m_nFileRow);
166 m_pTableView->horizontalHeader()->setSectionResizeMode(
167#
if defined(DEBUG) && !defined(Q_OS_ANDROID)
170 QHeaderView::Interactive);
177 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
178 QModelIndexList lstIndex;
180 lstIndex = pSelect->selectedRows();
181 if(m_pModel->rowCount() > 0 && lstIndex.isEmpty())
183 m_pTableView->selectRow(0);
188CFrmListRecentConnects::~CFrmListRecentConnects()
192void CFrmListRecentConnects::slotLoadFiles()
194 m_pModel->removeRows(0, m_pModel->rowCount());
195 QString szPath = RabbitCommon::CDir::Instance()->GetDirUserData();
197 QStringList files = dir.entryList(QStringList() <<
"*.rrc",
198 QDir::Files, QDir::Time);
199 foreach (
auto fileName, files) {
200 QString szFile = dir.absoluteFilePath(fileName);
201 if(szFile.isEmpty())
continue;
205 QList<QStandardItem*> lstItem;
206 QStandardItem* pName =
new QStandardItem(c->
Icon(), c->
Name());
209 QStandardItem* pProtocol =
new QStandardItem(c->
Protocol());
210 lstItem << pProtocol;
211 QFileInfo fi(szFile);
212 lstItem <<
new QStandardItem(fi.lastModified().toLocalTime().toString());
213 QStandardItem* pId =
new QStandardItem(c->
Id());
215 QStandardItem* pFile =
new QStandardItem(szFile);
217 m_pModel->appendRow(lstItem);
222 if(m_pModel->rowCount() > 0)
224 m_pConnect->setEnabled(
true);
225 m_pEditConnect->setEnabled(
true);
226 m_pEdit->setEnabled(
true);
227 m_pCopy->setEnabled(
true);
228 m_pDelete->setEnabled(
true);
230 m_pConnect->setEnabled(
false);
231 m_pEditConnect->setEnabled(
false);
232 m_pEdit->setEnabled(
false);
233 m_pCopy->setEnabled(
false);
234 m_pDelete->setEnabled(
false);
240 m_pTableView->resizeColumnToContents(0);
241 m_pTableView->resizeColumnToContents(1);
242 m_pTableView->resizeColumnToContents(2);
246int CFrmListRecentConnects::InsertItem(
CConnecter *c, QString& szFile)
248 QList<QStandardItem*> lstItem;
249 QStandardItem* pName =
new QStandardItem(c->
Icon(), c->
Name());
252 QStandardItem* pProtocol =
new QStandardItem(c->
Protocol());
253 lstItem << pProtocol;
254 QFileInfo fi(szFile);
255 lstItem <<
new QStandardItem(fi.lastModified().toString());
256 QStandardItem* pId =
new QStandardItem(c->
Id());
258 QStandardItem* pFile =
new QStandardItem(szFile);
260 m_pModel->insertRow(0, lstItem);
261 m_pTableView->selectRow(0);
268 QAction* pAction = m_pMenuNew->addAction(
270 this, SLOT(slotNew()));
273 pAction->setData(
id);
274 pAction->setIcon(pPlug->Icon());
278void CFrmListRecentConnects::slotNew()
280 QAction* pAction =
dynamic_cast<QAction*
>(this->sender());
282 if(
nullptr == c)
return;
287 case QDialog::Rejected:
289 case QDialog::Accepted:
291 QString szFile = c->GetSettingsFile();
293 if(d.exists(szFile)) {
294 QMessageBox::StandardButton r
295 = QMessageBox::warning(
297 tr(
"File of connecter is exists. whether to overwrite it? File: %1").arg(szFile),
298 QMessageBox::StandardButton::Ok | QMessageBox::StandardButton::No,
299 QMessageBox::StandardButton::No);
300 if(QMessageBox::StandardButton::Ok == r)
310 InsertItem(c, szFile);
319void CFrmListRecentConnects::slotEdit()
321 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
322 QModelIndexList lstIndex = pSelect->selectedRows();
323 foreach(
auto index, lstIndex)
325 QString szFile = m_pModel->item(index.row(), m_nFileRow)->text();
330 case QDialog::Rejected:
332 case QDialog::Accepted:
340void CFrmListRecentConnects::slotEditConnect()
342 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
343 QModelIndexList lstIndex = pSelect->selectedRows();
344 foreach(
auto index, lstIndex)
346 QString szFile = m_pModel->item(index.row(), m_nFileRow)->text();
351 case QDialog::Rejected:
353 case QDialog::Accepted:
355 emit sigConnect(szFile);
364void CFrmListRecentConnects::slotCopy()
366 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
367 QModelIndexList lstIndex = pSelect->selectedRows();
368 foreach(
auto index, lstIndex)
370 QString szFile = m_pModel->item(index.row(), m_nFileRow)->text();
379 case QDialog::Rejected:
381 case QDialog::Accepted:
383 szFile = c->GetSettingsFile();
385 if(d.exists(szFile)) {
386 QMessageBox::StandardButton r
387 = QMessageBox::warning(
390 tr(
"File of connecter is exists. whether to overwrite it? "
391 "If select No, please modify the name of connecter"),
392 QMessageBox::StandardButton::Ok
393 | QMessageBox::StandardButton::No
394 | QMessageBox::StandardButton::Cancel,
395 QMessageBox::StandardButton::No);
396 if(QMessageBox::StandardButton::No == r)
401 if(QMessageBox::StandardButton::Cancel == r)
407 InsertItem(c, szFile);
420void CFrmListRecentConnects::slotDelete()
422 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
423 QModelIndexList lstIndex = pSelect->selectedRows();
424 foreach(
auto index, lstIndex)
426 QString szFile = m_pModel->item(index.row(), m_nFileRow)->text();
429 m_pModel->removeRow(index.row());
433void CFrmListRecentConnects::slotConnect()
435 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
436 QModelIndexList lstIndex = pSelect->selectedRows();
437 foreach(
auto index, lstIndex)
439 QString szFile = m_pModel->item(index.row(), m_nFileRow)->text();
440 emit sigConnect(szFile);
442 if(!m_bDock) close();
445void CFrmListRecentConnects::slotDetail()
447 if(m_pDetail->isChecked()) {
448 m_pTableView->showColumn(3);
449 m_pTableView->showColumn(m_nFileRow);
451 m_pTableView->hideColumn(3);
452 m_pTableView->hideColumn(m_nFileRow);
456void CFrmListRecentConnects::slotCustomContextMenu(
const QPoint &pos)
460 menu.addAction(QIcon::fromTheme(
"network-wired"),
461 tr(
"Connect"),
this, SLOT(slotConnect()));
462 menu.addAction(tr(
"Edit and Connect"),
this, SLOT(slotEditConnect()));
464 menu.addMenu(m_pMenuNew);
465 menu.addAction(tr(
"Edit"),
this, SLOT(slotEdit()));
466 menu.addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy"),
467 this, SLOT(slotCopy()));
468 menu.addAction(QIcon::fromTheme(
"edit-delete"), tr(
"Delete"),
469 this, SLOT(slotDelete()));
471 menu.addAction(QIcon::fromTheme(
"view-refresh"), tr(
"Refresh"),
472 this, SLOT(slotLoadFiles()));
474 menu.exec(mapToGlobal(pos));
477void CFrmListRecentConnects::slotDoubleClicked(
const QModelIndex& index)
479 QString szFile = m_pModel->item(index.row(), m_nFileRow)->text();
480 emit sigConnect(szFile);
481 if(!m_bDock) close();
manage plugins and connecter
virtual CConnecter * LoadConnecter(const QString &szFile)
New CConnecter pointer from file, the owner is caller.
virtual CConnecter * CreateConnecter(const QString &id)
New CConnecter pointer, the owner is caller.
virtual int DeleteConnecter(CConnecter *p)
Delete CConnecter.
virtual int SaveConnecter(CConnecter *pConnecter)
Accept connecter parameters to file.
virtual const QIcon Icon() const
Icon.
virtual int OpenDialogSettings(QWidget *parent=nullptr)
Open settings dialog.
virtual const QString Description()
Description.
virtual const QString Protocol() const
Protocol.
virtual const QString Id()
Identity.
virtual const QString Name()
Name.
virtual int onProcess(const QString &id, CPluginClient *pPlug) override
Process plugins.
virtual const QString DisplayName() const
The plugin display name.
virtual const QString Description() const =0
Plugin description.
virtual const QString Protocol() const =0
Plugin Protocol.