[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[et-mgmt-tools] [PATCH 1/3]: Add a 'storage manager' in connection details



The attached patch adds a 'Storage Manager' to the connection
details section. It's setup is similar to the network manager
also in the connection details.

The manager lists all pools on the connection and their
associated details: name, type, total capacity and available
space, as well as their associated volumes. All starting,
stopping, and deleting of storage objects takes place here,
as well as launching the the storage creation wizards (next
patches).

There is some small cleanup sprinkled in here as well of the
existing network management code, nothing major though.

Thanks to Tim Allen for most of the UI design.

Screenshots can be seen here:
http://fedorapeople.org/~crobinso/virt-manager/storage/storage-manager-01.png
http://fedorapeople.org/~crobinso/virt-manager/storage/storage-manager-02.png
http://fedorapeople.org/~crobinso/virt-manager/storage/storage-manager-03.png

Thanks,
Cole
# HG changeset patch
# User "Cole Robinson <crobinso redhat com>"
# Date 1218416200 14400
# Node ID 145e007589cadd31bbdbd12b2b6cad4a35a47ba3
# Parent  97b86e27b9e540f67f677907e253462b70caeef4
Add storage manager to connection details section.

diff -r 97b86e27b9e5 -r 145e007589ca src/virtManager/host.py
--- a/src/virtManager/host.py	Thu Aug 07 17:37:16 2008 -0400
+++ b/src/virtManager/host.py	Sun Aug 10 20:56:40 2008 -0400
@@ -25,8 +25,13 @@
 import sparkline
 import logging
 import os
+import traceback
+
+from virtinst import Storage
 
 from virtManager.createnet import vmmCreateNetwork
+from virtManager.createpool import vmmCreatePool
+from virtManager.createvol import vmmCreateVolume
 from virtManager.error import vmmErrorDialog
 
 class vmmHost(gobject.GObject):
@@ -39,6 +44,9 @@
         self.window = gtk.glade.XML(config.get_glade_dir() + "/vmm-host.glade", "vmm-host", domain="virt-manager")
         self.config = config
         self.conn = conn
+
+        self.PIXBUF_STATE_RUNNING = gtk.gdk.pixbuf_new_from_file_at_size(self.config.get_icon_dir() + "/state_running.png", 18, 18)
+        self.PIXBUF_STATE_SHUTOFF = gtk.gdk.pixbuf_new_from_file_at_size(self.config.get_icon_dir() + "/state_shutoff.png", 18, 18)
 
         topwin = self.window.get_widget("vmm-host")
         topwin.hide()
@@ -60,7 +68,16 @@
         self.window.get_widget("net-list").set_model(netListModel)
         self.populate_networks(netListModel)
 
+        poolListModel = gtk.ListStore(str, str, float)
+        self.window.get_widget("pool-list").set_model(poolListModel)
+        self.populate_storage_pools(poolListModel)
+
+        volListModel = gtk.ListStore(str, str, str, str)
+        self.window.get_widget("vol-list").set_model(volListModel)
+
         self.window.get_widget("net-list").get_selection().connect("changed", self.net_selected)
+        self.window.get_widget("pool-list").get_selection().connect("changed", self.pool_selected)
+        self.window.get_widget("vol-list").get_selection().connect("changed", self.vol_selected)
 
         netCol = gtk.TreeViewColumn("Networks")
         net_txt = gtk.CellRendererText()
@@ -73,6 +90,35 @@
         self.window.get_widget("net-list").append_column(netCol)
         self.window.get_widget("net-details").set_sensitive(False)
 
+        poolCol = gtk.TreeViewColumn("Pools")
+        pool_txt = gtk.CellRendererText()
+        pool_prg = gtk.CellRendererProgress()
+        poolCol.pack_start(pool_txt, True)
+        poolCol.pack_start(pool_prg, False)
+        poolCol.add_attribute(pool_txt, 'text', 1)
+        poolCol.add_attribute(pool_prg, 'value', 2)
+        self.window.get_widget("pool-list").append_column(poolCol)
+
+        volCol = gtk.TreeViewColumn("Volumes")
+        vol_txt1 = gtk.CellRendererText()
+        volCol.pack_start(vol_txt1, True)
+        volCol.add_attribute(vol_txt1, 'text', 1)
+        self.window.get_widget("vol-list").append_column(volCol)
+
+        volSizeCol = gtk.TreeViewColumn("Size")
+        vol_txt2 = gtk.CellRendererText()
+        volSizeCol.pack_start(vol_txt2, False)
+        volSizeCol.add_attribute(vol_txt2, 'text', 2)
+        self.window.get_widget("vol-list").append_column(volSizeCol)
+
+        volFormatCol = gtk.TreeViewColumn("Format")
+        vol_txt3 = gtk.CellRendererText()
+        volFormatCol.pack_start(vol_txt3, False)
+        volFormatCol.add_attribute(vol_txt3, 'text', 3)
+        self.window.get_widget("vol-list").append_column(volFormatCol)
+
+        self.window.get_widget("pool-details").set_sensitive(False)
+
         self.cpu_usage_graph = sparkline.Sparkline()
         self.cpu_usage_graph.show()
         self.window.get_widget("performance-table").attach(self.cpu_usage_graph, 1, 2, 0, 1)
@@ -81,11 +127,19 @@
         self.memory_usage_graph.show()
         self.window.get_widget("performance-table").attach(self.memory_usage_graph, 1, 2, 1, 2)
 
-        self.add = None
-        self.window.get_widget("details-tabs").get_nth_page(2).hide()
+        self.addnet = None
+        self.addpool = None
+        self.addvol = None
 
         self.conn.connect("net-added", self.repopulate_networks)
         self.conn.connect("net-removed", self.repopulate_networks)
+        self.conn.connect("net-started", self.refresh_network)
+        self.conn.connect("net-stopped", self.refresh_network)
+
+        self.conn.connect("pool-added", self.repopulate_storage_pools)
+        self.conn.connect("pool-removed", self.repopulate_storage_pools)
+        self.conn.connect("pool-started", self.refresh_storage_pool)
+        self.conn.connect("pool-stopped", self.refresh_storage_pool)
 
         # XXX not technically correct once we enable remote management
         if (os.getuid() != 0 and not self.conn.is_remote()) \
@@ -101,13 +155,20 @@
             "on_net_delete_clicked": self.delete_network,
             "on_net_stop_clicked": self.stop_network,
             "on_net_start_clicked": self.start_network,
+            "on_pool_add_clicked" : self.add_pool,
+            "on_vol_add_clicked" : self.add_vol,
+            "on_pool_stop_clicked": self.stop_pool,
+            "on_pool_start_clicked": self.start_pool,
+            "on_pool_delete_clicked": self.delete_pool,
+            "on_pool_autostart_toggled": self.pool_autostart_changed,
+            "on_vol_delete_clicked": self.delete_vol,
+            "on_pool_apply_clicked": self.pool_apply,
             "on_config_autoconnect_toggled": self.toggle_autoconnect,
             })
 
         self.conn.connect("resources-sampled", self.refresh_resources)
