Keyboard shortcuts to preview/add sounds from sidebar (#5427)

- Extract file item preview start and end into new methods `previewFileItem` and `stopPreview`.
- Add event handlers:
  - `keyPressEvent` to allow auto preview (on up/down arrow navigation), manual preview (space), and send to editors (enter)
  - `keyReleaseEvent` to end previews when preview key is released
  - `hideEvent` to end previews when switching sidebar tab or hiding sidebar
- Functions that operate on a `FileItem` now take it as an argument instead of using a member variable
- `getContextActions` provides menu items for sending clips to the song editor and BB editor with minimal duplicate code
- Some formatting changes in affected code
- Replace many instances of `NULL` with `nullptr`
This commit is contained in:
Spekular
2020-10-03 21:31:13 +02:00
committed by GitHub
parent e5f1007ebb
commit 109a7c4735
2 changed files with 313 additions and 180 deletions

View File

@@ -63,9 +63,9 @@ public:
private slots:
void reloadTree( void );
void expandItems( QTreeWidgetItem * item=NULL, QList<QString> expandedDirs = QList<QString>() );
void expandItems( QTreeWidgetItem * item=nullptr, QList<QString> expandedDirs = QList<QString>() );
// call with item=NULL to filter the entire tree
bool filterItems( const QString & filter, QTreeWidgetItem * item=NULL );
bool filterItems( const QString & filter, QTreeWidgetItem * item=nullptr );
void giveFocusToFilter();
private:
@@ -105,29 +105,38 @@ protected:
void mousePressEvent( QMouseEvent * me ) override;
void mouseMoveEvent( QMouseEvent * me ) override;
void mouseReleaseEvent( QMouseEvent * me ) override;
void keyPressEvent( QKeyEvent * ke ) override;
void keyReleaseEvent( QKeyEvent * ke ) override;
void hideEvent( QHideEvent * he ) override;
private:
//! Start a preview of a file item
void previewFileItem(FileItem* file);
//! If a preview is playing, stop it.
void stopPreview();
void handleFile( FileItem * fi, InstrumentTrack * it );
void openInNewInstrumentTrack( TrackContainer* tc );
void openInNewInstrumentTrack( TrackContainer* tc, FileItem* item );
bool m_mousePressed;
QPoint m_pressPos;
//! This should only be accessed or modified when m_pphMutex is held
PlayHandle* m_previewPlayHandle;
QMutex m_pphMutex;
FileItem * m_contextMenuItem;
QList<QAction*> getContextActions(FileItem* item, bool songEditor);
private slots:
void activateListItem( QTreeWidgetItem * item, int column );
void openInNewInstrumentTrackBBE( void );
void openInNewInstrumentTrackSE( void );
void sendToActiveInstrumentTrack( void );
void openInNewInstrumentTrack( FileItem* item, bool songEditor );
bool openInNewSampleTrack( FileItem* item );
void sendToActiveInstrumentTrack( FileItem* item );
void updateDirectory( QTreeWidgetItem * item );
void openContainingFolder();
void openContainingFolder( FileItem* item );
} ;
@@ -234,6 +243,11 @@ public:
return( m_handling );
}
inline bool isTrack( void ) const
{
return m_handling == LoadAsPreset || m_handling == LoadByPlugin;
}
QString extension( void );
static QString extension( const QString & file );

View File

