File indexing completed on 2024-04-21 04:54:13

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