[plasma-desktop] /: Remove phonon KCM
Nicolas Fella
null at kde.org
Wed Aug 28 11:06:05 BST 2019
Git commit 973306c7bb7df2f9be19c1417484361511a87c67 by Nicolas Fella.
Committed on 28/08/2019 at 10:05.
Pushed by nicolasfella into branch 'master'.
Remove phonon KCM
Summary:
Most of the Phonon KCM settings have been moved to plasma-pa. The remaining settings server very specific use cases that are mostl likely not worth exposing them front and center.
@sitter said he has a version of the settings to be integtated into phonon so the remaining three users can still access them
See T9091
Test Plan: builds
Reviewers: sitter
Reviewed By: sitter
Subscribers: kde-doc-english, ngraham, pino, plasma-devel, sitter
Tags: #plasma, #documentation
Differential Revision: https://phabricator.kde.org/D22616
M +1 -5 CMakeLists.txt
M +0 -1 doc/kcontrol/CMakeLists.txt
D +0 -2 doc/kcontrol/phonon/CMakeLists.txt
D +0 -93 doc/kcontrol/phonon/index.docbook
M +0 -1 kcms/CMakeLists.txt
D +0 -27 kcms/phonon/CMakeLists.txt
D +0 -18 kcms/phonon/Messages.sh
D +0 -227 kcms/phonon/backendselection.cpp
D +0 -73 kcms/phonon/backendselection.h
D +0 -232 kcms/phonon/backendselection.ui
D +0 -993 kcms/phonon/devicepreference.cpp
D +0 -95 kcms/phonon/devicepreference.h
D +0 -219 kcms/phonon/devicepreference.ui
D +0 -160 kcms/phonon/kcm_phonon.desktop
D +- -- kcms/phonon/listview-background.png
D +0 -84 kcms/phonon/main.cpp
D +0 -48 kcms/phonon/main.h
D +0 -1 plasma-desktop.categories
https://commits.kde.org/plasma-desktop/973306c7bb7df2f9be19c1417484361511a87c67
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ebb2a906..2123faba 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -192,9 +192,5 @@ if(X11_Xkb_FOUND AND XCB_XKB_FOUND)
add_subdirectory(kaccess)
endif()
install(FILES org.kde.plasmashell.metainfo.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
-if (${ECM_VERSION} STRGREATER "5.58.0")
- install(FILES plasma-desktop.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR})
-else()
- install(FILES plasma-desktop.categories DESTINATION ${KDE_INSTALL_CONFDIR})
-endif()
+
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
diff --git a/doc/kcontrol/CMakeLists.txt b/doc/kcontrol/CMakeLists.txt
index 793a0c6d..7fbbc9d6 100644
--- a/doc/kcontrol/CMakeLists.txt
+++ b/doc/kcontrol/CMakeLists.txt
@@ -27,6 +27,5 @@ ecm_optional_add_subdirectory(spellchecking)
ecm_optional_add_subdirectory(componentchooser)
ecm_optional_add_subdirectory(kded)
ecm_optional_add_subdirectory(solid-device-automounter)
-ecm_optional_add_subdirectory(phonon)
ecm_optional_add_subdirectory(workspaceoptions)
diff --git a/doc/kcontrol/phonon/CMakeLists.txt b/doc/kcontrol/phonon/CMakeLists.txt
deleted file mode 100644
index 5ada3afc..00000000
--- a/doc/kcontrol/phonon/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-########### install files ###############
-kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kcontrol/phonon)
diff --git a/doc/kcontrol/phonon/index.docbook b/doc/kcontrol/phonon/index.docbook
deleted file mode 100644
index b6215d96..00000000
--- a/doc/kcontrol/phonon/index.docbook
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN"
-"dtd/kdedbx45.dtd" [
- <!ENTITY % addindex "IGNORE">
- <!ENTITY % English "INCLUDE">
-]>
-<article id="phonon" lang="&language;">
-<title>Audio and Video Settings</title>
-<articleinfo>
-<authorgroup>
-<author><firstname>Matthias</firstname><surname>Kretz</surname></author>
-<!-- TRANS:ROLES_OF_TRANSLATORS -->
-</authorgroup>
-
-<date>2013-12-05</date>
-<releaseinfo>&kde; 4.12</releaseinfo>
-
-<keywordset>
-<keyword>KDE</keyword>
-<keyword>Systemsettings</keyword>
-<keyword>hardware</keyword>
-<keyword>multimedia</keyword>
-<keyword>sound</keyword>
-<keyword>video</keyword>
-<keyword>backend</keyword>
-</keywordset>
-</articleinfo>
-
-<para>
-This &systemsettings; module allows you to configure the sound and video device
-preference and the backends used by Phonon.
-</para>
-
-<variablelist>
-<varlistentry><term><guilabel>Device Preference</guilabel> tab</term>
-<listitem><para>
-On the left you are presented a tree list with various categories of playback and recording.
-For each category you may choose what device you wish to use.</para>
-<para>The <guilabel>Audio Playback</guilabel> and <guilabel>Audio Recording</guilabel>
-items define the default ordering of devices which can be overridden by
-each sub items.</para>
-<para>Clicking the <guibutton>Apply Device List To</guibutton> button shows a dialog
-which enables you to copy the selected setting from one category to many others.</para>
-<para>Highlight a category and the available devices for this category are displayed in the
-list on the right. The order in this list determines the preference of the output and capture
-devices. If for some reason the first device cannot be used Phonon will try to use the second, &etc;</para>
-<para>Use the <guibutton>Prefer</guibutton> and <guibutton>Defer</guibutton> buttons to change the order
-and the <guibutton>Test</guibutton> button to play a test sound on the selected device.
-</para></listitem>
-</varlistentry>
-
-<varlistentry><term><guilabel>Audio Hardware Setup</guilabel> tab</term>
-<listitem><para>
-The various drop down boxes in this tab allow full control over all cards that are attached
-to the system.</para>
-
-<variablelist>
-<varlistentry><term><guilabel>Hardware</guilabel></term>
-<listitem><para>Select the <guilabel>Sound Card</guilabel> and an available
-<guilabel>Profile</guilabel> to be used.</para>
-</listitem></varlistentry>
-
-<varlistentry><term><guilabel>Device Configuration</guilabel></term>
-<listitem><para>Select the <guilabel>Sound Device</guilabel> and a <guilabel>Connector</guilabel>.</para>
-</listitem></varlistentry>
-
-<varlistentry><term><guilabel>Speaker Placement and Testing</guilabel> or <guilabel>Input Levels</guilabel></term>
-<listitem>
-<para>For a playback device: The buttons on this pane allow you to test each speaker separately.
-</para>
-<para>For a recording device: A slider shows the <guilabel>Input Levels</guilabel>
-of the selected <guilabel>Connector</guilabel>.
-</para>
-</listitem></varlistentry>
-</variablelist>
-
-
-
-</listitem>
-</varlistentry>
-
-<varlistentry><term><guilabel>Backend</guilabel> tab</term>
-<listitem><para>
-On the left side of this module a list of Phonon backends found on your system is shown.
-The order here determines the order Phonon will use the backends.
-Use the <guibutton>Prefer</guibutton> and <guibutton>Defer</guibutton> buttons
-to change this order.</para>
-</listitem>
-</varlistentry>
-
-</variablelist>
-
-</article>
diff --git a/kcms/CMakeLists.txt b/kcms/CMakeLists.txt
index e7db0e43..cef84688 100644
--- a/kcms/CMakeLists.txt
+++ b/kcms/CMakeLists.txt
@@ -44,7 +44,6 @@ add_subdirectory(icons)
add_subdirectory(kded)
add_subdirectory(formats)
add_subdirectory(notifications)
-add_subdirectory(phonon)
add_subdirectory(runners)
add_subdirectory(spellchecking)
add_subdirectory(qtquicksettings)
diff --git a/kcms/phonon/CMakeLists.txt b/kcms/phonon/CMakeLists.txt
deleted file mode 100644
index 7920b3ea..00000000
--- a/kcms/phonon/CMakeLists.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-find_package(Phonon4Qt5 4.6.60 NO_MODULE)
-include_directories(BEFORE ${PHONON_INCLUDES})
-add_definitions(-DPHONON_LIB_SONAME=\"${PHONON_LIB_SONAME}\")
-# KI18N Translation Domain for this library
-add_definitions(-DTRANSLATION_DOMAIN=\"kcm5_phonon\")
-
-
-set(kcmphonon_SRCS main.cpp devicepreference.cpp backendselection.cpp)
-ki18n_wrap_ui(kcmphonon_SRCS devicepreference.ui backendselection.ui)
-set(kcmphonon_LIBS
- KF5::ConfigWidgets
- KF5::I18n
- KF5::IconThemes
- KF5::KCMUtils
- KF5::KIOWidgets
- ${PHONON_LIBRARY})
-
-ecm_qt_declare_logging_category(kcmphonon_SRCS HEADER phonon_debug.h IDENTIFIER KCM_PHONON_LOG CATEGORY_NAME org.kde.kcm.phonon)
-
-add_library(kcm_phonon MODULE ${kcmphonon_SRCS})
-target_link_libraries(kcm_phonon ${kcmphonon_LIBS} KF5::ConfigWidgets)
-
-install(TARGETS kcm_phonon DESTINATION ${KDE_INSTALL_PLUGINDIR} )
-
-########### install files ###############
-install( FILES kcm_phonon.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} )
-install(FILES listview-background.png DESTINATION ${KDE_INSTALL_DATADIR}/kcm_phonon)
diff --git a/kcms/phonon/Messages.sh b/kcms/phonon/Messages.sh
deleted file mode 100644
index 5d45ba85..00000000
--- a/kcms/phonon/Messages.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /usr/bin/env bash
-$EXTRACTRC *.ui >> rc.cpp
-find . -type d | fgrep -v '.svn' | sed -e 's,$,/,' > dirs
-msh=`find . -name Messages.sh`
-for dir in $msh; do
- dir=`dirname $dir`
- if test "$dir" != "."; then
- egrep -v "^$dir" dirs > dirs.new && mv dirs.new dirs
- fi
-done
-fgrep -v "/tests" dirs > dirs.new && mv dirs.new dirs
-dirs=`cat dirs`
-find $dirs -maxdepth 1 -name "*.cpp" -print > files
-find $dirs -maxdepth 1 -name "*.cc" -print >> files
-find $dirs -maxdepth 1 -name "*.h" -print >> files
-$XGETTEXT --files-from=files -o $podir/kcm5_phonon.pot
-rm -f dirs
-rm -f files
diff --git a/kcms/phonon/backendselection.cpp b/kcms/phonon/backendselection.cpp
deleted file mode 100644
index 88825427..00000000
--- a/kcms/phonon/backendselection.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2004-2007 Matthias Kretz <kretz at kde.org>
- Copyright (C) 2011-2014 Harald Sitter <sitter at kde.org>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) version 3.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "backendselection.h"
-
-#include <KConfig>
-#include <KIconLoader>
-#include <KRun>
-#include <KLocalizedString>
-
-#include "phonon_debug.h"
-#include <QDir>
-#include <QFileInfo>
-#include <QListWidget>
-#include <QPluginLoader>
-#include <QSettings>
-
-BackendDescriptor::BackendDescriptor(const QString &path)
- : isValid(false)
-{
- QPluginLoader loader(path);
-
- iid = loader.metaData().value(QLatin1Literal("IID")).toString();
-
- const QJsonObject metaData = loader.metaData().value(QLatin1Literal("MetaData")).toObject();
- name = metaData.value(QLatin1Literal("Name")).toString();
- icon = metaData.value(QLatin1Literal("Icon")).toString();
- version = metaData.value(QLatin1Literal("Version")).toString();
- website = metaData.value(QLatin1Literal("Website")).toString();
- preference = metaData.value(QLatin1Literal("InitialPreference")).toDouble();
-
- pluginPath = path;
-
- if (name.isEmpty())
- name = QFileInfo(path).baseName();
-
- if (iid.isEmpty())
- return; // Not valid.
-
- isValid = true;
-}
-
-bool BackendDescriptor::operator <(const BackendDescriptor &rhs) const
-{
- return this->preference < rhs.preference;
-}
-
-BackendSelection::BackendSelection(QWidget *parent)
- : QWidget(parent)
-{
- setupUi(this);
-
- m_messageWidget->setVisible(false);
- m_messageWidget->setCloseButtonVisible(false);
- m_messageWidget->setMessageType(KMessageWidget::Information);
- m_messageWidget->setText(i18nc("@info User changed Phonon backend",
- "To apply the backend change you will have "
- "to log out and back in again."));
-
- m_down->setIcon(QIcon::fromTheme(QStringLiteral("go-down")));
- m_up->setIcon(QIcon::fromTheme(QStringLiteral("go-up")));
- m_comment->setWordWrap(true);
-
- m_emptyPage = stackedWidget->addWidget(new QWidget());
-
- connect(m_select, &QListWidget::itemSelectionChanged, this, &BackendSelection::selectionChanged);
- connect(m_up, &QToolButton::clicked, this, &BackendSelection::up);
- connect(m_down, &QToolButton::clicked, this, &BackendSelection::down);
-}
-
-void BackendSelection::load()
-{
- // NOTE: for phonon5 this should move into the library in some form.
- m_backends.clear();
-
- // Read already configured order.
- QList<QString> iidPreference;
- QSettings settings("kde.org", "libphonon");
- const int size = settings.beginReadArray("Backends");
- qCDebug(KCM_PHONON_LOG) << settings.fileName();
- for (int i = 0; i < size; ++i) {
- settings.setArrayIndex(i);
- iidPreference.append(settings.value(QLatin1String("iid")).toString());
- }
- settings.endArray();
-
- const QLatin1Literal suffix("/" PHONON_LIB_SONAME "_backend/");
- const QStringList paths = QCoreApplication::libraryPaths();
- qCDebug(KCM_PHONON_LOG) << "libpaths" << paths;
-
- QList<struct BackendDescriptor> backendList;
-
- foreach (const QString &path, paths) {
- const QString libPath = path + suffix;
- const QDir dir(libPath);
- if (!dir.exists()) {
- qCDebug(KCM_PHONON_LOG) << Q_FUNC_INFO << dir.absolutePath() << "does not exist";
- continue;
- }
-
- const QStringList plugins(dir.entryList(QDir::Files));
-
- for (const QString &plugin : plugins) {
- BackendDescriptor bd = BackendDescriptor(libPath + plugin);
- if (bd.isValid) {
- int preference = iidPreference.indexOf(bd.iid);
- if (preference != -1)
- bd.preference = preference;
- backendList.append(bd);
- }
- }
-
- std::sort(backendList.begin(), backendList.end());
- }
-
- /// -------------- LOAD
-
- m_select->clear();
-
- foreach (const struct BackendDescriptor &bd, backendList) {
- m_select->addItem(bd.name);
- m_backends.insert(bd.name, bd);
- }
- m_select->item(0)->setSelected(true);
-}
-
-void BackendSelection::save()
-{
- qCDebug(KCM_PHONON_LOG) << Q_FUNC_INFO;
- qCDebug(KCM_PHONON_LOG) << "~~~~~~~~~~~~~~";
- QSettings settings("kde.org", "libphonon");
- settings.beginWriteArray("Backends", m_select->count());
- for (int i = 0; i < m_select->count(); ++i) {
- settings.setArrayIndex(i);
- const QListWidgetItem *item = m_select->item(i);
- const BackendDescriptor backend = m_backends.value(item->text());
- settings.setValue("iid", backend.iid);
- }
- settings.endArray();
- settings.sync();
-
- qCDebug(KCM_PHONON_LOG) << settings.fileName();
-}
-
-void BackendSelection::defaults()
-{
- load();
-}
-
-void BackendSelection::selectionChanged()
-{
- qCDebug(KCM_PHONON_LOG) << "qooooooooo";
- if (m_select->selectedItems().isEmpty()) {
- m_up->setEnabled(false);
- m_down->setEnabled(false);
- } else {
- const QListWidgetItem *const item = m_select->selectedItems().first();
- m_up->setEnabled(m_select->row(item) > 0);
- m_down->setEnabled(m_select->row(item) < m_select->count() - 1);
- BackendDescriptor backend = m_backends[item->text()];
-
- // Have some icon other than "unknown" for backends which don't install an icon.
- QIcon icon = QIcon::fromTheme(backend.icon);
- if (icon.isNull()) {
- QPixmap iconPixmap = KIconLoader::global()->loadIcon("preferences-desktop-sound", KIconLoader::NoGroup, 128);
- m_icon->setPixmap(iconPixmap);
- } else {
- m_icon->setPixmap(icon.pixmap(128, 128));
- }
-
- m_name->setText(backend.name);
- m_website->setText(QString("<a href=\"%1\">%1</a>").arg(backend.website));
- connect(m_website, &QLabel::linkActivated, this, &BackendSelection::openWebsite, Qt::UniqueConnection);
- m_version->setText(backend.version);
- }
-}
-
-void BackendSelection::openWebsite(const QString &url)
-{
- new KRun(QUrl(url), window());
-}
-
-void BackendSelection::up()
-{
- QList<QListWidgetItem *> selectedList = m_select->selectedItems();
- foreach (QListWidgetItem *selected, selectedList) {
- const int row = m_select->row(selected);
- if (row > 0) {
- QListWidgetItem *taken = m_select->takeItem(row - 1);
- m_select->insertItem(row, taken);
- emit changed();
- selectionChanged();
- }
- }
-}
-
-void BackendSelection::down()
-{
- QList<QListWidgetItem *> selectedList = m_select->selectedItems();
- foreach (QListWidgetItem *selected, selectedList) {
- const int row = m_select->row(selected);
- if (row + 1 < m_select->count()) {
- QListWidgetItem *taken = m_select->takeItem(row + 1);
- m_select->insertItem(row, taken);
- emit changed();
- selectionChanged();
- }
- }
-}
-
diff --git a/kcms/phonon/backendselection.h b/kcms/phonon/backendselection.h
deleted file mode 100644
index 9621f7da..00000000
--- a/kcms/phonon/backendselection.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2004-2007 Matthias Kretz <kretz at kde.org>
- Copyright (C) 2011-2014 Harald Sitter <sitter at kde.org>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) version 3.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef BACKENDSELECTION_H
-#define BACKENDSELECTION_H
-
-#include "ui_backendselection.h"
-
-#include <QHash>
-#include <QWidget>
-
-
-struct BackendDescriptor {
- explicit BackendDescriptor(const QString &path = QString());
-
- bool isValid;
-
- QString iid;
-
- QString name;
- QString icon;
- QString version;
- QString website;
- int preference;
-
- QString pluginPath;
-
- /** Implemented for qSort(QList) */
- bool operator <(const BackendDescriptor &rhs) const;
-};
-
-class BackendSelection : public QWidget, private Ui::BackendSelection
-{
- Q_OBJECT
-public:
- explicit BackendSelection(QWidget *parent = nullptr);
-
- void load();
- void save();
- void defaults();
-
-private Q_SLOTS:
- void selectionChanged();
- void up();
- void down();
- void openWebsite(const QString &url);
-
-Q_SIGNALS:
- void changed();
-
-private:
- QHash<QString, struct BackendDescriptor> m_backends;
- int m_emptyPage;
-};
-
-#endif // BACKENDSELECTION_H
diff --git a/kcms/phonon/backendselection.ui b/kcms/phonon/backendselection.ui
deleted file mode 100644
index a4017a8d..00000000
--- a/kcms/phonon/backendselection.ui
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <author>Matthias Kretz <kretz at kde.org></author>
- <class>BackendSelection</class>
- <widget class="QWidget" name="BackendSelection">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>510</width>
- <height>362</height>
- </rect>
- </property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>9</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <item row="2" column="0">
- <layout class="QGridLayout">
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <item row="0" column="0" colspan="3">
- <widget class="QListWidget" name="m_select">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="toolTip">
- <string>A list of Phonon Backends found on your system. The order here determines the order Phonon will use them in.</string>
- </property>
- <property name="whatsThis">
- <string>A list of Phonon Backends found on your system. The order here determines the order Phonon will use them in.</string>
- </property>
- <property name="dragEnabled">
- <bool>true</bool>
- </property>
- <property name="dragDropMode">
- <enum>QAbstractItemView::InternalMove</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QToolButton" name="m_up">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Prefer</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QToolButton" name="m_down">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Defer</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>81</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="3" column="0">
- <widget class="QFrame" name="frame">
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="margin">
- <number>9</number>
- </property>
- <item>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <item>
- <widget class="QLabel" name="m_icon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="m_name">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="alignment">
- <set>Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line1">
- <property name="frameShape">
- <enum>QFrame::HLine</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="m_comment">
- <property name="text">
- <string/>
- </property>
- <property name="alignment">
- <set>Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="m_website">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="m_version">
- <property name="text">
- <string/>
- </property>
- <property name="alignment">
- <set>Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="1" rowspan="2">
- <widget class="QStackedWidget" name="stackedWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <widget class="QWidget" name="page"/>
- <widget class="QWidget" name="page_2"/>
- </widget>
- </item>
- <item row="1" column="0" colspan="2">
- <widget class="KMessageWidget" name="m_messageWidget" native="true"/>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>KMessageWidget</class>
- <extends>QWidget</extends>
- <header location="global">KMessageWidget</header>
- <container>1</container>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/kcms/phonon/devicepreference.cpp b/kcms/phonon/devicepreference.cpp
deleted file mode 100644
index 5a849b32..00000000
--- a/kcms/phonon/devicepreference.cpp
+++ /dev/null
@@ -1,993 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2006-2008 Matthias Kretz <kretz at kde.org>
- Copyright (C) 2011 Casian Andrei <skeletk13 at gmail.com>
- Copyright (C) 2014 Harald Sitter <sitter at kde.org>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) version 3.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "devicepreference.h"
-
-#include <QDialogButtonBox>
-#include <QListWidget>
-#include <QLabel>
-#include <QPointer>
-#include <QStandardPaths>
-
-#include <phonon/AudioOutput>
-#include <phonon/BackendCapabilities>
-#include <phonon/MediaObject>
-#include <phonon/VideoWidget>
-#include <phonon/globalconfig.h>
-#include <phonon/phononnamespace.h>
-
-#include <KLocalizedString>
-#include <KMessageBox>
-
-#ifndef METATYPE_QLIST_INT_DEFINED
-#define METATYPE_QLIST_INT_DEFINED
-// Want this exactly once, see phonondefs_p.h kcm/devicepreference.cpp
-Q_DECLARE_METATYPE(QList<int>)
-#endif
-
-namespace Phonon {
-
-/*
- * Lists of categories for every device type
- */
-static const Category audioOutCategories[] = {
- NoCategory,
- NotificationCategory,
- MusicCategory,
- VideoCategory,
- CommunicationCategory,
- GameCategory,
- AccessibilityCategory,
-};
-
-static const CaptureCategory audioCapCategories[] = {
- NoCaptureCategory,
- CommunicationCaptureCategory,
- RecordingCaptureCategory,
- ControlCaptureCategory
-};
-
-static const CaptureCategory videoCapCategories[] = {
- NoCaptureCategory,
- CommunicationCaptureCategory,
- RecordingCaptureCategory,
-};
-
-static const int audioOutCategoriesCount = sizeof(audioOutCategories) / sizeof(Category);
-static const int audioCapCategoriesCount = sizeof(audioCapCategories) / sizeof(CaptureCategory);
-static const int videoCapCategoriesCount = sizeof(videoCapCategories) / sizeof(CaptureCategory);
-
-void operator++(Category &c)
-{
- c = static_cast<Category>(1 + static_cast<int>(c));
- //Q_ASSERT(c <= LastCategory);
-}
-
-class CategoryItem : public QStandardItem {
-public:
- CategoryItem(Category cat)
- : QStandardItem(),
- m_cat(cat),
- m_odtype(AudioOutputDeviceType)
- {
- if (cat == NoCategory) {
- setText(i18n("Audio Playback"));
- } else {
- setText(categoryToString(cat));
- }
- }
-
- CategoryItem(CaptureCategory cat, ObjectDescriptionType t = AudioCaptureDeviceType)
- : QStandardItem(),
- m_capcat(cat),
- m_odtype(t)
- {
- if (cat == NoCaptureCategory) {
- switch(t) {
- case AudioCaptureDeviceType:
- setText(i18n("Audio Recording"));
- break;
- case VideoCaptureDeviceType:
- setText(i18n("Video Recording"));
- break;
- default:
- setText(i18n("Invalid"));
- }
- } else {
- setText(categoryToString(cat));
- }
- }
-
- int type() const override { return 1001; }
- Category category() const { return m_cat; }
- CaptureCategory captureCategory() const { return m_capcat; }
- ObjectDescriptionType odtype() const { return m_odtype; }
-
-private:
- Category m_cat;
- CaptureCategory m_capcat;
- ObjectDescriptionType m_odtype;
-};
-
-/**
- * Need this to change the colors of the ListView if the Palette changed. With CSS set this won't
- * change automatically
- */
-void DevicePreference::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- if (e->type() == QEvent::PaletteChange) {
- deviceList->setStyleSheet(deviceList->styleSheet());
- }
-}
-
-DevicePreference::DevicePreference(QWidget *parent)
- : QWidget(parent),
- m_headerModel(0, 1, nullptr),
- m_media(nullptr), m_audioOutput(nullptr), m_videoWidget(nullptr)
-{
- setupUi(this);
-
- // Setup the buttons
- testPlaybackButton->setIcon(QIcon::fromTheme(QStringLiteral("media-playback-start")));
- testPlaybackButton->setEnabled(false);
- testPlaybackButton->setToolTip(i18n("Test the selected device"));
- deferButton->setIcon(QIcon::fromTheme(QStringLiteral("go-down")));
- preferButton->setIcon(QIcon::fromTheme(QStringLiteral("go-up")));
-
- // Configure the device list
- deviceList->setDragDropMode(QAbstractItemView::InternalMove);
- deviceList->setStyleSheet(QStringLiteral("QTreeView {"
- "background-color: palette(base);"
- "background-image: url(%1);"
- "background-position: bottom left;"
- "background-attachment: fixed;"
- "background-repeat: no-repeat;"
- "background-clip: padding;"
- "}")
- .arg(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kcm_phonon/listview-background.png")));
- deviceList->setAlternatingRowColors(false);
-
- // The root item for the categories
- QStandardItem *parentItem = m_categoryModel.invisibleRootItem();
-
- // Audio Output Parent
- QStandardItem *aOutputItem = new CategoryItem(NoCategory);
- m_audioOutputModel[NoCategory] = new AudioOutputDeviceModel(this);
- aOutputItem->setEditable(false);
- aOutputItem->setToolTip(i18n("Defines the default ordering of devices which can be overridden by individual categories."));
- parentItem->appendRow(aOutputItem);
-
- // Audio Capture Parent
- QStandardItem *aCaptureItem = new CategoryItem(NoCaptureCategory, AudioCaptureDeviceType);
- m_audioCaptureModel[NoCaptureCategory] = new AudioCaptureDeviceModel(this);
- aCaptureItem->setEditable(false);
- aCaptureItem->setToolTip(i18n("Defines the default ordering of devices which can be overridden by individual categories."));
- parentItem->appendRow(aCaptureItem);
-
- // Video Capture Parent
- QStandardItem *vCaptureItem = new CategoryItem(NoCaptureCategory, VideoCaptureDeviceType);
- m_videoCaptureModel[NoCaptureCategory] = new VideoCaptureDeviceModel(this);
- vCaptureItem->setEditable(false);
- vCaptureItem->setToolTip(i18n("Defines the default ordering of devices which can be overridden by individual categories."));
- parentItem->appendRow(vCaptureItem);
-
- // Audio Output Children
- parentItem = aOutputItem;
- for (int i = 1; i < audioOutCategoriesCount; ++i) { // i == 1 to skip NoCategory
- m_audioOutputModel[audioOutCategories[i]] = new AudioOutputDeviceModel(this);
- QStandardItem *item = new CategoryItem(audioOutCategories[i]);
- item->setEditable(false);
- parentItem->appendRow(item);
- }
-
- // Audio Capture Children
- parentItem = aCaptureItem;
- for (int i = 1; i < audioCapCategoriesCount; ++i) { // i == 1 to skip NoCategory
- m_audioCaptureModel[audioCapCategories[i]] = new AudioCaptureDeviceModel(this);
- QStandardItem *item = new CategoryItem(audioCapCategories[i], AudioCaptureDeviceType);
- item->setEditable(false);
- parentItem->appendRow(item);
- }
-
- // Video Capture Children
- parentItem = vCaptureItem;
- for (int i = 1; i < videoCapCategoriesCount; ++i) { // i == 1 to skip NoCategory
- m_videoCaptureModel[videoCapCategories[i]] = new VideoCaptureDeviceModel(this);
- QStandardItem *item = new CategoryItem(videoCapCategories[i], VideoCaptureDeviceType);
- item->setEditable(false);
- parentItem->appendRow(item);
- }
-
- // Configure the category tree
- categoryTree->setModel(&m_categoryModel);
- if (categoryTree->header()) {
- categoryTree->header()->hide();
- }
- categoryTree->expandAll();
-
- connect(categoryTree->selectionModel(), SIGNAL(currentChanged(const QModelIndex &,const QModelIndex &)),
- SLOT(updateDeviceList()));
-
- // Connect all model data change signals to the changed slot
- for (int i = -1; i <= LastCategory; ++i) {
- connect(m_audioOutputModel[i], SIGNAL(rowsInserted(QModelIndex, int, int)), this, SIGNAL(changed()));
- connect(m_audioOutputModel[i], SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SIGNAL(changed()));
- connect(m_audioOutputModel[i], SIGNAL(layoutChanged()), this, SIGNAL(changed()));
- connect(m_audioOutputModel[i], SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SIGNAL(changed()));
- if (m_audioCaptureModel.contains(i)) {
- connect(m_audioCaptureModel[i], SIGNAL(rowsInserted(QModelIndex, int, int)), this, SIGNAL(changed()));
- connect(m_audioCaptureModel[i], SIGNAL(rowsRemoved(QModelIndex , int, int)), this, SIGNAL(changed()));
- connect(m_audioCaptureModel[i], SIGNAL(layoutChanged()), this, SIGNAL(changed()));
- connect(m_audioCaptureModel[i], SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SIGNAL(changed()));
- }
- if (m_videoCaptureModel.contains(i)) {
- connect(m_videoCaptureModel[i], SIGNAL(rowsInserted(QModelIndex, int, int)), this, SIGNAL(changed()));
- connect(m_videoCaptureModel[i], SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SIGNAL(changed()));
- connect(m_videoCaptureModel[i], SIGNAL(layoutChanged()), this, SIGNAL(changed()));
- connect(m_videoCaptureModel[i], SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SIGNAL(changed()));
- }
- }
-
- connect(showAdvancedDevicesCheckBox, &QCheckBox::stateChanged, this, &DevicePreference::changed);
-
- // Connect the signals from Phonon that notify changes in the device lists
- connect(BackendCapabilities::notifier(), SIGNAL(availableAudioOutputDevicesChanged()), SLOT(updateAudioOutputDevices()));
- connect(BackendCapabilities::notifier(), SIGNAL(availableAudioCaptureDevicesChanged()), SLOT(updateAudioCaptureDevices()));
- connect(BackendCapabilities::notifier(), SIGNAL(availableVideoCaptureDevicesChanged()), SLOT(updateVideoCaptureDevices()));
- connect(BackendCapabilities::notifier(), SIGNAL(capabilitiesChanged()), SLOT(updateAudioOutputDevices()));
- connect(BackendCapabilities::notifier(), SIGNAL(capabilitiesChanged()), SLOT(updateAudioCaptureDevices()));
- connect(BackendCapabilities::notifier(), SIGNAL(capabilitiesChanged()), SLOT(updateVideoCaptureDevices()));
-
- if (!categoryTree->currentIndex().isValid()) {
- categoryTree->setCurrentIndex(m_categoryModel.index(0, 0).child(1, 0));
- }
-}
-
-DevicePreference::~DevicePreference()
-{
- // Ensure that the video widget is destroyed, if it remains active
- delete m_videoWidget;
-}
-
-void DevicePreference::updateDeviceList()
-{
- // Temporarily disconnect the device list selection model
- if (deviceList->selectionModel()) {
- disconnect(deviceList->selectionModel(),
- SIGNAL(currentRowChanged(const QModelIndex &,const QModelIndex &)),
- this, SLOT(updateButtonsEnabled()));
- }
-
- // Get the current selected category item
- QStandardItem *currentItem = m_categoryModel.itemFromIndex(categoryTree->currentIndex());
- if (currentItem && currentItem->type() == 1001) {
- CategoryItem *catItem = static_cast<CategoryItem *>(currentItem);
- bool cap = catItem->odtype() != AudioOutputDeviceType;
- const Category cat = catItem->category();
- const CaptureCategory capcat = catItem->captureCategory();
-
- // Update the device list, by setting it's model to the one for the corresponding category
- switch (catItem->odtype()) {
- case AudioOutputDeviceType:
- deviceList->setModel(m_audioOutputModel[cat]);
- break;
- case AudioCaptureDeviceType:
- deviceList->setModel(m_audioCaptureModel[capcat]);
- break;
- case VideoCaptureDeviceType:
- deviceList->setModel(m_videoCaptureModel[capcat]);
- break;
- default: ;
- }
-
- // Update the header
- if (cap ? capcat == NoCaptureCategory : cat == NoCategory) {
- switch (catItem->odtype()) {
- case AudioOutputDeviceType:
- m_headerModel.setHeaderData(0, Qt::Horizontal, i18n("Default Audio Playback Device Preference"), Qt::DisplayRole);
- break;
- case AudioCaptureDeviceType:
- m_headerModel.setHeaderData(0, Qt::Horizontal, i18n("Default Audio Recording Device Preference"), Qt::DisplayRole);
- break;
- case VideoCaptureDeviceType:
- m_headerModel.setHeaderData(0, Qt::Horizontal, i18n("Default Video Recording Device Preference"), Qt::DisplayRole);
- break;
- default: ;
- }
- } else {
- switch (catItem->odtype()) {
- case AudioOutputDeviceType:
- m_headerModel.setHeaderData(0, Qt::Horizontal, i18n("Audio Playback Device Preference for the '%1' Category",
- categoryToString(cat)), Qt::DisplayRole);
- break;
- case AudioCaptureDeviceType:
- m_headerModel.setHeaderData(0, Qt::Horizontal, i18n("Audio Recording Device Preference for the '%1' Category",
- categoryToString(capcat)), Qt::DisplayRole);
- break;
- case VideoCaptureDeviceType:
- m_headerModel.setHeaderData(0, Qt::Horizontal, i18n("Video Recording Device Preference for the '%1' Category",
- categoryToString(capcat)), Qt::DisplayRole);
- break;
- default: ;
- }
- }
- } else {
- // No valid category selected
- m_headerModel.setHeaderData(0, Qt::Horizontal, QString(), Qt::DisplayRole);
- deviceList->setModel(nullptr);
- }
-
- // Update the header, the buttons enabled state
- deviceList->header()->setModel(&m_headerModel);
- updateButtonsEnabled();
-
- // Reconnect the device list selection model
- if (deviceList->selectionModel()) {
- connect(deviceList->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &,const QModelIndex &)),
- this, SLOT(updateButtonsEnabled()));
- }
-
- deviceList->resizeColumnToContents(0);
-}
-
-void DevicePreference::updateAudioCaptureDevices()
-{
- const QList<AudioCaptureDevice> list = availableAudioCaptureDevices();
- QHash<int, AudioCaptureDevice> hash;
- foreach (const AudioCaptureDevice &dev, list) {
- hash.insert(dev.index(), dev);
- }
-
- for (int catIndex = 0; catIndex < audioCapCategoriesCount; ++ catIndex) {
- const int i = audioCapCategories[catIndex];
- AudioCaptureDeviceModel *model = m_audioCaptureModel.value(i);
- Q_ASSERT(model);
-
- QHash<int, AudioCaptureDevice> hashCopy(hash);
- QList<AudioCaptureDevice> orderedList;
-
- if (model->rowCount() > 0) {
- QList<int> order = model->tupleIndexOrder();
- foreach (int idx, order) {
- if (hashCopy.contains(idx)) {
- orderedList << hashCopy.take(idx);
- }
- }
-
- if (hashCopy.size() > 1) {
- // keep the order of the original list
- foreach (const AudioCaptureDevice &dev, list) {
- if (hashCopy.contains(dev.index())) {
- orderedList << hashCopy.take(dev.index());
- }
- }
- } else if (hashCopy.size() == 1) {
- orderedList += hashCopy.values();
- }
-
- model->setModelData(orderedList);
- } else {
- model->setModelData(list);
- }
- }
-
- deviceList->resizeColumnToContents(0);
-}
-
-void DevicePreference::updateVideoCaptureDevices()
-{
- const QList<VideoCaptureDevice> list = availableVideoCaptureDevices();
- QHash<int, VideoCaptureDevice> hash;
- foreach (const VideoCaptureDevice &dev, list) {
- hash.insert(dev.index(), dev);
- }
-
- for (int catIndex = 0; catIndex < videoCapCategoriesCount; ++ catIndex) {
- const int i = videoCapCategories[catIndex];
- VideoCaptureDeviceModel *model = m_videoCaptureModel.value(i);
- Q_ASSERT(model);
-
- QHash<int, VideoCaptureDevice> hashCopy(hash);
- QList<VideoCaptureDevice> orderedList;
-
- if (model->rowCount() > 0) {
- QList<int> order = model->tupleIndexOrder();
- foreach (int idx, order) {
- if (hashCopy.contains(idx)) {
- orderedList << hashCopy.take(idx);
- }
- }
-
- if (hashCopy.size() > 1) {
- // keep the order of the original list
- foreach (const VideoCaptureDevice &dev, list) {
- if (hashCopy.contains(dev.index())) {
- orderedList << hashCopy.take(dev.index());
- }
- }
- } else if (hashCopy.size() == 1) {
- orderedList += hashCopy.values();
- }
-
- model->setModelData(orderedList);
- } else {
- model->setModelData(list);
- }
- }
-
- deviceList->resizeColumnToContents(0);
-}
-
-void DevicePreference::updateAudioOutputDevices()
-{
- const QList<AudioOutputDevice> list = availableAudioOutputDevices();
- QHash<int, AudioOutputDevice> hash;
- foreach (const AudioOutputDevice &dev, list) {
- hash.insert(dev.index(), dev);
- }
-
- for (int catIndex = 0; catIndex < audioOutCategoriesCount; ++ catIndex) {
- const int i = audioOutCategories[catIndex];
- AudioOutputDeviceModel *model = m_audioOutputModel.value(i);
- Q_ASSERT(model);
-
- QHash<int, AudioOutputDevice> hashCopy(hash);
- QList<AudioOutputDevice> orderedList;
-
- if (model->rowCount() > 0) {
- QList<int> order = model->tupleIndexOrder();
- foreach (int idx, order) {
- if (hashCopy.contains(idx)) {
- orderedList << hashCopy.take(idx);
- }
- }
-
- if (hashCopy.size() > 1) {
- // keep the order of the original list
- foreach (const AudioOutputDevice &dev, list) {
- if (hashCopy.contains(dev.index())) {
- orderedList << hashCopy.take(dev.index());
- }
- }
- } else if (hashCopy.size() == 1) {
- orderedList += hashCopy.values();
- }
-
- model->setModelData(orderedList);
- } else {
- model->setModelData(list);
- }
- }
-
- deviceList->resizeColumnToContents(0);
-}
-
-QList<AudioOutputDevice> DevicePreference::availableAudioOutputDevices() const
-{
- return BackendCapabilities::availableAudioOutputDevices();
-}
-
-QList<AudioCaptureDevice> DevicePreference::availableAudioCaptureDevices() const
-{
-#ifndef PHONON_NO_AUDIOCAPTURE
- return BackendCapabilities::availableAudioCaptureDevices();
-#else
- return QList<AudioCaptureDevice>();
-#endif
-}
-
-QList<VideoCaptureDevice> DevicePreference::availableVideoCaptureDevices() const
-{
-#ifndef PHONON_NO_VIDEOCAPTURE
- return BackendCapabilities::availableVideoCaptureDevices();
-#else
- return QList<VideoCaptureDevice>();
-#endif
-}
-
-void DevicePreference::load()
-{
- showAdvancedDevicesCheckBox->setChecked(!GlobalConfig().hideAdvancedDevices());
- loadCategoryDevices();
-}
-
-void DevicePreference::loadCategoryDevices()
-{
- // "Load" the settings from the backend.
- for (int i = 0; i < audioOutCategoriesCount; ++ i) {
- const Category cat = audioOutCategories[i];
- QList<AudioOutputDevice> list;
- const QList<int> deviceIndexes = GlobalConfig().audioOutputDeviceListFor(cat);
- foreach (int i, deviceIndexes) {
- list.append(AudioOutputDevice::fromIndex(i));
- }
-
- m_audioOutputModel[cat]->setModelData(list);
- }
-
-#ifndef PHONON_NO_AUDIOCAPTURE
- for (int i = 0; i < audioCapCategoriesCount; ++ i) {
- const CaptureCategory cat = audioCapCategories[i];
- QList<AudioCaptureDevice> list;
- const QList<int> deviceIndexes = GlobalConfig().audioCaptureDeviceListFor(cat);
- foreach (int i, deviceIndexes) {
- list.append(AudioCaptureDevice::fromIndex(i));
- }
-
- m_audioCaptureModel[cat]->setModelData(list);
- }
-#endif
-
-#ifndef PHONON_NO_VIDEOCAPTURE
- for (int i = 0; i < videoCapCategoriesCount; ++ i) {
- const CaptureCategory cat = videoCapCategories[i];
- QList<VideoCaptureDevice> list;
- const QList<int> deviceIndexes = GlobalConfig().videoCaptureDeviceListFor(cat);
- foreach (int i, deviceIndexes) {
- list.append(VideoCaptureDevice::fromIndex(i));
- }
-
- m_videoCaptureModel[cat]->setModelData(list);
- }
-#endif
-
- deviceList->resizeColumnToContents(0);
-}
-
-void DevicePreference::save()
-{
- for (int i = 0; i < audioOutCategoriesCount; ++i) {
- const Category cat = audioOutCategories[i];
- Q_ASSERT(m_audioOutputModel.value(cat));
- const QList<int> order = m_audioOutputModel.value(cat)->tupleIndexOrder();
- GlobalConfig().setAudioOutputDeviceListFor(cat, order);
- }
-
-#ifndef PHONON_NO_AUDIOCAPTURE
- for (int i = 0; i < audioCapCategoriesCount; ++i) {
- const CaptureCategory cat = audioCapCategories[i];
- Q_ASSERT(m_audioCaptureModel.value(cat));
- const QList<int> order = m_audioCaptureModel.value(cat)->tupleIndexOrder();
- GlobalConfig().setAudioCaptureDeviceListFor(cat, order);
- }
-#endif
-
-#ifndef PHONON_NO_VIDEOCAPTURE
- for (int i = 0; i < videoCapCategoriesCount; ++i) {
- const CaptureCategory cat = videoCapCategories[i];
- Q_ASSERT(m_videoCaptureModel.value(cat));
- const QList<int> order = m_videoCaptureModel.value(cat)->tupleIndexOrder();
- GlobalConfig().setVideoCaptureDeviceListFor(cat, order);
- }
-#endif
-}
-
-void DevicePreference::defaults()
-{
- {
- const QList<AudioOutputDevice> list = availableAudioOutputDevices();
- for (int i = 0; i < audioOutCategoriesCount; ++i) {
- m_audioOutputModel[audioOutCategories[i]]->setModelData(list);
- }
- }
- {
- const QList<AudioCaptureDevice> list = availableAudioCaptureDevices();
- for (int i = 0; i < audioCapCategoriesCount; ++i) {
- m_audioCaptureModel[audioCapCategories[i]]->setModelData(list);
- }
- }
- {
- const QList<VideoCaptureDevice> list = availableVideoCaptureDevices();
- for (int i = 0; i < videoCapCategoriesCount; ++i) {
- m_videoCaptureModel[videoCapCategories[i]]->setModelData(list);
- }
- }
-
- /*
- * Save this list (that contains even hidden devices) to GlobaConfig, and then
- * load them back. All devices that should be hidden will be hidden
- */
- save();
- loadCategoryDevices();
-
- deviceList->resizeColumnToContents(0);
-}
-
-void DevicePreference::pulseAudioEnabled()
-{
- showAdvancedDevicesContainer->removeItem(showAdvancedDevicesSpacer);
- delete showAdvancedDevicesSpacer;
- showAdvancedDevicesCheckBox->setVisible(false);
-}
-
-void DevicePreference::on_preferButton_clicked()
-{
- QAbstractItemModel *model = deviceList->model();
- {
- AudioOutputDeviceModel *deviceModel = dynamic_cast<AudioOutputDeviceModel *>(model);
- if (deviceModel) {
- deviceModel->moveUp(deviceList->currentIndex());
- updateButtonsEnabled();
- emit changed();
- }
- }
- {
- AudioCaptureDeviceModel *deviceModel = dynamic_cast<AudioCaptureDeviceModel *>(model);
- if (deviceModel) {
- deviceModel->moveUp(deviceList->currentIndex());
- updateButtonsEnabled();
- emit changed();
- }
- }
- {
- VideoCaptureDeviceModel *deviceModel = dynamic_cast<VideoCaptureDeviceModel *>(model);
- if (deviceModel) {
- deviceModel->moveUp(deviceList->currentIndex());
- updateButtonsEnabled();
- emit changed();
- }
- }
-}
-
-void DevicePreference::on_deferButton_clicked()
-{
- QAbstractItemModel *model = deviceList->model();
- {
- AudioOutputDeviceModel *deviceModel = dynamic_cast<AudioOutputDeviceModel *>(model);
- if (deviceModel) {
- deviceModel->moveDown(deviceList->currentIndex());
- updateButtonsEnabled();
- emit changed();
- }
- }
- {
- AudioCaptureDeviceModel *deviceModel = dynamic_cast<AudioCaptureDeviceModel *>(model);
- if (deviceModel) {
- deviceModel->moveDown(deviceList->currentIndex());
- updateButtonsEnabled();
- emit changed();
- }
- }
- {
- VideoCaptureDeviceModel *deviceModel = dynamic_cast<VideoCaptureDeviceModel *>(model);
- if (deviceModel) {
- deviceModel->moveDown(deviceList->currentIndex());
- updateButtonsEnabled();
- emit changed();
- }
- }
-}
-
-
-DevicePreference::DeviceType DevicePreference::shownModelType() const
-{
- const QStandardItem *item = m_categoryModel.itemFromIndex(categoryTree->currentIndex());
- if (!item)
- return dtInvalidDevice;
- Q_ASSERT(item->type() == 1001);
-
- const CategoryItem *catItem = static_cast<const CategoryItem *>(item);
- if (!catItem)
- return dtInvalidDevice;
-
- switch (catItem->odtype()) {
- case AudioOutputDeviceType:
- return dtAudioOutput;
- case AudioCaptureDeviceType:
- return dtAudioCapture;
- case VideoCaptureDeviceType:
- return dtVideoCapture;
- default:
- return dtInvalidDevice;
- }
-}
-
-void DevicePreference::on_applyPreferencesButton_clicked()
-{
- const QModelIndex idx = categoryTree->currentIndex();
- const QStandardItem *item = m_categoryModel.itemFromIndex(idx);
- if (!item)
- return;
- Q_ASSERT(item->type() == 1001);
-
- const CategoryItem *catItem = static_cast<const CategoryItem *>(item);
-
- QList<AudioOutputDevice> aoPreferredList;
- QList<AudioCaptureDevice> acPreferredList;
- QList<VideoCaptureDevice> vcPreferredList;
- const Category *categoryList = nullptr;
- const CaptureCategory *capCategoryList = nullptr;
- int categoryListCount;
- int catIndex;
- bool cap = false;
-
- switch (catItem->odtype()) {
- case AudioOutputDeviceType:
- aoPreferredList = m_audioOutputModel.value(catItem->category())->modelData();
- categoryList = audioOutCategories;
- categoryListCount = audioOutCategoriesCount;
- cap = false;
- break;
-
- case AudioCaptureDeviceType:
- acPreferredList = m_audioCaptureModel.value(catItem->captureCategory())->modelData();
- capCategoryList = audioCapCategories;
- categoryListCount = audioCapCategoriesCount;
- cap = true;
- break;
-
- case VideoCaptureDeviceType:
- vcPreferredList = m_videoCaptureModel.value(catItem->captureCategory())->modelData();
- capCategoryList = videoCapCategories;
- categoryListCount = videoCapCategoriesCount;
- cap = true;
- break;
-
- default:
- return;
- }
-
- QPointer<QDialog> dialog = new QDialog(this);
-
- QLabel *label = new QLabel(dialog);
- label->setText(i18n("Apply the currently shown device preference list to the following other "
- "audio playback categories:"));
- label->setWordWrap(true);
-
- QListWidget *list = new QListWidget(dialog);
-
- for (catIndex = 0; catIndex < categoryListCount; catIndex ++) {
- Category cat = cap ? NoCategory : categoryList[catIndex];
- CaptureCategory capcat = cap ? capCategoryList[catIndex] : NoCaptureCategory;
-
- QListWidgetItem *item = nullptr;
- if (cap) {
- if (capcat == NoCaptureCategory) {
- item = new QListWidgetItem(i18n("Default/Unspecified Category"), list, capcat);
- } else {
- item = new QListWidgetItem(categoryToString(capcat), list, capcat);
- }
- } else {
- if (cat == NoCategory) {
- item = new QListWidgetItem(i18n("Default/Unspecified Category"), list, cat);
- } else {
- item = new QListWidgetItem(categoryToString(cat), list, cat);
- }
- }
-
- item->setCheckState(Qt::Checked);
- if (cat == catItem->category()) {
- item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
- }
- }
-
- QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
- | QDialogButtonBox::Cancel, dialog);
- connect(buttonBox, &QDialogButtonBox::accepted, dialog.data(), &QDialog::accept);
- connect(buttonBox, &QDialogButtonBox::rejected, dialog.data(), &QDialog::reject);
-
- QVBoxLayout *layout = new QVBoxLayout(dialog);
- layout->addWidget(label);
- layout->addWidget(list);
- layout->addWidget(buttonBox);
-
- switch (dialog->exec()) {
- case QDialog::Accepted:
- for (catIndex = 0; catIndex < categoryListCount; catIndex ++) {
- Category cat = cap ? NoCategory : categoryList[catIndex];
- CaptureCategory capcat = cap ? capCategoryList[catIndex] : NoCaptureCategory;
-
- if (cap ? capcat != catItem->captureCategory() : cat != catItem->category()) {
- QListWidgetItem *item = list->item(catIndex);
- Q_ASSERT(item->type() == cap ? (int) capcat : (int) cat);
- if (item->checkState() == Qt::Checked) {
- switch (catItem->odtype()) {
- case AudioOutputDeviceType:
- m_audioOutputModel.value(cat)->setModelData(aoPreferredList);
- break;
-
- case AudioCaptureDeviceType:
- m_audioCaptureModel.value(capcat)->setModelData(acPreferredList);
- break;
-
- case VideoCaptureDeviceType:
- m_videoCaptureModel.value(capcat)->setModelData(vcPreferredList);
- break;
-
- default: ;
- }
- }
- }
- }
-
- emit changed();
- break;
-
- case QDialog::Rejected:
- // nothing to do
- break;
- }
-
- delete dialog;
-}
-
-void DevicePreference::on_showAdvancedDevicesCheckBox_toggled()
-{
- // In order to get the right list from the backend, we need to update the settings now
- // before calling availableAudio{Output,Capture}Devices()
- GlobalConfig().setHideAdvancedDevices(!showAdvancedDevicesCheckBox->isChecked());
- loadCategoryDevices();
-}
-
-void DevicePreference::on_testPlaybackButton_toggled(bool down)
-{
- if (down) {
- QModelIndex idx = deviceList->currentIndex();
- if (!idx.isValid()) {
- return;
- }
-
- // Shouldn't happen, but better to be on the safe side
- if (m_testingType != dtInvalidDevice) {
- delete m_media;
- m_media = nullptr;
- delete m_audioOutput;
- m_audioOutput = nullptr;
- delete m_videoWidget;
- m_videoWidget = nullptr;
- }
-
- // Setup the Phonon objects according to the testing type
- m_testingType = shownModelType();
- switch (m_testingType) {
- case dtAudioOutput: {
- // Create an audio output with the selected device
- m_media = new MediaObject(this);
- const AudioOutputDeviceModel *model = static_cast<const AudioOutputDeviceModel *>(idx.model());
- const AudioOutputDevice &device = model->modelData(idx);
- m_audioOutput = new AudioOutput(this);
- if (!m_audioOutput->setOutputDevice(device)) {
- KMessageBox::error(this, i18n("Failed to set the selected audio output device"));
- break;
- }
-
- // Just to be very sure that nothing messes our test sound up
- m_audioOutput->setVolume(1.0);
- m_audioOutput->setMuted(false);
-
- createPath(m_media, m_audioOutput);
- static QUrl testUrl = QUrl::fromLocalFile(QStandardPaths::locate(
- QStandardPaths::GenericDataLocation,
- QStringLiteral("sounds/Oxygen-Sys-Log-In.ogg")));
- m_media->setCurrentSource(testUrl);
- connect(m_media, &MediaObject::finished, testPlaybackButton, &QToolButton::toggle);
-
- break;
- }
-
-#ifndef PHONON_NO_AUDIOCAPTURE
- case dtAudioCapture: {
- // Create a media object and an audio output
- m_media = new MediaObject(this);
- m_audioOutput = new AudioOutput(NoCategory, this);
-
- // Just to be very sure that nothing messes our test sound up
- m_audioOutput->setVolume(1.0);
- m_audioOutput->setMuted(false);
-
- // Try to create a path
- if (!createPath(m_media, m_audioOutput).isValid()) {
- KMessageBox::error(this, i18n("Your backend may not support audio recording"));
- break;
- }
-
- // Determine the selected device
- const AudioCaptureDeviceModel *model = static_cast<const AudioCaptureDeviceModel *>(idx.model());
- const AudioCaptureDevice &device = model->modelData(idx);
- m_media->setCurrentSource(device);
-
- break;
- }
-#endif
-
-#ifndef PHONON_NO_VIDEOCAPTURE
- case dtVideoCapture: {
- // Create a media object and a video output
- m_media = new MediaObject(this);
- m_videoWidget = new VideoWidget(nullptr);
-
- // Try to create a path
- if (!createPath(m_media, m_videoWidget).isValid()) {
- KMessageBox::error(this, i18n("Your backend may not support video recording"));
- break;
- }
-
- // Determine the selected device
- const VideoCaptureDeviceModel *model = static_cast<const VideoCaptureDeviceModel *>(idx.model());
- const VideoCaptureDevice &device = model->modelData(idx);
- m_media->setCurrentSource(device);
-
- // Set up the testing video widget
- m_videoWidget->setWindowTitle(i18n("Testing %1", device.name()));
- m_videoWidget->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint);
- if (device.property("icon").canConvert(QVariant::String))
- m_videoWidget->setWindowIcon(QIcon::fromTheme(device.property("icon").toString()));
- m_videoWidget->move(QCursor::pos() - QPoint(250, 295));
- m_videoWidget->resize(320, 240);
- m_videoWidget->show();
-
- break;
- }
-#endif
-
- default:
- return;
- }
-
- m_media->play();
- } else {
- // Uninitialize the Phonon objects according to the testing type
- switch (m_testingType) {
- case dtAudioOutput:
- disconnect(m_media, &MediaObject::finished, testPlaybackButton, &QToolButton::toggle);
- delete m_media;
- delete m_audioOutput;
- break;
-
- case dtAudioCapture:
- delete m_media;
- delete m_audioOutput;
- break;
-
- case dtVideoCapture:
- delete m_media;
- delete m_videoWidget;
- break;
-
- default:
- return;
- }
-
- m_media = nullptr;
- m_videoWidget = nullptr;
- m_audioOutput = nullptr;
- m_testingType = dtInvalidDevice;
- }
-}
-
-void DevicePreference::updateButtonsEnabled()
-{
- if (deviceList->model()) {
- QModelIndex idx = deviceList->currentIndex();
- preferButton->setEnabled(idx.isValid() && idx.row() > 0);
- deferButton->setEnabled(idx.isValid() && idx.row() < deviceList->model()->rowCount() - 1);
- testPlaybackButton->setEnabled(idx.isValid() && (idx.flags() & Qt::ItemIsEnabled));
- } else {
- preferButton->setEnabled(false);
- deferButton->setEnabled(false);
- testPlaybackButton->setEnabled(false);
- }
-}
-
-} // Phonon namespace
-
-#include "moc_devicepreference.cpp"
diff --git a/kcms/phonon/devicepreference.h b/kcms/phonon/devicepreference.h
deleted file mode 100644
index 2ed8f368..00000000
--- a/kcms/phonon/devicepreference.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2006-2008 Matthias Kretz <kretz at kde.org>
- Copyright (C) 2011 Casian Andrei <skeletk13 at gmail.com>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) version 3.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef DEVICEPREFERENCE_H_STUPID_UIC
-#define DEVICEPREFERENCE_H_STUPID_UIC
-
-#include "ui_devicepreference.h"
-
-#include <QMap>
-#include <QStandardItem>
-
-#include <phonon/objectdescription.h>
-#include <phonon/objectdescriptionmodel.h>
-
-namespace Phonon {
-
-class MediaObject;
-class AudioOutput;
-class VideoWidget;
-
-class DevicePreference : public QWidget, private Ui::DevicePreference
-{
- Q_OBJECT
-public:
- explicit DevicePreference(QWidget *parent = nullptr);
- ~DevicePreference() override;
-
- void load();
- void save();
- void defaults();
- void pulseAudioEnabled();
-
-Q_SIGNALS:
- void changed();
-
-protected:
- void changeEvent(QEvent *) override;
-
-private Q_SLOTS:
- void on_preferButton_clicked();
- void on_deferButton_clicked();
- void on_showAdvancedDevicesCheckBox_toggled();
- void on_applyPreferencesButton_clicked();
- void on_testPlaybackButton_toggled(bool down);
- void updateButtonsEnabled();
- void updateDeviceList();
- void updateAudioOutputDevices();
- void updateAudioCaptureDevices();
- void updateVideoCaptureDevices();
-
-private:
- enum DeviceType {dtInvalidDevice, dtAudioOutput, dtAudioCapture, dtVideoCapture};
-
-private:
- template<ObjectDescriptionType T> void removeDevice(const ObjectDescription<T> &deviceToRemove,
- QMap<int, ObjectDescriptionModel<T> *> *modelMap);
- void loadCategoryDevices();
- QList<AudioOutputDevice> availableAudioOutputDevices() const;
- QList<AudioCaptureDevice> availableAudioCaptureDevices() const;
- QList<VideoCaptureDevice> availableVideoCaptureDevices() const;
- DeviceType shownModelType() const;
-
-private:
- QMap<int, AudioOutputDeviceModel *> m_audioOutputModel;
- QMap<int, AudioCaptureDeviceModel *> m_audioCaptureModel;
- QMap<int, VideoCaptureDeviceModel *> m_videoCaptureModel;
- QStandardItemModel m_categoryModel;
- QStandardItemModel m_headerModel;
- DeviceType m_testingType;
-
- MediaObject *m_media;
- AudioOutput *m_audioOutput;
- VideoWidget *m_videoWidget;
-};
-
-} // namespace Phonon
-
-#endif // DEVICEPREFERENCE_H_STUPID_UIC
diff --git a/kcms/phonon/devicepreference.ui b/kcms/phonon/devicepreference.ui
deleted file mode 100644
index 30fc7079..00000000
--- a/kcms/phonon/devicepreference.ui
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <author>Matthias Kretz <kretz at kde.org></author>
- <class>DevicePreference</class>
- <widget class="QWidget" name="DevicePreference">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>600</width>
- <height>400</height>
- </rect>
- </property>
- <layout class="QGridLayout">
- <item row="0" column="0" rowspan="2">
- <layout class="QVBoxLayout">
- <item>
- <widget class="QTreeView" name="categoryTree">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="contextMenuPolicy">
- <enum>Qt::CustomContextMenu</enum>
- </property>
- <property name="toolTip">
- <string>Various categories of media use cases. For each category, you may choose what device you prefer to be used by the Phonon applications.</string>
- </property>
- <property name="whatsThis">
- <string>Various categories of media use cases. For each category, you may choose what device you prefer to be used by the Phonon applications.</string>
- </property>
- <property name="itemsExpandable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="showAdvancedDevicesContainer">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QCheckBox" name="showAdvancedDevicesCheckBox">
- <property name="text">
- <string>Show advanced devices</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="showAdvancedDevicesSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QPushButton" name="applyPreferencesButton">
- <property name="toolTip">
- <string>Use the currently shown device list for more categories.</string>
- </property>
- <property name="whatsThis">
- <string>Use the currently shown device list for more categories.</string>
- </property>
- <property name="text">
- <string>Apply Device List To...</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Minimum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item row="0" column="1">
- <widget class="QTreeView" name="deviceList">
- <property name="acceptDrops">
- <bool>true</bool>
- </property>
- <property name="toolTip">
- <string>Devices found on your system, suitable for the selected category. Choose the device that you wish to be used by the applications.</string>
- </property>
- <property name="whatsThis">
- <string>The order determines the preference of the devices. If for some reason the first device cannot be used Phonon will try to use the second, and so on.</string>
- </property>
- <property name="horizontalScrollBarPolicy">
- <enum>Qt::ScrollBarAsNeeded</enum>
- </property>
- <property name="dragEnabled">
- <bool>true</bool>
- </property>
- <property name="dragDropMode">
- <enum>QAbstractItemView::InternalMove</enum>
- </property>
- <property name="selectionBehavior">
- <enum>QAbstractItemView::SelectRows</enum>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="textElideMode">
- <enum>Qt::ElideNone</enum>
- </property>
- <property name="verticalScrollMode">
- <enum>QAbstractItemView::ScrollPerPixel</enum>
- </property>
- <property name="horizontalScrollMode">
- <enum>QAbstractItemView::ScrollPerPixel</enum>
- </property>
- <property name="rootIsDecorated">
- <bool>false</bool>
- </property>
- <property name="itemsExpandable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <layout class="QHBoxLayout">
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>16</width>
- <height>29</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="testPlaybackButton">
- <property name="text">
- <string>Test</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="preferButton">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="toolTip">
- <string>prefer the selected device</string>
- </property>
- <property name="text">
- <string>Prefer</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="deferButton">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="toolTip">
- <string>no preference for the selected device</string>
- </property>
- <property name="text">
- <string>Defer</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/kcms/phonon/kcm_phonon.desktop b/kcms/phonon/kcm_phonon.desktop
deleted file mode 100644
index 79ac4476..00000000
--- a/kcms/phonon/kcm_phonon.desktop
+++ /dev/null
@@ -1,160 +0,0 @@
-[Desktop Entry]
-Exec=kcmshell5 kcm_phonon
-Icon=preferences-desktop-sound
-Type=Service
-X-KDE-ServiceTypes=KCModule
-
-X-KDE-Library=kcm_phonon
-X-KDE-FactoryName=kcm_phonon
-X-KDE-ParentApp=kcontrol
-X-KDE-System-Settings-Parent-Category=audio-and-video
-X-DocPath=kcontrol/phonon/index.html
-
-Name=Audio and Video
-Name[ar]=الصّوت والفيديو
-Name[bs]=Audio i video
-Name[ca]=Àudio i vídeo
-Name[ca at valencia]=Àudio i vídeo
-Name[cs]=Audio a video
-Name[da]=Lyd og video
-Name[de]=Audio und Video
-Name[el]=Ήχος και βίντεο
-Name[en_GB]=Audio and Video
-Name[es]=Audio y vídeo
-Name[et]=Heli ja video
-Name[eu]=Audioa eta bideoa
-Name[fi]=Ääni ja video
-Name[fr]=Audio et vidéo
-Name[gl]=Son e vídeo
-Name[he]=שמע ווידאו
-Name[hu]=Hang és videó
-Name[id]=Audio dan Video
-Name[is]=Hljóð og mynd
-Name[it]=Audio e video
-Name[ja]=オーディオとビデオ
-Name[ko]=오디오 및 비디오
-Name[lt]=Garsas ir vaizdas
-Name[mr]=ऑडिओ व व्हिडिओ
-Name[nb]=Lyd og video
-Name[nds]=Video un Klang
-Name[nl]=Audio en video
-Name[nn]=Lyd og video
-Name[pa]=ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ
-Name[pl]=Dźwięk i obraz
-Name[pt]=Áudio e Vídeo
-Name[pt_BR]=Áudio e vídeo
-Name[ru]=Звук и видео
-Name[sk]=Zvuk a video
-Name[sl]=Zvok in video
-Name[sr]=Аудио и видео
-Name[sr at ijekavian]=Аудио и видео
-Name[sr at ijekavianlatin]=Audio i video
-Name[sr at latin]=Audio i video
-Name[sv]=Ljud- och video
-Name[tr]=Ses ve Video
-Name[uk]=Звук та відео
-Name[x-test]=xxAudio and Videoxx
-Name[zh_CN]=音频和视频
-Name[zh_TW]=音效和視訊
-Comment=Phonon Audio and Video
-Comment[ar]=صوت وفيديو فنون
-Comment[bs]=Audio i Video fonona
-Comment[ca]=Àudio i vídeo del Phonon
-Comment[ca at valencia]=Àudio i vídeo del Phonon
-Comment[cs]=Audio a video - Phonon
-Comment[da]=Phonon lyd og video
-Comment[de]=Phonon - Audio und Video
-Comment[el]=Ήχος και βίντεο Phonon
-Comment[en_GB]=Phonon Audio and Video
-Comment[es]=Audio y vídeo de Phonon
-Comment[et]=Phononi heli ja video
-Comment[eu]=Phonon audioa eta bideoa
-Comment[fi]=Phononin ääni ja video
-Comment[fr]=Audio et vidéo de Phonon
-Comment[gl]=Son e vídeo de Phonon
-Comment[he]=שמע ווידאו של Phonon
-Comment[hu]=Phonon hang és videó
-Comment[id]=Phonon Audio dan Video
-Comment[is]=Phonon hljóð og mynd
-Comment[it]=Audio e video di Phonon
-Comment[ja]=Phonon オーディオとビデオ
-Comment[ko]=Phonon 오디오 및 비디오
-Comment[lt]=Phonon audio ir video
-Comment[mr]=फोनोन ऑडिओ व व्हिडिओ
-Comment[nb]=Phonon lyd og video
-Comment[nds]=Phonon-Instellen för Video un Klang
-Comment[nl]=Phonon audio en video
-Comment[nn]=Phonon lyd og video
-Comment[pa]=ਫੋਨੋਨ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ
-Comment[pl]=Phonon - dźwięk i obraz
-Comment[pt]=Áudio e Vídeo do Phonon
-Comment[pt_BR]=Áudio e vídeo do Phonon
-Comment[ru]=Настройка мультимедийной платформы Phonon
-Comment[sk]=Zvuk a video Phonon
-Comment[sl]=Phonon: zvok in video
-Comment[sr]=Аудио и видео са Фононом
-Comment[sr at ijekavian]=Аудио и видео са Фононом
-Comment[sr at ijekavianlatin]=Audio i video sa Phononom
-Comment[sr at latin]=Audio i video sa Phononom
-Comment[sv]=Phonon ljud- och video
-Comment[tr]=Phonon Ses ve Görüntü
-Comment[uk]=Звук та відео Phonon
-Comment[x-test]=xxPhonon Audio and Videoxx
-Comment[zh_CN]=Phonon 音频和视频
-Comment[zh_TW]=Phonon 音效和視訊
-X-KDE-Keywords=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[bg]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,Звук,Видео,Изход,Устройство,Уведомление,Музика,Общуване,Медия
-X-KDE-Keywords[bn]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[bs]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,zvuk,izlaz,uređaj,informacija,muzika,komunikacija,mediji
-X-KDE-Keywords[ca]=So,Phonon,Àudio,Vídeo,Sortida,Dispositiu,Notificació,Música,Comunicació,Suport,NMM,GStreamer,Xine
-X-KDE-Keywords[ca at valencia]=So,Phonon,Àudio,Vídeo,Eixida,Dispositiu,Notificació,Música,Comunicació,Suport,NMM,GStreamer,Xine
-X-KDE-Keywords[cs]=Zvuk,Phonon,Audio,Video,Výstup,Zařízení,Upozornění,Hudba,Komunikace,Média,NMM,GStreamer,Xine
-X-KDE-Keywords[da]=Lyd,Phonon,Audio,Video,Output,Enhed,Bekendtgørelse,Musik,Kommunikation,Medie,NMM,GStreamer,Xine,VLC
-X-KDE-Keywords[de]=Klänge,Sound,Phonon,Audio,Video,Ausgabe,Gerät,Benachrichtigung,Notification,Musik,Kommunikation,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[el]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[en_GB]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[eo]=Sono,Phonon,Sono,Video,Eligo,Aparato,Atentigo,Muziko,Komunikado,Aŭdvido,NMM,GStreamer,Xine
-X-KDE-Keywords[es]=Sonido,Phonom,Audio,Video,Salida,Dispositivo,Notificación,Música,Comunicación,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[et]=heli,Phonon,audio,video,väljund,seade,märguanne,muusika,suhtlemine,meedia,NMM,GStreamer,Xine
-X-KDE-Keywords[eu]=Soinua,Phonon,Audioa,Bideoa,Irteera,Gailua,Jakinarazpena,Musika,Komunikazioa,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[fi]=Ääni,Phonon,Audio,Video,Ulostulo,Lähtö,Tuloste,Laite,Huomautukset,Huomautus,Ilmoitukset,Ilmoitus,Musiikki,Viestintä,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[fr]=son, phonon, audio, vidéo, sortie, périphérique, notification, musique, communication, média, NMM, GStreamer, Xine
-X-KDE-Keywords[ga]=Fuaim,Phonon,Fís,Aschur,Gléas,Fógairt,Fógra,Ceol,Cumarsáid,Meán,Meáin,NMM,GStreamer,Xine
-X-KDE-Keywords[gl]=Son,Phonon,Audio,Vídeo,Saída,Dispositivo,Notificación,Música,Comunicación,Medio,NMM,GStreamer,Xine
-X-KDE-Keywords[hi]=ध्वनि, फ़ोनॉन, श्रव्य, वीडियो, आउटपुट, डिवाइस, अधिसूचना, संगीत, संचार,मीडिया, NMM, GStreamer, Xine
-X-KDE-Keywords[hu]=Hang,Phonon,Hang,Videó,Kimenet,Eszköz,Értesítés,Zene,Kommunikáció,Média,NMM,GStreamer,Xine
-X-KDE-Keywords[ia]=Sono,Phonon,Audio,Video,Exito,Dispositivo,Notification,Musica,Communication,Medios,NMM,GStreamer,Xine
-X-KDE-Keywords[id]=Suara,Phonon,Audio,Video,Output,Perangkat,Notifikasi,Musik,Komunikasi,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[is]=Hljóð,Phonon,Audio,Vídeó,Úttak,Tæki,Tilkynningar,Tónlist,Samskipti,Miðlar,NMM,GStreamer,Xine
-X-KDE-Keywords[it]=suono,Phonon,audio,video,output,dispositivo,notifica,musica,comunicazione,media,NMM,GStreamer,Xine
-X-KDE-Keywords[kk]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[km]=សំឡេង Phonon អូឌីយ៉ូ វីដេអូ លទ្ធផល ឧបករណ៍ ការជូនដំណឹង តន្ត្រី ការទាក់ទង មេឌៀ NMM GStreamer Xine
-X-KDE-Keywords[ko]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,소리,사운드,오디오,비디오,동영상,음악,출력,장치,알림,대화,미디어
-X-KDE-Keywords[lv]=skaņa,phonon,audio,video,izvade,ierīce,paziņojums,mūzika,saziņa,mēdiji,NMM,GStreamer,Xine
-X-KDE-Keywords[mr]=Sound,फोनॉन,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[nb]=Lyd,Phonon,Audio,Video,Utgang,Enhet,Varsling,Musikk,Kommunikasjon,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[nds]=Klang,Phonon,Audio,Video,Utgaav,Reedschap,Bescheed,Musik,Kommunikatschoon,Mediendatei,NMM,GStreamer,Xine
-X-KDE-Keywords[nl]=Geluid,Phonon,audio,video,uitvoer,apparaat,melding,muziek,communicatie,medium,NMM,GStreamer,Xine
-X-KDE-Keywords[nn]=lyd,Phonon,audio,lyd,video,film,utdata,utgang,eining,varsling,musikk,kommunikasjon,media,NMM,GStreamer,Xine
-X-KDE-Keywords[pa]=ਸਾਊਂਡ,ਫੋਨੋਨ,ਆਡੀਓ,ਵਿਡੀਓ,ਵੀਡਿਓ,ਆਉਟਪੁੱਟ,ਜੰਤਰ,ਨੋਟੀਫਿਕੇਸ਼ਨ,ਸੂਚਨਾ,ਸੰਗੀਤ,ਮਿਊਜ਼ਕ,ਕਮਿਊਨੀਕੇਸ਼ਨ,ਸੰਚਾਰ, ਮੀਡਿਆ,NMM,ਜੀਸਟਰੀਮਰ,ਜ਼ਾਇਨ
-X-KDE-Keywords[pl]=Dźwięk,Phonon,Audio,Video,Wyjście,Urządzenie,Powiadomienia,Muzyka,Komunikacja,Multimedia,NMM,GStreamer,Xine
-X-KDE-Keywords[pt]=Som,Phonon,Áudio,Vídeo,Saída,Dispositivo,Notificação,Música,Comunicações,Multimédia,NMM,GStreamer,Xine
-X-KDE-Keywords[pt_BR]=Som,Phonon,Áudio,Vídeo,Saída,Dispositivo,Notificação,Música,Comunicações,Multimídia,NMM,GStreamer,Xine
-X-KDE-Keywords[ro]=sunet,phonon,audio,video,ieșire,dispozitiv,notificare,muzică,comunicare,media,NMM,GStreamer,Xine
-X-KDE-Keywords[ru]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,звук,аудио,видео,вывод,устройство,уведомления,музыка,связь,общение,медиа
-X-KDE-Keywords[sk]=Zvuk,Phonon,Audio,Video,Output,Zariadenie,Notifikácia,Hudba,Komunikácia,Mádia,NMM,GStreamer,Xine
-X-KDE-Keywords[sl]=zvok,phonon,audio,video,predvajanje,naprava,naprave,obvestila,glasba,komunikacija,igre,snemanje,predstavnost,nmm,gstreamer,xine,vlc
-X-KDE-Keywords[sr]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,звук,Фонон,аудио,видео,излаз,уређај,обавештење,музика,комуникација,медија,НММ,Гстример,Ксин
-X-KDE-Keywords[sr at ijekavian]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,звук,Фонон,аудио,видео,излаз,уређај,обавештење,музика,комуникација,медија,НММ,Гстример,Ксин
-X-KDE-Keywords[sr at ijekavianlatin]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,zvuk,Phonon,audio,video,izlaz,uređaj,obaveštenje,muzika,komunikacija,medija,NMM,GStreamer,Xine
-X-KDE-Keywords[sr at latin]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,zvuk,Phonon,audio,video,izlaz,uređaj,obaveštenje,muzika,komunikacija,medija,NMM,GStreamer,Xine
-X-KDE-Keywords[sv]=Ljud,Phonon,Video,Utgång,Enhet,Underrättelse,Musik,Kommunikation,Media,NMM,GStreamer,Xine
-X-KDE-Keywords[tg]=Овоз,Phonon,Аудио,Видео,Барориш,Дастгоҳ,Огоҳӣ,Мусиқӣ,Паёмнависӣ,Медиа,NMM,GStreamer,Xine
-X-KDE-Keywords[tr]=Ses,Phonon,Ses,Video,Çıkış,Aygıt,Bildirim,Müzik,İletişim,Ortam,NMM,GStreamer,Xine
-X-KDE-Keywords[ug]=ئاۋاز،Phonon،ئۈن،سىن،چىقىرىش،ئۈسكۈنە،ئۇقتۇرۇش،مۇزىكا،ئالاقە،ۋاسىتە،NMM،GStreamer،Xine
-X-KDE-Keywords[uk]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,звук,фонон,аудіо,відео,виведення,показ,відтворення,пристрій,сповіщення,музика,спілкування,мультимедіа
-X-KDE-Keywords[vi]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,âm thanh,phim ảnh,thiết bị,thông báo,nhạc,giao tiếp, phương tiện
-X-KDE-Keywords[wa]=Son,Phonon,Odio,Videyo,rexhowe,éndjin,notifiaedje,muzike,comunicåcion,media,NMM,GStreamer,Xine
-X-KDE-Keywords[x-test]=xxSoundxx,xxPhononxx,xxAudioxx,xxVideoxx,xxOutputxx,xxDevicexx,xxNotificationxx,xxMusicxx,xxCommunicationxx,xxMediaxx,xxNMMxx,xxGStreamerxx,xxXinexx
-X-KDE-Keywords[zh_CN]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine,声音,音效,视频,输出,设备,提醒,音乐,通信,媒体
-X-KDE-Keywords[zh_TW]=Sound,Phonon,Audio,Video,Output,Device,Notification,Music,Communication,Media,NMM,GStreamer,Xine
diff --git a/kcms/phonon/listview-background.png b/kcms/phonon/listview-background.png
deleted file mode 100644
index a4a31840..00000000
Binary files a/kcms/phonon/listview-background.png and /dev/null differ
diff --git a/kcms/phonon/main.cpp b/kcms/phonon/main.cpp
deleted file mode 100644
index 612357c4..00000000
--- a/kcms/phonon/main.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2006-2007 Matthias Kretz <kretz at kde.org>
- Copyright (C) 2010 Colin Guthrie <cguthrie at mandriva.org>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) version 3.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "main.h"
-
-#include <QTabWidget>
-
-#include <KAboutData>
-#include <KPluginFactory>
-#include <KLocalizedString>
-
-#include "backendselection.h"
-#include "devicepreference.h"
-
-#include "config-workspace.h"
-
-K_PLUGIN_FACTORY(PhononKcmFactory, registerPlugin<PhononKcm>();)
-
-PhononKcm::PhononKcm(QWidget *parent, const QVariantList &args)
- : KCModule(parent, args)
-{
- KAboutData *about = new KAboutData(
- "kcm_phonon", i18n("Phonon Configuration Module"),
- WORKSPACE_VERSION_STRING, QString(), KAboutLicense::GPL,
- i18n("Copyright 2006 Matthias Kretz"));
- about->addAuthor(i18n("Matthias Kretz"), QString(), "kretz at kde.org");
- about->addAuthor(i18n("Colin Guthrie"), QString(), "colin at mageia.org");
- setAboutData(about);
-
- setLayout(new QHBoxLayout);
- layout()->setContentsMargins(0, 0, 0, 0);
- layout()->setSpacing(0);
-
- m_tabs = new QTabWidget(this);
- layout()->addWidget(m_tabs);
-
- m_devicePreferenceWidget = new Phonon::DevicePreference(this);
- m_tabs->addTab(m_devicePreferenceWidget, i18n("Device Preference"));
- m_backendSelection = new BackendSelection(this);
- m_tabs->addTab(m_backendSelection, i18n("Backend"));
-
- load();
- connect(m_backendSelection, SIGNAL(changed()), SLOT(changed()));
- connect(m_devicePreferenceWidget, SIGNAL(changed()), SLOT(changed()));
-
- setButtons( KCModule::Default|KCModule::Apply|KCModule::Help );
-}
-
-void PhononKcm::load()
-{
- m_devicePreferenceWidget->load();
- m_backendSelection->load();
-}
-
-void PhononKcm::save()
-{
- m_devicePreferenceWidget->save();
- m_backendSelection->save();
-}
-
-void PhononKcm::defaults()
-{
- m_devicePreferenceWidget->defaults();
- m_backendSelection->defaults();
-}
-
-#include "main.moc"
diff --git a/kcms/phonon/main.h b/kcms/phonon/main.h
deleted file mode 100644
index 9e07cce6..00000000
--- a/kcms/phonon/main.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2006-2007 Matthias Kretz <kretz at kde.org>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) version 3.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef MAIN_H
-#define MAIN_H
-
-#include <KCModule>
-
-namespace Phonon {
-class DevicePreference;
-}
-class BackendSelection;
-
-class QTabWidget;
-
-class PhononKcm : public KCModule
-{
- Q_OBJECT
-public:
- PhononKcm(QWidget *parent, const QVariantList &);
-
- void load() override;
- void save() override;
- void defaults() override;
-
-private:
- QTabWidget* m_tabs;
- Phonon::DevicePreference *m_devicePreferenceWidget;
- BackendSelection *m_backendSelection;
-};
-
-#endif // MAIN_H
diff --git a/plasma-desktop.categories b/plasma-desktop.categories
deleted file mode 100644
index f4316b5a..00000000
--- a/plasma-desktop.categories
+++ /dev/null
@@ -1 +0,0 @@
-org.kde.kcm.phonon kcm module phonon IDENTIFIER [KCM_PHONON_LOG]
More information about the kde-doc-english
mailing list