merge
authorOliver Maurhart <oliver.maurhart@ait.ac.at>
Thu, 12 Jun 2014 12:30:37 +0200
changeset 18959b383ff9780
parent 185 fed80e5183b4
parent 188 090d85701ed3
child 190 4d73f670be28
merge
     1.1 --- a/OpenSecurity.iss	Thu Jun 12 10:34:46 2014 +0100
     1.2 +++ b/OpenSecurity.iss	Thu Jun 12 12:30:37 2014 +0200
     1.3 @@ -8,7 +8,7 @@
     1.4  AppContact=AIT Austrian Institute of Technology
     1.5  AppPublisher=AIT Austrian Institute of Technology
     1.6  AppPublisherURL=http://www.ait.ac.at/
     1.7 -AppVersion=0.2.6
     1.8 +AppVersion=0.2.7
     1.9  ArchitecturesInstallIn64BitMode=x64
    1.10  DefaultDirName={pf}\OpenSecurity
    1.11  DefaultGroupName=OpenSecurity
    1.12 @@ -19,7 +19,7 @@
    1.13  ; DisableReadyPage=yes
    1.14  ; DisableWelcomePage=yes
    1.15  OutputDir="."
    1.16 -OutputBaseFilename="OpenSecurity Setup V0.2.6"
    1.17 +OutputBaseFilename="OpenSecurity Setup V0.2.7"
    1.18  OutputManifestFile=OpenSecurity-Setup-Manifest.txt
    1.19  SetupIconFile=OpenSecurity\bin\ui\gfx\OpenSecurity.ico
    1.20  SolidCompression=yes
     2.1 --- a/OpenSecurity/bin/__init__.py	Thu Jun 12 10:34:46 2014 +0100
     2.2 +++ b/OpenSecurity/bin/__init__.py	Thu Jun 12 12:30:37 2014 +0200
     2.3 @@ -36,5 +36,5 @@
     2.4  __copyright__   = 'Copyright 2014 The OpenSecurity Consortium'
     2.5  __license__     = 'GPL v3'
     2.6  __title__       = 'opensecurity'
     2.7 -__version__     = '0.2.6'
     2.8 +__version__     = '0.2.7'
     2.9  
     3.1 --- a/OpenSecurity/bin/download_initial_image.sh	Thu Jun 12 10:34:46 2014 +0100
     3.2 +++ b/OpenSecurity/bin/download_initial_image.sh	Thu Jun 12 12:30:37 2014 +0200
     3.3 @@ -3,7 +3,7 @@
     3.4  # ------------------------------------------------------------
     3.5  # download initial VM for
     3.6  #
     3.7 -#       OpenSecurity V0.2.6
     3.8 +#       OpenSecurity V0.2.7
     3.9  #
    3.10  # (C)opyright 2014, AIT Austrian Instiitute of Technology
    3.11  # ------------------------------------------------------------
     4.1 --- a/OpenSecurity/bin/initial_vm.sh	Thu Jun 12 10:34:46 2014 +0100
     4.2 +++ b/OpenSecurity/bin/initial_vm.sh	Thu Jun 12 12:30:37 2014 +0200
     4.3 @@ -3,7 +3,7 @@
     4.4  # ------------------------------------------------------------
     4.5  # install the initial VM for 
     4.6  #
     4.7 -#       OpenSecurity V0.2.6
     4.8 +#       OpenSecurity V0.2.7
     4.9  #
    4.10  # This has been originally a Windows only BAT file.
    4.11  #
     5.1 --- a/OpenSecurity/bin/ui/ConfigureDialog.ui	Thu Jun 12 10:34:46 2014 +0100
     5.2 +++ b/OpenSecurity/bin/ui/ConfigureDialog.ui	Thu Jun 12 12:30:37 2014 +0200
     5.3 @@ -6,8 +6,8 @@
     5.4     <rect>
     5.5      <x>0</x>
     5.6      <y>0</y>
     5.7 -    <width>474</width>
     5.8 -    <height>416</height>
     5.9 +    <width>649</width>
    5.10 +    <height>494</height>
    5.11     </rect>
    5.12    </property>
    5.13    <property name="windowTitle">
    5.14 @@ -79,170 +79,209 @@
    5.15          </widget>
    5.16         </item>
    5.17         <item row="2" column="0" colspan="2">
    5.18 -        <widget class="QWidget" name="wdStatus" native="true">
    5.19 -         <zorder>tabConfig</zorder>
    5.20 -        </widget>
    5.21 +        <widget class="QWidget" name="wdStatus" native="true"/>
    5.22         </item>
    5.23        </layout>
    5.24       </item>
    5.25      </layout>
    5.26     </item>
    5.27     <item>
    5.28 -    <widget class="QLabel" name="lblTemplate">
    5.29 -     <property name="text">
    5.30 -      <string>Initial Template:</string>
    5.31 +    <widget class="QTabWidget" name="tabWidget">
    5.32 +     <property name="currentIndex">
    5.33 +      <number>0</number>
    5.34       </property>
    5.35 -     <property name="buddy">
    5.36 -      <cstring>tvTemplate</cstring>
    5.37 -     </property>
    5.38 -    </widget>
    5.39 -   </item>
    5.40 -   <item>
    5.41 -    <widget class="QTreeWidget" name="tvTemplate">
    5.42 -     <property name="maximumSize">
    5.43 -      <size>
    5.44 -       <width>16777215</width>
    5.45 -       <height>64</height>
    5.46 -      </size>
    5.47 -     </property>
    5.48 -     <property name="rootIsDecorated">
    5.49 -      <bool>false</bool>
    5.50 -     </property>
    5.51 -     <property name="itemsExpandable">
    5.52 -      <bool>false</bool>
    5.53 -     </property>
    5.54 -     <property name="allColumnsShowFocus">
    5.55 -      <bool>true</bool>
    5.56 -     </property>
    5.57 -     <column>
    5.58 -      <property name="text">
    5.59 -       <string>Name</string>
    5.60 -      </property>
    5.61 -     </column>
    5.62 -     <column>
    5.63 -      <property name="text">
    5.64 -       <string>Date</string>
    5.65 -      </property>
    5.66 -     </column>
    5.67 -     <column>
    5.68 -      <property name="text">
    5.69 -       <string>Size</string>
    5.70 -      </property>
    5.71 -     </column>
    5.72 -     <column>
    5.73 -      <property name="text">
    5.74 -       <string>Path</string>
    5.75 -      </property>
    5.76 -     </column>
    5.77 -    </widget>
    5.78 -   </item>
    5.79 -   <item>
    5.80 -    <layout class="QHBoxLayout" name="lyDownload">
    5.81 -     <item>
    5.82 -      <spacer name="spDownload">
    5.83 -       <property name="orientation">
    5.84 -        <enum>Qt::Horizontal</enum>
    5.85 -       </property>
    5.86 -       <property name="sizeHint" stdset="0">
    5.87 -        <size>
    5.88 -         <width>40</width>
    5.89 -         <height>20</height>
    5.90 -        </size>
    5.91 -       </property>
    5.92 -      </spacer>
    5.93 -     </item>
    5.94 -     <item>
    5.95 -      <widget class="QPushButton" name="btnDownload">
    5.96 -       <property name="minimumSize">
    5.97 -        <size>
    5.98 -         <width>100</width>
    5.99 -         <height>0</height>
   5.100 -        </size>
   5.101 -       </property>
   5.102 -       <property name="text">
   5.103 -        <string>&amp;Download</string>
   5.104 -       </property>
   5.105 -      </widget>
   5.106 -     </item>
   5.107 -     <item>
   5.108 -      <widget class="QPushButton" name="btnImport">
   5.109 -       <property name="minimumSize">
   5.110 -        <size>
   5.111 -         <width>100</width>
   5.112 -         <height>0</height>
   5.113 -        </size>
   5.114 -       </property>
   5.115 -       <property name="text">
   5.116 -        <string>&amp;Import</string>
   5.117 -       </property>
   5.118 -      </widget>
   5.119 -     </item>
   5.120 -    </layout>
   5.121 -   </item>
   5.122 -   <item>
   5.123 -    <widget class="QLabel" name="lblMachines">
   5.124 -     <property name="text">
   5.125 -      <string>Machines:</string>
   5.126 -     </property>
   5.127 -     <property name="buddy">
   5.128 -      <cstring>tvMachines</cstring>
   5.129 -     </property>
   5.130 -    </widget>
   5.131 -   </item>
   5.132 -   <item>
   5.133 -    <widget class="QTreeWidget" name="tvMachines">
   5.134 -     <property name="maximumSize">
   5.135 -      <size>
   5.136 -       <width>16777215</width>
   5.137 -       <height>128</height>
   5.138 -      </size>
   5.139 -     </property>
   5.140 -     <property name="rootIsDecorated">
   5.141 -      <bool>false</bool>
   5.142 -     </property>
   5.143 -     <property name="itemsExpandable">
   5.144 -      <bool>false</bool>
   5.145 -     </property>
   5.146 -     <property name="allColumnsShowFocus">
   5.147 -      <bool>true</bool>
   5.148 -     </property>
   5.149 -     <column>
   5.150 -      <property name="text">
   5.151 -       <string>Name</string>
   5.152 -      </property>
   5.153 -     </column>
   5.154 -    </widget>
   5.155 -   </item>
   5.156 -   <item>
   5.157 -    <widget class="QLabel" name="lblProgress">
   5.158 -     <property name="text">
   5.159 -      <string>Progress:</string>
   5.160 -     </property>
   5.161 -     <property name="buddy">
   5.162 -      <cstring>edtProgress</cstring>
   5.163 -     </property>
   5.164 -    </widget>
   5.165 -   </item>
   5.166 -   <item>
   5.167 -    <widget class="QPlainTextEdit" name="edtProgress">
   5.168 -     <property name="font">
   5.169 -      <font>
   5.170 -       <family>Monospace</family>
   5.171 -       <pointsize>10</pointsize>
   5.172 -      </font>
   5.173 -     </property>
   5.174 -     <property name="verticalScrollBarPolicy">
   5.175 -      <enum>Qt::ScrollBarAlwaysOn</enum>
   5.176 -     </property>
   5.177 -     <property name="lineWrapMode">
   5.178 -      <enum>QPlainTextEdit::NoWrap</enum>
   5.179 -     </property>
   5.180 -     <property name="readOnly">
   5.181 -      <bool>true</bool>
   5.182 -     </property>
   5.183 -     <property name="plainText">
   5.184 -      <string/>
   5.185 -     </property>
   5.186 +     <widget class="QWidget" name="tabConfiguration">
   5.187 +      <attribute name="title">
   5.188 +       <string>Configuration</string>
   5.189 +      </attribute>
   5.190 +      <layout class="QVBoxLayout" name="lyTabConfig">
   5.191 +       <item>
   5.192 +        <widget class="QLabel" name="lblTemplate">
   5.193 +         <property name="text">
   5.194 +          <string>Initial Template:</string>
   5.195 +         </property>
   5.196 +         <property name="buddy">
   5.197 +          <cstring>tvTemplate</cstring>
   5.198 +         </property>
   5.199 +        </widget>
   5.200 +       </item>
   5.201 +       <item>
   5.202 +        <widget class="QTreeWidget" name="tvTemplate">
   5.203 +         <property name="maximumSize">
   5.204 +          <size>
   5.205 +           <width>16777215</width>
   5.206 +           <height>64</height>
   5.207 +          </size>
   5.208 +         </property>
   5.209 +         <property name="rootIsDecorated">
   5.210 +          <bool>false</bool>
   5.211 +         </property>
   5.212 +         <property name="itemsExpandable">
   5.213 +          <bool>false</bool>
   5.214 +         </property>
   5.215 +         <property name="allColumnsShowFocus">
   5.216 +          <bool>true</bool>
   5.217 +         </property>
   5.218 +         <column>
   5.219 +          <property name="text">
   5.220 +           <string>Name</string>
   5.221 +          </property>
   5.222 +         </column>
   5.223 +         <column>
   5.224 +          <property name="text">
   5.225 +           <string>Date</string>
   5.226 +          </property>
   5.227 +         </column>
   5.228 +         <column>
   5.229 +          <property name="text">
   5.230 +           <string>Size</string>
   5.231 +          </property>
   5.232 +         </column>
   5.233 +         <column>
   5.234 +          <property name="text">
   5.235 +           <string>Path</string>
   5.236 +          </property>
   5.237 +         </column>
   5.238 +        </widget>
   5.239 +       </item>
   5.240 +       <item>
   5.241 +        <layout class="QHBoxLayout" name="lyDownload">
   5.242 +         <item>
   5.243 +          <spacer name="spDownload">
   5.244 +           <property name="orientation">
   5.245 +            <enum>Qt::Horizontal</enum>
   5.246 +           </property>
   5.247 +           <property name="sizeHint" stdset="0">
   5.248 +            <size>
   5.249 +             <width>40</width>
   5.250 +             <height>20</height>
   5.251 +            </size>
   5.252 +           </property>
   5.253 +          </spacer>
   5.254 +         </item>
   5.255 +         <item>
   5.256 +          <widget class="QPushButton" name="btnDownload">
   5.257 +           <property name="minimumSize">
   5.258 +            <size>
   5.259 +             <width>100</width>
   5.260 +             <height>0</height>
   5.261 +            </size>
   5.262 +           </property>
   5.263 +           <property name="text">
   5.264 +            <string>&amp;Download</string>
   5.265 +           </property>
   5.266 +          </widget>
   5.267 +         </item>
   5.268 +         <item>
   5.269 +          <widget class="QPushButton" name="btnImport">
   5.270 +           <property name="minimumSize">
   5.271 +            <size>
   5.272 +             <width>100</width>
   5.273 +             <height>0</height>
   5.274 +            </size>
   5.275 +           </property>
   5.276 +           <property name="text">
   5.277 +            <string>&amp;Import</string>
   5.278 +           </property>
   5.279 +          </widget>
   5.280 +         </item>
   5.281 +        </layout>
   5.282 +       </item>
   5.283 +       <item>
   5.284 +        <widget class="QLabel" name="lblMachines">
   5.285 +         <property name="text">
   5.286 +          <string>Machines:</string>
   5.287 +         </property>
   5.288 +         <property name="buddy">
   5.289 +          <cstring>tvMachines</cstring>
   5.290 +         </property>
   5.291 +        </widget>
   5.292 +       </item>
   5.293 +       <item>
   5.294 +        <widget class="QTreeWidget" name="tvMachines">
   5.295 +         <property name="maximumSize">
   5.296 +          <size>
   5.297 +           <width>16777215</width>
   5.298 +           <height>128</height>
   5.299 +          </size>
   5.300 +         </property>
   5.301 +         <property name="rootIsDecorated">
   5.302 +          <bool>false</bool>
   5.303 +         </property>
   5.304 +         <property name="itemsExpandable">
   5.305 +          <bool>false</bool>
   5.306 +         </property>
   5.307 +         <property name="allColumnsShowFocus">
   5.308 +          <bool>true</bool>
   5.309 +         </property>
   5.310 +         <column>
   5.311 +          <property name="text">
   5.312 +           <string>Name</string>
   5.313 +          </property>
   5.314 +         </column>
   5.315 +        </widget>
   5.316 +       </item>
   5.317 +       <item>
   5.318 +        <widget class="QLabel" name="lblProgress">
   5.319 +         <property name="text">
   5.320 +          <string>Progress:</string>
   5.321 +         </property>
   5.322 +         <property name="buddy">
   5.323 +          <cstring>edtProgress</cstring>
   5.324 +         </property>
   5.325 +        </widget>
   5.326 +       </item>
   5.327 +       <item>
   5.328 +        <widget class="QPlainTextEdit" name="edtProgress">
   5.329 +         <property name="font">
   5.330 +          <font>
   5.331 +           <family>Monospace</family>
   5.332 +           <pointsize>10</pointsize>
   5.333 +          </font>
   5.334 +         </property>
   5.335 +         <property name="verticalScrollBarPolicy">
   5.336 +          <enum>Qt::ScrollBarAlwaysOn</enum>
   5.337 +         </property>
   5.338 +         <property name="lineWrapMode">
   5.339 +          <enum>QPlainTextEdit::NoWrap</enum>
   5.340 +         </property>
   5.341 +         <property name="readOnly">
   5.342 +          <bool>true</bool>
   5.343 +         </property>
   5.344 +         <property name="plainText">
   5.345 +          <string/>
   5.346 +         </property>
   5.347 +        </widget>
   5.348 +       </item>
   5.349 +      </layout>
   5.350 +      <zorder>tvTemplate</zorder>
   5.351 +      <zorder>spDownload</zorder>
   5.352 +      <zorder>btnDownload</zorder>
   5.353 +      <zorder>btnImport</zorder>
   5.354 +      <zorder>lblTemplate</zorder>
   5.355 +      <zorder>lblMachines</zorder>
   5.356 +      <zorder></zorder>
   5.357 +      <zorder>tvMachines</zorder>
   5.358 +      <zorder>lblProgress</zorder>
   5.359 +      <zorder>edtProgress</zorder>
   5.360 +     </widget>
   5.361 +     <widget class="QWidget" name="tabLog">
   5.362 +      <attribute name="title">
   5.363 +       <string>Service Log</string>
   5.364 +      </attribute>
   5.365 +      <layout class="QVBoxLayout" name="lyTabLog">
   5.366 +       <item>
   5.367 +        <widget class="QPlainTextEdit" name="edtLog">
   5.368 +         <property name="verticalScrollBarPolicy">
   5.369 +          <enum>Qt::ScrollBarAlwaysOn</enum>
   5.370 +         </property>
   5.371 +         <property name="readOnly">
   5.372 +          <bool>true</bool>
   5.373 +         </property>
   5.374 +        </widget>
   5.375 +       </item>
   5.376 +      </layout>
   5.377 +     </widget>
   5.378      </widget>
   5.379     </item>
   5.380     <item>
   5.381 @@ -305,23 +344,14 @@
   5.382      </layout>
   5.383     </item>
   5.384    </layout>
   5.385 -  <zorder>btnAbout</zorder>
   5.386 -  <zorder>lblTemplate</zorder>
   5.387 -  <zorder>tvTemplate</zorder>
   5.388 -  <zorder>tvMachines</zorder>
   5.389 -  <zorder>lblProgress</zorder>
   5.390 -  <zorder>edtProgress</zorder>
   5.391 -  <zorder>lblMachines</zorder>
   5.392    <zorder></zorder>
   5.393 +  <zorder>tabWidget</zorder>
   5.394   </widget>
   5.395   <tabstops>
   5.396    <tabstop>edtStatus</tabstop>
   5.397    <tabstop>edtVersion</tabstop>
   5.398 -  <tabstop>tvTemplate</tabstop>
   5.399    <tabstop>btnDownload</tabstop>
   5.400    <tabstop>btnImport</tabstop>
   5.401 -  <tabstop>tvMachines</tabstop>
   5.402 -  <tabstop>edtProgress</tabstop>
   5.403    <tabstop>btnRefresh</tabstop>
   5.404    <tabstop>btnAbout</tabstop>
   5.405    <tabstop>btnClose</tabstop>
     6.1 --- a/OpenSecurity/bin/ui/configure_dialog.py	Thu Jun 12 10:34:46 2014 +0100
     6.2 +++ b/OpenSecurity/bin/ui/configure_dialog.py	Thu Jun 12 12:30:37 2014 +0200
     6.3 @@ -102,6 +102,8 @@
     6.4          self._file_watched_name = ''
     6.5          self._file_watched_size = 0
     6.6          self._file_watcher = QtCore.QTimer(self)
     6.7 +        self._service_log_path = ''
     6.8 +        self._service_log_size = 0
     6.9  
    6.10          # connectors
    6.11          self.ui.btnAbout.clicked.connect(self.clicked_about)
    6.12 @@ -178,6 +180,9 @@
    6.13              self.ui.edtStatus.setEnabled(True)
    6.14              self.ui.edtVersion.setText(j['os_server']['version'])
    6.15              self.ui.edtVersion.setEnabled(True)
    6.16 +            self._service_log_path = os.path.join(j['os_server']['current log folder'], 'OpenSecurity.log')
    6.17 +            self._service_log_size = 0
    6.18 +            print(self._service_log_path)
    6.19  
    6.20              # get initial template info
    6.21              j = json.load(urllib2.urlopen('http://127.0.0.1:8080/initial_image'))
    6.22 @@ -200,9 +205,6 @@
    6.23      def update_progress(self):
    6.24          
    6.25          """Our log file has changed, update ui"""
    6.26 -        
    6.27 -        if self._file_watched_name == '':
    6.28 -            return
    6.29  
    6.30          # we could use os.stat(PATH).st_mtime ...
    6.31          # 
    6.32 @@ -213,6 +215,18 @@
    6.33          #
    6.34          # This is terrible. 
    6.35  
    6.36 +        # first the service log
    6.37 +        if self._service_log_path != '':
    6.38 +            file_size = os.stat(self._service_log_path).st_size
    6.39 +            if file_size > self._service_log_size:
    6.40 +                f = open(self._service_log_path, 'r')
    6.41 +                self.ui.edtLog.setPlainText(f.read())
    6.42 +                self._service_log_size = file_size
    6.43 +        
    6.44 +        # now any processing log (download or import)
    6.45 +        if self._file_watched_name == '':
    6.46 +            return
    6.47 +
    6.48          file_size = os.stat(self._file_watched_name).st_size
    6.49          if self._file_watched_size >= file_size:
    6.50              return
     7.1 --- a/OpenSecurity/bin/ui/launch_dialog.py	Thu Jun 12 10:34:46 2014 +0100
     7.2 +++ b/OpenSecurity/bin/ui/launch_dialog.py	Thu Jun 12 12:30:37 2014 +0200
     7.3 @@ -111,7 +111,7 @@
     7.4  
     7.5  if __name__ == "__main__":
     7.6      a = QtGui.QApplication(sys.argv)
     7.7 -    d = LaunchDialog(['SecurityDVM0', 'SecurityDVM1'], ['/usr/bin/xterm', '/usr/bin/chromium', '/usr/bin/thunderbird'])
     7.8 +    d = LaunchDialog(['SecurityDVM0', 'SecurityDVM1'], ['/usr/bin/xterm', '/usr/bin/xclock', '/usr/bin/xeyes'])
     7.9      d.show()
    7.10      sys.exit(a.exec_())     
    7.11  
     8.1 --- a/OpenSecurity/bin/ui/ui_ConfigureDialog.py	Thu Jun 12 10:34:46 2014 +0100
     8.2 +++ b/OpenSecurity/bin/ui/ui_ConfigureDialog.py	Thu Jun 12 12:30:37 2014 +0200
     8.3 @@ -2,7 +2,7 @@
     8.4  
     8.5  # Form implementation generated from reading ui file 'ConfigureDialog.ui'
     8.6  #
     8.7 -# Created: Wed Apr  2 13:21:51 2014
     8.8 +# Created: Thu Jun 12 12:09:34 2014
     8.9  #      by: PyQt4 UI code generator 4.10.3
    8.10  #
    8.11  # WARNING! All changes made in this file will be lost!
    8.12 @@ -26,7 +26,7 @@
    8.13  class Ui_ConfigureDialog(object):
    8.14      def setupUi(self, ConfigureDialog):
    8.15          ConfigureDialog.setObjectName(_fromUtf8("ConfigureDialog"))
    8.16 -        ConfigureDialog.resize(474, 416)
    8.17 +        ConfigureDialog.resize(649, 494)
    8.18          icon = QtGui.QIcon()
    8.19          icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/opensecurity/gfx/opensecurity_icon_64.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
    8.20          ConfigureDialog.setWindowIcon(icon)
    8.21 @@ -63,43 +63,49 @@
    8.22          self.lyStatus.addWidget(self.wdStatus, 2, 0, 1, 2)
    8.23          self.lyHeading.addLayout(self.lyStatus)
    8.24          self.lyMain.addLayout(self.lyHeading)
    8.25 -        self.lblTemplate = QtGui.QLabel(ConfigureDialog)
    8.26 +        self.tabWidget = QtGui.QTabWidget(ConfigureDialog)
    8.27 +        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
    8.28 +        self.tabConfiguration = QtGui.QWidget()
    8.29 +        self.tabConfiguration.setObjectName(_fromUtf8("tabConfiguration"))
    8.30 +        self.lyTabConfig = QtGui.QVBoxLayout(self.tabConfiguration)
    8.31 +        self.lyTabConfig.setObjectName(_fromUtf8("lyTabConfig"))
    8.32 +        self.lblTemplate = QtGui.QLabel(self.tabConfiguration)
    8.33          self.lblTemplate.setObjectName(_fromUtf8("lblTemplate"))
    8.34 -        self.lyMain.addWidget(self.lblTemplate)
    8.35 -        self.tvTemplate = QtGui.QTreeWidget(ConfigureDialog)
    8.36 +        self.lyTabConfig.addWidget(self.lblTemplate)
    8.37 +        self.tvTemplate = QtGui.QTreeWidget(self.tabConfiguration)
    8.38          self.tvTemplate.setMaximumSize(QtCore.QSize(16777215, 64))
    8.39          self.tvTemplate.setRootIsDecorated(False)
    8.40          self.tvTemplate.setItemsExpandable(False)
    8.41          self.tvTemplate.setAllColumnsShowFocus(True)
    8.42          self.tvTemplate.setObjectName(_fromUtf8("tvTemplate"))
    8.43 -        self.lyMain.addWidget(self.tvTemplate)
    8.44 +        self.lyTabConfig.addWidget(self.tvTemplate)
    8.45          self.lyDownload = QtGui.QHBoxLayout()
    8.46          self.lyDownload.setObjectName(_fromUtf8("lyDownload"))
    8.47          spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
    8.48          self.lyDownload.addItem(spacerItem)
    8.49 -        self.btnDownload = QtGui.QPushButton(ConfigureDialog)
    8.50 +        self.btnDownload = QtGui.QPushButton(self.tabConfiguration)
    8.51          self.btnDownload.setMinimumSize(QtCore.QSize(100, 0))
    8.52          self.btnDownload.setObjectName(_fromUtf8("btnDownload"))
    8.53          self.lyDownload.addWidget(self.btnDownload)
    8.54 -        self.btnImport = QtGui.QPushButton(ConfigureDialog)
    8.55 +        self.btnImport = QtGui.QPushButton(self.tabConfiguration)
    8.56          self.btnImport.setMinimumSize(QtCore.QSize(100, 0))
    8.57          self.btnImport.setObjectName(_fromUtf8("btnImport"))
    8.58          self.lyDownload.addWidget(self.btnImport)
    8.59 -        self.lyMain.addLayout(self.lyDownload)
    8.60 -        self.lblMachines = QtGui.QLabel(ConfigureDialog)
    8.61 +        self.lyTabConfig.addLayout(self.lyDownload)
    8.62 +        self.lblMachines = QtGui.QLabel(self.tabConfiguration)
    8.63          self.lblMachines.setObjectName(_fromUtf8("lblMachines"))
    8.64 -        self.lyMain.addWidget(self.lblMachines)
    8.65 -        self.tvMachines = QtGui.QTreeWidget(ConfigureDialog)
    8.66 +        self.lyTabConfig.addWidget(self.lblMachines)
    8.67 +        self.tvMachines = QtGui.QTreeWidget(self.tabConfiguration)
    8.68          self.tvMachines.setMaximumSize(QtCore.QSize(16777215, 128))
    8.69          self.tvMachines.setRootIsDecorated(False)
    8.70          self.tvMachines.setItemsExpandable(False)
    8.71          self.tvMachines.setAllColumnsShowFocus(True)
    8.72          self.tvMachines.setObjectName(_fromUtf8("tvMachines"))
    8.73 -        self.lyMain.addWidget(self.tvMachines)
    8.74 -        self.lblProgress = QtGui.QLabel(ConfigureDialog)
    8.75 +        self.lyTabConfig.addWidget(self.tvMachines)
    8.76 +        self.lblProgress = QtGui.QLabel(self.tabConfiguration)
    8.77          self.lblProgress.setObjectName(_fromUtf8("lblProgress"))
    8.78 -        self.lyMain.addWidget(self.lblProgress)
    8.79 -        self.edtProgress = QtGui.QPlainTextEdit(ConfigureDialog)
    8.80 +        self.lyTabConfig.addWidget(self.lblProgress)
    8.81 +        self.edtProgress = QtGui.QPlainTextEdit(self.tabConfiguration)
    8.82          font = QtGui.QFont()
    8.83          font.setFamily(_fromUtf8("Monospace"))
    8.84          font.setPointSize(10)
    8.85 @@ -109,7 +115,19 @@
    8.86          self.edtProgress.setReadOnly(True)
    8.87          self.edtProgress.setPlainText(_fromUtf8(""))
    8.88          self.edtProgress.setObjectName(_fromUtf8("edtProgress"))
    8.89 -        self.lyMain.addWidget(self.edtProgress)
    8.90 +        self.lyTabConfig.addWidget(self.edtProgress)
    8.91 +        self.tabWidget.addTab(self.tabConfiguration, _fromUtf8(""))
    8.92 +        self.tabLog = QtGui.QWidget()
    8.93 +        self.tabLog.setObjectName(_fromUtf8("tabLog"))
    8.94 +        self.lyTabLog = QtGui.QVBoxLayout(self.tabLog)
    8.95 +        self.lyTabLog.setObjectName(_fromUtf8("lyTabLog"))
    8.96 +        self.edtLog = QtGui.QPlainTextEdit(self.tabLog)
    8.97 +        self.edtLog.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
    8.98 +        self.edtLog.setReadOnly(True)
    8.99 +        self.edtLog.setObjectName(_fromUtf8("edtLog"))
   8.100 +        self.lyTabLog.addWidget(self.edtLog)
   8.101 +        self.tabWidget.addTab(self.tabLog, _fromUtf8(""))
   8.102 +        self.lyMain.addWidget(self.tabWidget)
   8.103          self.lyButton = QtGui.QHBoxLayout()
   8.104          self.lyButton.setObjectName(_fromUtf8("lyButton"))
   8.105          spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
   8.106 @@ -135,14 +153,12 @@
   8.107          self.lblProgress.setBuddy(self.edtProgress)
   8.108  
   8.109          self.retranslateUi(ConfigureDialog)
   8.110 +        self.tabWidget.setCurrentIndex(0)
   8.111          QtCore.QMetaObject.connectSlotsByName(ConfigureDialog)
   8.112          ConfigureDialog.setTabOrder(self.edtStatus, self.edtVersion)
   8.113 -        ConfigureDialog.setTabOrder(self.edtVersion, self.tvTemplate)
   8.114 -        ConfigureDialog.setTabOrder(self.tvTemplate, self.btnDownload)
   8.115 +        ConfigureDialog.setTabOrder(self.edtVersion, self.btnDownload)
   8.116          ConfigureDialog.setTabOrder(self.btnDownload, self.btnImport)
   8.117 -        ConfigureDialog.setTabOrder(self.btnImport, self.tvMachines)
   8.118 -        ConfigureDialog.setTabOrder(self.tvMachines, self.edtProgress)
   8.119 -        ConfigureDialog.setTabOrder(self.edtProgress, self.btnRefresh)
   8.120 +        ConfigureDialog.setTabOrder(self.btnImport, self.btnRefresh)
   8.121          ConfigureDialog.setTabOrder(self.btnRefresh, self.btnAbout)
   8.122          ConfigureDialog.setTabOrder(self.btnAbout, self.btnClose)
   8.123  
   8.124 @@ -160,6 +176,8 @@
   8.125          self.lblMachines.setText(_translate("ConfigureDialog", "Machines:", None))
   8.126          self.tvMachines.headerItem().setText(0, _translate("ConfigureDialog", "Name", None))
   8.127          self.lblProgress.setText(_translate("ConfigureDialog", "Progress:", None))
   8.128 +        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabConfiguration), _translate("ConfigureDialog", "Configuration", None))
   8.129 +        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabLog), _translate("ConfigureDialog", "Service Log", None))
   8.130          self.btnRefresh.setText(_translate("ConfigureDialog", "&Refresh", None))
   8.131          self.btnAbout.setText(_translate("ConfigureDialog", "&About", None))
   8.132          self.btnClose.setText(_translate("ConfigureDialog", "&Close", None))