1#include "FrmListRecent.h"
2#include "RabbitCommonDir.h"
5#include <QStandardItem>
9#include <QLoggingCategory>
10#include "mainwindow.h"
12static Q_LOGGING_CATEGORY(log,
"App.FrmListRecent")
18 m_pMainWindow(pMainWindow),
19 m_ParameterApp(parameterApp),
21 m_ptbOperate(
nullptr),
26 m_pDockTitleBar(
nullptr)
29 setFocusPolicy(Qt::NoFocus);
30 setAttribute(Qt::WA_DeleteOnClose);
31 setLayout(
new QVBoxLayout(
this));
32 setWindowTitle(tr(
"Recently list"));
34 m_pToolBar =
new QToolBar(
this);
36 m_pStart = m_pToolBar->addAction(
37 QIcon::fromTheme(
"media-playback-start"), tr(
"Start"),
38 this, SLOT(slotStart()));
39 m_pStart->setStatusTip(tr(
"Start"));
40 m_pStart->setToolTip(tr(
"Start"));
41 m_pEditOperate = m_pToolBar->addAction(
42 QIcon::fromTheme(
"edit-connect"), tr(
"Edit and Start"),
43 this, SLOT(slotEditConnect()));
44 m_pEditOperate->setStatusTip(tr(
"Edit and Start"));
45 m_pEditOperate->setToolTip(tr(
"Edit and Start"));
46 m_pToolBar->addSeparator();
48 m_ptbOperate =
new QToolButton(m_pToolBar);
49 m_ptbOperate->setFocusPolicy(Qt::NoFocus);
50 m_ptbOperate->setPopupMode(QToolButton::InstantPopup);
52 m_pMenuNew =
new QMenu(tr(
"New"),
this);
53 m_pMenuNew->setIcon(QIcon::fromTheme(
"add"));
54 m_ptbOperate->setMenu(m_pMenuNew);
55 m_ptbOperate->setIcon(m_pMenuNew->icon());
56 m_ptbOperate->setText(tr(
"New"));
57 m_ptbOperate->setToolTip(tr(
"New"));
58 m_ptbOperate->setStatusTip(tr(
"New"));
59 m_pToolBar->addWidget(m_ptbOperate);
60 check = connect(&m_ParameterApp, SIGNAL(sigStartByTypeChanged()),
61 this, SLOT(slotStartByType()));
63 m_pManager->EnumPlugins(
this);
64 m_pEdit = m_pToolBar->addAction(QIcon::fromTheme(
"edit"), tr(
"Edit"),
65 this, SLOT(slotEdit()));
66 m_pEdit->setStatusTip(tr(
"Edit"));
67 m_pEdit->setToolTip(tr(
"Edit"));
68 m_pCopy = m_pToolBar->addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy"),
69 this, SLOT(slotCopy()));
70 m_pCopy->setStatusTip(tr(
"Copy"));
71 m_pCopy->setToolTip(tr(
"Copy"));
72 m_pDelete = m_pToolBar->addAction(
73 QIcon::fromTheme(
"edit-delete"), tr(
"Delete"),
74 this, SLOT(slotDelete()));
75 m_pDelete->setToolTip(tr(
"Delete"));
76 m_pDelete->setStatusTip(tr(
"Delete"));
77 m_pDetail = m_pToolBar->addAction(
78 QIcon::fromTheme(
"dialog-information"), tr(
"Detail"),
79 this, SLOT(slotDetail()));
80 m_pDetail->setCheckable(
true);
81 m_pDetail->setChecked(
false);
82 m_pDetail->setToolTip(tr(
"Detail"));
83 m_pDetail->setStatusTip(tr(
"Detail"));
84 m_pToolBar->addSeparator();
85 m_pAddToFavorite = m_pToolBar->addAction(QIcon::fromTheme(
"emblem-favorite"), tr(
"Add to favorite"),
86 this, SLOT(slotAddToFavorite()));
87 m_pAddToFavorite->setStatusTip(m_pAddToFavorite->text());
88 m_pAddToFavorite->setToolTip(m_pAddToFavorite->text());
89 m_pAddToFavorite->setEnabled(
false);
91 m_pRefresh = m_pToolBar->addAction(
92 QIcon::fromTheme(
"view-refresh"),
94 this, SLOT(slotLoadFiles()));
95 m_pRefresh->setToolTip(tr(
"Refresh"));
96 m_pRefresh->setStatusTip(tr(
"Refresh"));
98 QAction* pClose = m_pToolBar->addAction(
99 QIcon::fromTheme(
"window-close"), tr(
"Close"),
100 this, SLOT(close()));
101 pClose->setStatusTip(tr(
"Close"));
102 pClose->setToolTip(tr(
"Close"));
105 layout()->addWidget(m_pToolBar);
108 m_pDockTitleBar =
new RabbitCommon::CTitleBar(parent);
110 QMenu* pMenu =
new QMenu(tr(
"Tools"), m_pDockTitleBar);
111 QPushButton* pTools = m_pDockTitleBar->CreateSmallPushButton(
112 QIcon::fromTheme(
"tools"), m_pDockTitleBar);
113 pTools->setToolTip(tr(
"Tools"));
114 pTools->setMenu(pMenu);
115 QList<QWidget*> lstWidget;
117 m_pDockTitleBar->AddWidgets(lstWidget);
119 pMenu->addAction(m_pStart);
120 pMenu->addAction(m_pEditOperate);
121 pMenu->addMenu(m_pMenuNew);
122 pMenu->addAction(m_pEdit);
123 pMenu->addAction(m_pCopy);
124 pMenu->addAction(m_pDelete);
125 pMenu->addAction(m_pDetail);
126 pMenu->addAction(m_pAddToFavorite);
127 pMenu->addAction(m_pRefresh);
128 pMenu->addSeparator();
129 auto pShowToolBar = pMenu->addAction(tr(
"Show tool bar"),
this, [&](){
130 QAction* a = (QAction*)sender();
132 m_pToolBar->setVisible(a->isChecked());
133 m_ParameterApp.SetDockListRecentShowToolBar(a->isChecked());
134 m_ParameterApp.Save();
137 pShowToolBar->setCheckable(
true);
138 pShowToolBar->setChecked(m_ParameterApp.GetDockListRecentShowToolBar());
139 m_pToolBar->setVisible(m_ParameterApp.GetDockListRecentShowToolBar());
142 Q_ASSERT(m_pManager);
143 m_pTableView =
new QTableView(
this);
144 m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
145 check = connect(m_pTableView,
146 SIGNAL(customContextMenuRequested(
const QPoint &)),
147 this, SLOT(slotCustomContextMenu(
const QPoint &)));
149 check = connect(m_pTableView, SIGNAL(doubleClicked(
const QModelIndex &)),
150 this, SLOT(slotDoubleClicked(
const QModelIndex&)));
152 layout()->addWidget(m_pTableView);
154 m_pModel =
new QStandardItemModel(m_pTableView);
155 m_pTableView->setModel(m_pModel);
156 m_pTableView->verticalHeader()->hide();
157 m_pTableView->setSelectionMode(QAbstractItemView::SingleSelection);
158 m_pTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
159 m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
160 m_pModel->setHorizontalHeaderItem(ColumnNo::Name,
new QStandardItem(tr(
"Name")));
161 m_pModel->setHorizontalHeaderItem(ColumnNo::Protocol,
new QStandardItem(tr(
"Protocol")));
162 m_pModel->setHorizontalHeaderItem(ColumnNo::Type,
new QStandardItem(tr(
"Type")));
163 m_pModel->setHorizontalHeaderItem(ColumnNo::Date,
new QStandardItem(tr(
"Date")));
164 m_pModel->setHorizontalHeaderItem(ColumnNo::ID,
new QStandardItem(tr(
"ID")));
165 m_pModel->setHorizontalHeaderItem(ColumnNo::File,
new QStandardItem(tr(
"File")));
166 if(!m_pDetail->isChecked()) {
167 m_pTableView->hideColumn(ColumnNo::ID);
168 m_pTableView->hideColumn(ColumnNo::File);
180 m_pTableView->horizontalHeader()->setSectionResizeMode(
181#
if defined(DEBUG) && !defined(Q_OS_ANDROID)
184 QHeaderView::Interactive);
192 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
193 QModelIndexList lstIndex;
195 lstIndex = pSelect->selectedRows();
196 if(m_pModel->rowCount() > 0 && lstIndex.isEmpty())
198 m_pTableView->selectRow(0);
203CFrmListRecent::~CFrmListRecent()
207void CFrmListRecent::slotLoadFiles()
209 m_pModel->removeRows(0, m_pModel->rowCount());
210 QString szPath = RabbitCommon::CDir::Instance()->GetDirUserData();
212 QStringList files = dir.entryList(QStringList() <<
"*.rrc",
213 QDir::Files, QDir::Time);
214 foreach (
auto fileName, files) {
215 QString szFile = dir.absoluteFilePath(fileName);
216 if(szFile.isEmpty())
continue;
218 if(!pOperate)
continue;
220 QList<QStandardItem*> lstItem;
221 lstItem = GetItem(pOperate, szFile);
222 m_pModel->appendRow(lstItem);
227 m_pStart->setEnabled(m_pModel->rowCount() > 0);
228 m_pEditOperate->setEnabled(m_pModel->rowCount() > 0);
229 m_pEdit->setEnabled(m_pModel->rowCount() > 0);
230 m_pCopy->setEnabled(m_pModel->rowCount() > 0);
231 m_pDelete->setEnabled(m_pModel->rowCount() > 0);
232 m_pAddToFavorite->setEnabled(m_pModel->rowCount() > 0);
237 m_pTableView->resizeColumnToContents(ColumnNo::Name);
238 m_pTableView->resizeColumnToContents(ColumnNo::Protocol);
239 m_pTableView->resizeColumnToContents(ColumnNo::Type);
240 m_pTableView->resizeColumnToContents(ColumnNo::Date);
244QList<QStandardItem*> CFrmListRecent::GetItem(
COperate* c, QString &szFile)
246 QList<QStandardItem*> lstItem;
247 QStandardItem* pName =
new QStandardItem(c->
Icon(), c->
Name());
250 QStandardItem* pProtocol =
new QStandardItem(c->
Protocol());
251 lstItem << pProtocol;
252 QStandardItem* pType =
new QStandardItem(c->
GetTypeName());
255 QFileInfo fi(szFile);
256 lstItem <<
new QStandardItem(fi.lastModified().toString());
257 QStandardItem* pId =
new QStandardItem(c->
Id());
259 QStandardItem* pFile =
new QStandardItem(szFile);
264int CFrmListRecent::InsertItem(
COperate *c, QString& szFile)
266 QList<QStandardItem*> lstItem;
267 lstItem = GetItem(c, szFile);
268 m_pModel->insertRow(0, lstItem);
269 m_pTableView->selectRow(0);
273void CFrmListRecent::slotStartByType()
275 qDebug(log) << Q_FUNC_INFO;
276 auto m = m_pMenuNew->actions();
280 foreach (
auto a, m_MenuStartByType) {
284 m_MenuStartByType.clear();
291 QMenu* m = m_pMenuNew;
292 if(m_ParameterApp.GetStartByType()) {
293 auto it = m_MenuStartByType.find(pPlugin->Type());
294 if(it == m_MenuStartByType.end()) {
295 m =
new QMenu(pPlugin->TypeName(pPlugin->Type()), m_pMenuNew);
296 m_MenuStartByType[pPlugin->Type()] = m;
297 m_pMenuNew->addMenu(m);
302 QAction* p = m_pMainWindow->GetStartAction(m, pPlugin);
303 bool check = connect(p, SIGNAL(triggered()),
this, SLOT(slotNew()));
308void CFrmListRecent::slotNew()
310 QAction* pAction =
dynamic_cast<QAction*
>(this->sender());
312 if(
nullptr == pOperate)
return;
317 case QDialog::Rejected:
319 case QDialog::Accepted:
321 QString szFile = pOperate->GetSettingsFile();
323 if(d.exists(szFile)) {
324 QMessageBox::StandardButton r
325 = QMessageBox::warning(
327 tr(
"The file is exists. whether to overwrite it? File: %1").arg(szFile),
328 QMessageBox::StandardButton::Ok | QMessageBox::StandardButton::No,
329 QMessageBox::StandardButton::No);
330 if(QMessageBox::StandardButton::Ok == r)
340 InsertItem(pOperate, szFile);
349void CFrmListRecent::slotEdit()
351 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
352 QModelIndexList lstIndex = pSelect->selectedRows();
353 foreach(
auto index, lstIndex)
355 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
360 case QDialog::Rejected:
362 case QDialog::Accepted:
370void CFrmListRecent::slotEditConnect()
372 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
373 QModelIndexList lstIndex = pSelect->selectedRows();
374 foreach(
auto index, lstIndex)
376 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
381 case QDialog::Rejected:
383 case QDialog::Accepted:
385 emit sigStart(szFile);
394void CFrmListRecent::slotCopy()
396 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
397 QModelIndexList lstIndex = pSelect->selectedRows();
398 foreach(
auto index, lstIndex)
400 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
409 case QDialog::Rejected:
411 case QDialog::Accepted:
413 szFile = pOperate->GetSettingsFile();
415 if(d.exists(szFile)) {
416 QMessageBox::StandardButton r
417 = QMessageBox::warning(
420 tr(
"The file is exists. whether to overwrite it?"
421 " If select No, please modify the name."),
422 QMessageBox::StandardButton::Ok
423 | QMessageBox::StandardButton::No
424 | QMessageBox::StandardButton::Cancel,
425 QMessageBox::StandardButton::No);
426 if(QMessageBox::StandardButton::No == r)
431 if(QMessageBox::StandardButton::Cancel == r)
437 InsertItem(pOperate, szFile);
450void CFrmListRecent::slotDelete()
452 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
453 QModelIndexList lstIndex = pSelect->selectedRows();
454 foreach(
auto index, lstIndex)
456 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
459 m_pModel->removeRow(index.row());
463void CFrmListRecent::slotStart()
465 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
466 QModelIndexList lstIndex = pSelect->selectedRows();
467 foreach(
auto index, lstIndex)
469 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
470 emit sigStart(szFile);
472 if(!m_bDock) close();
475void CFrmListRecent::slotDetail()
477 if(m_pDetail->isChecked()) {
478 m_pTableView->showColumn(ColumnNo::ID);
479 m_pTableView->showColumn(ColumnNo::File);
481 m_pTableView->hideColumn(ColumnNo::ID);
482 m_pTableView->hideColumn(ColumnNo::File);
486void CFrmListRecent::slotCustomContextMenu(
const QPoint &pos)
490 menu.addAction(m_pStart);
491 menu.addAction(m_pStart);
493 menu.addMenu(m_pMenuNew);
494 menu.addAction(m_pEdit);
495 menu.addAction(m_pCopy);
496 menu.addAction(m_pDelete);
498 menu.addAction(m_pAddToFavorite);
500 menu.addAction(m_pRefresh);
502 menu.exec(mapToGlobal(pos));
505void CFrmListRecent::slotDoubleClicked(
const QModelIndex& index)
507 if(!index.isValid())
return;
508 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
509 emit sigStart(szFile);
510 if(!m_bDock) close();
513void CFrmListRecent::slotAddToFavorite()
515 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
516 QModelIndexList lstIndex = pSelect->selectedRows();
517 foreach(
auto index, lstIndex)
519 if(!index.isValid())
continue;
520 auto item = m_pModel->item(index.row(), ColumnNo::Name);
522 QString szName = item->text();
523 QIcon icon = item->icon();
524 QString szDescription = item->toolTip();
525 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
526 emit sigAddToFavorite(szName, szDescription, icon, szFile);
List the connect of be existed.
virtual int onProcess(const QString &id, CPlugin *pPlugin) override
Process plugins.
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 OpenDialogSettings(QWidget *parent=nullptr)
Open settings dialog.
virtual const QIcon Icon() const
Icon.
virtual const QString Protocol() const
Protocol.
virtual const QString Name()
Name.
virtual const QString Description()
Description.
virtual const QString Id()
Identity.
virtual const QString GetTypeName() const
Get type name.