-        self.conn.connect("net-started", self.refresh_network)
-        self.conn.connect("net-stopped", self.refresh_network)
         self.refresh_resources()
+        self.reset_pool_state()
 
     def show(self):
         # Update autostart value
@@ -140,9 +201,9 @@
             self.err.val_err(_("Creating new networks on remote connections is not yet supported"))
             return
 
-        if self.add is None:
-            self.add = vmmCreateNetwork(self.config, self.conn)
-        self.add.show()
+        if self.addnet is None:
+            self.addnet = vmmCreateNetwork(self.config, self.conn)
+        self.addnet.show()
 
     def toggle_autoconnect(self, ignore=None):
         if self.conn.get_autoconnect() != \
@@ -169,6 +230,9 @@
         memory_vector = self.conn.current_memory_vector()
         memory_vector.reverse()
         self.memory_usage_graph.set_property("data_array", memory_vector)
+
+
+    # Virtual Network functions
 
     def current_network(self):
         sel = self.window.get_widget("net-list").get_selection()
@@ -202,7 +266,7 @@
                     self.window.get_widget("net-device").set_text(net.get_bridge_device())
                     self.window.get_widget("net-device").set_sensitive(True)
                     self.window.get_widget("net-state").set_text(_("Active"))
-                    self.window.get_widget("net-state-icon").set_from_pixbuf(gtk.gdk.pixbuf_new_from_file_at_size(self.config.get_icon_dir() + "/state_running.png", 18, 18))
+                    self.window.get_widget("net-state-icon").set_from_pixbuf(self.PIXBUF_STATE_RUNNING)
                     self.window.get_widget("net-start").set_sensitive(False)
                     self.window.get_widget("net-stop").set_sensitive(True)
                     self.window.get_widget("net-delete").set_sensitive(False)
