File indexing completed on 2024-04-21 15:38:27

0001 /**
0002  * Copyright (C) 2003 Joonas Koivunen <rzei@mbnet.fi>
0003  * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
0004  *
0005  * This library is free software; you can redistribute it and/or
0006  * modify it under the terms of the GNU Library General Public
0007  * License as published by the Free Software Foundation; either
0008  * version 2 of the License, or (at your option) any later version.
0009  *
0010  * This library is distributed in the hope that it will be useful,
0011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0013  * Library General Public License for more details.
0014  *
0015  * You should have received a copy of the GNU Library General Public License
0016  * along with this library; see the file COPYING.LIB.  If not, write to
0017  * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
0018  * Boston, MA 02110-1301, USA.
0019  */
0020 
0021 #undef Always
0022 
0023 #include <QIcon>
0024 #include <QVBoxLayout>
0025 #include <qlayout.h>
0026 #include <qlabel.h>
0027 #include <qpushbutton.h>
0028 #include <qradiobutton.h>
0029 #include <qcheckbox.h>
0030 #include <qstringlist.h>
0031 #include <qcombobox.h>
0032 #include <qlineedit.h>
0033 #include <qwhatsthis.h>
0034 #include <qtabwidget.h>
0035 #include <qslider.h>
0036 #include <qspinbox.h>
0037 #include <qmap.h>
0038 #include <qtimer.h>
0039 #include <qfont.h>
0040 #include <QAbstractButton>
0041 #include <QButtonGroup>
0042 #include <QGroupBox>
0043 #include <QListWidget>
0044 
0045 #include <klocalizedstring.h>
0046 #include <kdebug.h>
0047 #include <kmessagebox.h>
0048 #include <klineedit.h>
0049 #include <kiconloader.h>
0050 #include <kdeversion.h>
0051 #include <kcombobox.h>
0052 #include <kcolorbutton.h>
0053 #include <kurlrequester.h>
0054 #include <kfontdialog.h>
0055 #include <kvbox.h>
0056 #include <KTextWidgets/kpluralhandlingspinbox.h>
0057 #include "pref.h"
0058 #include "kmplayerpartbase.h"
0059 #include "kmplayerprocess.h"
0060 #include "mediaobject.h"
0061 #include "kmplayerconfig.h"
0062 
0063 using namespace KMPlayer;
0064 
0065 KDE_NO_CDTOR_EXPORT Preferences::Preferences(PartBase * player, Settings * settings)
0066 : KPageDialog (player->view ())
0067 {
0068     setFaceType (KPageDialog::List);
0069     setWindowTitle(i18n("Preferences"));
0070     setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply);
0071     button(QDialogButtonBox::Ok)->setDefault(true);
0072 
0073     KVBox *page = new KVBox (this);
0074     KPageWidgetItem *item = addPage (page, i18n ("General Options"));
0075     item->setIcon(QIcon::fromTheme("kmplayer"));
0076     QTabWidget *tab = new QTabWidget (page);
0077     m_GeneralPageGeneral = new PrefGeneralPageGeneral (tab, settings);
0078     tab->addTab (m_GeneralPageGeneral, i18n("General"));
0079     m_GeneralPageLooks = new PrefGeneralPageLooks (tab, settings);
0080     tab->addTab (m_GeneralPageLooks, i18n("Looks"));
0081     m_GeneralPageOutput = new PrefGeneralPageOutput
0082         (tab, settings->audiodrivers, settings->videodrivers);
0083     tab->addTab (m_GeneralPageOutput, i18n("Output"));
0084     entries.insert (i18n("General Options"), tab);
0085 
0086     page = new KVBox (this);
0087     m_url_item = addPage (page, i18n ("Source"));
0088     m_url_item->setIcon(QIcon::fromTheme("document-import"));
0089     tab = new QTabWidget (page);
0090     m_SourcePageURL = new PrefSourcePageURL (tab);
0091     tab->addTab (m_SourcePageURL, i18n ("URL"));
0092     entries.insert (i18n("Source"), tab);
0093 
0094     page = new KVBox (this);
0095     m_record_item = addPage (page, i18n ("Recording"));
0096     m_record_item->setIcon(QIcon::fromTheme("folder-video"));
0097     tab = new QTabWidget (page);
0098 
0099     int recorders_count = 3;
0100     m_MEncoderPage = new PrefMEncoderPage (tab, player);
0101     tab->addTab (m_MEncoderPage, i18n ("MEncoder"));
0102     recorders = m_MEncoderPage;
0103 
0104     m_FFMpegPage = new PrefFFMpegPage (tab, player);
0105     tab->addTab (m_FFMpegPage, i18n ("FFMpeg"));
0106     m_MEncoderPage->next = m_FFMpegPage;
0107 
0108     m_MPlayerDumpstreamPage = new PrefMPlayerDumpstreamPage (tab, player);
0109     // tab->addTab (m_MPlayerDumpstreamPage, i18n ("MPlayer -dumpstream"));
0110     m_FFMpegPage->next = m_MPlayerDumpstreamPage;
0111 #ifdef KMPLAYER_WITH_XINE
0112     recorders_count = 4;
0113     m_XinePage = new PrefXinePage (tab, player);
0114     // tab->addTab (m_XinePage, i18n ("Xine"));
0115     m_MPlayerDumpstreamPage->next = m_XinePage;
0116 #endif
0117     m_RecordPage = new PrefRecordPage (tab, player, recorders, recorders_count);
0118     tab->insertTab (0, m_RecordPage, i18n ("General"));
0119     tab->setCurrentIndex (0);
0120     entries.insert (i18n("Recording"), tab);
0121 
0122     page = new KVBox (this);
0123     item = addPage (page, i18n ("Output Plugins"));
0124     item->setIcon(QIcon::fromTheme("folder-image"));
0125     tab = new QTabWidget (page);
0126     m_OPPagePostproc = new PrefOPPagePostProc (tab);
0127     tab->addTab (m_OPPagePostproc, i18n ("Postprocessing"));
0128     entries.insert (i18n("Postprocessing"), tab);
0129 
0130     for (PreferencesPage * p = settings->pagelist; p; p = p->next)
0131         addPrefPage (p);
0132 
0133     //connect (this, SIGNAL (defaultClicked ()), SLOT (confirmDefaults ()));
0134 }
0135 
0136 KDE_NO_EXPORT void Preferences::setPage (const char * name) {
0137     KPageWidgetItem *item = NULL;
0138     if (!strcmp (name, "RecordPage"))
0139         item = m_record_item;
0140     else if (!strcmp (name, "URLPage"))
0141         item = m_url_item;
0142     if (item) {
0143         setCurrentPage (item);
0144         QWidget* page = findChild<QWidget*>(name);
0145         if (!page)
0146             return;
0147         QWidget * w = page->parentWidget ();
0148         while (w && !qobject_cast <QTabWidget *> (w))
0149             w = w->parentWidget ();
0150         if (!w)
0151             return;
0152         QTabWidget *t = static_cast <QTabWidget*> (w);
0153         t->setCurrentIndex (t->indexOf(page));
0154     }
0155 }
0156 
0157 KDE_NO_EXPORT void Preferences::addPrefPage (PreferencesPage * page) {
0158     QString item, subitem, icon;
0159     KPageWidgetItem *witem;
0160     QTabWidget *tab;
0161     page->prefLocation (item, icon, subitem);
0162     if (item.isEmpty ())
0163         return;
0164     QMap<QString, QTabWidget *>::iterator en_it = entries.find (item);
0165     if (en_it == entries.end ()) {
0166         KVBox *page = new KVBox (this);
0167         witem = addPage (page, item);
0168         witem->setIcon(QIcon::fromTheme(icon));
0169         tab = new QTabWidget (page);
0170         entries.insert (item, tab);
0171     } else
0172         tab = en_it.value ();
0173     QFrame *frame = page->prefPage (tab);
0174     tab->addTab (frame, subitem);
0175 }
0176 
0177 KDE_NO_EXPORT void Preferences::removePrefPage(PreferencesPage * page) {
0178     QString item, subitem, icon;
0179     page->prefLocation (item, icon, subitem);
0180     if (item.isEmpty ())
0181         return;
0182     QMap<QString, QTabWidget *>::iterator en_it = entries.find (item);
0183     if (en_it == entries.end ())
0184         return;
0185     QTabWidget * tab = en_it.value ();
0186     for (int i = 0; i < tab->count (); i++)
0187         if (tab->tabText (i) == subitem) {
0188             QWidget* w = tab->widget (i);
0189             tab->removeTab (i);
0190             delete w;
0191             break;
0192         }
0193     if (!tab->count ()) {
0194         QWidget * w = tab->parentWidget ();
0195         while (w && !w->inherits ("QFrame"))
0196             w = w->parentWidget ();
0197         delete w;
0198         entries.erase (en_it);
0199     }
0200 }
0201 
0202 KDE_NO_CDTOR_EXPORT Preferences::~Preferences() {
0203 }
0204 
0205 KDE_NO_CDTOR_EXPORT PrefGeneralPageGeneral::PrefGeneralPageGeneral(QWidget *parent, Settings *)
0206 : QWidget(parent)
0207 {
0208     QGroupBox *windowbox = new QGroupBox(i18n("Window"));
0209     QWidget * bbox = new QWidget (windowbox);
0210     QGridLayout * gridlayout = new QGridLayout (bbox/*, 2, 2*/);
0211     keepSizeRatio = new QCheckBox (i18n ("Keep size ratio"), bbox);
0212     keepSizeRatio->setWhatsThis(i18n("When checked, the movie will keep its aspect ratio\nwhen the window is resized."));
0213     dockSysTray = new QCheckBox (i18n ("Dock in system tray"), bbox);
0214     dockSysTray->setWhatsThis(i18n ("When checked, an icon for KMPlayer will be added to the system tray.\nWhen clicked, it will hide KMPlayer's main window and remove KMPlayer's task bar button."));
0215     autoResize = new QCheckBox (i18n ("Auto resize to video sizes"), bbox);
0216     autoResize->setWhatsThis(i18n("When checked, KMPlayer will resize to movie sizes\nwhen video starts."));
0217     gridlayout->addWidget (keepSizeRatio, 0, 0);
0218     gridlayout->addWidget (dockSysTray, 1, 0);
0219     gridlayout->addWidget (autoResize, 0, 1);
0220     QRadioButton* sizeexit = new QRadioButton(i18n("Remember window size on exit"));
0221     QRadioButton* sizefixed = new QRadioButton (i18n("Always start with fixed size"));
0222     sizesChoice = new QButtonGroup(windowbox);
0223     sizesChoice->addButton(sizeexit, 0);
0224     sizesChoice->addButton(sizefixed, 1);
0225     QVBoxLayout* vbox = new QVBoxLayout;
0226     vbox->addWidget(bbox);
0227     vbox->addWidget(sizeexit);
0228     vbox->addWidget(sizefixed);
0229     windowbox->setLayout(vbox);
0230 
0231     QGroupBox *playbox = new QGroupBox(i18n("Playing"));
0232     loop = new QCheckBox (i18n("Loop"));
0233     loop->setWhatsThis(i18n("Makes current movie loop"));
0234     framedrop = new QCheckBox (i18n ("Allow frame drops"));
0235     framedrop->setWhatsThis(i18n ("Allow dropping frames for better audio and video synchronization"));
0236     adjustvolume = new QCheckBox(i18n("Auto set volume on start"));
0237     adjustvolume->setWhatsThis(i18n ("When a new source is selected, the volume will be set according the volume control"));
0238     adjustcolors = new QCheckBox(i18n("Auto set colors on start"));
0239     adjustcolors->setWhatsThis(i18n ("When a movie starts, the colors will be set according the sliders for colors"));
0240     vbox = new QVBoxLayout;
0241     vbox->addWidget(loop);
0242     vbox->addWidget(framedrop);
0243     vbox->addWidget(adjustvolume);
0244     vbox->addWidget(adjustcolors);
0245     playbox->setLayout(vbox);
0246 
0247     QGroupBox* controlbox = new QGroupBox(i18n("Control Panel"));
0248     showConfigButton = new QCheckBox(i18n("Show config button"));
0249     showConfigButton->setWhatsThis(i18n ("Add a button that will popup a config menu"));
0250     showPlaylistButton = new QCheckBox(i18n("Show playlist button"));
0251     showPlaylistButton->setWhatsThis(i18n ("Add a playlist button to the control buttons"));
0252     showRecordButton = new QCheckBox(i18n("Show record button"));
0253     showRecordButton->setWhatsThis(i18n ("Add a record button to the control buttons"));
0254     showBroadcastButton = new QCheckBox (i18n ("Show broadcast button"));
0255     showBroadcastButton->setWhatsThis(i18n ("Add a broadcast button to the control buttons"));
0256     gridlayout = new QGridLayout;
0257     gridlayout->addWidget (showConfigButton, 0, 0);
0258     gridlayout->addWidget (showPlaylistButton, 0, 1);
0259     gridlayout->addWidget (showRecordButton, 1, 0);
0260     gridlayout->addWidget (showBroadcastButton, 1, 1);
0261     QHBoxLayout *seekLayout = new QHBoxLayout;
0262     seekLayout->addWidget(new QLabel(i18n("Forward/backward seek time:")));
0263     seekLayout->addItem(new QSpacerItem(0,0,QSizePolicy::Minimum, QSizePolicy::Minimum));
0264     KPluralHandlingSpinBox* pluralSeekBox = new KPluralHandlingSpinBox;
0265     pluralSeekBox->setRange(1, 600);
0266     pluralSeekBox->setSingleStep(1);
0267     pluralSeekBox->setValue(10);
0268 #if KDE_IS_VERSION(4, 2, 80)
0269     pluralSeekBox->setSuffix(ki18np(" second", " seconds"));
0270 #else
0271     pluralSeekBox->setSuffix(i18n(" seconds"));
0272 #endif
0273     seekTime = pluralSeekBox;
0274     seekLayout->addWidget(seekTime);
0275     seekLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
0276     gridlayout->addLayout (seekLayout, 2, 0, 1, 2);
0277     controlbox->setLayout(gridlayout);
0278 
0279     QVBoxLayout* pagelayout = new QVBoxLayout;
0280     pagelayout->setMargin(5);
0281     pagelayout->setSpacing(2);
0282     pagelayout->addWidget(windowbox);
0283     pagelayout->addWidget(playbox);
0284     pagelayout->addWidget(controlbox);
0285     pagelayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0286     setLayout(pagelayout);
0287 }
0288 
0289 KDE_NO_CDTOR_EXPORT PrefGeneralPageLooks::PrefGeneralPageLooks (QWidget *parent, Settings * settings)
0290  : QWidget(parent), colors (settings->colors), fonts (settings->fonts)
0291 {
0292     QGroupBox *colorbox= new QGroupBox(i18n("Colors"));
0293     colorscombo = new QComboBox;
0294     for (int i = 0; i < int (ColorSetting::last_target); i++)
0295         colorscombo->addItem (colors[i].title);
0296     colorscombo->setCurrentIndex (0);
0297     connect (colorscombo, SIGNAL (activated (int)),
0298             this, SLOT (colorItemChanged(int)));
0299     colorbutton = new KColorButton;
0300     colorbutton->setColor (colors[0].color);
0301     connect (colorbutton, SIGNAL (changed (const QColor &)),
0302             this, SLOT (colorCanged (const QColor &)));
0303     QHBoxLayout* hbox = new QHBoxLayout;
0304     hbox->addWidget(colorscombo);
0305     hbox->addWidget(colorbutton);
0306     colorbox->setLayout(hbox);
0307 
0308     QGroupBox* fontbox = new QGroupBox(i18n ("Fonts"));
0309     fontscombo = new QComboBox;
0310     for (int i = 0; i < int (FontSetting::last_target); i++)
0311         fontscombo->addItem (fonts[i].title);
0312     fontscombo->setCurrentIndex (0);
0313     connect (fontscombo, SIGNAL (activated (int)),
0314             this, SLOT (fontItemChanged(int)));
0315     fontbutton = new QPushButton(i18n ("AaBbCc"));
0316     fontbutton->setFlat (true);
0317     fontbutton->setFont (fonts[0].font);
0318     connect (fontbutton, SIGNAL (clicked ()), this, SLOT (fontClicked ()));
0319     hbox = new QHBoxLayout;
0320     hbox->addWidget(fontscombo);
0321     hbox->addWidget(fontbutton);
0322     fontbox->setLayout(hbox);
0323 
0324     QVBoxLayout* vbox = new QVBoxLayout;
0325     vbox->setMargin (5);
0326     vbox->setSpacing (2);
0327     vbox->addWidget(colorbox);
0328     vbox->addWidget(fontbox);
0329     vbox->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0330     setLayout(vbox);
0331 }
0332 
0333 KDE_NO_EXPORT void PrefGeneralPageLooks::colorItemChanged (int c) {
0334     if (c < int (ColorSetting::last_target))
0335         colorbutton->setColor (colors[c].newcolor);
0336 }
0337 
0338 KDE_NO_EXPORT void PrefGeneralPageLooks::colorCanged (const QColor & c) {
0339     if (colorscombo->currentIndex () < int (ColorSetting::last_target))
0340         colors[colorscombo->currentIndex ()].newcolor = c;
0341 }
0342 
0343 KDE_NO_EXPORT void PrefGeneralPageLooks::fontItemChanged (int f) {
0344     if (f < int (FontSetting::last_target))
0345         fontbutton->setFont (fonts[f].newfont);
0346 }
0347 
0348 KDE_NO_EXPORT void PrefGeneralPageLooks::fontClicked () {
0349     if (fontscombo->currentIndex () < int (FontSetting::last_target)) {
0350         QFont myfont = fonts [fontscombo->currentIndex ()].newfont;
0351         int res = KFontDialog::getFont (myfont, KFontChooser::NoDisplayFlags, this);
0352         if (res == KFontDialog::Accepted) {
0353             fonts [fontscombo->currentIndex ()].newfont = myfont;
0354             fontbutton->setFont (myfont);
0355         }
0356     }
0357 }
0358 
0359 KDE_NO_CDTOR_EXPORT PrefSourcePageURL::PrefSourcePageURL (QWidget *parent)
0360 : QWidget(parent)
0361 {
0362     setObjectName ("URLPage");
0363     QHBoxLayout* urllayout = new QHBoxLayout;
0364     QHBoxLayout* sub_urllayout = new QHBoxLayout;
0365     QLabel *urlLabel = new QLabel(i18n("Location:"));
0366     urllist = new KComboBox (true);
0367     urllist->setMaxCount (20);
0368     urllist->setDuplicatesEnabled (false); // not that it helps much :(
0369     url = new KUrlRequester(urllist, NULL);
0370     url->setWhatsThis(i18n ("Location of the playable item"));
0371     //url->setShowLocalProtocol (true);
0372     url->setSizePolicy (QSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred));
0373     QLabel *sub_urlLabel = new QLabel(i18n("Sub title:"));
0374     sub_urllist = new KComboBox(true);
0375     sub_urllist->setMaxCount (20);
0376     sub_urllist->setDuplicatesEnabled (false); // not that it helps much :(
0377     sub_url = new KUrlRequester(sub_urllist, NULL);
0378     sub_url->setWhatsThis(i18n ("Optional location of a file containing the subtitles of the URL above"));
0379     sub_url->setSizePolicy (QSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred));
0380     backend = new QListWidget;
0381     clicktoplay = new QCheckBox(i18n("Load on demand"));
0382     clicktoplay->setWhatsThis(i18n ("When enabled, all embedded movies will start with a image that needs to be clicked to start the video playback"));
0383     grabhref = new QCheckBox(i18n("Grab image when 'Click to Play' detected"));
0384     grabhref->setWhatsThis(i18n ("When enabled and a HTML object has a HREF attribute, grab and save an image of the first frame of initial link. This image will be shown instead of a default picture."));
0385     urllayout->addWidget (urlLabel);
0386     urllayout->addWidget (url);
0387     sub_urllayout->addWidget (sub_urlLabel);
0388     sub_urllayout->addWidget (sub_url);
0389 
0390     QGridLayout * gridlayout = new QGridLayout (/*2, 2*/);
0391     QLabel *backendLabel = new QLabel(i18n ("Use movie player:"));
0392     //QWhatsThis::add (allowhref, i18n ("Explain this in a few lines"));
0393     gridlayout->addWidget (backendLabel, 0, 0);
0394     gridlayout->addWidget (backend, 1, 0);
0395     gridlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1, 1, 1);
0396 
0397     QGroupBox *bandwidthbox = new QGroupBox(i18n("Network bandwidth"));
0398     prefBitRate = new QLineEdit;
0399     prefBitRate->setValidator( new QIntValidator( prefBitRate ) );
0400     prefBitRate->setWhatsThis(i18n("Sometimes it is possible to choose between various streams given a particular bitrate.\nThis option sets how much bandwidth you would prefer to allocate to video."));
0401     maxBitRate = new QLineEdit;
0402     maxBitRate->setValidator( new QIntValidator( maxBitRate ) );
0403     maxBitRate->setWhatsThis(i18n("Sometimes it is possible to choose between various streams given a particular bitrate.\nThis option sets the maximum bandwidth you have available for video."));
0404     QGridLayout* bitratelayout = new QGridLayout;
0405     bitratelayout->addWidget(new QLabel(i18n("Preferred bitrate:")), 0, 0);
0406     bitratelayout->addWidget (prefBitRate, 0, 1);
0407     bitratelayout->addWidget (new QLabel (i18n ("kbit/s")), 0, 2);
0408     bitratelayout->addWidget (new QLabel(i18n("Maximum bitrate:")), 1, 0);
0409     bitratelayout->addWidget (maxBitRate, 1, 1);
0410     bitratelayout->addWidget (new QLabel (i18n ("kbit/s")), 1, 2);
0411     bandwidthbox->setLayout(bitratelayout);
0412 
0413     QVBoxLayout* vbox = new QVBoxLayout;
0414     vbox->setMargin(5);
0415     vbox->setSpacing(2);
0416     vbox->addLayout(urllayout);
0417     vbox->addLayout(sub_urllayout);
0418     vbox->addItem (new QSpacerItem (0, 10, QSizePolicy::Minimum, QSizePolicy::Minimum));
0419     vbox->addWidget(clicktoplay);
0420     vbox->addWidget(grabhref);
0421     vbox->addItem (new QSpacerItem (0, 10, QSizePolicy::Minimum, QSizePolicy::Minimum));
0422     vbox->addWidget(bandwidthbox);
0423     vbox->addItem (new QSpacerItem (0, 10, QSizePolicy::Minimum, QSizePolicy::Minimum));
0424     vbox->addLayout(gridlayout);
0425     vbox->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0426     setLayout(vbox);
0427 
0428     connect (url, SIGNAL(textChanged(const QString&)),
0429              this, SLOT (slotTextChanged (const QString &)));
0430     connect (sub_url, SIGNAL(textChanged(const QString&)),
0431              this, SLOT (slotTextChanged (const QString &)));
0432 }
0433 
0434 KDE_NO_EXPORT void PrefSourcePageURL::slotBrowse () {
0435 }
0436 
0437 KDE_NO_EXPORT void PrefSourcePageURL::slotTextChanged (const QString &) {
0438     changed = true;
0439 }
0440 
0441 KDE_NO_CDTOR_EXPORT PrefRecordPage::PrefRecordPage(QWidget* parent,
0442         PartBase * player, RecorderPage * rl, int rec_len)
0443  : QWidget(parent),
0444    m_player (player),
0445    m_recorders (rl),
0446    m_recorders_length (rec_len)
0447 {
0448     setObjectName ("RecordPage");
0449     QHBoxLayout * urllayout = new QHBoxLayout ();
0450     QLabel* urlLabel = new QLabel(i18n("Output file:"));
0451     url = new KUrlRequester;
0452     urllayout->addWidget (urlLabel);
0453     urllayout->addWidget (url);
0454 
0455     source = new QLabel (i18n ("Current source: ") +
0456            (m_player->source () ? m_player->source ()->prettyName () : QString ()));
0457     QGroupBox* group = new QGroupBox(i18n("Recorder"));
0458     QVBoxLayout *vbox = new QVBoxLayout;
0459     recorder = new QButtonGroup;
0460     int id = 0;
0461     for (RecorderPage* p = m_recorders; p; p = p->next) {
0462         QRadioButton* button = new QRadioButton(p->name());
0463         vbox->addWidget(button);
0464         recorder->addButton(button, id++);
0465     }
0466     recorder->button(0)->setChecked(true); // for now
0467     group->setLayout(vbox);
0468 
0469     QGroupBox* autogroup = new QGroupBox(i18n("Auto Playback"));
0470     vbox = new QVBoxLayout;
0471     replay = new QButtonGroup;
0472     QRadioButton* radio = new QRadioButton (i18n ("&No"));
0473     vbox->addWidget(radio);
0474     replay->addButton(radio, 0);
0475     radio = new QRadioButton (i18n ("&When recording finished"));
0476     vbox->addWidget(radio);
0477     replay->addButton(radio, 1);
0478     radio = new QRadioButton (i18n ("A&fter"));
0479     vbox->addWidget(radio);
0480     replay->addButton(radio, 2);
0481     QWidget* customreplay = new QWidget;
0482     KPluralHandlingSpinBox* pluralReplayBox = new KPluralHandlingSpinBox;
0483     pluralReplayBox = new KPluralHandlingSpinBox;
0484 #if KDE_IS_VERSION(4, 2, 80)
0485     pluralReplayBox->setSuffix(ki18np(" second", " seconds"));
0486 #else
0487     pluralReplayBox->setSuffix(i18n(" seconds"));
0488 #endif
0489     replaytime = pluralReplayBox;
0490     QHBoxLayout *replaylayout = new QHBoxLayout;
0491     replaylayout->addWidget(new QLabel(i18n("Time:")));
0492     replaylayout->addWidget (replaytime);
0493     replaylayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
0494     customreplay->setLayout(replaylayout);
0495     vbox->addWidget(customreplay);
0496     autogroup->setLayout(vbox);
0497 
0498     recordButton = new QPushButton (i18n ("Start &Recording"));
0499     QHBoxLayout *buttonlayout = new QHBoxLayout;
0500     buttonlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
0501     buttonlayout->addWidget (recordButton);
0502 #ifdef KMPLAYER_WITH_XINE
0503     connect (recorder, SIGNAL (clicked(int)), this, SLOT(recorderClicked(int)));
0504 #endif
0505     //connect(replay, SIGNAL(buttonClicked (int)), this, SLOT (replayClicked (int)));
0506     connect (player, SIGNAL (recording (bool)), this, SLOT (recording (bool)));
0507     connect(recordButton, SIGNAL(clicked()), this, SLOT(slotRecord()));
0508 
0509     QVBoxLayout* pagelayout = new QVBoxLayout;
0510     pagelayout->setMargin(5);
0511     pagelayout->setSpacing(2);
0512     pagelayout->addItem(new QSpacerItem(5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
0513     pagelayout->addLayout(urllayout);
0514     pagelayout->addItem(new QSpacerItem(5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
0515     pagelayout->addWidget(source);
0516     pagelayout->addItem(new QSpacerItem(5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
0517     pagelayout->addWidget(group);
0518     pagelayout->addItem(new QSpacerItem(5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
0519     pagelayout->addWidget(autogroup);
0520     pagelayout->addLayout(buttonlayout);
0521     pagelayout->addItem(new QSpacerItem(5, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0522     setLayout(pagelayout);
0523 }
0524 
0525 PrefRecordPage::~PrefRecordPage () {
0526 }
0527 
0528 KDE_NO_EXPORT void PrefRecordPage::recording (bool on) {
0529     kDebug() << "PrefRecordPage::recording " << on << endl;
0530     recordButton->setText (on
0531             ? i18n ("Stop &Recording")
0532             : i18n ("Start &Recording"));
0533     url->setEnabled (!on);
0534     if (on)
0535         topLevelWidget ()->hide ();
0536 }
0537 
0538 KDE_NO_EXPORT void PrefRecordPage::showEvent (QShowEvent *e) {
0539     Source *src = m_player->source ();
0540     if (recordButton->text () == i18n ("Start &Recording") && src &&
0541             src->current ()) {
0542         int id = 0;
0543         int nr_recs = 0;
0544         for (RecorderPage * p = m_recorders; p; p = p->next, ++id) {
0545             QAbstractButton * radio = recorder->button(id);
0546             bool b = m_player->mediaManager ()->recorderInfos ()
0547                 [p->recorderName ()]->supports (src->name ());
0548             radio->setEnabled (b);
0549             if (b) nr_recs++;
0550         }
0551         source_url = src->current ()->src;
0552         source->setText (i18n ("Current Source: ") + source_url);
0553         recordButton->setEnabled (nr_recs > 0);
0554     }
0555     QWidget::showEvent (e);
0556 }
0557 
0558 KDE_NO_EXPORT void PrefRecordPage::recorderClicked (int /*id*/) {
0559     /*bool b = recorder->button(id)->text().indexOf (QString::fromLatin1("Xine")) > -1;
0560     replay->setEnabled (!b);
0561     if (b)
0562         replay->setButton (Settings::ReplayNo);*/
0563 
0564 }
0565 
0566 KDE_NO_EXPORT void PrefRecordPage::replayClicked (int id) {
0567     replaytime->setEnabled (id == Settings::ReplayAfter);
0568 }
0569 
0570 KDE_NO_EXPORT void PrefRecordPage::slotRecord () {
0571     if (m_player->isRecording ()) {
0572         m_player->stopRecording ();
0573     } else if (!url->lineEdit()->text().isEmpty()) {
0574         m_player->source ()->document ()->reset ();
0575         m_player->settings ()->recordfile = url->lineEdit()->text();
0576         m_player->settings ()->replaytime = replaytime->value();
0577         int id = recorder->checkedId ();
0578         int replayid = replay->checkedId ();
0579         m_player->settings ()->recorder = Settings::Recorder (id);
0580         m_player->settings ()->replayoption = Settings::ReplayOption (replayid);
0581         for (RecorderPage * p = m_recorders; p; p = p->next)
0582             if (id-- == 0) {
0583                 int start_after = 0;
0584                 if (replay->checkedId () == Settings::ReplayAfter) {
0585                     int t = replaytime->value ();
0586                     if (t > 0)
0587                         start_after = 1000 * t;
0588                 } else if (replay->checkedId () != Settings::ReplayNo) {
0589                     start_after = -1;
0590                 }
0591                 p->startRecording ();
0592                 m_player->record (source_url, url->lineEdit()->text(),
0593                         p->recorderName (), start_after);
0594                 break;
0595             }
0596     }
0597 }
0598 
0599 KDE_NO_CDTOR_EXPORT RecorderPage::RecorderPage (QWidget *parent, PartBase * player)
0600  : QWidget(parent), next(0L), m_player(player) {}
0601 
0602 KDE_NO_CDTOR_EXPORT PrefMEncoderPage::PrefMEncoderPage(QWidget* parent, PartBase* player)
0603     : RecorderPage (parent, player)
0604 {
0605     QGroupBox* formatbox = new QGroupBox(i18n("Format"));
0606     QVBoxLayout* vbox = new QVBoxLayout;
0607     format = new QButtonGroup(this);
0608     QRadioButton* radio = new QRadioButton (i18n ("Same as source"));
0609     vbox->addWidget(radio);
0610     format->addButton(radio, 0);
0611     radio = new QRadioButton (i18n ("Custom"));
0612     vbox->addWidget(radio);
0613     format->addButton(radio, 1);
0614     QGridLayout* gridlayout = new QGridLayout;
0615     QLabel *argLabel = new QLabel (i18n("Mencoder arguments:"));
0616     arguments = new QLineEdit ("");
0617     gridlayout->addWidget (argLabel, 0, 0);
0618     gridlayout->addWidget (arguments, 0, 1);
0619     vbox->addLayout(gridlayout);
0620     formatbox->setLayout(vbox);
0621     connect (format, SIGNAL (buttonClicked (int)), this, SLOT (formatClicked (int)));
0622 
0623     QVBoxLayout* pagelayout = new QVBoxLayout;
0624     pagelayout->setMargin(5);
0625     pagelayout->setSpacing(2);
0626     pagelayout->addWidget(formatbox);
0627     pagelayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0628     setLayout(pagelayout);
0629 }
0630 
0631 KDE_NO_EXPORT void PrefMEncoderPage::formatClicked (int id) {
0632     arguments->setEnabled (!!id);
0633 }
0634 
0635 KDE_NO_EXPORT void PrefMEncoderPage::startRecording () {
0636     m_player->settings ()->recordcopy = !format->checkedId ();
0637     m_player->settings ()->mencoderarguments = arguments->text ();
0638 }
0639 
0640 KDE_NO_EXPORT QString PrefMEncoderPage::name () {
0641     return i18n ("&MEncoder");
0642 }
0643 
0644 KDE_NO_CDTOR_EXPORT PrefMPlayerDumpstreamPage::PrefMPlayerDumpstreamPage (QWidget *parent, PartBase * player) : RecorderPage (parent, player) {
0645     hide();
0646 }
0647 
0648 KDE_NO_EXPORT QString PrefMPlayerDumpstreamPage::name () {
0649     return i18n ("MPlayer -&dumpstream");
0650 }
0651 
0652 KDE_NO_CDTOR_EXPORT PrefFFMpegPage::PrefFFMpegPage(QWidget* parent, PartBase* player)
0653     : RecorderPage(parent, player)
0654 {
0655     QGridLayout *gridlayout = new QGridLayout (/*1, 2, 2*/);
0656     QLabel *argLabel = new QLabel (i18n("FFMpeg arguments:"));
0657     arguments = new QLineEdit ("");
0658     gridlayout->addWidget (argLabel, 0, 0);
0659     gridlayout->addWidget (arguments, 0, 1);
0660 
0661     QVBoxLayout* pagelayout = new QVBoxLayout;
0662     pagelayout->setMargin(5);
0663     pagelayout->setSpacing(2);
0664     pagelayout->addLayout (gridlayout);
0665     pagelayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0666     setLayout(pagelayout);
0667 }
0668 
0669 KDE_NO_EXPORT void PrefFFMpegPage::startRecording () {
0670     m_player->settings ()->ffmpegarguments = arguments->text ();
0671 }
0672 
0673 KDE_NO_EXPORT QString PrefFFMpegPage::name () {
0674     return i18n ("&FFMpeg");
0675 }
0676 
0677 #ifdef KMPLAYER_WITH_XINE
0678 KDE_NO_CDTOR_EXPORT PrefXinePage::PrefXinePage (QWidget *parent, PartBase * player) : RecorderPage (parent, player) {
0679     hide();
0680 }
0681 
0682 KDE_NO_EXPORT QString PrefXinePage::name () {
0683     return i18n ("&Xine");
0684 }
0685 #endif
0686 
0687 KDE_NO_CDTOR_EXPORT PrefGeneralPageOutput::PrefGeneralPageOutput(QWidget *parent, OutputDriver * ad, OutputDriver * vd)
0688  : QWidget(parent)
0689 {
0690     videoDriver = new QListWidget;
0691     for (int i = 0; vd[i].driver; i++)
0692         videoDriver->addItem(vd[i].description);
0693     videoDriver->setWhatsThis(i18n("Sets video driver. Recommended is XVideo, or, if it is not supported, X11, which is slower."));
0694 
0695     audioDriver = new QListWidget;
0696     for (int i = 0; ad[i].driver; i++)
0697         audioDriver->addItem(ad[i].description);
0698 
0699     QVBoxLayout* pagelayout = new QVBoxLayout;
0700     pagelayout->setMargin(5);
0701     pagelayout->setSpacing(2);
0702     pagelayout->addWidget(videoDriver);
0703     pagelayout->addWidget(audioDriver);
0704     pagelayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0705     setLayout(pagelayout);
0706 }
0707 
0708 KDE_NO_CDTOR_EXPORT PrefOPPagePostProc::PrefOPPagePostProc(QWidget *parent)
0709     : QWidget(parent)
0710 {
0711     postProcessing = new QCheckBox(i18n("Enable use of postprocessing filters"));
0712     postProcessing->setEnabled( true );
0713     disablePPauto = new QCheckBox(i18n("Disable use of postprocessing when watching TV/DVD"));
0714 
0715     PostprocessingOptions = new QTabWidget;
0716     PostprocessingOptions->setEnabled (true);
0717     //PostprocessingOptions->setAutoMask (false);
0718     PostprocessingOptions->setTabShape( QTabWidget::Rounded );
0719     PostprocessingOptions->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ));
0720 
0721     QGroupBox* presetSelection = new QGroupBox;
0722     defaultPreset = new QRadioButton (i18n ("Default"));
0723     customPreset = new QRadioButton (i18n ("Custom"));
0724     fastPreset = new QRadioButton (i18n ("Fast"));
0725     defaultPreset->setChecked( true );
0726     QVBoxLayout* vbox = new QVBoxLayout;
0727     vbox->addWidget(defaultPreset);
0728     vbox->addWidget(customPreset);
0729     vbox->addWidget(fastPreset);
0730     QButtonGroup* buttongroup = new QButtonGroup(presetSelection);
0731     buttongroup->addButton(defaultPreset, 0);
0732     buttongroup->addButton(customPreset, 1);
0733     buttongroup->addButton(fastPreset, 2);
0734     vbox->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0735     presetSelection->setLayout(vbox);
0736     PostprocessingOptions->addTab(presetSelection, i18n("General"));
0737 
0738     //
0739     // SECOND!!!
0740     //
0741     /* I JUST WASN'T ABLE TO GET THIS WORKING WITH QGridLayouts */
0742     QVBoxLayout *customFiltersLayout = new QVBoxLayout;
0743 
0744     QGroupBox *customFilters = new QGroupBox;
0745     customFilters->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum));
0746     customFilters->setFlat(false);
0747     customFilters->setEnabled( false );
0748     //customFilters->setInsideSpacing(7);
0749 
0750     QHBoxLayout* hbox = new QHBoxLayout;
0751     HzDeblockFilter = new QCheckBox (i18n ("Horizontal deblocking"));
0752     HzDeblockAQuality = new QCheckBox (i18n ("Auto quality"));
0753     HzDeblockAQuality->setEnabled (false);
0754     HzDeblockCFiltering = new QCheckBox (i18n ("Chrominance filtering"));
0755     HzDeblockCFiltering->setEnabled (false);
0756     hbox->addWidget( HzDeblockFilter );
0757     hbox->addItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
0758     hbox->addWidget( HzDeblockAQuality );
0759     hbox->addWidget( HzDeblockCFiltering );
0760     customFiltersLayout->addLayout(hbox);
0761 
0762     QFrame* line = new QFrame;
0763     line->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Maximum ) );
0764     line->setFrameShape( QFrame::HLine );
0765     line->setFrameShadow( QFrame::Sunken );
0766     customFiltersLayout->addWidget(line);
0767 
0768     hbox = new QHBoxLayout;
0769     VtDeblockFilter = new QCheckBox(i18n("Vertical deblocking"));
0770     VtDeblockAQuality = new QCheckBox (i18n ("Auto quality"));
0771     VtDeblockAQuality->setEnabled (false);
0772     VtDeblockCFiltering = new QCheckBox (i18n ("Chrominance filtering"));
0773     VtDeblockCFiltering->setEnabled (false);
0774     hbox->addWidget( VtDeblockFilter );
0775     hbox->addItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
0776     hbox->addWidget( VtDeblockAQuality );
0777     hbox->addWidget( VtDeblockCFiltering );
0778     customFiltersLayout->addLayout(hbox);
0779 
0780     line = new QFrame;
0781     line->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Maximum ) );
0782     line->setFrameShape( QFrame::HLine );
0783     line->setFrameShadow( QFrame::Sunken );
0784     customFiltersLayout->addWidget(line);
0785 
0786     hbox = new QHBoxLayout;
0787     DeringFilter = new QCheckBox (i18n ("Dering filter"));
0788     DeringAQuality = new QCheckBox (i18n ("Auto quality"));
0789     DeringAQuality->setEnabled (false);
0790     DeringCFiltering=new QCheckBox(i18n("Chrominance filtering"));
0791     DeringCFiltering->setEnabled (false);
0792     hbox->addWidget( DeringFilter );
0793     hbox->addItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
0794     hbox->addWidget( DeringAQuality );
0795     hbox->addWidget( DeringCFiltering );
0796     customFiltersLayout->addLayout(hbox);
0797 
0798     line = new QFrame;
0799     line->setFrameShape( QFrame::HLine );
0800     line->setFrameShadow( QFrame::Sunken );
0801     line->setFrameShape( QFrame::HLine );
0802     customFiltersLayout->addWidget(line);
0803 
0804     hbox = new QHBoxLayout;
0805     AutolevelsFilter = new QCheckBox (i18n ("Auto brightness/contrast"));
0806     AutolevelsFullrange = new QCheckBox (i18n ("Stretch luminance to full range"));
0807     AutolevelsFullrange->setEnabled (false);
0808     hbox->addWidget(AutolevelsFilter);
0809     hbox->addItem(new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ));
0810     hbox->addWidget(AutolevelsFullrange);
0811     customFiltersLayout->addLayout(hbox);
0812 
0813     hbox = new QHBoxLayout;
0814     TmpNoiseFilter =new QCheckBox(i18n("Temporal noise reducer"),customFilters);
0815     /*  Note: Change TmpNoiseFilter text back to "Label:" if this slider gets reactivated
0816         TmpNoiseSlider = new QSlider( customFilters, "TmpNoiseSlider" );
0817         TmpNoiseSlider->setEnabled( false );
0818         TmpNoiseSlider->setMinValue( 1 );
0819         TmpNoiseSlider->setMaxValue( 3 );
0820         TmpNoiseSlider->setValue( 1 );
0821         TmpNoiseSlider->setOrientation( QSlider::Horizontal );
0822         TmpNoiseSlider->setTickmarks( QSlider::Left );
0823         TmpNoiseSlider->setTickInterval( 1 );
0824         TmpNoiseSlider->setSizePolicy(QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum);*/
0825 
0826     /*customFiltersLayout->addWidget(TmpNoiseFilter,7,0);
0827       customFiltersLayout->addWidget(TmpNoiseSlider,7,2);*/
0828     hbox->addWidget(TmpNoiseFilter);
0829     hbox->addItem(new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ));
0830     //hbox->addWidget(TmpNoiseSlider);
0831     customFiltersLayout->addLayout(hbox);
0832 
0833     customFiltersLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0834     customFilters->setLayout(customFiltersLayout);
0835 
0836     PostprocessingOptions->addTab(customFilters, i18n("Custom Preset"));
0837     //
0838     //THIRD!!!
0839     //
0840     QGroupBox* deintSelectionWidget = new QGroupBox;
0841     vbox = new QVBoxLayout;
0842     LinBlendDeinterlacer = new QCheckBox(i18n ("Linear blend deinterlacer"));
0843     LinIntDeinterlacer = new QCheckBox(i18n ("Linear interpolating deinterlacer"));
0844     CubicIntDeinterlacer = new QCheckBox(i18n ("Cubic interpolating deinterlacer"));
0845     MedianDeinterlacer = new QCheckBox(i18n ("Median deinterlacer"));
0846     FfmpegDeinterlacer = new QCheckBox(i18n ("FFmpeg deinterlacer"));
0847     vbox->addWidget(LinBlendDeinterlacer);
0848     vbox->addWidget(LinIntDeinterlacer);
0849     vbox->addWidget(CubicIntDeinterlacer);
0850     vbox->addWidget(MedianDeinterlacer);
0851     vbox->addWidget(FfmpegDeinterlacer);
0852     vbox->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0853     deintSelectionWidget->setLayout(vbox);
0854     PostprocessingOptions->addTab(deintSelectionWidget, i18n( "Deinterlacing"));
0855 
0856     QVBoxLayout* pagelayout = new QVBoxLayout;
0857     pagelayout->setMargin(5);
0858     pagelayout->setSpacing(2);
0859     pagelayout->addWidget(postProcessing);
0860     pagelayout->addWidget(disablePPauto);
0861     pagelayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum));
0862     pagelayout->addWidget(PostprocessingOptions);
0863     pagelayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
0864     setLayout(pagelayout);
0865 
0866     PostprocessingOptions->setEnabled(false);
0867     connect( customPreset, SIGNAL (toggled(bool) ), customFilters, SLOT(setEnabled(bool)));
0868     connect( postProcessing, SIGNAL( toggled(bool) ), PostprocessingOptions, SLOT( setEnabled(bool) ) );
0869     connect( HzDeblockFilter, SIGNAL( toggled(bool) ), HzDeblockAQuality, SLOT( setEnabled(bool) ) );
0870     connect( HzDeblockFilter, SIGNAL( toggled(bool) ), HzDeblockCFiltering, SLOT( setEnabled(bool) ) );
0871     connect( VtDeblockFilter, SIGNAL( toggled(bool) ), VtDeblockCFiltering, SLOT( setEnabled(bool) ) );
0872     connect( VtDeblockFilter, SIGNAL( toggled(bool) ), VtDeblockAQuality, SLOT( setEnabled(bool) ) );
0873     connect( DeringFilter, SIGNAL( toggled(bool) ), DeringAQuality, SLOT( setEnabled(bool) ) );
0874     connect( DeringFilter, SIGNAL( toggled(bool) ), DeringCFiltering, SLOT( setEnabled(bool) ) );
0875     //connect( TmpNoiseFilter, SIGNAL( toggled(bool) ), TmpNoiseSlider, SLOT( setEnabled(bool) ) );
0876 
0877     connect( AutolevelsFilter, SIGNAL( toggled(bool) ), AutolevelsFullrange, SLOT( setEnabled(bool) ) );
0878 
0879     defaultPreset->setWhatsThis(i18n( "Enable mplayer's default postprocessing filters" ) );
0880     customPreset->setWhatsThis(i18n( "Enable custom postprocessing filters (See: Custom preset -tab)" ) );
0881     fastPreset->setWhatsThis(i18n( "Enable mplayer's fast postprocessing filters" ) );
0882     HzDeblockAQuality->setWhatsThis(i18n( "Filter is used if there is enough CPU" ) );
0883     VtDeblockAQuality->setWhatsThis(i18n( "Filter is used if there is enough CPU" ) );
0884     DeringAQuality->setWhatsThis(i18n( "Filter is used if there is enough CPU" ) );
0885     //QWhatsThis::add( TmpNoiseSlider, i18n( "Strength of the noise reducer" ) );
0886     AutolevelsFullrange->setWhatsThis(i18n( "Stretches luminance to full range (0..255)" ) );
0887     PostprocessingOptions->adjustSize();
0888 }
0889 
0890 KDE_NO_EXPORT void Preferences::confirmDefaults() {
0891     switch( KMessageBox::warningContinueCancel( this,
0892                 i18n("You are about to have all your settings overwritten with defaults.\nPlease confirm.\n"),
0893                 i18n("Reset Settings?"))) {
0894         case KMessageBox::Continue:
0895                 Preferences::setDefaults();
0896                 break;
0897         case KMessageBox::Cancel:
0898         default: // avoid warnings for the unhandled enum values
0899                 break;
0900     }
0901 }
0902 
0903 KDE_NO_EXPORT void Preferences::setDefaults() {
0904     m_GeneralPageGeneral->keepSizeRatio->setChecked(true);
0905     m_GeneralPageGeneral->loop->setChecked(false);
0906     m_GeneralPageGeneral->seekTime->setValue(10);
0907 
0908     m_GeneralPageOutput->videoDriver->setCurrentRow(0);
0909     m_GeneralPageOutput->audioDriver->setCurrentRow(0);
0910 
0911     m_OPPagePostproc->postProcessing->setChecked(false);
0912     m_OPPagePostproc->disablePPauto->setChecked(true);
0913 
0914     m_OPPagePostproc->defaultPreset->setChecked(true);
0915 
0916     m_OPPagePostproc->LinBlendDeinterlacer->setChecked(false);
0917     m_OPPagePostproc->LinIntDeinterlacer->setChecked(false);
0918     m_OPPagePostproc->CubicIntDeinterlacer->setChecked(false);
0919     m_OPPagePostproc->MedianDeinterlacer->setChecked(false);
0920     m_OPPagePostproc->FfmpegDeinterlacer->setChecked(false);
0921 
0922 }
0923 #include "pref.moc"