]> git.sur5r.net Git - bacula/bacula/commitdiff
Get bat select dialog working
authorKern Sibbald <kern@sibbald.com>
Fri, 9 Mar 2007 10:36:41 +0000 (10:36 +0000)
committerKern Sibbald <kern@sibbald.com>
Fri, 9 Mar 2007 10:36:41 +0000 (10:36 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4335 91ce42f0-d328-0410-95d8-f526ca767f89

13 files changed:
bacula/src/dird/ua_select.c
bacula/src/qt-console/Makefile
bacula/src/qt-console/bat.pro
bacula/src/qt-console/console/console.cpp
bacula/src/qt-console/console/console.h
bacula/src/qt-console/label/label.ui
bacula/src/qt-console/main.ui
bacula/src/qt-console/restore/prerestore.ui
bacula/src/qt-console/restore/restore.ui
bacula/src/qt-console/run/run.ui
bacula/src/qt-console/select/select.cpp [new file with mode: 0644]
bacula/src/qt-console/select/select.h [new file with mode: 0644]
bacula/src/qt-console/select/select.ui [new file with mode: 0644]

index ed89f32b0f32ceea9a391c53bead225aca24ab91..ae5f9b989d3302f403ed5ee26dff4fb4300d7261 100644 (file)
@@ -758,7 +758,11 @@ int do_prompt(UAContext *ua, const char *automsg, const char *msg,
    if (ua->api) user->signal(BNET_START_SELECT);
    bsendmsg(ua, ua->prompt[0]);
    for (i=1; i < ua->num_prompts; i++) {
-      bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]);
+      if (ua->api) {
+         bsendmsg(ua, "%s", ua->prompt[i]);
+      } else {
+         bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]);
+      }
    }
    if (ua->api) user->signal(BNET_END_SELECT);
 
index 4b9f358fe61db6063ba0c252a51e8fa3cd1392a5..6598099a4f5a0b7c7d3b4fab638c8eb3e162a589 100644 (file)
@@ -1,6 +1,6 @@
 #############################################################################
 # Makefile for building: bat
-# Generated by qmake (2.01a) (Qt 4.2.1) on: Mon Mar 5 17:45:21 2007
+# Generated by qmake (2.01a) (Qt 4.2.1) on: Fri Mar 9 09:22:17 2007
 # Project:  bat.pro
 # Template: app
 # Command: /usr/bin/qmake -unix -o Makefile bat.pro
@@ -17,7 +17,7 @@ CFLAGS        = -pipe -g -D_REENTRANT -Wall -W  $(DEFINES)
 CXXFLAGS      = -pipe -g -D_REENTRANT -Wall -W  $(DEFINES)
 LEXFLAGS      = 
 YACCFLAGS     = -d
-INCPATH       = -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -Iconsole -Irestore -I.. -Imoc -I.
+INCPATH       = -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -Iconsole -Irestore -Iselect -I.. -Imoc -I.
 LINK          = g++
 LFLAGS        = 
 LIBS          = $(SUBLIBS)  -L/usr/lib -L../lib -lbac -lssl -lcrypto -lQtGui -L/usr/lib -L/usr/X11R6/lib -lpng -lSM -lICE -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -ldl -lpthread
@@ -55,11 +55,13 @@ SOURCES       = main.cpp \
                restore/restore.cpp \
                restore/brestore.cpp \
                label/label.cpp \
-               run/run.cpp moc/moc_mainwin.cpp \
+               run/run.cpp \
+               select/select.cpp moc/moc_mainwin.cpp \
                moc/moc_console.cpp \
                moc/moc_restore.cpp \
                moc/moc_label.cpp \
                moc/moc_run.cpp \
+               moc/moc_select.cpp \
                qrc_main.cpp
 OBJECTS       = obj/main.o \
                obj/bat_conf.o \
@@ -72,11 +74,13 @@ OBJECTS       = obj/main.o \
                obj/brestore.o \
                obj/label.o \
                obj/run.o \
+               obj/select.o \
                obj/moc_mainwin.o \
                obj/moc_console.o \
                obj/moc_restore.o \
                obj/moc_label.o \
                obj/moc_run.o \
+               obj/moc_select.o \
                obj/qrc_main.o
 DIST          = /usr/share/qt4/mkspecs/common/unix.conf \
                /usr/share/qt4/mkspecs/common/g++.conf \
