class BasicMenuLayout(BaseView):
    skinInterfaces = (IMenuLayoutSkin, )
    
    title = _(u"Menu")
    
    @memoize
    def object(self):
        return aq_inner(self.context)
        
    def url(self):
        object = self.object()
        # If it's a link
        if IATLink in providedBy(object):
            remoteUrl = object.getRemoteUrl()
            # If it's a local link
            if remoteUrl[0] == '/':
                # Get portal object and re-create link
                context = aq_inner(self.context)
                request = self.request
                portal_state = getMultiAdapter((context, request), name="plone_portal_state")
                return '%s%s' % (portal_state.portal_url(), remoteUrl)
            else:
                return remoteUrl
        else:
            # Otherwise, return object's url
            return object.absolute_url()
class MenuRowLayout(RowView):
    """ Special RowView """
    
    skinInterfaces = (IMenuRowLayoutSkin, )
    
    title = _(u"Menu")

    def inComposeView(self):
        return ICollageEditLayer in providedBy(self.request)
    def disable(self):
        """ Removes IMegamenuEnabled marker interface from current folder
        """
        message = ""

        if self.is_enabled():
            noLongerProvides(self.context, IMegamenuEnabled)
            message = _(u"Folder can no longer be used as megamenu")
            if self.auto_show:
                self._set_hidden(False)

        self._return_with_message(message)
    def enable(self):
        """ Applies IMegamenuEnabled marker interface to current folder
        """
        message = ""

        if not self.is_enabled():
            alsoProvides(self.context, IMegamenuEnabled)
            message = _(u"Folder can now be used as megamenu")
            if self.auto_hide:
                self._set_hidden(True)
            
        self._return_with_message(message)
class MegamenuSettingsEditForm(controlpanel.RegistryEditForm):
    """ A configlet form for IMegamenuSettings
        based on plone.app.registry.controlpanel
    """
    schema = IMegamenuSettings
    label = _(u"Megamenu settings")

    def updateFields(self):
        """ Set form widgets
        """
        super(MegamenuSettingsEditForm, self).updateFields()
        self.fields['megamenu_folder'].widgetFactory = RadioFieldWidget
    def enable(self):
        """ Applies IMegamenuEnabled marker interface to current folder
        """
        message = ""

        if not self.is_enabled():
            alsoProvides(self.context, IMegamenuEnabled)
            message = _(u"Folder can now be used as megamenu")
            if self.auto_hide:
                self._set_hidden(True)

        self._return_with_message(message)
    def disable(self):
        """ Removes IMegamenuEnabled marker interface from current folder
        """
        message = ""

        if self.is_enabled():
            noLongerProvides(self.context, IMegamenuEnabled)
            message = _(u"Folder can no longer be used as megamenu")
            if self.auto_show:
                self._set_hidden(False)


        self._return_with_message(message)
 def set_as_current(self):
     """ Provides a shortcut to set current object as current megamenu
         in control panel
     """
     request = self.request
     context = self.context
     title = safe_unicode(context.Title())
     message = _(u"Press 'Save' button to select '${title}' as Megamenu folder", mapping={'title': title})
     IStatusMessage(request).addStatusMessage(message, type="info")
     utool = getToolByName(context, 'portal_url')
     portal_url = utool.getPortalObject().absolute_url()
     uid = context.UID()
     url = '%s/@@megamenu-controlpanel?form.widgets.megamenu_folder:list=%s' % (portal_url, uid)
     return request.response.redirect(url)
 def set_as_current(self):
     """ Provides a shortcut to set current object as current megamenu
         in control panel
     """
     request = self.request
     context = self.context
     title = safe_unicode(context.Title())
     message = _(
         u"Press 'Save' button to select '${title}' as Megamenu folder",
         mapping={'title': title})
     IStatusMessage(request).addStatusMessage(message, type="info")
     utool = getToolByName(context, 'portal_url')
     portal_url = utool.getPortalObject().absolute_url()
     uid = context.UID()
     url = '%s/@@megamenu-controlpanel?form.widgets.megamenu_folder:list=%s' % (
         portal_url, uid)
     return request.response.redirect(url)
class IMegamenuSettings(Interface):
    """ An interface to support configlet settings
    """

    enabled = Bool(title=_(u"Display megamenu"))

    megamenu_folder = Choice(title=_(u"Megamenu folder"), 
                             vocabulary='collective.collage.megamenues',
                             required=False)

    deferred_rendering = Bool(title=_(u"Load dropdown menu via AJAX"),
                              description=_(u"If selected, dropdown options will not be included in original HTML but loaded via AJAX. These options won't be available for search engines."))
                              
    auto_hide = Bool(title=_(u"Hide folder contents when enabling as megamenu"),
                     description=_(u"If selected, after enabling a folder as megamenu, all its contents (and the folder itself)  will be automatically set as expired hiding them in search results from regular users. This can prevent visitors to learn about content that should be shown only in the megamenu. You can also hide or show every content manually by editing it and setting an expiration date"),
                     default=False)
                     
    auto_show = Bool(title=_(u"Show folder contents when disabling as megamenu"),
                     default=False)
                              
class TitleSkin(object):
    title = _(u"Title")
class NoLinesSkin(object):
    title = _(u"No line")
class LinkSkin(object):
    title = _(u"Link")
class HighlightedLinkSkin(object):
    title = _(u"Highlight")
class HLinesSkin(object):
    title = _(u"Bottom line")
class HVLinesSkin(object):
    title = _(u"Both lines")
class VLinesSkin(object):
    title = _(u"Vertical lines")