@@ -210,17 +274,12 @@
                     self.window.get_widget("net-device").set_text("")
                     self.window.get_widget("net-device").set_sensitive(False)
                     self.window.get_widget("net-state").set_text(_("Inactive"))
-                    self.window.get_widget("net-state-icon").set_from_pixbuf(gtk.gdk.pixbuf_new_from_file_at_size(self.config.get_icon_dir() + "/state_shutoff.png", 18, 18))
+                    self.window.get_widget("net-state-icon").set_from_pixbuf(self.PIXBUF_STATE_SHUTOFF)
                     self.window.get_widget("net-start").set_sensitive(True)
                     self.window.get_widget("net-stop").set_sensitive(False)
                     self.window.get_widget("net-delete").set_sensitive(True)
 
-                autostart = True
-                try:
-                    autostart = net.get_autostart()
-                except:
-                    # Hack, libvirt 0.2.1 is missing python binding for the autostart method
-                    pass
+                autostart = net.get_autostart()
                 if autostart:
                     self.window.get_widget("net-autostart").set_text(_("On boot"))
                     self.window.get_widget("net-autostart-icon").set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU)
@@ -258,4 +317,211 @@
             model.append([uuid, net.get_name(), gtk.STOCK_NETWORK])
 
 
+    # ------------------------------
+    # Storage Manager methods
+    # ------------------------------
+
+
+    def add_pool(self, src):
+        if self.addpool is None:
+            self.addpool = vmmCreatePool(self.config, self.conn)
+        self.addpool.show()
+
+    def add_vol(self, src):
+        pool = self.current_pool()
+        if pool is None:
+            return
+        if self.addvol is None:
+            self.addvol = vmmCreateVolume(self.config, self.conn, pool)
+            self.addvol.connect("vol-created", self.refresh_current_pool)
+        else:
+            self.addvol.set_parent_pool(pool)
+        self.addvol.show()
+
+    def refresh_current_pool(self, ignore1=None):
+        cp = self.current_pool()
+        if cp is None:
+            return
+        self.refresh_storage_pool(None, None, cp.get_uuid())
+
+    def current_pool(self):
+        sel = self.window.get_widget("pool-list").get_selection()
+        active = sel.get_selected()
+        if active[1] != None:
+            curruuid = active[0].get_value(active[1], 0)
+            return self.conn.get_pool(curruuid)
+        return None
+
+    def current_vol(self):
+        pool = self.current_pool()
+        if not pool:
+            return None
+        sel = self.window.get_widget("vol-list").get_selection()
+        active = sel.get_selected()
+        if active[1] != None:
+            curruuid = active[0].get_value(active[1], 0)
+            return pool.get_volume(curruuid)
+        return None
+
+    def stop_pool(self, src):
+        pool = self.current_pool()
+        if pool is not None:
+            pool.stop()
+
+    def start_pool(self, src):
+        pool = self.current_pool()
+        if pool is not None:
+            pool.start()
+
+    def delete_pool(self, src):
+        pool = self.current_pool()
+        if pool is None:
+            return
+
+        result = self.err.yes_no(_("This will permanently delete the volume "
+                                   "'%s,' are you sure?") % pool.get_name())
+        if not result:
+            return
+        try:
+            pool.delete()
+        except Exception, e:
+            self.err.show_err(_("Error deleting pool: %s") % str(e),
+                              "".join(traceback.format_exc()))
+            return
+
+    def delete_vol(self, src):
+        vol = self.current_vol()
+        if vol is None:
+            return
+
+        result = self.err.yes_no(_("This will permanently delete the volume "
+                                   "'%s,' are you sure?") % vol.get_name())
+        if not result:
+            return
+
+        try:
+            vol.delete()
+        except Exception, e:
+            self.err.show_err(_("Error deleting volume: %s") % str(e),
+                              "".join(traceback.format_exc()))
+            return
+
+        self.populate_storage_volumes()
+
+    def pool_apply(self, src):
+        pool = self.current_pool()
+        if pool is None:
+            return
+
+        try:
+            pool.set_autostart(self.window.get_widget("pool-autostart").get_active())
+        except Exception, e:
+            self.err.show_err(_("Error setting pool autostart: %s") % str(e),
+                              "".join(traceback.format_exc()))
+            return
+        self.window.get_widget("pool-apply").set_sensitive(False)
+
+    def pool_autostart_changed(self, src):
+        auto = self.window.get_widget("pool-autostart").get_active()
+        self.window.get_widget("pool-autostart").set_label(auto and \
+                                                           _("On Boot") or \
+                                                           _("Never"))
+        self.window.get_widget("pool-apply").set_sensitive(True)
+
+    def pool_selected(self, src):
+        selected = src.get_selected()
+        if selected[1] is None or \
+           selected[0].get_value(selected[1], 0) is None:
+            self.reset_pool_state()
+            return
+
+        uuid = selected[0].get_value(selected[1], 0)
+        pool = self.conn.get_pool(uuid)
+        auto = pool.get_autostart()
+        active = pool.is_active()
+
+        # Set pool details state
+        self.window.get_widget("pool-details").set_sensitive(True)
+        self.window.get_widget("pool-name").set_markup("<b>%s:</b>" % \
+                                                       pool.get_name())
+        self.window.get_widget("pool-sizes").set_markup("""<span size="large">%s Free</span> / <i>%s In Use</i>""" % (pool.get_pretty_available(), pool.get_pretty_allocation()))
+        self.window.get_widget("pool-type").set_text(Storage.StoragePool.get_pool_type_desc(pool.get_type()))
+        self.window.get_widget("pool-location").set_text(pool.get_target_path())
+        self.window.get_widget("pool-state-icon").set_from_pixbuf((active and self.PIXBUF_STATE_RUNNING) or self.PIXBUF_STATE_SHUTOFF)
+        self.window.get_widget("pool-state").set_text((active and _("Active")) or _("Inactive"))
+        self.window.get_widget("pool-autostart").set_label((auto and _("On boot")) or _("Never"))
+        self.window.get_widget("pool-autostart").set_active(auto)
+
+        self.window.get_widget("vol-list").set_sensitive(active)
+        self.populate_storage_volumes()
+
+        self.window.get_widget("pool-delete").set_sensitive(not active)
+        self.window.get_widget("pool-stop").set_sensitive(active)
+        self.window.get_widget("pool-start").set_sensitive(not active)
+        self.window.get_widget("pool-apply").set_sensitive(False)
+        self.window.get_widget("vol-add").set_sensitive(active)
+        self.window.get_widget("vol-delete").set_sensitive(False)
+
+    def refresh_storage_pool(self, src, uri, uuid):
+        sel = self.window.get_widget("pool-list").get_selection()
+        active = sel.get_selected()
+        if active[1] != None:
+            curruuid = active[0].get_value(active[1], 0)
+            if curruuid == uuid:
+                self.pool_selected(sel)
+
+    def reset_pool_state(self):
+        self.window.get_widget("pool-details").set_sensitive(False)
+        self.window.get_widget("pool-name").set_text("")
+        self.window.get_widget("pool-sizes").set_text("")
+        self.window.get_widget("pool-type").set_text("")
+        self.window.get_widget("pool-location").set_text("")
+        self.window.get_widget("pool-state-icon").set_from_pixbuf(self.PIXBUF_STATE_SHUTOFF)
+        self.window.get_widget("pool-state").set_text(_("Inactive"))
+        self.window.get_widget("vol-list").get_model().clear()
+        self.window.get_widget("pool-autostart").set_label(_("Never"))
+        self.window.get_widget("pool-autostart").set_active(False)
+
+        self.window.get_widget("pool-delete").set_sensitive(False)
+        self.window.get_widget("pool-stop").set_sensitive(False)
+        self.window.get_widget("pool-start").set_sensitive(False)
+        self.window.get_widget("pool-apply").set_sensitive(False)
+        self.window.get_widget("vol-add").set_sensitive(False)
+        self.window.get_widget("vol-delete").set_sensitive(False)
+        self.window.get_widget("vol-list").set_sensitive(False)
+
+    def vol_selected(self, src):
+        selected = src.get_selected()
+        if selected[1] is None or \
+           selected[0].get_value(selected[1], 0) is None:
+            self.window.get_widget("vol-delete").set_sensitive(False)
+            return
+
+        self.window.get_widget("vol-delete").set_sensitive(True)
+
+    def repopulate_storage_pools(self, src, uri, uuid):
+        self.populate_storage_pools(self.window.get_widget("pool-list").get_model())
+
+    def populate_storage_pools(self, model):
+        model.clear()
+        for uuid in self.conn.list_pool_uuids():
+            pool = self.conn.get_pool(uuid)
+            cap = pool.get_capacity()
+            all = pool.get_allocation()
+            if not cap or all is None:
+                per = 0
+            else:
+                per = int(((float(all) / float(cap)) * 100))
+            model.append([uuid, pool.get_name(), per])
+
+    def populate_storage_volumes(self):
+        pool = self.current_pool()
+        model = self.window.get_widget("vol-list").get_model()
+        model.clear()
+        vols = pool.get_volumes()
+        for key in vols.keys():
+            vol = vols[key]
+            model.append([key, vol.get_name(), vol.get_pretty_capacity(),
+                          vol.get_format() or ""])
+
 gobject.type_register(vmmHost)
