src/pyams_content/component/theme/zmi/__init__.py
changeset 1423 31c1bc24a308
parent 1389 1485db1e2b5e
child 1448 0f646872d21b
--- a/src/pyams_content/component/theme/zmi/__init__.py	Tue Sep 08 12:23:21 2020 +0200
+++ b/src/pyams_content/component/theme/zmi/__init__.py	Fri Nov 13 13:01:02 2020 +0100
@@ -11,14 +11,16 @@
 #
 
 from z3c.form import field
+from z3c.form.browser.checkbox import SingleCheckBoxFieldWidget
 from zope.interface import implementer
 
 from pyams_content.component.theme import ICollectionsInfo, ICollectionsManager, \
-    ICollectionsManagerTarget, ICollectionsTarget, ITagsInfo, ITagsManager, ITagsTarget, \
+    ICollectionsTarget, ITagsInfo, ITagsManager, ITagsTarget, \
     IThemesInfo, IThemesManager, IThemesManagerTarget, IThemesTarget
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
 from pyams_content.shared.common.zmi import WfSharedContentHeaderAdapter
 from pyams_form.form import AJAXEditForm, EditForm, ajax_config
+from pyams_form.group import NamedWidgetsGroup
 from pyams_form.interfaces.form import IWidgetForm
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.interfaces import IDialog, IInnerPage, IPageHeader
@@ -90,7 +92,7 @@
 #
 
 @viewlet_config(name='themes.menu', context=IThemesTarget, layer=IAdminLayer,
-                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=352)
+                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=360)
 class ThemesMenu(MenuItem):
     """Themes menu"""
 
@@ -107,11 +109,33 @@
     label_css_class = 'control-label hidden'
     input_css_class = 'col-md-12'
 
-    fields = field.Fields(IThemesInfo)
-    fields['themes'].widgetFactory = ThesaurusTermsTreeFieldWidget
+    @property
+    def fields(self):
+        if IThemesInfo(self.context).can_inherit:
+            fields = field.Fields(IThemesInfo).select('no_inherit', 'themes')
+            fields['no_inherit'].widgetFactory = SingleCheckBoxFieldWidget
+        else:
+            fields = field.Fields(IThemesInfo).select('themes')
+        fields['themes'].widgetFactory = ThesaurusTermsTreeFieldWidget
+        return fields
 
     edit_permission = MANAGE_CONTENT_PERMISSION
 
+    def updateGroups(self):
+        if IThemesInfo(self.context).can_inherit:
+            group = NamedWidgetsGroup(self, 'themes', self.widgets,
+                                      ('no_inherit', 'themes'),
+                                      legend=_("Don't inherit parent themes"),
+                                      css_class='inner',
+                                      switch=True,
+                                      checkbox_switch=True,
+                                      checkbox_mode='disable',
+                                      checkbox_field=IThemesInfo['no_inherit'])
+        else:
+            group = NamedWidgetsGroup(self, 'themes', self.widgets, (), css_class='inner')
+        self.add_group(group)
+        super(BaseThemesEditForm, self).updateGroups()
+
     def updateWidgets(self, prefix=None):
         super(BaseThemesEditForm, self).updateWidgets(prefix)
         if 'themes' in self.widgets:
@@ -129,15 +153,19 @@
     icon_class = 'fa fa-fw fa-tags'
 
 
-@pagelet_config(name='themes.html', context=IThemesTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
-@ajax_config(name='themes.json', context=IThemesTarget, layer=IPyAMSLayer, base=AJAXEditForm)
+@pagelet_config(name='themes.html', context=IThemesTarget, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='themes.json', context=IThemesTarget, layer=IPyAMSLayer,
+             base=AJAXEditForm)
 @implementer(IWidgetForm, IInnerPage)
 class ThemesEditForm(BaseThemesEditForm, AdminEditForm):
     """Themes edit form"""
 
 
-@pagelet_config(name='themes-dialog.html', context=IThemesTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
-@ajax_config(name='themes-dialog.json', context=IThemesTarget, layer=IPyAMSLayer, base=AJAXEditForm)
+@pagelet_config(name='themes-dialog.html', context=IThemesTarget, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='themes-dialog.json', context=IThemesTarget, layer=IPyAMSLayer,
+             base=AJAXEditForm)
 @implementer(IDialog)
 class DialogThemesEditForm(BaseThemesEditForm, AdminDialogEditForm):
     """Dialog themes edit form"""
@@ -150,7 +178,7 @@
 #
 
 @viewlet_config(name='collections.menu', context=ICollectionsTarget, layer=IAdminLayer,
-                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=354)
+                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=370)
 class CollectionsMenu(MenuItem):
     """Collections menu"""