add global quit button
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
4aaf10b687
commit
0bf24230a0
|
@ -1,5 +1,8 @@
|
|||
from asciimatics.exceptions import NextScene
|
||||
from asciimatics.widgets import Frame, Layout, Divider, Button, Label
|
||||
from asciimatics.event import KeyboardEvent
|
||||
from asciimatics.exceptions import NextScene, StopApplication
|
||||
from asciimatics.screen import Screen
|
||||
from asciimatics.widgets import Frame, Layout, Divider, Button, Label, \
|
||||
PopUpDialog
|
||||
|
||||
|
||||
class CeoFrame(Frame):
|
||||
|
@ -14,6 +17,7 @@ class CeoFrame(Frame):
|
|||
title=None,
|
||||
save_data=False, # whether to save widget state for resizing
|
||||
has_dynamic_layouts=False, # whether layouts are created on load
|
||||
escape_on_q=False, # whether to quit when 'q' is pressed
|
||||
):
|
||||
super().__init__(
|
||||
screen,
|
||||
|
@ -30,6 +34,9 @@ class CeoFrame(Frame):
|
|||
self._name = name
|
||||
self._loaded = False
|
||||
self._has_dynamic_layouts = has_dynamic_layouts
|
||||
self._quit_keys = [Screen.KEY_ESCAPE]
|
||||
if escape_on_q:
|
||||
self._quit_keys.append(ord('q'))
|
||||
# sanity check
|
||||
if save_data:
|
||||
assert name in model.viewdata
|
||||
|
@ -138,3 +145,24 @@ class CeoFrame(Frame):
|
|||
|
||||
def clear_flash_message(self):
|
||||
self.flash_message('')
|
||||
|
||||
def process_event(self, event):
|
||||
if not isinstance(event, KeyboardEvent):
|
||||
return super().process_event(event)
|
||||
c = event.key_code
|
||||
# Stop on 'q' or 'Esc'
|
||||
if c in self._quit_keys:
|
||||
self._scene.add_effect(PopUpDialog(
|
||||
self.screen,
|
||||
'Are you sure you want to quit?',
|
||||
['Yes', 'No'],
|
||||
has_shadow=True,
|
||||
on_close=self._quit_on_yes,
|
||||
))
|
||||
return super().process_event(event)
|
||||
|
||||
@staticmethod
|
||||
def _quit_on_yes(selected):
|
||||
# Yes is the first button
|
||||
if selected == 0:
|
||||
raise StopApplication("User terminated app")
|
||||
|
|
|
@ -9,6 +9,7 @@ class ConfirmView(CeoFrame):
|
|||
screen, height, width, model, 'Confirm',
|
||||
on_load=self._confirmview_on_load, title='Confirmation',
|
||||
has_dynamic_layouts=True,
|
||||
escape_on_q=True,
|
||||
)
|
||||
|
||||
def _add_line(self, text: str = ''):
|
||||
|
|
|
@ -11,6 +11,7 @@ class ResultView(CeoFrame):
|
|||
screen, height, width, model, 'Result',
|
||||
on_load=self._resultview_on_load, title='Result',
|
||||
has_dynamic_layouts=True,
|
||||
escape_on_q=True,
|
||||
)
|
||||
|
||||
# TODO: deduplicate this from ConfirmView
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
import functools
|
||||
|
||||
from asciimatics.widgets import Frame, ListBox, Layout, Divider, Button, Label
|
||||
from asciimatics.widgets import ListBox, Layout, Divider, Button, Label
|
||||
from asciimatics.exceptions import NextScene, StopApplication
|
||||
|
||||
from .CeoFrame import CeoFrame
|
||||
|
||||
class WelcomeView(Frame):
|
||||
|
||||
class WelcomeView(CeoFrame):
|
||||
def __init__(self, screen, width, height, model):
|
||||
super().__init__(
|
||||
screen,
|
||||
height,
|
||||
width,
|
||||
screen, height, width, model, 'Welcome',
|
||||
title='CSC Electronic Office',
|
||||
escape_on_q=True,
|
||||
)
|
||||
self._model = model
|
||||
members_menu_items = [
|
||||
('Add member', 'AddUser'),
|
||||
('Add club rep', 'AddUser'),
|
||||
|
|
Loading…
Reference in New Issue