LMMS
Loading...
Searching...
No Matches
FileBrowser.h
Go to the documentation of this file.
1/*
2 * FileBrowser.h - include file for FileBrowser
3 *
4 * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_GUI_FILE_BROWSER_H
26#define LMMS_GUI_FILE_BROWSER_H
27
28#include <QDir>
29#include <QMutex>
30
31#include "FileSearchJob.h"
32#include "embed.h"
33
34#include <QTreeWidget>
35
36#include "SideBarWidget.h"
37#include "lmmsconfig.h"
38
39class QCheckBox;
40class QLineEdit;
41class QProgressBar;
42
43namespace lmms
44{
45
46class InstrumentTrack;
47class PlayHandle;
48class TrackContainer;
49
50namespace gui
51{
52
54class FileItem;
55class FileSearchJob;
56
58{
59 Q_OBJECT
60public:
61 enum class Type
62 {
65 };
66
75 FileBrowser(Type type, const QString& directories, const QString& filter, const QString& title, const QPixmap& pm,
76 QWidget* parent, bool dirs_as_items = false, const QString& userDir = "", const QString& factoryDir = "");
77
78 ~FileBrowser() override = default;
79
80 static QDir::Filters dirFilters() { return QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden; }
81 static QDir::SortFlags sortFlags() { return QDir::LocaleAware | QDir::DirsFirst | QDir::Name | QDir::IgnoreCase; }
82
83private slots:
84 void reloadTree();
85 void expandItems(const QList<QString>& expandedDirs, QTreeWidgetItem* item = nullptr);
86 void giveFocusToFilter();
87
88private:
89 void keyPressEvent( QKeyEvent * ke ) override;
90
91 void addItems(const QString & path);
92
95
96 void onSearch(const QString& filter);
97 void onSearchMatch(const QString& path);
98 void onSearchStarted();
99 void onSearchFinished();
100
101 void addContentCheckBox();
102
105
106 QLineEdit * m_filterEdit;
108
109 QProgressBar* m_searchIndicator = nullptr;
111
113 QString m_filter;
114
116
117 QCheckBox* m_showUserContent = nullptr;
118 QCheckBox* m_showFactoryContent = nullptr;
119 QCheckBox* m_showHiddenContent = nullptr;
120
121 QBoxLayout *filterWidgetLayout = nullptr;
122 QBoxLayout *hiddenWidgetLayout = nullptr;
123 QBoxLayout *outerLayout = nullptr;
124 QString m_userDir;
126 QList<QString> m_savedExpandedDirs;
128} ;
129
130class FileBrowserTreeWidget : public QTreeWidget
131{
132 Q_OBJECT
133public:
134 FileBrowserTreeWidget( QWidget * parent );
135 ~FileBrowserTreeWidget() override = default;
136
139 QList<QString> expandedDirs( QTreeWidgetItem * item = nullptr ) const;
140
141protected:
142 void contextMenuEvent( QContextMenuEvent * e ) override;
143 void mousePressEvent( QMouseEvent * me ) override;
144 void mouseMoveEvent( QMouseEvent * me ) override;
145 void mouseReleaseEvent( QMouseEvent * me ) override;
146 void keyPressEvent( QKeyEvent * ke ) override;
147 void keyReleaseEvent( QKeyEvent * ke ) override;
148 void hideEvent( QHideEvent * he ) override;
149 void focusOutEvent( QFocusEvent * fe ) override;
150 void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
151 void wheelEvent(QWheelEvent * event) override;
152
153
154private:
158 void stopPreview();
159
160 void handleFile( FileItem * fi, InstrumentTrack * it );
162
163
166
169
170 QRecursiveMutex m_pphMutex;
171
172 QList<QAction*> getContextActions(FileItem* item, bool songEditor);
173
174
175private slots:
176 void activateListItem(QTreeWidgetItem* item, int column);
177 void openInNewInstrumentTrack(FileItem* item, bool songEditor);
178 bool openInNewSampleTrack(FileItem* item);
179 void openInSlicerT(FileItem* item);
181 void updateDirectory(QTreeWidgetItem* item);
182} ;
183
184class FileBrowserWidgetItem : public QTreeWidgetItem
185{
186public:
187 FileBrowserWidgetItem(const QStringList& strings, int type, QTreeWidget* parent = nullptr);
188 virtual QString fullName(QString path = QString{}) const = 0;
189};
190
191
193{
194public:
195 Directory(const QString& filename, const QString& path, const QString& filter);
196
197 void update();
198
199 QString fullName(QString path = QString{}) const override
200 {
201 if( path.isEmpty() )
202 {
203 path = m_directories[0];
204 }
205 if( ! path.isEmpty() )
206 {
207 path += QDir::separator();
208 }
209 return QDir::cleanPath(path + text(0));
210 }
211
212 inline void addDirectory( const QString & dir )
213 {
214 m_directories.push_back( dir );
215 }
216
217
218private:
219 bool addItems( const QString & path );
220
221
223 QPixmap m_folderOpenedPixmap = embed::getIconPixmap("folder_opened");
224 QPixmap m_folderLockedPixmap = embed::getIconPixmap("folder_locked");
225
232 QStringList m_directories;
234 QString m_filter;
235
237} ;
238
239
240
241
243{
244public:
256
265
266
267 FileItem( QTreeWidget * parent, const QString & name,
268 const QString & path );
269 FileItem( const QString & name, const QString & path );
270
271 QString fullName(QString path = QString{}) const override
272 {
273 return QFileInfo(m_path, text(0)).absoluteFilePath();
274 }
275
276 inline FileType type() const
277 {
278 return( m_type );
279 }
280
281 inline FileHandling handling() const
282 {
283 return( m_handling );
284 }
285
286 inline bool isTrack() const
287 {
289 }
290
291 QString extension();
292 static QString extension( const QString & file );
293 static QString defaultFilters();
294
295
296private:
297 void initPixmaps();
298 void determineFileType();
299
300 QString m_path;
303
304} ;
305
306
307} // namespace gui
308
309} // namespace lmms
310
311#endif // LMMS_GUI_FILE_BROWSER_H
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition InstrumentTrack.h:62
Definition PlayHandle.h:47
Definition Sample.h:37
Definition TrackContainer.h:49
Definition VstPlugin.h:44
QString m_filter
Filter as used in QDir::match().
Definition FileBrowser.h:234
bool addItems(const QString &path)
Definition FileBrowser.cpp:1130
QPixmap m_folderLockedPixmap
Definition FileBrowser.h:224
Directory(const QString &filename, const QString &path, const QString &filter)
Definition FileBrowser.cpp:1080
QString fullName(QString path=QString{}) const override
Definition FileBrowser.h:199
QPixmap m_folderPixmap
Definition FileBrowser.h:222
int m_dirCount
Definition FileBrowser.h:236
void update()
Definition FileBrowser.cpp:1090
QStringList m_directories
Definition FileBrowser.h:232
QPixmap m_folderOpenedPixmap
Definition FileBrowser.h:223
void addDirectory(const QString &dir)
Definition FileBrowser.h:212
void restoreDirectoriesStates()
Definition FileBrowser.cpp:213
QString m_previousFilterValue
Definition FileBrowser.h:127
void addContentCheckBox()
Definition FileBrowser.cpp:154
QProgressBar * m_searchIndicator
Definition FileBrowser.h:109
void saveDirectoriesStates()
Definition FileBrowser.cpp:208
FileBrowser(Type type, const QString &directories, const QString &filter, const QString &title, const QPixmap &pm, QWidget *parent, bool dirs_as_items=false, const QString &userDir="", const QString &factoryDir="")
Definition FileBrowser.cpp:84
FileSearchJob m_searchJob
Definition FileBrowser.h:110
static QDir::SortFlags sortFlags()
Definition FileBrowser.h:81
void onSearch(const QString &filter)
Definition FileBrowser.cpp:218
static QDir::Filters dirFilters()
Definition FileBrowser.h:80
QString m_directories
Directories to search, split with '*'.
Definition FileBrowser.h:112
Type m_type
Definition FileBrowser.h:107
void addItems(const QString &path)
Definition FileBrowser.cpp:368
void onSearchMatch(const QString &path)
Definition FileBrowser.cpp:246
FileBrowserTreeWidget * m_searchTreeWidget
Definition FileBrowser.h:104
QString m_userDir
Definition FileBrowser.h:124
QString m_factoryDir
Definition FileBrowser.h:125
QBoxLayout * outerLayout
Definition FileBrowser.h:123
QList< QString > m_savedExpandedDirs
Definition FileBrowser.h:126
QCheckBox * m_showFactoryContent
Definition FileBrowser.h:118
bool m_dirsAsItems
Definition FileBrowser.h:115
QString m_filter
Filter as used in QDir::match().
Definition FileBrowser.h:113
void giveFocusToFilter()
Definition FileBrowser.cpp:356
QBoxLayout * filterWidgetLayout
Definition FileBrowser.h:121
Type
Definition FileBrowser.h:62
@ Normal
Definition FileBrowser.h:63
@ Favorites
Definition FileBrowser.h:64
void keyPressEvent(QKeyEvent *ke) override
Definition FileBrowser.cpp:442
void reloadTree()
Definition FileBrowser.cpp:266
QLineEdit * m_filterEdit
Definition FileBrowser.h:106
void expandItems(const QList< QString > &expandedDirs, QTreeWidgetItem *item=nullptr)
Definition FileBrowser.cpp:332
QBoxLayout * hiddenWidgetLayout
Definition FileBrowser.h:122
void onSearchFinished()
Definition FileBrowser.cpp:261
void onSearchStarted()
Definition FileBrowser.cpp:256
FileBrowserTreeWidget * m_fileBrowserTreeWidget
Definition FileBrowser.h:103
~FileBrowser() override=default
QCheckBox * m_showUserContent
Definition FileBrowser.h:117
QCheckBox * m_showHiddenContent
Definition FileBrowser.h:119
Definition FileBrowser.h:131
~FileBrowserTreeWidget() override=default
bool m_mousePressed
Definition FileBrowser.h:164
void mousePressEvent(QMouseEvent *me) override
Definition FileBrowser.cpp:746
void sendToActiveInstrumentTrack(FileItem *item)
Definition FileBrowser.cpp:1042
void handleFile(FileItem *fi, InstrumentTrack *it)
Definition FileBrowser.cpp:930
QPoint m_pressPos
Definition FileBrowser.h:165
void mouseReleaseEvent(QMouseEvent *me) override
Definition FileBrowser.cpp:911
void previewFileItem(FileItem *file)
Start a preview of a file item.
Definition FileBrowser.cpp:777
void keyPressEvent(QKeyEvent *ke) override
Definition FileBrowser.cpp:533
void scrollTo(const QModelIndex &index, ScrollHint hint=EnsureVisible) override
Definition FileBrowser.cpp:510
PlayHandle * m_previewPlayHandle
This should only be accessed or modified when m_pphMutex is held.
Definition FileBrowser.h:168
void mouseMoveEvent(QMouseEvent *me) override
Definition FileBrowser.cpp:857
bool openInNewSampleTrack(FileItem *item)
Definition FileBrowser.cpp:1024
void updateDirectory(QTreeWidgetItem *item)
Definition FileBrowser.cpp:1066
void contextMenuEvent(QContextMenuEvent *e) override
Definition FileBrowser.cpp:606
void openInSlicerT(FileItem *item)
Definition FileBrowser.cpp:699
void wheelEvent(QWheelEvent *event) override
Definition FileBrowser.cpp:518
QRecursiveMutex m_pphMutex
Definition FileBrowser.h:170
void focusOutEvent(QFocusEvent *fe) override
Definition FileBrowser.cpp:599
void keyReleaseEvent(QKeyEvent *ke) override
Definition FileBrowser.cpp:580
void stopPreview()
If a preview is playing, stop it.
Definition FileBrowser.cpp:844
QList< QString > expandedDirs(QTreeWidgetItem *item=nullptr) const
Definition FileBrowser.cpp:486
void hideEvent(QHideEvent *he) override
Definition FileBrowser.cpp:589
void openInNewInstrumentTrack(TrackContainer *tc, FileItem *item)
Definition FileBrowser.cpp:1001
void activateListItem(QTreeWidgetItem *item, int column)
Definition FileBrowser.cpp:977
QList< QAction * > getContextActions(FileItem *item, bool songEditor)
Definition FileBrowser.cpp:709
FileBrowserTreeWidget(QWidget *parent)
Definition FileBrowser.cpp:460
virtual QString fullName(QString path=QString{}) const =0
FileBrowserWidgetItem(const QStringList &strings, int type, QTreeWidget *parent=nullptr)
Definition FileBrowser.cpp:1075
Definition FileBrowser.h:243
FileHandling handling() const
Definition FileBrowser.h:281
FileType m_type
Definition FileBrowser.h:301
FileItem(QTreeWidget *parent, const QString &name, const QString &path)
Definition FileBrowser.cpp:1161
FileType
Definition FileBrowser.h:246
@ Patch
Definition FileBrowser.h:251
@ Midi
Definition FileBrowser.h:252
@ SoundFont
Definition FileBrowser.h:250
@ Unknown
Definition FileBrowser.h:254
@ Project
Definition FileBrowser.h:247
@ Preset
Definition FileBrowser.h:248
QString fullName(QString path=QString{}) const override
Definition FileBrowser.h:271
QString extension()
Definition FileBrowser.cpp:1295
static QString defaultFilters()
Definition FileBrowser.cpp:1308
FileHandling m_handling
Definition FileBrowser.h:302
bool isTrack() const
Definition FileBrowser.h:286
FileHandling
Definition FileBrowser.h:258
@ LoadAsPreset
Definition FileBrowser.h:261
@ LoadByPlugin
Definition FileBrowser.h:262
@ LoadAsProject
Definition FileBrowser.h:260
@ NotSupported
Definition FileBrowser.h:259
@ ImportAsProject
Definition FileBrowser.h:263
FileType type() const
Definition FileBrowser.h:276
void initPixmaps()
Definition FileBrowser.cpp:1180
QString m_path
Definition FileBrowser.h:300
void determineFileType()
Definition FileBrowser.cpp:1221
Definition FileSearchJob.h:37
SideBarWidget(const QString &_title, const QPixmap &_icon, QWidget *_parent)
Definition SideBarWidget.cpp:38
* e
Definition inflate.c:1404
static PuglViewHint hint
Definition pugl.h:1707
static const char * title
Definition pugl.h:1747
static const char * name
Definition pugl.h:1582
static uintptr_t parent
Definition pugl.h:1644
auto getIconPixmap(std::string_view name, int width, int height, const char *const *xpm) -> QPixmap
Definition embed.cpp:107
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
QString filename
Definition HydrogenImport.cpp:42
const char * text
Definition swell-functions.h:167
struct zdirent * file
Definition win32.c:1500