diff --git a/horizon/horizon/dashboards/nova/instances_and_volumes/instances/tables.py b/horizon/horizon/dashboards/nova/instances_and_volumes/instances/tables.py index 5d95cfe..57796db 100644 --- a/horizon/horizon/dashboards/nova/instances_and_volumes/instances/tables.py +++ b/horizon/horizon/dashboards/nova/instances_and_volumes/instances/tables.py @@ -70,50 +70,66 @@ class RebootInstance(tables.BatchAction): api.server_reboot(request, obj_id) -class TogglePause(tables.BatchAction): +class TogglePause(tables.ToggleBatchAction): name = "pause" action_present = _("Pause") + action_present_toggle = _("Unpause") action_past = _("Paused") + action_past_toggle = _("Unpaused") data_type_singular = _("Instance") data_type_plural = _("Instances") + def update(self, request, instance): + if getattr(self, 'paused', False): + #toggle action button name + self._toggle_verbose('present') + def allowed(self, request, instance=None): + self.paused = False if not instance: - return True + return False self.paused = instance.status == "PAUSED" - if self.paused: - self.action_present = _("Unpause") - self.action_past = _("Unpaused") - return instance.status in ACTIVE_STATES + + return instance.status in ACTIVE_STATES or self.paused def action(self, request, obj_id): - if getattr(self, 'paused', False): - api.server_pause(request, obj_id) - else: + if self.paused: api.server_unpause(request, obj_id) + #toggle action result name + self._toggle_verbose('past') + else: + api.server_pause(request, obj_id) -class ToggleSuspend(tables.BatchAction): +class ToggleSuspend(tables.ToggleBatchAction): name = "suspend" action_present = _("Suspend") + action_present_toggle = _("Resume") action_past = _("Suspended") + action_past_toggle = _("Resumed") data_type_singular = _("Instance") data_type_plural = _("Instances") + def update(self, request, instance): + if getattr(self, 'suspended', False): + #toggle action button name + self._toggle_verbose('present') + def allowed(self, request, instance=None): + self.suspended = False if not instance: - return True + return False self.suspended = instance.status == "SUSPENDED" - if self.suspended: - self.action_present = _("Resume") - self.action_past = _("Resumed") - return instance.status in ACTIVE_STATES + + return instance.status in ACTIVE_STATES or self.suspended def action(self, request, obj_id): - if getattr(self, 'suspended', False): - api.server_suspend(request, obj_id) - else: + if self.suspended: api.server_resume(request, obj_id) + #toggle action result name + self._toggle_verbose('past') + else: + api.server_suspend(request, obj_id) class LaunchLink(tables.LinkAction): diff --git a/horizon/horizon/tables/__init__.py b/horizon/horizon/tables/__init__.py index 24bb51b..ba0f018 100644 --- a/horizon/horizon/tables/__init__.py +++ b/horizon/horizon/tables/__init__.py @@ -16,6 +16,6 @@ # Convenience imports for public API components. from .actions import (Action, BatchAction, DeleteAction, - LinkAction, FilterAction) + LinkAction, FilterAction, ToggleBatchAction) from .base import DataTable, Column from .views import DataTableView, MultiTableView diff --git a/horizon/horizon/tables/actions.py b/horizon/horizon/tables/actions.py index 64c08d6..d2dcd6f 100644 --- a/horizon/horizon/tables/actions.py +++ b/horizon/horizon/tables/actions.py @@ -428,3 +428,16 @@ class DeleteAction(BatchAction): def delete(self, request, obj_id): raise NotImplementedError("DeleteAction must define a delete method.") + + +class ToggleBatchAction(BatchAction): + """ + Toggles verbose options when switching behavior + """ + def _toggle_verbose(self, what='present'): + if what == 'present': + self.action_present = self.action_present_toggle + else: + self.action_past = self.action_past_toggle + self.verbose_name = self._conjugate() + self.verbose_name_plural = self._conjugate('plural')