2010-11-06 23:04:47 +01:00
///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
// Copyright (C) 2004-2010 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// http://www.gnu.org/licenses/gpl-2.0.txt
///////////////////////////////////////////////////////////////////////////////
# include "Model_MetaInfo.h"
# include "Genres.h"
# include <QMessageBox>
# include <QInputDialog>
2010-11-20 19:16:04 +01:00
# include <QFileInfo>
2010-11-06 23:04:47 +01:00
2010-11-10 19:44:51 +01:00
# define MODEL_ROW_COUNT 12
# define CHECK1(STR) (STR.isEmpty() ? (m_offset ? "(Not Specified)" : "(Unknown)") : STR)
# define CHECK2(VAL) ((VAL > 0) ? QString::number(VAL) : (m_offset ? "(Not Specified)" : "(Unknown)"))
2010-11-06 23:04:47 +01:00
# define CHECK3(STR) (STR.isEmpty() ? Qt::darkGray : QVariant())
# define CHECK4(VAL) ((VAL == 0) ? Qt::darkGray : QVariant())
2010-12-10 22:57:48 +01:00
# define EXPAND(STR) QString(STR).leftJustified(96, ' ')
2010-11-06 23:04:47 +01:00
////////////////////////////////////////////////////////////
// Constructor & Destructor
////////////////////////////////////////////////////////////
2010-11-10 19:44:51 +01:00
MetaInfoModel : : MetaInfoModel ( AudioFileModel * file , unsigned int offset )
2010-11-06 23:04:47 +01:00
{
2010-11-10 19:44:51 +01:00
if ( offset > = MODEL_ROW_COUNT )
{
throw " Offset is out of range! " ;
}
2010-11-06 23:04:47 +01:00
m_audioFile = file ;
2010-11-10 19:44:51 +01:00
m_offset = offset ;
2010-11-06 23:04:47 +01:00
}
MetaInfoModel : : ~ MetaInfoModel ( void )
{
}
////////////////////////////////////////////////////////////
// Public Functions
////////////////////////////////////////////////////////////
int MetaInfoModel : : columnCount ( const QModelIndex & parent ) const
{
return 2 ;
}
int MetaInfoModel : : rowCount ( const QModelIndex & parent ) const
{
2010-11-10 19:44:51 +01:00
return MODEL_ROW_COUNT - m_offset ;
2010-11-06 23:04:47 +01:00
}
QVariant MetaInfoModel : : data ( const QModelIndex & index , int role ) const
{
if ( role = = Qt : : DisplayRole )
{
2010-11-10 19:44:51 +01:00
switch ( index . row ( ) + m_offset )
2010-11-06 23:04:47 +01:00
{
case 0 :
return ( ! index . column ( ) ) ? " Full Path " : CHECK1 ( m_audioFile - > filePath ( ) ) ;
break ;
case 1 :
return ( ! index . column ( ) ) ? " Format " : CHECK1 ( m_audioFile - > formatAudioBaseInfo ( ) ) ;
break ;
case 2 :
return ( ! index . column ( ) ) ? " Container " : CHECK1 ( m_audioFile - > formatContainerInfo ( ) ) ;
break ;
case 3 :
return ( ! index . column ( ) ) ? " Compression " : CHECK1 ( m_audioFile - > formatAudioCompressInfo ( ) ) ;
break ;
case 4 :
return ( ! index . column ( ) ) ? " Duration " : CHECK1 ( m_audioFile - > fileDurationInfo ( ) ) ;
break ;
case 5 :
return ( ! index . column ( ) ) ? " Title " : CHECK1 ( m_audioFile - > fileName ( ) ) ;
break ;
case 6 :
return ( ! index . column ( ) ) ? " Artist " : CHECK1 ( m_audioFile - > fileArtist ( ) ) ;
break ;
case 7 :
return ( ! index . column ( ) ) ? " Album " : CHECK1 ( m_audioFile - > fileAlbum ( ) ) ;
break ;
case 8 :
return ( ! index . column ( ) ) ? " Genre " : CHECK1 ( m_audioFile - > fileGenre ( ) ) ;
break ;
case 9 :
return ( ! index . column ( ) ) ? " Year " : CHECK2 ( m_audioFile - > fileYear ( ) ) ;
break ;
case 10 :
2010-11-10 19:44:51 +01:00
return ( ! index . column ( ) ) ? " Position " : ( ( m_audioFile - > filePosition ( ) = = UINT_MAX ) ? " Generate from list position " : CHECK2 ( m_audioFile - > filePosition ( ) ) ) ;
2010-11-06 23:04:47 +01:00
break ;
case 11 :
return ( ! index . column ( ) ) ? " Comment " : CHECK1 ( m_audioFile - > fileComment ( ) ) ;
break ;
default :
return QVariant ( ) ;
break ;
}
}
else if ( role = = Qt : : DecorationRole & & index . column ( ) = = 0 )
{
2010-11-10 19:44:51 +01:00
switch ( index . row ( ) + m_offset )
2010-11-06 23:04:47 +01:00
{
case 0 :
return QIcon ( " :/icons/folder_page.png " ) ;
break ;
case 1 :
return QIcon ( " :/icons/sound.png " ) ;
break ;
case 2 :
return QIcon ( " :/icons/package.png " ) ;
break ;
case 3 :
return QIcon ( " :/icons/compress.png " ) ;
break ;
case 4 :
return QIcon ( " :/icons/clock_play.png " ) ;
break ;
case 5 :
return QIcon ( " :/icons/music.png " ) ;
break ;
case 6 :
return QIcon ( " :/icons/user.png " ) ;
break ;
case 7 :
return QIcon ( " :/icons/cd.png " ) ;
break ;
case 8 :
return QIcon ( " :/icons/star.png " ) ;
break ;
case 9 :
return QIcon ( " :/icons/date.png " ) ;
break ;
case 10 :
return QIcon ( " :/icons/timeline_marker.png " ) ;
break ;
case 11 :
return QIcon ( " :/icons/comment.png " ) ;
break ;
default :
return QVariant ( ) ;
break ;
}
}
else if ( role = = Qt : : TextColorRole & & index . column ( ) = = 1 )
{
2010-11-10 19:44:51 +01:00
switch ( index . row ( ) + m_offset )
2010-11-06 23:04:47 +01:00
{
case 0 :
return CHECK3 ( m_audioFile - > filePath ( ) ) ;
break ;
case 1 :
return CHECK3 ( m_audioFile - > formatAudioBaseInfo ( ) ) ;
break ;
case 2 :
return CHECK3 ( m_audioFile - > formatContainerInfo ( ) ) ;
break ;
case 3 :
return CHECK3 ( m_audioFile - > formatAudioCompressInfo ( ) ) ;
break ;
case 4 :
return CHECK4 ( m_audioFile - > fileDurationInfo ( ) ) ;
break ;
case 5 :
return CHECK3 ( m_audioFile - > fileName ( ) ) ;
break ;
case 6 :
return CHECK3 ( m_audioFile - > fileArtist ( ) ) ;
break ;
case 7 :
return CHECK3 ( m_audioFile - > fileAlbum ( ) ) ;
break ;
case 8 :
return CHECK3 ( m_audioFile - > fileGenre ( ) ) ;
break ;
case 9 :
return CHECK4 ( m_audioFile - > fileYear ( ) ) ;
break ;
case 10 :
return CHECK4 ( m_audioFile - > filePosition ( ) ) ;
break ;
case 11 :
return CHECK3 ( m_audioFile - > fileComment ( ) ) ;
break ;
default :
return QVariant ( ) ;
break ;
}
}
else
{
return QVariant ( ) ;
}
}
QVariant MetaInfoModel : : headerData ( int section , Qt : : Orientation orientation , int role ) const
{
if ( role = = Qt : : DisplayRole )
{
if ( orientation = = Qt : : Horizontal )
{
switch ( section )
{
case 0 :
return QVariant ( " Property " ) ;
break ;
case 1 :
return QVariant ( " Value " ) ;
break ;
default :
return QVariant ( ) ;
break ;
}
}
else
{
return QVariant ( ) ;
}
}
else
{
return QVariant ( ) ;
}
}
void MetaInfoModel : : editItem ( const QModelIndex & index , QWidget * parent )
{
bool ok = false ;
int val = - 1 ;
QStringList generes ( " (Unspecified) " ) ;
QString temp ;
2010-11-10 19:44:51 +01:00
switch ( index . row ( ) + m_offset )
2010-11-06 23:04:47 +01:00
{
case 5 :
2010-12-10 22:57:48 +01:00
temp = QInputDialog : : getText ( parent , " Edit Title " , EXPAND ( " Please enter the title for this file: " ) , QLineEdit : : Normal , m_audioFile - > fileName ( ) , & ok ) . simplified ( ) ;
2010-11-06 23:04:47 +01:00
if ( ok )
{
2010-11-20 19:16:04 +01:00
if ( temp . isEmpty ( ) )
{
QMessageBox : : warning ( parent , " Edit Title " , " The title must not be empty. Generating title from file name! " ) ;
temp = QFileInfo ( m_audioFile - > filePath ( ) ) . completeBaseName ( ) . replace ( " _ " , " " ) . simplified ( ) ;
int index = temp . lastIndexOf ( " - " ) ;
if ( index > = 0 ) temp = temp . mid ( index + 3 ) . trimmed ( ) ;
}
2010-11-06 23:04:47 +01:00
beginResetModel ( ) ;
m_audioFile - > setFileName ( temp . isEmpty ( ) ? QString ( ) : temp ) ;
endResetModel ( ) ;
}
break ;
case 6 :
2010-12-10 22:57:48 +01:00
temp = QInputDialog : : getText ( parent , " Edit Artist " , EXPAND ( " Please enter the artist for this file: " ) , QLineEdit : : Normal , m_audioFile - > fileArtist ( ) , & ok ) . simplified ( ) ;
2010-11-06 23:04:47 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFileArtist ( temp . isEmpty ( ) ? QString ( ) : temp ) ;
endResetModel ( ) ;
}
break ;
case 7 :
2010-12-10 22:57:48 +01:00
temp = QInputDialog : : getText ( parent , " Edit Album " , EXPAND ( " Please enter the album for this file: " ) , QLineEdit : : Normal , m_audioFile - > fileAlbum ( ) , & ok ) . simplified ( ) ;
2010-11-06 23:04:47 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFileAlbum ( temp . isEmpty ( ) ? QString ( ) : temp ) ;
endResetModel ( ) ;
}
break ;
case 8 :
for ( int i = 0 ; g_lamexp_generes [ i ] ; i + + ) generes < < g_lamexp_generes [ i ] ;
2010-12-10 22:57:48 +01:00
temp = QInputDialog : : getItem ( parent , " Edit Genre " , EXPAND ( " Please enter the genre for this file: " ) , generes , ( m_audioFile - > fileGenre ( ) . isEmpty ( ) ? 1 : generes . indexOf ( m_audioFile - > fileGenre ( ) ) ) , false , & ok ) ;
2010-11-06 23:04:47 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFileGenre ( ( temp . isEmpty ( ) | | ! temp . compare ( generes . at ( 0 ) , Qt : : CaseInsensitive ) ) ? QString ( ) : temp ) ;
endResetModel ( ) ;
}
break ;
case 9 :
2010-12-10 22:57:48 +01:00
val = QInputDialog : : getInt ( parent , " Edit Year " , EXPAND ( " Please enter the year for this file: " ) , ( m_audioFile - > fileYear ( ) ? m_audioFile - > fileYear ( ) : 1900 ) , 0 , 2100 , 1 , & ok ) ;
2010-11-06 23:04:47 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFileYear ( val ) ;
endResetModel ( ) ;
}
break ;
case 10 :
2010-11-10 19:44:51 +01:00
if ( ! m_offset )
2010-11-06 23:04:47 +01:00
{
2010-12-10 22:57:48 +01:00
val = QInputDialog : : getInt ( parent , " Edit Position " , EXPAND ( " Please enter the position (track no.) for this file: " ) , ( m_audioFile - > filePosition ( ) ? m_audioFile - > filePosition ( ) : 1 ) , 0 , 99 , 1 , & ok ) ;
2010-11-10 19:44:51 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFilePosition ( val ) ;
endResetModel ( ) ;
}
}
else
{
QStringList options ;
options < < " Unspecified (copy from source file) " ;
options < < " Generate from list position " ;
2010-12-10 22:57:48 +01:00
temp = QInputDialog : : getItem ( parent , " Edit Position " , EXPAND ( " Please enter the position (track no.) for this file: " ) , options , ( ( m_audioFile - > filePosition ( ) = = UINT_MAX ) ? 1 : 0 ) , false , & ok ) ;
2010-11-10 19:44:51 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFilePosition ( ( options . indexOf ( temp ) = = 1 ) ? UINT_MAX : 0 ) ;
endResetModel ( ) ;
}
2010-11-06 23:04:47 +01:00
}
break ;
case 11 :
2010-12-10 22:57:48 +01:00
temp = QInputDialog : : getText ( parent , " Edit Comment " , EXPAND ( " Please enter the comment for this file: " ) , QLineEdit : : Normal , ( m_audioFile - > fileComment ( ) . isEmpty ( ) ? " Encoded with LameXP " : m_audioFile - > fileComment ( ) ) , & ok ) . simplified ( ) ;
2010-11-06 23:04:47 +01:00
if ( ok )
{
beginResetModel ( ) ;
m_audioFile - > setFileComment ( temp . isEmpty ( ) ? QString ( ) : temp ) ;
endResetModel ( ) ;
}
break ;
default :
QMessageBox : : warning ( parent , " Not editable " , " Sorry, this property of the source file cannot be edited! " ) ;
break ;
}
}
2010-11-10 19:44:51 +01:00
void MetaInfoModel : : clearData ( void )
{
beginResetModel ( ) ;
m_audioFile - > setFilePath ( QString ( ) ) ;
m_audioFile - > setFileName ( QString ( ) ) ;
m_audioFile - > setFileArtist ( QString ( ) ) ;
m_audioFile - > setFileAlbum ( QString ( ) ) ;
m_audioFile - > setFileGenre ( QString ( ) ) ;
m_audioFile - > setFileComment ( " Encoded with LameXP " ) ;
m_audioFile - > setFileYear ( 0 ) ;
m_audioFile - > setFilePosition ( UINT_MAX ) ;
m_audioFile - > setFileDuration ( 0 ) ;
m_audioFile - > setFormatContainerType ( QString ( ) ) ;
m_audioFile - > setFormatContainerProfile ( QString ( ) ) ;
m_audioFile - > setFormatAudioType ( QString ( ) ) ;
m_audioFile - > setFormatAudioProfile ( QString ( ) ) ;
m_audioFile - > setFormatAudioVersion ( QString ( ) ) ;
m_audioFile - > setFormatAudioSamplerate ( 0 ) ;
m_audioFile - > setFormatAudioChannels ( 0 ) ;
m_audioFile - > setFormatAudioBitdepth ( 0 ) ;
endResetModel ( ) ;
}
2010-11-06 23:04:47 +01:00
Qt : : ItemFlags MetaInfoModel : : flags ( const QModelIndex & index ) const
{
return QAbstractTableModel : : flags ( index ) ;
}