Source code for snackbar

"""Widget to display a quick message to the user in an overlapping window that will disappear after a timeout"""
# Author(s): Davide.De-Marchi@ec.europa.eu
# Copyright © European Union 2022-2023
# 
# Licensed under the EUPL, Version 1.2 or as soon they will be approved by 
# the European Commission subsequent versions of the EUPL (the "Licence");
# 
# You may not use this work except in compliance with the Licence.
# 
# You may obtain a copy of the Licence at:
# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12

# Unless required by applicable law or agreed to in writing, software
# distributed under the Licence is distributed on an "AS IS"
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied.
# 
# See the Licence for the specific language governing permissions and
# limitations under the Licence.
import ipyvuetify as v
import textwrap

try:
    from . import settings
except:
    import settings


#####################################################################################################################################################
# Display a quick message to a user
#####################################################################################################################################################
[docs]class snackbar(): """ Widget to display a quick message to the user in an overlapping window that will disappear after a timeout. Parameters ---------- title : str, optional Title of the message text : str, optional Text of the message show : bool, optional Flag to control the immediate show of the message to the user (default is True) color : str, optional Color used for the widget (default is the color_first defined in the settings.py module) dark : bool, optional Flag that controls the color of the text in foreground (if True, the text will be displayed in white, elsewhere in black) wrapwidth : int optional Number of chars for each line of the message (default is 80) timeout : int, optional Timeout in milliseconds before the widget disappears (default is 10000, 10 seconds) output : ipywidgets.Output, optional Output widget on which the snackbar has to be displayed Example ------- Creation and display of a snackbar message:: from vois.vuetify import snackbar from ipywidgets import widgets title = 'Title of the message' text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore...' s = snackbar.snackbar(title=title, text=text, show=True, wrapwidth=40, timeout=3000) s.draw() .. figure:: figures/snackbar.png :scale: 100 % :alt: snackbar widget Example of a snackbar message """ def __init__(self, title='', text='', show=False, color=settings.color_first, dark=settings.dark_mode, wrapwidth=80, timeout=10000, output=None): if dark: buttontext = settings.textcolor_dark styletext = 'color: ' + settings.textcolor_dark + ';' else: buttontext = settings.textcolor_notdark styletext = 'color: ' + settings.textcolor_notdark + ';' bclose = v.Btn(text=True, children=['Close'], color=buttontext) bclose.on_event('click', self.__onclose) a = textwrap.wrap(text=text, width=wrapwidth) textlines = [v.CardTitle(class_="pa-0 ma-0", style_=styletext, children=[title])] + [v.CardText(class_="pa-0 ma-0", style_=styletext, children=[x]) for x in a] col = v.Col(cols=12, children=textlines) self.snack = v.Snackbar(v_model=show, timeout=timeout, color=color, multiline=True, vertical=True, dark=dark, children=[col, bclose]) # Display of the pane; if not output is None: with output: display(self.snack) def __onclose(self, *args): self.snack.v_model = False # Returns the vuetify object to display (the v.Snackbar)
[docs] def draw(self): """Returns the ipyvuetify object to display (the internal v.Snackbar widget)""" return self.snack
[docs] def show(self): """Shows the snackbar message""" self.snack.v_model = True
[docs] def close(self): """Closes the snackbar message""" self.snack.v_model = False