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)
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);
181 m_pTableView->horizontalHeader()->setSectionResizeMode(
182#
if defined(DEBUG) && !defined(Q_OS_ANDROID)
185 QHeaderView::Interactive);
193 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
194 QModelIndexList lstIndex;
196 lstIndex = pSelect->selectedRows();
197 if(m_pModel->rowCount() > 0 && lstIndex.isEmpty())
199 m_pTableView->selectRow(0);
204CFrmListRecent::~CFrmListRecent()
208void CFrmListRecent::slotLoadFiles()
210 m_pModel->removeRows(0, m_pModel->rowCount());
211 QString szPath = RabbitCommon::CDir::Instance()->GetDirUserData();
213 QStringList files = dir.entryList(QStringList() <<
"*.rrc",
214 QDir::Files, QDir::Time);
215 foreach (
auto fileName, files) {
216 QString szFile = dir.absoluteFilePath(fileName);
217 if(szFile.isEmpty())
continue;
219 if(!pOperate)
continue;
221 QList<QStandardItem*> lstItem;
222 lstItem = GetItem(pOperate, szFile);
223 m_pModel->appendRow(lstItem);
228 m_pStart->setEnabled(m_pModel->rowCount() > 0);
229 m_pEditOperate->setEnabled(m_pModel->rowCount() > 0);
230 m_pEdit->setEnabled(m_pModel->rowCount() > 0);
231 m_pCopy->setEnabled(m_pModel->rowCount() > 0);
232 m_pDelete->setEnabled(m_pModel->rowCount() > 0);
233 m_pAddToFavorite->setEnabled(m_pModel->rowCount() > 0);
238 m_pTableView->resizeColumnToContents(ColumnNo::Name);
239 m_pTableView->resizeColumnToContents(ColumnNo::Protocol);
240 m_pTableView->resizeColumnToContents(ColumnNo::Type);
241 m_pTableView->resizeColumnToContents(ColumnNo::Date);
245QList<QStandardItem*> CFrmListRecent::GetItem(
COperate* c, QString &szFile)
247 QList<QStandardItem*> lstItem;
248 QStandardItem* pName =
new QStandardItem(c->
Icon(), c->
Name());
251 QStandardItem* pProtocol =
new QStandardItem(c->
Protocol());
252 lstItem << pProtocol;
253 QStandardItem* pType =
new QStandardItem(c->
GetTypeName());
256 QFileInfo fi(szFile);
257 lstItem <<
new QStandardItem(fi.lastModified().toString());
258 QStandardItem* pId =
new QStandardItem(c->
Id());
260 QStandardItem* pFile =
new QStandardItem(szFile);
265int CFrmListRecent::InsertItem(
COperate *c, QString& szFile)
267 QList<QStandardItem*> lstItem;
268 lstItem = GetItem(c, szFile);
269 m_pModel->insertRow(0, lstItem);
270 m_pTableView->selectRow(0);
274void CFrmListRecent::slotStartByType()
276 qDebug(log) << Q_FUNC_INFO;
277 auto m = m_pMenuNew->actions();
281 foreach (
auto a, m_MenuStartByType) {
285 m_MenuStartByType.clear();
292 QMenu* m = m_pMenuNew;
293 if(m_ParameterApp.GetStartByType()) {
294 auto it = m_MenuStartByType.find(pPlugin->Type());
295 if(it == m_MenuStartByType.end()) {
296 m =
new QMenu(pPlugin->TypeName(pPlugin->Type()), m_pMenuNew);
297 m_MenuStartByType[pPlugin->Type()] = m;
298 m_pMenuNew->addMenu(m);
303 QAction* p = m_pMainWindow->GetStartAction(m, pPlugin);
304 bool check = connect(p, SIGNAL(triggered()),
this, SLOT(slotNew()));
309void CFrmListRecent::slotNew()
311 QAction* pAction =
dynamic_cast<QAction*
>(this->sender());
313 if(
nullptr == pOperate)
return;
318 case QDialog::Rejected:
320 case QDialog::Accepted:
322 QString szFile = pOperate->GetSettingsFile();
324 if(d.exists(szFile)) {
325 QMessageBox::StandardButton r
326 = QMessageBox::warning(
328 tr(
"The file is exists. whether to overwrite it? File: %1").arg(szFile),
329 QMessageBox::StandardButton::Ok | QMessageBox::StandardButton::No,
330 QMessageBox::StandardButton::No);
331 if(QMessageBox::StandardButton::Ok == r)
341 InsertItem(pOperate, szFile);
350void CFrmListRecent::slotEdit()
352 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
353 QModelIndexList lstIndex = pSelect->selectedRows();
354 foreach(
auto index, lstIndex)
356 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
361 case QDialog::Rejected:
363 case QDialog::Accepted:
371void CFrmListRecent::slotEditConnect()
373 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
374 QModelIndexList lstIndex = pSelect->selectedRows();
375 foreach(
auto index, lstIndex)
377 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
382 case QDialog::Rejected:
384 case QDialog::Accepted:
386 emit sigStart(szFile);
395void CFrmListRecent::slotCopy()
397 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
398 QModelIndexList lstIndex = pSelect->selectedRows();
399 foreach(
auto index, lstIndex)
401 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
410 case QDialog::Rejected:
412 case QDialog::Accepted:
414 szFile = pOperate->GetSettingsFile();
416 if(d.exists(szFile)) {
417 QMessageBox::StandardButton r
418 = QMessageBox::warning(
421 tr(
"The file is exists. whether to overwrite it?"
422 " If select No, please modify the name."),
423 QMessageBox::StandardButton::Ok
424 | QMessageBox::StandardButton::No
425 | QMessageBox::StandardButton::Cancel,
426 QMessageBox::StandardButton::No);
427 if(QMessageBox::StandardButton::No == r)
432 if(QMessageBox::StandardButton::Cancel == r)
438 InsertItem(pOperate, szFile);
451void CFrmListRecent::slotDelete()
453 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
454 QModelIndexList lstIndex = pSelect->selectedRows();
455 foreach(
auto index, lstIndex)
457 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
460 m_pModel->removeRow(index.row());
464void CFrmListRecent::slotStart()
466 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
467 QModelIndexList lstIndex = pSelect->selectedRows();
468 foreach(
auto index, lstIndex)
470 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
471 emit sigStart(szFile);
473 if(!m_bDock) close();
476void CFrmListRecent::slotDetail()
478 if(m_pDetail->isChecked()) {
479 m_pTableView->showColumn(ColumnNo::ID);
480 m_pTableView->showColumn(ColumnNo::File);
482 m_pTableView->hideColumn(ColumnNo::ID);
483 m_pTableView->hideColumn(ColumnNo::File);
487void CFrmListRecent::slotCustomContextMenu(
const QPoint &pos)
491 menu.addAction(m_pStart);
492 menu.addAction(m_pStart);
494 menu.addMenu(m_pMenuNew);
495 menu.addAction(m_pEdit);
496 menu.addAction(m_pCopy);
497 menu.addAction(m_pDelete);
499 menu.addAction(m_pAddToFavorite);
501 menu.addAction(m_pRefresh);
503 menu.exec(mapToGlobal(pos));
506void CFrmListRecent::slotDoubleClicked(
const QModelIndex& index)
508 if(!index.isValid())
return;
509 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
510 emit sigStart(szFile);
511 if(!m_bDock) close();
514void CFrmListRecent::slotAddToFavorite()
516 QItemSelectionModel* pSelect = m_pTableView->selectionModel();
517 QModelIndexList lstIndex = pSelect->selectedRows();
518 foreach(
auto index, lstIndex)
520 if(!index.isValid())
continue;
521 auto item = m_pModel->item(index.row(), ColumnNo::Name);
523 QString szName = item->text();
524 QIcon icon = item->icon();
525 QString szDescription = item->toolTip();
526 QString szFile = m_pModel->item(index.row(), ColumnNo::File)->text();
527 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.