A new component library could be nice indeed.
On 12/12/06, Adam Winer <[EMAIL PROTECTED]> wrote:
>
> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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
> > >
> > >
> > >
> >
> >
>