/** * Copyright (C) 2002-2003 by Koos Vriezen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License version 2 as published by the Free Software Foundation. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor, * Boston, MA 02110-1301, USA. **/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "kmplayersource.h" #include "kmplayerconfig.h" #include "kmplayerpartbase.h" #include "kmplayerprocess.h" #include "playlistview.h" #include "viewarea.h" #include "pref.h" using namespace KMPlayer; static OutputDriver _ads[] = { { "alsa,oss,sdl,arts", i18n ("Auto") }, { "oss", i18n ("Open Sound System") }, { "sdl", i18n ("Simple DirectMedia Layer") }, { "alsa", i18n ("Advanced Linux Sound Architecture") }, { "arts", i18n ("Analog Real-Time Synthesizer") }, { "jack", i18n ("JACK Audio Connection Kit") }, { "openal", i18n ("OpenAL") }, { "esd", i18n ("Enlightened Sound Daemon") }, { "alsa5", i18n ("Advanced Linux Sound Architecture v0.5") }, { "alsa9", i18n ("Advanced Linux Sound Architecture v0.9") }, { "", i18n ("Use back-end defaults") }, { 0, TQString () } }; static OutputDriver _vds [] = { { "xv,sdl,x11", i18n ("Auto") }, { "x11", i18n ("X11Shm") }, { "xvidix", i18n ("XVidix") }, { "xvmc,xv", i18n ("XvMC") }, { "sdl", i18n ("SDL") }, { "gl", i18n ("OpenGL") }, { "gl2", i18n ("OpenGL MT") }, { "xv", i18n ("XVideo") }, { 0, TQString () } }; static const int ADRIVER_ARTS_INDEX = 4; KDE_NO_CDTOR_EXPORT Settings::Settings (PartBase * player, TDEConfig * config) : pagelist (0L), configdialog (0L), m_config (config), m_player (player) { audiodrivers = _ads; videodrivers = _vds; colors [ColorSetting::playlist_background].title = i18n ("Playlist background"); colors [ColorSetting::playlist_background].option = "PlaylistBackground"; colors [ColorSetting::playlist_background].color = TDEGlobalSettings::baseColor (); colors [ColorSetting::playlist_foreground].title = i18n ("Playlist foreground"); colors [ColorSetting::playlist_foreground].option = "PlaylistForeground"; colors [ColorSetting::playlist_foreground].color = TDEGlobalSettings::textColor(); colors [ColorSetting::console_background].title =i18n("Console background"); colors [ColorSetting::playlist_active].title = i18n("Playlist active item"); colors [ColorSetting::playlist_active].option = "PlaylistActive"; colors [ColorSetting::playlist_active].color = TDEGlobalSettings::linkColor(); colors [ColorSetting::console_background].option = "ConsoleBackground"; colors [ColorSetting::console_background].color = TQColor (0, 0, 0); colors [ColorSetting::console_foreground].title = i18n ("Console foreground"); colors [ColorSetting::console_foreground].option = "ConsoleForeground"; colors [ColorSetting::console_foreground].color = TQColor (0xB2, 0xB2, 0xB2); colors [ColorSetting::video_background].title = i18n ("Video background"); colors [ColorSetting::video_background].option = "VideoBackground"; colors [ColorSetting::video_background].color = TQColor (0, 0, 0); colors [ColorSetting::area_background].title = i18n ("Viewing area background"); colors [ColorSetting::area_background].option = "ViewingAreaBackground"; colors [ColorSetting::area_background].color = TQColor (0, 0, 0); colors [ColorSetting::infowindow_background].title = i18n ("Info window background"); colors [ColorSetting::infowindow_background].option ="InfoWindowBackground"; colors [ColorSetting::infowindow_background].color = TDEGlobalSettings::baseColor (); colors [ColorSetting::infowindow_foreground].title = i18n ("Info window foreground"); colors [ColorSetting::infowindow_foreground].option ="InfoWindowForeground"; colors [ColorSetting::infowindow_foreground].color = TDEGlobalSettings::textColor(); fonts [FontSetting::playlist].title = i18n ("Playlist"); fonts [FontSetting::playlist].option = "PlaylistFont"; fonts [FontSetting::playlist].font = TDEGlobalSettings::generalFont(); fonts [FontSetting::playlist].font.setItalic (true); fonts [FontSetting::infowindow].title = i18n ("Info window"); fonts [FontSetting::infowindow].option = "InfoWindowFont"; fonts [FontSetting::infowindow].font = TDEGlobalSettings::generalFont(); } KDE_NO_CDTOR_EXPORT Settings::~Settings () { // configdialog should be destroyed when the view is destroyed //delete configdialog; } KDE_EXPORT const char * strMPlayerGroup = "MPlayer"; const char * strGeneralGroup = "General Options"; static const char * strKeepSizeRatio = "Keep Size Ratio"; static const char * strRememberSize = "Remember Size"; static const char * strAutoResize = "Auto Resize"; static const char * strDockSysTray = "Dock in System Tray"; static const char * strNoIntro = "No Intro"; static const char * strVolume = "Volume"; static const char * strContrast = "Contrast"; static const char * strBrightness = "Brightness"; static const char * strHue = "Hue"; static const char * strSaturation = "Saturation"; static const char * strURLList = "URL List"; static const char * strSubURLList = "URL Sub Title List"; static const char * strPrefBitRate = "Prefered Bitrate"; static const char * strMaxBitRate = "Maximum Bitrate"; //static const char * strUseArts = "Use aRts"; static const char * strVoDriver = "Video Driver"; static const char * strAoDriver = "Audio Driver"; static const char * strLoop = "Loop"; static const char * strFrameDrop = "Frame Drop"; static const char * strAdjustVolume = "Auto Adjust Volume"; static const char * strAdjustColors = "Auto Adjust Colors"; static const char * strAddConfigButton = "Add Configure Button"; static const char * strAddPlaylistButton = "Add Playlist Button"; static const char * strAddRecordButton = "Add Record Button"; static const char * strAddBroadcastButton = "Add Broadcast Button"; static const char * strPostMPlayer090 = "Post MPlayer 0.90"; //static const char * strAutoHideSlider = "Auto Hide Slider"; static const char * strSeekTime = "Forward/Backward Seek Time"; static const char * strDVDDevice = "DVD Device"; //static const char * strShowDVD = "Show DVD Menu"; //static const char * strShowVCD = "Show VCD Menu"; static const char * strVCDDevice = "VCD Device"; const char * strUrlBackend = "URL Backend"; static const char * strAllowHref = "Allow HREF"; // postproc thingies static const char * strPPGroup = "Post processing options"; static const char * strPostProcessing = "Post processing"; static const char * strDisablePPauto = "Automaticly disable post processing"; static const char * strPP_Default = "Default preset"; static const char * strPP_Fast = "Fast preset"; static const char * strPP_Custom = "Custom preset"; static const char * strCustom_Hz = "Horizontal deblocking"; static const char * strCustom_Hz_Aq = "Horizontal deblocking auto quality"; static const char * strCustom_Hz_Ch = "Horizontal deblocking chrominance"; static const char * strCustom_Vt = "Vertical deblocking"; static const char * strCustom_Vt_Aq = "Vertical deblocking auto quality"; static const char * strCustom_Vt_Ch = "Vertical deblocking chrominance"; static const char * strCustom_Dr = "Dering filter"; static const char * strCustom_Dr_Aq = "Dering auto quality"; static const char * strCustom_Dr_Ch = "Dering chrominance"; static const char * strCustom_Al = "Autolevel"; static const char * strCustom_Al_F = "Autolevel full range"; static const char * strCustom_Tn = "Temporal Noise Reducer"; static const char * strCustom_Tn_S = "Temporal Noise Reducer strength"; static const char * strPP_Lin_Blend_Int = "Linear Blend Deinterlacer"; static const char * strPP_Lin_Int = "Linear Interpolating Deinterlacer"; static const char * strPP_Cub_Int = "Cubic Interpolating Deinterlacer"; static const char * strPP_Med_Int = "Median Interpolating Deinterlacer"; static const char * strPP_FFmpeg_Int = "FFmpeg Interpolating Deinterlacer"; // end of postproc // recording static const char * strRecordingGroup = "Recording"; static const char * strRecorder = "Recorder"; static const char * strMencoderArgs = "Mencoder Arguments"; static const char * strFFMpegArgs = "FFMpeg Arguments"; static const char * strRecordingFile = "Last Recording Ouput File"; static const char * strAutoPlayAfterRecording = "Auto Play After Recording"; static const char * strAutoPlayAfterTime = "Auto Play After Recording Time"; static const char * strRecordingCopy = "Recording Is Copy"; KDE_NO_EXPORT void Settings::applyColorSetting (bool only_changed_ones) { View *view = static_cast (m_player->view ()); if (!view) return; for (int i = 0; i < int (ColorSetting::last_target); i++) if (!only_changed_ones || colors[i].color != colors[i].newcolor) { colors[i].color = colors[i].newcolor; switch (ColorSetting::Target (i)) { case ColorSetting::playlist_background: view->playList()->setPaletteBackgroundColor(colors[i].color); break; case ColorSetting::playlist_foreground: view->playList()->setPaletteForegroundColor(colors[i].color); break; case ColorSetting::playlist_active: view->playList()->setActiveForegroundColor (colors[i].color); break; case ColorSetting::console_background: view->console()->setPaper (TQBrush (colors[i].color)); break; case ColorSetting::console_foreground: view->console()->setColor(colors[i].color); break; case ColorSetting::video_background: view->viewer ()->setBackgroundColor (colors[i].color); break; case ColorSetting::area_background: view->viewArea()->setPaletteBackgroundColor(colors[i].color); break; case ColorSetting::infowindow_background: view->infoPanel ()->setPaper (TQBrush (colors[i].color)); break; case ColorSetting::infowindow_foreground: view->infoPanel()->setPaletteForegroundColor(colors[i].color); view->infoPanel ()->setColor (colors[i].color); break; default: ; } } for (int i = 0; i < int (FontSetting::last_target); i++) if (!only_changed_ones || fonts[i].font != fonts[i].newfont) { fonts[i].font = fonts[i].newfont; switch (FontSetting::Target (i)) { case FontSetting::playlist: view->playList ()->setFont (fonts[i].font); break; case FontSetting::infowindow: view->infoPanel ()->setFont (fonts[i].font); break; default: ; } } } View * Settings::defaultView () { return static_cast (m_player->view ()); } KDE_NO_EXPORT void Settings::readConfig () { m_config->setGroup (strGeneralGroup); no_intro = m_config->readBoolEntry (strNoIntro, false); urllist = m_config->readListEntry (strURLList, ';'); sub_urllist = m_config->readListEntry (strSubURLList, ';'); prefbitrate = m_config->readNumEntry (strPrefBitRate, 512); maxbitrate = m_config->readNumEntry (strMaxBitRate, 1024); volume = m_config->readNumEntry (strVolume, 20); contrast = m_config->readNumEntry (strContrast, 0); brightness = m_config->readNumEntry (strBrightness, 0); hue = m_config->readNumEntry (strHue, 0); saturation = m_config->readNumEntry (strSaturation, 0); const TQMap ::const_iterator e = m_player->sources ().end (); TQMap ::const_iterator i = m_player->sources().begin (); for (; i != e; ++i) backends[i.data()->name ()] = m_config->readEntry (i.data()->name ()); for (int i = 0; i < int (ColorSetting::last_target); i++) colors[i].newcolor = colors[i].color = m_config->readColorEntry (colors[i].option, &colors[i].color); for (int i = 0; i < int (FontSetting::last_target); i++) fonts[i].newfont = fonts[i].font = m_config->readFontEntry (fonts[i].option, &fonts[i].font); m_config->setGroup (strMPlayerGroup); sizeratio = m_config->readBoolEntry (strKeepSizeRatio, true); remembersize = m_config->readBoolEntry (strRememberSize, true); autoresize = m_config->readBoolEntry (strAutoResize, true); docksystray = m_config->readBoolEntry (strDockSysTray, true); loop = m_config->readBoolEntry (strLoop, false); framedrop = m_config->readBoolEntry (strFrameDrop, true); autoadjustvolume = m_config->readBoolEntry (strAdjustVolume, true); autoadjustcolors = m_config->readBoolEntry (strAdjustColors, true); mplayerpost090 = m_config->readBoolEntry (strPostMPlayer090, true); showcnfbutton = m_config->readBoolEntry (strAddConfigButton, true); showrecordbutton = m_config->readBoolEntry (strAddRecordButton, true); showbroadcastbutton = m_config->readBoolEntry (strAddBroadcastButton, true); showplaylistbutton = m_config->readBoolEntry (strAddPlaylistButton, true); seektime = m_config->readNumEntry (strSeekTime, 10); dvddevice = m_config->readEntry (strDVDDevice, "/dev/dvd"); vcddevice = m_config->readEntry (strVCDDevice, "/dev/cdrom"); videodriver = m_config->readNumEntry (strVoDriver, 0); audiodriver = m_config->readNumEntry (strAoDriver, 0); allowhref = m_config->readBoolEntry(strAllowHref, false); // recording m_config->setGroup (strRecordingGroup); mencoderarguments = m_config->readEntry (strMencoderArgs, "-oac mp3lame -ovc lavc"); ffmpegarguments = m_config->readEntry (strFFMpegArgs, "-f avi -acodec mp3 -vcodec mpeg4"); recordfile = m_config->readPathEntry(strRecordingFile, TQDir::homeDirPath () + "/record.avi"); recorder = Recorder (m_config->readNumEntry (strRecorder, int (MEncoder))); replayoption = ReplayOption (m_config->readNumEntry (strAutoPlayAfterRecording, ReplayFinished)); replaytime = m_config->readNumEntry (strAutoPlayAfterTime, 60); recordcopy = m_config->readBoolEntry(strRecordingCopy, true); // postproc m_config->setGroup (strPPGroup); postprocessing = m_config->readBoolEntry (strPostProcessing, false); disableppauto = m_config->readBoolEntry (strDisablePPauto, true); pp_default = m_config->readBoolEntry (strPP_Default, true); pp_fast = m_config->readBoolEntry (strPP_Fast, false); pp_custom = m_config->readBoolEntry (strPP_Custom, false); // default these to default preset pp_custom_hz = m_config->readBoolEntry (strCustom_Hz, true); pp_custom_hz_aq = m_config->readBoolEntry (strCustom_Hz_Aq, true); pp_custom_hz_ch = m_config->readBoolEntry (strCustom_Hz_Ch, false); pp_custom_vt = m_config->readBoolEntry (strCustom_Vt, true); pp_custom_vt_aq = m_config->readBoolEntry (strCustom_Vt_Aq, true); pp_custom_vt_ch = m_config->readBoolEntry (strCustom_Vt_Ch, false); pp_custom_dr = m_config->readBoolEntry (strCustom_Dr, true); pp_custom_dr_aq = m_config->readBoolEntry (strCustom_Dr_Aq, true); pp_custom_dr_ch = m_config->readBoolEntry (strCustom_Dr_Ch, false); pp_custom_al = m_config->readBoolEntry (strCustom_Al, true); pp_custom_al_f = m_config->readBoolEntry (strCustom_Al_F, false); pp_custom_tn = m_config->readBoolEntry (strCustom_Tn, true); pp_custom_tn_s = m_config->readNumEntry (strCustom_Tn_S, 0); pp_lin_blend_int = m_config->readBoolEntry (strPP_Lin_Blend_Int, false); pp_lin_int = m_config->readBoolEntry (strPP_Lin_Int, false); pp_cub_int = m_config->readBoolEntry (strPP_Cub_Int, false); pp_med_int = m_config->readBoolEntry (strPP_Med_Int, false); pp_ffmpeg_int = m_config->readBoolEntry (strPP_FFmpeg_Int, false); for (PreferencesPage * p = pagelist; p; p = p->next) p->read (m_config); emit configChanged (); } KDE_NO_EXPORT bool Settings::createDialog () { if (configdialog) return false; configdialog = new Preferences (m_player, this); int id = 0; const PartBase::ProcessMap::const_iterator e = m_player->players ().end (); for (PartBase::ProcessMap::const_iterator i = m_player->players ().begin(); i != e; ++i) { Process * p = i.data (); if (p->supports ("urlsource")) configdialog->m_SourcePageURL->backend->insertItem (p->menuName ().remove (TQChar ('&')), id++); } connect (configdialog, TQ_SIGNAL (okClicked ()), this, TQ_SLOT (okPressed ())); connect (configdialog, TQ_SIGNAL (applyClicked ()), this, TQ_SLOT (okPressed ())); if (TDEApplication::kApplication()) connect (configdialog, TQ_SIGNAL (helpClicked ()), this, TQ_SLOT (getHelp ())); return true; } void Settings::addPage (PreferencesPage * page) { for (PreferencesPage * p = pagelist; p; p = p->next) if (p == page) return; page->read (m_config); if (configdialog) { configdialog->addPrefPage (page); page->sync (false); } page->next = pagelist; pagelist = page; } void Settings::removePage (PreferencesPage * page) { if (configdialog) configdialog->removePrefPage (page); PreferencesPage * prev = 0L; for (PreferencesPage * p = pagelist; p; prev = p, p = p->next) if (p == page) { if (prev) prev->next = p->next; else pagelist = p->next; break; } } void Settings::show (const char * pagename) { bool created = createDialog (); configdialog->m_GeneralPageGeneral->keepSizeRatio->setChecked (sizeratio); configdialog->m_GeneralPageGeneral->autoResize->setChecked (autoresize); configdialog->m_GeneralPageGeneral->sizesChoice->setButton (remembersize ? 0 : 1); configdialog->m_GeneralPageGeneral->dockSysTray->setChecked (docksystray); configdialog->m_GeneralPageGeneral->loop->setChecked (loop); configdialog->m_GeneralPageGeneral->framedrop->setChecked (framedrop); configdialog->m_GeneralPageGeneral->adjustvolume->setChecked (autoadjustvolume); configdialog->m_GeneralPageGeneral->adjustcolors->setChecked (autoadjustcolors); //configdialog->m_GeneralPageGeneral->autoHideSlider->setChecked (autohideslider); configdialog->m_GeneralPageGeneral->showConfigButton->setChecked (showcnfbutton); configdialog->m_GeneralPageGeneral->showPlaylistButton->setChecked (showplaylistbutton); configdialog->m_GeneralPageGeneral->showRecordButton->setChecked (showrecordbutton); configdialog->m_GeneralPageGeneral->showBroadcastButton->setChecked (showbroadcastbutton); configdialog->m_GeneralPageGeneral->seekTime->setValue(seektime); for (int i = 0; i < int (ColorSetting::last_target); i++) colors[i].newcolor = colors[i].color; for (int i = 0; i < int (FontSetting::last_target); i++) fonts[i].newfont = fonts[i].font; configdialog->m_SourcePageURL->urllist->clear (); configdialog->m_SourcePageURL->urllist->insertStringList (urllist); configdialog->m_SourcePageURL->urllist->setCurrentText (m_player->source ()->url ().prettyURL ()); configdialog->m_SourcePageURL->sub_urllist->clear (); configdialog->m_SourcePageURL->sub_urllist->insertStringList (sub_urllist); configdialog->m_SourcePageURL->sub_urllist->setCurrentText (m_player->source ()->subUrl ().prettyURL ()); configdialog->m_SourcePageURL->changed = false; configdialog->m_SourcePageURL->prefBitRate->setText (TQString::number (prefbitrate)); configdialog->m_SourcePageURL->maxBitRate->setText (TQString::number (maxbitrate)); configdialog->m_GeneralPageOutput->videoDriver->setCurrentItem (videodriver); configdialog->m_GeneralPageOutput->audioDriver->setCurrentItem (audiodriver); configdialog->m_SourcePageURL->backend->setCurrentItem (configdialog->m_SourcePageURL->backend->findItem (backends["urlsource"])); int id = 0; const PartBase::ProcessMap::const_iterator e = m_player->players ().end (); for (PartBase::ProcessMap::const_iterator i = m_player->players ().begin(); i != e; ++i) { Process * p = i.data (); if (p->supports ("urlsource")) { if (backends["urlsource"] == TQString (p->name())) configdialog->m_SourcePageURL->backend->setCurrentItem (id); id++; } } configdialog->m_SourcePageURL->allowhref->setChecked (allowhref); // postproc configdialog->m_OPPagePostproc->postProcessing->setChecked (postprocessing); configdialog->m_OPPagePostproc->disablePPauto->setChecked (disableppauto); configdialog->m_OPPagePostproc->PostprocessingOptions->setEnabled (postprocessing); configdialog->m_OPPagePostproc->defaultPreset->setChecked (pp_default); configdialog->m_OPPagePostproc->fastPreset->setChecked (pp_fast); configdialog->m_OPPagePostproc->customPreset->setChecked (pp_custom); configdialog->m_OPPagePostproc->HzDeblockFilter->setChecked (pp_custom_hz); configdialog->m_OPPagePostproc->HzDeblockAQuality->setChecked (pp_custom_hz_aq); configdialog->m_OPPagePostproc->HzDeblockCFiltering->setChecked (pp_custom_hz_ch); configdialog->m_OPPagePostproc->VtDeblockFilter->setChecked (pp_custom_vt); configdialog->m_OPPagePostproc->VtDeblockAQuality->setChecked (pp_custom_vt_aq); configdialog->m_OPPagePostproc->VtDeblockCFiltering->setChecked (pp_custom_vt_ch); configdialog->m_OPPagePostproc->DeringFilter->setChecked (pp_custom_dr); configdialog->m_OPPagePostproc->DeringAQuality->setChecked (pp_custom_dr_aq); configdialog->m_OPPagePostproc->DeringCFiltering->setChecked (pp_custom_dr_ch); configdialog->m_OPPagePostproc->AutolevelsFilter->setChecked (pp_custom_al); configdialog->m_OPPagePostproc->AutolevelsFullrange->setChecked (pp_custom_al_f); configdialog->m_OPPagePostproc->TmpNoiseFilter->setChecked (pp_custom_tn); //configdialog->m_OPPagePostproc->TmpNoiseSlider->setValue (pp_custom_tn_s); configdialog->m_OPPagePostproc->LinBlendDeinterlacer->setChecked (pp_lin_blend_int); configdialog->m_OPPagePostproc->LinIntDeinterlacer->setChecked (pp_lin_int); configdialog->m_OPPagePostproc->CubicIntDeinterlacer->setChecked (pp_cub_int); configdialog->m_OPPagePostproc->MedianDeinterlacer->setChecked (pp_med_int); configdialog->m_OPPagePostproc->FfmpegDeinterlacer->setChecked (pp_ffmpeg_int); // recording configdialog->m_RecordPage->url->lineEdit()->setText (recordfile); configdialog->m_RecordPage->replay->setButton (int (replayoption)); configdialog->m_RecordPage->recorder->setButton (int (recorder)); configdialog->m_RecordPage->replayClicked (int (replayoption)); configdialog->m_RecordPage->recorderClicked (int (recorder)); configdialog->m_RecordPage->replaytime->setText (TQString::number (replaytime)); configdialog->m_MEncoderPage->arguments->setText (mencoderarguments); configdialog->m_MEncoderPage->format->setButton (recordcopy ? 0 : 1); configdialog->m_MEncoderPage->formatClicked (recordcopy ? 0 : 1); configdialog->m_FFMpegPage->arguments->setText (ffmpegarguments); //dynamic stuff for (PreferencesPage * p = pagelist; p; p = p->next) p->sync (false); //\dynamic stuff if (pagename) configDialog ()->setPage (pagename); if (created) configdialog->resize (configdialog->minimumSize ()); configdialog->show (); } void Settings::writeConfig () { m_config->setGroup (strGeneralGroup); m_config->writeEntry (strURLList, urllist, ';'); m_config->writeEntry (strSubURLList, sub_urllist, ';'); m_config->writeEntry (strPrefBitRate, prefbitrate); m_config->writeEntry (strMaxBitRate, maxbitrate); m_config->writeEntry (strVolume, volume); m_config->writeEntry (strContrast, contrast); m_config->writeEntry (strBrightness, brightness); m_config->writeEntry (strHue, hue); m_config->writeEntry (strSaturation, saturation); const TQMap::iterator b_end = backends.end (); for (TQMap::iterator i = backends.begin(); i != b_end; ++i) m_config->writeEntry (i.key (), i.data ()); for (int i = 0; i < int (ColorSetting::last_target); i++) m_config->writeEntry (colors[i].option, colors[i].color); for (int i = 0; i < int (FontSetting::last_target); i++) m_config->writeEntry (fonts[i].option, fonts[i].font); m_config->setGroup (strMPlayerGroup); m_config->writeEntry (strKeepSizeRatio, sizeratio); m_config->writeEntry (strAutoResize, autoresize); m_config->writeEntry (strRememberSize, remembersize); m_config->writeEntry (strDockSysTray, docksystray); m_config->writeEntry (strLoop, loop); m_config->writeEntry (strFrameDrop, framedrop); m_config->writeEntry (strAdjustVolume, autoadjustvolume); m_config->writeEntry (strAdjustColors, autoadjustcolors); m_config->writeEntry (strSeekTime, seektime); m_config->writeEntry (strVoDriver, videodriver); m_config->writeEntry (strAoDriver, audiodriver); m_config->writeEntry (strAllowHref, allowhref); m_config->writeEntry (strAddConfigButton, showcnfbutton); m_config->writeEntry (strAddPlaylistButton, showplaylistbutton); m_config->writeEntry (strAddRecordButton, showrecordbutton); m_config->writeEntry (strAddBroadcastButton, showbroadcastbutton); m_config->writeEntry (strDVDDevice, dvddevice); m_config->writeEntry (strVCDDevice, vcddevice); //postprocessing stuff m_config->setGroup (strPPGroup); m_config->writeEntry (strPostProcessing, postprocessing); m_config->writeEntry (strDisablePPauto, disableppauto); m_config->writeEntry (strPP_Default, pp_default); m_config->writeEntry (strPP_Fast, pp_fast); m_config->writeEntry (strPP_Custom, pp_custom); m_config->writeEntry (strCustom_Hz, pp_custom_hz); m_config->writeEntry (strCustom_Hz_Aq, pp_custom_hz_aq); m_config->writeEntry (strCustom_Hz_Ch, pp_custom_hz_ch); m_config->writeEntry (strCustom_Vt, pp_custom_vt); m_config->writeEntry (strCustom_Vt_Aq, pp_custom_vt_aq); m_config->writeEntry (strCustom_Vt_Ch, pp_custom_vt_ch); m_config->writeEntry (strCustom_Dr, pp_custom_dr); m_config->writeEntry (strCustom_Dr_Aq, pp_custom_vt_aq); m_config->writeEntry (strCustom_Dr_Ch, pp_custom_vt_ch); m_config->writeEntry (strCustom_Al, pp_custom_al); m_config->writeEntry (strCustom_Al_F, pp_custom_al_f); m_config->writeEntry (strCustom_Tn, pp_custom_tn); m_config->writeEntry (strCustom_Tn_S, pp_custom_tn_s); m_config->writeEntry (strPP_Lin_Blend_Int, pp_lin_blend_int); m_config->writeEntry (strPP_Lin_Int, pp_lin_int); m_config->writeEntry (strPP_Cub_Int, pp_cub_int); m_config->writeEntry (strPP_Med_Int, pp_med_int); m_config->writeEntry (strPP_FFmpeg_Int, pp_ffmpeg_int); // recording m_config->setGroup (strRecordingGroup); m_config->writePathEntry (strRecordingFile, recordfile); m_config->writeEntry (strAutoPlayAfterRecording, int (replayoption)); m_config->writeEntry (strAutoPlayAfterTime, replaytime); m_config->writeEntry (strRecorder, int (recorder)); m_config->writeEntry (strRecordingCopy, recordcopy); m_config->writeEntry (strMencoderArgs, mencoderarguments); m_config->writeEntry (strFFMpegArgs, ffmpegarguments); //dynamic stuff for (PreferencesPage * p = pagelist; p; p = p->next) p->write (m_config); //\dynamic stuff m_config->sync (); } void Settings::okPressed () { bool urlchanged = configdialog->m_SourcePageURL->changed; bool playerchanged = false; if (urlchanged) { if (configdialog->m_SourcePageURL->url->url ().isEmpty ()) urlchanged = false; else { if (KURL::fromPathOrURL (configdialog->m_SourcePageURL->url->url ()).isLocalFile () || KURL::isRelativeURL (configdialog->m_SourcePageURL->url->url ())) { TQFileInfo fi (configdialog->m_SourcePageURL->url->url ()); int hpos = configdialog->m_SourcePageURL->url->url ().findRev ('#'); TQString xine_directives (""); while (!fi.exists () && hpos > -1) { xine_directives = configdialog->m_SourcePageURL->url->url ().mid (hpos); fi.setFile (configdialog->m_SourcePageURL->url->url ().left (hpos)); hpos = configdialog->m_SourcePageURL->url->url ().findRev ('#', hpos-1); } if (!fi.exists ()) { urlchanged = false; KMessageBox::error (m_player->view (), i18n ("File %1 does not exist.").arg (configdialog->m_SourcePageURL->url->url ()), i18n ("Error")); } else configdialog->m_SourcePageURL->url->setURL (fi.absFilePath () + xine_directives); } if (urlchanged && !configdialog->m_SourcePageURL->sub_url->url ().isEmpty () && (KURL::fromPathOrURL (configdialog->m_SourcePageURL->sub_url->url ()).isLocalFile () || KURL::isRelativeURL (configdialog->m_SourcePageURL->sub_url->url ()))) { TQFileInfo sfi (configdialog->m_SourcePageURL->sub_url->url ()); if (!sfi.exists ()) { KMessageBox::error (m_player->view (), i18n ("Sub title file %1 does not exist.").arg (configdialog->m_SourcePageURL->sub_url->url ()), i18n ("Error")); configdialog->m_SourcePageURL->sub_url->setURL (TQString ()); } else configdialog->m_SourcePageURL->sub_url->setURL (sfi.absFilePath ()); } } } if (urlchanged) { KURL url = KURL::fromPathOrURL (configdialog->m_SourcePageURL->url->url ()); m_player->setURL (url); if (urllist.find (url.prettyURL ()) == urllist.end ()) configdialog->m_SourcePageURL->urllist->insertItem (url.prettyURL (), 0); KURL sub_url = KURL::fromPathOrURL (configdialog->m_SourcePageURL->sub_url->url ()); if (sub_urllist.find (sub_url.prettyURL ()) == sub_urllist.end ()) configdialog->m_SourcePageURL->sub_urllist->insertItem (sub_url.prettyURL (), 0); } urllist.clear (); for (int i = 0; i < configdialog->m_SourcePageURL->urllist->count () && i < 20; ++i) // damnit why don't maxCount and setDuplicatesEnabled(false) work :( // and why can I put a qstringlist in it, but cannot get it out of it again.. if (!configdialog->m_SourcePageURL->urllist->text (i).isEmpty ()) urllist.push_back (configdialog->m_SourcePageURL->urllist->text (i)); sub_urllist.clear (); for (int i = 0; i < configdialog->m_SourcePageURL->sub_urllist->count () && i < 20; ++i) if (!configdialog->m_SourcePageURL->sub_urllist->text (i).isEmpty ()) sub_urllist.push_back (configdialog->m_SourcePageURL->sub_urllist->text (i)); prefbitrate = configdialog->m_SourcePageURL->prefBitRate->text ().toInt (); maxbitrate = configdialog->m_SourcePageURL->maxBitRate->text ().toInt (); sizeratio = configdialog->m_GeneralPageGeneral->keepSizeRatio->isChecked (); autoresize = configdialog->m_GeneralPageGeneral->autoResize->isChecked (); remembersize=!configdialog->m_GeneralPageGeneral->sizesChoice->selectedId(); docksystray = configdialog->m_GeneralPageGeneral->dockSysTray->isChecked (); loop = configdialog->m_GeneralPageGeneral->loop->isChecked (); framedrop = configdialog->m_GeneralPageGeneral->framedrop->isChecked (); autoadjustvolume = configdialog->m_GeneralPageGeneral->adjustvolume->isChecked (); autoadjustcolors = configdialog->m_GeneralPageGeneral->adjustcolors->isChecked (); showcnfbutton = configdialog->m_GeneralPageGeneral->showConfigButton->isChecked (); showplaylistbutton = configdialog->m_GeneralPageGeneral->showPlaylistButton->isChecked (); showrecordbutton = configdialog->m_GeneralPageGeneral->showRecordButton->isChecked (); showbroadcastbutton = configdialog->m_GeneralPageGeneral->showBroadcastButton->isChecked (); seektime = configdialog->m_GeneralPageGeneral->seekTime->value(); videodriver = configdialog->m_GeneralPageOutput->videoDriver->currentItem(); audiodriver = configdialog->m_GeneralPageOutput->audioDriver->currentItem(); if (!strcmp (m_player->source()->name (), "urlsource")) { int backend = configdialog->m_SourcePageURL->backend->currentItem (); const PartBase::ProcessMap::const_iterator e = m_player->players ().end(); for (PartBase::ProcessMap::const_iterator i = m_player->players ().begin(); backend >=0 && i != e; ++i) { Process * proc = i.data (); if (proc->supports ("urlsource") && backend-- == 0) { backends["urlsource"] = proc->name (); if (proc != m_player->process ()) { m_player->setProcess (proc->name ()); playerchanged = true; } } } } allowhref = configdialog->m_SourcePageURL->allowhref->isChecked (); //postproc postprocessing = configdialog->m_OPPagePostproc->postProcessing->isChecked(); disableppauto = configdialog->m_OPPagePostproc->disablePPauto->isChecked(); pp_default = configdialog->m_OPPagePostproc->defaultPreset->isChecked(); pp_fast = configdialog->m_OPPagePostproc->fastPreset->isChecked(); pp_custom = configdialog->m_OPPagePostproc->customPreset->isChecked(); pp_custom_hz = configdialog->m_OPPagePostproc->HzDeblockFilter->isChecked(); pp_custom_hz_aq = configdialog->m_OPPagePostproc->HzDeblockAQuality->isChecked(); pp_custom_hz_ch = configdialog->m_OPPagePostproc->HzDeblockCFiltering->isChecked(); pp_custom_vt = configdialog->m_OPPagePostproc->VtDeblockFilter->isChecked(); pp_custom_vt_aq = configdialog->m_OPPagePostproc->VtDeblockAQuality->isChecked(); pp_custom_vt_ch = configdialog->m_OPPagePostproc->VtDeblockCFiltering->isChecked(); pp_custom_dr = configdialog->m_OPPagePostproc->DeringFilter->isChecked(); pp_custom_dr_aq = configdialog->m_OPPagePostproc->DeringAQuality->isChecked(); pp_custom_dr_ch = configdialog->m_OPPagePostproc->DeringCFiltering->isChecked(); pp_custom_al = configdialog->m_OPPagePostproc->AutolevelsFilter->isChecked(); pp_custom_al_f = configdialog->m_OPPagePostproc->AutolevelsFullrange->isChecked(); pp_custom_tn = configdialog->m_OPPagePostproc->TmpNoiseFilter->isChecked(); pp_custom_tn_s = 0; // gotta fix this later //pp_custom_tn_s = configdialog->m_OPPagePostproc->TmpNoiseSlider->value(); pp_lin_blend_int = configdialog->m_OPPagePostproc->LinBlendDeinterlacer->isChecked(); pp_lin_int = configdialog->m_OPPagePostproc->LinIntDeinterlacer->isChecked(); pp_cub_int = configdialog->m_OPPagePostproc->CubicIntDeinterlacer->isChecked(); pp_med_int = configdialog->m_OPPagePostproc->MedianDeinterlacer->isChecked(); pp_ffmpeg_int = configdialog->m_OPPagePostproc->FfmpegDeinterlacer->isChecked(); // recording recorder = Recorder (configdialog->m_RecordPage->recorder->selectedId ()); replaytime = configdialog->m_RecordPage->replaytime->text ().toInt (); configdialog->m_RecordPage->replaytime->setText (TQString::number (replaytime)); recordfile = configdialog->m_RecordPage->url->lineEdit()->text (); mencoderarguments = configdialog->m_MEncoderPage->arguments->text (); ffmpegarguments = configdialog->m_FFMpegPage->arguments->text (); recordcopy = !configdialog->m_MEncoderPage->format->selectedId (); //dynamic stuff for (PreferencesPage * p = pagelist; p; p = p->next) p->sync (true); //\dynamic stuff writeConfig (); emit configChanged (); if (urlchanged || playerchanged) { m_player->sources () ["urlsource"]->setSubURL (KURL(configdialog->m_SourcePageURL->sub_url->url())); m_player->openURL (KURL::fromPathOrURL (configdialog->m_SourcePageURL->url->url ())); m_player->source ()->setSubURL (KURL::fromPathOrURL (configdialog->m_SourcePageURL->sub_url->url ())); } } KDE_NO_EXPORT void Settings::getHelp () { TDEApplication::kApplication()->invokeBrowser ("man:/mplayer"); } #include "kmplayerconfig.moc"