summaryrefslogtreecommitdiffstats
path: root/src/replaygainscanner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/replaygainscanner.cpp')
-rwxr-xr-xsrc/replaygainscanner.cpp233
1 files changed, 233 insertions, 0 deletions
diff --git a/src/replaygainscanner.cpp b/src/replaygainscanner.cpp
new file mode 100755
index 0000000..9eb0bcd
--- /dev/null
+++ b/src/replaygainscanner.cpp
@@ -0,0 +1,233 @@
+
+#include "replaygainscanner.h"
+#include "logger.h"
+#include "combobutton.h"
+#include "config.h"
+#include "dirdialog.h"
+
+#include <qlayout.h>
+#include <qstringlist.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qtooltip.h>
+
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kfiledialog.h>
+#include <kpushbutton.h>
+#include <kprogress.h>
+
+// FIXME file name encoding !!!
+
+
+ReplayGainScanner::ReplayGainScanner( TagEngine* _tagEngine, Config* _config, Logger* _logger, QWidget *parent, const char *name, bool modal, WFlags f )
+ : KDialog( parent, name, modal, f )
+{
+ tagEngine = _tagEngine;
+ config = _config;
+ logger = _logger;
+
+ // create an icon loader object for loading icons
+ KIconLoader* iconLoader = new KIconLoader();
+
+ setCaption( i18n("Replay Gain Tool") );
+ resize( 600, 400 );
+ setIcon( iconLoader->loadIcon("soundkonverter_replaygain",KIcon::Small) );
+
+ QGridLayout* grid = new QGridLayout( this, 4, 1, 11, 6 );
+
+ QHBoxLayout* filterBox = new QHBoxLayout();
+ grid->addLayout( filterBox, 0, 0 );
+
+ cAdd = new ComboButton( this, "cAdd" );
+ cAdd->insertItem( iconLoader->loadIcon("folder",KIcon::Small),i18n("Add Folder ...") );
+ cAdd->insertItem( iconLoader->loadIcon("sound",KIcon::Small),i18n("Add Files ...") );
+ filterBox->addWidget( cAdd );
+ connect( cAdd, SIGNAL(clicked(int)),
+ this, SLOT(addClicked(int))
+ );
+
+ filterBox->addStretch();
+
+ cForce = new QCheckBox( i18n("Force recalculation"), this, "cForce" );
+ QToolTip::add( cForce, i18n("Recalculate Replay Gain tag for files that already have a Replay Gain tag set.") );
+ filterBox->addWidget( cForce );
+
+ /*QLabel *lFilter=new QLabel(i18n("Show:"),this,"lFilter");
+ filterBox->addWidget(lFilter);
+
+ cFilter=new QComboBox(this,"cFilter");
+ cFilter->insertItem(i18n("All"));
+ cFilter->insertItem(i18n("With Replay Gain"));
+ cFilter->insertItem(i18n("Without Replay Gain"));
+ cFilter->insertItem(i18n("Unknown"));
+ filterBox->addWidget(cFilter);*/
+
+ lList = new ReplayGainFileList( tagEngine, config, logger, this, "lList" );
+ grid->addWidget( lList, 1, 0 );
+ connect( this, SIGNAL(addFile(const QString&)),
+ lList, SLOT(addFile(const QString&))
+ );
+ connect( this, SIGNAL(addDir(const QString&,const QStringList&,bool)),
+ lList, SLOT(addDir(const QString&,const QStringList&,bool))
+ );
+ connect( this, SIGNAL(calcAllReplayGain(bool)),
+ lList, SLOT(calcAllReplayGain(bool))
+ );
+ connect( this, SIGNAL(removeAllReplayGain()),
+ lList, SLOT(removeAllReplayGain())
+ );
+ connect( this, SIGNAL(cancelProcess()),
+ lList, SLOT(cancelProcess())
+ );
+ connect( lList, SIGNAL(processStarted()),
+ this, SLOT(processStarted())
+ );
+ connect( lList, SIGNAL(processStopped()),
+ this, SLOT(processStopped())
+ );
+ connect( lList, SIGNAL(updateProgress(int,int)),
+ this, SLOT(updateProgress(int,int))
+ );
+
+ QHBoxLayout* progressBox = new QHBoxLayout();
+ grid->addLayout( progressBox, 2, 0 );
+
+ pProgressBar = new KProgress( this, "pProgressBar" );
+ progressBox->addWidget( pProgressBar );
+
+ QHBoxLayout* buttonBox = new QHBoxLayout();
+ grid->addLayout( buttonBox, 3, 0 );
+
+ pTagVisible = new KPushButton( iconLoader->loadIcon("apply",KIcon::Small), i18n("Tag untagged"), this, "pTagVisible" );
+ QToolTip::add( pTagVisible, i18n("Calculate Replay Gain tag for all files in the file list without Replay Gain tag.") );
+ buttonBox->addWidget( pTagVisible );
+ connect( pTagVisible, SIGNAL(clicked()),
+ this, SLOT(calcReplayGainClicked())
+ );
+
+ pRemoveTag = new KPushButton( iconLoader->loadIcon("cancel",KIcon::Small), i18n("Untag tagged"), this, "pRemoveTag" );
+ QToolTip::add( pRemoveTag, i18n("Remove the Replay Gain tag from all files in the file list.") );
+ buttonBox->addWidget( pRemoveTag );
+ connect( pRemoveTag, SIGNAL(clicked()),
+ this, SLOT(removeReplayGainClicked())
+ );
+
+ pCancel = new KPushButton( iconLoader->loadIcon("cancel",KIcon::Small),i18n("Cancel"), this, "pCancel" );
+ pCancel->hide();
+ buttonBox->addWidget( pCancel );
+ connect( pCancel, SIGNAL(clicked()),
+ this, SLOT(cancelClicked())
+ );
+
+ buttonBox->addStretch();
+
+ pOk = new KPushButton( iconLoader->loadIcon("exit",KIcon::Small), i18n("Close"), this, "pOk" );
+ pOk->setFocus();
+ buttonBox->addWidget( pOk );
+ connect( pOk, SIGNAL(clicked()),
+ this, SLOT(accept())
+ );
+
+ // delete the icon loader object
+ delete iconLoader;
+}
+
+ReplayGainScanner::~ReplayGainScanner()
+{}
+
+void ReplayGainScanner::addClicked( int index )
+{
+ if( index == 1 ) {
+ showFileDialog();
+ }
+ else {
+ showDirDialog();
+ }
+}
+
+void ReplayGainScanner::showFileDialog()
+{
+ KFileDialog* dialog = new KFileDialog( ":file_open", config->replayGainFilter(), this, i18n("Choose files!"), true );
+ dialog->setMode ( KFile::Files | KFile::ExistingOnly );
+ if( dialog->exec() == KDialog::Accepted ) {
+ QStringList urls = dialog->selectedURLs().toStringList();
+ for( QStringList::Iterator it = urls.begin(); it != urls.end(); ++it ) {
+ emit addFile( *it );
+ }
+ }
+}
+
+void ReplayGainScanner::showDirDialog()
+{
+// QString directory = KFileDialog::getExistingDirectory( ":file_open", this, i18n("Choose a directory!") );
+// if( directory != NULL )
+// {
+// emit addDir( directory );
+// }
+
+ DirDialog *dialog = new DirDialog( config, DirDialog::ReplayGain, this, "DirDialog" );
+
+ Q_CHECK_PTR( dialog );
+
+ if( dialog->exec() ) {
+ emit addDir( dialog->directory, dialog->selectedFileTypes, dialog->recursive );
+ }
+
+ delete dialog;
+}
+
+void ReplayGainScanner::addFiles( QStringList files )
+{
+ for( QStringList::Iterator it = files.begin(); it != files.end(); ++it ) {
+ emit addFile( *it );
+ }
+}
+
+void ReplayGainScanner::calcReplayGainClicked()
+{
+ emit calcAllReplayGain( cForce->isChecked() );
+}
+
+void ReplayGainScanner::removeReplayGainClicked()
+{
+ emit removeAllReplayGain();
+}
+
+void ReplayGainScanner::cancelClicked()
+{
+ emit cancelProcess();
+}
+
+void ReplayGainScanner::processStarted()
+{
+ pTagVisible->hide();
+ pRemoveTag->hide();
+ pCancel->show();
+}
+
+void ReplayGainScanner::processStopped()
+{
+ pTagVisible->show();
+ pRemoveTag->show();
+ pCancel->hide();
+ pProgressBar->setProgress( 100 );
+ pProgressBar->setTotalSteps( 100 );
+ setCaption( i18n("Finished") + " - " + i18n("Replay Gain Tool") );
+}
+
+void ReplayGainScanner::updateProgress( int progress, int totalSteps )
+{
+/* pProgressBar->setProgress( int(processedTime) + percent * int(timeCount) / 100 );
+ pProgressBar->setTotalSteps( int(time) );*/
+ pProgressBar->setProgress( progress );
+ pProgressBar->setTotalSteps( totalSteps );
+ float fPercent;
+ if( pProgressBar->totalSteps() > 0 ) fPercent = pProgressBar->progress() * 100 / pProgressBar->totalSteps();
+ else fPercent = 0;
+
+ QString percent;
+ percent.sprintf( "%i%%", (int)fPercent );
+ setCaption( percent + " - " + i18n("Replay Gain Tool") );
+}
+