fuel-menu/fuelmenu/common/dialog.py

66 lines
2.2 KiB
Python

#!/usr/bin/env python
# Copyright 2013 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import six
import urwid
import urwid.raw_display
import urwid.web_display
import fuelmenu.common.urwidwrapper as widget
blank = urwid.Divider()
class ModalDialog(urwid.WidgetWrap):
signals = ['close']
title = None
def __init__(self, title, body, escape_key, previous_widget, loop):
self.escape_key = escape_key
self.previous_widget = previous_widget
self.keep_open = True
self.loop = loop
if isinstance(body, six.string_types):
body = urwid.Text(body)
self.title = title
bodybox = urwid.LineBox(urwid.Pile([body, blank,
widget.Button("Close", self.close)]), title)
overlay = urwid.Overlay(urwid.Filler(bodybox), previous_widget,
'center', ('relative', 80), 'middle',
('relative', 80))
overlay_attrmap = urwid.AttrMap(overlay, "body")
super(ModalDialog, self).__init__(overlay_attrmap)
def close(self, _):
urwid.emit_signal(self, "close")
self.keep_open = False
self.loop.widget = self.previous_widget
def __repr__(self):
return "<%s title='%s' at %s>" % (self.__class__.__name__, self.title,
hex(id(self)))
def display_dialog(self, body, title, escape_key="esc"):
filler = urwid.Pile([body])
dialog = ModalDialog(title, filler, escape_key,
self.parent.mainloop.widget,
self.parent.mainloop)
self.parent.mainloop.widget = dialog
return dialog