This is to make way for the boot device picking option. --- pyanaconda/ui/gui/spokes/storage.glade | 83 ++++++++++++++++------------------ pyanaconda/ui/gui/spokes/storage.py | 17 +++---- 2 files changed, 49 insertions(+), 51 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/storage.glade b/pyanaconda/ui/gui/spokes/storage.glade index 7e62593..42ca926 100644 --- a/pyanaconda/ui/gui/spokes/storage.glade +++ b/pyanaconda/ui/gui/spokes/storage.glade @@ -24,13 +24,11 @@ <child> <object class="GtkButton" id="options1_cancel_button"> <property name="label" translatable="yes">Cancel & _add more disks</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_cancel_clicked" swapped="no"/> </object> @@ -43,14 +41,12 @@ <child> <object class="GtkButton" id="options_continue_button1"> <property name="label" translatable="yes">_Continue</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="has_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_continue_clicked" swapped="no"/> </object> @@ -108,11 +104,9 @@ <child> <object class="GtkCheckButton" id="options1_custom_check"> <property name="label" translatable="yes">Let me customize the _partitioning of the disks instead.</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> @@ -161,13 +155,11 @@ <child> <object class="GtkButton" id="options2_cancel_button"> <property name="label" translatable="yes">Cancel & _add more disks</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_cancel_clicked" swapped="no"/> </object> @@ -180,13 +172,11 @@ <child> <object class="GtkButton" id="options2_modify_sw_button"> <property name="label" translatable="yes">_Modify software selection</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_modify_sw_clicked" swapped="no"/> </object> @@ -200,14 +190,12 @@ <child> <object class="GtkButton" id="options2_reclaim_button"> <property name="label" translatable="yes">Reclaim _space</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="has_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_reclaim_clicked" swapped="no"/> </object> @@ -251,11 +239,9 @@ <child> <object class="GtkCheckButton" id="options2_custom_check"> <property name="label" translatable="yes">I don't need help; let me _review & customize disk partitioning to reclaim space.</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> @@ -442,13 +428,11 @@ <child> <object class="GtkButton" id="options3_quit_button"> <property name="label" translatable="yes">_Quit installer</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_quit_clicked" swapped="no"/> </object> @@ -461,13 +445,11 @@ <child> <object class="GtkButton" id="options3_modify_sw_button"> <property name="label" translatable="yes">_Modify software selection</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_modify_sw_clicked" swapped="no"/> </object> @@ -481,14 +463,12 @@ <child> <object class="GtkButton" id="options3_cancel_button"> <property name="label" translatable="yes">_Cancel</property> - <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="has_focus">True</property> <property name="receives_default">True</property> <property name="halign">center</property> <property name="border_width">6</property> - <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <signal name="clicked" handler="on_cancel_clicked" swapped="no"/> </object> @@ -776,25 +756,45 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">3</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkBox" id="box2"> + <object class="GtkGrid" id="grid3"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">6</property> <property name="margin_right">6</property> <property name="margin_bottom">6</property> - <property name="spacing">6</property> + <property name="row_spacing">6</property> + <property name="column_spacing">6</property> + <child> + <object class="GtkButton" id="continue_button"> + <property name="label" translatable="yes">_CONTINUE</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">end</property> + <property name="valign">end</property> + <property name="hexpand">True</property> + <property name="use_underline">True</property> + <property name="xalign">1</property> + <signal name="clicked" handler="on_continue_clicked" swapped="no"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">2</property> + </packing> + </child> <child> <object class="GtkButton" id="summary_button"> - <property name="label" translatable="yes">summary</property> - <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">Full disk summary and options...</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> - <property name="use_action_appearance">False</property> + <property name="halign">start</property> <property name="relief">none</property> <property name="use_underline">True</property> <property name="focus_on_click">False</property> @@ -802,35 +802,32 @@ <signal name="clicked" handler="on_summary_clicked" swapped="no"/> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> </packing> </child> <child> - <object class="GtkButton" id="continue_button"> - <property name="label" translatable="yes">_CONTINUE</property> - <property name="use_action_appearance">False</property> + <object class="GtkLabel" id="summary_label"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_action_appearance">False</property> - <property name="use_underline">True</property> - <property name="xalign">1</property> - <signal name="clicked" handler="on_continue_clicked" swapped="no"/> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="margin_left">6</property> + <property name="label" translatable="yes">summary</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">end</property> - <property name="position">1</property> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">4</property> + <property name="position">2</property> </packing> </child> </object> diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index 535671e..3deeae2 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -413,8 +413,10 @@ class StorageSpoke(NormalSpoke, StorageChecker):
NormalSpoke.initialize(self)
- summary_label = self.builder.get_object("summary_button").get_children()[0] - summary_label.set_use_markup(True) + label = self.builder.get_object("summary_button").get_children()[0] + markup = "<span foreground='blue'><u>%s</u></span>" % label.get_text() + label.set_use_markup(True) + label.set_markup(markup)
self.local_disks_box = self.builder.get_object("local_disks_box") #specialized_disks_box = self.builder.get_object("specialized_disks_box") @@ -482,12 +484,11 @@ class StorageSpoke(NormalSpoke, StorageChecker): free += free_space[disk.name][0] count += 1
- summary = (P_(("%d disk selected; %s capacity; %s free ..."), - ("%d disks selected; %s capacity; %s free ..."), + summary = (P_(("%d disk selected; %s capacity; %s free"), + ("%d disks selected; %s capacity; %s free"), count) % (count, str(Size(spec="%s MB" % capacity)), free)) - markup = "<span foreground='blue'><u>%s</u></span>" % summary - summary_label = self.builder.get_object("summary_button").get_children()[0] - summary_label.set_markup(markup) + summary_label = self.builder.get_object("summary_label") + summary_label.set_text(summary)
if count == 0: self.window.set_info(Gtk.MessageType.WARNING, _("No disks selected; please select at least one disk to install to.")) @@ -495,7 +496,7 @@ class StorageSpoke(NormalSpoke, StorageChecker): self.window.clear_info()
self.builder.get_object("continue_button").set_sensitive(count > 0) - self.builder.get_object("summary_button").set_sensitive(count > 0) + self.builder.get_object("summary_label").set_sensitive(count > 0)
def _update_disk_list(self): """ Update self.selected_disks based on the UI. """
--- pyanaconda/ui/gui/spokes/lib/cart.glade | 71 +++++++++++++++++++++------ pyanaconda/ui/gui/spokes/lib/cart.py | 86 ++++++++++++++++++++++++--------- pyanaconda/ui/gui/spokes/storage.py | 2 +- 3 files changed, 122 insertions(+), 37 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/lib/cart.glade b/pyanaconda/ui/gui/spokes/lib/cart.glade index bb45172..c2334ee 100644 --- a/pyanaconda/ui/gui/spokes/lib/cart.glade +++ b/pyanaconda/ui/gui/spokes/lib/cart.glade @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> - <!-- interface-requires AnacondaWidgets 1.0 --> <object class="GtkListStore" id="disk_store"> <columns> + <!-- column-name isBootDisk --> + <column type="gboolean"/> <!-- column-name Description --> <column type="gchararray"/> <!-- column-name capacity --> @@ -104,6 +105,19 @@ <object class="GtkTreeSelection" id="disk_selection"/> </child> <child> + <object class="GtkTreeViewColumn" id="boot_column"> + <property name="title" translatable="yes">Boot</property> + <child> + <object class="GtkCellRendererPixbuf" id="boot_renderer"> + <property name="stock_id">gtk-apply</property> + </object> + <attributes> + <attribute name="visible">0</attribute> + </attributes> + </child> + </object> + </child> + <child> <object class="GtkTreeViewColumn" id="description_column"> <property name="spacing">6</property> <property name="title" translatable="yes">Description</property> @@ -111,7 +125,7 @@ <child> <object class="GtkCellRendererText" id="description_renderer"/> <attributes> - <attribute name="text">0</attribute> + <attribute name="text">1</attribute> </attributes> </child> </object> @@ -124,7 +138,7 @@ <child> <object class="GtkCellRendererText" id="capacity_renderer"/> <attributes> - <attribute name="text">1</attribute> + <attribute name="text">2</attribute> </attributes> </child> </object> @@ -136,7 +150,7 @@ <child> <object class="GtkCellRendererText" id="free_renderer"/> <attributes> - <attribute name="text">2</attribute> + <attribute name="text">3</attribute> </attributes> </child> </object> @@ -148,7 +162,7 @@ <child> <object class="GtkCellRendererText" id="id_renderer"/> <attributes> - <attribute name="text">3</attribute> + <attribute name="text">4</attribute> </attributes> </child> </object> @@ -165,16 +179,45 @@ </packing> </child> <child> - <object class="GtkButton" id="remove_button"> - <property name="label">_Remove</property> - <property name="use_action_appearance">False</property> + <object class="GtkBox" id="box1"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="halign">start</property> - <property name="use_action_appearance">False</property> - <property name="use_underline">True</property> - <signal name="clicked" handler="on_remove_clicked" swapped="no"/> + <property name="can_focus">False</property> + <property name="spacing">12</property> + <child> + <object class="GtkButton" id="set_as_boot_button"> + <property name="label" translatable="yes">_Set as Boot Device</property> + <property name="use_action_appearance">False</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="on_set_as_boot_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="remove_button"> + <property name="label">_Remove</property> + <property name="use_action_appearance">False</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">start</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="on_remove_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/lib/cart.py b/pyanaconda/ui/gui/spokes/lib/cart.py index 2c1f025..b3d437c 100644 --- a/pyanaconda/ui/gui/spokes/lib/cart.py +++ b/pyanaconda/ui/gui/spokes/lib/cart.py @@ -31,6 +31,13 @@ P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z)
__all__ = ["SelectedDisksDialog"]
+IS_BOOT_COL = 0 +DESCRIPTION_COL = 1 +SIZE_COL = 2 +FREE_SPACE_COL = 3 +SERIAL_COL = 4 +ID_COL = 5 + def size_str(mb): if isinstance(mb, Size): spec = str(mb) @@ -44,9 +51,14 @@ class SelectedDisksDialog(GUIObject): mainWidgetName = "selected_disks_dialog" uiFile = "spokes/lib/cart.glade"
+ def __init__(self, data, storage): + GUIObject.__init__(self, data) + self.storage = storage + def initialize(self, disks, free, showRemove=True): for disk in disks: - self._store.append([disk.description, + self._store.append([False, + disk.description, size_str(disk.size), size_str(free[disk.name][0]), disk.serial, @@ -57,6 +69,19 @@ class SelectedDisksDialog(GUIObject): if not showRemove: self.builder.get_object("remove_button").hide()
+ # Set up the default boot device. Use what's in the ksdata if anything, + # then fall back to the first device. + if self.data.bootloader.bootDrive: + dev = self.storage.devicetree.getDeviceByName(self.data.bootloader.bootDrive) + default_id = dev.id + else: + default_id = self.storage.disks[0].id + + for row in self._store: + if row[ID_COL] == default_id: + row[IS_BOOT_COL] = True + break + def refresh(self, disks, free, showRemove=True): super(SelectedDisksDialog, self).refresh()
@@ -88,8 +113,8 @@ class SelectedDisksDialog(GUIObject): free = 0 for row in self._store: count += 1 - size += Size(spec=row[1]) - free += Size(spec=row[2]) + size += Size(spec=row[SIZE_COL]) + free += Size(spec=row[FREE_SPACE_COL])
size = str(Size(bytes=long(size))).upper() free = str(Size(bytes=long(free))).upper() @@ -103,31 +128,48 @@ class SelectedDisksDialog(GUIObject):
# signal handlers def on_remove_clicked(self, button): - # remove the selected disk(s) from the list and update the summary label - #selected_refs = self._get_selection_refs() - #for ref in selected_refs: - # path = ref.get_path() - # itr = model.get_iter_from_string(path) - # self._store.remove(itr) model, itr = self._selection.get_selected() - if itr: - disk = None - for d in self.disks: - if d.id == self._store[itr][4]: - disk = d - break + if not itr: + return + + disk = self.storage.devicetree.getDeviceByID(self._store[itr][ID_COL]) + if not disk: + return + + # If this disk was marked as the boot device, just change to the first one + # instead. + resetBootDevice = self._store[itr][IS_BOOT_COL]
- if not disk: - return + # remove the selected disk(s) from the list and update the summary label + self._store.remove(itr) + self.disks.remove(disk) + + if resetBootDevice and len(self._store) > 0: + self._store[0][IS_BOOT_COL] = True
- self._store.remove(itr) - self.disks.remove(disk) - self._update_summary() + self._update_summary()
def on_close_clicked(self, button): - print "CLOSE CLICKED" + # Save the boot device setting. + for row in self._store: + if row[IS_BOOT_COL]: + dev = self.storage.devicetree.getDeviceByID(row[ID_COL]) + self.data.bootloader.bootDrive = dev.name + break
def on_selection_changed(self, *args): model, itr = self._selection.get_selected() if itr: - print "new selection: %s" % model.get_value(itr, 3) + print "new selection: %s" % model.get_value(itr, SERIAL_COL) + + def on_set_as_boot_clicked(self, button): + model, itr = self._selection.get_selected() + if not itr: + return + + # First make sure the previous device is unselected. + for row in self._store: + row[IS_BOOT_COL] = False + + # Now set the currently selected device to be the boot target. + self._store[itr][IS_BOOT_COL] = True diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index 3deeae2..ac19c9b 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -516,7 +516,7 @@ class StorageSpoke(NormalSpoke, StorageChecker): # show the selected disks dialog # pass in our disk list so hidden disks' free space is available free_space = self.storage.getFreeSpace(disks=self.disks) - dialog = SelectedDisksDialog(self.data,) + dialog = SelectedDisksDialog(self.data, self.storage) dialog.refresh([d for d in self.disks if d.name in self.selected_disks], free_space) rc = self.run_lightbox_dialog(dialog)
On Thu, 2012-10-04 at 12:19 -0400, Chris Lumens wrote:
pyanaconda/ui/gui/spokes/lib/cart.glade | 71 +++++++++++++++++++++------ pyanaconda/ui/gui/spokes/lib/cart.py | 86 ++++++++++++++++++++++++--------- pyanaconda/ui/gui/spokes/storage.py | 2 +- 3 files changed, 122 insertions(+), 37 deletions(-) diff --git a/pyanaconda/ui/gui/spokes/lib/cart.py b/pyanaconda/ui/gui/spokes/lib/cart.py index 2c1f025..b3d437c 100644 --- a/pyanaconda/ui/gui/spokes/lib/cart.py +++ b/pyanaconda/ui/gui/spokes/lib/cart.py @@ -31,6 +31,13 @@ P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z)
__all__ = ["SelectedDisksDialog"]
+IS_BOOT_COL = 0 +DESCRIPTION_COL = 1 +SIZE_COL = 2 +FREE_SPACE_COL = 3 +SERIAL_COL = 4 +ID_COL = 5
def size_str(mb): if isinstance(mb, Size): spec = str(mb) @@ -44,9 +51,14 @@ class SelectedDisksDialog(GUIObject): mainWidgetName = "selected_disks_dialog" uiFile = "spokes/lib/cart.glade"
- def __init__(self, data, storage):
GUIObject.__init__(self, data)
self.storage = storage
- def initialize(self, disks, free, showRemove=True): for disk in disks:
self._store.append([disk.description,
self._store.append([False,
disk.description, size_str(disk.size), size_str(free[disk.name][0]), disk.serial,
@@ -57,6 +69,19 @@ class SelectedDisksDialog(GUIObject): if not showRemove: self.builder.get_object("remove_button").hide()
# Set up the default boot device. Use what's in the ksdata if anything,
# then fall back to the first device.
if self.data.bootloader.bootDrive:
dev = self.storage.devicetree.getDeviceByName(self.data.bootloader.bootDrive)
default_id = dev.id
else:
default_id = self.storage.disks[0].id
Do we want to consider disks that are not currently selected? I think not. If I'm right, this lends itself to just iterating over disks here and self.disks elsewhere in the dialog instead of adding the storage arg to the constructor.
Dave
for row in self._store:
if row[ID_COL] == default_id:
row[IS_BOOT_COL] = True
break
- def refresh(self, disks, free, showRemove=True): super(SelectedDisksDialog, self).refresh()
@@ -88,8 +113,8 @@ class SelectedDisksDialog(GUIObject): free = 0 for row in self._store: count += 1
size += Size(spec=row[1])
free += Size(spec=row[2])
size += Size(spec=row[SIZE_COL])
free += Size(spec=row[FREE_SPACE_COL]) size = str(Size(bytes=long(size))).upper() free = str(Size(bytes=long(free))).upper()
@@ -103,31 +128,48 @@ class SelectedDisksDialog(GUIObject):
# signal handlers def on_remove_clicked(self, button):
# remove the selected disk(s) from the list and update the summary label
#selected_refs = self._get_selection_refs()
#for ref in selected_refs:
# path = ref.get_path()
# itr = model.get_iter_from_string(path)
# self._store.remove(itr) model, itr = self._selection.get_selected()
if itr:
disk = None
for d in self.disks:
if d.id == self._store[itr][4]:
disk = d
break
if not itr:
return
disk = self.storage.devicetree.getDeviceByID(self._store[itr][ID_COL])
if not disk:
return
# If this disk was marked as the boot device, just change to the first one
# instead.
resetBootDevice = self._store[itr][IS_BOOT_COL]
if not disk:
return
# remove the selected disk(s) from the list and update the summary label
self._store.remove(itr)
self.disks.remove(disk)
if resetBootDevice and len(self._store) > 0:
self._store[0][IS_BOOT_COL] = True
self._store.remove(itr)
self.disks.remove(disk)
self._update_summary()
self._update_summary()
def on_close_clicked(self, button):
print "CLOSE CLICKED"
# Save the boot device setting.
for row in self._store:
if row[IS_BOOT_COL]:
dev = self.storage.devicetree.getDeviceByID(row[ID_COL])
self.data.bootloader.bootDrive = dev.name
break
def on_selection_changed(self, *args): model, itr = self._selection.get_selected() if itr:
print "new selection: %s" % model.get_value(itr, 3)
print "new selection: %s" % model.get_value(itr, SERIAL_COL)
- def on_set_as_boot_clicked(self, button):
model, itr = self._selection.get_selected()
if not itr:
return
# First make sure the previous device is unselected.
for row in self._store:
row[IS_BOOT_COL] = False
# Now set the currently selected device to be the boot target.
self._store[itr][IS_BOOT_COL] = True
diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index 3deeae2..ac19c9b 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -516,7 +516,7 @@ class StorageSpoke(NormalSpoke, StorageChecker): # show the selected disks dialog # pass in our disk list so hidden disks' free space is available free_space = self.storage.getFreeSpace(disks=self.disks)
dialog = SelectedDisksDialog(self.data,)
dialog = SelectedDisksDialog(self.data, self.storage) dialog.refresh([d for d in self.disks if d.name in self.selected_disks], free_space) rc = self.run_lightbox_dialog(dialog)
anaconda-patches@lists.fedorahosted.org