<?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="recordListItem" extends="baseContentListItem" height="24">
    
    <attribute name="valueName" type="string" value="" />
    <attribute name="value" type="number" value="0" />
    
	<turnOverTextItem text="$once{ parent.valueName }" width="226" />    
    
	<view width="60" height="24"
		onclick="new lz.confirmDeleteWindow(canvas.main_content._content.inner,{refObj:this});" >		
		<method name="confirmDelete">
            this.parent.parent.parent.parent.parent.itemToDelete=this;
			this.parent.parent.parent.parent.parent.deleteItem.sendEvent(parent);
		</method>
		<image stretches="both" width="16" height="16" 
			 src="$once{ canvas.getThemeImage('button_cancel_rsc') }"
			 align="center" y="4" />
		<labelTooltip labelid="274" />
	</view>	
</class>
	
	
<class name="recordValueList" extends="turnOverList" >
    
    <attribute name="itemToDelete" value="null" />
    
    <event name="deleteItem" />
    
</class>

</library>
