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"