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_dest = dest;
m_player = player;
m_args << preargs;
//qDebug()<<"PRE ARGS: "<<preargs;
if (scenelist.startsWith("consumer:")) {
- // Use MLT's producer_consumer, needs a different syntax for profile:
- m_args << "profile=" + profile;
- }
- else m_args << "-profile" << profile;
+ // Use MLT's producer_consumer, needs a different syntax for profile:
+ m_args << "profile=" + profile;
+ } else m_args << "-profile" << profile;
m_args << "-consumer" << rendermodule + ":" + m_dest << "progress=1" << args;
connect(m_renderProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotIsOver(int, QProcess::ExitStatus)));
m_renderProcess->setReadChannel(QProcess::StandardError);
m_logstream << "ReceivedStderr from inigo: " << result << endl;
result = result.section(" ", -1);
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_jobUiserver->call("setPercent", (uint) m_progress);
int seconds = m_startTime.secsTo(QTime::currentTime());
seconds = seconds * (100 - m_progress) / m_progress;
m_jobUiserver->call("setDescriptionField", (uint) 1, tr("Remaining time"), QTime(0, 0, seconds).toString("hh:mm:ss"));
}
+
}
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.
connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr()));
m_renderProcess->start(m_prog, m_args);
}
if (status == QProcess::CrashExit) {
// rendering crashed
+ if (m_kdenliveinterface) {
+ m_dbusargs[1] = -2;
+ m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
+ }
QStringList args;
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;
qDebug() << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted.";
QProcess::startDetached("kdialog", args);
} else {
+ if (m_kdenliveinterface) {
+ m_dbusargs[1] = -1;
+ m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
+ }
QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
if (interface && interface->isServiceRegistered("org.kde.knotify")) {
QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify",
#include <QDomDocument>
+#include <QItemDelegate>
+#include <QTreeWidgetItem>
+#include <QHeaderView>
#include <KStandardDirs>
#include <KDebug>
connect(m_view.buttonEdit, SIGNAL(clicked()), this, SLOT(slotEditProfile()));
connect(m_view.buttonDelete, SIGNAL(clicked()), this, SLOT(slotDeleteProfile()));
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.format_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshView()));
connect(m_view.size_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshParams()));
m_view.splitter->setStretchFactor(0, 2);
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();
}
}
}
+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"
-
-
<rect>
<x>0</x>
<y>0</y>
- <width>374</width>
- <height>379</height>
+ <width>444</width>
+ <height>407</height>
</rect>
</property>
<property name="windowTitle" >
- <string>Rendering</string>
+ <string>Dialog</string>
</property>
- <layout class="QGridLayout" name="gridLayout_3" >
+ <layout class="QGridLayout" name="gridLayout_5" >
+ <property name="margin" >
+ <number>0</number>
+ </property>
<item row="0" column="0" >
- <widget class="QLabel" name="label" >
- <property name="text" >
- <string>Output file</string>
+ <widget class="QTabWidget" name="tabWidget" >
+ <property name="currentIndex" >
+ <number>0</number>
</property>
- </widget>
- </item>
- <item row="0" column="1" colspan="2" >
- <widget class="KUrlRequester" name="out_file" />
- </item>
- <item row="1" column="0" colspan="3" >
- <widget class="QGroupBox" name="groupBox" >
- <property name="title" >
- <string/>
- </property>
- <layout class="QGridLayout" name="gridLayout" >
- <item row="0" column="0" >
- <widget class="QLabel" name="label_3" >
- <property name="text" >
- <string>Format</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1" >
- <spacer name="horizontalSpacer_2" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>165</width>
- <height>24</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="2" colspan="2" >
- <widget class="KComboBox" name="format_selection" >
- <item>
+ <widget class="QWidget" name="tab" >
+ <attribute name="title" >
+ <string>Render Project</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_3" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="label" >
<property name="text" >
- <string>PAL</string>
+ <string>Output file</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="3" >
+ <widget class="KUrlRequester" name="out_file" />
+ </item>
+ <item row="1" column="0" colspan="4" >
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string/>
</property>
- </item>
- <item>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="label_3" >
+ <property name="text" >
+ <string>Format</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <spacer name="horizontalSpacer_2" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>165</width>
+ <height>24</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="2" colspan="2" >
+ <widget class="KComboBox" name="format_selection" >
+ <item>
+ <property name="text" >
+ <string>PAL</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>NTSC</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="4" >
+ <widget class="QToolButton" name="buttonEdit" >
+ <property name="text" >
+ <string>E</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="5" >
+ <widget class="QToolButton" name="buttonInfo" >
+ <property name="text" >
+ <string>I</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="6" >
+ <widget class="QToolButton" name="buttonSave" >
+ <property name="text" >
+ <string>S</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="7" >
+ <widget class="QToolButton" name="buttonDelete" >
+ <property name="text" >
+ <string>D</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="8" >
+ <widget class="QSplitter" name="splitter_3" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <widget class="QSplitter" name="splitter" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <widget class="KListWidget" name="format_list" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Expanding" hsizetype="Preferred" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KListWidget" name="size_list" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </widget>
+ <widget class="KTextEdit" name="advanced_params" >
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="3" >
+ <widget class="QCheckBox" name="experimentalrender" >
+ <property name="text" >
+ <string>Show experimental formats</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="3" colspan="5" >
+ <widget class="QCheckBox" name="force_progressive" >
+ <property name="text" >
+ <string>Progressive</string>
+ </property>
+ <property name="tristate" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="4" >
+ <layout class="QHBoxLayout" name="horizontalLayout" >
+ <item>
+ <widget class="QRadioButton" name="render_full" >
+ <property name="text" >
+ <string>Full project</string>
+ </property>
+ <property name="checked" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="render_zone" >
+ <property name="text" >
+ <string>Selected zone</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="render_guide" >
+ <property name="text" >
+ <string>Guide zone</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="3" column="0" colspan="4" >
+ <widget class="QGroupBox" name="guides_box" >
+ <property name="title" >
+ <string/>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="label_4" >
+ <property name="text" >
+ <string>From</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="KComboBox" name="guide_start" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <widget class="QLabel" name="label_2" >
+ <property name="text" >
+ <string>to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3" >
+ <widget class="KComboBox" name="guide_end" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="4" column="0" colspan="4" >
+ <layout class="QHBoxLayout" name="horizontalLayout_3" >
+ <item>
+ <widget class="QCheckBox" name="play_after" >
+ <property name="text" >
+ <string>Play after render</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="tc_overlay" >
+ <property name="text" >
+ <string>Timecode overlay</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="5" column="0" colspan="2" >
+ <widget class="KPushButton" name="buttonStart" >
<property name="text" >
- <string>NTSC</string>
+ <string>Start Rendering</string>
</property>
- </item>
- </widget>
- </item>
- <item row="0" column="4" >
- <widget class="QToolButton" name="buttonEdit" >
- <property name="text" >
- <string>E</string>
- </property>
- </widget>
- </item>
- <item row="0" column="5" >
- <widget class="QToolButton" name="buttonInfo" >
- <property name="text" >
- <string>I</string>
- </property>
- </widget>
- </item>
- <item row="0" column="6" >
- <widget class="QToolButton" name="buttonSave" >
- <property name="text" >
- <string>S</string>
- </property>
- </widget>
- </item>
- <item row="0" column="7" >
- <widget class="QToolButton" name="buttonDelete" >
- <property name="text" >
- <string>D</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0" colspan="8" >
- <widget class="QSplitter" name="splitter_3" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <widget class="QSplitter" name="splitter" >
+ </widget>
+ </item>
+ <item row="5" column="2" >
+ <spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
- <widget class="KListWidget" name="format_list" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Expanding" hsizetype="Preferred" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- <widget class="KListWidget" name="size_list" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>221</width>
+ <height>24</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="5" column="3" >
+ <widget class="KPushButton" name="buttonClose" >
+ <property name="text" >
+ <string>Close</string>
+ </property>
</widget>
- <widget class="KTextEdit" name="advanced_params" >
- <property name="readOnly" >
+ </item>
+ </layout>
+ </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="acceptRichText" >
+ <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>
- </widget>
- </item>
- <item row="2" column="0" colspan="3" >
- <widget class="QCheckBox" name="experimentalrender" >
- <property name="text" >
- <string>Show experimental formats</string>
- </property>
- </widget>
- </item>
- <item row="2" column="3" colspan="5" >
- <widget class="QCheckBox" name="force_progressive" >
- <property name="text" >
- <string>Progressive</string>
- </property>
- <property name="tristate" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="0" colspan="2" >
- <layout class="QHBoxLayout" name="horizontalLayout" >
- <item>
- <widget class="QRadioButton" name="render_full" >
- <property name="text" >
- <string>Full project</string>
- </property>
- <property name="checked" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="render_zone" >
- <property name="text" >
- <string>Selected zone</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="render_guide" >
- <property name="text" >
- <string>Guide zone</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="3" column="0" colspan="3" >
- <widget class="QGroupBox" name="guides_box" >
- <property name="title" >
- <string/>
- </property>
- <layout class="QGridLayout" name="gridLayout_2" >
- <item row="0" column="0" >
- <widget class="QLabel" name="label_4" >
- <property name="text" >
- <string>From</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1" >
- <widget class="KComboBox" name="guide_start" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="0" column="2" >
- <widget class="QLabel" name="label_2" >
- <property name="text" >
- <string>to</string>
- </property>
- </widget>
- </item>
- <item row="0" column="3" >
- <widget class="KComboBox" name="guide_end" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="4" column="0" colspan="3" >
- <layout class="QHBoxLayout" name="horizontalLayout_3" >
- <item>
- <widget class="QCheckBox" name="play_after" >
- <property name="text" >
- <string>Play after render</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="tc_overlay" >
- <property name="text" >
- <string>Timecode overlay</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="5" column="0" >
- <spacer name="verticalSpacer" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>20</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="6" column="0" >
- <widget class="KPushButton" name="buttonStart" >
- <property name="text" >
- <string>Start Rendering</string>
- </property>
- </widget>
- </item>
- <item row="6" column="1" >
- <spacer name="horizontalSpacer" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>153</width>
- <height>27</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="6" column="2" >
- <widget class="QDialogButtonBox" name="buttonBox" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons" >
- <set>QDialogButtonBox::Close</set>
- </property>
+ </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" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="2" >
+ <widget class="KPushButton" name="buttonClose2" >
+ <property name="text" >
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
</layout>
</customwidget>
</customwidgets>
<resources/>
- <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>
+ <connections/>
</ui>