RabbitCommon v2.3.3
Loading...
Searching...
No Matches
DockFolderBrowser.cpp
1// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2// Author Kang Lin <kl222@126.com>
3
4#include "DockFolderBrowser.h"
5#include "ui_DockFolderBrowser.h"
6#include "TitleBar.h"
7#include "RabbitCommonDir.h"
8
9#include <QFileSystemModel>
10#include <QMenu>
11#include <QDir>
12#include <QSettings>
13#include <QLoggingCategory>
14
15static Q_LOGGING_CATEGORY(log, "RabbitCommon.DockFolderBrowser")
16
17CDockFolderBrowser::CDockFolderBrowser(const QString &title,
18 QWidget *parent,
19 Qt::WindowFlags flags)
20 : QDockWidget(title, parent, flags),
21 ui(new Ui::CDockFolderBrowser),
22 m_pModel(new QFileSystemModel(this)),
23 m_bDetails(false)
24{
25 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
26 QSettings::IniFormat);
27
28 ui->setupUi(this);
29
30 ui->treeView->setModel(m_pModel);
31
32 connect(ui->treeView, &QTreeView::doubleClicked,
33 this, [&](const QModelIndex &index) {
34 if (m_pModel) {
35 emit sigDoubleClicked(m_pModel->filePath(index),
36 m_pModel->isDir(index));
37 }
38 });
39
40 setRootPath("");
41
42 // [Use CTitleBar]
43 RabbitCommon::CTitleBar* pDockTitleBar = new RabbitCommon::CTitleBar(this);
44 if(pDockTitleBar) {
45 // Set title widget
46 setTitleBarWidget(pDockTitleBar);
47
48 // Create filter pushbutton in title bar
49 QMenu* pMenu = new QMenu(tr("Filter"), pDockTitleBar);
50 QPushButton* pFilter = pDockTitleBar->CreateSmallPushButton(
51 QIcon::fromTheme("filter"), pDockTitleBar);
52 pFilter->setToolTip(tr("Filter"));
53 pFilter->setMenu(pMenu);
54 QList<QWidget*> lstWidget;
55 lstWidget << pFilter;
56 pDockTitleBar->AddWidgets(lstWidget);
57
58 QString szTitle;
59
60 // Add set filter action in menu
61 uint filter = m_pModel->filter();
62 filter = set.value("FolderBrowser/Filters", filter).toUInt();
63 QDir::Filters f = QDir::Filters(filter);
64 m_pModel->setFilter(f);
65 if(QDir::Hidden & f)
66 {
67 szTitle = tr("Don't show hidden files");
68 } else {
69 szTitle = tr("Show hidden files");
70 }
71 pMenu->addAction(szTitle, this, [&](){
72 QAction* p = qobject_cast<QAction*>(sender());
73 if(!(p && m_pModel)) return;
74 QDir::Filters f = m_pModel->filter();
75 if(QDir::Hidden & f)
76 {
77 p->setText(tr("Show hidden files"));
78 m_pModel->setFilter(f & (~QDir::Hidden));
79 } else {
80 p->setText(tr("Don't show hidden files"));
81 m_pModel->setFilter(f | QDir::Hidden);
82 }
83 });
84
85 // Add show details action in menu
86 m_bDetails = set.value("FolderBrowser/Details", false).toBool();
87 if(m_bDetails) {
88 szTitle = tr("Show brief");
89 ui->treeView->header()->showSection(1);
90 ui->treeView->header()->showSection(2);
91 ui->treeView->header()->showSection(3);
92 } else {
93 szTitle = tr("Show details");
94 ui->treeView->header()->hideSection(1);
95 ui->treeView->header()->hideSection(2);
96 ui->treeView->header()->hideSection(3);
97 }
98 pMenu->addAction(szTitle, this, [&](){
99 QAction* p = qobject_cast<QAction*>(sender());
100 if(!(p && m_pModel)) return;
101 m_bDetails = !m_bDetails;
102 QString szTitle;
103 if(m_bDetails) {
104 szTitle = tr("Show brief");
105 ui->treeView->header()->showSection(1);
106 ui->treeView->header()->showSection(2);
107 ui->treeView->header()->showSection(3);
108 } else {
109 szTitle = tr("Show details");
110 ui->treeView->header()->hideSection(1);
111 ui->treeView->header()->hideSection(2);
112 ui->treeView->header()->hideSection(3);
113 }
114 p->setText(szTitle);
115 });
116 }
117 // [Use CTitleBar]
118}
119
120CDockFolderBrowser::CDockFolderBrowser(QWidget *parent, Qt::WindowFlags flags) :
121 CDockFolderBrowser(tr("Folder browser"), parent, flags)
122{}
123
124CDockFolderBrowser::~CDockFolderBrowser()
125{
126 qDebug(log) << "CDockFolderBrowser::~CDockFolderBrowser()";
127 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
128 QSettings::IniFormat);
129 uint flitersFlag = m_pModel->filter();
130 set.setValue("FolderBrowser/Filters", flitersFlag);
131 set.setValue("FolderBrowser/Details", m_bDetails);
132 delete ui;
133}
134
135void CDockFolderBrowser::setRootPath(const QString dir)
136{
137 m_pModel->setRootPath(dir);
138 ui->treeView->setRootIndex(m_pModel->index(dir));
139}
140
142{
143 return m_pModel->rootPath();
144}
void setRootPath(const QString dir)
Set root path.
QString rootPath() const
Get root path.
The cursom title bar for QWidget, QDockWidget etc.
Definition TitleBar.h:48
int AddWidgets(QList< QWidget * > pLstWidget)
Add user-defined buttons.
Definition TitleBar.cpp:144