src/pyams_content/reference/pictograms/zmi/manager.py
changeset 1014 6cdae82405f7
parent 1013 d69762f1ca4d
child 1035 857fdb137d14
equal deleted inserted replaced
1011:f82a78ce9963 1014:6cdae82405f7
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
       
    15 import json
       
    16 import locale
    15 
    17 
    16 # import standard library
    18 from z3c.form import button, field
    17 import json
    19 from z3c.form.util import changedField
       
    20 from zope.interface import Interface, implementer
    18 
    21 
    19 # import interfaces
       
    20 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
    22 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
    21 from pyams_content.reference.pictograms.interfaces import IPictogramManagerTarget, IPictogramManager, IPictogramTable
    23 from pyams_content.reference.pictograms.interfaces import IPictogramManager, IPictogramManagerTarget, IPictogramTable
    22 from pyams_form.interfaces.form import IWidgetForm, IWidgetsSuffixViewletsManager, IUncheckedEditFormButtons
    24 from pyams_form.form import ajax_config
       
    25 from pyams_form.interfaces.form import IUncheckedEditFormButtons, IWidgetForm, IWidgetsSuffixViewletsManager
       
    26 from pyams_i18n.interfaces import II18n
       
    27 from pyams_pagelet.pagelet import pagelet_config
    23 from pyams_skin.interfaces import IInnerPage
    28 from pyams_skin.interfaces import IInnerPage
    24 from pyams_skin.layer import IPyAMSLayer
    29 from pyams_skin.layer import IPyAMSLayer
       
    30 from pyams_skin.viewlet.menu import MenuItem
       
    31 from pyams_template.template import template_config
    25 from pyams_utils.interfaces.data import IObjectData
    32 from pyams_utils.interfaces.data import IObjectData
       
    33 from pyams_utils.registry import query_utility
       
    34 from pyams_utils.traversing import get_parent
       
    35 from pyams_viewlet.viewlet import Viewlet, viewlet_config
       
    36 from pyams_zmi.form import AdminEditForm
    26 from pyams_zmi.interfaces.menu import IPropertiesMenu
    37 from pyams_zmi.interfaces.menu import IPropertiesMenu
    27 from pyams_zmi.layer import IAdminLayer
    38 from pyams_zmi.layer import IAdminLayer
    28 
       
    29 # import packages
       
    30 from pyams_form.form import ajax_config
       
    31 from pyams_pagelet.pagelet import pagelet_config
       
    32 from pyams_skin.viewlet.menu import MenuItem
       
    33 from pyams_template.template import template_config
       
    34 from pyams_utils.registry import query_utility
       
    35 from pyams_utils.traversing import get_parent
       
    36 from pyams_viewlet.viewlet import viewlet_config, Viewlet
       
    37 from pyams_zmi.form import AdminEditForm
       
    38 from z3c.form import field, button
       
    39 from z3c.form.util import changedField
       
    40 from zope.interface import implementer, Interface
       
    41 
    39 
    42 from pyams_content import _
    40 from pyams_content import _
    43 
    41 
    44 
    42 
    45 @viewlet_config(name='pictograms-selection.menu', context=IPictogramManagerTarget, layer=IAdminLayer,
    43 @viewlet_config(name='pictograms-selection.menu', context=IPictogramManagerTarget, layer=IAdminLayer,
    83                 view=PictogramManagerEditForm, manager=IWidgetsSuffixViewletsManager, permission=MANAGE_TOOL_PERMISSION)
    81                 view=PictogramManagerEditForm, manager=IWidgetsSuffixViewletsManager, permission=MANAGE_TOOL_PERMISSION)
    84 @template_config(template='templates/manager-selection.pt', layer=IAdminLayer)
    82 @template_config(template='templates/manager-selection.pt', layer=IAdminLayer)
    85 class PictogramManagerSelectionView(Viewlet):
    83 class PictogramManagerSelectionView(Viewlet):
    86     """Pictogram manager selection viewlet"""
    84     """Pictogram manager selection viewlet"""
    87 
    85 
       
    86     pictogram_table = None
       
    87     pictogram_manager = None
       
    88 
       
    89     def update(self):
       
    90         super(PictogramManagerSelectionView, self).update()
       
    91         self.pictogram_table = query_utility(IPictogramTable)
       
    92         target = get_parent(self.context, IPictogramManagerTarget)
       
    93         if target is not None:
       
    94             self.pictogram_manager = IPictogramManager(target)
       
    95 
       
    96     @property
       
    97     def sorted_pictograms(self):
       
    98         yield from sorted(self.pictogram_table.values(),
       
    99                           key=lambda x: locale.strxfrm(II18n(x).query_attribute('title',
       
   100                                                                                 request=self.request) or '').lower())
       
   101 
    88     @property
   102     @property
    89     def available_pictograms(self):
   103     def available_pictograms(self):
    90         table = query_utility(IPictogramTable)
   104         manager = self.pictogram_manager
    91         target = get_parent(self.context, IPictogramManagerTarget)
   105         if manager is not None:
    92         if target is not None:
   106             for pictogram in self.sorted_pictograms:
    93             manager = IPictogramManager(target)
   107                 if pictogram.__name__ not in manager.selected_pictograms:
    94             for pictogram in table.values():
       
    95                 if (not manager.selected_pictograms) or (pictogram.__name__ not in manager.selected_pictograms):
       
    96                     yield pictogram
   108                     yield pictogram
    97 
   109 
    98     @property
   110     @property
    99     def selected_pictograms(self):
   111     def selected_pictograms(self):
   100         table = query_utility(IPictogramTable)
   112         manager = self.pictogram_manager
   101         target = get_parent(self.context, IPictogramManagerTarget)
   113         if manager is not None:
   102         if target is not None:
   114             for name in (manager.selected_pictograms or ()):
   103             manager = IPictogramManager(target)
   115                 pictogram = self.pictogram_table.get(name)
   104             if manager.selected_pictograms:
   116                 if pictogram is not None:
   105                 for name in manager.selected_pictograms:
   117                     yield pictogram
   106                     pictogram = table.get(name)
       
   107                     if pictogram is not None:
       
   108                         yield pictogram