diff -r 97b86e27b9e5 -r 145e007589ca src/vmm-host.glade
--- a/src/vmm-host.glade	Thu Aug 07 17:37:16 2008 -0400
+++ b/src/vmm-host.glade	Sun Aug 10 20:56:40 2008 -0400
@@ -9,7 +9,7 @@
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
   <property name="modal">False</property>
-  <property name="default_width">600</property>
+  <property name="default_width">650</property>
   <property name="default_height">450</property>
   <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
@@ -1714,23 +1714,21 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkHBox" id="hbox2">
+	    <widget class="GtkVBox" id="vbox5">
+	      <property name="border_width">3</property>
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
 	      <property name="spacing">0</property>
 
 	      <child>
-		<widget class="GtkScrolledWindow" id="scrolledwindow2">
-		  <property name="border_width">6</property>
+		<widget class="GtkHPaned" id="hpaned1">
+		  <property name="border_width">3</property>
 		  <property name="visible">True</property>
 		  <property name="can_focus">True</property>
-		  <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="shadow_type">GTK_SHADOW_IN</property>
-		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
 		  <child>
-		    <widget class="GtkTreeView" id="treeview1">
+		    <widget class="GtkTreeView" id="pool-list">
+		      <property name="width_request">134</property>
 		      <property name="visible">True</property>
 		      <property name="can_focus">True</property>
 		      <property name="headers_visible">False</property>
