src/ztfy/baseskin/widget.py
changeset 0 747fc65e13e2
equal deleted inserted replaced
-1:000000000000 0:747fc65e13e2
       
     1 #
       
     2 # Copyright (c) 2012 Thierry Florac <tflorac AT onf.fr>
       
     3 # All Rights Reserved.
       
     4 #
       
     5 
       
     6 
       
     7 # import standard packages
       
     8 
       
     9 # import Zope3 interfaces
       
    10 from z3c.form.interfaces import IFormLayer, IFieldWidget
       
    11 
       
    12 # import local interfaces
       
    13 from ztfy.baseskin.interfaces.form import IResetWidget, ICloseWidget
       
    14 from ztfy.baseskin.schema import IResetButton, ICloseButton
       
    15 
       
    16 # import Zope3 packages
       
    17 from z3c.form.action import Action
       
    18 from z3c.form.browser.submit import SubmitWidget
       
    19 from z3c.form.button import ButtonAction
       
    20 from z3c.form.widget import FieldWidget
       
    21 from zope.component import adapter, adapts
       
    22 from zope.interface import implementer, implementsOnly
       
    23 
       
    24 # import local packages
       
    25 
       
    26 
       
    27 #
       
    28 # Reset button widget and action
       
    29 #
       
    30 
       
    31 class ResetWidget(SubmitWidget):
       
    32     """A reset button of a form."""
       
    33 
       
    34     implementsOnly(IResetWidget)
       
    35 
       
    36     klass = u'reset-widget'
       
    37     css = u'reset'
       
    38 
       
    39 
       
    40 @adapter(IResetButton, IFormLayer)
       
    41 @implementer(IFieldWidget)
       
    42 def ResetFieldWidget(field, request):
       
    43     reset = FieldWidget(field, ResetWidget(request))
       
    44     reset.value = field.title
       
    45     return reset
       
    46 
       
    47 
       
    48 class ResetButtonAction(ResetWidget, ButtonAction):
       
    49     """Reset button action"""
       
    50 
       
    51     adapts(IFormLayer, IResetButton)
       
    52 
       
    53     def __init__(self, request, field):
       
    54         Action.__init__(self, request, field.title)
       
    55         ResetWidget.__init__(self, request)
       
    56         self.field = field
       
    57 
       
    58 
       
    59 #
       
    60 # Close button widget and action
       
    61 #
       
    62 
       
    63 class CloseWidget(SubmitWidget):
       
    64     """A dialog close button"""
       
    65 
       
    66     implementsOnly(ICloseWidget)
       
    67 
       
    68     klass = u'close-widget'
       
    69     css = u'close'
       
    70 
       
    71 
       
    72 @adapter(ICloseButton, IFormLayer)
       
    73 @implementer(IFieldWidget)
       
    74 def CloseFieldWidget(field, request):
       
    75     close = FieldWidget(field, CloseWidget(request))
       
    76     close.value = field.title
       
    77     return close
       
    78 
       
    79 
       
    80 class CloseButtonAction(CloseWidget, ButtonAction):
       
    81     """Close button action"""
       
    82 
       
    83     adapts(IFormLayer, ICloseButton)
       
    84 
       
    85     def __init__(self, request, field):
       
    86         Action.__init__(self, request, field.title)
       
    87         CloseWidget.__init__(self, request)
       
    88         self.field = field