<?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.
  
-->
<library>

<class name="labelText" extends="text" resize="true" fontsize="11" >

	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
	<method name="setLabelId" args="_labelid" >
		this.labelid = _labelid;
		this.setAttribute('text',canvas.getLabelName(this.labelid));
	</method>
	
</class>


<class name="labelTextWidthTooltip" extends="text" resize="true" 
	   onmouseover="" onmouseout=""
	   fontsize="11" >
	
	<attribute name="labelLabelid" type="number" value="-1" />

	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
	<method name="setLabelId" args="_labelid" >
		this.labelid = _labelid;
		this.setAttribute('text',canvas.getLabelName(this.labelid));
	</method>
	
	<labelTooltip name="_labelTooltip" labelid="$once{ parent.labelLabelid }" />
	
</class>

<class name="labeldTextListItem" extends="textlistitem">
	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
    <method name="setLabelId" args="_labelid" >
        this.labelid = _labelid;
        this.setAttribute('text',canvas.getLabelName(this.labelid));
    </method>
    <labelTooltip initByDataPathparent="true" />
</class>

</library>