@@ -1741,61 +1739,248 @@
 		      <property name="hover_selection">False</property>
 		      <property name="hover_expand">False</property>
 		    </widget>
+		    <packing>
+		      <property name="shrink">True</property>
+		      <property name="resize">False</property>
+		    </packing>
 		  </child>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkVBox" id="vbox3">
-		  <property name="border_width">6</property>
-		  <property name="visible">True</property>
-		  <property name="homogeneous">False</property>
-		  <property name="spacing">3</property>
 
 		  <child>
-		    <widget class="GtkFrame" id="frame5">
+		    <widget class="GtkVBox" id="pool-details">
 		      <property name="visible">True</property>
-		      <property name="label_xalign">0</property>
-		      <property name="label_yalign">0.5</property>
-		      <property name="shadow_type">GTK_SHADOW_NONE</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">3</property>
 
 		      <child>
-			<widget class="GtkAlignment" id="alignment5">
+			<widget class="GtkTable" id="table5">
+			  <property name="border_width">6</property>
 			  <property name="visible">True</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xscale">1</property>
-			  <property name="yscale">1</property>
-			  <property name="top_padding">0</property>
-			  <property name="bottom_padding">0</property>
-			  <property name="left_padding">12</property>
-			  <property name="right_padding">0</property>
+			  <property name="n_rows">5</property>
+			  <property name="n_columns">2</property>
+			  <property name="homogeneous">False</property>
+			  <property name="row_spacing">3</property>
+			  <property name="column_spacing">8</property>
 
 			  <child>
