diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml index 3c949f01cd..f62886f611 100644 --- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml +++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml @@ -181,6 +181,7 @@ + diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ReversibleEllipsisOverflow.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ReversibleEllipsisOverflow.as new file mode 100644 index 0000000000..c48c2097dd --- /dev/null +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ReversibleEllipsisOverflow.as @@ -0,0 +1,116 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You 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.royale.html.beads +{ + + import org.apache.royale.core.IBead; + import org.apache.royale.core.IStrand; + import org.apache.royale.core.IUIBase; + + /** + * The ReversibleEllipsisOverflow class is a bead that can be used + * to stop the text from overflowing and display an ellipsis. + * It adds an option to revert the strand to its old state + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.10 + */ + public class ReversibleEllipsisOverflow implements IBead + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.10 + */ + public function ReversibleEllipsisOverflow() + { + } + + private var _strand:IStrand; + private var _oldOverflow:String; + private var _oldTextOverflow:String; + private var _oldDisplay:String; + + /** + * @copy org.apache.royale.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.10 + * @royaleignorecoercion org.apache.royale.core.IUIBase + */ + public function set strand(value:IStrand):void + { + _strand = value; + apply(); + } + + /** + * Apply ellipsis overflow + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.10 + * @royaleignorecoercion org.apache.royale.core.IUIBase + */ + public function apply():void + { + // In SWF it's done automatically + COMPILE::JS + { + var style:CSSStyleDeclaration = (_strand as IUIBase).element.style; + _oldOverflow = style.overflow; + _oldTextOverflow = style.textOverflow; + _oldDisplay = style.display; + style.overflow = "hidden"; + style.textOverflow = "ellipsis"; + style.display = "block"; + } + + } + + /** + * Revert ellipsis overflow + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.10 + * @royaleignorecoercion org.apache.royale.core.IUIBase + */ + public function revert():void + { + COMPILE::JS + { + var style:CSSStyleDeclaration = (_strand as IUIBase).element.style; + style.overflow = _oldOverflow; + style.textOverflow = _oldTextOverflow; + style.display = _oldDisplay; + } + } + + } +} \ No newline at end of file diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as index 56ea0b1e5e..fa1a2fa04b 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as @@ -36,6 +36,7 @@ import mx.core.IDataRenderer; import mx.core.UIComponent; import mx.events.FlexEvent; import mx.core.IUITextField; +import org.apache.royale.html.beads.ReversibleEllipsisOverflow; /* import mx.core.UITextField; @@ -790,25 +791,7 @@ public class Label extends UIComponent return element; } - //---------------------------------- - // truncateToFit - //---------------------------------- - - /** - * If this propery is true, and the Label control size is - * smaller than its text, the text of the - * Label control is truncated using - * a localizable string, such as "...". - * If this property is false, text that does not fit is clipped. - * - * @default true - * - * @langversion 3.0 - * @playerversion Flash 9 - * @playerversion AIR 1.1 - * @productversion Flex 3 - */ - public var truncateToFit:Boolean = true; + private var _truncationBead:ReversibleEllipsisOverflow; //---------------------------------- @@ -893,7 +876,52 @@ public class Label extends UIComponent return _textWidth; } - + //---------------------------------- + // truncateToFit + //---------------------------------- + + /** + * If this propery is true, and the Label control size is + * smaller than its text, the text of the + * Label control is truncated using + * a localizable string, such as "...". + * If this property is false, text that does not fit is clipped. + * + * @default true + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + private var _truncateToFit:Boolean = true; + public function get truncateToFit():Boolean + { + return _truncateToFit; + } + + public function set truncateToFit(value:Boolean):void + { + if (value && !_truncationBead && initialized) + { + _truncationBead = new ReversibleEllipsisOverflow(); + addBead(_truncationBead); + } else if (_truncationBead && _truncateToFit && !value) + { + _truncationBead.revert(); + } else if (_truncationBead && !_truncateToFit && value) + { + _truncationBead.apply(); + } + _truncateToFit = value; + } + + override public function addedToParent():void + { + super.addedToParent(); + truncateToFit = _truncateToFit; + } + //-------------------------------------------------------------------------- //