Start of Kdenlive's d-bus interface, bringing a new tab in the render dialog...

Start of Kdenlive's d-bus interface, bringing a new tab in the render dialog showing currently running renderings

svn path=/branches/KDE4/; revision=2920
parent c539149f
...@@ -33,7 +33,7 @@ public: ...@@ -33,7 +33,7 @@ public:
static QDBusConnection connection(QLatin1String("")); static QDBusConnection connection(QLatin1String(""));
RenderJob::RenderJob(bool erase, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in, int out) : QObject(), m_jobUiserver(NULL) { RenderJob::RenderJob(bool erase, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in, int out) : QObject(), m_jobUiserver(NULL), m_kdenliveinterface(NULL) {
m_scenelist = scenelist; m_scenelist = scenelist;
m_dest = dest; m_dest = dest;
m_player = player; m_player = player;
...@@ -49,8 +49,7 @@ RenderJob::RenderJob(bool erase, const QString &renderer, const QString &profile ...@@ -49,8 +49,7 @@ RenderJob::RenderJob(bool erase, const QString &renderer, const QString &profile
if (scenelist.startsWith("consumer:")) { if (scenelist.startsWith("consumer:")) {
// Use MLT's producer_consumer, needs a different syntax for profile: // Use MLT's producer_consumer, needs a different syntax for profile:
m_args << "profile=" + profile; m_args << "profile=" + profile;
} } else m_args << "-profile" << profile;
else m_args << "-profile" << profile;
m_args << "-consumer" << rendermodule + ":" + m_dest << "progress=1" << args; m_args << "-consumer" << rendermodule + ":" + m_dest << "progress=1" << args;
connect(m_renderProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotIsOver(int, QProcess::ExitStatus))); connect(m_renderProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotIsOver(int, QProcess::ExitStatus)));
m_renderProcess->setReadChannel(QProcess::StandardError); m_renderProcess->setReadChannel(QProcess::StandardError);
...@@ -102,13 +101,18 @@ void RenderJob::receivedStderr() { ...@@ -102,13 +101,18 @@ void RenderJob::receivedStderr() {
m_logstream << "ReceivedStderr from inigo: " << result << endl; m_logstream << "ReceivedStderr from inigo: " << result << endl;
result = result.section(" ", -1); result = result.section(" ", -1);
int pro = result.toInt(); int pro = result.toInt();
if ( m_jobUiserver && pro > m_progress) { if (m_kdenliveinterface && pro > m_progress) {
m_dbusargs[1] = pro;
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
}
if (m_jobUiserver && pro > m_progress) {
m_progress = pro; m_progress = pro;
m_jobUiserver->call("setPercent", (uint) m_progress); m_jobUiserver->call("setPercent", (uint) m_progress);
int seconds = m_startTime.secsTo(QTime::currentTime()); int seconds = m_startTime.secsTo(QTime::currentTime());
seconds = seconds * (100 - m_progress) / m_progress; seconds = seconds * (100 - m_progress) / m_progress;
m_jobUiserver->call("setDescriptionField", (uint) 1, tr("Remaining time"), QTime(0, 0, seconds).toString("hh:mm:ss")); m_jobUiserver->call("setDescriptionField", (uint) 1, tr("Remaining time"), QTime(0, 0, seconds).toString("hh:mm:ss"));
} }
} }
void RenderJob::start() { void RenderJob::start() {
...@@ -146,6 +150,31 @@ void RenderJob::start() { ...@@ -146,6 +150,31 @@ void RenderJob::start() {
} }
} }
} }
QString kdenliveId;
QDBusConnection connection = QDBusConnection::sessionBus();
QDBusConnectionInterface *ibus = connection.interface();
const QStringList services = ibus->registeredServiceNames();
foreach(const QString &service, services) {
if (!service.startsWith("org.kde.kdenlive"))
continue;
kdenliveId = service;
break;
}
QDBusConnection bus = QDBusConnection::sessionBus();
m_kdenliveinterface = new QDBusInterface(kdenliveId,
"/MainWindow",
"org.kdenlive.MainWindow",
bus,
this);
if (m_kdenliveinterface) {
m_dbusargs.append(m_dest);
m_dbusargs.append((int) 0);
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
}
// Because of the logging, we connect to stderr in all cases. // Because of the logging, we connect to stderr in all cases.
connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr())); connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr()));
m_renderProcess->start(m_prog, m_args); m_renderProcess->start(m_prog, m_args);
...@@ -162,12 +191,20 @@ void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { ...@@ -162,12 +191,20 @@ void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) {
} }
if (status == QProcess::CrashExit) { if (status == QProcess::CrashExit) {
// rendering crashed // rendering crashed
if (m_kdenliveinterface) {
m_dbusargs[1] = -2;
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
}
QStringList args; QStringList args;
args << "--error" << tr("Rendering of %1 aborted, resulting video will probably be corrupted.").arg(m_dest); args << "--error" << tr("Rendering of %1 aborted, resulting video will probably be corrupted.").arg(m_dest);
m_logstream << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted." << endl; m_logstream << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted." << endl;
qDebug() << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted."; qDebug() << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted.";
QProcess::startDetached("kdialog", args); QProcess::startDetached("kdialog", args);
} else { } else {
if (m_kdenliveinterface) {
m_dbusargs[1] = -1;
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
}
QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
if (interface && interface->isServiceRegistered("org.kde.knotify")) { if (interface && interface->isServiceRegistered("org.kde.knotify")) {
QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify", QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify",
......
...@@ -51,6 +51,8 @@ private: ...@@ -51,6 +51,8 @@ private:
QStringList m_args; QStringList m_args;
bool m_erase; bool m_erase;
QDBusInterface *m_jobUiserver; QDBusInterface *m_jobUiserver;
QDBusInterface *m_kdenliveinterface;
QList<QVariant> m_dbusargs;
QTime m_startTime; QTime m_startTime;
/** \brief Used to create a temporary file for logging */ /** \brief Used to create a temporary file for logging */
QTemporaryFile m_logfile; QTemporaryFile m_logfile;
......
...@@ -23,7 +23,6 @@ ${NEPOMUK_LIBRARIES} ...@@ -23,7 +23,6 @@ ${NEPOMUK_LIBRARIES}
) )
kde4_add_ui_files(kdenlive_UI kde4_add_ui_files(kdenlive_UI
widgets/timeline_ui.ui widgets/timeline_ui.ui
widgets/monitor_ui.ui widgets/monitor_ui.ui
...@@ -154,9 +153,10 @@ else(NO_JOGSHUTTLE) ...@@ -154,9 +153,10 @@ else(NO_JOGSHUTTLE)
endif(NO_JOGSHUTTLE) endif(NO_JOGSHUTTLE)
kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc ) kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc )
QT4_ADD_DBUS_ADAPTOR(kdenlive_SRCS org.kdenlive.MainWindow.xml mainwindow.h MainWindow)
kde4_add_executable(kdenlive ${kdenlive_SRCS} ${kdenlive_UI}) kde4_add_executable(kdenlive ${kdenlive_SRCS} ${kdenlive_UI})
target_link_libraries(kdenlive target_link_libraries(kdenlive
${KDE4_KDEUI_LIBS} ${KDE4_KDEUI_LIBS}
${KDE4_KIO_LIBS} ${KDE4_KIO_LIBS}
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "mainwindowadaptor.h"
#include "kdenlivesettings.h" #include "kdenlivesettings.h"
#include "kdenlivesettingsdialog.h" #include "kdenlivesettingsdialog.h"
#include "initeffects.h" #include "initeffects.h"
...@@ -113,6 +114,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent ...@@ -113,6 +114,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
m_jogProcess(NULL), m_jogProcess(NULL),
#endif /* NO_JOGSHUTTLE */ #endif /* NO_JOGSHUTTLE */
m_findActivated(false), m_initialized(false) { m_findActivated(false), m_initialized(false) {
// Create DBus interface
new MainWindowAdaptor(this);
QDBusConnection dbus = QDBusConnection::sessionBus();
dbus.registerObject("/MainWindow", this);
setlocale(LC_NUMERIC, "POSIX"); setlocale(LC_NUMERIC, "POSIX");
setFont(KGlobalSettings::toolBarFont()); setFont(KGlobalSettings::toolBarFont());
parseProfiles(MltPath); parseProfiles(MltPath);
...@@ -1459,6 +1466,10 @@ void MainWindow::slotDoRender(const QString &dest, const QString &render, const ...@@ -1459,6 +1466,10 @@ void MainWindow::slotDoRender(const QString &dest, const QString &render, const
} }
} }
void MainWindow::setRenderingProgress(const QString &url, int progress) {
if (m_renderWidget) m_renderWidget->setRenderJob(url, progress);
}
void MainWindow::slotUpdateMousePosition(int pos) { void MainWindow::slotUpdateMousePosition(int pos) {
if (m_activeDocument) if (m_activeDocument)
switch (m_timecodeFormat->currentIndex()) { switch (m_timecodeFormat->currentIndex()) {
......
...@@ -62,6 +62,7 @@ class Transition; ...@@ -62,6 +62,7 @@ class Transition;
class MainWindow : public KXmlGuiWindow { class MainWindow : public KXmlGuiWindow {
Q_OBJECT Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.kdenlive.MainWindow")
public: public:
/** Constructor /** Constructor
...@@ -195,6 +196,7 @@ private: ...@@ -195,6 +196,7 @@ private:
public slots: public slots:
void openFile(const KUrl &url); void openFile(const KUrl &url);
void slotGotProgressInfo(const QString &message, int progress); void slotGotProgressInfo(const QString &message, int progress);
Q_SCRIPTABLE void setRenderingProgress(const QString &url, int progress);
private slots: private slots:
void newFile(bool showProjectSettings = true); void newFile(bool showProjectSettings = true);
......
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.kdenlive.MainWindow">
<method name="setRenderingProgress">
<arg name="url" type="s" direction="in"/>
<arg name="progress" type="i" direction="in"/>
</method>
</interface>
</node>
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
#include <QDomDocument> #include <QDomDocument>
#include <QItemDelegate>
#include <QTreeWidgetItem>
#include <QHeaderView>
#include <KStandardDirs> #include <KStandardDirs>
#include <KDebug> #include <KDebug>
...@@ -65,6 +68,8 @@ RenderWidget::RenderWidget(QWidget * parent): QDialog(parent) { ...@@ -65,6 +68,8 @@ RenderWidget::RenderWidget(QWidget * parent): QDialog(parent) {
connect(m_view.buttonEdit, SIGNAL(clicked()), this, SLOT(slotEditProfile())); connect(m_view.buttonEdit, SIGNAL(clicked()), this, SLOT(slotEditProfile()));
connect(m_view.buttonDelete, SIGNAL(clicked()), this, SLOT(slotDeleteProfile())); connect(m_view.buttonDelete, SIGNAL(clicked()), this, SLOT(slotDeleteProfile()));
connect(m_view.buttonStart, SIGNAL(clicked()), this, SLOT(slotExport())); connect(m_view.buttonStart, SIGNAL(clicked()), this, SLOT(slotExport()));
connect(m_view.buttonClose, SIGNAL(clicked()), this, SLOT(hide()));
connect(m_view.buttonClose2, SIGNAL(clicked()), this, SLOT(hide()));
connect(m_view.out_file, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateButtons())); connect(m_view.out_file, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateButtons()));
connect(m_view.format_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshView())); connect(m_view.format_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshView()));
connect(m_view.size_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshParams())); connect(m_view.size_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshParams()));
...@@ -86,6 +91,18 @@ RenderWidget::RenderWidget(QWidget * parent): QDialog(parent) { ...@@ -86,6 +91,18 @@ RenderWidget::RenderWidget(QWidget * parent): QDialog(parent) {
m_view.splitter->setStretchFactor(0, 2); m_view.splitter->setStretchFactor(0, 2);
m_view.out_file->setMode(KFile::File); m_view.out_file->setMode(KFile::File);
m_view.running_jobs->setItemDelegate(new RenderViewDelegate(this));
QHeaderView *header = m_view.running_jobs->header();
QFontMetrics fm = fontMetrics();
//header->resizeSection(0, fm.width("typical-name-for-a-torrent.torrent"));
header->setResizeMode(0, QHeaderView::Interactive);
header->resizeSection(0, fm.width("typical-name-for-a-file.torrent"));
header->setResizeMode(1, QHeaderView::Fixed);
header->resizeSection(0, width() * 2 / 3);
header->setResizeMode(1, QHeaderView::Interactive);
//header->setResizeMode(1, QHeaderView::Fixed);
focusFirstVisibleItem(); focusFirstVisibleItem();
} }
...@@ -616,8 +633,31 @@ void RenderWidget::parseFile(QString exportFile, bool editable) { ...@@ -616,8 +633,31 @@ void RenderWidget::parseFile(QString exportFile, bool editable) {
} }
} }
void RenderWidget::setRenderJob(const QString &dest, int progress) {
QList<QTreeWidgetItem *> existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly);
if (!existing.isEmpty()) {
if (progress == -1) {
// Job finished successfully
existing.at(0)->setIcon(0, KIcon("dialog-ok"));
existing.at(0)->setData(1, Qt::UserRole, 100);
} else if (progress == -2) {
// Rendering crashed
existing.at(0)->setIcon(0, KIcon("dialog-close"));
existing.at(0)->setData(1, Qt::UserRole, 0);
} else existing.at(0)->setData(1, Qt::UserRole, progress);
return;
}
QTreeWidgetItem *item = new QTreeWidgetItem(m_view.running_jobs, QStringList() << dest << QString());
if (progress == -1) {
// Job finished successfully
item->setIcon(0, KIcon("dialog-ok"));
item->setData(1, Qt::UserRole, 100);
} else if (progress == -2) {
// Rendering crashed
item->setIcon(0, KIcon("dialog-close"));
item->setData(1, Qt::UserRole, 0);
} else item->setData(1, Qt::UserRole, progress);
}
#include "renderwidget.moc" #include "renderwidget.moc"
...@@ -27,6 +27,43 @@ ...@@ -27,6 +27,43 @@
#include "definitions.h" #include "definitions.h"
#include "ui_renderwidget_ui.h" #include "ui_renderwidget_ui.h"
// RenderViewDelegate is used to draw the progress bars.
class RenderViewDelegate : public QItemDelegate {
Q_OBJECT
public:
RenderViewDelegate(QWidget *parent) : QItemDelegate(parent) {}
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const {
if (index.column() != 1) {
QItemDelegate::paint(painter, option, index);
return;
}
// Set up a QStyleOptionProgressBar to precisely mimic the
// environment of a progress bar.
QStyleOptionProgressBar progressBarOption;
progressBarOption.state = QStyle::State_Enabled;
progressBarOption.direction = QApplication::layoutDirection();
progressBarOption.rect = option.rect;
progressBarOption.fontMetrics = QApplication::fontMetrics();
progressBarOption.minimum = 0;
progressBarOption.maximum = 100;
progressBarOption.textAlignment = Qt::AlignCenter;
progressBarOption.textVisible = true;
// Set the progress and text values of the style option.
int progress = index.data(Qt::UserRole).toInt();
progressBarOption.progress = progress < 0 ? 0 : progress;
progressBarOption.text = QString().sprintf("%d%%", progressBarOption.progress);
// Draw the progress bar onto the view.
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
}
};
class RenderWidget : public QDialog { class RenderWidget : public QDialog {
Q_OBJECT Q_OBJECT
...@@ -35,6 +72,7 @@ public: ...@@ -35,6 +72,7 @@ public:
void setGuides(QDomElement guidesxml, double duration); void setGuides(QDomElement guidesxml, double duration);
void focusFirstVisibleItem(); void focusFirstVisibleItem();
void setProfile(MltVideoProfile profile); void setProfile(MltVideoProfile profile);
void setRenderJob(const QString &dest, int progress = 0);
private slots: private slots:
void slotUpdateButtons(); void slotUpdateButtons();
...@@ -56,6 +94,7 @@ private: ...@@ -56,6 +94,7 @@ private:
void parseProfiles(QString group = QString(), QString profile = QString()); void parseProfiles(QString group = QString(), QString profile = QString());
void parseFile(QString exportFile, bool editable); void parseFile(QString exportFile, bool editable);
void updateButtons(); void updateButtons();
signals: signals:
void doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double, bool); void doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double, bool);
}; };
......
...@@ -5,13 +5,26 @@ ...@@ -5,13 +5,26 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>374</width> <width>444</width>
<height>379</height> <height>407</height>
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle" >
<string>Rendering</string> <string>Dialog</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_5" >
<property name="margin" >
<number>0</number>
</property>
<item row="0" column="0" >
<widget class="QTabWidget" name="tabWidget" >
<property name="currentIndex" >
<number>0</number>
</property>
<widget class="QWidget" name="tab" >
<attribute name="title" >
<string>Render Project</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3" > <layout class="QGridLayout" name="gridLayout_3" >
<item row="0" column="0" > <item row="0" column="0" >
<widget class="QLabel" name="label" > <widget class="QLabel" name="label" >
...@@ -20,10 +33,10 @@ ...@@ -20,10 +33,10 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1" colspan="2" > <item row="0" column="1" colspan="3" >
<widget class="KUrlRequester" name="out_file" /> <widget class="KUrlRequester" name="out_file" />
</item> </item>
<item row="1" column="0" colspan="3" > <item row="1" column="0" colspan="4" >
<widget class="QGroupBox" name="groupBox" > <widget class="QGroupBox" name="groupBox" >
<property name="title" > <property name="title" >
<string/> <string/>
...@@ -147,7 +160,7 @@ ...@@ -147,7 +160,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="2" > <item row="2" column="0" colspan="4" >
<layout class="QHBoxLayout" name="horizontalLayout" > <layout class="QHBoxLayout" name="horizontalLayout" >
<item> <item>
<widget class="QRadioButton" name="render_full" > <widget class="QRadioButton" name="render_full" >
...@@ -175,7 +188,7 @@ ...@@ -175,7 +188,7 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="3" column="0" colspan="3" > <item row="3" column="0" colspan="4" >
<widget class="QGroupBox" name="guides_box" > <widget class="QGroupBox" name="guides_box" >
<property name="title" > <property name="title" >
<string/> <string/>
...@@ -218,7 +231,7 @@ ...@@ -218,7 +231,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="4" column="0" colspan="3" > <item row="4" column="0" colspan="4" >
<layout class="QHBoxLayout" name="horizontalLayout_3" > <layout class="QHBoxLayout" name="horizontalLayout_3" >
<item> <item>
<widget class="QCheckBox" name="play_after" > <widget class="QCheckBox" name="play_after" >
...@@ -236,51 +249,99 @@ ...@@ -236,51 +249,99 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="5" column="0" > <item row="5" column="0" colspan="2" >
<spacer name="verticalSpacer" > <widget class="KPushButton" name="buttonStart" >
<property name="text" >
<string>Start Rendering</string>
</property>
</widget>
</item>
<item row="5" column="2" >
<spacer name="horizontalSpacer" >
<property name="orientation" > <property name="orientation" >
<enum>Qt::Vertical</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0" > <property name="sizeHint" stdset="0" >
<size> <size>
<width>20</width> <width>221</width>
<height>0</height> <height>24</height>
</size> </size>
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="6" column="0" > <item row="5" column="3" >
<widget class="KPushButton" name="buttonStart" > <widget class="KPushButton" name="buttonClose" >
<property name="text" > <property name="text" >
<string>Start Rendering</string> <string>Close</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1" > </layout>
<spacer name="horizontalSpacer" > </widget>
<widget class="QWidget" name="tab_2" >
<attribute name="title" >
<string>Current jobs</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4" >
<item row="0" column="0" colspan="3" >
<widget class="QTreeWidget" name="running_jobs" >
<property name="rootIsDecorated" >
<bool>false</bool>
</property>
<property name="allColumnsShowFocus" >
<bool>true</bool>
</property>
<property name="headerHidden" >
<bool>false</bool>
</property>
<property name="columnCount" >
<number>2</number>
</property>
<column>
<property name="text" >
<string>File</string>
</property>
</column>
<column>
<property name="text" >
<string>Progress</string>
</property>
</column>
</widget>
</item>
<item row="1" column="0" >
<widget class="QPushButton" name="abort_job" >
<property name="text" >
<string>Abort Job</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<spacer name="horizontalSpacer_3" >
<property name="orientation" > <property name="orientation" >
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0" > <property name="sizeHint" stdset="0" >
<size> <size>
<width>153</width> <width>40</width>
<height>27</height> <height>20</height>
</size> </size>
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="6" column="2" > <item row="1" column="2" >
<widget class="QDialogButtonBox" name="buttonBox" > <widget class="KPushButton" name="buttonClose2" >
<property name="orientation" > <property name="text" >
<enum>Qt::Horizontal</enum> <string>Close</string>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Close</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</widget>
</item>
</layout>
</widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>
<class>KComboBox</class> <class>KComboBox</class>
...@@ -309,38 +370,5 @@ ...@@ -309,38 +370,5 @@
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections> <connections/>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>RenderWidget_UI</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel" >
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>RenderWidget_UI</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel" >
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui> </ui>