-			    <widget class="GtkTable" id="table5">
-			      <property name="border_width">6</property>
+			    <widget class="GtkLabel" id="label73">
 			      <property name="visible">True</property>
-			      <property name="n_rows">2</property>
-			      <property name="n_columns">2</property>
+			      <property name="label" translatable="yes">Pool Type:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="pool-type">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Pool Type</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="pool-name">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">&lt;b&gt;Poolname:&lt;/b&gt;</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">True</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="pool-sizes">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;1234 GB Free&lt;/span&gt; / &lt;i&gt;6000 GB In Use&lt;/i&gt;</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">True</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label60">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Location:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkEntry" id="pool-location">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="editable">False</property>
+			      <property name="visibility">True</property>
+			      <property name="max_length">0</property>
+			      <property name="text" translatable="yes"></property>
+			      <property name="has_frame">True</property>
+			      <property name="invisible_char">•</property>
+			      <property name="activates_default">False</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label75">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">State:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">3</property>
+			      <property name="bottom_attach">4</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox7">
+			      <property name="visible">True</property>
 			      <property name="homogeneous">False</property>
-			      <property name="row_spacing">3</property>
-			      <property name="column_spacing">3</property>
+			      <property name="spacing">3</property>
 
 			      <child>
-				<widget class="GtkLabel" id="label59">
+				<widget class="GtkImage" id="pool-state-icon">
 				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">Location:</property>
+				  <property name="xalign">0</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="pool-state">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Active</property>
 				  <property name="use_underline">False</property>
 				  <property name="use_markup">False</property>
 				  <property name="justify">GTK_JUSTIFY_LEFT</property>
 				  <property name="wrap">False</property>
 				  <property name="selectable">False</property>
-				  <property name="xalign">1</property>
+				  <property name="xalign">0.5</property>
 				  <property name="yalign">0.5</property>
 				  <property name="xpad">0</property>
 				  <property name="ypad">0</property>
@@ -1805,115 +1990,467 @@
 				  <property name="angle">0</property>
 				</widget>
 				<packing>
-				  <property name="left_attach">0</property>
-				  <property name="right_attach">1</property>
-				  <property name="top_attach">1</property>
-				  <property name="bottom_attach">2</property>
-				  <property name="x_options">fill</property>
-				  <property name="y_options"></property>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
 				</packing>
 			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">3</property>
+			      <property name="bottom_attach">4</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label76">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Autostart:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">4</property>
+			      <property name="bottom_attach">5</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="pool-autostart">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Some label</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			      <signal name="toggled" handler="on_pool_autostart_toggled" last_modification_time="Thu, 07 Aug 2008 01:27:28 GMT"/>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">4</property>
+			      <property name="bottom_attach">5</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkVBox" id="vbox6">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">3</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label77">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">&lt;b&gt;Volumes&lt;/b&gt;</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">True</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkScrolledWindow" id="scrolledwindow5">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+			      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+			      <property name="shadow_type">GTK_SHADOW_IN</property>
+			      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
 			      <child>