@@ -123,7 +127,7 @@ first: all
 
 all: Makefile $(TARGET)
 
-$(TARGET): ui_main.h ui_label.h ui_console.h ui_restore.h ui_prerestore.h ui_brestore.h ui_run.h $(OBJECTS)  
+$(TARGET): ui_main.h ui_label.h ui_console.h ui_restore.h ui_prerestore.h ui_brestore.h ui_run.h ui_select.h $(OBJECTS)  
        $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
 
 Makefile: bat.pro  /usr/share/qt4/mkspecs/default/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
@@ -168,7 +172,7 @@ qmake:  FORCE
 
 dist: 
        @$(CHK_DIR_EXISTS) obj/bat1.0.0 || $(MKDIR) obj/bat1.0.0 
-       $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/bat1.0.0/ && $(COPY_FILE) --parents mainwin.h bat.h bat_conf.h qstd.h console/console.h restore/restore.h label/label.h run/run.h obj/bat1.0.0/ && $(COPY_FILE) --parents main.qrc obj/bat1.0.0/ && $(COPY_FILE) --parents main.cpp bat_conf.cpp mainwin.cpp qstd.cpp console/authenticate.cpp console/console.cpp restore/prerestore.cpp restore/restore.cpp restore/brestore.cpp label/label.cpp run/run.cpp obj/bat1.0.0/ && $(COPY_FILE) --parents main.ui label/label.ui console/console.ui restore/restore.ui restore/prerestore.ui restore/brestore.ui run/run.ui obj/bat1.0.0/ && (cd `dirname obj/bat1.0.0` && $(TAR) bat1.0.0.tar bat1.0.0 && $(COMPRESS) bat1.0.0.tar) && $(MOVE) `dirname obj/bat1.0.0`/bat1.0.0.tar.gz . && $(DEL_FILE) -r obj/bat1.0.0
+       $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/bat1.0.0/ && $(COPY_FILE) --parents mainwin.h bat.h bat_conf.h qstd.h console/console.h restore/restore.h label/label.h run/run.h select/select.h obj/bat1.0.0/ && $(COPY_FILE) --parents main.qrc obj/bat1.0.0/ && $(COPY_FILE) --parents main.cpp bat_conf.cpp mainwin.cpp qstd.cpp console/authenticate.cpp console/console.cpp restore/prerestore.cpp restore/restore.cpp restore/brestore.cpp label/label.cpp run/run.cpp select/select.cpp obj/bat1.0.0/ && $(COPY_FILE) --parents main.ui label/label.ui console/console.ui restore/restore.ui restore/prerestore.ui restore/brestore.ui run/run.ui select/select.ui obj/bat1.0.0/ && (cd `dirname obj/bat1.0.0` && $(TAR) bat1.0.0.tar bat1.0.0 && $(COMPRESS) bat1.0.0.tar) && $(MOVE) `dirname obj/bat1.0.0`/bat1.0.0.tar.gz . && $(DEL_FILE) -r obj/bat1.0.0
 
 
 yaccclean:
@@ -192,9 +196,9 @@ mocclean: compiler_moc_header_clean compiler_moc_source_clean
 
 mocables: compiler_moc_header_make_all compiler_moc_source_make_all
 
-compiler_moc_header_make_all: moc/moc_mainwin.cpp moc/moc_console.cpp moc/moc_restore.cpp moc/moc_label.cpp moc/moc_run.cpp
+compiler_moc_header_make_all: moc/moc_mainwin.cpp moc/moc_console.cpp moc/moc_restore.cpp moc/moc_label.cpp moc/moc_run.cpp moc/moc_select.cpp
 compiler_moc_header_clean:
-       -$(DEL_FILE) moc/moc_mainwin.cpp moc/moc_console.cpp moc/moc_restore.cpp moc/moc_label.cpp moc/moc_run.cpp
+       -$(DEL_FILE) moc/moc_mainwin.cpp moc/moc_console.cpp moc/moc_restore.cpp moc/moc_label.cpp moc/moc_run.cpp moc/moc_select.cpp
 moc/moc_mainwin.cpp: ui_main.h \
                label/label.h \
                ui_label.h \
@@ -230,6 +234,11 @@ moc/moc_run.cpp: ui_run.h \
                /usr/bin/moc
        /usr/bin/moc $(DEFINES) $(INCPATH) run/run.h -o moc/moc_run.cpp
 