@@ -50,6 +50,7 @@
#include "PluginFactory.h"
#include "PresetPreviewPlayHandle.h"
#include "SamplePlayHandle.h"
#include "SampleTrack.h"
#include "Song.h"
#include "StringPairDrag.h"
#include "TextFloat.h"
@@ -173,7 +174,7 @@ void FileBrowser::reloadTree( void )
{
addItems( *it );
}
expandItems(NULL, expandedDirs);
expandItems(nullptr, expandedDirs);
m_filterEdit->setText( text );
filterItems( text );
}
@@ -240,7 +241,7 @@ void FileBrowser::addItems(const QString & path )
{
Directory * d = dynamic_cast<Directory *>(
m_fileBrowserTreeWidget->topLevelItem( i ) );
if( d == NULL || cur_file < d->text( 0 ) )
if( d == nullptr || cur_file < d->text( 0 ) )
{
// insert before item, we're done
Directory *dd = new Directory( cur_file, path,
@@ -300,13 +301,12 @@ void FileBrowser::addItems(const QString & path )
void FileBrowser::keyPressEvent(QKeyEvent * ke )
{
if( ke->key() == Qt::Key_F5 )
{
reloadTree();
}
else
{
ke->ignore();
switch( ke->key() ){
case Qt::Key_F5:
reloadTree();
break;
default:
ke->ignore();
}
}
@@ -321,9 +321,8 @@ FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) :
QTreeWidget( parent ),
m_mousePressed( false ),
m_pressPos(),
m_previewPlayHandle( NULL ),
m_pphMutex( QMutex::Recursive ),
m_contextMenuItem( NULL )
m_previewPlayHandle( nullptr ),
m_pphMutex( QMutex::Recursive )
{
setColumnCount( 1 );
headerItem()->setHidden( true );
@@ -338,6 +337,9 @@ FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) :
}
QList<QString> FileBrowserTreeWidget::expandedDirs( QTreeWidgetItem * item ) const
{
int numChildren = item ? item->childCount() : topLevelItemCount();
@@ -362,59 +364,157 @@ QList<QString> FileBrowserTreeWidget::expandedDirs( QTreeWidgetItem * item ) con
return dirs;
}
void FileBrowserTreeWidget::contextMenuEvent(QContextMenuEvent * e )
void FileBrowserTreeWidget::keyPressEvent(QKeyEvent * ke )
{
FileItem * f = dynamic_cast<FileItem *>(itemAt(e->pos()));
if (f == nullptr)
// Shorter names for some commonly used properties of the event
const auto key = ke->key();
const bool vertical = (key == Qt::Key_Up || key == Qt::Key_Down);
const bool horizontal = (key == Qt::Key_Left || key == Qt::Key_Right);
const bool insert = (key == Qt::Key_Enter || key == Qt::Key_Return);
const bool preview = (key == Qt::Key_Space);
// First of all, forward all keypresses
QTreeWidget::keyPressEvent(ke);
// Then, ignore all autorepeats (they would spam new tracks or previews)
if (ke->isAutoRepeat()) { return; }
// We should stop any running previews before we do anything new
else if (vertical || horizontal || preview || insert) { stopPreview(); }
// Try to get the currently selected item as a FileItem
FileItem * file = dynamic_cast<FileItem *>(currentItem());
// If it's null (folder, separator, etc.), there's nothing left for us to do
if (file == nullptr) { return; }
// When moving to a new sound, preview it. Skip presets, they can play forever
if (vertical && file->type() == FileItem::SampleFile)
{
return;
previewFileItem(file);
}
if (f->handling() == FileItem::LoadAsPreset || f->handling() == FileItem::LoadByPlugin)
// When enter is pressed, add the selected item...
if (insert)
{
// Set the member to the current FileItem so that it is available during the
// execution of the slots of the context menu we are about to create and execute.
m_contextMenuItem = f;
// ...to the song editor by default, or to the BB editor if ctrl is held
bool songEditor = !(ke->modifiers() & Qt::ControlModifier);
// If shift is held, we send the item to a new sample track...
bool sampleTrack = ke->modifiers() & Qt::ShiftModifier;
// ...but only in the song editor. So, ctrl+shift enter does nothing
if (sampleTrack && songEditor){ openInNewSampleTrack(file); }
// Otherwise we send the item as a new instrument track
else if (!sampleTrack){ openInNewInstrumentTrack(file, songEditor); }
}
QMenu contextMenu(this);
// When space is pressed, start a preview of the selected item
if (preview) { previewFileItem(file); }
}
contextMenu.addAction(tr("Send to active instrument-track"),
this,
SLOT(sendToActiveInstrumentTrack()));
contextMenu.addAction(tr("Open in new instrument-track/Song Editor"),
this,
SLOT(openInNewInstrumentTrackSE()));
contextMenu.addAction(tr("Open in new instrument-track/B+B Editor"),
this,
SLOT(openInNewInstrumentTrackBBE()));
void FileBrowserTreeWidget::keyReleaseEvent(QKeyEvent* ke)
{
// Cancel previews when the space key is released
if (ke->key() == Qt::Key_Space && !ke->isAutoRepeat()) { stopPreview(); }
}
void FileBrowserTreeWidget::hideEvent(QHideEvent* he)
{
// Cancel previews when the user switches tabs or hides the sidebar
stopPreview();
QTreeWidget::hideEvent(he);
}
void FileBrowserTreeWidget::contextMenuEvent(QContextMenuEvent * e )
{
FileItem * file = dynamic_cast<FileItem *>( itemAt( e->pos() ) );
if( file != nullptr && file->isTrack() )
{
QMenu contextMenu( this );
contextMenu.addAction(
tr( "Send to active instrument-track" ),
[=]{ sendToActiveInstrumentTrack(file); }
);
contextMenu.addSeparator();
contextMenu.addAction(QIcon(embed::getIconPixmap("folder")),
tr("Open containing folder"),
this,
SLOT(openContainingFolder()));
contextMenu.addAction(
QIcon(embed::getIconPixmap("folder")),
tr("Open containing folder"),
[=]{ openContainingFolder(file); }
);
contextMenu.exec(e->globalPos());
QAction* songEditorHeader = new QAction( tr("Song Editor"), nullptr );
songEditorHeader->setDisabled(true);
contextMenu.addAction( songEditorHeader );
contextMenu.addActions( getContextActions(file, true) );
// The context menu has been executed so we can reset this member back to nullptr.
m_contextMenuItem = nullptr;
QAction* bbEditorHeader = new QAction( tr("BB Editor"), nullptr );
bbEditorHeader->setDisabled(true);
contextMenu.addAction( bbEditorHeader );
contextMenu.addActions( getContextActions(file, false) );
// We should only show the menu if it contains items
if (!contextMenu.isEmpty()) { contextMenu.exec( e->globalPos() ); }
}
}
QList<QAction*> FileBrowserTreeWidget::getContextActions(FileItem* file, bool songEditor)
{
QList<QAction*> result = QList<QAction*>();
const bool fileIsSample = file->type() == FileItem::SampleFile;
QString instrumentAction = fileIsSample ?
tr("Send to new AudioFileProcessor instance") :
tr("Send to new instrument track");
QString shortcutMod = songEditor ? "" : UI_CTRL_KEY + QString(" + ");
QAction* toInstrument = new QAction(
instrumentAction + tr(" (%2Enter)").arg(shortcutMod),
nullptr
);
connect(toInstrument, &QAction::triggered,
[=]{ openInNewInstrumentTrack(file, songEditor); });
result.append(toInstrument);
if (songEditor && fileIsSample)
{
QAction* toSampleTrack = new QAction(
tr("Send to new sample track (Shift + Enter)"),
nullptr
);
connect(toSampleTrack, &QAction::triggered,
[=]{ openInNewSampleTrack(file); });
result.append(toSampleTrack);
}
return result;
}
void FileBrowserTreeWidget::mousePressEvent(QMouseEvent * me )
{
QTreeWidget::mousePressEvent( me );
if( me->button() != Qt::LeftButton )
{
return;
}
// Forward the event
QTreeWidget::mousePressEvent(me);
// QTreeWidget handles right clicks for us, so we only care about left clicks
if(me->button() != Qt::LeftButton) { return; }
QTreeWidgetItem * i = itemAt( me->pos() );
if ( i )
QTreeWidgetItem * i = itemAt(me->pos());
if (i)
{
// TODO: Restrict to visible selection
// if ( _me->x() > header()->cellPos( header()->mapToActual( 0 ) )
@@ -428,68 +528,84 @@ void FileBrowserTreeWidget::mousePressEvent(QMouseEvent * me )
// }
}
FileItem * f = dynamic_cast<FileItem *>( i );
if( f != NULL )
{
m_pphMutex.lock();
if( m_previewPlayHandle != NULL )
{
Engine::mixer()->removePlayHandle(
m_previewPlayHandle );
m_previewPlayHandle = NULL;
}
FileItem * f = dynamic_cast<FileItem *>(i);
if(f != nullptr) { previewFileItem(f); }
}
// in special case of sample-files we do not care about
// handling() rather than directly creating a SamplePlayHandle
if( f->type() == FileItem::SampleFile )
void FileBrowserTreeWidget::previewFileItem(FileItem* file)
{ // TODO: We should do this work outside the event thread
// Lock the preview mutex
QMutexLocker previewLocker(&m_pphMutex);
// If something is already playing, stop it before we continue
stopPreview();
PlayHandle* newPPH = nullptr;
const QString fileName = file->fullName();
const QString ext = file->extension();
// In special case of sample-files we do not care about
// handling() rather than directly creating a SamplePlayHandle
if (file->type() == FileItem::SampleFile)
{
TextFloat * tf = TextFloat::displayMessage(
tr("Loading sample"),
tr("Please wait, loading sample for preview..."),
embed::getIconPixmap("sample_file", 24, 24), 0);
// TODO: this can be removed once we do this outside the event thread
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
SamplePlayHandle* s = new SamplePlayHandle(fileName);
s->setDoneMayReturnTrue(false);
newPPH = s;
delete tf;
}
else if (
(ext == "xiz" || ext == "sf2" || ext == "sf3" ||
ext == "gig" || ext == "pat")
&& !pluginFactory->pluginSupportingExtension(ext).isNull())
{
const bool isPlugin = file->handling() == FileItem::LoadByPlugin;
newPPH = new PresetPreviewPlayHandle(fileName, isPlugin);
}
else if (file->type() != FileItem::VstPluginFile && file->isTrack())
{
DataFile dataFile(fileName);
if (dataFile.validate(ext))
{
TextFloat * tf = TextFloat::displayMessage(
tr( "Loading sample" ),
tr( "Please wait, loading sample for "
"preview..." ),
embed::getIconPixmap( "sample_file",
24, 24 ), 0 );
qApp->processEvents(
QEventLoop::ExcludeUserInputEvents );
SamplePlayHandle * s = new SamplePlayHandle(
f->fullName() );
s->setDoneMayReturnTrue( false );
m_previewPlayHandle = s;
delete tf;
const bool isPlugin = file->handling() == FileItem::LoadByPlugin;
newPPH = new PresetPreviewPlayHandle(fileName, isPlugin, &dataFile);
}
else if ( ( f->extension ()== "xiz" || f->extension() == "sf2" || f->extension() == "sf3" || f->extension() == "gig" || f->extension() == "pat"
#ifdef LMMS_HAVE_LV2
|| f->extension() == "lv2"
#endif
) &&
! pluginFactory->pluginSupportingExtension(f->extension()).info.isNull() )
else
{
m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin );
QMessageBox::warning(0, tr ("Error"),
tr("%1 does not appear to be a valid %2 file")
.arg(fileName, ext),
QMessageBox::Ok, QMessageBox::NoButton);
}
else if( f->type() != FileItem::VstPluginFile &&
( f->handling() == FileItem::LoadAsPreset ||
f->handling() == FileItem::LoadByPlugin ) )
}
if (newPPH != nullptr)
{
if (Engine::mixer()->addPlayHandle(newPPH))
{
DataFile dataFile( f->fullName() );
if( !dataFile.validate( f->extension() ) )
{
QMessageBox::warning( 0, tr ( "Error" ),
tr( "%1 does not appear to be a valid %2 file" ).arg( f->fullName(), f->extension() ),
QMessageBox::Ok, QMessageBox::NoButton );
m_pphMutex.unlock();
return;
}
m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin, &dataFile );
m_previewPlayHandle = newPPH;
}
if( m_previewPlayHandle != NULL )
{
if( !Engine::mixer()->addPlayHandle(
m_previewPlayHandle ) )
{
m_previewPlayHandle = NULL;
}
}
m_pphMutex.unlock();
else { m_previewPlayHandle = nullptr; }
}
}
void FileBrowserTreeWidget::stopPreview()
{
QMutexLocker previewLocker(&m_pphMutex);
if (m_previewPlayHandle != nullptr)
{
Engine::mixer()->removePlayHandle(m_previewPlayHandle);
m_previewPlayHandle = nullptr;
}
}
@@ -503,10 +619,10 @@ void FileBrowserTreeWidget::mouseMoveEvent( QMouseEvent * me )
QApplication::startDragDistance() )
{
// make sure any playback is stopped
mouseReleaseEvent( NULL );
mouseReleaseEvent( nullptr );
FileItem * f = dynamic_cast<FileItem *>( itemAt( m_pressPos ) );
if( f != NULL )
if( f != nullptr )
{
switch( f->type() )
{
@@ -556,36 +672,30 @@ void FileBrowserTreeWidget::mouseReleaseEvent(QMouseEvent * me )
{
m_mousePressed = false;
m_pphMutex.lock();
if( m_previewPlayHandle != NULL )
QMutexLocker previewLocker(&m_pphMutex);
if (m_previewPlayHandle != nullptr)
{
// if there're samples shorter than 3 seconds, we don't
// If less than 3 seconds remain of the sample, we don't
// stop them if the user releases mouse-button...
if( m_previewPlayHandle->type() == PlayHandle::TypeSamplePlayHandle )
if (m_previewPlayHandle->type() == PlayHandle::TypeSamplePlayHandle)
{
SamplePlayHandle * s = dynamic_cast<SamplePlayHandle *>(
m_previewPlayHandle );
if( s && s->totalFrames() - s->framesDone() <=
static_cast<f_cnt_t>( Engine::mixer()->
processingSampleRate() * 3 ) )
SamplePlayHandle* s = dynamic_cast<SamplePlayHandle*>(m_previewPlayHandle);
auto second = static_cast<f_cnt_t>(Engine::mixer()->processingSampleRate());
if (s && s->totalFrames() - s->framesDone() <= second * 3)
{
s->setDoneMayReturnTrue( true );
m_previewPlayHandle = NULL;
m_pphMutex.unlock();
return;
s->setDoneMayReturnTrue(true);
}
else { stopPreview(); }
}
Engine::mixer()->removePlayHandle( m_previewPlayHandle );
m_previewPlayHandle = NULL;
else { stopPreview(); }
}
m_pphMutex.unlock();
}
void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it )
void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it)
{
Engine::mixer()->requestChangeInModel();
switch( f->handling() )
@@ -601,7 +711,7 @@ void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it )
{
const QString e = f->extension();
Instrument * i = it->instrument();
if( i == NULL ||
if( i == nullptr ||
!i->descriptor()->supportsFileType( e ) )
{
PluginFactory::PluginInfoAndKey piakn =
@@ -641,7 +751,7 @@ void FileBrowserTreeWidget::activateListItem(QTreeWidgetItem * item,
int column )
{
FileItem * f = dynamic_cast<FileItem *>( item );
if( f == NULL )
if( f == nullptr )
{
return;
}
@@ -649,7 +759,7 @@ void FileBrowserTreeWidget::activateListItem(QTreeWidgetItem * item,
if( f->handling() == FileItem::LoadAsProject ||
f->handling() == FileItem::ImportAsProject )
{
handleFile( f, NULL );
handleFile( f, nullptr );
}
else if( f->handling() != FileItem::NotSupported )
{
@@ -663,53 +773,66 @@ void FileBrowserTreeWidget::activateListItem(QTreeWidgetItem * item,
void FileBrowserTreeWidget::openInNewInstrumentTrack( TrackContainer* tc )
void FileBrowserTreeWidget::openInNewInstrumentTrack(TrackContainer* tc, FileItem* item)
{
if( m_contextMenuItem->handling() == FileItem::LoadAsPreset ||
m_contextMenuItem->handling() == FileItem::LoadByPlugin )
if(item->isTrack())
{
InstrumentTrack * it = dynamic_cast<InstrumentTrack *>(
Track::create( Track::InstrumentTrack, tc ) );
handleFile( m_contextMenuItem, it );
Track::create(Track::InstrumentTrack, tc));
handleFile(item, it);
}
}
void FileBrowserTreeWidget::openInNewInstrumentTrackBBE( void )
void FileBrowserTreeWidget::openInNewInstrumentTrack(FileItem* item, bool songEditor)
{
openInNewInstrumentTrack( Engine::getBBTrackContainer() );
// Get the correct TrackContainer. Ternary doesn't compile here
TrackContainer* tc = Engine::getSong();
if (!songEditor) { tc = Engine::getBBTrackContainer(); }
openInNewInstrumentTrack(tc, item);
}
void FileBrowserTreeWidget::openInNewInstrumentTrackSE( void )
bool FileBrowserTreeWidget::openInNewSampleTrack(FileItem* item)
{
openInNewInstrumentTrack( Engine::getSong() );
// Can't add non-samples to a sample track
if (item->type() != FileItem::SampleFile) { return false; }
// Create a new sample track for this sample
SampleTrack* sampleTrack = static_cast<SampleTrack*>(
Track::create(Track::SampleTrack, Engine::getSong()));
// Add the sample clip to the track
Engine::mixer()->requestChangeInModel();
SampleTCO* clip = static_cast<SampleTCO*>(sampleTrack->createTCO(0));
clip->setSampleFile(item->fullName());
Engine::mixer()->doneChangeInModel();
return true;
}
void FileBrowserTreeWidget::openContainingFolder()
{
if (m_contextMenuItem)
{
// Delegate to QDesktopServices::openUrl with the directory of the selected file. Please note that
// this will only open the directory but not select the file as this is much more complicated due
// to different implementations that are needed for different platforms (Linux/Windows/MacOS).
// Using QDesktopServices::openUrl seems to be the most simple cross platform way which uses
// functionality that's already available in Qt.
QFileInfo fileInfo(m_contextMenuItem->fullName());
QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.dir().path()));
}
void FileBrowserTreeWidget::openContainingFolder(FileItem* item)
{
// Delegate to QDesktopServices::openUrl with the directory of the selected file. Please note that
// this will only open the directory but not select the file as this is much more complicated due
// to different implementations that are needed for different platforms (Linux/Windows/MacOS).
// Using QDesktopServices::openUrl seems to be the most simple cross platform way which uses
// functionality that's already available in Qt.
QFileInfo fileInfo(item->fullName());
QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.dir().path()));
}
void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void )
void FileBrowserTreeWidget::sendToActiveInstrumentTrack( FileItem* item )
{
// get all windows opened in the workspace
QList<QMdiSubWindow*> pl =
@@ -724,9 +847,9 @@ void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void )
InstrumentTrackWindow * itw =
dynamic_cast<InstrumentTrackWindow *>(
w.previous()->widget() );
if( itw != NULL && itw->isHidden() == false )
if( itw != nullptr && itw->isHidden() == false )
{
handleFile( m_contextMenuItem, itw->model() );
handleFile( item, itw->model() );
break;
}
}
@@ -738,7 +861,7 @@ void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void )
void FileBrowserTreeWidget::updateDirectory(QTreeWidgetItem * item )
{
Directory * dir = dynamic_cast<Directory *>( item );
if( dir != NULL )
if( dir != nullptr )
{
dir->update();
}
@@ -749,9 +872,9 @@ void FileBrowserTreeWidget::updateDirectory(QTreeWidgetItem * item )
QPixmap * Directory::s_folderPixmap = NULL;
QPixmap * Directory::s_folderOpenedPixmap = NULL;
QPixmap * Directory::s_folderLockedPixmap = NULL;
QPixmap * Directory::s_folderPixmap = nullptr;
QPixmap * Directory::s_folderOpenedPixmap = nullptr;
QPixmap * Directory::s_folderLockedPixmap = nullptr;
Directory::Directory(const QString & filename, const QString & path,
@@ -780,19 +903,19 @@ Directory::Directory(const QString & filename, const QString & path,
void Directory::initPixmaps( void )
{
if( s_folderPixmap == NULL )
if( s_folderPixmap == nullptr )
{
s_folderPixmap = new QPixmap(
embed::getIconPixmap( "folder" ) );
}
if( s_folderOpenedPixmap == NULL )
if( s_folderOpenedPixmap == nullptr )
{
s_folderOpenedPixmap = new QPixmap(
embed::getIconPixmap( "folder_opened" ) );
}
if( s_folderLockedPixmap == NULL )
if( s_folderLockedPixmap == nullptr )
{
s_folderLockedPixmap = new QPixmap(
embed::getIconPixmap( "folder_locked" ) );
@@ -870,7 +993,7 @@ bool Directory::addItems(const QString & path )
{
Directory * d = dynamic_cast<Directory *>(
child( i ) );
if( d == NULL || cur_file < d->text( 0 ) )
if( d == nullptr || cur_file < d->text( 0 ) )
{
// insert before item, we're done
insertChild( i, new Directory( cur_file,
@@ -928,13 +1051,13 @@ bool Directory::addItems(const QString & path )
QPixmap * FileItem::s_projectFilePixmap = NULL;
QPixmap * FileItem::s_presetFilePixmap = NULL;
QPixmap * FileItem::s_sampleFilePixmap = NULL;
QPixmap * FileItem::s_soundfontFilePixmap = NULL;
QPixmap * FileItem::s_vstPluginFilePixmap = NULL;
QPixmap * FileItem::s_midiFilePixmap = NULL;
QPixmap * FileItem::s_unknownFilePixmap = NULL;
QPixmap * FileItem::s_projectFilePixmap = nullptr;
QPixmap * FileItem::s_presetFilePixmap = nullptr;
QPixmap * FileItem::s_sampleFilePixmap = nullptr;
QPixmap * FileItem::s_soundfontFilePixmap = nullptr;
QPixmap * FileItem::s_vstPluginFilePixmap = nullptr;
QPixmap * FileItem::s_midiFilePixmap = nullptr;
QPixmap * FileItem::s_unknownFilePixmap = nullptr;
FileItem::FileItem(QTreeWidget * parent, const QString & name,
@@ -962,43 +1085,43 @@ FileItem::FileItem(const QString & name, const QString & path ) :
void FileItem::initPixmaps( void )
{
if( s_projectFilePixmap == NULL )
if( s_projectFilePixmap == nullptr )
{
s_projectFilePixmap = new QPixmap( embed::getIconPixmap(
"project_file", 16, 16 ) );
}
if( s_presetFilePixmap == NULL )
if( s_presetFilePixmap == nullptr )
{
s_presetFilePixmap = new QPixmap( embed::getIconPixmap(
"preset_file", 16, 16 ) );
}
if( s_sampleFilePixmap == NULL )
if( s_sampleFilePixmap == nullptr )
{
s_sampleFilePixmap = new QPixmap( embed::getIconPixmap(
"sample_file", 16, 16 ) );
}
if ( s_soundfontFilePixmap == NULL )
if ( s_soundfontFilePixmap == nullptr )
{
s_soundfontFilePixmap = new QPixmap( embed::getIconPixmap(
"soundfont_file", 16, 16 ) );
}
if ( s_vstPluginFilePixmap == NULL )
if ( s_vstPluginFilePixmap == nullptr )
{
s_vstPluginFilePixmap = new QPixmap( embed::getIconPixmap(
"vst_plugin_file", 16, 16 ) );
}
if( s_midiFilePixmap == NULL )
if( s_midiFilePixmap == nullptr )
{
s_midiFilePixmap = new QPixmap( embed::getIconPixmap(
"midi_file", 16, 16 ) );
}
if( s_unknownFilePixmap == NULL )
if( s_unknownFilePixmap == nullptr )
{
s_unknownFilePixmap = new QPixmap( embed::getIconPixmap(
"unknown_file" ) );
@@ -1111,7 +1234,3 @@ QString FileItem::extension(const QString & file )
{
return QFileInfo( file ).suffix().toLower();
}