-				<widget class="GtkEntry" id="storage-location">
+				<widget class="GtkTreeView" id="vol-list">
 				  <property name="visible">True</property>
 				  <property name="can_focus">True</property>
-				  <property name="editable">False</property>
-				  <property name="visibility">True</property>
-				  <property name="max_length">0</property>
-				  <property name="text" translatable="yes"></property>
-				  <property name="has_frame">True</property>
-				  <property name="invisible_char">•</property>
-				  <property name="activates_default">False</property>
-				  <accessibility>
-				    <atkproperty name="AtkObject::accessible_name" translatable="yes">Storage Location</atkproperty>
-				  </accessibility>
+				  <property name="headers_visible">True</property>
+				  <property name="rules_hint">False</property>
+				  <property name="reorderable">False</property>
+				  <property name="enable_search">True</property>
+				  <property name="fixed_height_mode">False</property>
+				  <property name="hover_selection">False</property>
+				  <property name="hover_expand">False</property>
 				</widget>
-				<packing>
-				  <property name="left_attach">1</property>
-				  <property name="right_attach">2</property>
-				  <property name="top_attach">1</property>
-				  <property name="bottom_attach">2</property>
-				  <property name="y_options"></property>
-				</packing>
 			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">True</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">True</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="shrink">True</property>
+		      <property name="resize">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox9">
+		  <property name="border_width">3</property>
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkHBox" id="hbox10">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkButton" id="pool-add">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_pool_add_clicked" last_modification_time="Thu, 07 Aug 2008 01:22:11 GMT"/>
+
+			  <child>
+			    <widget class="GtkImage" id="image4">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-add</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pool-start">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_pool_start_clicked" last_modification_time="Thu, 07 Aug 2008 01:24:39 GMT"/>
+
+			  <child>
+			    <widget class="GtkImage" id="someicon">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-media-play</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pool-stop">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_pool_stop_clicked" last_modification_time="Thu, 07 Aug 2008 01:24:56 GMT"/>
+
+			  <child>
+			    <widget class="GtkImage" id="image6">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-cancel</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pool-delete">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_pool_delete_clicked" last_modification_time="Thu, 07 Aug 2008 01:25:09 GMT"/>
+
+			  <child>
+			    <widget class="GtkImage" id="image7">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-delete</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHBox" id="hbox11">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkButton" id="vol-add">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_vol_add_clicked" last_modification_time="Thu, 07 Aug 2008 03:19:43 GMT"/>
+
+			  <child>
+			    <widget class="GtkAlignment" id="alignment9">
+			      <property name="visible">True</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xscale">0</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
 
 			      <child>
-				<widget class="GtkLabel" id="label68">
+				<widget class="GtkHBox" id="hbox13">
 				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">Name:</property>
-				  <property name="use_underline">False</property>
-				  <property name="use_markup">False</property>
-				  <property name="justify">GTK_JUSTIFY_LEFT</property>
-				  <property name="wrap">False</property>
-				  <property name="selectable">False</property>
-				  <property name="xalign">1</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
-				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-				  <property name="width_chars">-1</property>
-				  <property name="single_line_mode">False</property>
-				  <property name="angle">0</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">2</property>
+
+				  <child>
+				    <widget class="GtkImage" id="image8">
+				      <property name="visible">True</property>
+				      <property name="stock">gtk-new</property>
+				      <property name="icon_size">4</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkLabel" id="somelabel">
+				      <property name="visible">True</property>
+				      <property name="label" translatable="yes">New Volume</property>
+				      <property name="use_underline">True</property>
+				      <property name="use_markup">False</property>
+				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+				      <property name="wrap">False</property>
+				      <property name="selectable">False</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
 				</widget>
