reimplement device actions in a less boilerplatey fashion
This commit is contained in:
parent
de3ae13592
commit
1cae2592e0
|
@ -52,7 +52,7 @@ from subiquitycore.ui.table import ColSpec, Table, TableRow
|
||||||
from subiquitycore.ui.utils import button_pile, Color, Padding, screen
|
from subiquitycore.ui.utils import button_pile, Color, Padding, screen
|
||||||
from subiquitycore.view import BaseView
|
from subiquitycore.view import BaseView
|
||||||
|
|
||||||
from subiquity.models.filesystem import DeviceAction, Disk, humanize_size
|
from subiquity.models.filesystem import DeviceAction, humanize_size
|
||||||
|
|
||||||
from .delete import ConfirmDeleteStretchy
|
from .delete import ConfirmDeleteStretchy
|
||||||
from .disk_info import DiskInfoStretchy
|
from .disk_info import DiskInfoStretchy
|
||||||
|
@ -249,6 +249,12 @@ class MountList(WidgetWrap):
|
||||||
self.table._w.focus_position = len(rows) - 1
|
self.table._w.focus_position = len(rows) - 1
|
||||||
|
|
||||||
|
|
||||||
|
def _stretchy_shower(cls):
|
||||||
|
def impl(self, device):
|
||||||
|
self.parent.show_stretchy_overlay(cls(self.parent, device))
|
||||||
|
return impl
|
||||||
|
|
||||||
|
|
||||||
class DeviceList(WidgetWrap):
|
class DeviceList(WidgetWrap):
|
||||||
|
|
||||||
def __init__(self, parent, show_available):
|
def __init__(self, parent, show_available):
|
||||||
|
@ -268,39 +274,25 @@ class DeviceList(WidgetWrap):
|
||||||
# I don't really know why this is required:
|
# I don't really know why this is required:
|
||||||
self.table._select_first_selectable()
|
self.table._select_first_selectable()
|
||||||
|
|
||||||
def _device_action(self, sender, action, device):
|
_disk_INFO = _stretchy_shower(DiskInfoStretchy)
|
||||||
log.debug('_device_action %s %s', action, device)
|
_disk_PARTITION = _stretchy_shower(PartitionStretchy)
|
||||||
overlay = None
|
_disk_FORMAT = _stretchy_shower(FormatEntireStretchy)
|
||||||
if action == DeviceAction.INFO:
|
|
||||||
if isinstance(device, Disk):
|
|
||||||
overlay = DiskInfoStretchy(self.parent, device)
|
|
||||||
if action == DeviceAction.PARTITION:
|
|
||||||
overlay = PartitionStretchy(self.parent, device)
|
|
||||||
if action == DeviceAction.FORMAT:
|
|
||||||
overlay = FormatEntireStretchy(self.parent, device)
|
|
||||||
if overlay is not None:
|
|
||||||
self.parent.show_stretchy_overlay(overlay)
|
|
||||||
else:
|
|
||||||
raise Exception("unexpected action on device")
|
|
||||||
|
|
||||||
def _partition_action(self, sender, action, part):
|
_partition_EDIT = _stretchy_shower(
|
||||||
log.debug('_partition_action %s %s', action, part)
|
lambda parent, part: PartitionStretchy(parent, part.device, part))
|
||||||
overlay = None
|
_partition_DELETE = _stretchy_shower(
|
||||||
if action == DeviceAction.EDIT:
|
lambda parent, part: ConfirmDeleteStretchy(
|
||||||
overlay = PartitionStretchy(self.parent, part.device, part)
|
parent,
|
||||||
if action == DeviceAction.DELETE:
|
part,
|
||||||
overlay = ConfirmDeleteStretchy(
|
parent.controller.delete_partition))
|
||||||
self.parent,
|
_partition_FORMAT = _disk_FORMAT
|
||||||
part,
|
|
||||||
self.parent.controller.delete_partition)
|
|
||||||
if action == DeviceAction.FORMAT:
|
|
||||||
overlay = FormatEntireStretchy(self.parent, part)
|
|
||||||
if overlay is not None:
|
|
||||||
self.parent.show_stretchy_overlay(overlay)
|
|
||||||
else:
|
|
||||||
raise Exception("unexpected action on partition")
|
|
||||||
|
|
||||||
def _action_menu_for_device(self, device, cb):
|
def _action(self, sender, action, device):
|
||||||
|
log.debug('_action %s %s', action, device)
|
||||||
|
meth_name = '_{}_{}'.format(device.type, action.name)
|
||||||
|
getattr(self, meth_name)(device)
|
||||||
|
|
||||||
|
def _action_menu_for_device(self, device):
|
||||||
delete_btn = Color.danger_button(ActionMenuButton(_("Delete")))
|
delete_btn = Color.danger_button(ActionMenuButton(_("Delete")))
|
||||||
device_actions = [
|
device_actions = [
|
||||||
(_("Information"), DeviceAction.INFO),
|
(_("Information"), DeviceAction.INFO),
|
||||||
|
@ -312,7 +304,7 @@ class DeviceList(WidgetWrap):
|
||||||
menu = ActionMenu([
|
menu = ActionMenu([
|
||||||
(label, device.supports_action(action), action)
|
(label, device.supports_action(action), action)
|
||||||
for label, action in device_actions])
|
for label, action in device_actions])
|
||||||
connect_signal(menu, 'action', cb, device)
|
connect_signal(menu, 'action', self._action, device)
|
||||||
return menu
|
return menu
|
||||||
|
|
||||||
def refresh_model_inputs(self):
|
def refresh_model_inputs(self):
|
||||||
|
@ -350,7 +342,7 @@ class DeviceList(WidgetWrap):
|
||||||
Text(_("TYPE")),
|
Text(_("TYPE")),
|
||||||
]))
|
]))
|
||||||
for device in devices:
|
for device in devices:
|
||||||
menu = self._action_menu_for_device(device, self._device_action)
|
menu = self._action_menu_for_device(device)
|
||||||
row = TableRow([
|
row = TableRow([
|
||||||
Text(device.label),
|
Text(device.label),
|
||||||
Text("{:>9}".format(humanize_size(device.size))),
|
Text("{:>9}".format(humanize_size(device.size))),
|
||||||
|
@ -391,8 +383,7 @@ class DeviceList(WidgetWrap):
|
||||||
part_size = "{:>9} ({}%)".format(
|
part_size = "{:>9} ({}%)".format(
|
||||||
humanize_size(part.size),
|
humanize_size(part.size),
|
||||||
int(100 * part.size / device.size))
|
int(100 * part.size / device.size))
|
||||||
menu = self._action_menu_for_device(
|
menu = self._action_menu_for_device(part)
|
||||||
part, self._partition_action)
|
|
||||||
row = TableRow([
|
row = TableRow([
|
||||||
Text(label),
|
Text(label),
|
||||||
(2, Text(part_size)),
|
(2, Text(part_size)),
|
||||||
|
|
Loading…
Reference in New Issue