incubator-adffaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Adam Winer" <awi...@gmail.com>
Subject Re: Re: PATCH: ServerSide buttons are back
Date Tue, 12 Dec 2006 16:21:39 GMT
Maybe we could pull all of the image generation code out of trinidad-impl
and into a third library?  I really want it out of the main library - for a
totally unused API, it adds a lot of code.

-- Adam



On 12/11/06, Simon Lessard <simon.lessard.3@gmail.com> wrote:
> Hello everyones,
>
> I was among the people wanting to keep them for round edges, but now I find
> them evil. The result is not always consistent and sometimes looks quite odd
> with international characters, you can hardly add any mouseover or
> mousepress interaction that most users are used to. As Adam suggested in one
> reply of that old thread, we can get those round edge back with CSS 3 when
> browsers support it, meaning in one year or so for most browser and never
> for IE.
>
>
> Regards,
>
> ~ Simon
>
>
> On 12/11/06, Mark Robinson <mark.robinson@mizar.com> wrote:
> >
> > So I've cleaned up my patch.
> >
> > I've removed the dependence on trinidadinternal.ui and I've added some
> > classes which I needed to implement server side buttons.
> >
> > Mark
> >
> > Mark Robinson wrote:
> > > Hi,
> > >
> > > I've written up a patch which will enable the use of server generated
> > > buttons in tr:commandButtons.  It follows the documentation in that
> > > you must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias,
> > > AFButtonTopBackgroundIcon:alias  and
> > > AFButtonBottomBackgroundIcon:alias in the skin definition file.  If it
> > > can't find these definitions, it reverts to normal client-side buttons.
> > >
> > >
> > > Mark
> > > ------------------------------------------------------------------------
> >
> >
> >
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > (revision 0)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > (revision 0)
> > @@ -0,0 +1,149 @@
> > +/*
> > + * Copyright  2005,2006 The Apache Software Foundation.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +
> > +package org.apache.myfaces.trinidadinternal.renderkit.core;
> > +
> > +import javax.faces.context.FacesContext;
> > +
> > +import org.apache.myfaces.trinidad.context.Agent;
> > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > +import org.apache.myfaces.trinidad.context.RequestContext;
> > +import org.apache.myfaces.trinidad.logging.TrinidadLogger;
> > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > +import
> > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > +import org.apache.myfaces.trinidadinternal.share.config.Configuration;
> > +import
> > org.apache.myfaces.trinidadinternal.share.config.ContextBasedConfiguration
> > ;
> > +import org.apache.myfaces.trinidadinternal.share.util.NamespaceMap;
> > +import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > +
> > +public class CoreImageContext implements ImageContext {
> > +    public CoreImageContext(TrinidadAgent agent, LocaleContext
> > localeContext, StyleContext styleContext) {
> > +        _agent = agent;
> > +        _localeContext = localeContext;
> > +        _styleContext = styleContext;
> > +        _nameSpaceProperties = new NamespaceMap();
> > +
> > +        _initializeConfiguration(FacesContext.getCurrentInstance(),
> > RequestContext.getCurrentInstance());
> > +    }
> > +
> > +    public LocaleContext getLocaleContext() {
> > +        return _localeContext;
> > +    }
> > +
> > +    public TrinidadAgent getAgent() {
> > +        return _agent;
> > +    }
> > +
> > +    public Configuration getConfiguration() {
> > +        return _config;
> > +    }
> > +
> > +    public Object getProperty(String namespace, Object key) {
> > +        Object o = _nameSpaceProperties.get(namespace, key);
> > +
> > +        if (o == null)
> > +        {
> > +          if (ImageConstants.TECATE_NAMESPACE == namespace)
> > +          {
> > +            if (ImageConstants.IMAGE_PROVIDER_PROPERTY == key)
> > +            {
> > +              ImageProvider imageProvider = _getDefaultImageProvider();
> > +
> > +              setProperty(ImageConstants.TECATE_NAMESPACE,
> > +                          ImageConstants.IMAGE_PROVIDER_PROPERTY,
> > +                          imageProvider);
> > +
> > +              o = imageProvider;
> > +            }
> > +          }
> > +        }
> > +
> > +        return o;
> > +    }
> > +
> > +    public void setProperty(String namespace, Object key, Object value) {
> > +        _nameSpaceProperties.put(namespace, key, value);
> > +    }
> > +
> > +    public StyleContext getStyleContext() {
> > +        return _styleContext;
> > +    }
> > +
> > +    // Creates a default Tecate's FileSystemImageCache.
> > +    // Uses the web server root and base image uri to determine the
> > +    // location of the default cache
> > +    private ImageProvider _getDefaultImageProvider()
> > +    {
> > +      ImageProvider provider = null;
> > +      //Configuration config = getConfiguration();
> > +      try
> > +      {
> > +        // We explicitly avoid using the SHARED_CONTEXT_PATH for the
> > +        // image cache.  That way, we can ensure that each application
> > +        // creates its own local image cache.
> > +        String contextPath = getStyleContext().getGeneratedFilesPath();
> > +        String path = _getDefaultImageCacheDirectory();
> > +
> > +        provider = FileSystemImageCache.getSharedCache(contextPath +
> > path);
> > +      }
> > +      catch (Exception e)
> > +      {
> > +        _LOG.severe("Could not get image cache", e);
> > +      }
> > +
> > +      return provider;
> > +    }
> > +
> > +    /**
> > +     * Gets the default Image Cache directory
> > +     *
> > +     * @return relative Image Cache directory
> > +     */
> > +    private String _getDefaultImageCacheDirectory() {
> > +      return _DEFAULT_BASE_DIRECTORY + _DEFAULT_IMAGES_SUBDIRECTORY +
> > _DEFAULT_CACHE_SUBDIRECTORY;
> > +    }
> > +
> > +    private void _initializeConfiguration(FacesContext fContext,
> > +                                          RequestContext context)
> > +    {
> > +      _config = new ContextBasedConfiguration(fContext, context);
> > +    }
> > +
> > +
> > +
> > +
> > +    private static final String _DEFAULT_BASE_DIRECTORY   = "/adf/";
> > +    private static final String _DEFAULT_IMAGES_SUBDIRECTORY = "images/";
> > +    private static final String _DEFAULT_JSLIBS_SUBDIRECTORY = "jsLibs/";
> > +    private static final String _DEFAULT_JSPS_SUBDIRECTORY   = "jsps/";
> > +    private static final String _DEFAULT_STYLES_SUBDIRECTORY = "styles/";
> > +    private static final String _DEFAULT_CACHE_SUBDIRECTORY  = "cache/";
> > +
> > +
> > +
> > +
> > +    private TrinidadAgent _agent;
> > +    private LocaleContext _localeContext;
> > +    private StyleContext _styleContext;
> > +    private NamespaceMap        _nameSpaceProperties;
> > +    private Configuration _config;
> > +
> > +    static private final TrinidadLogger _LOG =
> > +      TrinidadLogger.createTrinidadLogger(CoreImageContext.class);
> > +}
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > (revision 483170)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > (working copy)
> > @@ -45,7 +45,7 @@
> > import org.apache.myfaces.trinidadinternal.agent.TrinidadAgentImpl;
> > import org.apache.myfaces.trinidadinternal.agent.AgentUtil;
> >
> > -
> > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > import org.apache.myfaces.trinidadinternal.skin.SkinNotAvailable;
> >
> > import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > @@ -64,6 +64,7 @@
> >
> >      _properties = new HashMap<Object, Object>();
> >
> > +
> >      _outputMode = afContext.getOutputMode();
> >      _agent = _initializeAgent(context,
> >                                afContext.getAgent(),
> > @@ -75,6 +76,8 @@
> >      _initializePPR(context, afContext);
> >      // Get and cache (since it can be EL-bound)
> >      _accessibilityMode = afContext.getAccessibilityMode();
> > +
> > +    _imageContext = new CoreImageContext(getTrinidadAgent(),
> > getLocaleContext(), getStyleContext());
> >    }
> >
> >
> > @@ -103,6 +106,10 @@
> >      else
> >        _linkStyleDisabledCount--;
> >    }
> > +
> > +  public ImageContext getImageContext() {
> > +      return _imageContext;
> > +  }
> >
> >
> >    /**
> > @@ -526,8 +533,9 @@
> >      localeContext.setDecimalFormatContext(mdfc);
> >      _localeContext = localeContext;
> >    }
> > +
> >
> > -
> > +  private ImageContext        _imageContext;
> >    private Skin                _skin;
> >    private FormData            _formData;
> >    private TrinidadAgent       _agent;
> > @@ -553,7 +561,7 @@
> >
> >    static private final Map<Object, Object> _EMAIL_CAPABILITIES =
> >      new HashMap<Object, Object>();
> > -
> > +
> >    static
> >    {
> >      _PRINTABLE_CAPABILITIES.put(TrinidadAgent.CAP_INTRINSIC_EVENTS,
> > @@ -584,4 +592,7 @@
> >
> >    static private final TrinidadLogger _LOG =
> >      TrinidadLogger.createTrinidadLogger(CoreRenderingContext.class);
> > +
> > +
> > +
> > }
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > (revision 0)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > (revision 0)
> > @@ -0,0 +1,138 @@
> > +/*
> > + * Copyright  2005,2006 The Apache Software Foundation.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +
> > +package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> > +
> > +public class CommandButtonConstants {
> > +
> > +
> > +      // menuTabs Icons
> > +      static final String AF_MENU_TABS_ENABLED_START_ICON_NAME =
> > +        "af|menuTabs::enabled-start-icon";
> > +      static final String AF_MENU_TABS_SELECTED_START_ICON_NAME =
> > +        "af|menuTabs::selected-start-icon";
> > +      static final String AF_MENU_TABS_ENABLED_END_ICON_NAME =
> > +        "af|menuTabs::enabled-end-icon";
> > +      static final String AF_MENU_TABS_SELECTED_END_ICON_NAME =
> > +        "af|menuTabs::selected-end-icon";
> > +      static final String AF_MENU_TABS_ENABLED_JOIN_ICON_NAME =
> > +        "af|menuTabs::enabled-join-icon";
> > +      static final String AF_MENU_TABS_SELECTED_ENABLED_JOIN_ICON_NAME =
> > +        "af|menuTabs::selected-enabled-join-icon";
> > +      static final String AF_MENU_TABS_ENABLED_SELECTED_JOIN_ICON_NAME =
> > +        "af|menuTabs::enabled-selected-join-icon";
> > +      static final String AF_MENU_TABS_ENABLED_BACKGROUND_ICON_NAME =
> > +        "af|menuTabs::enabled-background-icon";
> > +      static final String AF_MENU_TABS_SELECTED_BACKGROUND_ICON_NAME =
> > +        "af|menuTabs::selected-background-icon";
> > +
> > +      // menuBar Icons
> > +      static final String AF_MENU_BAR_START_ICON_NAME =
> > +        "af|menuBar::start-icon";
> > +      static final String AF_MENU_BAR_END_ICON_NAME =
> > +        "af|menuBar::end-icon";
> > +      static final String AF_MENU_BAR_LEADING_SEPARATOR_ICON_NAME =
> > +        "af|menuBar::leading-separator-icon";
> > +      static final String AF_MENU_BAR_TRAILING_SEPARATOR_ICON_NAME =
> > +        "af|menuBar::trailing-separator-icon";
> > +      static final String AF_MENU_BAR_BACKGROUND_ICON_NAME =
> > +        "af|menuBar::background-icon";
> > +
> > +      // GlobalButtonBar Icons
> > +      static final String AF_MENU_BUTTONS_SEPARATOR_ICON_NAME =
> > +        "af|menuButtons::separator-icon";
> > +
> > +      // messages Icons
> > +      static final String AF_MESSAGES_TOP_START_ICON_NAME =
> > +        "af|messages::top-start-icon";
> > +      static final String AF_MESSAGES_TOP_END_ICON_NAME =
> > +        "af|messages::top-end-icon";
> > +      static final String AF_MESSAGES_TOP_BACKGROUND_ICON_NAME =
> > +        "af|messages::top-background-icon";
> > +      static final String AF_MESSAGES_BOTTOM_START_ICON_NAME =
> > +        "af|messages::bottom-start-icon";
> > +      static final String AF_MESSAGES_BOTTOM_END_ICON_NAME =
> > +        "af|messages::bottom-end-icon";
> > +      static final String AF_MESSAGES_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "af|messages::bottom-background-icon";
> > +      static final String AF_MESSAGES_START_BACKGROUND_ICON_NAME =
> > +        "af|messages::start-background-icon";
> > +      static final String AF_MESSAGES_END_BACKGROUND_ICON_NAME =
> > +        "af|messages::end-background-icon";
> > +
> > +      // panelSideBar Icons
> > +      static final String AF_PANEL_SIDE_BAR_TOP_START_ICON_NAME =
> > +        "af|panelSideBar::top-start-icon";
> > +      static final String AF_PANEL_SIDE_BAR_TOP_END_ICON_NAME =
> > +        "af|panelSideBar::top-end-icon";
> > +      static final String AF_PANEL_SIDE_BAR_TOP_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::top-background-icon";
> > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_START_ICON_NAME =
> > +        "af|panelSideBar::bottom-start-icon";
> > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_END_ICON_NAME =
> > +        "af|panelSideBar::bottom-end-icon";
> > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::bottom-background-icon";
> > +      static final String AF_PANEL_SIDE_BAR_START_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::start-background-icon";
> > +      static final String AF_PANEL_SIDE_BAR_END_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::end-background-icon";
> > +
> > +
> > +      // Button Icons
> > +      static final String BUTTON_START_ICON_NAME =
> > +        "AFButtonStartIcon";
> > +      static final String BUTTON_END_ICON_NAME =
> > +        "AFButtonEndIcon";
> > +      static final String BUTTON_TOP_BACKGROUND_ICON_NAME =
> > +        "AFButtonTopBackgroundIcon";
> > +      static final String BUTTON_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "AFButtonBottomBackgroundIcon";
> > +
> > +      static final String BUTTON_DISABLED_START_ICON_NAME =
> > +        "AFButtonDisabledStartIcon";
> > +      static final String BUTTON_DISABLED_END_ICON_NAME =
> > +        "AFButtonDisabledEndIcon";
> > +      static final String BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME =
> > +        "AFButtonDisabledTopBackgroundIcon";
> > +      static final String BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "AFButtonDisabledBottomBackgroundIcon";
> > +
> > +      // Style classes
> > +
> > +      // menuBar style classes
> > +      public static final String AF_MENU_BAR_EMPTY_STYLE_CLASS =
> > +        "af|menuBar::empty";
> > +      public static final String AF_MENU_BAR_BODY_STYLE_CLASS =
> > +        "af|menuBar::body";
> > +      public static final String AF_MENU_BAR_TITLE_STYLE_CLASS =
> > +        "af|menuBar::title";
> > +
> > +
> > +      // tr:messages style classes
> > +      // when we combine base and simple renders, this will move up to
> > +      // BaseDesktopConstants. In fact, all the styles in this class
> > will.
> > +
> > +
> > +      // style that is on the td that surrounds the entire message box
> > +      public static final String AF_MESSAGES_BODY_STYLE_CLASS =
> > +        "af|messages::body";
> > +
> > +
> > +      // tr:panelSideBar style classes
> > +      public static final String AF_PANEL_SIDE_BAR_BODY_STYLE_CLASS =
> > +        "af|panelSideBar::body";
> > +}
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
   (revision
> > 483170)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
   (working
> > copy)
> > @@ -15,19 +15,44 @@
> >   */
> > package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> >
> > +import java.awt.Color;
> > +import java.awt.Font;
> > +
> > import java.io.IOException;
> >
> > +import java.util.Collection;
> > import java.util.Collections;
> > +import java.util.Iterator;
> > import java.util.List;
> >
> > +import java.util.Map;
> > +
> > import javax.faces.component.UIComponent;
> > +import javax.faces.context.ExternalContext;
> > import javax.faces.context.FacesContext;
> > import javax.faces.context.ResponseWriter;
> >
> > import org.apache.myfaces.trinidad.bean.FacesBean;
> > import org.apache.myfaces.trinidad.bean.PropertyKey;
> > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > +import org.apache.myfaces.trinidad.context.RenderingContext;
> > +import org.apache.myfaces.trinidad.skin.Icon;
> > +import org.apache.myfaces.trinidad.skin.Skin;
> > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > +import org.apache.myfaces.trinidadinternal.image.ImageProviderResponse;
> > +import org.apache.myfaces.trinidadinternal.image.cache.CompositeButtonKey
> > ;
> > +import
> > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > +import org.apache.myfaces.trinidadinternal.share.io.InputStreamProvider;
> > +import org.apache.myfaces.trinidadinternal.share.io.NameResolver;
> > +import org.apache.myfaces.trinidadinternal.skin.StyleSheetNameResolver;
> > +import org.apache.myfaces.trinidadinternal.style.Style;
> > +import org.apache.myfaces.trinidadinternal.style.StyleMap;
> > +import org.apache.myfaces.trinidadinternal.style.util.FontProxy;
> > import org.apache.myfaces.trinidad.component.core.nav.CoreCommandButton;
> > -import org.apache.myfaces.trinidad.context.RenderingContext;
> > +import
> > org.apache.myfaces.trinidadinternal.renderkit.core.CoreImageContext;
> > +import
> > org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
> >
> > public class CommandButtonRenderer extends CommandLinkRenderer
> > {
> > @@ -54,7 +79,220 @@
> >    {
> >      return true;
> >    }
> > +
> > +
> > +    // Key for Boolean Skin property which we use
> > +    // to track whether buttons should be rendered as images.
> > +    private static Object _IMAGE_BUTTON_KEY = new Object();
> > +    private static Object _IMAGE_BUTTON_RTL_KEY = new Object();
> > +
> > +    // Tests whether button should be rendered as an image.
> > +    // SLAF buttons are rendered using images if all three
> > +    // button icons (start, end, background) specified.
> > +    // Otherwise the button is rendered using the base.desktop
> > +    // button implementation (browser buttons).
> > +    static public boolean doRenderImageButton(
> > +      )
> > +    {
> > +      // First, check the _IMAGE_BUTTON_KEY (or _IMAGE_BUTTON_RTL_KEY if
> > rtl)
> > +      // property on the Skin.
> > +      //   This will be Boolean.TRUE if
> > +      // we have all three icons, Boolean.FALSE if we
> > +      // don't, or null if we haven't checked yet.
> > +
> > +      CoreRenderingContext coreRender =
> > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > +      boolean rtl = coreRender.isRightToLeft();
> > +      Boolean value;
> > +      Skin skin = coreRender.getSkin();
> > +      if (rtl)
> > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_RTL_KEY);
> > +      else
> > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_KEY);
> >
> > +      if (value != null)
> > +        return (Boolean.TRUE == value);
> > +
> > +      // we fetch different icons if we are in the
> > +      // right-to-left reading direction. context.getIcon takes care of
> > +      // this, by adding the :rtl suffix to the icon name if the
> > +      // reading direction is rtl.
> > +      Icon startIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > +      Icon endIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > +      Icon topBackgroundIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > +      Icon bottomBackgroundIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > +
> > +      // If we are missing any of the icons, we don't render
> > +      // the button image.
> > +      if (startIcon == null || endIcon == null || topBackgroundIcon ==
> > null || bottomBackgroundIcon == null)
> > +      {
> > +
> > +        if (rtl)
> > +          skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.FALSE);
> > +        else
> > +          skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.FALSE);
> > +
> > +        return false;
> > +      }
> > +      if (rtl)
> > +        skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.TRUE);
> > +      else
> > +        skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.TRUE);
> > +
> > +      return true;
> > +    }
> > +
> > +    protected Integer getFontSize(Style serverButtonStyle) {
> > +        Integer serverFontSize =
> > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_SIZE_KEY);
> > +        if(serverFontSize == null) {
> > +            serverFontSize = new Integer(12);
> > +        }
> > +
> > +        return serverFontSize;
> > +    }
> > +
> > +    protected Integer getFontStyle(Style serverButtonStyle) {
> > +        Integer serverFontStyle =
> > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_STYLE_KEY);
> > +        if(serverFontStyle == null) {
> > +            serverFontStyle = new Integer(0);
> > +        }
> > +
> > +        return serverFontStyle;
> > +    }
> > +
> > +    protected ImageProviderResponse getButtonImage(FacesContext context,
> > UIComponent component, FacesBean bean) {
> > +
> > +        ImageProviderResponse response = null;
> > +        try {
> > +         //   UIXRenderingContext facesRender =
> > FacesRenderingContext.getRenderingContext(context, component);
> > +            RenderingContext renderingContext =
> > RenderingContext.getCurrentInstance();
> > +
> > +            CoreRenderingContext coreContext =
> > (CoreRenderingContext)renderingContext;
> > +
> > +            String generatedFiles =
> > ((CoreRenderingContext)renderingContext).getStyleContext().getGeneratedFilesPath()+"/adf/images/cache";
> > +
> > +           // ImageProvider imageProvider =
> > (ImageProvider)renderingContext.getProperties().get(
> > ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > +            //imageProvider = FileSystemImageCache.getSharedCache
> > (generatedFiles);
> > +            ImageProvider imageProvider =
> > (ImageProvider)coreContext.getImageContext().getProperty(
> > ImageConstants.TECATE_NAMESPACE, ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > +
> > +            ExternalContext externalContext = context.getExternalContext
> > ();
> > +            String contextPath = externalContext.getRequestContextPath();
> > +
> > +            StyleMap styleMap = coreContext.getStyleContext
> > ().getStyleMap();
> > +            Style serverButtonStyle = null;
> > +
> > +
> > +            Icon startIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > +             Icon endIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > +             Icon topBackgroundIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > +             Icon bottomBackgroundIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > +
> > +            Icon startDisabledIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_DISABLED_START_ICON_NAME);
> > +             Icon endDisabledIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_DISABLED_END_ICON_NAME);
> > +             Icon topDisabledBackgroundIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME);
> > +             Icon bottomDisabledBackgroundIcon = renderingContext.getIcon
> > (
> > +
> > CommandButtonConstants.BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME);
> > +
> > +            NameResolver nameResolver =
> > StyleSheetNameResolver.createResolver(coreContext.getStyleContext());
> > +
> > +            InputStreamProvider startIsp;
> > +            InputStreamProvider endIsp;
> > +            InputStreamProvider borderBottonIsp;
> > +            InputStreamProvider borderTopIsp;
> > +
> > +
> > +            // Load up the icons used to generate the image
> > +            if (getDisabled(bean)) {
> > +                startIsp = nameResolver.getProvider
> > (((String)startDisabledIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                endIsp = nameResolver.getProvider
> > (((String)endDisabledIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                borderBottonIsp = nameResolver.getProvider
> > (((String)topDisabledBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                borderTopIsp = nameResolver.getProvider
> > (((String)bottomDisabledBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +            } else {
> > +                startIsp = nameResolver.getProvider
> > (((String)startIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                endIsp = nameResolver.getProvider
> > (((String)endIcon.getImageURI(context,RenderingContext.getCurrentInstance())).replaceAll(contextPath,
> > ""));
> > +                borderBottonIsp = nameResolver.getProvider
> > (((String)topBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                borderTopIsp = nameResolver.getProvider
> > (((String)bottomBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +            }
> > +
> > +
> > +
> > +            if (getDisabled(bean)) {
> > +               serverButtonStyle = styleMap.getStyleByName(
> > coreContext.getStyleContext(),"AFButtonServerTextDisabled");
> > +            } else {
> > +               serverButtonStyle = styleMap.getStyleByName(
> > coreContext.getStyleContext(),"AFButtonServerText");
> > +            }
> > +
> > +            Integer serverFontSize = getFontSize(serverButtonStyle);
> > +            Integer serverFontStyle = getFontStyle(serverButtonStyle);
> > +
> > +            Collection serverFont =
> > (Collection)serverButtonStyle.getParsedProperty(Style.FONT_FAMILIES_KEY);
> > +            String fontName = null;
> > +            Font fontImpl = null;
> > +            if(serverFont == null){
> > +                fontName = "Dialog";
> > +                fontImpl = new Font(fontName, serverFontStyle,
> > serverFontSize);
> > +            } else {
> > +                Iterator fonts = serverFont.iterator();
> > +                while(fonts.hasNext()) {
> > +                    fontName = (String)fonts.next();
> > +                    fontImpl = new Font(fontName, serverFontStyle,
> > serverFontSize);
> > +                    if(fontImpl != null)
> > +                        break;
> > +                }
> > +            }
> > +            FontProxy myFontProxy = new FontProxy(fontImpl);
> > +
> > +            String text = getText(bean);
> > +
> > +            char accessKey;
> > +            if (supportsAccessKeys(coreContext))
> > +            {
> > +              accessKey = getAccessKey(bean);
> > +            }
> > +            else
> > +            {
> > +              accessKey = CHAR_UNDEFINED;
> > +            }
> > +
> > +            Color textColor = (Color)serverButtonStyle.getParsedProperty(
> > Style.FOREGROUND_KEY);
> > +            Color bgColor = (Color)serverButtonStyle.getParsedProperty(
> > Style.BACKGROUND_KEY);
> > +
> > +            if(textColor == null) {
> > +                textColor = Color.black;
> > +            }
> > +
> > +            if(bgColor == null) {
> > +                bgColor = Color.WHITE;
> > +            }
> > +
> > +            Boolean useAntiAlias =
> > (Boolean)serverButtonStyle.getParsedProperty(Style.TEXT_ANTIALIAS_KEY);
> > +            if(useAntiAlias == null) {
> > +                useAntiAlias = new Boolean(true);
> > +            }
> > +
> > +            CompositeButtonKey button = new CompositeButtonKey(
> > coreContext.getImageContext(), "", text, text, textColor, bgColor, new
> > Color(0,0,0,0), myFontProxy, getDisabled(bean), useAntiAlias, accessKey,
> > +            startIsp,
> > +            endIsp,
> > +            borderBottonIsp,
> > +            borderTopIsp);
> > +
> > +            response = imageProvider.getImage(coreContext.getImageContext(),
> > button);
> > +        } catch(Exception e) {
> > +            e.printStackTrace();
> > +        }
> > +        return response;
> > +    }
> > +
> >    @Override
> >    protected void encodeAll(
> >      FacesContext        context,
> > @@ -71,74 +309,122 @@
> >      // Make sure we don't have anything to save
> >      assert(arc.getCurrentClientId() == null);
> >      arc.setCurrentClientId(clientId);
> > -
> > -    boolean useButtonTag = useButtonTags(arc);
> > -    String element = useButtonTag ? "button" : "input";
> > -    ResponseWriter rw = context.getResponseWriter();
> > -    rw.startElement(element, component);
> > -    renderId(context, component);
> > +
> > +    if(doRenderImageButton()) {
> > +    ////////////
> > +        ResponseWriter rw = context.getResponseWriter();
> > +        rw.startElement("a", component);
> >
> > -    // Write the text and access key
> > -    String text = getText(bean);
> > -    String icon = getIcon(bean);
> > +        if (getDisabled(bean) || !supportsNavigation(arc))
> > +        {
> > +          renderId(context, component);
> > +          renderStyleAttributes(context, arc, bean);
> > +        }
> > +        else
> > +        {
> > +          renderId(context, component);
> > +          renderAllAttributes(context, arc, bean);
> >
> > -    if (useButtonTag)
> > -      rw.writeAttribute("type", getButtonType(), null);
> > -    else if (icon != null)
> > -      rw.writeAttribute("type", "image", null);
> > -    else
> > -      rw.writeAttribute("type", getInputType(), null);
> > +          // If we have an onclick handler, always provide a destination
> > +          String destination = getDestination(bean);
> > +          if ((destination == null) && hasOnclick(bean))
> > +          {
> > +            destination = "#";
> > +          }
> >
> > -    if (getDisabled(bean))
> > -    {
> > -      rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > -      // Skip over event attributes when disabled
> > -      renderStyleAttributes(context, arc, bean);
> > -    }
> > -    else
> > -    {
> > -      renderAllAttributes(context, arc, bean);
> > -    }
> > +          renderEncodedActionURI(context, "href", destination);
> >
> > -    char accessKey;
> > -    if (supportsAccessKeys(arc))
> > -    {
> > -      accessKey = getAccessKey(bean);
> > -      if (accessKey != CHAR_UNDEFINED)
> > -      {
> > -        rw.writeAttribute("accesskey",
> > -                          new Character(accessKey),
> > -                          "accessKey");
> > -      }
> > +          if (!Boolean.FALSE.equals(
> > +                  arc.getAgent().getCapabilities().get(
> > TrinidadAgent.CAP_TARGET)))
> > +          {
> > +            rw.writeAttribute("target", getTargetFrame(bean), null);
> > +          }
> > +        }
> > +        ////
> > +        ImageProviderResponse buttonImage = getButtonImage(context,
> > component, bean);
> > +        String buttonImageURI = buttonImage.getImageURI();
> > +
> > +        rw.startElement("img", component);
> > +
> > +        ExternalContext externalContext = context.getExternalContext();
> > +        String contextPath = externalContext.getRequestContextPath();
> > +        CoreRenderingContext coreRenderContext =
> > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > +        CoreImageContext imageContext =
> > (CoreImageContext)coreRenderContext.getImageContext();
> > +        rw.writeAttribute("src",
> > contextPath+"/adf/images/cache/"+buttonImageURI, null);
> > +        rw.endElement("img");
> > +
> > +        rw.endElement("a");
> > +
> > +      //  super.encodeEnd(context, arc, component, bean);
> > +    } else {
> > +        boolean useButtonTag = useButtonTags(arc);
> > +        String element = useButtonTag ? "button" : "input";
> > +        ResponseWriter rw = context.getResponseWriter();
> > +        rw.startElement(element, component);
> > +        renderId(context, component);
> > +
> > +        // Write the text and access key
> > +        String text = getText(bean);
> > +        String icon = getIcon(bean);
> > +
> > +        if (useButtonTag)
> > +          rw.writeAttribute("type", getButtonType(), null);
> > +        else if (icon != null)
> > +          rw.writeAttribute("type", "image", null);
> > +        else
> > +          rw.writeAttribute("type", getInputType(), null);
> > +
> > +        if (getDisabled(bean))
> > +        {
> > +          rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > +          // Skip over event attributes when disabled
> > +          renderStyleAttributes(context, arc, bean);
> > +        }
> > +        else
> > +        {
> > +          renderAllAttributes(context, arc, bean);
> > +        }
> > +
> > +        char accessKey;
> > +        if (supportsAccessKeys(arc))
> > +        {
> > +          accessKey = getAccessKey(bean);
> > +          if (accessKey != CHAR_UNDEFINED)
> > +          {
> > +            rw.writeAttribute("accesskey",
> > +                              new Character(accessKey),
> > +                              "accessKey");
> > +          }
> > +        }
> > +        else
> > +        {
> > +          accessKey = CHAR_UNDEFINED;
> > +        }
> > +
> > +        if (useButtonTag)
> > +        {
> > +          AccessKeyUtils.renderAccessKeyText(context,
> > +                                             text,
> > +                                             accessKey,
> > +
> > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > +          if (icon != null)
> > +            OutputUtils.renderImage(context, arc, icon, null, null, null,
> > +                                    getShortDesc(bean));
> > +        }
> > +        else
> > +        {
> > +          if (icon != null)
> > +          {
> > +            renderEncodedResourceURI(context, "src", icon);
> > +          }
> > +          else
> > +          {
> > +            rw.writeAttribute("value", text, "text");
> > +          }
> > +        }
> > +
> > +        rw.endElement(element);
> >      }
> > -    else
> > -    {
> > -      accessKey = CHAR_UNDEFINED;
> > -    }
> > -
> > -    if (useButtonTag)
> > -    {
> > -      AccessKeyUtils.renderAccessKeyText(context,
> > -                                         text,
> > -                                         accessKey,
> > -
> > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > -      if (icon != null)
> > -        OutputUtils.renderImage(context, arc, icon, null, null, null,
> > -                                getShortDesc(bean));
> > -    }
> > -    else
> > -    {
> > -      if (icon != null)
> > -      {
> > -        renderEncodedResourceURI(context, "src", icon);
> > -      }
> > -      else
> > -      {
> > -        rw.writeAttribute("value", text, "text");
> > -      }
> > -    }
> > -
> > -    rw.endElement(element);
> >    }
> >
> >    protected String getButtonType()
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > (revision 483170)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > (working copy)
> > @@ -47,7 +47,7 @@
> >   * @version $Name:  $ ($Revision:
> > adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/skin/StyleSheetNameResolver.java#0
> > $) $Date: 10-nov-2005.18:59:02 $
> >   * @author The Oracle ADF Faces Team
> >   */
> > -class StyleSheetNameResolver implements NameResolver
> > +public class StyleSheetNameResolver implements NameResolver
> > {
> >    /**
> >     * Creates a NameResolver which can locate style sheets
> >
> >
> >
>
>

Mime
View raw message