| 1 | /* smplayer, GUI front-end for mplayer.
|
|---|
| 2 | Copyright (C) 2006-2012 Ricardo Villalba <[email protected]>
|
|---|
| 3 |
|
|---|
| 4 | This program is free software; you can redistribute it and/or modify
|
|---|
| 5 | it under the terms of the GNU General Public License as published by
|
|---|
| 6 | the Free Software Foundation; either version 2 of the License, or
|
|---|
| 7 | (at your option) any later version.
|
|---|
| 8 |
|
|---|
| 9 | This program is distributed in the hope that it will be useful,
|
|---|
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|---|
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|---|
| 12 | GNU General Public License for more details.
|
|---|
| 13 |
|
|---|
| 14 | You should have received a copy of the GNU General Public License
|
|---|
| 15 | along with this program; if not, write to the Free Software
|
|---|
| 16 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|---|
| 17 | */
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 | #include "prefgeneral.h"
|
|---|
| 21 | #include "preferences.h"
|
|---|
| 22 | #include "filedialog.h"
|
|---|
| 23 | #include "images.h"
|
|---|
| 24 | #include "mediasettings.h"
|
|---|
| 25 | #include "paths.h"
|
|---|
| 26 | #include "vdpauproperties.h"
|
|---|
| 27 |
|
|---|
| 28 | #if USE_ALSA_DEVICES || USE_DSOUND_DEVICES
|
|---|
| 29 | #include "deviceinfo.h"
|
|---|
| 30 | #endif
|
|---|
| 31 |
|
|---|
| 32 | PrefGeneral::PrefGeneral(QWidget * parent, Qt::WindowFlags f)
|
|---|
| 33 | : PrefWidget(parent, f )
|
|---|
| 34 | {
|
|---|
| 35 | setupUi(this);
|
|---|
| 36 |
|
|---|
| 37 | mplayerbin_edit->setDialogType(FileChooser::GetFileName);
|
|---|
| 38 | screenshot_edit->setDialogType(FileChooser::GetDirectory);
|
|---|
| 39 |
|
|---|
| 40 | // Read driver info from InfoReader:
|
|---|
| 41 | InfoReader * i = InfoReader::obj();
|
|---|
| 42 | vo_list = i->voList();
|
|---|
| 43 | ao_list = i->aoList();
|
|---|
| 44 |
|
|---|
| 45 | #if USE_DSOUND_DEVICES
|
|---|
| 46 | dsound_devices = DeviceInfo::dsoundDevices();
|
|---|
| 47 | #endif
|
|---|
| 48 |
|
|---|
| 49 | #if USE_ALSA_DEVICES
|
|---|
| 50 | alsa_devices = DeviceInfo::alsaDevices();
|
|---|
| 51 | #endif
|
|---|
| 52 | #if USE_XV_ADAPTORS
|
|---|
| 53 | xv_adaptors = DeviceInfo::xvAdaptors();
|
|---|
| 54 | #endif
|
|---|
| 55 |
|
|---|
| 56 | // Screensaver
|
|---|
| 57 | #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
|
|---|
| 58 | screensaver_check->hide();
|
|---|
| 59 | #else
|
|---|
| 60 | screensaver_group->hide();
|
|---|
| 61 | #endif
|
|---|
| 62 |
|
|---|
| 63 | #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
|
|---|
| 64 | vdpau_button->hide();
|
|---|
| 65 | #endif
|
|---|
| 66 |
|
|---|
| 67 | // Channels combo
|
|---|
| 68 | channels_combo->addItem( "2", MediaSettings::ChStereo );
|
|---|
| 69 | channels_combo->addItem( "4", MediaSettings::ChSurround );
|
|---|
| 70 | channels_combo->addItem( "6", MediaSettings::ChFull51 );
|
|---|
| 71 | channels_combo->addItem( "7", MediaSettings::ChFull61 );
|
|---|
| 72 | channels_combo->addItem( "8", MediaSettings::ChFull71 );
|
|---|
| 73 |
|
|---|
| 74 | connect(vo_combo, SIGNAL(currentIndexChanged(int)),
|
|---|
| 75 | this, SLOT(vo_combo_changed(int)));
|
|---|
| 76 | connect(ao_combo, SIGNAL(currentIndexChanged(int)),
|
|---|
| 77 | this, SLOT(ao_combo_changed(int)));
|
|---|
| 78 |
|
|---|
| 79 | retranslateStrings();
|
|---|
| 80 | }
|
|---|
| 81 |
|
|---|
| 82 | PrefGeneral::~PrefGeneral()
|
|---|
| 83 | {
|
|---|
| 84 | }
|
|---|
| 85 |
|
|---|
| 86 | QString PrefGeneral::sectionName() {
|
|---|
| 87 | return tr("General");
|
|---|
| 88 | }
|
|---|
| 89 |
|
|---|
| 90 | QPixmap PrefGeneral::sectionIcon() {
|
|---|
| 91 | return Images::icon("pref_general", 22);
|
|---|
| 92 | }
|
|---|
| 93 |
|
|---|
| 94 | void PrefGeneral::retranslateStrings() {
|
|---|
| 95 | retranslateUi(this);
|
|---|
| 96 |
|
|---|
| 97 | channels_combo->setItemText(0, tr("2 (Stereo)") );
|
|---|
| 98 | channels_combo->setItemText(1, tr("4 (4.0 Surround)") );
|
|---|
| 99 | channels_combo->setItemText(2, tr("6 (5.1 Surround)") );
|
|---|
| 100 | channels_combo->setItemText(3, tr("7 (6.1 Surround)") );
|
|---|
| 101 | channels_combo->setItemText(4, tr("8 (7.1 Surround)") );
|
|---|
| 102 |
|
|---|
| 103 | int deinterlace_item = deinterlace_combo->currentIndex();
|
|---|
| 104 | deinterlace_combo->clear();
|
|---|
| 105 | deinterlace_combo->addItem( tr("None"), MediaSettings::NoDeinterlace );
|
|---|
| 106 | deinterlace_combo->addItem( tr("Lowpass5"), MediaSettings::L5 );
|
|---|
| 107 | deinterlace_combo->addItem( tr("Yadif (normal)"), MediaSettings::Yadif );
|
|---|
| 108 | deinterlace_combo->addItem( tr("Yadif (double framerate)"), MediaSettings::Yadif_1 );
|
|---|
| 109 | deinterlace_combo->addItem( tr("Linear Blend"), MediaSettings::LB );
|
|---|
| 110 | deinterlace_combo->addItem( tr("Kerndeint"), MediaSettings::Kerndeint );
|
|---|
| 111 | deinterlace_combo->setCurrentIndex(deinterlace_item);
|
|---|
| 112 |
|
|---|
| 113 | int filesettings_method_item = filesettings_method_combo->currentIndex();
|
|---|
| 114 | filesettings_method_combo->clear();
|
|---|
| 115 | filesettings_method_combo->addItem( tr("one ini file"), "normal");
|
|---|
| 116 | filesettings_method_combo->addItem( tr("multiple ini files"), "hash");
|
|---|
| 117 | filesettings_method_combo->setCurrentIndex(filesettings_method_item);
|
|---|
| 118 |
|
|---|
| 119 | updateDriverCombos();
|
|---|
| 120 |
|
|---|
| 121 | // Icons
|
|---|
| 122 | /*
|
|---|
| 123 | resize_window_icon->setPixmap( Images::icon("resize_window") );
|
|---|
| 124 | volume_icon->setPixmap( Images::icon("speaker") );
|
|---|
| 125 | */
|
|---|
| 126 |
|
|---|
| 127 | mplayerbin_edit->setCaption(tr("Select the mplayer executable"));
|
|---|
| 128 | #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
|
|---|
| 129 | mplayerbin_edit->setFilter(tr("Executables") +" (*.exe)");
|
|---|
| 130 | #else
|
|---|
| 131 | mplayerbin_edit->setFilter(tr("All files") +" (*)");
|
|---|
| 132 | #endif
|
|---|
| 133 | screenshot_edit->setCaption(tr("Select a directory"));
|
|---|
| 134 |
|
|---|
| 135 | preferred_desc->setText(
|
|---|
| 136 | tr("Here you can type your preferred language for the audio "
|
|---|
| 137 | "and subtitle streams. When a media with multiple audio or "
|
|---|
| 138 | "subtitle streams is found, SMPlayer will try to use your "
|
|---|
| 139 | "preferred language. This only will work with media that offer "
|
|---|
| 140 | "info about the language of audio and subtitle streams, like DVDs "
|
|---|
| 141 | "or mkv files.<br>These fields accept regular expressions. "
|
|---|
| 142 | "Example: <b>es|esp|spa</b> will select the track if it matches with "
|
|---|
| 143 | "<i>es</i>, <i>esp</i> or <i>spa</i>."));
|
|---|
| 144 |
|
|---|
| 145 | createHelp();
|
|---|
| 146 | }
|
|---|
| 147 |
|
|---|
| 148 | void PrefGeneral::setData(Preferences * pref) {
|
|---|
| 149 | setMplayerPath( pref->mplayer_bin );
|
|---|
| 150 |
|
|---|
| 151 | setUseScreenshots( pref->use_screenshot );
|
|---|
| 152 | setScreenshotDir( pref->screenshot_directory );
|
|---|
| 153 |
|
|---|
| 154 | QString vo = pref->vo;
|
|---|
| 155 | if (vo.isEmpty()) {
|
|---|
| 156 | #ifdef Q_OS_WIN
|
|---|
| 157 | if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA) {
|
|---|
| 158 | vo = "direct3d,";
|
|---|
| 159 | } else {
|
|---|
| 160 | vo = "directx,";
|
|---|
| 161 | }
|
|---|
| 162 | #else
|
|---|
| 163 | #ifdef Q_OS_OS2
|
|---|
| 164 | vo = "kva";
|
|---|
| 165 | #else
|
|---|
| 166 | vo = "xv,";
|
|---|
| 167 | #endif
|
|---|
| 168 | #endif
|
|---|
| 169 | }
|
|---|
| 170 | setVO( vo );
|
|---|
| 171 |
|
|---|
| 172 | QString ao = pref->ao;
|
|---|
| 173 |
|
|---|
| 174 | #ifdef Q_OS_OS2
|
|---|
| 175 | if (ao.isEmpty()) {
|
|---|
| 176 | if (pref->mplayer_detected_version >= MPLAYER_KAI_VERSION) {
|
|---|
| 177 | ao = "kai";
|
|---|
| 178 | } else {
|
|---|
| 179 | ao = "dart";
|
|---|
| 180 | }
|
|---|
| 181 | }
|
|---|
| 182 | #endif
|
|---|
| 183 |
|
|---|
| 184 | setAO( ao );
|
|---|
| 185 |
|
|---|
| 186 | setRememberSettings( !pref->dont_remember_media_settings );
|
|---|
| 187 | setRememberTimePos( !pref->dont_remember_time_pos );
|
|---|
| 188 | setFileSettingsMethod( pref->file_settings_method );
|
|---|
| 189 | setAudioLang( pref->audio_lang );
|
|---|
| 190 | setSubtitleLang( pref->subtitle_lang );
|
|---|
| 191 | setAudioTrack( pref->initial_audio_track );
|
|---|
| 192 | setSubtitleTrack( pref->initial_subtitle_track );
|
|---|
| 193 | setCloseOnFinish( pref->close_on_finish );
|
|---|
| 194 | setPauseWhenHidden( pref->pause_when_hidden );
|
|---|
| 195 |
|
|---|
| 196 | setEq2( pref->use_soft_video_eq );
|
|---|
| 197 | setUseAudioEqualizer( pref->use_audio_equalizer );
|
|---|
| 198 | setGlobalVolume( pref->global_volume );
|
|---|
| 199 | setSoftVol( pref->use_soft_vol );
|
|---|
| 200 | setAc3DTSPassthrough( pref->use_hwac3 );
|
|---|
| 201 | setInitialVolNorm( pref->initial_volnorm );
|
|---|
| 202 | setAmplification( pref->softvol_max );
|
|---|
| 203 | setInitialPostprocessing( pref->initial_postprocessing );
|
|---|
| 204 | setInitialDeinterlace( pref->initial_deinterlace );
|
|---|
| 205 | setInitialZoom( pref->initial_zoom_factor );
|
|---|
| 206 | setDirectRendering( pref->use_direct_rendering );
|
|---|
| 207 | setDoubleBuffer( pref->use_double_buffer );
|
|---|
| 208 | setUseSlices( pref->use_slices );
|
|---|
| 209 | setStartInFullscreen( pref->start_in_fullscreen );
|
|---|
| 210 | setBlackbordersOnFullscreen( pref->add_blackborders_on_fullscreen );
|
|---|
| 211 | setAutoq( pref->autoq );
|
|---|
| 212 |
|
|---|
| 213 | #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
|
|---|
| 214 | setAvoidScreensaver( pref->avoid_screensaver );
|
|---|
| 215 | setTurnScreensaverOff( pref->turn_screensaver_off );
|
|---|
| 216 | #else
|
|---|
| 217 | setDisableScreensaver( pref->disable_screensaver );
|
|---|
| 218 | #endif
|
|---|
| 219 |
|
|---|
| 220 | #if !defined(Q_OS_WIN) && !defined(Q_OS_OS2)
|
|---|
| 221 | vdpau = pref->vdpau;
|
|---|
| 222 | #endif
|
|---|
| 223 |
|
|---|
| 224 | setAudioChannels( pref->initial_audio_channels );
|
|---|
| 225 | setScaleTempoFilter( pref->use_scaletempo );
|
|---|
| 226 |
|
|---|
| 227 | setAutoSyncActivated( pref->autosync );
|
|---|
| 228 | setAutoSyncFactor( pref->autosync_factor );
|
|---|
| 229 |
|
|---|
| 230 | setMcActivated( pref->use_mc );
|
|---|
| 231 | setMc( pref->mc_value );
|
|---|
| 232 | }
|
|---|
| 233 |
|
|---|
| 234 | void PrefGeneral::getData(Preferences * pref) {
|
|---|
| 235 | requires_restart = false;
|
|---|
| 236 | filesettings_method_changed = false;
|
|---|
| 237 |
|
|---|
| 238 | if (pref->mplayer_bin != mplayerPath()) {
|
|---|
| 239 | requires_restart = true;
|
|---|
| 240 | pref->mplayer_bin = mplayerPath();
|
|---|
| 241 |
|
|---|
| 242 | qDebug("PrefGeneral::getData: mplayer binary has changed, getting version number");
|
|---|
| 243 | // Forces to get info from mplayer to update version number
|
|---|
| 244 | InfoReader i( pref->mplayer_bin );
|
|---|
| 245 | i.getInfo();
|
|---|
| 246 | // Update the drivers list at the same time
|
|---|
| 247 | //setDrivers( i.voList(), i.aoList() );
|
|---|
| 248 | #ifdef Q_OS_OS2
|
|---|
| 249 | vo_list = i.voList();
|
|---|
| 250 | ao_list = i.aoList();
|
|---|
| 251 | updateDriverCombos();
|
|---|
| 252 | #endif
|
|---|
| 253 | }
|
|---|
| 254 |
|
|---|
| 255 | TEST_AND_SET(pref->use_screenshot, useScreenshots());
|
|---|
| 256 | TEST_AND_SET(pref->screenshot_directory, screenshotDir());
|
|---|
| 257 | TEST_AND_SET(pref->vo, VO());
|
|---|
| 258 | TEST_AND_SET(pref->ao, AO());
|
|---|
| 259 |
|
|---|
| 260 | bool dont_remember_ms = !rememberSettings();
|
|---|
| 261 | TEST_AND_SET(pref->dont_remember_media_settings, dont_remember_ms);
|
|---|
| 262 |
|
|---|
| 263 | bool dont_remember_time = !rememberTimePos();
|
|---|
| 264 | TEST_AND_SET(pref->dont_remember_time_pos, dont_remember_time);
|
|---|
| 265 |
|
|---|
| 266 | if (pref->file_settings_method != fileSettingsMethod()) {
|
|---|
| 267 | pref->file_settings_method = fileSettingsMethod();
|
|---|
| 268 | filesettings_method_changed = true;
|
|---|
| 269 | }
|
|---|
| 270 |
|
|---|
| 271 | pref->audio_lang = audioLang();
|
|---|
| 272 | pref->subtitle_lang = subtitleLang();
|
|---|
| 273 |
|
|---|
| 274 | pref->initial_audio_track = audioTrack();
|
|---|
| 275 | pref->initial_subtitle_track = subtitleTrack();
|
|---|
| 276 |
|
|---|
| 277 | pref->close_on_finish = closeOnFinish();
|
|---|
| 278 | pref->pause_when_hidden = pauseWhenHidden();
|
|---|
| 279 |
|
|---|
| 280 | TEST_AND_SET(pref->use_soft_video_eq, eq2());
|
|---|
| 281 | TEST_AND_SET(pref->use_soft_vol, softVol());
|
|---|
| 282 | pref->global_volume = globalVolume();
|
|---|
| 283 | TEST_AND_SET(pref->use_audio_equalizer, useAudioEqualizer());
|
|---|
| 284 | TEST_AND_SET(pref->use_hwac3, Ac3DTSPassthrough());
|
|---|
| 285 | pref->initial_volnorm = initialVolNorm();
|
|---|
| 286 | TEST_AND_SET(pref->softvol_max, amplification());
|
|---|
| 287 | pref->initial_postprocessing = initialPostprocessing();
|
|---|
| 288 | pref->initial_deinterlace = initialDeinterlace();
|
|---|
| 289 | pref->initial_zoom_factor = initialZoom();
|
|---|
| 290 | TEST_AND_SET(pref->use_direct_rendering, directRendering());
|
|---|
| 291 | TEST_AND_SET(pref->use_double_buffer, doubleBuffer());
|
|---|
| 292 | TEST_AND_SET(pref->use_slices, useSlices());
|
|---|
| 293 | pref->start_in_fullscreen = startInFullscreen();
|
|---|
| 294 | if (pref->add_blackborders_on_fullscreen != blackbordersOnFullscreen()) {
|
|---|
| 295 | pref->add_blackborders_on_fullscreen = blackbordersOnFullscreen();
|
|---|
| 296 | if (pref->fullscreen) requires_restart = true;
|
|---|
| 297 | }
|
|---|
| 298 | TEST_AND_SET(pref->autoq, autoq());
|
|---|
| 299 |
|
|---|
|
|---|