Custom Tilelist Component With Special Effects

I am trying to create a custom tilelist component which incorporates some special visual effects I need for my app. What I'm trying to do is replace the blue themed rollover color which shows when each item is rolled over with an effect which applies the glow effect to each hovered over items image and label and also converts the image to color whilst the item is hovered over (the tilelist itself is converted to greyscale upon application complete). At the moment I have it set so the blue them is completely removed but I want to instead alter the rolover them e to how I've described above. Here's what I mean below, which I made using static images and text (the social item is being hovered over in that picture), followed by the code for my custom tilelist so far:-
http://i223.photobucket.com/albums/dd147/jimmyoneshot/theicons.jpg
<?xml version="1.0" encoding="utf-8"?>
<mx:TileList xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:itemRenderer>
    <mx:Component>
     <mx:Canvas width="125" height="145">
      <mx:Image source="{data.icon}" height="64" width="64" top="10" horizontalCenter="0"/>
      <mx:Label text="{data.label}" bottom="1" horizontalCenter="0" color="#FFFFFF" fontWeight="bold" fontSize="12"/>
     </mx:Canvas>   
    </mx:Component>
    </mx:itemRenderer>
<mx:Script>
<![CDATA[
  import mx.core.EdgeMetrics;
  import mx.core.IFlexDisplayObject;
  import mx.skins.halo.ListDropIndicator;
  import mx.events.DragEvent;
  import mx.controls.listClasses.IListItemRenderer;
  use namespace mx_internal;
  override protected function drawSelectionIndicator(
    indicator:Sprite, x:Number, y:Number,
    width:Number, height:Number, color:uint,
    itemRenderer:IListItemRenderer):void
  // Remove the Selection indicator
  override protected function drawHighlightIndicator(
   indicator:Sprite, x:Number, y:Number,
   width:Number, height:Number, color:uint,
   itemRenderer:IListItemRenderer):void
  ]]>
</mx:Script>
</mx:TileList>

I'm unstuck :)  The key to getting this to work is to import the packages you are going to use in your component.xml.
So, for me..I had to add the following:
        com.adobe.idp.workflow.dsc.type
        com.adobe.idp.taskmanager.form
        com.adobe.idp.taskmanager.form.impl
        com.adobe.idp.taskmanager.form.impl.xfa

