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"