blob: 9d5d2fbfa9b6f2777903808d5132a86e519d267a [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
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.
-->
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:textEditBar="textEditBar.*"
addedToStage="onAddedToStage()" removedFromStage="onRemovedFromStage()" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Script>
<![CDATA[
import flashx.textLayout.edit.ElementRange;
import flashx.textLayout.edit.IEditManager;
import flashx.textLayout.elements.InlineGraphicElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.FormatValue;
import flashx.textLayout.tlf_internal;
use namespace tlf_internal;
public var activeFlow:TextFlow;
protected function applyChange():void
{
changeForeignElement(imageURL.text, imageWidth.text, imageHeight.text, "none", doChangeImage);
}
protected function changeForeignElement(foreignElementUrl:String, width:String, height:String, float:String, changeCurrent:Boolean):void
{
if (activeFlow && activeFlow.interactionManager is IEditManager)
{
if (changeCurrent)
IEditManager(activeFlow.interactionManager).modifyInlineGraphic(foreignElementUrl, width, height, float);
else
IEditManager(activeFlow.interactionManager).insertInlineGraphic(foreignElementUrl, width, height, float);
activeFlow.interactionManager.setFocus();
}
}
protected var doChangeImage:Boolean = false;
public function update(range:ElementRange):void
{
if (onStage)
{
if (range == null)
visible = false;
else
{
if (!visible)
visible = true;
var makeItTheChangeButton:Boolean = false;
// this logic is a complicated by the fact that we extend the end of the selection because the FE is at the end of the paragraph
if (range && range.firstLeaf is InlineGraphicElement && range.absoluteStart == range.firstLeaf.getAbsoluteStart())
{
// two cases just the FE and just the FE plus the paragraph terminator
if (range.absoluteEnd == range.absoluteStart+1 || (range.firstParagraph == range.lastParagraph && range.absoluteEnd == range.absoluteStart+2 && range.absoluteEnd == range.lastParagraph.getAbsoluteStart() + range.lastParagraph.textLength))
makeItTheChangeButton = true;
}
// block selection of just the FE
if (makeItTheChangeButton)
updateForChange(InlineGraphicElement(range.firstLeaf));
else
updateForInsert(range)
}
}
lastRange = range;
}
protected function updateForChange(inlineElement:InlineGraphicElement):void
{
var sourceString:String = inlineElement.source.toString()
var widthString:String = inlineElement.width === undefined ? FormatValue.AUTO : inlineElement.width.toString();
var heightString:String = inlineElement.height === undefined ? FormatValue.AUTO : inlineElement.height.toString();
doUpdate(sourceString, widthString, heightString, true, true);
}
protected function updateForInsert(range:ElementRange):void
{
doUpdate("",
InlineGraphicElement.tlf_internal::widthPropertyDefinition.defaultValue.toString(),
InlineGraphicElement.tlf_internal::heightPropertyDefinition.defaultValue.toString(),
false, range && range.firstLeaf);
}
private function doUpdate(url:String, width:String, height:String, modify:Boolean, enableImage:Boolean):void
{
imageURL.text = url;
imageWidth.text = width;
imageHeight.text = height;
imageButton.label = modify ? "Change" : "Insert";
doChangeImage = modify;
imageButton.enabled = enableImage;
}
private var onStage:Boolean = false;
private var addedFrameEventListener:Boolean = false;
protected var lastRange:ElementRange = null;
private function onAddedToStage():void
{
// the dataProviders aren't set up yet - delay to the frame
onStage = true;
if (!addedFrameEventListener)
{
addedFrameEventListener = true;
addEventListener("enterFrame",onEnterFrame);
}
}
private function onEnterFrame(p:Event):void
{
this.removeEventListener("enterFrame",onEnterFrame);
addedFrameEventListener = false;
var temp:ElementRange = lastRange;
lastRange = null;
update(temp);
}
private function onRemovedFromStage():void
{
onStage = false;
}
]]>
</mx:Script>
<mx:Label text="Image URL:" fontWeight="bold"/>
<mx:TextInput id="imageURL" width="140"/>
<mx:Label text="Width:" fontWeight="bold"/>
<mx:TextInput id="imageWidth" width="60"/>
<mx:Label text="Height:" fontWeight="bold"/>
<mx:TextInput id="imageHeight" width="60"/>
<mx:Button id="imageButton" label="Insert Image"
click="applyChange()" />
</mx:HBox>