Similar Messages

  • Can i export an Imovie project with special effects as a quick time movie then import into final cut express keeping the special effects?

    Hi, Can i export an Imovie project with special effects as a quick time movie then import into final cut express keeping the special effects?

    Absolutely.  Go to File->Export->QuickTime Movie (do NOT use QuickTime Conversion).  Make sure you check the Self-Contained box.  The export will be an exact copy of your Sequence, complete with any filters or other effects you've added.  Import the self-contained movie back into the project (or another project) if needed.
    -DH

  • Custom JSF component with custom value datatype

    I've created a simple custom JSF component with a decode, encodeBegin as follows:
    public void decode(FacesContext context) {
        Map<String, String> requestParameters = context.getExternalContext().getRequestParameterMap();
        String clientId = getClientId(context);
        String value = requestParameters.get(clientId);
        setSubmittedValue(value);
        super.decode(context);
    public void encodeBegin(FacesContext context) throws IOException {
        ResponseWriter response = context.getResponseWriter();
        String clientId = getClientId(context);
        response.startElement("input", this);
        response.writeAttribute("name", clientId, "id");
        response.writeAttribute("type", "text", null);
        String value = (String) getValue();
        if (null != value) {
             response.writeAttribute("value", value, "value");
        response.endElement("input");
    }With also:
    setRendererType(null);as part of the constructor.
    This component works just fine both inside and outside of a dataTable component, as expected.
    What I would like to do now is to replace the String value datatype with a custom class, for example MyDataType. For this I do:
    public void decode(FacesContext context) {
        Map<String, String> requestParameters = context.getExternalContext().getRequestParameterMap();
        String clientId = getClientId(context);
        String value = requestParameters.get(clientId);
        MyDataType myData = (MyDataType) getValue();
        MyDataType newData = (MyDataType) myData.clone();
        newData.setValue(value);
        // copy old object and only update the changed field of this object
        setSubmittedValue(newData);
        super.decode(context);
    public void encodeBegin(FacesContext context) throws IOException {
        ResponseWriter response = context.getResponseWriter();
        String clientId = getClientId(context);
        response.startElement("input", this);
        response.writeAttribute("name", clientId, "id");
        response.writeAttribute("type", "text", null);
        MyDataType value = (MyDataType) getValue();
        if (null != value) {
             response.writeAttribute("value", value.getValue(), "value");
        response.endElement("input");
    }Now this works perfect outside of a dataTable component, but inside it fails to update the property on the BB.
    Are there somewhere examples on how to properly use custom datatypes as values for UIInput components? Also how to only partially update the value (like I do, I only want to update the value field of the MyDataType object)

    Even if I encode the entire MyDataType via hidden input elements and decode it again (i.e. not using a cloned getValue) it's still not working side a dataTable.
    Could it have to do something with me using Facelets?

  • Custom L&F with Shadow effect for Menus & Tooltips

    Hai friends !
    I want to design a custom look and feel with shadow effect for menus
    and tooltips. Pls help me....
    I tried following but..
    i) Extended abstract border....
    ii)Extends ColorUIResource to support "alpha"
    iii)setOpaque(false) in installUI() method
    Event hough I used transperent color for border the underlying color of
    component is displaying at the corners.

    I don't think there's anything you can do with the Tooltips, because the only methods I see that have to do with the tooltips are setTooltipText and getTooltipText..
    But, you can do transparent borders, and here's some code that shows you how to do it. This doesn't do exactly what you want, but you should be able to get there.
    import javax.swing.*;      
    import javax.swing.border.*;  
    import java.awt.*;
    public class BorderTest extends JFrame {
       JPanel panel;
       JButton buttona;
       JButton buttonb;
       public BorderTest () {
          super("BorderTest");
          panel    = new JPanel();
          buttona  = new JButton("TransBorder");
          buttonb  = new JButton("NonTransBorder");
          getContentPane().add(panel);
          panel.setLayout(new GridLayout(0, 2));
          panel.add(buttona);
          panel.add(buttonb);
          panel.setBackground(Color.red);       
          // these two buttons are both blue, but the one with the transparent
          // border ends up looking somewhat purple.
          buttona.setBorder(new TransBorder());
          buttonb.setBorder(new TransBorder(Color.blue));
          setDefaultCloseOperation(EXIT_ON_CLOSE);
          setBounds(0, 0, 300, 300);
       private class TransBorder extends AbstractBorder {    
          Color transColor;
          public TransBorder() {
             super(); 
             transColor  = new Color(0, 0, 255, 100);  // transparent blue
          public TransBorder(Color c) {
             super(); 
             transColor  = c;
          public Insets getBorderInsets(Component c) {
             return new Insets(3, 3, 3, 3);
          public Insets getBorderInsets(Component c, Insets i) {
             return getBorderInsets(c);
          public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
             g.setColor(transColor);
             g.fillRect(x, y, w, h);
       public static void main(String[] args) {
          BorderTest bt  = new BorderTest();
          bt.setVisible(true);
    }Hope this helps.
    Eric

  • Custom ui component with default layout

    Hello,
    I am trying to develop custom swing components with default layout set.
    Both component class and its BeanInfo are written with NetBeans 6.1
    However, when trying to put this custom swing component into interface builder (matisse) of
    NetBeans 6.1, the default layout is always replaced with GroupLayout.
    Is there any way to correctly specify default layout manager used in a custom
    swing component?
    thanks a lot!

    Hi Jacek
    You can embed your custom component with IFrame element in WebDynpro view. IFrame element loads a content by URL which can be bound to controller's context. You can store your custom HTML content in MIME folder of the WebDynpro component. At runtime you can get the URL to the MIME content and initialize the IFrame with the URL.
    However, IFrame element is being reloaded by WebDynpro framework too often during each request/response cycle. This is a disadvantage of the solution.
    BR, Siarhei

  • Custom text component with different start and end points for each line

    I'm trying to create a custom component extending textArea in which each individual line in the textArea would have different start and end points.  For example, the start/end points for line 1 might be 20 pixels in the front and 35 pixels at the end but start/end points for line 2 might be 25 pixels in front and 20 pixels at the end, etc.  These boundary values would be passed in.  The width of the entire textArea component would be a fixed size.  The result would be something like this:
         Jack and Jill
              ran up the hill
      to fetch a pail of water
    depending on the boundary values of each individual line of course.  The custom component would take a string and render it in the text component with the appropriate individual line start and end points.  I'm trying to do this by adding the text component to the display with the passed in string and then adding in spaces in the beginning of each line and adding a "/n" at the end of the line wherever appropriate based on the start and end values for that line.
    Just wondering if I'm on the right track and if anyone has any advice on this.

    > Applying the marker places the same icon on all lines of the graph and I need a different one for each
    What do you have selected when you assign the marker? It
    shouldn't apply to all the markers on the whole graph unless you have all the existing markers selected when you apply the new one.
    Assigning marker designs is exactly analogous to assigning bar graph designs.
    If you have a single marker selected when you assign the new design, it will apply to only that graph data point.
    If you use the group select tool (or option-click with the direct select tool) to reclick on an already-selected marker until all the markers for the same line are selected, and then assign a design, the new design will apply only to the selected line. (You can extend the graph by adding more rows, and the new data points will inherit the marker for the line they are on.)
    The thread linked to below demonstrates in more detail how the marker designs are scaled:
    http://www.adobeforums.com/cgi-bin/webx/.3bc10970/0

  • Help with Special Effect

    I am building the opening page for a website in Flash, I'm
    not the most experienced with Flash, but I'm getting a lot better
    and I know many of the functions. However I'm having a problem with
    an effect. It shouldn't be too hard to figure out, but here it is.
    I have a US Flag that is square it was built in Flash using
    about 10 - 12 layers with some motion. I haven't flattened the
    layers ( I don't know how too, or even know if I'm supposed to do
    that at all).
    I am trying to take the last of the constructed square flag
    and transform the Square into a Circle encompassing all of the
    elements within the square in a nice smooth motion.
    What is the best way for me to go about this?
    Thank You

    First off...no need to flatten layers. In fact, there's no
    such thing in Flash (unlike Photoshop or Fireworks). You can only
    delete layers (not to be confused with Layer Folders whichcan be
    collapsed on the timeline, but not flattened). Most animations need
    their own layer anyway and the number of layers won't in and of
    themselves effect the size of the resultant SWF (the contents of
    those layers will, but adding more layers won't make too much
    difference).
    Secondly, for the animation effect, you probably want to swap
    out your finished square flag (multiple layers) for a single
    graphic (new layer). Then, depending on the exact effect you want,
    you could use a circular mask on the square or perhaps shape tween
    the square to a circle.
    Hope that helps!

  • Custom template component with Spark ?

    Hi there, everyday's got its own (silly?) question :
    I'm trying to develop a new component I've called "Drawer", made of a handle (button) and two skinnable containers displayed when the drawer is "opened" and hidden when it is closed.
    So here is my AS class:
    package nova.style
         import flash.events.MouseEvent;
         import spark.components.Button;
         import spark.components.SkinnableContainer;
         import spark.components.supportClasses.SkinnableComponent;
         [SkinState("closed")]
         [SkinState("opened")]
         public class Drawer extends SkinnableComponent
              // Define skin parts
              [SkinPart(required="true")]
              public var handle:Button;
              [SkinPart(required="true")]
              public var track:SkinnableContainer;
              [SkinPart(required="true")]
              public var drawerContent:SkinnableContainer;
              // Define component data
              [Bindable]
              public var drawerLabel:String;
              [Bindable]
              public var isOpen:Boolean=false;
              [Bindable]
              public var handleX:Number=500;
              public function Drawer()
                   super();
                   isOpen = false;
              override protected function getCurrentSkinState():String {
                   if (isOpen) {
                        return "opened";
                   } else {
                        return "closed";
              override protected function partAdded(partName:String, instance:Object):void
                   super.partAdded(partName,instance);
                   if( instance == handle)
                        handle.addEventListener(MouseEvent.CLICK,handle_clickHandler);
              override protected function partRemoved(partName:String, instance:Object):void
                   super.partRemoved(partName,instance);
                   if( instance == handle)
                        handle.removeEventListener(MouseEvent.CLICK,handle_clickHandler);
              private function handle_clickHandler(event:MouseEvent):void {
                   isOpen=!isOpen;
                   invalidateSkinState();
    and the associated skin :
    <?xml version="1.0" encoding="utf-8"?>
    <s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
                    xmlns:s="library://ns.adobe.com/flex/spark"
                    xmlns:mx="library://ns.adobe.com/flex/halo">
         <s:states>
              <s:State name="closed"/>
              <s:State name="opened"/>
         </s:states>
         <!-- host component -->
         <fx:Metadata>
              [HostComponent("nova.style.Drawer")]
         </fx:Metadata>
         <s:layout>
              <s:BasicLayout />
         </s:layout>
         <s:VGroup width="100%" height="100%" gap="-1">
              <s:Group includeIn="opened" width="100%" height="100%">
                   <s:SkinnableContainer id="drawerContent" width="100%" height="100%">
                   </s:SkinnableContainer>
                   <s:SkinnableContainer id="track" x="{hostComponent.handleX}" width="{handle.width}">
                   </s:SkinnableContainer>
              </s:Group>
              <s:Button id="handle" label="{hostComponent.drawerLabel}" x="{hostComponent.handleX}" skinClass="nova.style.skins.DrawerHandleSkin"/>
              </s:VGroup>
         </s:VGroup>
    </s:SparkSkin>
    I have defined my drawerContent and track parts as SkinnableContainer be cause I want them to be able to hold child elements that the user of my component would specify later on. Actually, I was hoping that I could instanciate my drawer's content in this way :
    <nova:Drawer isOpen="true" drawerLabel="Alarms" skinClass="nova.style.DrawerSkin" handleX="100" width="100%">
              <nova:drawerContent>
                   <s:Panel>
                             <s:Button label="drawer content button"></s:Button>
    </s:Panel>
    </nova:drawerContent>
    <nova:track>
    <s:Panel>
    <s:Button label="track button">
    </s:Button>
    </s:Panel>
    </nova:track>
    </nova:Drawer>
    Unfortunately, neither of the inner buttons are showing at runtime. I guess I've missed a point in my skin class to indicate that my skinnablecontainers can have a content, but I can't find out what.
    Any clue much appreciated !
    Thanks
    Matt

    Hey Matt,
    I took a look at your skinnable approach, and you're pretty close.  You're just missing the part where the properties get pushed in to the skin parts.  For instance, in a button, we have a skin part, called labelDisplay, and a property called label.  When someone sets the label property, you need to push that in to the labelDisplay skin part.  If you were to look at the label setter in Button, you'd see something like:
    if (labelDisplay)
            labelDisplay.text = label;
    For your component, you need a track skin part, and then a trackContent property. When the trackContent gets set, you'd push that in to the track skin part. This is similar to what we do in Panel with controlBarContent and controlBarGroup.  Here's some code snippets from Panel to get you started (I modified the code a bit to make it easier to understand):
    //  controlBarGroup
    [SkinPart(required="false")]
    *  The skin part that defines the appearance of the
    *  control bar area of the container.
    *  By default, the PanelSkin class defines the control bar area to appear at the bottom
    *  of the content area of the Panel container with a grey background.
    *  @see spark.skins.spark.PanelSkin
    *  @langversion 3.0
    *  @playerversion Flash 10
    *  @playerversion AIR 1.5
    *  @productversion Flex 4
    public var controlBarGroup:Group;
    //  controlBarContent
    [ArrayElementType("mx.core.IVisualElement")]
    *  The set of components to include in the control bar area of the
    *  Panel container.
    *  The location and appearance of the control bar area of the Panel container
    *  is determined by the spark.skins.spark.PanelSkin class.
    *  By default, the PanelSkin class defines the control bar area to appear at the bottom
    *  of the content area of the Panel container with a grey background.
    *  Create a custom skin to change the default appearance of the control bar.
    *  @default null
    *  @see spark.skins.spark.PanelSkin
    *  @langversion 3.0
    *  @playerversion Flash 10
    *  @playerversion AIR 1.5
    *  @productversion Flex 4
    public function get controlBarContent():Array
        if (controlBarGroup)
            return controlBarGroup.getMXMLContent();
        else
            return _controlBarContent;
    *  @private
    public function set controlBarContent(value:Array):void
        if (controlBarGroup)
            controlBarGroup.mxmlContent = value;
        _controlBarContent = value;
    *  @private
    override protected function partAdded(partName:String, instance:Object):void
        super.partAdded(partName, instance);
        if (instance == controlBarGroup)
            if (_controlBarContent !== undefined)
                controlBarGroup.mxmlContent = _controlBarContent
    *  @private
    override protected function partRemoved(partName:String, instance:Object):void
        super.partRemoved(partName, instance);
        if (instance == controlBarGroup)
            _controlBarContent = controlBarGroup.getMXMLContent();
            controlBarGroup.mxmlContent = null;
    As I said, I modified the code snippet a bit to make it easier to understand, but that should get you started.
    As per the template component pattern, that stuff should still work, but I think you'd be better off following this new pattern which splits it up in tot he SkinnableComponent and the Skin.
    -Ryan

  • Popup window with special effect

    Hi,
    I',m working on an application based on swing. I need to display a pop up dialog which is being displayed as growing window in the status bar of my application.(I dont know the term used for it. It's similar to the one displayed in MSN Messenger when a new user is logged in- "A window which is displayed with a curtain rising effect").
    I can either go for a JPanel or JPopupmenu and paint thecomponent in an incremental manner. I would lik to know whether any other better approach is available?
    Thanks
    Jobinesh

    Any help on this will be highly appreciated.

  • Problems with special effect pictures on importing, why is this happening?

    I have taken pic in expressive mode on my camera ( panasonic fz200) and when i have imported them they don't have the effect that I used, is there something I have to do on importing or do I have to change photos setting on my own in develop module or is something at the camera I have to change.

    If you shot RAW, Lightroom will not read the expressive mode setting from the camera and apply them to the photo.  It should work shooting JPG as the setting are "baked in".

  • Words with special effects

    Ok, so what I'm trying to do is have the words "capital punishment" and after a few seconds have the last "t" in punishment fall and look as tho it is hanging...get it? How would I go about accomplishing this. Would I start in Live Type then go to Motion? Any help would be appreciated!
    BTW- I'm new so a simplified/detailed explanation would be great!
    Thanks!

    While individual characters can be edited (rotation, position, size, etc) by selecting them, probably the easiest way I can think of to do this would be to have the T as a separate text element that you line up with CAPITAL PUNISHMEN, then animate on it's own...
    Patrick

  • Videos and special effects... (?)

    Okay I just found these.. they are great! But I was wondering... is anyone else having issues when filming either backlit or in the snow?
    My vids are... as best described... "mucky" looking!
    Is there not an option to increase the contrast or to 'vivid color' saturate the look?
    Thanks...
    ===== and for those that do not know about the special effects: =====
    Chapter 5 Using the Video Camera page:53
    Recording Video with Special Effects
    You can record video with a variety of special effects on iPod nano.
    Note: Video effects can only be selected before recording. iPod nano can’t add effects
    to or remove effects from recorded videos. You can’t change video effects settings
    while recording.
    To record video with special effects:
    1 Choose Video Camera from the main menu.
    2 Press and hold the Center button to display the video effects palette.
    3 Use the Click Wheel to browse the effects, and press the Center button to select one.
    The viewfinder screen appears with the selected effect.
    4 Press the Center button again to start recording with video effects.
    5 Press the Center button to stop recording.
    If you exit the Video Camera screen to play back your video, video effects are turned
    off. To resume recording with a video effect, repeat steps 2 through 4.

    Okay, why am I the only one who couldn't figure out how to get Special Effects with my video camera? The User Manual instructions: see pg 7, which is correct and pg 53-54 seem to be written incompletely; and (as I read them) indicate that with "Video Camera" on the screen, the center black button should be held down, thus providing the choices of Special Effects. WRONG. What does provide the array of Special Effects, is to select Video Camera (with the black center button), opening the lens of the camera. Before recording begins, hold the center black button down until the Special Effects are displayed, THEN select one and begin recording with it by quickly depressing the black center button. To end, again depress the black center button.

  • NEW Iphone os 4: Why is the photo on my home screen a special effect?

    My home screen photo is a special effect (x-ray). The problem is actually much bigger..The original set of photos downloaded into my new iphone os4 are ALL special effects! What happened? All the original photos in iphot 09 albums before download are NOT edited with special effects. I tried removing an App called Mega Camera which I thought might be the culprit. I still have the free PS Express installed........ then I restored the phone to original settings. When I downloaded chosen photos after the restore every one looks like a special effect was applied. I am out of solutions . PLEASE HELP. OH BTW the new photos I take with the camera on the phone are also a special effect.

    This may help in the future:
    http://manuals.info.apple.com/enUS/iPhone_iOS4_UserGuide.pdf

  • TileList problem with effects - 'RangeError: Index '8′ specified is out of bounds.' error.

    Flex 3.0 beta TileList problem with effects
    I have a problem with deleting item from a Flex 3.0 beta
    TileList component. While a delete item effect is playing and I
    delete another item (while the first effect is still playing) , I
    get an ‘RangeError: Index ‘8′ specified is out of
    bounds.’ error. How do you delay processing until the effects
    are done? or is there another solution? do I use a callLater()? or
    remove the eventListener and wait until the effect finishes?
    To see the problem, hit the down error twice quickly.
    To see the application ->
    http://designwithflex.com/pics/fasterror.swf
    Here is Thumbnail.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="
    http://www.adobe.com/2006/mxml"
    width="100" height="100">
    <mx:Label text="{data.name}" />
    <mx:Label text="{data.age}" />
    </mx:VBox>
    and here is main.mxml:

    luvgelato,
    Can you please file a bug at
    http://bugs.adobe.com/flex/
    and attach all your MXML code.
    Thanks,
    Peter

  • Clearing customer Items with Special G/L Indicator 'A' (down payment)

    Hi All,
    I've to clear two items of a customer by t.code F-32:
    Both items, that I dysplays by t.code FBL5N (u20AC 20.000,00 and - 20.000,00), are with Special G/L Indicator 'A' (down payment).
    Only the first one contains a 'tax amount' equal to 4.000,00.
    When I process the open Items of the customer by t.code F-32, I expect to see the two items as follows
    20.000,00
    - 20.000,00
    Instead, SAP displays as follows
    24.000,00
    - 20.000,00
    So, I can't clear them as 24.000,00 is not equal to 20.000,00
    Could anyone tell me ho to solve?
    Thanks

    Hi Maurizio,
    first of all, thanks for your answer.
    I've checked the tax category in the G/L account master data of the special G/L
    account used for down payments (A). Tax category is equal to '+ '.
    According to this setting, I posted a customer credit memo as follow:
    Item 01; posting key 11; Customer account XXX; Amount 24.000,00
    Item 02; posting key 09; Customer account XXX; Special G/L Indicator A; Amount 20.000,00 (tax code 20%)
    Item 03; posting key 40; Debit tax account; Amount 20.000,00 (tax code 20%)
    Now I've to clear the item 02 of that credit memo. When I try to do it by t.code F-32, SAP displays the amount 24.000,00 (with tax amount) and not 20.000,00.
    Clearing that item, the system create a automatic posting for tax account of 4000,00.
    This is my issue: SAP shouldn't create this posting for tax account.
    Thank again.
    G.

Maybe you are looking for

  • Can I use the CD key more than once?

    I bought Lightroom as a Christmas present for my husband this year, but his laptop was stolen recently. It will be a few months before we can afford getting him a new one, and I want him to still be able to use Lightroom until then, so I was consider

  • Bank Guarantee in Vendor Master

    Hi, I am having one scenarion for Vendor. I have to maintain Bank Guarantee for Vendor. Where i have to maintain the Bank Guarantee. Sangram

  • How to use shared parameter on request set

    Hi I have a request set with two stages First stage contains From Date and To date where i have named the shared parameter as StartSP and EndSP i have to use these shared parameter in one of the query in next stage where my Type is SQL Statment and i

  • How to change name of software component version in IR and ID?

    Hi All, I have a scenario in which 50 interfaces are there.All interfaces are working fine and we are in Testing stage. I need to change name of Software component which I have used in IR. I tried with release transport. I am able to pass all my mapp

  • Attribute Variables in Weblayouts

    Hello, I'd like to create a weblayout with the transaction BPS_WB. But is impossible for me, to use an attribute variable. It's also impossible in transaction UPSPM (planningfolders) to use an attribute variable in an 'able to web' layout. Is this a