Source code for textlist

"""Widget to display text strings vertically aligned."""
# 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.
from IPython.display import display
import ipyvuetify as v

try:
    from . import settings
except:
    import settings


#####################################################################################################################################################
# Testlist control
#####################################################################################################################################################
[docs]class textlist(): """ Widget to vertically display a list of titles and texts strings. Each couple of title and text occupies a row. Parameters ---------- titles : list of strings Strings to be displayed as title of each row texts : list of strings Strings to be displayed as the content of each row titlesbold : list of strings, optional List of titles whose corresponding texts should be displayed in with bold font (default is []) titlefontsize : int, optional Size in pixel of the font used for the titles (default is 12) textfontsize : int, optional Size in pixel of the font used for the texts (default is 12) titlecolumn : int, optional Number of column (out of 12) occupied by the titles (default is 4) textcolumn : int, optional Number of column (out of 12) occupied by the texts (default is 8) titlecolor : str, optional Color to use for the titles (default is 'black') textcolor : str, optional Color to use for the texts (default is 'black') lineheightfactor : float, optional Factor to multiply to the font-size to calculate the height of each row (default is 1.5) Example ------- Creation and display of a widget to display some textual information:: from vois.vuetify import textlist from IPython.display import display t = textlist.textlist(['Name', 'Surname', 'Address', 'Role'], ['Davide', 'De Marchi', 'via Eduardo 34, Roccacannuccia (PE)', 'Software developer'], titlesbold=['Surname'], titlefontsize=14, textfontsize=16, titlecolumn=3, textcolumn=10, titlecolor='#003300', textcolor='#000000', lineheightfactor=1.4 ) # Set some attributes of the card widget (margins, colors, width, etc.) t.card.class_ = 'pa-0 ma-4 ml-6 mr-8' t.card.flat = False t.card.color = '#e0ffe0' t.card.elevation = 8 t.card.width = '430px' display(t.draw()) .. figure:: figures/textlist.png :scale: 100 % :alt: textlist widget Textlist widget for displaying textual information. """ # Initialization def __init__(self, titles, texts, titlesbold=[], titlefontsize=12, textfontsize=12, titlecolumn=4, textcolumn=8, titlecolor='black', textcolor='black', lineheightfactor=1.5): self.titlefontsize = titlefontsize self.textfontsize = textfontsize self.titlecolumn = titlecolumn self.textcolumn = textcolumn self.titlecolor = titlecolor self.textcolor = textcolor self.lineheightfactor = lineheightfactor self.div = v.Divider(class_='pa-0 ma-0 ml-1 mr-1', vertical=False) self.card = v.Card(flat=True) self.update(titles, texts, titlesbold) # Update the widget with new titles and strings def update(self, titles, texts, titlesbold=[]): self.card.children = [] children = [] lineheight = "line-height: %dpx;"%(int(self.lineheightfactor*(max(self.titlefontsize,self.textfontsize)))) # To ensure vertical center alignment for title,text in zip(titles, texts): c1 = v.Col(cols=self.titlecolumn, class_="pa-0 ma-0 ml-3", children=[v.Html(tag='div', class_='pa-0 ma-0', children=[str(title)], style_='color: %s; font-weight: 450; text-transform: none; font-size: %dpx; %s'%(self.titlecolor, self.titlefontsize,lineheight))], style_="overflow: hidden;") if title in titlesbold: weight = 500 else: weight = 350 c2 = v.Col(cols=self.textcolumn, class_="pa-0 ma-0", children=[v.Html(tag='div', class_='pa-0 ma-0', children=[str(text)], style_='color: %s; font-weight: %d; text-transform: none; font-size: %dpx; %s'%(self.textcolor, weight,self.textfontsize,lineheight))], style_="overflow: hidden;") children.append(v.Layout(class_="pa-0 ma-0", children=[c1,c2], style_="overflow: visible;")) children.append(self.div) self.card.children = children # Returns the vuetify object to display
[docs] def draw(self): """Returns the ipyvuetify object to display (the internal v.Card widget)""" return self.card