+moc/moc_select.cpp: ui_select.h \
+               select/select.h \
+               /usr/bin/moc
+       /usr/bin/moc $(DEFINES) $(INCPATH) select/select.h -o moc/moc_select.cpp
+
 compiler_rcc_make_all: qrc_main.cpp
 compiler_rcc_clean:
        -$(DEL_FILE) qrc_main.cpp
@@ -256,9 +265,9 @@ compiler_image_collection_clean:
        -$(DEL_FILE) qmake_image_collection.cpp
 compiler_moc_source_make_all:
 compiler_moc_source_clean:
-compiler_uic_make_all: ui_main.h ui_label.h ui_console.h ui_restore.h ui_prerestore.h ui_brestore.h ui_run.h
+compiler_uic_make_all: ui_main.h ui_label.h ui_console.h ui_restore.h ui_prerestore.h ui_brestore.h ui_run.h ui_select.h
 compiler_uic_clean:
-       -$(DEL_FILE) ui_main.h ui_label.h ui_console.h ui_restore.h ui_prerestore.h ui_brestore.h ui_run.h
+       -$(DEL_FILE) ui_main.h ui_label.h ui_console.h ui_restore.h ui_prerestore.h ui_brestore.h ui_run.h ui_select.h
 ui_main.h: main.ui
        /usr/bin/uic main.ui -o ui_main.h
 
@@ -280,6 +289,9 @@ ui_brestore.h: restore/brestore.ui
 ui_run.h: run/run.ui
        /usr/bin/uic run/run.ui -o ui_run.h
 
+ui_select.h: select/select.ui
+       /usr/bin/uic select/select.ui -o ui_select.h
+
 compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_image_collection_clean compiler_moc_source_clean compiler_uic_clean 
 
 ####### Compile
@@ -427,6 +439,23 @@ obj/run.o: run/run.cpp bat.h \
                qstd.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/run.o run/run.cpp
 
+obj/select.o: select/select.cpp bat.h \
+               mainwin.h \
+               ui_main.h \
+               label/label.h \
+               ui_label.h \
+               run/run.h \
+               ui_run.h \
+               restore/restore.h \
+               ui_brestore.h \
+               ui_restore.h \
+               ui_prerestore.h \
+               bat_conf.h \
+               qstd.h \
+               select/select.h \
+               ui_select.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/select.o select/select.cpp
+
 obj/moc_mainwin.o: moc/moc_mainwin.cpp 
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_mainwin.o moc/moc_mainwin.cpp
 
@@ -442,6 +471,9 @@ obj/moc_label.o: moc/moc_label.cpp
 obj/moc_run.o: moc/moc_run.cpp 
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_run.o moc/moc_run.cpp
 
+obj/moc_select.o: moc/moc_select.cpp 
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_select.o moc/moc_select.cpp
+
 obj/qrc_main.o: qrc_main.cpp 
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/qrc_main.o qrc_main.cpp
 
index 40d4eb1916474df0c034d5f0f6c6d9e1c16be040..f45400a2047ca9480b87cd82251345e7d5f526c1 100644 (file)
@@ -6,7 +6,7 @@ CONFIG += qt debug
 TEMPLATE = app
 TARGET = bat
 DEPENDPATH += .
-INCLUDEPATH += . ./console ./restore
+INCLUDEPATH += . ./console ./restore ./select
 INCLUDEPATH += ..
 LIBS        += -L../lib
 LIBS        += -lbac
@@ -21,6 +21,7 @@ FORMS += label/label.ui
 FORMS += console/console.ui
 FORMS += restore/restore.ui restore/prerestore.ui restore/brestore.ui
 FORMS += run/run.ui
+FORMS += select/select.ui
 
 
 HEADERS += mainwin.h bat.h bat_conf.h qstd.h
@@ -41,3 +42,7 @@ SOURCES += label/label.cpp
 # Run dialog
 HEADERS += run/run.h
 SOURCES += run/run.cpp
+
+# Select dialgo
+HEADERS += select/select.h
+SOURCES += select/select.cpp
index 37af5b8e66e00aab8850d2692cef5f91c0a1a063..1da5d1826d5ec4fadfa8b6806a1010b8eadafa42 100644 (file)
@@ -505,6 +505,9 @@ int Console::read()
             break;
          }
          continue;
