2010-11-06 23:04:47 +01:00
///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
2011-01-01 17:04:25 +01:00
// Copyright (C) 2004-2011 LoRd_MuldeR <MuldeR2@GMX.de>
2010-11-06 23:04:47 +01:00
//
// 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 "Dialog_MainWindow.h"
//LameXP includes
# include "Global.h"
# include "Resource.h"
# include "Dialog_WorkingBanner.h"
# include "Dialog_MetaInfo.h"
2010-11-11 19:37:16 +01:00
# include "Dialog_About.h"
2010-11-27 19:41:58 +01:00
# include "Dialog_Update.h"
2010-12-22 01:01:01 +01:00
# include "Dialog_DropBox.h"
2010-11-06 23:04:47 +01:00
# include "Thread_FileAnalyzer.h"
2010-11-08 19:29:36 +01:00
# include "Thread_MessageHandler.h"
2010-11-10 19:44:51 +01:00
# include "Model_MetaInfo.h"
2010-11-12 19:02:01 +01:00
# include "Model_Settings.h"
2010-11-19 21:11:54 +01:00
# include "Model_FileList.h"
2010-11-25 01:23:48 +01:00
# include "Model_FileSystem.h"
2010-12-05 23:11:03 +01:00
# include "WinSevenTaskbar.h"
2010-12-20 22:13:01 +01:00
# include "Registry_Decoder.h"
2011-01-27 22:10:51 +01:00
# include "ShellIntegration.h"
2010-11-06 23:04:47 +01:00
//Qt includes
# include <QMessageBox>
# include <QTimer>
# include <QDesktopWidget>
# include <QDate>
# include <QFileDialog>
# include <QInputDialog>
# include <QFileSystemModel>
# include <QDesktopServices>
# include <QUrl>
2010-11-08 00:24:54 +01:00
# include <QPlastiqueStyle>
# include <QCleanlooksStyle>
# include <QWindowsVistaStyle>
# include <QWindowsStyle>
2010-11-11 19:37:16 +01:00
# include <QSysInfo>
2010-11-12 23:31:04 +01:00
# include <QDragEnterEvent>
# include <QWindowsMime>
2010-11-15 21:07:58 +01:00
# include <QProcess>
2010-11-21 21:51:41 +01:00
# include <QUuid>
2010-11-25 20:41:59 +01:00
# include <QProcessEnvironment>
2010-12-12 13:44:11 +01:00
# include <QCryptographicHash>
2010-12-28 03:57:48 +01:00
# include <QTranslator>
# include <QResource>
2011-01-24 00:04:07 +01:00
# include <QScrollBar>
2010-11-06 23:04:47 +01:00
//Win32 includes
# include <Windows.h>
2010-11-10 19:44:51 +01:00
//Helper macros
2010-11-20 22:14:10 +01:00
# define ABORT_IF_BUSY if(m_banner->isVisible() || m_delayedFileTimer->isActive()) { MessageBeep(MB_ICONEXCLAMATION); return; }
# define SET_TEXT_COLOR(WIDGET,COLOR) { QPalette _palette = WIDGET->palette(); _palette.setColor(QPalette::WindowText, COLOR); WIDGET->setPalette(_palette); }
# define SET_FONT_BOLD(WIDGET,BOLD) { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); }
2010-12-22 22:59:00 +01:00
# define FLASH_WINDOW(WND) { FLASHWINFO flashInfo; memset(&flashInfo, 0, sizeof(FLASHWINFO)); flashInfo.cbSize = sizeof(FLASHWINFO); flashInfo.dwFlags = FLASHW_ALL; flashInfo.uCount = 12; flashInfo.dwTimeout = 125; flashInfo.hwnd = WND->winId(); FlashWindowEx(&flashInfo); }
2010-11-11 22:58:02 +01:00
# define LINK(URL) QString("<a href=\"%1\">%2< / a>").arg(URL).arg(URL)
2011-01-02 21:46:36 +01:00
# define TEMP_HIDE_DROPBOX(CMD) { bool __dropBoxVisible = m_dropBox->isVisible(); if(__dropBoxVisible) m_dropBox->hide(); CMD; if(__dropBoxVisible) m_dropBox->show(); }
2010-11-11 19:37:16 +01:00
2010-11-06 23:04:47 +01:00
////////////////////////////////////////////////////////////
// Constructor
////////////////////////////////////////////////////////////
2010-11-19 21:11:54 +01:00
MainWindow : : MainWindow ( FileListModel * fileListModel , AudioFileModel * metaInfo , SettingsModel * settingsModel , QWidget * parent )
:
QMainWindow ( parent ) ,
m_fileListModel ( fileListModel ) ,
m_metaData ( metaInfo ) ,
m_settings ( settingsModel ) ,
2010-11-20 22:14:10 +01:00
m_accepted ( false ) ,
m_firstTimeShown ( true )
2010-11-06 23:04:47 +01:00
{
//Init the dialog, from the .ui file
setupUi ( this ) ;
2010-11-15 04:42:06 +01:00
setWindowFlags ( windowFlags ( ) ^ Qt : : WindowMaximizeButtonHint ) ;
2010-11-06 23:04:47 +01:00
//Register meta types
qRegisterMetaType < AudioFileModel > ( " AudioFileModel " ) ;
//Enabled main buttons
connect ( buttonAbout , SIGNAL ( clicked ( ) ) , this , SLOT ( aboutButtonClicked ( ) ) ) ;
connect ( buttonStart , SIGNAL ( clicked ( ) ) , this , SLOT ( encodeButtonClicked ( ) ) ) ;
2010-11-19 21:11:54 +01:00
connect ( buttonQuit , SIGNAL ( clicked ( ) ) , this , SLOT ( closeButtonClicked ( ) ) ) ;
2010-11-06 23:04:47 +01:00
//Setup tab widget
tabWidget - > setCurrentIndex ( 0 ) ;
connect ( tabWidget , SIGNAL ( currentChanged ( int ) ) , this , SLOT ( tabPageChanged ( int ) ) ) ;
//Setup "Source" tab
sourceFileView - > setModel ( m_fileListModel ) ;
sourceFileView - > verticalHeader ( ) - > setResizeMode ( QHeaderView : : ResizeToContents ) ;
sourceFileView - > horizontalHeader ( ) - > setResizeMode ( QHeaderView : : ResizeToContents ) ;
2010-11-25 20:41:59 +01:00
sourceFileView - > setContextMenuPolicy ( Qt : : CustomContextMenu ) ;
2010-11-20 02:14:22 +01:00
m_dropNoteLabel = new QLabel ( sourceFileView ) ;
m_dropNoteLabel - > setAlignment ( Qt : : AlignHCenter | Qt : : AlignVCenter ) ;
2010-11-20 22:14:10 +01:00
SET_FONT_BOLD ( m_dropNoteLabel , true ) ;
SET_TEXT_COLOR ( m_dropNoteLabel , Qt : : darkGray ) ;
2010-11-25 20:41:59 +01:00
m_sourceFilesContextMenu = new QMenu ( ) ;
2010-12-28 21:26:16 +01:00
m_showDetailsContextAction = m_sourceFilesContextMenu - > addAction ( QIcon ( " :/icons/zoom.png " ) , " N/A " ) ;
m_previewContextAction = m_sourceFilesContextMenu - > addAction ( QIcon ( " :/icons/sound.png " ) , " N/A " ) ;
m_findFileContextAction = m_sourceFilesContextMenu - > addAction ( QIcon ( " :/icons/folder_go.png " ) , " N/A " ) ;
SET_FONT_BOLD ( m_showDetailsContextAction , true ) ;
2010-11-06 23:04:47 +01:00
connect ( buttonAddFiles , SIGNAL ( clicked ( ) ) , this , SLOT ( addFilesButtonClicked ( ) ) ) ;
connect ( buttonRemoveFile , SIGNAL ( clicked ( ) ) , this , SLOT ( removeFileButtonClicked ( ) ) ) ;
connect ( buttonClearFiles , SIGNAL ( clicked ( ) ) , this , SLOT ( clearFilesButtonClicked ( ) ) ) ;
connect ( buttonFileUp , SIGNAL ( clicked ( ) ) , this , SLOT ( fileUpButtonClicked ( ) ) ) ;
connect ( buttonFileDown , SIGNAL ( clicked ( ) ) , this , SLOT ( fileDownButtonClicked ( ) ) ) ;
2010-11-10 19:44:51 +01:00
connect ( buttonShowDetails , SIGNAL ( clicked ( ) ) , this , SLOT ( showDetailsButtonClicked ( ) ) ) ;
2010-11-21 21:51:41 +01:00
connect ( m_fileListModel , SIGNAL ( rowsInserted ( QModelIndex , int , int ) ) , this , SLOT ( sourceModelChanged ( ) ) ) ;
connect ( m_fileListModel , SIGNAL ( rowsRemoved ( QModelIndex , int , int ) ) , this , SLOT ( sourceModelChanged ( ) ) ) ;
connect ( m_fileListModel , SIGNAL ( modelReset ( ) ) , this , SLOT ( sourceModelChanged ( ) ) ) ;
2010-11-25 20:41:59 +01:00
connect ( sourceFileView , SIGNAL ( customContextMenuRequested ( QPoint ) ) , this , SLOT ( sourceFilesContextMenu ( QPoint ) ) ) ;
2010-12-28 21:26:16 +01:00
connect ( m_showDetailsContextAction , SIGNAL ( triggered ( bool ) ) , this , SLOT ( showDetailsButtonClicked ( ) ) ) ;
connect ( m_previewContextAction , SIGNAL ( triggered ( bool ) ) , this , SLOT ( previewContextActionTriggered ( ) ) ) ;
connect ( m_findFileContextAction , SIGNAL ( triggered ( bool ) ) , this , SLOT ( findFileContextActionTriggered ( ) ) ) ;
2010-11-25 20:41:59 +01:00
2010-11-06 23:04:47 +01:00
//Setup "Output" tab
2010-11-25 01:23:48 +01:00
m_fileSystemModel = new QFileSystemModelEx ( ) ;
2010-11-06 23:04:47 +01:00
m_fileSystemModel - > setRootPath ( m_fileSystemModel - > rootPath ( ) ) ;
2010-11-24 21:00:59 +01:00
m_fileSystemModel - > installEventFilter ( this ) ;
2010-11-06 23:04:47 +01:00
outputFolderView - > setModel ( m_fileSystemModel ) ;
outputFolderView - > header ( ) - > setStretchLastSection ( true ) ;
outputFolderView - > header ( ) - > hideSection ( 1 ) ;
outputFolderView - > header ( ) - > hideSection ( 2 ) ;
outputFolderView - > header ( ) - > hideSection ( 3 ) ;
outputFolderView - > setHeaderHidden ( true ) ;
outputFolderView - > setAnimated ( true ) ;
2010-11-25 20:41:59 +01:00
outputFolderView - > setMouseTracking ( false ) ;
2010-12-05 23:11:03 +01:00
outputFolderView - > setContextMenuPolicy ( Qt : : CustomContextMenu ) ;
2010-11-21 21:51:41 +01:00
while ( saveToSourceFolderCheckBox - > isChecked ( ) ! = m_settings - > outputToSourceDir ( ) ) saveToSourceFolderCheckBox - > click ( ) ;
2010-12-14 01:25:13 +01:00
prependRelativePathCheckBox - > setChecked ( m_settings - > prependRelativeSourcePath ( ) ) ;
2010-11-06 23:04:47 +01:00
connect ( outputFolderView , SIGNAL ( clicked ( QModelIndex ) ) , this , SLOT ( outputFolderViewClicked ( QModelIndex ) ) ) ;
2010-11-25 20:41:59 +01:00
connect ( outputFolderView , SIGNAL ( activated ( QModelIndex ) ) , this , SLOT ( outputFolderViewClicked ( QModelIndex ) ) ) ;
2010-12-27 18:31:21 +01:00
connect ( outputFolderView , SIGNAL ( pressed ( QModelIndex ) ) , this , SLOT ( outputFolderViewClicked ( QModelIndex ) ) ) ;
connect ( outputFolderView , SIGNAL ( entered ( QModelIndex ) ) , this , SLOT ( outputFolderViewMoved ( QModelIndex ) ) ) ;
2010-11-20 02:14:22 +01:00
outputFolderView - > setCurrentIndex ( m_fileSystemModel - > index ( m_settings - > outputDir ( ) ) ) ;
2010-11-06 23:04:47 +01:00
outputFolderViewClicked ( outputFolderView - > currentIndex ( ) ) ;
connect ( buttonMakeFolder , SIGNAL ( clicked ( ) ) , this , SLOT ( makeFolderButtonClicked ( ) ) ) ;
connect ( buttonGotoHome , SIGNAL ( clicked ( ) ) , SLOT ( gotoHomeFolderButtonClicked ( ) ) ) ;
connect ( buttonGotoDesktop , SIGNAL ( clicked ( ) ) , this , SLOT ( gotoDesktopButtonClicked ( ) ) ) ;
connect ( buttonGotoMusic , SIGNAL ( clicked ( ) ) , this , SLOT ( gotoMusicFolderButtonClicked ( ) ) ) ;
2010-11-21 21:51:41 +01:00
connect ( saveToSourceFolderCheckBox , SIGNAL ( clicked ( ) ) , this , SLOT ( saveToSourceFolderChanged ( ) ) ) ;
2010-12-14 01:25:13 +01:00
connect ( prependRelativePathCheckBox , SIGNAL ( clicked ( ) ) , this , SLOT ( prependRelativePathChanged ( ) ) ) ;
2010-12-05 23:11:03 +01:00
m_outputFolderContextMenu = new QMenu ( ) ;
2010-12-28 21:26:16 +01:00
m_showFolderContextAction = m_outputFolderContextMenu - > addAction ( QIcon ( " :/icons/zoom.png " ) , " N/A " ) ;
2010-12-05 23:11:03 +01:00
connect ( outputFolderView , SIGNAL ( customContextMenuRequested ( QPoint ) ) , this , SLOT ( outputFolderContextMenu ( QPoint ) ) ) ;
2010-12-28 21:26:16 +01:00
connect ( m_showFolderContextAction , SIGNAL ( triggered ( bool ) ) , this , SLOT ( showFolderContextActionTriggered ( ) ) ) ;
2010-12-28 03:57:48 +01:00
outputFolderLabel - > installEventFilter ( this ) ;
2010-11-06 23:04:47 +01:00
2010-11-10 19:44:51 +01:00
//Setup "Meta Data" tab
m_metaInfoModel = new MetaInfoModel ( m_metaData , 6 ) ;
m_metaInfoModel - > clearData ( ) ;
2011-02-10 16:08:03 +01:00
m_metaInfoModel - > setData ( m_metaInfoModel - > index ( 4 , 1 ) , m_settings - > metaInfoPosition ( ) ) ;
2010-11-10 19:44:51 +01:00
metaDataView - > setModel ( m_metaInfoModel ) ;
metaDataView - > verticalHeader ( ) - > setResizeMode ( QHeaderView : : ResizeToContents ) ;
metaDataView - > verticalHeader ( ) - > hide ( ) ;
metaDataView - > horizontalHeader ( ) - > setResizeMode ( QHeaderView : : ResizeToContents ) ;
2010-11-20 19:16:04 +01:00
while ( writeMetaDataCheckBox - > isChecked ( ) ! = m_settings - > writeMetaTags ( ) ) writeMetaDataCheckBox - > click ( ) ;
2010-11-21 21:51:41 +01:00
generatePlaylistCheckBox - > setChecked ( m_settings - > createPlaylist ( ) ) ;
2010-11-10 19:44:51 +01:00
connect ( buttonEditMeta , SIGNAL ( clicked ( ) ) , this , SLOT ( editMetaButtonClicked ( ) ) ) ;
connect ( buttonClearMeta , SIGNAL ( clicked ( ) ) , this , SLOT ( clearMetaButtonClicked ( ) ) ) ;
2010-11-20 19:16:04 +01:00
connect ( writeMetaDataCheckBox , SIGNAL ( clicked ( ) ) , this , SLOT ( metaTagsEnabledChanged ( ) ) ) ;
2010-11-20 22:14:10 +01:00
connect ( generatePlaylistCheckBox , SIGNAL ( clicked ( ) ) , this , SLOT ( playlistEnabledChanged ( ) ) ) ;
2010-11-11 22:58:02 +01:00
//Setup "Compression" tab
2010-11-15 04:42:06 +01:00
m_encoderButtonGroup = new QButtonGroup ( this ) ;
m_encoderButtonGroup - > addButton ( radioButtonEncoderMP3 , SettingsModel : : MP3Encoder ) ;
m_encoderButtonGroup - > addButton ( radioButtonEncoderVorbis , SettingsModel : : VorbisEncoder ) ;
m_encoderButtonGroup - > addButton ( radioButtonEncoderAAC , SettingsModel : : AACEncoder ) ;
m_encoderButtonGroup - > addButton ( radioButtonEncoderFLAC , SettingsModel : : FLACEncoder ) ;
m_encoderButtonGroup - > addButton ( radioButtonEncoderPCM , SettingsModel : : PCMEncoder ) ;
m_modeButtonGroup = new QButtonGroup ( this ) ;
m_modeButtonGroup - > addButton ( radioButtonModeQuality , SettingsModel : : VBRMode ) ;
m_modeButtonGroup - > addButton ( radioButtonModeAverageBitrate , SettingsModel : : ABRMode ) ;
m_modeButtonGroup - > addButton ( radioButtonConstBitrate , SettingsModel : : CBRMode ) ;
radioButtonEncoderMP3 - > setChecked ( m_settings - > compressionEncoder ( ) = = SettingsModel : : MP3Encoder ) ;
radioButtonEncoderVorbis - > setChecked ( m_settings - > compressionEncoder ( ) = = SettingsModel : : VorbisEncoder ) ;
radioButtonEncoderAAC - > setChecked ( m_settings - > compressionEncoder ( ) = = SettingsModel : : AACEncoder ) ;
radioButtonEncoderFLAC - > setChecked ( m_settings - > compressionEncoder ( ) = = SettingsModel : : FLACEncoder ) ;
radioButtonEncoderPCM - > setChecked ( m_settings - > compressionEncoder ( ) = = SettingsModel : : PCMEncoder ) ;
radioButtonModeQuality - > setChecked ( m_settings - > compressionRCMode ( ) = = SettingsModel : : VBRMode ) ;
radioButtonModeAverageBitrate - > setChecked ( m_settings - > compressionRCMode ( ) = = SettingsModel : : ABRMode ) ;
radioButtonConstBitrate - > setChecked ( m_settings - > compressionRCMode ( ) = = SettingsModel : : CBRMode ) ;
sliderBitrate - > setValue ( m_settings - > compressionBitrate ( ) ) ;
connect ( m_encoderButtonGroup , SIGNAL ( buttonClicked ( int ) ) , this , SLOT ( updateEncoder ( int ) ) ) ;
connect ( m_modeButtonGroup , SIGNAL ( buttonClicked ( int ) ) , this , SLOT ( updateRCMode ( int ) ) ) ;
2010-11-11 22:58:02 +01:00
connect ( sliderBitrate , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( updateBitrate ( int ) ) ) ;
2010-11-15 04:42:06 +01:00
updateEncoder ( m_encoderButtonGroup - > checkedId ( ) ) ;
2010-11-11 22:58:02 +01:00
2011-01-21 19:14:11 +01:00
//Setup "Advanced Options" tab
sliderLameAlgoQuality - > setValue ( m_settings - > lameAlgoQuality ( ) ) ;
2011-02-25 00:22:18 +01:00
if ( m_settings - > maximumInstances ( ) > 0 ) sliderMaxInstances - > setValue ( m_settings - > maximumInstances ( ) ) ;
2011-01-21 21:41:50 +01:00
spinBoxBitrateManagementMin - > setValue ( m_settings - > bitrateManagementMinRate ( ) ) ;
spinBoxBitrateManagementMax - > setValue ( m_settings - > bitrateManagementMaxRate ( ) ) ;
2011-01-24 01:13:08 +01:00
spinBoxNormalizationFilter - > setValue ( static_cast < double > ( m_settings - > normalizationFilterMaxVolume ( ) ) / 100.0 ) ;
2011-01-26 20:16:46 +01:00
spinBoxToneAdjustBass - > setValue ( static_cast < double > ( m_settings - > toneAdjustBass ( ) ) / 100.0 ) ;
spinBoxToneAdjustTreble - > setValue ( static_cast < double > ( m_settings - > toneAdjustTreble ( ) ) / 100.0 ) ;
2011-01-22 22:19:20 +01:00
comboBoxMP3ChannelMode - > setCurrentIndex ( m_settings - > lameChannelMode ( ) ) ;
comboBoxSamplingRate - > setCurrentIndex ( m_settings - > samplingRate ( ) ) ;
comboBoxNeroAACProfile - > setCurrentIndex ( m_settings - > neroAACProfile ( ) ) ;
2011-01-21 21:41:50 +01:00
while ( checkBoxBitrateManagement - > isChecked ( ) ! = m_settings - > bitrateManagementEnabled ( ) ) checkBoxBitrateManagement - > click ( ) ;
2011-01-22 22:19:20 +01:00
while ( checkBoxNeroAAC2PassMode - > isChecked ( ) ! = m_settings - > neroAACEnable2Pass ( ) ) checkBoxNeroAAC2PassMode - > click ( ) ;
2011-01-24 01:13:08 +01:00
while ( checkBoxNormalizationFilter - > isChecked ( ) ! = m_settings - > normalizationFilterEnabled ( ) ) checkBoxNormalizationFilter - > click ( ) ;
2011-02-25 00:22:18 +01:00
while ( checkBoxAutoDetectInstances - > isChecked ( ) ! = ( m_settings - > maximumInstances ( ) < 1 ) ) checkBoxAutoDetectInstances - > click ( ) ;
2011-02-25 22:03:39 +01:00
while ( checkBoxUseSystemTempFolder - > isChecked ( ) = = m_settings - > customTempPathEnabled ( ) ) checkBoxUseSystemTempFolder - > click ( ) ;
2011-02-09 23:36:17 +01:00
lineEditCustomParamLAME - > setText ( m_settings - > customParametersLAME ( ) ) ;
lineEditCustomParamOggEnc - > setText ( m_settings - > customParametersOggEnc ( ) ) ;
lineEditCustomParamNeroAAC - > setText ( m_settings - > customParametersNeroAAC ( ) ) ;
lineEditCustomParamFLAC - > setText ( m_settings - > customParametersFLAC ( ) ) ;
2011-02-25 22:03:39 +01:00
lineEditCustomTempFolder - > setText ( QDir : : toNativeSeparators ( m_settings - > customTempPath ( ) ) ) ;
2011-01-21 19:14:11 +01:00
connect ( sliderLameAlgoQuality , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( updateLameAlgoQuality ( int ) ) ) ;
2011-01-21 21:41:50 +01:00
connect ( checkBoxBitrateManagement , SIGNAL ( clicked ( bool ) ) , this , SLOT ( bitrateManagementEnabledChanged ( bool ) ) ) ;
connect ( spinBoxBitrateManagementMin , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( bitrateManagementMinChanged ( int ) ) ) ;
connect ( spinBoxBitrateManagementMax , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( bitrateManagementMaxChanged ( int ) ) ) ;
2011-01-22 22:19:20 +01:00
connect ( comboBoxMP3ChannelMode , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( channelModeChanged ( int ) ) ) ;
connect ( comboBoxSamplingRate , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( samplingRateChanged ( int ) ) ) ;
connect ( checkBoxNeroAAC2PassMode , SIGNAL ( clicked ( bool ) ) , this , SLOT ( neroAAC2PassChanged ( bool ) ) ) ;
connect ( comboBoxNeroAACProfile , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( neroAACProfileChanged ( int ) ) ) ;
2011-01-24 01:13:08 +01:00
connect ( checkBoxNormalizationFilter , SIGNAL ( clicked ( bool ) ) , this , SLOT ( normalizationEnabledChanged ( bool ) ) ) ;
connect ( spinBoxNormalizationFilter , SIGNAL ( valueChanged ( double ) ) , this , SLOT ( normalizationMaxVolumeChanged ( double ) ) ) ;
2011-01-26 20:16:46 +01:00
connect ( spinBoxToneAdjustBass , SIGNAL ( valueChanged ( double ) ) , this , SLOT ( toneAdjustBassChanged ( double ) ) ) ;
connect ( spinBoxToneAdjustTreble , SIGNAL ( valueChanged ( double ) ) , this , SLOT ( toneAdjustTrebleChanged ( double ) ) ) ;
connect ( buttonToneAdjustReset , SIGNAL ( clicked ( ) ) , this , SLOT ( toneAdjustTrebleReset ( ) ) ) ;
2011-02-09 23:36:17 +01:00
connect ( lineEditCustomParamLAME , SIGNAL ( editingFinished ( ) ) , this , SLOT ( customParamsChanged ( ) ) ) ;
connect ( lineEditCustomParamOggEnc , SIGNAL ( editingFinished ( ) ) , this , SLOT ( customParamsChanged ( ) ) ) ;
connect ( lineEditCustomParamNeroAAC , SIGNAL ( editingFinished ( ) ) , this , SLOT ( customParamsChanged ( ) ) ) ;
connect ( lineEditCustomParamFLAC , SIGNAL ( editingFinished ( ) ) , this , SLOT ( customParamsChanged ( ) ) ) ;
2011-02-25 00:22:18 +01:00
connect ( sliderMaxInstances , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( updateMaximumInstances ( int ) ) ) ;
connect ( checkBoxAutoDetectInstances , SIGNAL ( clicked ( bool ) ) , this , SLOT ( autoDetectInstancesChanged ( bool ) ) ) ;
2011-02-25 22:03:39 +01:00
connect ( buttonBrowseCustomTempFolder , SIGNAL ( clicked ( ) ) , this , SLOT ( browseCustomTempFolderButtonClicked ( ) ) ) ;
connect ( lineEditCustomTempFolder , SIGNAL ( textChanged ( QString ) ) , this , SLOT ( customTempFolderChanged ( QString ) ) ) ;
connect ( checkBoxUseSystemTempFolder , SIGNAL ( clicked ( bool ) ) , this , SLOT ( useCustomTempFolderChanged ( bool ) ) ) ;
2011-01-23 23:03:44 +01:00
connect ( buttonResetAdvancedOptions , SIGNAL ( clicked ( ) ) , this , SLOT ( resetAdvancedOptionsButtonClicked ( ) ) ) ;
2011-01-21 19:14:11 +01:00
updateLameAlgoQuality ( sliderLameAlgoQuality - > value ( ) ) ;
2011-02-25 00:22:18 +01:00
updateMaximumInstances ( sliderMaxInstances - > value ( ) ) ;
2011-01-26 20:16:46 +01:00
toneAdjustTrebleChanged ( spinBoxToneAdjustTreble - > value ( ) ) ;
toneAdjustBassChanged ( spinBoxToneAdjustBass - > value ( ) ) ;
2011-02-09 23:36:17 +01:00
customParamsChanged ( ) ;
2011-01-21 19:14:11 +01:00
2010-11-06 23:04:47 +01:00
//Activate file menu actions
2011-03-23 23:19:31 +01:00
actionOpenFolder - > setData ( QVariant : : fromValue < bool > ( false ) ) ;
actionOpenFolderRecursively - > setData ( QVariant : : fromValue < bool > ( true ) ) ;
2010-11-06 23:04:47 +01:00
connect ( actionOpenFolder , SIGNAL ( triggered ( ) ) , this , SLOT ( openFolderActionActivated ( ) ) ) ;
2011-03-23 23:19:31 +01:00
connect ( actionOpenFolderRecursively , SIGNAL ( triggered ( ) ) , this , SLOT ( openFolderActionActivated ( ) ) ) ;
2010-11-06 23:04:47 +01:00
//Activate view menu actions
m_tabActionGroup = new QActionGroup ( this ) ;
m_tabActionGroup - > addAction ( actionSourceFiles ) ;
m_tabActionGroup - > addAction ( actionOutputDirectory ) ;
m_tabActionGroup - > addAction ( actionCompression ) ;
m_tabActionGroup - > addAction ( actionMetaData ) ;
m_tabActionGroup - > addAction ( actionAdvancedOptions ) ;
2011-01-03 22:24:58 +01:00
actionSourceFiles - > setData ( 0 ) ;
actionOutputDirectory - > setData ( 1 ) ;
actionMetaData - > setData ( 2 ) ;
actionCompression - > setData ( 3 ) ;
actionAdvancedOptions - > setData ( 4 ) ;
2010-11-06 23:04:47 +01:00
actionSourceFiles - > setChecked ( true ) ;
connect ( m_tabActionGroup , SIGNAL ( triggered ( QAction * ) ) , this , SLOT ( tabActionActivated ( QAction * ) ) ) ;
2010-11-08 00:24:54 +01:00
//Activate style menu actions
m_styleActionGroup = new QActionGroup ( this ) ;
m_styleActionGroup - > addAction ( actionStylePlastique ) ;
m_styleActionGroup - > addAction ( actionStyleCleanlooks ) ;
2010-11-08 21:47:35 +01:00
m_styleActionGroup - > addAction ( actionStyleWindowsVista ) ;
m_styleActionGroup - > addAction ( actionStyleWindowsXP ) ;
m_styleActionGroup - > addAction ( actionStyleWindowsClassic ) ;
2011-01-03 22:24:58 +01:00
actionStylePlastique - > setData ( 0 ) ;
actionStyleCleanlooks - > setData ( 1 ) ;
actionStyleWindowsVista - > setData ( 2 ) ;
actionStyleWindowsXP - > setData ( 3 ) ;
actionStyleWindowsClassic - > setData ( 4 ) ;
2010-11-08 00:24:54 +01:00
actionStylePlastique - > setChecked ( true ) ;
2011-01-02 20:47:26 +01:00
actionStyleWindowsXP - > setEnabled ( ( QSysInfo : : windowsVersion ( ) & QSysInfo : : WV_NT_based ) > = QSysInfo : : WV_XP & & lamexp_themes_enabled ( ) ) ;
actionStyleWindowsVista - > setEnabled ( ( QSysInfo : : windowsVersion ( ) & QSysInfo : : WV_NT_based ) > = QSysInfo : : WV_VISTA & & lamexp_themes_enabled ( ) ) ;
2010-11-08 00:24:54 +01:00
connect ( m_styleActionGroup , SIGNAL ( triggered ( QAction * ) ) , this , SLOT ( styleActionActivated ( QAction * ) ) ) ;
2010-11-12 21:02:14 +01:00
styleActionActivated ( NULL ) ;
2010-11-08 00:24:54 +01:00
2010-12-28 03:57:48 +01:00
//Populate the language menu
m_languageActionGroup = new QActionGroup ( this ) ;
2010-12-28 21:26:16 +01:00
QStringList translations = lamexp_query_translations ( ) ;
2010-12-30 16:12:21 +01:00
while ( ! translations . isEmpty ( ) )
2010-12-28 03:57:48 +01:00
{
2011-01-09 02:15:20 +01:00
QString langId = translations . takeFirst ( ) ;
2010-12-28 03:57:48 +01:00
QAction * currentLanguage = new QAction ( this ) ;
2010-12-30 16:12:21 +01:00
currentLanguage - > setData ( langId ) ;
currentLanguage - > setText ( lamexp_translation_name ( langId ) ) ;
currentLanguage - > setIcon ( QIcon ( QString ( " :/flags/%1.png " ) . arg ( langId ) ) ) ;
2010-12-28 03:57:48 +01:00
currentLanguage - > setCheckable ( true ) ;
m_languageActionGroup - > addAction ( currentLanguage ) ;
2011-01-06 00:53:52 +01:00
menuLanguage - > insertAction ( actionLoadTranslationFromFile , currentLanguage ) ;
2010-12-28 03:57:48 +01:00
}
2011-01-06 00:53:52 +01:00
menuLanguage - > insertSeparator ( actionLoadTranslationFromFile ) ;
connect ( actionLoadTranslationFromFile , SIGNAL ( triggered ( bool ) ) , this , SLOT ( languageFromFileActionActivated ( bool ) ) ) ;
connect ( m_languageActionGroup , SIGNAL ( triggered ( QAction * ) ) , this , SLOT ( languageActionActivated ( QAction * ) ) ) ;
2010-12-30 16:12:21 +01:00
2010-11-29 20:36:27 +01:00
//Activate tools menu actions
actionDisableUpdateReminder - > setChecked ( ! m_settings - > autoUpdateEnabled ( ) ) ;
actionDisableSounds - > setChecked ( ! m_settings - > soundsEnabled ( ) ) ;
2010-12-19 21:23:43 +01:00
actionDisableNeroAacNotifications - > setChecked ( ! m_settings - > neroAacNotificationsEnabled ( ) ) ;
actionDisableWmaDecoderNotifications - > setChecked ( ! m_settings - > wmaDecoderNotificationsEnabled ( ) ) ;
2011-01-29 00:40:29 +01:00
actionDisableShellIntegration - > setChecked ( ! m_settings - > shellIntegrationEnabled ( ) ) ;
2011-01-29 21:57:53 +01:00
actionDisableShellIntegration - > setDisabled ( lamexp_portable_mode ( ) & & actionDisableShellIntegration - > isChecked ( ) ) ;
2010-11-29 20:36:27 +01:00
connect ( actionDisableUpdateReminder , SIGNAL ( triggered ( bool ) ) , this , SLOT ( disableUpdateReminderActionTriggered ( bool ) ) ) ;
connect ( actionDisableSounds , SIGNAL ( triggered ( bool ) ) , this , SLOT ( disableSoundsActionTriggered ( bool ) ) ) ;
2010-12-12 01:49:07 +01:00
connect ( actionInstallWMADecoder , SIGNAL ( triggered ( bool ) ) , this , SLOT ( installWMADecoderActionTriggered ( bool ) ) ) ;
2010-12-19 21:23:43 +01:00
connect ( actionDisableNeroAacNotifications , SIGNAL ( triggered ( bool ) ) , this , SLOT ( disableNeroAacNotificationsActionTriggered ( bool ) ) ) ;
connect ( actionDisableWmaDecoderNotifications , SIGNAL ( triggered ( bool ) ) , this , SLOT ( disableWmaDecoderNotificationsActionTriggered ( bool ) ) ) ;
2011-01-29 00:40:29 +01:00
connect ( actionDisableShellIntegration , SIGNAL ( triggered ( bool ) ) , this , SLOT ( disableShellIntegrationActionTriggered ( bool ) ) ) ;
2010-12-22 01:01:01 +01:00
connect ( actionShowDropBoxWidget , SIGNAL ( triggered ( bool ) ) , this , SLOT ( showDropBoxWidgetActionTriggered ( bool ) ) ) ;
2010-11-29 20:36:27 +01:00
2010-11-06 23:04:47 +01:00
//Activate help menu actions
2011-03-20 14:28:27 +01:00
actionVisitHomepage - > setData ( QString : : fromLatin1 ( lamexp_website_url ( ) ) ) ;
actionVisitSupport - > setData ( QString : : fromLatin1 ( lamexp_support_url ( ) ) ) ;
2011-03-19 18:16:23 +01:00
actionDocumentFAQ - > setData ( QString ( " %1/FAQ.html " ) . arg ( QApplication : : applicationDirPath ( ) ) ) ;
actionDocumentChangelog - > setData ( QString ( " %1/Changelog.html " ) . arg ( QApplication : : applicationDirPath ( ) ) ) ;
actionDocumentTranslate - > setData ( QString ( " %1/Translate.html " ) . arg ( QApplication : : applicationDirPath ( ) ) ) ;
2010-11-06 23:04:47 +01:00
connect ( actionCheckUpdates , SIGNAL ( triggered ( ) ) , this , SLOT ( checkUpdatesActionActivated ( ) ) ) ;
connect ( actionVisitHomepage , SIGNAL ( triggered ( ) ) , this , SLOT ( visitHomepageActionActivated ( ) ) ) ;
2011-03-20 14:28:27 +01:00
connect ( actionVisitSupport , SIGNAL ( triggered ( ) ) , this , SLOT ( visitHomepageActionActivated ( ) ) ) ;
2011-03-19 18:16:23 +01:00
connect ( actionDocumentFAQ , SIGNAL ( triggered ( ) ) , this , SLOT ( documentActionActivated ( ) ) ) ;
connect ( actionDocumentChangelog , SIGNAL ( triggered ( ) ) , this , SLOT ( documentActionActivated ( ) ) ) ;
connect ( actionDocumentTranslate , SIGNAL ( triggered ( ) ) , this , SLOT ( documentActionActivated ( ) ) ) ;
2010-11-06 23:04:47 +01:00
//Center window in screen
QRect desktopRect = QApplication : : desktop ( ) - > screenGeometry ( ) ;
QRect thisRect = this - > geometry ( ) ;
move ( ( desktopRect . width ( ) - thisRect . width ( ) ) / 2 , ( desktopRect . height ( ) - thisRect . height ( ) ) / 2 ) ;
setMinimumSize ( thisRect . width ( ) , thisRect . height ( ) ) ;
//Create banner
m_banner = new WorkingBanner ( this ) ;
2010-11-08 19:29:36 +01:00
2010-12-22 01:01:01 +01:00
//Create DropBox widget
m_dropBox = new DropBox ( this , m_fileListModel , m_settings ) ;
connect ( m_fileListModel , SIGNAL ( modelReset ( ) ) , m_dropBox , SLOT ( modelChanged ( ) ) ) ;
connect ( m_fileListModel , SIGNAL ( rowsInserted ( QModelIndex , int , int ) ) , m_dropBox , SLOT ( modelChanged ( ) ) ) ;
connect ( m_fileListModel , SIGNAL ( rowsRemoved ( QModelIndex , int , int ) ) , m_dropBox , SLOT ( modelChanged ( ) ) ) ;
2010-12-30 17:34:19 +01:00
2010-11-08 19:29:36 +01:00
//Create message handler thread
m_messageHandler = new MessageHandlerThread ( ) ;
2010-11-08 21:47:35 +01:00
m_delayedFileList = new QStringList ( ) ;
m_delayedFileTimer = new QTimer ( ) ;
connect ( m_messageHandler , SIGNAL ( otherInstanceDetected ( ) ) , this , SLOT ( notifyOtherInstance ( ) ) , Qt : : QueuedConnection ) ;
connect ( m_messageHandler , SIGNAL ( fileReceived ( QString ) ) , this , SLOT ( addFileDelayed ( QString ) ) , Qt : : QueuedConnection ) ;
2010-11-09 22:06:11 +01:00
connect ( m_messageHandler , SIGNAL ( killSignalReceived ( ) ) , this , SLOT ( close ( ) ) , Qt : : QueuedConnection ) ;
2010-11-08 21:47:35 +01:00
connect ( m_delayedFileTimer , SIGNAL ( timeout ( ) ) , this , SLOT ( handleDelayedFiles ( ) ) ) ;
2010-11-08 19:29:36 +01:00
m_messageHandler - > start ( ) ;
2010-11-12 23:31:04 +01:00
2010-12-31 01:52:16 +01:00
//Load translation file
2010-12-30 16:12:21 +01:00
QList < QAction * > languageActions = m_languageActionGroup - > actions ( ) ;
while ( ! languageActions . isEmpty ( ) )
{
QAction * currentLanguage = languageActions . takeFirst ( ) ;
if ( currentLanguage - > data ( ) . toString ( ) . compare ( m_settings - > currentLanguage ( ) , Qt : : CaseInsensitive ) = = 0 )
{
currentLanguage - > setChecked ( true ) ;
languageActionActivated ( currentLanguage ) ;
}
}
2010-12-30 17:34:19 +01:00
2011-01-01 19:28:19 +01:00
//Re-translate (make sure we translate once)
QEvent languageChangeEvent ( QEvent : : LanguageChange ) ;
changeEvent ( & languageChangeEvent ) ;
2010-12-30 17:34:19 +01:00
//Enable Drag & Drop
this - > setAcceptDrops ( true ) ;
2010-11-06 23:04:47 +01:00
}
////////////////////////////////////////////////////////////
// Destructor
////////////////////////////////////////////////////////////
MainWindow : : ~ MainWindow ( void )
{
2010-11-09 22:06:11 +01:00
//Stop message handler thread
if ( m_messageHandler & & m_messageHandler - > isRunning ( ) )
2010-11-08 21:47:35 +01:00
{
m_messageHandler - > stop ( ) ;
2010-11-09 22:06:11 +01:00
if ( ! m_messageHandler - > wait ( 10000 ) )
{
m_messageHandler - > terminate ( ) ;
m_messageHandler - > wait ( ) ;
}
2010-11-08 21:47:35 +01:00
}
2010-11-10 19:44:51 +01:00
//Unset models
sourceFileView - > setModel ( NULL ) ;
metaDataView - > setModel ( NULL ) ;
2010-12-28 03:57:48 +01:00
2010-11-09 22:06:11 +01:00
//Free memory
2010-11-06 23:04:47 +01:00
LAMEXP_DELETE ( m_tabActionGroup ) ;
2010-11-08 00:24:54 +01:00
LAMEXP_DELETE ( m_styleActionGroup ) ;
2010-12-28 03:57:48 +01:00
LAMEXP_DELETE ( m_languageActionGroup ) ;
2010-11-06 23:04:47 +01:00
LAMEXP_DELETE ( m_banner ) ;
2010-11-07 16:32:54 +01:00
LAMEXP_DELETE ( m_fileSystemModel ) ;
2010-11-08 21:47:35 +01:00
LAMEXP_DELETE ( m_messageHandler ) ;
LAMEXP_DELETE ( m_delayedFileList ) ;
LAMEXP_DELETE ( m_delayedFileTimer ) ;
2010-11-10 19:44:51 +01:00
LAMEXP_DELETE ( m_metaInfoModel ) ;
2010-11-15 04:42:06 +01:00
LAMEXP_DELETE ( m_encoderButtonGroup ) ;
2010-11-20 02:14:22 +01:00
LAMEXP_DELETE ( m_encoderButtonGroup ) ;
2010-11-25 20:41:59 +01:00
LAMEXP_DELETE ( m_sourceFilesContextMenu ) ;
2010-12-22 01:01:01 +01:00
LAMEXP_DELETE ( m_dropBox ) ;
2010-11-06 23:04:47 +01:00
}
////////////////////////////////////////////////////////////
2010-11-11 19:37:16 +01:00
// PRIVATE FUNCTIONS
2010-11-06 23:04:47 +01:00
////////////////////////////////////////////////////////////
2010-12-28 03:57:48 +01:00
/*
* Add file to source list
*/
2010-11-11 19:37:16 +01:00
void MainWindow : : addFiles ( const QStringList & files )
{
if ( files . isEmpty ( ) )
{
return ;
}
tabWidget - > setCurrentIndex ( 0 ) ;
FileAnalyzer * analyzer = new FileAnalyzer ( files ) ;
connect ( analyzer , SIGNAL ( fileSelected ( QString ) ) , m_banner , SLOT ( setText ( QString ) ) , Qt : : QueuedConnection ) ;
connect ( analyzer , SIGNAL ( fileAnalyzed ( AudioFileModel ) ) , m_fileListModel , SLOT ( addFile ( AudioFileModel ) ) , Qt : : QueuedConnection ) ;
2010-12-28 21:26:16 +01:00
m_banner - > show ( tr ( " Adding file(s), please wait... " ) , analyzer ) ;
2010-11-11 19:37:16 +01:00
if ( analyzer - > filesDenied ( ) )
{
2010-12-30 17:34:19 +01:00
QMessageBox : : warning ( this , tr ( " Access Denied " ) , QString ( " <nobr>%1<br>%2</nobr> " ) . arg ( tr ( " %1 file(s) have been rejected, because read access was not granted! " ) . arg ( analyzer - > filesDenied ( ) ) , tr ( " This usually means the file is locked by another process. " ) ) ) ;
2010-11-11 19:37:16 +01:00
}
2011-03-19 15:35:17 +01:00
if ( analyzer - > filesDummyCDDA ( ) )
{
QMessageBox : : warning ( this , tr ( " CDA Files " ) , QString ( " <nobr>%1<br><br>%2<br>%3</nobr> " ) . arg ( tr ( " %1 file(s) have been rejected, because they are dummy CDDA files! " ) . arg ( analyzer - > filesDummyCDDA ( ) ) , tr ( " Sorry, LameXP cannot extract audio tracks from an Audio−CD at present. " ) , tr ( " We recommend using %1 for that purpose. " ) . arg ( " <a href= \" http://www.exactaudiocopy.de/ \" >Exact Audio Copy</a> " ) ) ) ;
}
2010-11-11 19:37:16 +01:00
if ( analyzer - > filesRejected ( ) )
{
2010-12-30 17:34:19 +01:00
QMessageBox : : warning ( this , tr ( " Files Rejected " ) , QString ( " <nobr>%1<br>%2</nobr> " ) . arg ( tr ( " %1 file(s) have been rejected, because the file format could not be recognized! " ) . arg ( analyzer - > filesRejected ( ) ) , tr ( " This usually means the file is damaged or the file format is not supported. " ) ) ) ;
2010-11-11 19:37:16 +01:00
}
LAMEXP_DELETE ( analyzer ) ;
sourceFileView - > scrollToBottom ( ) ;
m_banner - > close ( ) ;
}
2010-11-06 23:04:47 +01:00
2011-03-23 23:19:31 +01:00
/*
* Add folder to source list
*/
void MainWindow : : addFolder ( const QString & path , bool recursive )
{
QFileInfoList folderInfoList ;
folderInfoList < < QFileInfo ( path ) ;
QStringList fileList ;
m_banner - > show ( tr ( " Scanning folder(s) for files, please wait... " ) ) ;
QApplication : : processEvents ( ) ;
while ( ! folderInfoList . isEmpty ( ) )
{
QDir currentDir ( folderInfoList . takeFirst ( ) . canonicalFilePath ( ) ) ;
QFileInfoList fileInfoList = currentDir . entryInfoList ( QDir : : Files ) ;
while ( ! fileInfoList . isEmpty ( ) )
{
fileList < < fileInfoList . takeFirst ( ) . canonicalFilePath ( ) ;
}
QApplication : : processEvents ( ) ;
if ( recursive )
{
folderInfoList . append ( currentDir . entryInfoList ( QDir : : Dirs | QDir : : NoDotAndDotDot | QDir : : NoSymLinks ) ) ;
QApplication : : processEvents ( ) ;
}
}
m_banner - > close ( ) ;
QApplication : : processEvents ( ) ;
if ( ! fileList . isEmpty ( ) )
{
addFiles ( fileList ) ;
}
}
2011-01-29 00:40:29 +01:00
/*
* Download and install WMA Decoder component
*/
2011-02-18 00:53:36 +01:00
bool MainWindow : : installWMADecoder ( void )
2011-01-29 00:40:29 +01:00
{
static const char * download_url = " http://www.nch.com.au/components/wmawav.exe " ;
static const char * download_hash = " 52a3b0e6690faf3f830c336d3c0eadfb7a4e9bc6 " ;
2011-02-18 00:53:36 +01:00
bool bResult = false ;
2011-01-29 00:40:29 +01:00
QString binaryWGet = lamexp_lookup_tool ( " wget.exe " ) ;
QString binaryElevator = lamexp_lookup_tool ( " elevator.exe " ) ;
if ( binaryWGet . isEmpty ( ) | | binaryElevator . isEmpty ( ) )
{
throw " Required binary is not available! " ;
}
while ( true )
{
2011-02-25 22:03:39 +01:00
QString setupFile = QString ( " %1/%2.exe " ) . arg ( lamexp_temp_folder2 ( ) , lamexp_rand_str ( ) ) ;
2011-01-29 00:40:29 +01:00
QProcess process ;
process . setWorkingDirectory ( QFileInfo ( setupFile ) . absolutePath ( ) ) ;
QEventLoop loop ;
connect ( & process , SIGNAL ( error ( QProcess : : ProcessError ) ) , & loop , SLOT ( quit ( ) ) ) ;
connect ( & process , SIGNAL ( finished ( int , QProcess : : ExitStatus ) ) , & loop , SLOT ( quit ( ) ) ) ;
process . start ( binaryWGet , QStringList ( ) < < " -O " < < QFileInfo ( setupFile ) . fileName ( ) < < download_url ) ;
m_banner - > show ( tr ( " Downloading WMA Decoder Setup, please wait... " ) , & loop ) ;
if ( process . exitCode ( ) ! = 0 | | QFileInfo ( setupFile ) . size ( ) < 10240 )
{
QFile : : remove ( setupFile ) ;
if ( QMessageBox : : critical ( this , tr ( " Download Failed " ) , tr ( " Failed to download the WMA Decoder setup. Check your internet connection! " ) , tr ( " Try Again " ) , tr ( " Cancel " ) ) = = 0 )
{
continue ;
}
2011-02-18 00:53:36 +01:00
break ;
2011-01-29 00:40:29 +01:00
}
QFile setupFileContent ( setupFile ) ;
QCryptographicHash setupFileHash ( QCryptographicHash : : Sha1 ) ;
setupFileContent . open ( QIODevice : : ReadOnly ) ;
if ( setupFileContent . isOpen ( ) & & setupFileContent . isReadable ( ) )
{
setupFileHash . addData ( setupFileContent . readAll ( ) ) ;
setupFileContent . close ( ) ;
}
if ( _stricmp ( setupFileHash . result ( ) . toHex ( ) . constData ( ) , download_hash ) )
{
qWarning ( " Hash miscompare: \n Expected %s \n Detected %s \n " , download_hash , setupFileHash . result ( ) . toHex ( ) . constData ( ) ) ;
QFile : : remove ( setupFile ) ;
if ( QMessageBox : : critical ( this , tr ( " Download Failed " ) , tr ( " The download seems to be corrupted. Please try again! " ) , tr ( " Try Again " ) , tr ( " Cancel " ) ) = = 0 )
{
continue ;
}
2011-02-18 00:53:36 +01:00
break ;
2011-01-29 00:40:29 +01:00
}
QApplication : : setOverrideCursor ( Qt : : WaitCursor ) ;
process . start ( binaryElevator , QStringList ( ) < < QString ( " /exec=%1 " ) . arg ( setupFile ) ) ;
loop . exec ( QEventLoop : : ExcludeUserInputEvents ) ;
QFile : : remove ( setupFile ) ;
QApplication : : restoreOverrideCursor ( ) ;
if ( QMessageBox : : information ( this , tr ( " WMA Decoder " ) , tr ( " The WMA File Decoder has been installed. Please restart LameXP now! " ) , tr ( " Quit LameXP " ) , tr ( " Postpone " ) ) = = 0 )
{
2011-02-18 00:53:36 +01:00
bResult = true ;
2011-01-29 00:40:29 +01:00
}
break ;
}
2011-02-18 00:53:36 +01:00
return bResult ;
}
/*
* Check for updates
*/
bool MainWindow : : checkForUpdates ( void )
{
bool bReadyToInstall = false ;
UpdateDialog * updateDialog = new UpdateDialog ( m_settings , this ) ;
updateDialog - > exec ( ) ;
if ( updateDialog - > getSuccess ( ) )
{
m_settings - > autoUpdateLastCheck ( QDate : : currentDate ( ) . toString ( Qt : : ISODate ) ) ;
bReadyToInstall = updateDialog - > updateReadyToInstall ( ) ;
}
LAMEXP_DELETE ( updateDialog ) ;
return bReadyToInstall ;
2011-01-29 00:40:29 +01:00
}
2010-11-08 19:29:36 +01:00
////////////////////////////////////////////////////////////
// EVENTS
////////////////////////////////////////////////////////////
2010-12-28 03:57:48 +01:00
/*
* Window is about to be shown
*/
2010-11-08 19:29:36 +01:00
void MainWindow : : showEvent ( QShowEvent * event )
{
2010-11-19 21:11:54 +01:00
m_accepted = false ;
2010-11-20 02:14:22 +01:00
m_dropNoteLabel - > setGeometry ( 0 , 0 , sourceFileView - > width ( ) , sourceFileView - > height ( ) ) ;
2010-11-21 21:51:41 +01:00
sourceModelChanged ( ) ;
2010-11-20 22:14:10 +01:00
tabWidget - > setCurrentIndex ( 0 ) ;
if ( m_firstTimeShown )
{
m_firstTimeShown = false ;
QTimer : : singleShot ( 0 , this , SLOT ( windowShown ( ) ) ) ;
}
2010-12-22 22:59:00 +01:00
else
2010-12-22 01:01:01 +01:00
{
2010-12-22 22:59:00 +01:00
if ( m_settings - > dropBoxWidgetEnabled ( ) )
{
m_dropBox - > setVisible ( true ) ;
}
2010-12-22 01:01:01 +01:00
}
2010-11-08 19:29:36 +01:00
}
2010-12-30 17:34:19 +01:00
/*
* Re - translate the UI
*/
void MainWindow : : changeEvent ( QEvent * e )
{
if ( e - > type ( ) = = QEvent : : LanguageChange )
{
2011-01-22 22:19:20 +01:00
int comboBoxIndex [ 3 ] ;
2011-02-11 23:16:11 +01:00
//Backup combobox indices, as retranslateUi() resets
2011-01-22 22:19:20 +01:00
comboBoxIndex [ 0 ] = comboBoxMP3ChannelMode - > currentIndex ( ) ;
comboBoxIndex [ 1 ] = comboBoxSamplingRate - > currentIndex ( ) ;
comboBoxIndex [ 2 ] = comboBoxNeroAACProfile - > currentIndex ( ) ;
2011-02-11 23:16:11 +01:00
//Re-translate from UIC
2010-12-30 17:34:19 +01:00
Ui : : MainWindow : : retranslateUi ( this ) ;
2011-01-22 22:19:20 +01:00
//Restore combobox indices
comboBoxMP3ChannelMode - > setCurrentIndex ( comboBoxIndex [ 0 ] ) ;
comboBoxSamplingRate - > setCurrentIndex ( comboBoxIndex [ 1 ] ) ;
comboBoxNeroAACProfile - > setCurrentIndex ( comboBoxIndex [ 2 ] ) ;
2011-02-20 19:29:28 +01:00
//Update the window title
# if !defined(_DEBUG) && !defined(QT_DEBUG) && defined(NDEBUG) && defined(QT_NO_DEBUG)
2010-12-30 17:34:19 +01:00
if ( lamexp_version_demo ( ) )
{
setWindowTitle ( QString ( " %1 [%2] " ) . arg ( windowTitle ( ) , tr ( " DEMO VERSION " ) ) ) ;
}
2011-02-20 19:29:28 +01:00
# else
setWindowTitle ( QString ( " %1 [!!! DEBUG BUILD !!!] " ) . arg ( windowTitle ( ) ) ) ;
# endif
2011-02-11 23:16:11 +01:00
//Manually re-translate widgets that UIC doesn't handle
2010-12-30 17:34:19 +01:00
m_dropNoteLabel - > setText ( QString ( " <EFBFBD> %1 <20> " ) . arg ( tr ( " You can drop in audio files here! " ) ) ) ;
m_showDetailsContextAction - > setText ( tr ( " Show Details " ) ) ;
m_previewContextAction - > setText ( tr ( " Open File in External Application " ) ) ;
m_findFileContextAction - > setText ( tr ( " Browse File Location " ) ) ;
m_showFolderContextAction - > setText ( tr ( " Browse Selected Folder " ) ) ;
2011-01-04 19:58:18 +01:00
2011-01-22 22:19:20 +01:00
//Force GUI update
2011-01-04 19:58:18 +01:00
m_metaInfoModel - > clearData ( ) ;
2011-02-10 16:08:03 +01:00
m_metaInfoModel - > setData ( m_metaInfoModel - > index ( 4 , 1 ) , m_settings - > metaInfoPosition ( ) ) ;
2011-01-14 23:34:31 +01:00
updateEncoder ( m_settings - > compressionEncoder ( ) ) ;
2011-01-21 19:14:11 +01:00
updateLameAlgoQuality ( sliderLameAlgoQuality - > value ( ) ) ;
2011-02-25 00:22:18 +01:00
updateMaximumInstances ( sliderMaxInstances - > value ( ) ) ;
2011-01-29 00:40:29 +01:00
2011-02-11 23:16:11 +01:00
//Re-install shell integration
2011-01-29 00:40:29 +01:00
if ( m_settings - > shellIntegrationEnabled ( ) )
{
ShellIntegration : : install ( ) ;
}
2011-04-05 14:57:21 +02:00
//Force resize, if needed
tabPageChanged ( tabWidget - > currentIndex ( ) ) ;
2010-12-30 17:34:19 +01:00
}
}
2010-12-28 03:57:48 +01:00
/*
* File dragged over window
*/
2010-11-12 23:31:04 +01:00
void MainWindow : : dragEnterEvent ( QDragEnterEvent * event )
{
QStringList formats = event - > mimeData ( ) - > formats ( ) ;
2010-11-13 02:11:15 +01:00
if ( formats . contains ( " application/x-qt-windows-mime;value= \" FileNameW \" " , Qt : : CaseInsensitive ) & & formats . contains ( " text/uri-list " , Qt : : CaseInsensitive ) )
2010-11-12 23:31:04 +01:00
{
2010-11-13 02:11:15 +01:00
event - > acceptProposedAction ( ) ;
2010-11-12 23:31:04 +01:00
}
}
2010-12-28 03:57:48 +01:00
/*
* File dropped onto window
*/
2010-11-12 23:31:04 +01:00
void MainWindow : : dropEvent ( QDropEvent * event )
{
ABORT_IF_BUSY ;
QStringList droppedFiles ;
const QList < QUrl > urls = event - > mimeData ( ) - > urls ( ) ;
for ( int i = 0 ; i < urls . count ( ) ; i + + )
{
2010-11-13 02:11:15 +01:00
QFileInfo file ( urls . at ( i ) . toLocalFile ( ) ) ;
if ( ! file . exists ( ) )
{
continue ;
}
if ( file . isFile ( ) )
{
droppedFiles < < file . canonicalFilePath ( ) ;
continue ;
}
if ( file . isDir ( ) )
{
QList < QFileInfo > list = QDir ( file . canonicalFilePath ( ) ) . entryInfoList ( QDir : : Files ) ;
for ( int j = 0 ; j < list . count ( ) ; j + + )
{
2010-11-15 22:07:46 +01:00
droppedFiles < < list . at ( j ) . canonicalFilePath ( ) ;
2010-11-13 02:11:15 +01:00
}
}
2010-11-12 23:31:04 +01:00
}
addFiles ( droppedFiles ) ;
}
2010-12-28 03:57:48 +01:00
/*
* Window tries to close
*/
2010-11-19 21:11:54 +01:00
void MainWindow : : closeEvent ( QCloseEvent * event )
{
if ( m_banner - > isVisible ( ) | | m_delayedFileTimer - > isActive ( ) )
{
MessageBeep ( MB_ICONEXCLAMATION ) ;
event - > ignore ( ) ;
}
2010-12-22 01:01:01 +01:00
if ( m_dropBox )
{
m_dropBox - > hide ( ) ;
}
2010-11-19 21:11:54 +01:00
}
2010-12-28 03:57:48 +01:00
/*
* Window was resized
*/
2010-11-20 02:14:22 +01:00
void MainWindow : : resizeEvent ( QResizeEvent * event )
{
QMainWindow : : resizeEvent ( event ) ;
m_dropNoteLabel - > setGeometry ( 0 , 0 , sourceFileView - > width ( ) , sourceFileView - > height ( ) ) ;
}
2010-12-28 03:57:48 +01:00
/*
* Event filter
*/
2010-11-24 21:00:59 +01:00
bool MainWindow : : eventFilter ( QObject * obj , QEvent * event )
{
2010-11-25 01:23:48 +01:00
if ( obj = = m_fileSystemModel & & QApplication : : overrideCursor ( ) = = NULL )
2010-11-24 21:00:59 +01:00
{
QApplication : : setOverrideCursor ( QCursor ( Qt : : WaitCursor ) ) ;
2010-11-25 01:23:48 +01:00
QTimer : : singleShot ( 250 , this , SLOT ( restoreCursor ( ) ) ) ;
2010-11-24 21:00:59 +01:00
}
2010-12-28 03:57:48 +01:00
else if ( obj = = outputFolderLabel )
{
switch ( event - > type ( ) )
{
case QEvent : : MouseButtonPress :
if ( dynamic_cast < QMouseEvent * > ( event ) - > button ( ) = = Qt : : LeftButton )
{
QDesktopServices : : openUrl ( QString ( " file:///%1 " ) . arg ( outputFolderLabel - > text ( ) ) ) ;
}
break ;
case QEvent : : Enter :
outputFolderLabel - > setForegroundRole ( QPalette : : Link ) ;
break ;
case QEvent : : Leave :
outputFolderLabel - > setForegroundRole ( QPalette : : WindowText ) ;
break ;
}
}
2010-11-24 21:00:59 +01:00
return false ;
}
2010-11-06 23:04:47 +01:00
////////////////////////////////////////////////////////////
// Slots
////////////////////////////////////////////////////////////
2010-11-08 19:29:36 +01:00
/*
* Window shown
*/
void MainWindow : : windowShown ( void )
{
QStringList arguments = QApplication : : arguments ( ) ;
2010-11-29 20:36:27 +01:00
//Check license
2010-11-12 19:02:01 +01:00
if ( m_settings - > licenseAccepted ( ) < = 0 )
2010-11-12 15:58:53 +01:00
{
2010-11-12 19:02:01 +01:00
int iAccepted = - 1 ;
if ( m_settings - > licenseAccepted ( ) = = 0 )
{
2010-11-29 20:36:27 +01:00
AboutDialog * about = new AboutDialog ( m_settings , this , true ) ;
2010-11-12 19:02:01 +01:00
iAccepted = about - > exec ( ) ;
LAMEXP_DELETE ( about ) ;
}
if ( iAccepted < = 0 )
{
2010-11-15 04:42:06 +01:00
m_settings - > licenseAccepted ( - 1 ) ;
2010-12-22 01:01:01 +01:00
QApplication : : processEvents ( ) ;
2010-12-20 22:13:01 +01:00
PlaySound ( MAKEINTRESOURCE ( IDR_WAVE_WHAMMY ) , GetModuleHandle ( NULL ) , SND_RESOURCE | SND_SYNC ) ;
2010-12-28 21:26:16 +01:00
QMessageBox : : critical ( this , tr ( " License Declined " ) , tr ( " You have declined the license. Consequently the application will exit now! " ) , tr ( " Goodbye! " ) ) ;
2011-02-25 13:40:45 +01:00
if ( ! QProcess : : startDetached ( QString ( " %1/Uninstall.exe " ) . arg ( QApplication : : applicationDirPath ( ) ) , QStringList ( ) ) )
{
MoveFileEx ( QWCHAR ( QDir : : toNativeSeparators ( QFileInfo ( QApplication : : applicationFilePath ( ) ) . canonicalFilePath ( ) ) ) , NULL , MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_REPLACE_EXISTING ) ;
}
2010-11-12 19:02:01 +01:00
QApplication : : quit ( ) ;
return ;
}
2010-12-22 01:01:01 +01:00
PlaySound ( MAKEINTRESOURCE ( IDR_WAVE_WOOHOO ) , GetModuleHandle ( NULL ) , SND_RESOURCE | SND_SYNC ) ;
2010-11-15 04:42:06 +01:00
m_settings - > licenseAccepted ( 1 ) ;
2010-11-12 15:58:53 +01:00
}
2010-11-29 20:36:27 +01:00
//Check for expiration
if ( lamexp_version_demo ( ) )
{
2011-01-20 22:06:59 +01:00
if ( QDate : : currentDate ( ) > = lamexp_version_expires ( ) )
2010-11-29 20:36:27 +01:00
{
qWarning ( " Binary has expired !!! " ) ;
2010-12-20 22:13:01 +01:00
PlaySound ( MAKEINTRESOURCE ( IDR_WAVE_WHAMMY ) , GetModuleHandle ( NULL ) , SND_RESOURCE | SND_SYNC ) ;
2011-01-20 22:06:59 +01:00
if ( QMessageBox : : warning ( this , tr ( " LameXP - Expired " ) , QString ( " <nobr>%1<br>%2</nobr> " ) . arg ( tr ( " This demo (pre-release) version of LameXP has expired at %1. " ) . arg ( lamexp_version_expires ( ) . toString ( Qt : : ISODate ) ) , tr ( " LameXP is free software and release versions won't expire. " ) ) , tr ( " Check for Updates " ) , tr ( " Exit Program " ) ) = = 0 )
2010-11-29 20:36:27 +01:00
{
2011-02-18 00:53:36 +01:00
checkForUpdates ( ) ;
2010-11-29 20:36:27 +01:00
}
QApplication : : quit ( ) ;
return ;
}
}
//Update reminder
if ( QDate : : currentDate ( ) > = lamexp_version_date ( ) . addYears ( 1 ) )
{
qWarning ( " Binary is more than a year old, time to update! " ) ;
2011-01-09 02:15:20 +01:00
if ( QMessageBox : : warning ( this , tr ( " Urgent Update " ) , QString ( " <nobr>%1</nobr> " ) . arg ( tr ( " Your version of LameXP is more than a year old. Time for an update! " ) ) , tr ( " Check for Updates " ) , tr ( " Exit Program " ) ) = = 0 )
2010-11-29 20:36:27 +01:00
{
2011-02-18 00:53:36 +01:00
if ( checkForUpdates ( ) )
{
QApplication : : quit ( ) ;
return ;
}
2010-11-29 20:36:27 +01:00
}
else
{
QApplication : : quit ( ) ;
return ;
}
}
else if ( m_settings - > autoUpdateEnabled ( ) )
{
QDate lastUpdateCheck = QDate : : fromString ( m_settings - > autoUpdateLastCheck ( ) , Qt : : ISODate ) ;
if ( ! lastUpdateCheck . isValid ( ) | | QDate : : currentDate ( ) > = lastUpdateCheck . addDays ( 14 ) )
{
2011-01-09 02:15:20 +01:00
if ( QMessageBox : : information ( this , tr ( " Update Reminder " ) , QString ( " <nobr>%1</nobr> " ) . arg ( lastUpdateCheck . isValid ( ) ? tr ( " Your last update check was more than 14 days ago. Check for updates now? " ) : tr ( " Your did not check for LameXP updates yet. Check for updates now? " ) ) , tr ( " Check for Updates " ) , tr ( " Postpone " ) ) = = 0 )
2010-11-29 20:36:27 +01:00
{
2011-02-18 00:53:36 +01:00
if ( checkForUpdates ( ) )
{
QApplication : : quit ( ) ;
return ;
}
2010-11-29 20:36:27 +01:00
}
}
}
2010-11-11 22:58:02 +01:00
//Check for AAC support
2010-12-19 21:23:43 +01:00
if ( m_settings - > neroAacNotificationsEnabled ( ) )
2010-11-11 22:58:02 +01:00
{
2010-12-19 21:23:43 +01:00
if ( lamexp_check_tool ( " neroAacEnc.exe " ) & & lamexp_check_tool ( " neroAacDec.exe " ) & & lamexp_check_tool ( " neroAacTag.exe " ) )
2010-11-12 15:58:53 +01:00
{
2010-12-19 21:23:43 +01:00
if ( lamexp_tool_version ( " neroAacEnc.exe " ) < lamexp_toolver_neroaac ( ) )
{
QString messageText ;
2010-12-30 16:12:21 +01:00
messageText + = QString ( " <nobr>%1<br> " ) . arg ( tr ( " LameXP detected that your version of the Nero AAC encoder is outdated! " ) ) ;
2011-01-14 23:34:31 +01:00
messageText + = QString ( " %1<br><br> " ) . arg ( tr ( " The current version available is %1 (or later), but you still have version %2 installed. " ) . arg ( lamexp_version2string ( " ?.?.?.? " , lamexp_toolver_neroaac ( ) , tr ( " n/a " ) ) , lamexp_version2string ( " ?.?.?.? " , lamexp_tool_version ( " neroAacEnc.exe " ) , tr ( " n/a " ) ) ) ) ;
2010-12-30 16:12:21 +01:00
messageText + = QString ( " %1<br> " ) . arg ( tr ( " You can download the latest version of the Nero AAC encoder from the Nero website at: " ) ) ;
2011-02-01 22:15:57 +01:00
messageText + = " <tt> " + LINK ( AboutDialog : : neroAacUrl ) + " </tt><br></nobr> " ;
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " AAC Encoder Outdated " ) , messageText ) ;
2010-12-19 21:23:43 +01:00
}
}
else
{
radioButtonEncoderAAC - > setEnabled ( false ) ;
2011-01-24 00:04:07 +01:00
QString appPath = QDir ( QCoreApplication : : applicationDirPath ( ) ) . canonicalPath ( ) ;
if ( appPath . isEmpty ( ) ) appPath = QCoreApplication : : applicationDirPath ( ) ;
2010-11-12 15:58:53 +01:00
QString messageText ;
2010-12-30 16:12:21 +01:00
messageText + = QString ( " <nobr>%1<br> " ) . arg ( tr ( " The Nero AAC encoder could not be found. AAC encoding support will be disabled. " ) ) ;
messageText + = QString ( " %1<br><br> " ) . arg ( tr ( " Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! " ) ) ;
messageText + = QString ( " %1<br> " ) . arg ( tr ( " Your LameXP directory is located here: " ) ) ;
2011-01-24 00:04:07 +01:00
messageText + = QString ( " <i><nobr><a href= \" file:///%1 \" >%1</a></nobr></i><br><br> " ) . arg ( QDir : : toNativeSeparators ( appPath ) ) ;
2010-12-30 16:12:21 +01:00
messageText + = QString ( " %1<br> " ) . arg ( tr ( " You can download the Nero AAC encoder for free from the official Nero website at: " ) ) ;
2011-02-01 22:15:57 +01:00
messageText + = " <tt> " + LINK ( AboutDialog : : neroAacUrl ) + " </tt><br></nobr> " ;
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " AAC Support Disabled " ) , messageText ) ;
2010-11-12 15:58:53 +01:00
}
2010-11-11 22:58:02 +01:00
}
2010-12-12 13:44:11 +01:00
//Check for WMA support
2010-12-19 21:23:43 +01:00
if ( m_settings - > wmaDecoderNotificationsEnabled ( ) )
2010-12-12 13:44:11 +01:00
{
2010-12-19 21:23:43 +01:00
if ( ! lamexp_check_tool ( " wmawav.exe " ) )
{
QString messageText ;
2010-12-30 16:12:21 +01:00
messageText + = QString ( " <nobr>%1<br> " ) . arg ( tr ( " LameXP has detected that the WMA File Decoder component is not currently installed on your system. " ) ) ;
2011-01-29 00:40:29 +01:00
messageText + = QString ( " %1<br><br> " ) . arg ( tr ( " You won't be able to process WMA files as input unless the WMA File Decoder component is installed! " ) ) ;
messageText + = QString ( " %1</nobr> " ) . arg ( tr ( " Do you want to download and install the WMA File Decoder component now? " ) ) ;
if ( QMessageBox : : information ( this , tr ( " WMA Decoder Missing " ) , messageText , tr ( " Download && Install " ) , tr ( " Postpone " ) ) = = 0 )
{
2011-02-18 00:53:36 +01:00
if ( installWMADecoder ( ) )
{
QApplication : : quit ( ) ;
return ;
}
2011-01-29 00:40:29 +01:00
}
2010-12-19 21:23:43 +01:00
}
2010-12-12 13:44:11 +01:00
}
2010-11-11 22:58:02 +01:00
//Add files from the command-line
2010-11-08 19:29:36 +01:00
for ( int i = 0 ; i < arguments . count ( ) - 1 ; i + + )
{
if ( ! arguments [ i ] . compare ( " --add " , Qt : : CaseInsensitive ) )
{
QFileInfo currentFile ( arguments [ + + i ] . trimmed ( ) ) ;
2010-11-13 02:11:15 +01:00
qDebug ( " Adding file from CLI: %s " , currentFile . canonicalFilePath ( ) . toUtf8 ( ) . constData ( ) ) ;
m_delayedFileList - > append ( currentFile . canonicalFilePath ( ) ) ;
2010-11-08 19:29:36 +01:00
}
}
2010-12-22 01:01:01 +01:00
//Start delayed files timer
2010-11-08 21:47:35 +01:00
if ( ! m_delayedFileList - > isEmpty ( ) & & ! m_delayedFileTimer - > isActive ( ) )
2010-11-08 19:29:36 +01:00
{
2010-11-08 21:47:35 +01:00
m_delayedFileTimer - > start ( 5000 ) ;
2010-11-08 19:29:36 +01:00
}
2010-12-22 22:59:00 +01:00
2011-01-29 00:40:29 +01:00
//Enable shell integration
if ( m_settings - > shellIntegrationEnabled ( ) )
{
ShellIntegration : : install ( ) ;
}
2010-12-22 22:59:00 +01:00
//Make DropBox visible
if ( m_settings - > dropBoxWidgetEnabled ( ) )
{
m_dropBox - > setVisible ( true ) ;
}
2010-11-08 19:29:36 +01:00
}
2010-11-06 23:04:47 +01:00
/*
* About button
*/
void MainWindow : : aboutButtonClicked ( void )
{
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2011-01-02 21:46:36 +01:00
TEMP_HIDE_DROPBOX
(
AboutDialog * aboutBox = new AboutDialog ( m_settings , this ) ;
aboutBox - > exec ( ) ;
LAMEXP_DELETE ( aboutBox ) ;
)
2010-11-06 23:04:47 +01:00
}
/*
* Encode button
*/
void MainWindow : : encodeButtonClicked ( void )
{
2010-12-19 00:50:22 +01:00
static const __int64 oneGigabyte = 1073741824 ;
2010-12-19 21:23:43 +01:00
static const __int64 minimumFreeDiskspaceMultiplier = 2 ;
2010-12-19 00:50:22 +01:00
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2010-12-28 03:57:48 +01:00
2010-11-20 02:14:22 +01:00
if ( m_fileListModel - > rowCount ( ) < 1 )
{
2011-01-03 22:24:58 +01:00
QMessageBox : : warning ( this , tr ( " LameXP " ) , QString ( " <nobr>%1</nobr> " ) . arg ( tr ( " You must add at least one file to the list before proceeding! " ) ) ) ;
2010-11-20 02:14:22 +01:00
tabWidget - > setCurrentIndex ( 0 ) ;
return ;
}
2011-02-25 22:03:39 +01:00
QString tempFolder = m_settings - > customTempPathEnabled ( ) ? m_settings - > customTempPath ( ) : lamexp_temp_folder2 ( ) ;
if ( ! QFileInfo ( tempFolder ) . exists ( ) | | ! QFileInfo ( tempFolder ) . isDir ( ) )
{
if ( QMessageBox : : warning ( this , tr ( " Not Found " ) , QString ( " <nobr>%1</nobr><br><nobr>%2</nobr> " ) . arg ( tr ( " Your currently selected TEMP folder does not exist anymore: " ) , QDir : : toNativeSeparators ( tempFolder ) ) , tr ( " Restore Default " ) , tr ( " Cancel " ) ) = = 0 )
{
while ( checkBoxUseSystemTempFolder - > isChecked ( ) = = m_settings - > customTempPathEnabledDefault ( ) ) checkBoxUseSystemTempFolder - > click ( ) ;
}
return ;
}
2010-12-19 21:23:43 +01:00
2011-02-25 22:03:39 +01:00
qint64 currentFreeDiskspace = lamexp_free_diskspace ( tempFolder ) ;
2010-12-19 21:23:43 +01:00
if ( currentFreeDiskspace < ( oneGigabyte * minimumFreeDiskspaceMultiplier ) )
2010-12-19 00:50:22 +01:00
{
2011-02-25 22:03:39 +01:00
QStringList tempFolderParts = tempFolder . split ( " / " , QString : : SkipEmptyParts , Qt : : CaseInsensitive ) ;
2010-12-19 21:23:43 +01:00
tempFolderParts . takeLast ( ) ;
2010-12-20 22:13:01 +01:00
if ( m_settings - > soundsEnabled ( ) ) PlaySound ( MAKEINTRESOURCE ( IDR_WAVE_WHAMMY ) , GetModuleHandle ( NULL ) , SND_RESOURCE | SND_SYNC ) ;
2010-12-30 17:34:19 +01:00
switch ( QMessageBox : : warning ( this , tr ( " Low Diskspace Warning " ) , QString ( " <nobr>%1</nobr><br><nobr>%2</nobr><br><br>%3 " ) . arg ( tr ( " There are less than %1 GB of free diskspace available on your system's TEMP folder. " ) . arg ( QString : : number ( minimumFreeDiskspaceMultiplier ) ) , tr ( " It is highly recommend to free up more diskspace before proceeding with the encode! " ) , tr ( " Your TEMP folder is located at: " ) ) . append ( " <br><nobr><i><a href= \" file:///%3 \" >%3</a></i></nobr><br> " ) . arg ( tempFolderParts . join ( " \\ " ) ) , tr ( " Abort Encoding Process " ) , tr ( " Clean Disk Now " ) , tr ( " Ignore " ) ) )
2010-12-19 00:50:22 +01:00
{
2010-12-19 21:23:43 +01:00
case 1 :
QProcess : : startDetached ( QString ( " %1/cleanmgr.exe " ) . arg ( lamexp_known_folder ( lamexp_folder_systemfolder ) ) , QStringList ( ) < < " /D " < < tempFolderParts . first ( ) ) ;
case 0 :
2010-12-19 00:50:22 +01:00
return ;
2010-12-19 21:23:43 +01:00
break ;
default :
2010-12-28 21:26:16 +01:00
QMessageBox : : warning ( this , tr ( " Low Diskspace " ) , tr ( " You are proceeding with low diskspace. Problems might occur! " ) ) ;
2010-12-19 21:23:43 +01:00
break ;
2010-12-19 00:50:22 +01:00
}
}
2010-12-14 23:53:14 +01:00
switch ( m_settings - > compressionEncoder ( ) )
2010-11-15 21:07:58 +01:00
{
2010-12-14 23:53:14 +01:00
case SettingsModel : : MP3Encoder :
case SettingsModel : : VorbisEncoder :
case SettingsModel : : AACEncoder :
case SettingsModel : : FLACEncoder :
2010-12-17 01:12:12 +01:00
case SettingsModel : : PCMEncoder :
2010-12-14 23:53:14 +01:00
break ;
default :
2010-12-28 21:26:16 +01:00
QMessageBox : : warning ( this , tr ( " LameXP " ) , tr ( " Sorry, an unsupported encoder has been chosen! " ) ) ;
2010-11-15 21:07:58 +01:00
tabWidget - > setCurrentIndex ( 3 ) ;
return ;
}
2010-11-21 21:51:41 +01:00
if ( ! m_settings - > outputToSourceDir ( ) )
{
QFile writeTest ( QString ( " %1/~%2.txt " ) . arg ( m_settings - > outputDir ( ) , QUuid : : createUuid ( ) . toString ( ) ) ) ;
if ( ! writeTest . open ( QIODevice : : ReadWrite ) )
{
2010-12-30 17:34:19 +01:00
QMessageBox : : warning ( this , tr ( " LameXP " ) , QString ( " %1<br><nobr>%2</nobr><br><br>%3 " ) . arg ( tr ( " Cannot write to the selected output directory. " ) , m_settings - > outputDir ( ) , tr ( " Please choose a different directory! " ) ) ) ;
2010-11-21 21:51:41 +01:00
tabWidget - > setCurrentIndex ( 1 ) ;
return ;
}
else
{
writeTest . close ( ) ;
writeTest . remove ( ) ;
}
}
2010-11-15 21:07:58 +01:00
2010-11-19 21:11:54 +01:00
m_accepted = true ;
close ( ) ;
}
2010-11-15 21:07:58 +01:00
2010-11-19 21:11:54 +01:00
/*
* Close button
*/
void MainWindow : : closeButtonClicked ( void )
{
ABORT_IF_BUSY ;
close ( ) ;
2010-11-06 23:04:47 +01:00
}
/*
* Add file ( s ) button
*/
void MainWindow : : addFilesButtonClicked ( void )
{
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2011-01-02 21:46:36 +01:00
TEMP_HIDE_DROPBOX
(
if ( lamexp_themes_enabled ( ) )
{
QStringList fileTypeFilters = DecoderRegistry : : getSupportedTypes ( ) ;
QStringList selectedFiles = QFileDialog : : getOpenFileNames ( this , tr ( " Add file(s) " ) , QString ( ) , fileTypeFilters . join ( " ;; " ) ) ;
if ( ! selectedFiles . isEmpty ( ) )
{
addFiles ( selectedFiles ) ;
}
}
else
{
QFileDialog dialog ( this , tr ( " Add file(s) " )) ;
QStringList fileTypeFilters = DecoderRegistry : : getSupportedTypes ( ) ;
2011-01-02 22:04:45 +01:00
dialog . setFileMode ( QFileDialog : : ExistingFiles ) ;
2011-01-02 21:46:36 +01:00
dialog . setNameFilter ( fileTypeFilters . join ( " ;; " ) ) ;
if ( dialog . exec ( ) )
{
QStringList selectedFiles = dialog . selectedFiles ( ) ;
addFiles ( selectedFiles ) ;
}
}
)
2010-11-06 23:04:47 +01:00
}
/*
* Open folder action
*/
void MainWindow : : openFolderActionActivated ( void )
{
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2011-01-02 21:46:36 +01:00
QString selectedFolder ;
2010-11-06 23:04:47 +01:00
2011-03-23 23:19:31 +01:00
if ( QAction * action = dynamic_cast < QAction * > ( QObject : : sender ( ) ) )
{
TEMP_HIDE_DROPBOX
(
if ( lamexp_themes_enabled ( ) )
2011-01-02 21:46:36 +01:00
{
2011-03-23 23:19:31 +01:00
selectedFolder = QFileDialog : : getExistingDirectory ( this , tr ( " Add Folder " ) , QDesktopServices : : storageLocation ( QDesktopServices : : MusicLocation ) ) ;
2011-01-02 21:46:36 +01:00
}
2011-03-23 23:19:31 +01:00
else
2011-01-02 21:46:36 +01:00
{
2011-03-23 23:19:31 +01:00
QFileDialog dialog ( this , tr ( " Add Folder " ) ) ;
dialog . setFileMode ( QFileDialog : : DirectoryOnly ) ;
dialog . setDirectory ( QDesktopServices : : storageLocation ( QDesktopServices : : MusicLocation ) ) ;
if ( dialog . exec ( ) )
{
selectedFolder = dialog . selectedFiles ( ) . first ( ) ;
}
2011-01-02 21:46:36 +01:00
}
2011-03-23 23:19:31 +01:00
if ( ! selectedFolder . isEmpty ( ) )
{
addFolder ( selectedFolder , action - > data ( ) . toBool ( ) ) ;
}
)
}
2010-11-06 23:04:47 +01:00
}
/*
* Remove file button
*/
void MainWindow : : removeFileButtonClicked ( void )
{
if ( sourceFileView - > currentIndex ( ) . isValid ( ) )
{
int iRow = sourceFileView - > currentIndex ( ) . row ( ) ;
m_fileListModel - > removeFile ( sourceFileView - > currentIndex ( ) ) ;
sourceFileView - > selectRow ( iRow < m_fileListModel - > rowCount ( ) ? iRow : m_fileListModel - > rowCount ( ) - 1 ) ;
}
}
/*
* Clear files button
*/
void MainWindow : : clearFilesButtonClicked ( void )
{
m_fileListModel - > clearFiles ( ) ;
}
/*
* Move file up button
*/
void MainWindow : : fileUpButtonClicked ( void )
{
if ( sourceFileView - > currentIndex ( ) . isValid ( ) )
{
int iRow = sourceFileView - > currentIndex ( ) . row ( ) - 1 ;
m_fileListModel - > moveFile ( sourceFileView - > currentIndex ( ) , - 1 ) ;
sourceFileView - > selectRow ( iRow > = 0 ? iRow : 0 ) ;
}
}
/*
* Move file down button
*/
void MainWindow : : fileDownButtonClicked ( void )
{
if ( sourceFileView - > currentIndex ( ) . isValid ( ) )
{
int iRow = sourceFileView - > currentIndex ( ) . row ( ) + 1 ;
m_fileListModel - > moveFile ( sourceFileView - > currentIndex ( ) , 1 ) ;
sourceFileView - > selectRow ( iRow < m_fileListModel - > rowCount ( ) ? iRow : m_fileListModel - > rowCount ( ) - 1 ) ;
}
}
/*
2010-11-10 19:44:51 +01:00
* Show details button
2010-11-06 23:04:47 +01:00
*/
2010-11-10 19:44:51 +01:00
void MainWindow : : showDetailsButtonClicked ( void )
2010-11-06 23:04:47 +01:00
{
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2010-11-06 23:04:47 +01:00
int iResult = 0 ;
MetaInfoDialog * metaInfoDialog = new MetaInfoDialog ( this ) ;
QModelIndex index = sourceFileView - > currentIndex ( ) ;
while ( index . isValid ( ) )
{
if ( iResult > 0 )
{
index = m_fileListModel - > index ( index . row ( ) + 1 , index . column ( ) ) ;
sourceFileView - > selectRow ( index . row ( ) ) ;
}
if ( iResult < 0 )
{
index = m_fileListModel - > index ( index . row ( ) - 1 , index . column ( ) ) ;
sourceFileView - > selectRow ( index . row ( ) ) ;
}
2010-11-08 02:06:01 +01:00
AudioFileModel & file = ( * m_fileListModel ) [ index ] ;
2011-03-23 21:50:32 +01:00
TEMP_HIDE_DROPBOX
(
iResult = metaInfoDialog - > exec ( file , index . row ( ) > 0 , index . row ( ) < m_fileListModel - > rowCount ( ) - 1 ) ;
)
2010-11-06 23:04:47 +01:00
if ( ! iResult ) break ;
}
LAMEXP_DELETE ( metaInfoDialog ) ;
}
/*
* Tab page changed
*/
void MainWindow : : tabPageChanged ( int idx )
{
2010-11-12 21:02:14 +01:00
QList < QAction * > actions = m_tabActionGroup - > actions ( ) ;
for ( int i = 0 ; i < actions . count ( ) ; i + + )
2010-11-06 23:04:47 +01:00
{
2011-01-03 22:24:58 +01:00
bool ok = false ;
int actionIndex = actions . at ( i ) - > data ( ) . toInt ( & ok ) ;
if ( ok & & actionIndex = = idx )
2010-11-12 21:02:14 +01:00
{
actions . at ( i ) - > setChecked ( true ) ;
}
2010-11-06 23:04:47 +01:00
}
2011-04-05 14:57:21 +02:00
int initialWidth = this - > width ( ) ;
int maximumWidth = QApplication : : desktop ( ) - > width ( ) ;
if ( this - > isVisible ( ) )
{
while ( tabWidget - > width ( ) < tabWidget - > sizeHint ( ) . width ( ) )
{
int previousWidth = this - > width ( ) ;
this - > resize ( this - > width ( ) + 1 , this - > height ( ) ) ;
if ( this - > frameGeometry ( ) . width ( ) > = maximumWidth ) break ;
if ( this - > width ( ) < = previousWidth ) break ;
}
}
if ( idx = = tabWidget - > indexOf ( tabOptions ) & & scrollArea - > widget ( ) & & this - > isVisible ( ) )
{
QApplication : : processEvents ( ) ;
while ( scrollArea - > viewport ( ) - > width ( ) < scrollArea - > widget ( ) - > width ( ) )
{
int previousWidth = this - > width ( ) ;
this - > resize ( this - > width ( ) + 1 , this - > height ( ) ) ;
if ( this - > frameGeometry ( ) . width ( ) > = maximumWidth ) break ;
if ( this - > width ( ) < = previousWidth ) break ;
}
}
else if ( idx = = tabWidget - > indexOf ( tabSourceFiles ) )
2011-03-28 04:26:47 +02:00
{
m_dropNoteLabel - > setGeometry ( 0 , 0 , sourceFileView - > width ( ) , sourceFileView - > height ( ) ) ;
}
2011-04-05 14:57:21 +02:00
if ( initialWidth < this - > width ( ) )
{
QPoint prevPos = this - > pos ( ) ;
int delta = ( this - > width ( ) - initialWidth ) > > 2 ;
move ( prevPos . x ( ) - delta , prevPos . y ( ) ) ;
}
2010-11-06 23:04:47 +01:00
}
/*
* Tab action triggered
*/
void MainWindow : : tabActionActivated ( QAction * action )
{
2011-01-03 22:24:58 +01:00
if ( action & & action - > data ( ) . isValid ( ) )
2010-11-06 23:04:47 +01:00
{
2011-01-03 22:24:58 +01:00
bool ok = false ;
int index = action - > data ( ) . toInt ( & ok ) ;
if ( ok )
{
tabWidget - > setCurrentIndex ( index ) ;
}
2010-11-06 23:04:47 +01:00
}
}
2010-11-08 00:24:54 +01:00
/*
* Style action triggered
*/
void MainWindow : : styleActionActivated ( QAction * action )
{
2011-02-11 23:16:11 +01:00
//Change style setting
2011-01-03 22:24:58 +01:00
if ( action & & action - > data ( ) . isValid ( ) )
2010-11-12 21:02:14 +01:00
{
2011-01-03 22:24:58 +01:00
bool ok = false ;
int actionIndex = action - > data ( ) . toInt ( & ok ) ;
2011-02-11 23:16:11 +01:00
if ( ok )
{
m_settings - > interfaceStyle ( actionIndex ) ;
}
2010-11-12 21:02:14 +01:00
}
2011-02-11 23:16:11 +01:00
//Set up the new style
2010-11-12 21:02:14 +01:00
switch ( m_settings - > interfaceStyle ( ) )
{
case 1 :
2011-01-02 20:47:26 +01:00
if ( actionStyleCleanlooks - > isEnabled ( ) )
{
actionStyleCleanlooks - > setChecked ( true ) ;
QApplication : : setStyle ( new QCleanlooksStyle ( ) ) ;
break ;
}
2010-11-12 21:02:14 +01:00
case 2 :
2011-01-02 20:47:26 +01:00
if ( actionStyleWindowsVista - > isEnabled ( ) )
{
actionStyleWindowsVista - > setChecked ( true ) ;
QApplication : : setStyle ( new QWindowsVistaStyle ( ) ) ;
break ;
}
2010-11-12 21:02:14 +01:00
case 3 :
2011-01-02 20:47:26 +01:00
if ( actionStyleWindowsXP - > isEnabled ( ) )
{
actionStyleWindowsXP - > setChecked ( true ) ;
QApplication : : setStyle ( new QWindowsXPStyle ( ) ) ;
break ;
}
2010-11-12 21:02:14 +01:00
case 4 :
2011-01-02 20:47:26 +01:00
if ( actionStyleWindowsClassic - > isEnabled ( ) )
{
actionStyleWindowsClassic - > setChecked ( true ) ;
QApplication : : setStyle ( new QWindowsStyle ( ) ) ;
break ;
}
2010-11-12 21:02:14 +01:00
default :
actionStylePlastique - > setChecked ( true ) ;
QApplication : : setStyle ( new QPlastiqueStyle ( ) ) ;
break ;
}
2011-02-11 23:16:11 +01:00
//Force re-translate after style change
changeEvent ( new QEvent ( QEvent : : LanguageChange ) ) ;
2010-11-08 00:24:54 +01:00
}
2010-12-28 03:57:48 +01:00
/*
* Language action triggered
*/
void MainWindow : : languageActionActivated ( QAction * action )
{
2011-01-06 00:53:52 +01:00
if ( action - > data ( ) . type ( ) = = QVariant : : String )
{
QString langId = action - > data ( ) . toString ( ) ;
if ( lamexp_install_translator ( langId ) )
{
action - > setChecked ( true ) ;
m_settings - > currentLanguage ( langId ) ;
}
}
}
2010-12-30 16:12:21 +01:00
2011-01-06 00:53:52 +01:00
/*
* Load language from file action triggered
*/
void MainWindow : : languageFromFileActionActivated ( bool checked )
{
QFileDialog dialog ( this , tr ( " Load Translation " ) ) ;
dialog . setFileMode ( QFileDialog : : ExistingFile ) ;
dialog . setNameFilter ( QString ( " %1 (*.qm) " ) . arg ( tr ( " Translation Files " ) ) ) ;
if ( dialog . exec ( ) )
2010-12-28 21:26:16 +01:00
{
2011-01-06 00:53:52 +01:00
QStringList selectedFiles = dialog . selectedFiles ( ) ;
if ( lamexp_install_translator_from_file ( selectedFiles . first ( ) ) )
{
QList < QAction * > actions = m_languageActionGroup - > actions ( ) ;
while ( ! actions . isEmpty ( ) )
{
actions . takeFirst ( ) - > setChecked ( false ) ;
}
}
else
{
languageActionActivated ( m_languageActionGroup - > actions ( ) . first ( ) ) ;
}
2010-12-28 21:26:16 +01:00
}
2010-12-28 03:57:48 +01:00
}
2010-11-06 23:04:47 +01:00
/*
2010-12-27 18:31:21 +01:00
* Output folder changed ( mouse clicked )
2010-11-06 23:04:47 +01:00
*/
void MainWindow : : outputFolderViewClicked ( const QModelIndex & index )
{
2010-12-17 01:12:12 +01:00
if ( outputFolderView - > currentIndex ( ) ! = index )
{
outputFolderView - > setCurrentIndex ( index ) ;
}
2010-11-06 23:04:47 +01:00
QString selectedDir = m_fileSystemModel - > filePath ( index ) ;
if ( selectedDir . length ( ) < 3 ) selectedDir . append ( QDir : : separator ( ) ) ;
2010-12-28 03:57:48 +01:00
outputFolderLabel - > setText ( QDir : : toNativeSeparators ( selectedDir ) ) ;
2010-11-20 02:14:22 +01:00
m_settings - > outputDir ( selectedDir ) ;
2010-11-06 23:04:47 +01:00
}
2010-12-27 18:31:21 +01:00
/*
* Output folder changed ( mouse moved )
*/
void MainWindow : : outputFolderViewMoved ( const QModelIndex & index )
{
if ( QApplication : : mouseButtons ( ) & Qt : : LeftButton )
{
outputFolderViewClicked ( index ) ;
}
}
2010-11-06 23:04:47 +01:00
/*
* Goto desktop button
*/
void MainWindow : : gotoDesktopButtonClicked ( void )
{
2010-12-28 03:57:48 +01:00
QString desktopPath = QDesktopServices : : storageLocation ( QDesktopServices : : DesktopLocation ) ;
if ( ! desktopPath . isEmpty ( ) & & QDir ( desktopPath ) . exists ( ) )
{
outputFolderView - > setCurrentIndex ( m_fileSystemModel - > index ( desktopPath ) ) ;
outputFolderViewClicked ( outputFolderView - > currentIndex ( ) ) ;
outputFolderView - > setFocus ( ) ;
}
else
{
buttonGotoDesktop - > setEnabled ( false ) ;
}
2010-11-06 23:04:47 +01:00
}
/*
* Goto home folder button
*/
void MainWindow : : gotoHomeFolderButtonClicked ( void )
{
2010-12-28 03:57:48 +01:00
QString homePath = QDesktopServices : : storageLocation ( QDesktopServices : : HomeLocation ) ;
if ( ! homePath . isEmpty ( ) & & QDir ( homePath ) . exists ( ) )
{
outputFolderView - > setCurrentIndex ( m_fileSystemModel - > index ( homePath ) ) ;
outputFolderViewClicked ( outputFolderView - > currentIndex ( ) ) ;
outputFolderView - > setFocus ( ) ;
}
else
{
buttonGotoHome - > setEnabled ( false ) ;
}
2010-11-06 23:04:47 +01:00
}
/*
* Goto music folder button
*/
void MainWindow : : gotoMusicFolderButtonClicked ( void )
{
2010-12-28 03:57:48 +01:00
QString musicPath = QDesktopServices : : storageLocation ( QDesktopServices : : MusicLocation ) ;
if ( ! musicPath . isEmpty ( ) & & QDir ( musicPath ) . exists ( ) )
{
outputFolderView - > setCurrentIndex ( m_fileSystemModel - > index ( musicPath ) ) ;
outputFolderViewClicked ( outputFolderView - > currentIndex ( ) ) ;
outputFolderView - > setFocus ( ) ;
}
else
{
buttonGotoMusic - > setEnabled ( false ) ;
}
2010-11-06 23:04:47 +01:00
}
/*
* Make folder button
*/
void MainWindow : : makeFolderButtonClicked ( void )
{
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2010-11-25 01:23:48 +01:00
QDir basePath ( m_fileSystemModel - > fileInfo ( outputFolderView - > currentIndex ( ) ) . absoluteFilePath ( ) ) ;
2010-12-28 21:26:16 +01:00
QString suggestedName = tr ( " New Folder " ) ;
2010-11-06 23:04:47 +01:00
2010-12-10 22:57:48 +01:00
if ( ! m_metaData - > fileArtist ( ) . isEmpty ( ) & & ! m_metaData - > fileAlbum ( ) . isEmpty ( ) )
{
suggestedName = QString ( " %1 - %2 " ) . arg ( m_metaData - > fileArtist ( ) , m_metaData - > fileAlbum ( ) ) ;
}
else if ( ! m_metaData - > fileArtist ( ) . isEmpty ( ) )
{
suggestedName = m_metaData - > fileArtist ( ) ;
}
else if ( ! m_metaData - > fileAlbum ( ) . isEmpty ( ) )
{
suggestedName = m_metaData - > fileAlbum ( ) ;
}
else
{
for ( int i = 0 ; i < m_fileListModel - > rowCount ( ) ; i + + )
2010-11-06 23:04:47 +01:00
{
2010-12-10 22:57:48 +01:00
AudioFileModel audioFile = m_fileListModel - > getFile ( m_fileListModel - > index ( i , 0 ) ) ;
if ( ! audioFile . fileAlbum ( ) . isEmpty ( ) | | ! audioFile . fileArtist ( ) . isEmpty ( ) )
2010-11-06 23:04:47 +01:00
{
2010-12-10 22:57:48 +01:00
if ( ! audioFile . fileArtist ( ) . isEmpty ( ) & & ! audioFile . fileAlbum ( ) . isEmpty ( ) )
{
suggestedName = QString ( " %1 - %2 " ) . arg ( audioFile . fileArtist ( ) , audioFile . fileAlbum ( ) ) ;
}
else if ( ! audioFile . fileArtist ( ) . isEmpty ( ) )
{
suggestedName = audioFile . fileArtist ( ) ;
}
else if ( ! audioFile . fileAlbum ( ) . isEmpty ( ) )
{
suggestedName = audioFile . fileAlbum ( ) ;
}
break ;
2010-11-06 23:04:47 +01:00
}
}
2010-12-10 22:57:48 +01:00
}
while ( true )
{
bool bApplied = false ;
2010-12-28 21:26:16 +01:00
QString folderName = QInputDialog : : getText ( this , tr ( " New Folder " ) , tr ( " Enter the name of the new folder: " ) . leftJustified ( 96 , ' ' ) , QLineEdit : : Normal , suggestedName , & bApplied , Qt : : WindowStaysOnTopHint ) . simplified ( ) ;
2010-12-10 22:57:48 +01:00
if ( bApplied )
2010-11-06 23:04:47 +01:00
{
2010-12-10 22:57:48 +01:00
folderName . remove ( " : " , Qt : : CaseInsensitive ) ;
folderName . remove ( " / " , Qt : : CaseInsensitive ) ;
folderName . remove ( " \\ " , Qt : : CaseInsensitive ) ;
folderName . remove ( " ? " , Qt : : CaseInsensitive ) ;
folderName . remove ( " * " , Qt : : CaseInsensitive ) ;
folderName . remove ( " < " , Qt : : CaseInsensitive ) ;
folderName . remove ( " > " , Qt : : CaseInsensitive ) ;
folderName = folderName . simplified ( ) ;
if ( folderName . isEmpty ( ) )
{
MessageBeep ( MB_ICONERROR ) ;
continue ;
}
int i = 1 ;
QString newFolder = folderName ;
while ( basePath . exists ( newFolder ) )
{
newFolder = QString ( folderName ) . append ( QString ( ) . sprintf ( " (%d) " , + + i ) ) ;
}
if ( basePath . mkdir ( newFolder ) )
{
QDir createdDir = basePath ;
if ( createdDir . cd ( newFolder ) )
{
outputFolderView - > setCurrentIndex ( m_fileSystemModel - > index ( createdDir . canonicalPath ( ) ) ) ;
outputFolderViewClicked ( outputFolderView - > currentIndex ( ) ) ;
outputFolderView - > setFocus ( ) ;
}
}
else
{
2010-12-30 17:34:19 +01:00
QMessageBox : : warning ( this , tr ( " Failed to create folder " ) , QString ( " %1<br><nobr>%2</nobr><br><br>%3 " ) . arg ( tr ( " The new folder could not be created: " ) , basePath . absoluteFilePath ( newFolder ) , tr ( " Drive is read-only or insufficient access rights! " ) ) ) ;
2010-12-10 22:57:48 +01:00
}
2010-11-06 23:04:47 +01:00
}
2010-12-10 22:57:48 +01:00
break ;
2010-11-06 23:04:47 +01:00
}
}
2010-11-10 19:44:51 +01:00
/*
* Edit meta button clicked
*/
void MainWindow : : editMetaButtonClicked ( void )
{
ABORT_IF_BUSY ;
2011-02-10 16:08:03 +01:00
const QModelIndex index = metaDataView - > currentIndex ( ) ;
m_metaInfoModel - > editItem ( index , this ) ;
if ( index . row ( ) = = 4 )
{
m_settings - > metaInfoPosition ( m_metaData - > filePosition ( ) ) ;
}
2010-11-10 19:44:51 +01:00
}
/*
* Reset meta button clicked
*/
void MainWindow : : clearMetaButtonClicked ( void )
{
ABORT_IF_BUSY ;
m_metaInfoModel - > clearData ( ) ;
}
2010-11-06 23:04:47 +01:00
/*
* Visit homepage action
*/
void MainWindow : : visitHomepageActionActivated ( void )
{
2011-03-20 14:28:27 +01:00
if ( QAction * action = dynamic_cast < QAction * > ( QObject : : sender ( ) ) )
{
if ( action - > data ( ) . isValid ( ) & & ( action - > data ( ) . type ( ) = = QVariant : : String ) )
{
QDesktopServices : : openUrl ( QUrl ( action - > data ( ) . toString ( ) ) ) ;
}
}
2010-11-06 23:04:47 +01:00
}
2011-03-19 18:16:23 +01:00
/*
* Show document
*/
void MainWindow : : documentActionActivated ( void )
{
if ( QAction * action = dynamic_cast < QAction * > ( QObject : : sender ( ) ) )
{
if ( action - > data ( ) . isValid ( ) & & ( action - > data ( ) . type ( ) = = QVariant : : String ) )
{
QFileInfo document ( action - > data ( ) . toString ( ) ) ;
QFileInfo resource ( QString ( " :/doc/%1.html " ) . arg ( document . baseName ( ) ) ) ;
if ( document . exists ( ) & & document . isFile ( ) & & ( document . size ( ) = = resource . size ( ) ) )
{
2011-03-20 14:28:27 +01:00
QDesktopServices : : openUrl ( QUrl : : fromLocalFile ( document . canonicalFilePath ( ) ) ) ;
2011-03-19 18:16:23 +01:00
}
else
{
QFile source ( resource . filePath ( ) ) ;
QFile output ( QString ( " %1/%2.%3.html " ) . arg ( lamexp_temp_folder2 ( ) , document . baseName ( ) , lamexp_rand_str ( ) . left ( 8 ) ) ) ;
if ( source . open ( QIODevice : : ReadOnly ) & & output . open ( QIODevice : : ReadWrite ) )
{
output . write ( source . readAll ( ) ) ;
action - > setData ( output . fileName ( ) ) ;
source . close ( ) ;
output . close ( ) ;
2011-03-20 14:28:27 +01:00
QDesktopServices : : openUrl ( QUrl : : fromLocalFile ( output . fileName ( ) ) ) ;
2011-03-19 18:16:23 +01:00
}
}
}
}
}
2010-11-06 23:04:47 +01:00
/*
* Check for updates action
*/
void MainWindow : : checkUpdatesActionActivated ( void )
{
2010-11-10 19:44:51 +01:00
ABORT_IF_BUSY ;
2011-02-18 16:29:26 +01:00
bool bFlag = false ;
2011-01-02 21:46:36 +01:00
TEMP_HIDE_DROPBOX
(
2011-02-18 16:29:26 +01:00
bFlag = checkForUpdates ( ) ;
2011-01-02 21:46:36 +01:00
)
2011-02-18 16:29:26 +01:00
if ( bFlag )
{
QApplication : : quit ( ) ;
}
2010-11-06 23:04:47 +01:00
}
2010-11-08 21:47:35 +01:00
/*
* Other instance detected
*/
void MainWindow : : notifyOtherInstance ( void )
{
if ( ! m_banner - > isVisible ( ) )
{
2011-01-02 01:09:05 +01:00
QMessageBox msgBox ( QMessageBox : : Warning , tr ( " Already Running " ) , tr ( " LameXP is already running, please use the running instance! " ) , QMessageBox : : NoButton , this , Qt : : Dialog | Qt : : MSWindowsFixedSizeDialogHint | Qt : : WindowStaysOnTopHint ) ;
2010-11-08 21:47:35 +01:00
msgBox . exec ( ) ;
}
}
/*
* Add file from another instance
*/
void MainWindow : : addFileDelayed ( const QString & filePath )
{
m_delayedFileTimer - > stop ( ) ;
qDebug ( " Received file: %s " , filePath . toUtf8 ( ) . constData ( ) ) ;
m_delayedFileList - > append ( filePath ) ;
m_delayedFileTimer - > start ( 5000 ) ;
}
/*
* Add all pending files
*/
void MainWindow : : handleDelayedFiles ( void )
{
if ( m_banner - > isVisible ( ) )
{
return ;
}
m_delayedFileTimer - > stop ( ) ;
if ( m_delayedFileList - > isEmpty ( ) )
{
return ;
}
QStringList selectedFiles ;
2010-11-10 00:59:50 +01:00
tabWidget - > setCurrentIndex ( 0 ) ;
2010-11-08 21:47:35 +01:00
while ( ! m_delayedFileList - > isEmpty ( ) )
{
2010-11-13 02:11:15 +01:00
QFileInfo currentFile = QFileInfo ( m_delayedFileList - > takeFirst ( ) ) ;
if ( ! currentFile . exists ( ) )
{
continue ;
}
if ( currentFile . isFile ( ) )
{
selectedFiles < < currentFile . canonicalFilePath ( ) ;
continue ;
}
if ( currentFile . isDir ( ) )
{
QList < QFileInfo > list = QDir ( currentFile . canonicalFilePath ( ) ) . entryInfoList ( QDir : : Files ) ;
for ( int j = 0 ; j < list . count ( ) ; j + + )
{
2010-11-15 22:07:46 +01:00
selectedFiles < < list . at ( j ) . canonicalFilePath ( ) ;
2010-11-13 02:11:15 +01:00
}
}
2010-11-08 21:47:35 +01:00
}
2010-11-11 19:37:16 +01:00
addFiles ( selectedFiles ) ;
2010-11-08 21:47:35 +01:00
}
2010-11-11 22:58:02 +01:00
2010-11-15 04:42:06 +01:00
/*
* Update encoder
*/
void MainWindow : : updateEncoder ( int id )
{
m_settings - > compressionEncoder ( id ) ;
switch ( m_settings - > compressionEncoder ( ) )
{
case SettingsModel : : VorbisEncoder :
radioButtonModeQuality - > setEnabled ( true ) ;
radioButtonModeAverageBitrate - > setEnabled ( true ) ;
radioButtonConstBitrate - > setEnabled ( false ) ;
if ( radioButtonConstBitrate - > isChecked ( ) ) radioButtonModeQuality - > setChecked ( true ) ;
sliderBitrate - > setEnabled ( true ) ;
break ;
case SettingsModel : : FLACEncoder :
radioButtonModeQuality - > setEnabled ( false ) ;
radioButtonModeQuality - > setChecked ( true ) ;
radioButtonModeAverageBitrate - > setEnabled ( false ) ;
radioButtonConstBitrate - > setEnabled ( false ) ;
sliderBitrate - > setEnabled ( true ) ;
break ;
case SettingsModel : : PCMEncoder :
radioButtonModeQuality - > setEnabled ( false ) ;
radioButtonModeQuality - > setChecked ( true ) ;
radioButtonModeAverageBitrate - > setEnabled ( false ) ;
radioButtonConstBitrate - > setEnabled ( false ) ;
sliderBitrate - > setEnabled ( false ) ;
break ;
default :
radioButtonModeQuality - > setEnabled ( true ) ;
radioButtonModeAverageBitrate - > setEnabled ( true ) ;
radioButtonConstBitrate - > setEnabled ( true ) ;
sliderBitrate - > setEnabled ( true ) ;
break ;
}
updateRCMode ( m_modeButtonGroup - > checkedId ( ) ) ;
}
/*
* Update rate - control mode
*/
void MainWindow : : updateRCMode ( int id )
{
m_settings - > compressionRCMode ( id ) ;
switch ( m_settings - > compressionEncoder ( ) )
{
case SettingsModel : : MP3Encoder :
switch ( m_settings - > compressionRCMode ( ) )
{
case SettingsModel : : VBRMode :
sliderBitrate - > setMinimum ( 0 ) ;
sliderBitrate - > setMaximum ( 9 ) ;
break ;
default :
2010-11-15 21:07:58 +01:00
sliderBitrate - > setMinimum ( 0 ) ;
sliderBitrate - > setMaximum ( 13 ) ;
2010-11-15 04:42:06 +01:00
break ;
}
break ;
case SettingsModel : : VorbisEncoder :
switch ( m_settings - > compressionRCMode ( ) )
{
case SettingsModel : : VBRMode :
sliderBitrate - > setMinimum ( - 2 ) ;
sliderBitrate - > setMaximum ( 10 ) ;
break ;
default :
sliderBitrate - > setMinimum ( 4 ) ;
sliderBitrate - > setMaximum ( 63 ) ;
break ;
}
break ;
case SettingsModel : : AACEncoder :
switch ( m_settings - > compressionRCMode ( ) )
{
case SettingsModel : : VBRMode :
sliderBitrate - > setMinimum ( 0 ) ;
sliderBitrate - > setMaximum ( 20 ) ;
break ;
default :
sliderBitrate - > setMinimum ( 4 ) ;
sliderBitrate - > setMaximum ( 63 ) ;
break ;
}
break ;
case SettingsModel : : FLACEncoder :
sliderBitrate - > setMinimum ( 0 ) ;
sliderBitrate - > setMaximum ( 8 ) ;
break ;
case SettingsModel : : PCMEncoder :
sliderBitrate - > setMinimum ( 0 ) ;
sliderBitrate - > setMaximum ( 2 ) ;
sliderBitrate - > setValue ( 1 ) ;
break ;
default :
sliderBitrate - > setMinimum ( 0 ) ;
sliderBitrate - > setMaximum ( 0 ) ;
break ;
}
updateBitrate ( sliderBitrate - > value ( ) ) ;
}
2010-11-11 22:58:02 +01:00
/*
* Update bitrate
*/
void MainWindow : : updateBitrate ( int value )
{
2010-11-15 04:42:06 +01:00
m_settings - > compressionBitrate ( value ) ;
switch ( m_settings - > compressionRCMode ( ) )
{
case SettingsModel : : VBRMode :
switch ( m_settings - > compressionEncoder ( ) )
{
case SettingsModel : : MP3Encoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Quality Level %1 " ) . arg ( 9 - value ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : VorbisEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Quality Level %1 " ) . arg ( value ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : AACEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Quality Level %1 " ) . arg ( QString ( ) . sprintf ( " %.2f " , static_cast < double > ( value * 5 ) / 100.0 ) ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : FLACEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Compression %1 " ) . arg ( value ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : PCMEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Uncompressed " ) ) ;
2010-11-15 04:42:06 +01:00
break ;
default :
labelBitrate - > setText ( QString : : number ( value ) ) ;
break ;
}
break ;
case SettingsModel : : ABRMode :
switch ( m_settings - > compressionEncoder ( ) )
{
case SettingsModel : : MP3Encoder :
2010-11-15 21:07:58 +01:00
labelBitrate - > setText ( QString ( " ≈ %1 kbps " ) . arg ( SettingsModel : : mp3Bitrates [ value ] ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : FLACEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Compression %1 " ) . arg ( value ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : PCMEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Uncompressed " ) ) ;
2010-11-15 04:42:06 +01:00
break ;
default :
labelBitrate - > setText ( QString ( " ≈ %1 kbps " ) . arg ( min ( 500 , value * 8 ) ) ) ;
break ;
}
break ;
default :
switch ( m_settings - > compressionEncoder ( ) )
{
case SettingsModel : : MP3Encoder :
2010-11-15 21:07:58 +01:00
labelBitrate - > setText ( QString ( " %1 kbps " ) . arg ( SettingsModel : : mp3Bitrates [ value ] ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : FLACEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Compression %1 " ) . arg ( value ) ) ;
2010-11-15 04:42:06 +01:00
break ;
case SettingsModel : : PCMEncoder :
2010-12-28 21:26:16 +01:00
labelBitrate - > setText ( tr ( " Uncompressed " ) ) ;
2010-11-15 04:42:06 +01:00
break ;
default :
labelBitrate - > setText ( QString ( " %1 kbps " ) . arg ( min ( 500 , value * 8 ) ) ) ;
break ;
}
break ;
}
2010-11-11 22:58:02 +01:00
}
2010-11-20 02:14:22 +01:00
2011-01-21 19:14:11 +01:00
/*
* Lame algorithm quality changed
*/
void MainWindow : : updateLameAlgoQuality ( int value )
{
QString text ;
switch ( value )
{
case 4 :
text = tr ( " Best Quality (Very Slow) " ) ;
break ;
case 3 :
text = tr ( " High Quality (Recommended) " ) ;
break ;
case 2 :
text = tr ( " Average Quality (Default) " ) ;
break ;
case 1 :
text = tr ( " Low Quality (Fast) " ) ;
break ;
case 0 :
text = tr ( " Poor Quality (Very Fast) " ) ;
break ;
}
if ( ! text . isEmpty ( ) )
{
m_settings - > lameAlgoQuality ( value ) ;
labelLameAlgoQuality - > setText ( text ) ;
}
}
2011-01-21 21:41:50 +01:00
/*
* Bitrate management endabled / disabled
*/
void MainWindow : : bitrateManagementEnabledChanged ( bool checked )
{
m_settings - > bitrateManagementEnabled ( checked ) ;
}
/*
* Minimum bitrate has changed
*/
void MainWindow : : bitrateManagementMinChanged ( int value )
{
if ( value > spinBoxBitrateManagementMax - > value ( ) )
{
spinBoxBitrateManagementMin - > setValue ( spinBoxBitrateManagementMax - > value ( ) ) ;
m_settings - > bitrateManagementMinRate ( spinBoxBitrateManagementMax - > value ( ) ) ;
}
else
{
m_settings - > bitrateManagementMinRate ( value ) ;
}
}
/*
* Maximum bitrate has changed
*/
void MainWindow : : bitrateManagementMaxChanged ( int value )
{
if ( value < spinBoxBitrateManagementMin - > value ( ) )
{
spinBoxBitrateManagementMax - > setValue ( spinBoxBitrateManagementMin - > value ( ) ) ;
m_settings - > bitrateManagementMaxRate ( spinBoxBitrateManagementMin - > value ( ) ) ;
}
else
{
m_settings - > bitrateManagementMaxRate ( value ) ;
}
}
2011-01-22 22:19:20 +01:00
/*
* Channel mode has changed
*/
void MainWindow : : channelModeChanged ( int value )
{
if ( value > = 0 ) m_settings - > lameChannelMode ( value ) ;
}
/*
* Sampling rate has changed
*/
void MainWindow : : samplingRateChanged ( int value )
{
if ( value > = 0 ) m_settings - > samplingRate ( value ) ;
}
/*
* Nero AAC 2 - Pass mode changed
*/
void MainWindow : : neroAAC2PassChanged ( bool checked )
{
m_settings - > neroAACEnable2Pass ( checked ) ;
}
/*
* Nero AAC profile mode changed
*/
void MainWindow : : neroAACProfileChanged ( int value )
{
if ( value > = 0 ) m_settings - > neroAACProfile ( value ) ;
}
2011-01-21 21:41:50 +01:00
2011-01-24 01:13:08 +01:00
/*
* Normalization filter enabled changed
*/
void MainWindow : : normalizationEnabledChanged ( bool checked )
{
m_settings - > normalizationFilterEnabled ( checked ) ;
}
/*
* Normalization max . volume changed
*/
void MainWindow : : normalizationMaxVolumeChanged ( double value )
{
m_settings - > normalizationFilterMaxVolume ( static_cast < int > ( value * 100.0 ) ) ;
}
2011-01-26 20:16:46 +01:00
/*
* Tone adjustment has changed ( Bass )
*/
void MainWindow : : toneAdjustBassChanged ( double value )
{
m_settings - > toneAdjustBass ( static_cast < int > ( value * 100.0 ) ) ;
spinBoxToneAdjustBass - > setPrefix ( ( value > 0 ) ? " + " : QString ( ) ) ;
}
/*
* Tone adjustment has changed ( Treble )
*/
void MainWindow : : toneAdjustTrebleChanged ( double value )
{
m_settings - > toneAdjustTreble ( static_cast < int > ( value * 100.0 ) ) ;
spinBoxToneAdjustTreble - > setPrefix ( ( value > 0 ) ? " + " : QString ( ) ) ;
}
/*
* Tone adjustment has been reset
*/
2011-02-09 23:36:17 +01:00
void MainWindow : : toneAdjustTrebleReset ( void )
2011-01-26 20:16:46 +01:00
{
spinBoxToneAdjustBass - > setValue ( m_settings - > toneAdjustBassDefault ( ) ) ;
spinBoxToneAdjustTreble - > setValue ( m_settings - > toneAdjustTrebleDefault ( ) ) ;
toneAdjustBassChanged ( spinBoxToneAdjustBass - > value ( ) ) ;
toneAdjustTrebleChanged ( spinBoxToneAdjustTreble - > value ( ) ) ;
}
2011-02-09 23:36:17 +01:00
/*
* Custom encoder parameters changed
*/
void MainWindow : : customParamsChanged ( void )
{
lineEditCustomParamLAME - > setText ( lineEditCustomParamLAME - > text ( ) . simplified ( ) ) ;
lineEditCustomParamOggEnc - > setText ( lineEditCustomParamOggEnc - > text ( ) . simplified ( ) ) ;
lineEditCustomParamNeroAAC - > setText ( lineEditCustomParamNeroAAC - > text ( ) . simplified ( ) ) ;
lineEditCustomParamFLAC - > setText ( lineEditCustomParamFLAC - > text ( ) . simplified ( ) ) ;
bool customParamsUsed = false ;
if ( ! lineEditCustomParamLAME - > text ( ) . isEmpty ( ) ) customParamsUsed = true ;
if ( ! lineEditCustomParamOggEnc - > text ( ) . isEmpty ( ) ) customParamsUsed = true ;
if ( ! lineEditCustomParamNeroAAC - > text ( ) . isEmpty ( ) ) customParamsUsed = true ;
if ( ! lineEditCustomParamFLAC - > text ( ) . isEmpty ( ) ) customParamsUsed = true ;
labelCustomParamsIcon - > setVisible ( customParamsUsed ) ;
labelCustomParamsText - > setVisible ( customParamsUsed ) ;
labelCustomParamsSpacer - > setVisible ( customParamsUsed ) ;
m_settings - > customParametersLAME ( lineEditCustomParamLAME - > text ( ) ) ;
m_settings - > customParametersOggEnc ( lineEditCustomParamOggEnc - > text ( ) ) ;
m_settings - > customParametersNeroAAC ( lineEditCustomParamNeroAAC - > text ( ) ) ;
m_settings - > customParametersFLAC ( lineEditCustomParamFLAC - > text ( ) ) ;
}
2011-02-25 00:22:18 +01:00
/*
* Maximum number of instances changed
*/
void MainWindow : : updateMaximumInstances ( int value )
{
labelMaxInstances - > setText ( tr ( " %1 Instance(s) " ) . arg ( QString : : number ( value ) ) ) ;
m_settings - > maximumInstances ( checkBoxAutoDetectInstances - > isChecked ( ) ? NULL : value ) ;
}
/*
* Auto - detect number of instances
*/
void MainWindow : : autoDetectInstancesChanged ( bool checked )
{
m_settings - > maximumInstances ( checked ? NULL : sliderMaxInstances - > value ( ) ) ;
}
2011-02-25 22:03:39 +01:00
/*
* Browse for custom TEMP folder button clicked
*/
void MainWindow : : browseCustomTempFolderButtonClicked ( void )
{
QString newTempFolder = QFileDialog : : getExistingDirectory ( this ) ;
if ( ! newTempFolder . isEmpty ( ) )
{
QFile writeTest ( QString ( " %1/~%2.tmp " ) . arg ( newTempFolder , lamexp_rand_str ( ) ) ) ;
if ( writeTest . open ( QIODevice : : ReadWrite ) )
{
writeTest . remove ( ) ;
lineEditCustomTempFolder - > setText ( QDir : : toNativeSeparators ( newTempFolder ) ) ;
}
else
{
QMessageBox : : warning ( this , tr ( " Access Denied " ) , tr ( " Cannot write to the selected directory. Please choose another directory! " ) ) ;
}
}
}
/*
* Custom TEMP folder changed
*/
void MainWindow : : customTempFolderChanged ( const QString & text )
{
m_settings - > customTempPath ( QDir : : fromNativeSeparators ( text ) ) ;
}
/*
* Use custom TEMP folder option changed
*/
void MainWindow : : useCustomTempFolderChanged ( bool checked )
{
m_settings - > customTempPathEnabled ( ! checked ) ;
}
2011-01-23 23:03:44 +01:00
/*
* Reset all advanced options to their defaults
*/
2011-02-09 23:36:17 +01:00
void MainWindow : : resetAdvancedOptionsButtonClicked ( void )
2011-01-23 23:03:44 +01:00
{
sliderLameAlgoQuality - > setValue ( m_settings - > lameAlgoQualityDefault ( ) ) ;
spinBoxBitrateManagementMin - > setValue ( m_settings - > bitrateManagementMinRateDefault ( ) ) ;
spinBoxBitrateManagementMax - > setValue ( m_settings - > bitrateManagementMaxRateDefault ( ) ) ;
2011-01-24 01:13:08 +01:00
spinBoxNormalizationFilter - > setValue ( static_cast < double > ( m_settings - > normalizationFilterMaxVolumeDefault ( ) ) / 100.0 ) ;
2011-01-26 20:16:46 +01:00
spinBoxToneAdjustBass - > setValue ( static_cast < double > ( m_settings - > toneAdjustBassDefault ( ) ) / 100.0 ) ;
spinBoxToneAdjustTreble - > setValue ( static_cast < double > ( m_settings - > toneAdjustTrebleDefault ( ) ) / 100.0 ) ;
2011-01-23 23:03:44 +01:00
comboBoxMP3ChannelMode - > setCurrentIndex ( m_settings - > lameChannelModeDefault ( ) ) ;
comboBoxSamplingRate - > setCurrentIndex ( m_settings - > samplingRateDefault ( ) ) ;
comboBoxNeroAACProfile - > setCurrentIndex ( m_settings - > neroAACProfileDefault ( ) ) ;
while ( checkBoxBitrateManagement - > isChecked ( ) ! = m_settings - > bitrateManagementEnabledDefault ( ) ) checkBoxBitrateManagement - > click ( ) ;
while ( checkBoxNeroAAC2PassMode - > isChecked ( ) ! = m_settings - > neroAACEnable2PassDefault ( ) ) checkBoxNeroAAC2PassMode - > click ( ) ;
2011-01-24 01:13:08 +01:00
while ( checkBoxNormalizationFilter - > isChecked ( ) ! = m_settings - > normalizationFilterEnabledDefault ( ) ) checkBoxNormalizationFilter - > click ( ) ;
2011-02-25 00:22:18 +01:00
while ( checkBoxAutoDetectInstances - > isChecked ( ) ! = ( m_settings - > maximumInstancesDefault ( ) < 1 ) ) checkBoxAutoDetectInstances - > click ( ) ;
2011-02-25 22:03:39 +01:00
while ( checkBoxUseSystemTempFolder - > isChecked ( ) = = m_settings - > customTempPathEnabledDefault ( ) ) checkBoxUseSystemTempFolder - > click ( ) ;
2011-02-09 23:36:17 +01:00
lineEditCustomParamLAME - > setText ( m_settings - > customParametersLAMEDefault ( ) ) ;
lineEditCustomParamOggEnc - > setText ( m_settings - > customParametersOggEncDefault ( ) ) ;
lineEditCustomParamNeroAAC - > setText ( m_settings - > customParametersNeroAACDefault ( ) ) ;
lineEditCustomParamFLAC - > setText ( m_settings - > customParametersFLACDefault ( ) ) ;
2011-02-25 22:03:39 +01:00
lineEditCustomTempFolder - > setText ( QDir : : toNativeSeparators ( m_settings - > customTempPathDefault ( ) ) ) ;
2011-02-09 23:36:17 +01:00
customParamsChanged ( ) ;
2011-01-24 00:04:07 +01:00
scrollArea - > verticalScrollBar ( ) - > setValue ( 0 ) ;
2011-01-23 23:03:44 +01:00
}
2010-11-20 02:14:22 +01:00
/*
* Model reset
*/
2010-11-21 21:51:41 +01:00
void MainWindow : : sourceModelChanged ( void )
2010-11-20 02:14:22 +01:00
{
m_dropNoteLabel - > setVisible ( m_fileListModel - > rowCount ( ) < = 0 ) ;
}
2010-11-20 19:16:04 +01:00
/*
* Meta tags enabled changed
*/
void MainWindow : : metaTagsEnabledChanged ( void )
{
m_settings - > writeMetaTags ( writeMetaDataCheckBox - > isChecked ( ) ) ;
}
2010-11-20 22:14:10 +01:00
/*
* Playlist enabled changed
*/
void MainWindow : : playlistEnabledChanged ( void )
{
m_settings - > createPlaylist ( generatePlaylistCheckBox - > isChecked ( ) ) ;
}
2010-11-21 21:51:41 +01:00
/*
* Output to source dir changed
*/
void MainWindow : : saveToSourceFolderChanged ( void )
{
m_settings - > outputToSourceDir ( saveToSourceFolderCheckBox - > isChecked ( ) ) ;
}
2010-11-24 21:00:59 +01:00
2010-12-14 01:25:13 +01:00
/*
* Prepend relative source file path to output file name changed
*/
void MainWindow : : prependRelativePathChanged ( void )
{
m_settings - > prependRelativeSourcePath ( prependRelativePathCheckBox - > isChecked ( ) ) ;
}
2010-11-24 21:00:59 +01:00
/*
* Restore the override cursor
*/
void MainWindow : : restoreCursor ( void )
{
QApplication : : restoreOverrideCursor ( ) ;
}
2010-11-25 20:41:59 +01:00
/*
* Show context menu for source files
*/
void MainWindow : : sourceFilesContextMenu ( const QPoint & pos )
{
2011-02-14 19:03:36 +01:00
QAbstractScrollArea * scrollArea = dynamic_cast < QAbstractScrollArea * > ( QObject : : sender ( ) ) ;
2011-03-22 17:33:03 +01:00
QWidget * sender = scrollArea ? scrollArea - > viewport ( ) : dynamic_cast < QWidget * > ( QObject : : sender ( ) ) ;
2011-02-14 19:03:36 +01:00
if ( sender )
2010-12-17 01:12:12 +01:00
{
2011-02-14 19:03:36 +01:00
if ( pos . x ( ) < = sender - > width ( ) & & pos . y ( ) < = sender - > height ( ) & & pos . x ( ) > = 0 & & pos . y ( ) > = 0 )
{
m_sourceFilesContextMenu - > popup ( sender - > mapToGlobal ( pos ) ) ;
}
2010-12-17 01:12:12 +01:00
}
2010-11-25 20:41:59 +01:00
}
/*
* Open selected file in external player
*/
void MainWindow : : previewContextActionTriggered ( void )
{
2010-11-26 00:29:53 +01:00
const static char * appNames [ 3 ] = { " smplayer_portable.exe " , " smplayer.exe " , " mplayer.exe " } ;
const static wchar_t * registryKey = L " SOFTWARE \\ Wow6432Node \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall \\ {DB9E4EAB-2717-499F-8D56-4CC8A644AB60} " ;
2010-11-25 20:41:59 +01:00
QModelIndex index = sourceFileView - > currentIndex ( ) ;
2010-11-26 00:29:53 +01:00
if ( ! index . isValid ( ) )
2010-11-25 20:41:59 +01:00
{
2010-11-26 00:29:53 +01:00
return ;
}
QString mplayerPath ;
HKEY registryKeyHandle ;
if ( RegOpenKeyExW ( HKEY_LOCAL_MACHINE , registryKey , 0 , KEY_READ , & registryKeyHandle ) = = ERROR_SUCCESS )
{
wchar_t Buffer [ 4096 ] ;
DWORD BuffSize = sizeof ( wchar_t * ) * 4096 ;
if ( RegQueryValueExW ( registryKeyHandle , L " InstallLocation " , 0 , 0 , reinterpret_cast < BYTE * > ( Buffer ) , & BuffSize ) = = ERROR_SUCCESS )
{
mplayerPath = QString : : fromUtf16 ( reinterpret_cast < const unsigned short * > ( Buffer ) ) ;
}
2010-11-25 20:41:59 +01:00
}
2010-11-26 00:29:53 +01:00
if ( ! mplayerPath . isEmpty ( ) )
{
QDir mplayerDir ( mplayerPath ) ;
if ( mplayerDir . exists ( ) )
{
for ( int i = 0 ; i < 3 ; i + + )
{
if ( mplayerDir . exists ( appNames [ i ] ) )
{
QProcess : : startDetached ( mplayerDir . absoluteFilePath ( appNames [ i ] ) , QStringList ( ) < < QDir : : toNativeSeparators ( m_fileListModel - > getFile ( index ) . filePath ( ) ) ) ;
return ;
}
}
}
}
QDesktopServices : : openUrl ( QString ( " file:/// " ) . append ( m_fileListModel - > getFile ( index ) . filePath ( ) ) ) ;
2010-11-25 20:41:59 +01:00
}
/*
* Find selected file in explorer
*/
void MainWindow : : findFileContextActionTriggered ( void )
{
QModelIndex index = sourceFileView - > currentIndex ( ) ;
if ( index . isValid ( ) )
{
2011-01-01 19:28:19 +01:00
QString systemRootPath ;
QDir systemRoot ( lamexp_known_folder ( lamexp_folder_systemfolder ) ) ;
if ( systemRoot . exists ( ) & & systemRoot . cdUp ( ) )
{
systemRootPath = systemRoot . canonicalPath ( ) ;
}
2010-11-25 20:41:59 +01:00
if ( ! systemRootPath . isEmpty ( ) )
{
QFileInfo explorer ( QString ( " %1/explorer.exe " ) . arg ( systemRootPath ) ) ;
if ( explorer . exists ( ) & & explorer . isFile ( ) )
{
QProcess : : execute ( explorer . canonicalFilePath ( ) , QStringList ( ) < < " /select, " < < QDir : : toNativeSeparators ( m_fileListModel - > getFile ( index ) . filePath ( ) ) ) ;
return ;
}
}
2011-01-01 19:28:19 +01:00
else
{
qWarning ( " SystemRoot directory could not be detected! " ) ;
}
2010-11-25 20:41:59 +01:00
}
}
2010-11-29 20:36:27 +01:00
2010-12-05 23:11:03 +01:00
/*
* Show context menu for output folder
*/
void MainWindow : : outputFolderContextMenu ( const QPoint & pos )
{
2011-02-14 19:03:36 +01:00
QAbstractScrollArea * scrollArea = dynamic_cast < QAbstractScrollArea * > ( QObject : : sender ( ) ) ;
QWidget * sender = scrollArea ? scrollArea - > viewport ( ) : dynamic_cast < QWidget * > ( QObject : : sender ( ) ) ;
if ( pos . x ( ) < = sender - > width ( ) & & pos . y ( ) < = sender - > height ( ) & & pos . x ( ) > = 0 & & pos . y ( ) > = 0 )
2010-12-17 01:12:12 +01:00
{
2011-02-14 19:03:36 +01:00
m_outputFolderContextMenu - > popup ( sender - > mapToGlobal ( pos ) ) ;
2010-12-17 01:12:12 +01:00
}
2010-12-05 23:11:03 +01:00
}
/*
* Show selected folder in explorer
*/
void MainWindow : : showFolderContextActionTriggered ( void )
{
QDesktopServices : : openUrl ( QUrl : : fromLocalFile ( m_fileSystemModel - > filePath ( outputFolderView - > currentIndex ( ) ) ) ) ;
}
2010-11-29 20:36:27 +01:00
/*
* Disable update reminder action
*/
void MainWindow : : disableUpdateReminderActionTriggered ( bool checked )
{
if ( checked )
{
2011-01-02 20:47:26 +01:00
if ( 0 = = QMessageBox : : question ( this , tr ( " Disable Update Reminder " ) , tr ( " Do you really want to disable the update reminder? " ) , tr ( " Yes " ) , tr ( " No " ) , QString ( ) , 1 ) )
2010-11-29 20:36:27 +01:00
{
2010-12-30 17:34:19 +01:00
QMessageBox : : information ( this , tr ( " Update Reminder " ) , QString ( " %1<br>%2 " ) . arg ( tr ( " The update reminder has been disabled. " ) , tr ( " Please remember to check for updates at regular intervals! " ) ) ) ;
2010-11-29 20:36:27 +01:00
m_settings - > autoUpdateEnabled ( false ) ;
}
else
{
m_settings - > autoUpdateEnabled ( true ) ;
}
}
else
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " Update Reminder " ) , tr ( " The update reminder has been re-enabled. " ) ) ;
2010-11-29 20:36:27 +01:00
m_settings - > autoUpdateEnabled ( true ) ;
}
actionDisableUpdateReminder - > setChecked ( ! m_settings - > autoUpdateEnabled ( ) ) ;
}
/*
* Disable sound effects action
*/
void MainWindow : : disableSoundsActionTriggered ( bool checked )
{
if ( checked )
{
2011-01-02 20:47:26 +01:00
if ( 0 = = QMessageBox : : question ( this , tr ( " Disable Sound Effects " ) , tr ( " Do you really want to disable all sound effects? " ) , tr ( " Yes " ) , tr ( " No " ) , QString ( ) , 1 ) )
2010-11-29 20:36:27 +01:00
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " Sound Effects " ) , tr ( " All sound effects have been disabled. " ) ) ;
2010-11-29 20:36:27 +01:00
m_settings - > soundsEnabled ( false ) ;
}
else
{
m_settings - > soundsEnabled ( true ) ;
}
}
else
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " Sound Effects " ) , tr ( " The sound effects have been re-enabled. " ) ) ;
2010-11-29 20:36:27 +01:00
m_settings - > soundsEnabled ( true ) ;
}
actionDisableSounds - > setChecked ( ! m_settings - > soundsEnabled ( ) ) ;
}
2010-12-12 01:49:07 +01:00
2010-12-19 21:23:43 +01:00
/*
* Disable Nero AAC encoder action
*/
void MainWindow : : disableNeroAacNotificationsActionTriggered ( bool checked )
{
if ( checked )
{
2011-01-02 20:47:26 +01:00
if ( 0 = = QMessageBox : : question ( this , tr ( " Nero AAC Notifications " ) , tr ( " Do you really want to disable all Nero AAC Encoder notifications? " ) , tr ( " Yes " ) , tr ( " No " ) , QString ( ) , 1 ) )
2010-12-19 21:23:43 +01:00
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " Nero AAC Notifications " ) , tr ( " All Nero AAC Encoder notifications have been disabled. " ) ) ;
2010-12-19 21:23:43 +01:00
m_settings - > neroAacNotificationsEnabled ( false ) ;
}
else
{
m_settings - > neroAacNotificationsEnabled ( true ) ;
}
}
else
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " Nero AAC Notifications " ) , tr ( " The Nero AAC Encoder notifications have been re-enabled. " ) ) ;
2010-12-19 21:23:43 +01:00
m_settings - > neroAacNotificationsEnabled ( true ) ;
}
actionDisableNeroAacNotifications - > setChecked ( ! m_settings - > neroAacNotificationsEnabled ( ) ) ;
}
/*
* Disable WMA Decoder component action
*/
void MainWindow : : disableWmaDecoderNotificationsActionTriggered ( bool checked )
{
if ( checked )
{
2011-01-02 20:47:26 +01:00
if ( 0 = = QMessageBox : : question ( this , tr ( " WMA Decoder Notifications " ) , tr ( " Do you really want to disable all WMA Decoder notifications? " ) , tr ( " Yes " ) , tr ( " No " ) , QString ( ) , 1 ) )
2010-12-19 21:23:43 +01:00
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " WMA Decoder Notifications " ) , tr ( " All WMA Decoder notifications have been disabled. " ) ) ;
2010-12-19 21:23:43 +01:00
m_settings - > wmaDecoderNotificationsEnabled ( false ) ;
}
else
{
m_settings - > wmaDecoderNotificationsEnabled ( true ) ;
}
}
else
{
2010-12-28 21:26:16 +01:00
QMessageBox : : information ( this , tr ( " WMA Decoder Notifications " ) , tr ( " The WMA Decoder notifications have been re-enabled. " ) ) ;
2010-12-19 21:23:43 +01:00
m_settings - > wmaDecoderNotificationsEnabled ( true ) ;
}
actionDisableWmaDecoderNotifications - > setChecked ( ! m_settings - > wmaDecoderNotificationsEnabled ( ) ) ;
}
/*
* Download and install WMA Decoder component
*/
2010-12-12 01:49:07 +01:00
void MainWindow : : installWMADecoderActionTriggered ( bool checked )
{
2011-01-29 00:40:29 +01:00
if ( QMessageBox : : question ( this , tr ( " Install WMA Decoder " ) , tr ( " Do you want to download and install the WMA File Decoder component now? " ) , tr ( " Download && Install " ) , tr ( " Cancel " ) ) = = 0 )
2010-12-12 01:49:07 +01:00
{
2011-02-18 00:53:36 +01:00
if ( installWMADecoder ( ) )
{
QApplication : : quit ( ) ;
return ;
}
2010-12-12 01:49:07 +01:00
}
2011-01-29 00:40:29 +01:00
}
2010-12-12 01:49:07 +01:00
2011-01-29 00:40:29 +01:00
/*
* Show the " drop box " widget
*/
void MainWindow : : showDropBoxWidgetActionTriggered ( bool checked )
{
m_settings - > dropBoxWidgetEnabled ( true ) ;
2010-12-12 01:49:07 +01:00
2011-01-29 00:40:29 +01:00
if ( ! m_dropBox - > isVisible ( ) )
2010-12-12 01:49:07 +01:00
{
2011-01-29 00:40:29 +01:00
m_dropBox - > show ( ) ;
2010-12-12 01:49:07 +01:00
}
2011-01-29 00:40:29 +01:00
FLASH_WINDOW ( m_dropBox ) ;
}
2010-12-12 01:49:07 +01:00
2011-01-29 00:40:29 +01:00
/*
* Disable shell integration action
*/
void MainWindow : : disableShellIntegrationActionTriggered ( bool checked )
{
if ( checked )
2010-12-12 13:44:11 +01:00
{
2011-01-29 00:40:29 +01:00
if ( 0 = = QMessageBox : : question ( this , tr ( " Shell Integration " ) , tr ( " Do you really want to disable the LameXP shell integration? " ) , tr ( " Yes " ) , tr ( " No " ) , QString ( ) , 1 ) )
2010-12-12 13:44:11 +01:00
{
2011-01-29 00:40:29 +01:00
ShellIntegration : : remove ( ) ;
QMessageBox : : information ( this , tr ( " Shell Integration " ) , tr ( " The LameXP shell integration has been disabled. " ) ) ;
m_settings - > shellIntegrationEnabled ( false ) ;
2010-12-12 13:44:11 +01:00
}
2011-01-29 00:40:29 +01:00
else
2010-12-12 19:25:06 +01:00
{
2011-01-29 00:40:29 +01:00
m_settings - > shellIntegrationEnabled ( true ) ;
2010-12-12 19:25:06 +01:00
}
2010-12-12 13:44:11 +01:00
}
2011-01-29 00:40:29 +01:00
else
2010-12-22 01:01:01 +01:00
{
2011-01-29 00:40:29 +01:00
ShellIntegration : : install ( ) ;
QMessageBox : : information ( this , tr ( " Shell Integration " ) , tr ( " The LameXP shell integration has been re-enabled. " ) ) ;
m_settings - > shellIntegrationEnabled ( true ) ;
2010-12-22 01:01:01 +01:00
}
2011-01-29 00:40:29 +01:00
actionDisableShellIntegration - > setChecked ( ! m_settings - > shellIntegrationEnabled ( ) ) ;
2011-01-29 21:57:53 +01:00
if ( lamexp_portable_mode ( ) & & actionDisableShellIntegration - > isChecked ( ) )
{
actionDisableShellIntegration - > setEnabled ( false ) ;
}
2010-12-22 01:01:01 +01:00
}