-				<packing>
-				  <property name="left_attach">0</property>
-				  <property name="right_attach">1</property>
-				  <property name="top_attach">0</property>
-				  <property name="bottom_attach">1</property>
-				  <property name="x_options">fill</property>
-				  <property name="y_options"></property>
-				</packing>
-			      </child>
-
-			      <child>
-				<widget class="GtkEntry" id="storage-name">
-				  <property name="visible">True</property>
-				  <property name="can_focus">True</property>
-				  <property name="editable">False</property>
-				  <property name="visibility">True</property>
-				  <property name="max_length">0</property>
-				  <property name="text" translatable="yes"></property>
-				  <property name="has_frame">True</property>
-				  <property name="invisible_char">•</property>
-				  <property name="activates_default">False</property>
-				  <accessibility>
-				    <atkproperty name="AtkObject::accessible_name" translatable="yes">Storage Name</atkproperty>
-				  </accessibility>
-				</widget>
-				<packing>
-				  <property name="left_attach">1</property>
-				  <property name="right_attach">2</property>
-				  <property name="top_attach">0</property>
-				  <property name="bottom_attach">1</property>
-				  <property name="y_options"></property>
-				</packing>
 			      </child>
 			    </widget>
 			  </child>
 			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
 		      </child>
 
 		      <child>
-			<widget class="GtkLabel" id="label62">
+			<widget class="GtkButton" id="vol-delete">
 			  <property name="visible">True</property>
-			  <property name="label" translatable="yes">&lt;b&gt;Basic details&lt;/b&gt;</property>
-			  <property name="use_underline">False</property>
-			  <property name="use_markup">True</property>
-			  <property name="justify">GTK_JUSTIFY_LEFT</property>
-			  <property name="wrap">False</property>
-			  <property name="selectable">False</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-			  <property name="width_chars">-1</property>
-			  <property name="single_line_mode">False</property>
-			  <property name="angle">0</property>
+			  <property name="can_focus">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_vol_delete_clicked" last_modification_time="Thu, 07 Aug 2008 01:26:50 GMT"/>
+
+			  <child>
+			    <widget class="GtkAlignment" id="alignment10">
+			      <property name="visible">True</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xscale">0</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
+
+			      <child>
+				<widget class="GtkHBox" id="hbox14">
+				  <property name="visible">True</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">2</property>
+
+				  <child>
+				    <widget class="GtkImage" id="image9">
+				      <property name="visible">True</property>
+				      <property name="stock">gtk-delete</property>
+				      <property name="icon_size">4</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkLabel" id="label82">
+				      <property name="visible">True</property>
+				      <property name="label" translatable="yes">Delete Volume</property>
+				      <property name="use_underline">True</property>
+				      <property name="use_markup">False</property>
+				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+				      <property name="wrap">False</property>
+				      <property name="selectable">False</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			  </child>
 			</widget>
 			<packing>
-			  <property name="type">label_item</property>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pool-apply">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label">gtk-apply</property>
+			  <property name="use_stock">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_pool_apply_clicked" last_modification_time="Fri, 08 Aug 2008 01:11:49 GMT"/>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
 			</packing>
 		      </child>
 		    </widget>
@@ -1923,47 +2460,10 @@
 		      <property name="fill">True</property>
 		    </packing>
 		  </child>
-
-		  <child>
-		    <widget class="GtkHSeparator" id="hseparator2">
-		      <property name="visible">True</property>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">False</property>
-		    </packing>
-		  </child>
-
-		  <child>
-		    <widget class="GtkHButtonBox" id="hbuttonbox2">
-		      <property name="border_width">6</property>
-		      <property name="visible">True</property>
-		      <property name="layout_style">GTK_BUTTONBOX_END</property>
-		      <property name="spacing">3</property>
-
-		      <child>
-			<widget class="GtkButton" id="storage-apply">
-			  <property name="visible">True</property>
-			  <property name="can_default">True</property>
-			  <property name="can_focus">True</property>
-			  <property name="label">gtk-apply</property>
-			  <property name="use_stock">True</property>
-			  <property name="relief">GTK_RELIEF_NORMAL</property>
-			  <property name="focus_on_click">True</property>
-			</widget>
-		      </child>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">False</property>
-		      <property name="fill">False</property>
-		    </packing>
-		  </child>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>
-		  <property name="expand">True</property>
+		  <property name="expand">False</property>
 		  <property name="fill">True</property>
 		</packing>
 	      </child>

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]