Source code for iconButton

"""Button displaying an icon."""
# 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
    from . import tooltip
except:
    import settings
    import tooltip

#####################################################################################################################################################
# Icon Button control
#####################################################################################################################################################
[docs]class iconButton(): """ Button displaying an icon. Parameters ---------- icon : str, optional Icon to display inside the button (default is 'mdi-alert-outline') tooltip : str, optional Tooltip text for the button (default is '') color : str, optional Color used for the widget (default is the color_first defined in the settings.py module) outlined : bool, optional If True applies a thin border to the button (default is False) rounded : bool, optional If True the shape of the button is rounded (default is True) large : bool, optional If True makes the button large (default is False) small : bool, optional If True makes the button small (default is False) x_large : bool, optional If True makes the button extra-large (default is False) x_small : bool, optional If True makes the button extra-small (default is False) margins : str, optional Marging apply to the button (default is 'pa-0 ma-0') onclick : function, optional Python function to call when the user clicks on the button. The function will receive no parameters argument : any, optional Argument to be passed to the onclick funtion (default is None) disabled : bool, optional If True the button will be disabled (default is False) Example ------- Creation and display of an icon button which changes color and tooltip on click:: from vois.vuetify import iconButton from IPython.display import display def onclick(): if b.color == 'red': b.color = 'amber' b.tooltip = 'Click to make the icon red' else: b.color = 'red' b.tooltip = 'Click to make the icon yellow' b = iconButton.iconButton(onclick=onclick, tooltip='Initial tooltip', x_large=True) display(b.draw()) """ # Initialization def __init__(self, icon='mdi-alert-outline', tooltip='', color=settings.color_first, outlined=False, rounded=True, width=None, large=False, small=False, x_large=False, x_small=False, margins='pa-0 ma-0', onclick=None, argument=None, disabled=False): self.icon = icon self._tooltip = tooltip self._color = color self.outlined = outlined self.rounded = rounded self.width = width self.large = large self.small = small self.x_large = x_large self.x_small = x_small self.margins = margins self.onclick = onclick self.argument = argument self._disabled = disabled self.h = v.Html(tag='div',children=[]) self.__createButton() # Creation of the button def __createButton(self): flagicon = True if self.outlined: flagicon = False self.btn = v.Btn(icon=flagicon, class_=self.margins, outlined=self.outlined, rounded=self.rounded, large=self.large, small=self.small, x_large=self.x_large, x_small=self.x_small, dark=settings.dark_mode, color=self._color, disabled=self._disabled, width=self.width, min_width=self.width, max_width=self.width, children=[v.Icon(children=[self.icon], large=self.large, small=self.small, x_large=self.x_large, x_small=self.x_small)]) if not self.width is None: self.btn.min_width = self.width self.btn.max_width = self.width self.btn.width = self.width self.btn.on_event('click.stop', self.__internal_onclick) if len(self._tooltip) > 0: obj = tooltip.tooltip(self._tooltip,self.btn) else: obj = self.btn self.h.children = [obj] # Manage click event def __internal_onclick(self, widget=None, event=None, data=None): if self.onclick: if not self.argument is None: self.onclick(self.argument) else: self.onclick() @property def color(self): """ Get/Set the color of the button. """ return self._color @color.setter def color(self, col): self._color = col self.__createButton() @property def tooltip(self): """ Get/Set the tooltip of the button. """ return self._tooltip @tooltip.setter def tooltip(self, tooltip): self._tooltip = tooltip self.__createButton() @property def disabled(self): """ Get/Set the disabled state of the button. """ return self._disabled @disabled.setter def disabled(self, flag): self._disabled = flag self.btn.disabled = self._disabled # Returns the vuetify object to display def draw(self): return self.h