52 setWindowTitle( tr(
"Export midi" ) );
54 exportTypeCombo->addItem( tr(
"SMF1 single: export all instruments to a single track") );
55 exportTypeCombo->addItem( tr(
"SMF1 multi: export each instrument to separate track") );
56 exportTypeCombo->addItem( tr(
"SMF0: export all events to one track") );
69 m_pPreferences->setMidiExportMode( exportTypeCombo->currentIndex() );
72 QString sFilename = exportNameTxt->text();
73 QFileInfo info( sFilename );
74 QDir dir = info.absoluteDir();
75 if ( !dir.exists() ) {
86 QString sDefaultFilename =
m_pHydrogen->getSong()->getFilename();
88 if( sDefaultFilename.isEmpty() ){
89 sDefaultFilename =
m_pHydrogen->getSong()->getName();
92 QFileInfo qDefaultFile( sDefaultFilename );
93 sDefaultFilename = qDefaultFile.fileName();
96 sDefaultFilename.replace(
'*',
"_" );
99 return sDefaultFilename;
111 QDir qd = QDir( sDirPath );
115 exportNameTxt->setText( sFullPath );
118 exportTypeCombo->setCurrentIndex(
m_pPreferences->getMidiExportMode() );
131 fd.setFileMode( QFileDialog::AnyFile );
132 fd.setNameFilter( tr(
"Midi file (*%1)").arg(
m_sExtension ) );
133 fd.setDirectory( sPath );
134 fd.setWindowTitle( tr(
"Export MIDI file" ) );
135 fd.setAcceptMode( QFileDialog::AcceptSave );
137 QString sDefaultFilename = exportNameTxt->text();
138 fd.selectFile( sDefaultFilename );
141 if ( fd.exec() == QDialog::Accepted ) {
143 sFilename = fd.selectedFiles().first();
146 if ( sFilename.isEmpty() ) {
154 exportNameTxt->setText( sFilename );
160 QString filename = exportNameTxt->text();
161 QFileInfo file( filename );
162 QDir dir = file.dir();
163 if( !dir.exists() ) {
164 QMessageBox::warning(
166 tr(
"Directory %1 does not exist").arg( dir.absolutePath() ),
185 std::shared_ptr<Song> pSong =
m_pHydrogen->getSong();
187 QString sFilename = exportNameTxt->text();
188 QFileInfo qFile( sFilename );
191 QMessageBox::warning(
this,
"Hydrogen",
192 pCommonStrings->getFileDialogMissingWritePermissions(),
198 int res = QMessageBox::information(
this,
"Hydrogen", tr(
"The file %1 exists. \nOverwrite the existing file?").arg(sFilename), QMessageBox::Yes | QMessageBox::No );
199 if ( res == QMessageBox::No ) {
210 }
else if ( exportTypeCombo->currentIndex() ==
EXPORT_SMF0 ){
214 assert( pSmfWriter );
216 pSmfWriter->
save( sFilename, pSong );
229 QString filename = exportNameTxt->text();
230 if ( !filename.isEmpty() ) {
231 okBtn->setEnabled(
true );
234 okBtn->setEnabled(
false );
static QString sLastFilename
H2Core::Preferences * m_pPreferences
QString createDefaultFilename()
void on_browseBtn_clicked()
void on_exportNameTxt_textChanged(const QString &text)
void on_closeBtn_clicked()
void restoreSettingsFromPreferences()
ExportMidiDialog(QWidget *parent)
void saveSettingsToPreferences()
H2Core::Hydrogen * m_pHydrogen
Custom file dialog checking whether the user has write access to the selected folder before allowing ...
static bool dir_writable(const QString &path, bool silent=false)
returns true if the given path is a writable regular directory
static QString usr_data_path()
returns user data path
static const QString songs_ext
Manager for User Preferences File (singleton)
void setLastExportMidiDirectory(QString sPath)
static Preferences * get_instance()
Returns a pointer to the current Preferences singleton stored in __instance.
QString getLastExportMidiDirectory() const
void save(const QString &sFilename, std::shared_ptr< Song > pSong)
static HydrogenApp * get_instance()
Returns the instance of HydrogenApp class.
std::shared_ptr< CommonStrings > getCommonStrings()