diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-12-19 17:30:41 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-12-19 17:30:41 +0000 |
| commit | e8d99698c23b1d8ac4a396635e9af60d52a12229 (patch) | |
| tree | 00572f714497b467d5eb96524b1c8ada552b5734 /src/plugins/Input/ffmpeg | |
| parent | 5f99afc31569637ac29935b2073e943ac1c2414b (diff) | |
| download | qmmp-e8d99698c23b1d8ac4a396635e9af60d52a12229.tar.gz qmmp-e8d99698c23b1d8ac4a396635e9af60d52a12229.tar.bz2 qmmp-e8d99698c23b1d8ac4a396635e9af60d52a12229.zip | |
more ffmpeg formats support (including ape); ffmpeg plugin settings
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@692 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/ffmpeg')
| -rw-r--r-- | src/plugins/Input/ffmpeg/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 7 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp | 36 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/detailsdialog.ui | 126 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/ffmpeg.pro | 15 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/settingsdialog.cpp | 95 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/settingsdialog.h | 46 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/settingsdialog.ui | 137 |
8 files changed, 363 insertions, 105 deletions
diff --git a/src/plugins/Input/ffmpeg/CMakeLists.txt b/src/plugins/Input/ffmpeg/CMakeLists.txt index 1ae7b4172..7bdcdc0c0 100644 --- a/src/plugins/Input/ffmpeg/CMakeLists.txt +++ b/src/plugins/Input/ffmpeg/CMakeLists.txt @@ -5,7 +5,6 @@ cmake_minimum_required(VERSION 2.4.7) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) - # qt plugin ADD_DEFINITIONS( -Wall ) @@ -71,12 +70,14 @@ SET(libffmpeg_SRCS decoder_ffmpeg.cpp decoderffmpegfactory.cpp detailsdialog.cpp + settingsdialog.cpp ) SET(libffmpeg_MOC_HDRS decoderffmpegfactory.h decoder_ffmpeg.h detailsdialog.h + settingsdialog.h ) SET(libffmpeg_RCCS translations/translations.qrc) @@ -89,7 +90,8 @@ QT4_WRAP_CPP(libffmpeg_MOC_SRCS ${libffmpeg_MOC_HDRS}) SET(libffmpeg_UIS - detailsdialog.ui + detailsdialog.ui + settingsdialog.ui ) QT4_WRAP_UI(libffmpeg_UIS_H ${libffmpeg_UIS}) diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index c1b5ac2e2..49c13da9f 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -87,9 +87,7 @@ void DecoderFFmpeg::flush(bool final) while ((! done && ! m_finish) && output()->recycler()->full()) { mutex()->unlock(); - output()->recycler()->cond()->wait(output()->recycler()->mutex()); - mutex()->lock (); done = user_stop; } @@ -193,18 +191,15 @@ void DecoderFFmpeg::deinit() void DecoderFFmpeg::run() { -// mpc_uint32_t vbrAcc = 0; -// mpc_uint32_t vbrUpd = 0; uint8_t *inbuf_ptr; int out_size, size; AVPacket pkt; mutex()->lock (); - if (! inited) + if (!inited) { mutex()->unlock(); - return; } mutex()->unlock(); diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp index 22f16799e..7ed9d4b78 100644 --- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp +++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include <QtGui> +#include <QSettings> extern "C" { @@ -41,6 +42,7 @@ extern "C" } #include "detailsdialog.h" +#include "settingsdialog.h" #include "decoder_ffmpeg.h" #include "decoderffmpegfactory.h" @@ -49,8 +51,15 @@ extern "C" bool DecoderFFmpegFactory::supports(const QString &source) const { - - return (source.right(4).toLower() == ".wma"); + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + QStringList filters = settings.value("FFMPEG/filters","*.wma").toStringList(); + foreach(QString filter, filters) + { + QRegExp regexp(filter, Qt::CaseInsensitive, QRegExp::Wildcard); + if (regexp.exactMatch(source)) + return TRUE; + } + return FALSE; } bool DecoderFFmpegFactory::canDecode(QIODevice *) const @@ -60,13 +69,15 @@ bool DecoderFFmpegFactory::canDecode(QIODevice *) const const DecoderProperties DecoderFFmpegFactory::properties() const { + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + QStringList filters = settings.value("FFMPEG/filters","*.wma").toStringList(); DecoderProperties properties; properties.name = tr("FFMPEG Plugin"); - properties.filter = "*.wma"; - properties.description = tr("WMA Files"); + properties.filter = filters.join(" "); + properties.description = tr("FFMPEG Formats"); //properties.contentType = ""; properties.hasAbout = TRUE; - properties.hasSettings = FALSE; + properties.hasSettings = TRUE; properties.noInput = TRUE; properties.protocols = "file"; return properties; @@ -114,14 +125,23 @@ QObject* DecoderFFmpegFactory::showDetails(QWidget *parent, const QString &path) return d; } -void DecoderFFmpegFactory::showSettings(QWidget *) -{} +void DecoderFFmpegFactory::showSettings(QWidget *parent) +{ + SettingsDialog *s = new SettingsDialog(parent); + s->show(); +} void DecoderFFmpegFactory::showAbout(QWidget *parent) { QMessageBox::about (parent, tr("About FFmpeg Audio Plugin"), tr("Qmmp FFmpeg Audio Plugin")+"\n"+ - tr("Suppored formats: WMA")+"\n"+ + QString(tr("Compiled against libavformat-%1.%2.%3 and libavcodec-%4.%5.%6")) + .arg(LIBAVFORMAT_VERSION_MAJOR) + .arg(LIBAVFORMAT_VERSION_MINOR) + .arg(LIBAVFORMAT_VERSION_MICRO) + .arg(LIBAVCODEC_VERSION_MAJOR) + .arg(LIBAVCODEC_VERSION_MINOR) + .arg(LIBAVCODEC_VERSION_MICRO)+"\n"+ tr("Writen by: Ilya Kotov <forkotov02@hotmail.ru>")); } diff --git a/src/plugins/Input/ffmpeg/detailsdialog.ui b/src/plugins/Input/ffmpeg/detailsdialog.ui index 0dd6741cb..d74cdde01 100644 --- a/src/plugins/Input/ffmpeg/detailsdialog.ui +++ b/src/plugins/Input/ffmpeg/detailsdialog.ui @@ -6,7 +6,7 @@ <x>0</x> <y>0</y> <width>545</width> - <height>374</height> + <height>343</height> </rect> </property> <property name="windowTitle" > @@ -39,25 +39,13 @@ </size> </property> <property name="title" > - <string>ASF Info</string> + <string>Audio Info</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>9</number> </property> - <property name="topMargin" > - <number>9</number> - </property> - <property name="rightMargin" > - <number>9</number> - </property> - <property name="bottomMargin" > - <number>9</number> - </property> - <property name="horizontalSpacing" > - <number>6</number> - </property> - <property name="verticalSpacing" > + <property name="spacing" > <number>6</number> </property> <item row="4" column="1" > @@ -159,7 +147,7 @@ <property name="orientation" > <enum>Qt::Vertical</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>74</width> <height>151</height> @@ -179,73 +167,48 @@ </sizepolicy> </property> <property name="title" > - <string>WMA Tag</string> + <string>Metadata</string> </property> - <layout class="QGridLayout" > - <property name="leftMargin" > - <number>8</number> - </property> - <property name="topMargin" > - <number>8</number> - </property> - <property name="rightMargin" > - <number>8</number> - </property> - <property name="bottomMargin" > - <number>8</number> - </property> - <property name="horizontalSpacing" > - <number>6</number> - </property> - <property name="verticalSpacing" > - <number>6</number> - </property> - <item row="6" column="1" > - <widget class="QPushButton" name="pushButton" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="text" > - <string>Save</string> - </property> - </widget> - </item> - <item row="4" column="3" > - <widget class="QLineEdit" name="trackLineEdit" /> - </item> - <item row="4" column="2" > - <widget class="QLabel" name="label_26" > + <layout class="QGridLayout" name="gridLayout" > + <item row="0" column="0" > + <widget class="QLabel" name="label_21" > <property name="text" > - <string>Track number:</string> + <string>Title:</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="4" column="1" > - <widget class="QLineEdit" name="yearLineEdit" /> + <item row="0" column="1" colspan="3" > + <widget class="QLineEdit" name="titleLineEdit" /> </item> - <item row="4" column="0" > - <widget class="QLabel" name="label_25" > + <item row="1" column="0" > + <widget class="QLabel" name="label_22" > <property name="text" > - <string>Year:</string> + <string>Artist:</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="5" column="0" > - <widget class="QLabel" name="label_27" > + <item row="1" column="1" colspan="3" > + <widget class="QLineEdit" name="artistLineEdit" /> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="label_23" > <property name="text" > - <string>Genre:</string> + <string>Album:</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> </property> </widget> </item> + <item row="2" column="1" colspan="3" > + <widget class="QLineEdit" name="albumLineEdit" /> + </item> <item row="3" column="0" > <widget class="QLabel" name="label_24" > <property name="text" > @@ -256,48 +219,45 @@ </property> </widget> </item> - <item row="2" column="0" > - <widget class="QLabel" name="label_23" > + <item row="3" column="1" colspan="3" > + <widget class="QLineEdit" name="commentLineEdit" /> + </item> + <item row="4" column="0" > + <widget class="QLabel" name="label_25" > <property name="text" > - <string>Album:</string> + <string>Year:</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="1" column="0" > - <widget class="QLabel" name="label_22" > + <item row="4" column="1" > + <widget class="QLineEdit" name="yearLineEdit" /> + </item> + <item row="4" column="2" > + <widget class="QLabel" name="label_26" > <property name="text" > - <string>Artist:</string> + <string>Track number:</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="0" column="0" > - <widget class="QLabel" name="label_21" > + <item row="4" column="3" > + <widget class="QLineEdit" name="trackLineEdit" /> + </item> + <item row="5" column="0" > + <widget class="QLabel" name="label_27" > <property name="text" > - <string>Title:</string> + <string>Genre:</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="0" column="1" colspan="3" > - <widget class="QLineEdit" name="titleLineEdit" /> - </item> - <item row="1" column="1" colspan="3" > - <widget class="QLineEdit" name="artistLineEdit" /> - </item> - <item row="2" column="1" colspan="3" > - <widget class="QLineEdit" name="albumLineEdit" /> - </item> - <item row="3" column="1" colspan="3" > - <widget class="QLineEdit" name="commentLineEdit" /> - </item> <item row="5" column="1" colspan="2" > <widget class="QLineEdit" name="genreLineEdit" /> </item> @@ -309,7 +269,7 @@ <property name="orientation" > <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>111</width> <height>20</height> diff --git a/src/plugins/Input/ffmpeg/ffmpeg.pro b/src/plugins/Input/ffmpeg/ffmpeg.pro index 6763c2cf3..5580d32e1 100644 --- a/src/plugins/Input/ffmpeg/ffmpeg.pro +++ b/src/plugins/Input/ffmpeg/ffmpeg.pro @@ -1,17 +1,20 @@ include(../../plugins.pri) -FORMS += detailsdialog.ui +FORMS += detailsdialog.ui \ + settingsdialog.ui HEADERS += decoderffmpegfactory.h \ detailsdialog.h \ - decoder_ffmpeg.h + decoder_ffmpeg.h \ + settingsdialog.h SOURCES += detailsdialog.cpp \ decoder_ffmpeg.cpp \ - decoderffmpegfactory.cpp + decoderffmpegfactory.cpp \ + settingsdialog.cpp QMAKE_CLEAN = ../libffmpeg.so -TARGET=$$PLUGINS_PREFIX/Input/ffmpeg +TARGET =$$PLUGINS_PREFIX/Input/ffmpeg QMAKE_CLEAN =$$PLUGINS_PREFIX/Input/libffmpeg.so @@ -41,8 +44,8 @@ TRANSLATIONS = translations/ffmpeg_plugin_ru.ts \ RESOURCES = translations/translations.qrc -isEmpty (LIB_DIR){ -LIB_DIR = /lib +isEmpty(LIB_DIR){ + LIB_DIR = /lib } target.path = $$LIB_DIR/qmmp/Input INSTALLS += target diff --git a/src/plugins/Input/ffmpeg/settingsdialog.cpp b/src/plugins/Input/ffmpeg/settingsdialog.cpp new file mode 100644 index 000000000..58e11b54a --- /dev/null +++ b/src/plugins/Input/ffmpeg/settingsdialog.cpp @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include <QSettings> +#include <QDir> +#include <QStringList> + +extern "C" +{ +#if defined HAVE_FFMPEG_AVFORMAT_H +#include <ffmpeg/avformat.h> +#elif defined HAVE_LIBAVFORMAT_AVFORMAT_H +#include <libavformat/avformat.h> +#else +#include <avformat.h> +#endif + + +#if defined HAVE_FFMPEG_AVCODEC_H +#include <ffmpeg/avcodec.h> +#elif defined HAVE_LIBAVCODEC_AVCODEC_H +#include <libavcodec/avcodec.h> +#else +#include <avcodec.h> +#endif +} + +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog(QWidget *parent) + : QDialog(parent) +{ + ui.setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + QStringList filters; + filters << "*.wma" << "*.ape"; + filters = settings.value("FFMPEG/filters", filters).toStringList(); + avcodec_init(); + avcodec_register_all(); + av_register_all(); + ui.wmaCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_WMAV1)); + ui.wmaCheckBox->setChecked(filters.contains("*.wma") && avcodec_find_decoder(CODEC_ID_WMAV1)); + ui.apeCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_APE)); + ui.apeCheckBox->setChecked(filters.contains("*.ape") && avcodec_find_decoder(CODEC_ID_APE)); + ui.ttaCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_TTA)); + ui.ttaCheckBox->setChecked(filters.contains("*.tta") && avcodec_find_decoder(CODEC_ID_TTA)); + ui.alacCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_ALAC)); + ui.alacCheckBox->setChecked(filters.contains("*.alac") && avcodec_find_decoder(CODEC_ID_ALAC)); + ui.aacCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_AAC)); + ui.aacCheckBox->setChecked(filters.contains("*.aac") && avcodec_find_decoder(CODEC_ID_AAC)); + ui.mp4CheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_AAC)); + ui.mp4CheckBox->setChecked(filters.contains("*.m4a") && avcodec_find_decoder(CODEC_ID_AAC)); + ui.raCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_RA_288)); + ui.raCheckBox->setChecked(filters.contains("*.ra") && avcodec_find_decoder(CODEC_ID_RA_288)); + +} + + +SettingsDialog::~SettingsDialog() +{ +} + +void SettingsDialog::accept() +{ + QStringList filters; + if (ui.wmaCheckBox->isChecked()) + filters << "*.wma"; + if (ui.apeCheckBox->isChecked()) + filters << "*.ape"; + if (ui.ttaCheckBox->isChecked()) + filters << "*.tta"; + if (ui.alacCheckBox->isChecked()) + filters << "*.alac"; + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + settings.setValue("FFMPEG/filters", filters); + QDialog::accept(); +} diff --git a/src/plugins/Input/ffmpeg/settingsdialog.h b/src/plugins/Input/ffmpeg/settingsdialog.h new file mode 100644 index 000000000..5617642ac --- /dev/null +++ b/src/plugins/Input/ffmpeg/settingsdialog.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include <QDialog> + +#include "ui_settingsdialog.h" + +/** + @author Ilya Kotov <forkotov02@hotmail.ru> +*/ +class SettingsDialog : public QDialog +{ + Q_OBJECT +public: + SettingsDialog(QWidget *parent = 0); + + ~SettingsDialog(); + +public slots: + virtual void accept(); + +private: + Ui::SettingsDialog ui; + +}; + +#endif diff --git a/src/plugins/Input/ffmpeg/settingsdialog.ui b/src/plugins/Input/ffmpeg/settingsdialog.ui new file mode 100644 index 000000000..5f182fcce --- /dev/null +++ b/src/plugins/Input/ffmpeg/settingsdialog.ui @@ -0,0 +1,137 @@ +<ui version="4.0" > + <class>SettingsDialog</class> + <widget class="QDialog" name="SettingsDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>302</width> + <height>286</height> + </rect> + </property> + <property name="windowTitle" > + <string>FFMPEG Plugin Settings</string> + </property> + <layout class="QGridLayout" name="gridLayout" > + <item row="1" column="0" > + <spacer name="horizontalSpacer" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>178</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="Maximum" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2" > + <widget class="QGroupBox" name="groupBox" > + <property name="title" > + <string>Formats</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout" > + <item> + <widget class="QCheckBox" name="wmaCheckBox" > + <property name="text" > + <string>Windows Media Audio</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="apeCheckBox" > + <property name="text" > + <string>Monkey's Audio</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="ttaCheckBox" > + <property name="text" > + <string>True Audio</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="alacCheckBox" > + <property name="text" > + <string>ALAC (Apple Lossless Audio Codec)</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="aacCheckBox" > + <property name="text" > + <string>ADTS AAC</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="mp4CheckBox" > + <property name="text" > + <string>MPEG-4 AAC</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="raCheckBox" > + <property name="text" > + <string>RealAudio 1.0/2.0</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>SettingsDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>214</x> + <y>167</y> + </hint> + <hint type="destinationlabel" > + <x>103</x> + <y>160</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>SettingsDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>269</x> + <y>174</y> + </hint> + <hint type="destinationlabel" > + <x>148</x> + <y>169</y> + </hint> + </hints> + </connection> + </connections> +</ui> |
