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