+      case BNET_START_SELECT:
+         new selectDialog(this);    
+         break;
       }
       if (is_bnet_stop(m_sock)) {         /* error or term request */
          m_sock->close();
@@ -549,4 +552,3 @@ void Console::setDirRes(DIRRES *dir)
 { 
    m_dir = dir;
 }
-
index 1907f1c95bfe5116eb4e7f882cae371d729a6c15..29347ed0cfad184cf4278c2240e38dea958d593f 100644 (file)
@@ -36,6 +36,7 @@
 #include <QtGui>
 #include "ui_console.h"
 #include "restore.h"
+#include "select.h"
 
 #ifndef MAX_NAME_LENGTH
 #define MAX_NAME_LENGTH 128
index 99ed73599e3c837755f9ad5a8fdb8992a04f552c..c97c1391938e697209133708f2c4c0571d68597c 100644 (file)
@@ -1,6 +1,9 @@
 <ui version="4.0" >
  <class>labelForm</class>
  <widget class="QDialog" name="labelForm" >
+  <property name="windowModality" >
+   <enum>Qt::ApplicationModal</enum>
+  </property>
   <property name="geometry" >
    <rect>
     <x>0</x>
index 57cc9a6fcc42004c2d6e64733705288ec01022a4..1e04c09e50edf5efec63cc4152307b225fd472d8 100644 (file)
         <sizepolicy>
          <hsizetype>5</hsizetype>
          <vsizetype>7</vsizetype>
-         <horstretch>1</horstretch>
+         <horstretch>0</horstretch>
          <verstretch>1</verstretch>
         </sizepolicy>
        </property>
        <property name="minimumSize" >
         <size>
-         <width>200</width>
+         <width>50</width>
          <height>100</height>
         </size>
        </property>
        <property name="maximumSize" >
         <size>
-         <width>400</width>
+         <width>16777215</width>
          <height>16777215</height>
         </size>
        </property>
        <property name="focusPolicy" >
         <enum>Qt::StrongFocus</enum>
        </property>
+       <property name="floating" >
+        <bool>false</bool>
+       </property>
+       <property name="features" >
+        <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable|QDockWidget::NoDockWidgetFeatures</set>
+       </property>
+       <property name="allowedAreas" >
+        <set>Qt::NoDockWidgetArea</set>
+       </property>
        <property name="windowTitle" >
         <string>Page Selector</string>
        </property>
              <height>0</height>
             </size>
            </property>
+           <property name="maximumSize" >
+            <size>
+             <width>16777215</width>
+             <height>16777215</height>
+            </size>
+           </property>
            <property name="sizeIncrement" >
             <size>
              <width>0</width>
         <sizepolicy>
          <hsizetype>7</hsizetype>
          <vsizetype>7</vsizetype>
-         <horstretch>200</horstretch>
+         <horstretch>1</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
index 57f81b04de45d219364d08b6cc00d551ac30b71c..d1cf00abd9db0205c6c4e91d4dfed5378c466cef 100644 (file)
@@ -1,6 +1,9 @@
 <ui version="4.0" >
  <class>prerestoreForm</class>
  <widget class="QDialog" name="prerestoreForm" >
+  <property name="windowModality" >
+   <enum>Qt::ApplicationModal</enum>
+  </property>
   <property name="geometry" >
    <rect>
     <x>0</x>
index c9a542698b82565bbece3df903ec90a4d41149a0..6e89bc371d721547264a18fa68eee48be9b0b814 100644 (file)
@@ -1,6 +1,9 @@
 <ui version="4.0" >
  <class>restoreForm</class>
  <widget class="QDialog" name="restoreForm" >
+  <property name="windowModality" >
+   <enum>Qt::ApplicationModal</enum>
+  </property>
   <property name="geometry" >
    <rect>
     <x>0</x>
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="" >
+     <widget class="QWidget" name="layoutWidget" >
       <layout class="QVBoxLayout" >
        <property name="margin" >
         <number>0</number>
index 4924a28916fa7b65a6873d87924112b52b4e47e7..5c76ccf0611f5957ae30ba0d993928e424745069 100644 (file)
@@ -1,6 +1,9 @@
 <ui version="4.0" >
  <class>runForm</class>
  <widget class="QDialog" name="runForm" >
+  <property name="windowModality" >
+   <enum>Qt::ApplicationModal</enum>
+  </property>
   <property name="geometry" >
    <rect>
     <x>0</x>
diff --git a/bacula/src/qt-console/select/select.cpp b/bacula/src/qt-console/select/select.cpp
new file mode 100644 (file)
index 0000000..8772bbd
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+   Bacula® - The Network Backup Solution
+
+   Copyright (C) 2007-2007 Free Software Foundation Europe e.V.
+
+   The main author of Bacula is Kern Sibbald, with contributions from
+   many others, a complete list can be found in the file AUTHORS.
+   This program is Free Software; you can redistribute it and/or
+   modify it under the terms of version two of the GNU General Public
+   License as published by the Free Software Foundation plus additions
+   that are listed in the file LICENSE.
+
+   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., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
+
+   Bacula® is a registered trademark of John Walker.
+   The licensor of Bacula is the Free Software Foundation Europe
+   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+   Switzerland, email:ftf@fsfeurope.org.
+*/
+/*
+ *  Select dialog class
+ *
+ *   Kern Sibbald, March MMVII
+ *
+ *  $Id: $
+ */ 
+
+#include "bat.h"
+#include "select.h"
+
+/*
+ * Setup all the combo boxes and display the dialog
+ */
+selectDialog::selectDialog(Console *console) 
+{
+   QDateTime dt;
+   int stat;
+   QListWidgetItem *item;
+   int row = 0;
+
+   m_console = console;
+   setupUi(this);
+   connect(listBox, SIGNAL(currentRowChanged(int)), this, SLOT(index_change(int)));
+   m_console->read();                 /* get title */
+   labelWidget->setText(m_console->msg());
+   while ((stat=m_console->read()) > 0) {
+      item = new QListWidgetItem;
+      item->setText(m_console->msg());
+      listBox->insertItem(row++, item);
+   }
+// Dmsg1(000, "Stat=%d\n", stat);
+   m_console->read();                 /* get prompt signal */
+   m_console->read();                 /* get prompt */
+// Dmsg1(000, "Prompt=%s", m_console->msg());
+   this->show();
+}
+
+void selectDialog::accept()
+{
+   char cmd[100];
+
+   this->hide();
+   
+   bsnprintf(cmd, sizeof(cmd), "%d", m_index+1);
+   m_console->write_dir(cmd);
+   m_console->displayToPrompt();
+   delete this;
+   mainWin->resetFocus();
+}
+
+
+void selectDialog::reject()
+{
+   mainWin->set_status(" Canceled");
+   this->hide();
+   delete this;
+   mainWin->resetFocus();
+}
+
+/*
+ * Called here when the jobname combo box is changed.
+ *  We load the default values for the new job in the
+ *  other combo boxes.
+ */
+void selectDialog::index_change(int index)
+{
+// Dmsg1(000, "Index=%d\n", index);
+   m_index = index;
+}
diff --git a/bacula/src/qt-console/select/select.h b/bacula/src/qt-console/select/select.h
new file mode 100644 (file)
index 0000000..4e035b1
--- /dev/null
@@ -0,0 +1,27 @@
+
+#ifndef _SELECT_H_
+#define _SELECT_H_
+
+#include <QtGui>
+#include "ui_select.h"
+#include "console.h"
+
+class selectDialog : public QDialog, public Ui::selectForm
+{
+   Q_OBJECT 
+
+public:
+   selectDialog(Console *console);
+
+public slots:
+   void accept();
+   void reject();
+   void index_change(int index);
+
+private:
+   Console *m_console;
+   int m_index;
+
+};
+
+#endif /* _SELECT_H_ */
diff --git a/bacula/src/qt-console/select/select.ui b/bacula/src/qt-console/select/select.ui
new file mode 100644 (file)
index 0000000..8595a65
--- /dev/null
@@ -0,0 +1,82 @@
+<ui version="4.0" >
+ <class>selectForm</class>
+ <widget class="QDialog" name="selectForm" >
+  <property name="windowModality" >
+   <enum>Qt::NonModal</enum>
+  </property>
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>377</width>
+    <height>323</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Selection dialog</string>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="2" column="0" >
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QListWidget" name="listBox" />
+   </item>
+   <item row="0" column="0" >
+    <widget class="QLabel" name="labelWidget" >
+     <property name="text" >
+      <string/>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>selectForm</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>selectForm</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>