File indexing completed on 2024-04-28 04:50:48
0001 /* 0002 * configurationdialog.cpp 0003 * 0004 * Copyright (C) 2011 Christoph Pfister <christophpfister@gmail.com> 0005 * 0006 * This program is free software; you can redistribute it and/or modify 0007 * it under the terms of the GNU General Public License as published by 0008 * the Free Software Foundation; either version 2 of the License, or 0009 * (at your option) any later version. 0010 * 0011 * This program is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 * GNU General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU General Public License along 0017 * with this program; if not, write to the Free Software Foundation, Inc., 0018 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 0019 */ 0020 0021 #include <KConfigGroup> 0022 #include <KLocalizedString> 0023 #include <QComboBox> 0024 #include <QDialogButtonBox> 0025 #include <QGridLayout> 0026 #include <QLabel> 0027 #include <QLineEdit> 0028 #include <QPlainTextEdit> 0029 #include <QProcess> 0030 #include <QPushButton> 0031 #include <QSpinBox> 0032 #include <QVBoxLayout> 0033 0034 #include "configuration.h" 0035 #include "configurationdialog.h" 0036 #include "configurationdialog_p.h" 0037 0038 QString Log::log; 0039 0040 ConfigurationDialog::ConfigurationDialog(QWidget *parent) : KPageDialog(parent) 0041 { 0042 setWindowTitle(i18nc("@title:window", "Configure Kaffeine")); 0043 0044 QWidget *widget = new QWidget(this); 0045 QGridLayout *gridLayout = new QGridLayout(widget); 0046 0047 startupDisplayModeBox = new QComboBox(widget); 0048 startupDisplayModeBox->addItem(i18nc("@item:inlistbox 'Startup display mode:'", 0049 "Normal Mode")); 0050 startupDisplayModeBox->addItem(i18nc("@item:inlistbox 'Startup display mode:'", 0051 "Minimal Mode")); 0052 startupDisplayModeBox->addItem(i18nc("@item:inlistbox 'Startup display mode:'", 0053 "Full Screen Mode")); 0054 startupDisplayModeBox->addItem(i18nc("@item:inlistbox 'Startup display mode:'", 0055 "Remember Last Setting")); 0056 startupDisplayModeBox->setCurrentIndex(Configuration::instance()->getStartupDisplayMode()); 0057 gridLayout->addWidget(startupDisplayModeBox, 0, 1); 0058 0059 QLabel *label = new QLabel(i18nc("@label:listbox", "Startup display mode:"), widget); 0060 label->setBuddy(startupDisplayModeBox); 0061 gridLayout->addWidget(label, 0, 0); 0062 0063 shortSkipBox = new QSpinBox(widget); 0064 shortSkipBox->setRange(1, 600); 0065 shortSkipBox->setValue(Configuration::instance()->getShortSkipDuration()); 0066 gridLayout->addWidget(shortSkipBox, 1, 1); 0067 0068 label = new QLabel(i18nc("@label:spinbox", "Short skip duration:"), widget); 0069 label->setBuddy(shortSkipBox); 0070 gridLayout->addWidget(label, 1, 0); 0071 0072 longSkipBox = new QSpinBox(widget); 0073 longSkipBox->setRange(1, 600); 0074 longSkipBox->setValue(Configuration::instance()->getLongSkipDuration()); 0075 gridLayout->addWidget(longSkipBox, 2, 1); 0076 0077 label = new QLabel(i18nc("@label:spinbox", "Long skip duration:"), widget); 0078 label->setBuddy(longSkipBox); 0079 gridLayout->addWidget(label, 2, 0); 0080 gridLayout->setRowStretch(3, 1); 0081 0082 KPageWidgetItem *page = new KPageWidgetItem(widget, i18nc("@title:group", "General")); 0083 page->setIcon(QIcon::fromTheme(QLatin1String("configure"), QIcon(":configure"))); 0084 addPage(page); 0085 0086 widget = new QWidget(this); 0087 gridLayout = new QGridLayout(widget); 0088 0089 label = new QLabel(i18nc("@label:textbox", "Log messages:"), widget); 0090 gridLayout->addWidget(label, 0, 0); 0091 0092 QPushButton *pushButton = new QPushButton(i18nc("@action:button", "Show dmesg")); 0093 pushButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 0094 connect(pushButton, SIGNAL(clicked()), this, SLOT(showDmesg())); 0095 gridLayout->addWidget(pushButton, 0, 1); 0096 0097 // TODO: add later a way to show the Kaffeine logs here 0098 Log newLog; 0099 QPlainTextEdit *textEdit = new QPlainTextEdit(widget); 0100 textEdit->setPlainText(newLog.getLog()); 0101 textEdit->setReadOnly(true); 0102 gridLayout->addWidget(textEdit); 0103 gridLayout->addWidget(textEdit, 1, 0, 1, 2); 0104 gridLayout->setRowStretch(2, 0); 0105 0106 page = new KPageWidgetItem(widget, i18nc("@title:group", "Diagnostics")); 0107 page->setIcon(QIcon::fromTheme(QLatin1String("page-zoom"), QIcon(":page-zoom"))); 0108 addPage(page); 0109 0110 // libVLC arguments config 0111 widget = new QWidget(this); 0112 gridLayout = new QGridLayout(widget); 0113 0114 label = new QLabel(i18nc("@label:textbox", "LibVLC arguments:"), widget); 0115 gridLayout->addWidget(label, 0, 0); 0116 0117 libVlcArguments = new QLineEdit(widget); 0118 libVlcArguments->setText(Configuration::instance()->getLibVlcArguments()); 0119 gridLayout->addWidget(libVlcArguments, 1, 0); 0120 0121 label = new QLabel(i18nc("@label:textbox", "NOTE: Kaffeine should be restarted for the new arguments to take effect"), widget); 0122 gridLayout->addWidget(label, 2, 0); 0123 0124 gridLayout->setRowStretch(3, 1); 0125 0126 page = new KPageWidgetItem(widget, i18nc("@title:group", "libVLC")); 0127 page->setIcon(QIcon::fromTheme(QLatin1String("video-television"), QIcon(":video-television"))); 0128 addPage(page); 0129 0130 resize(100 * fontMetrics().averageCharWidth(), 28 * fontMetrics().height()); 0131 } 0132 0133 ConfigurationDialog::~ConfigurationDialog() 0134 { 0135 } 0136 0137 void ConfigurationDialog::accept() 0138 { 0139 Configuration *configuration = Configuration::instance(); 0140 configuration->setStartupDisplayMode(startupDisplayModeBox->currentIndex()); 0141 configuration->setShortSkipDuration(shortSkipBox->value()); 0142 configuration->setLongSkipDuration(longSkipBox->value()); 0143 configuration->setLibVlcArguments(libVlcArguments->text()); 0144 KPageDialog::accept(); 0145 } 0146 0147 void ConfigurationDialog::showDmesg() 0148 { 0149 QDialog *dialog = new DmesgDialog(this); 0150 dialog->setAttribute(Qt::WA_DeleteOnClose, true); 0151 dialog->setModal(true); 0152 dialog->show(); 0153 } 0154 0155 DmesgDialog::DmesgDialog(QWidget *parent) : QDialog(parent) 0156 { 0157 QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close); 0158 QWidget *mainWidget = new QWidget(this); 0159 QVBoxLayout *mainLayout = new QVBoxLayout; 0160 setLayout(mainLayout); 0161 connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); 0162 connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); 0163 setWindowTitle(i18nc("@title:window", "dmesg")); 0164 0165 dmesgProcess = new QProcess(this); 0166 dmesgProcess->setProcessChannelMode(QProcess::MergedChannels); 0167 connect(dmesgProcess, SIGNAL(readyRead()), this, SLOT(readyRead())); 0168 dmesgProcess->setProgram(QLatin1String("dmesg")); 0169 dmesgProcess->start(QIODevice::ReadOnly); 0170 0171 dmesgTextEdit = new QPlainTextEdit(this); 0172 dmesgTextEdit->setLineWrapMode(QPlainTextEdit::NoWrap); 0173 dmesgTextEdit->setReadOnly(true); 0174 0175 mainLayout->addWidget(dmesgTextEdit); 0176 mainLayout->addWidget(mainWidget); 0177 mainLayout->addWidget(buttonBox); 0178 0179 resize(100 * fontMetrics().averageCharWidth(), 28 * fontMetrics().height()); 0180 } 0181 0182 DmesgDialog::~DmesgDialog() 0183 { 0184 } 0185 0186 void DmesgDialog::readyRead() 0187 { 0188 dmesgTextEdit->setPlainText(dmesgTextEdit->toPlainText() + 0189 QString::fromLocal8Bit(dmesgProcess->readAll().constData())); 0190 } 0191 0192 #include "moc_configurationdialog_p.cpp" 0193 #include "moc_configurationdialog.cpp"