lmms
Cross-platform music production software
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 {
63 Normal,
64 Favorites
65 };
66
78 // TODO: Is dirs_as_items ever true?
79 FileBrowser(Type type, const QString& directories, const QString& filter, const QString& title, const QPixmap& pm,
80 QWidget* parent, bool dirs_as_items = false, const QString& userDir = "", const QString& factoryDir = "");
81
82 ~FileBrowser() override = default;
83
84 static QDir::Filters dirFilters() { return QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden; }
85 static QDir::SortFlags sortFlags() { return QDir::LocaleAware | QDir::DirsFirst | QDir::Name | QDir::IgnoreCase; }
86
87private slots:
88 void reloadTree();
89 void expandItems(const QList<QString>& expandedDirs, QTreeWidgetItem* item = nullptr);
90 void giveFocusToFilter();
91
92private:
93 void keyPressEvent( QKeyEvent * ke ) override;
94
95 void addItems(const QString & path);
96
99
100 void onSearch(const QString& filter);
101 void onSearchMatch(const QString& path);
102 void onSearchStarted();
103 void onSearchFinished();
104
105 void addContentCheckBox();
106
109
110 QLineEdit * m_filterEdit;
112
113 QProgressBar* m_searchIndicator = nullptr;
115
117 QString m_filter;
118
120
121 QCheckBox* m_showUserContent = nullptr;
122 QCheckBox* m_showFactoryContent = nullptr;
123 QCheckBox* m_showHiddenContent = nullptr;
124
125 QBoxLayout *filterWidgetLayout = nullptr;
126 QBoxLayout *hiddenWidgetLayout = nullptr;
127 QBoxLayout *outerLayout = nullptr;
128 QString m_userDir;
130 QList<QString> m_savedExpandedDirs;
132} ;
133
134class FileBrowserTreeWidget : public QTreeWidget
135{
136 Q_OBJECT
137public:
138 FileBrowserTreeWidget( QWidget * parent );
139 ~FileBrowserTreeWidget() override = default;
140
143 QList<QString> expandedDirs( QTreeWidgetItem * item = nullptr ) const;
144
145protected:
146 void contextMenuEvent( QContextMenuEvent * e ) override;
147 void mousePressEvent( QMouseEvent * me ) override;
148 void mouseMoveEvent( QMouseEvent * me ) override;
149 void mouseReleaseEvent( QMouseEvent * me ) override;
150 void keyPressEvent( QKeyEvent * ke ) override;
151 void keyReleaseEvent( QKeyEvent * ke ) override;
152 void hideEvent( QHideEvent * he ) override;
153 void focusOutEvent( QFocusEvent * fe ) override;
154 void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
155 void wheelEvent(QWheelEvent * event) override;
156
157
158private:
160 void previewFileItem(FileItem* file);
162 void stopPreview();
163
164 void handleFile( FileItem * fi, InstrumentTrack * it );
166
167
170
173
174 QRecursiveMutex m_pphMutex;
175
176 QList<QAction*> getContextActions(FileItem* item, bool songEditor);
177
178
179private slots:
180 void activateListItem(QTreeWidgetItem* item, int column);
181 void openInNewInstrumentTrack(FileItem* item, bool songEditor);
182 bool openInNewSampleTrack(FileItem* item);
183 void openInSlicerT(FileItem* item, bool songEditor);
185 void updateDirectory(QTreeWidgetItem* item);
186} ;
187
188class FileBrowserWidgetItem : public QTreeWidgetItem
189{
190public:
191 FileBrowserWidgetItem(const QStringList& strings, int type, QTreeWidget* parent = nullptr);
192 virtual QString fullName(QString path = QString{}) const = 0;
193};
194
195
197{
198public:
199 Directory(const QString& filename, const QString& path, const QString& filter);
200
201 void update();
202
203 QString fullName(QString path = QString{}) const override
204 {
205 if( path.isEmpty() )
206 {
207 path = m_directories[0];
208 }
209 if( ! path.isEmpty() )
210 {
211 path += QDir::separator();
212 }
213 return QDir::cleanPath(path + text(0));
214 }
215
216 inline void addDirectory( const QString & dir )
217 {
218 m_directories.push_back( dir );
219 }
220
221
222private:
223 bool addItems( const QString & path );
224
225
227 QPixmap m_folderOpenedPixmap = embed::getIconPixmap("folder_opened");
228 QPixmap m_folderLockedPixmap = embed::getIconPixmap("folder_locked");
229
236 QStringList m_directories;
238 QString m_filter;
239
241} ;
242
243
244
245
247{
248public:
249 enum class FileType
250 {
251 Project,
252 Preset,
254 SoundFont,
255 Patch,
256 Midi,
258 Unknown
259 } ;
260
261 enum class FileHandling
262 {
263 NotSupported,
264 LoadAsProject,
265 LoadAsPreset,
266 LoadByPlugin,
267 ImportAsProject
268 } ;
269
270
271 FileItem( QTreeWidget * parent, const QString & name,
272 const QString & path );
273 FileItem( const QString & name, const QString & path );
274
275 QString fullName(QString path = QString{}) const override
276 {
277 return QFileInfo(m_path, text(0)).absoluteFilePath();
278 }
279
280 inline FileType type() const
281 {
282 return( m_type );
283 }
284
285 inline FileHandling handling() const
286 {
287 return( m_handling );
288 }
289
290 inline bool isTrack() const
291 {
293 }
294
295 QString extension();
296 static QString extension( const QString & file );
297 static QString defaultFilters();
298
299
300private:
301 void initPixmaps();
302 void determineFileType();
303
304 QString m_path;
307
308} ;
309
310
311} // namespace gui
312
313} // namespace lmms
314
315#endif // LMMS_GUI_FILE_BROWSER_H
Definition InstrumentTrack.h:62
Definition PlayHandle.h:47
Definition Sample.h:37
Definition TrackContainer.h:49
Definition VstPlugin.h:45
QString m_filter
Filter as used in QDir::match().
Definition FileBrowser.h:238
bool addItems(const QString &path)
Definition FileBrowser.cpp:1146
QPixmap m_folderLockedPixmap
Definition FileBrowser.h:228
Directory(const QString &filename, const QString &path, const QString &filter)
Definition FileBrowser.cpp:1096
QString fullName(QString path=QString{}) const override
Definition FileBrowser.h:203
QPixmap m_folderPixmap
Definition FileBrowser.h:226
int m_dirCount
Definition FileBrowser.h:240
void update()
Definition FileBrowser.cpp:1106
QStringList m_directories
Definition FileBrowser.h:236
QPixmap m_folderOpenedPixmap
Definition FileBrowser.h:227
void addDirectory(const QString &dir)
Definition FileBrowser.h:216
void restoreDirectoriesStates()
Definition FileBrowser.cpp:213
QString m_previousFilterValue
Definition FileBrowser.h:131
void addContentCheckBox()
Definition FileBrowser.cpp:154
QProgressBar * m_searchIndicator
Definition FileBrowser.h:113
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="")
Create a file browser side bar widget.
Definition FileBrowser.cpp:84
FileSearchJob m_searchJob
Definition FileBrowser.h:114
static QDir::SortFlags sortFlags()
Definition FileBrowser.h:85
void onSearch(const QString &filter)
Definition FileBrowser.cpp:218
static QDir::Filters dirFilters()
Definition FileBrowser.h:84
QString m_directories
Directories to search, split with '*'.
Definition FileBrowser.h:116
Type m_type
Definition FileBrowser.h:111
void addItems(const QString &path)
Definition FileBrowser.cpp:368
void onSearchMatch(const QString &path)
Definition FileBrowser.cpp:246
FileBrowserTreeWidget * m_searchTreeWidget
Definition FileBrowser.h:108
QString m_userDir
Definition FileBrowser.h:128
QString m_factoryDir
Definition FileBrowser.h:129
QBoxLayout * outerLayout
Definition FileBrowser.h:127
QList< QString > m_savedExpandedDirs
Definition FileBrowser.h:130
QCheckBox * m_showFactoryContent
Definition FileBrowser.h:122
bool m_dirsAsItems
Definition FileBrowser.h:119
QString m_filter
Filter as used in QDir::match().
Definition FileBrowser.h:117
void giveFocusToFilter()
Definition FileBrowser.cpp:356
QBoxLayout * filterWidgetLayout
Definition FileBrowser.h:125
Type
Definition FileBrowser.h:62
void keyPressEvent(QKeyEvent *ke) override
Definition FileBrowser.cpp:442
void reloadTree()
Definition FileBrowser.cpp:266
QLineEdit * m_filterEdit
Definition FileBrowser.h:110
void expandItems(const QList< QString > &expandedDirs, QTreeWidgetItem *item=nullptr)
Definition FileBrowser.cpp:332
QBoxLayout * hiddenWidgetLayout
Definition FileBrowser.h:126
void onSearchFinished()
Definition FileBrowser.cpp:261
void onSearchStarted()
Definition FileBrowser.cpp:256
FileBrowserTreeWidget * m_fileBrowserTreeWidget
Definition FileBrowser.h:107
~FileBrowser() override=default
QCheckBox * m_showUserContent
Definition FileBrowser.h:121
QCheckBox * m_showHiddenContent
Definition FileBrowser.h:123
Definition FileBrowser.h:135
void openInSlicerT(FileItem *item, bool songEditor)
Definition FileBrowser.cpp:695
~FileBrowserTreeWidget() override=default
bool m_mousePressed
Definition FileBrowser.h:168
void mousePressEvent(QMouseEvent *me) override
Definition FileBrowser.cpp:762
void sendToActiveInstrumentTrack(FileItem *item)
Definition FileBrowser.cpp:1058
void handleFile(FileItem *fi, InstrumentTrack *it)
Definition FileBrowser.cpp:946
QPoint m_pressPos
Definition FileBrowser.h:169
void mouseReleaseEvent(QMouseEvent *me) override
Definition FileBrowser.cpp:927
void previewFileItem(FileItem *file)
Start a preview of a file item.
Definition FileBrowser.cpp:793
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:172
void mouseMoveEvent(QMouseEvent *me) override
Definition FileBrowser.cpp:873
bool openInNewSampleTrack(FileItem *item)
Definition FileBrowser.cpp:1040
void updateDirectory(QTreeWidgetItem *item)
Definition FileBrowser.cpp:1082
void contextMenuEvent(QContextMenuEvent *e) override
Definition FileBrowser.cpp:606
void wheelEvent(QWheelEvent *event) override
Definition FileBrowser.cpp:518
QRecursiveMutex m_pphMutex
Definition FileBrowser.h:174
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:860
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:1017
void activateListItem(QTreeWidgetItem *item, int column)
Definition FileBrowser.cpp:993
QList< QAction * > getContextActions(FileItem *item, bool songEditor)
Definition FileBrowser.cpp:708
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:1091
Definition FileBrowser.h:247
FileHandling handling() const
Definition FileBrowser.h:285
FileType m_type
Definition FileBrowser.h:305
FileItem(QTreeWidget *parent, const QString &name, const QString &path)
Definition FileBrowser.cpp:1177
FileType
Definition FileBrowser.h:250
QString fullName(QString path=QString{}) const override
Definition FileBrowser.h:275
QString extension()
Definition FileBrowser.cpp:1311
static QString defaultFilters()
Definition FileBrowser.cpp:1324
FileHandling m_handling
Definition FileBrowser.h:306
bool isTrack() const
Definition FileBrowser.h:290
FileHandling
Definition FileBrowser.h:262
@ LoadAsPreset
Definition FileBrowser.h:265
@ LoadByPlugin
Definition FileBrowser.h:266
FileType type() const
Definition FileBrowser.h:280
void initPixmaps()
Definition FileBrowser.cpp:1196
QString m_path
Definition FileBrowser.h:304
void determineFileType()
Definition FileBrowser.cpp:1237
Definition FileSearchJob.h:37
SideBarWidget(const QString &_title, const QPixmap &_icon, QWidget *_parent)
Definition SideBarWidget.cpp:38
const QString & title() const
Definition SideBarWidget.h:50
auto getIconPixmap(std::string_view name, int width, int height, const char *const *xpm) -> QPixmap
Return an image for the icon pixmap cache.
Definition embed.cpp:107
Definition AudioPortAudio.cpp:209
Definition RemotePluginBase.cpp:34
QString filename
Definition HydrogenImport.cpp:42