<?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="drawDocumentPanelItem" extends="blueButton" 
		   width="26" height="26" 
		   x_insetResource="2" y_insetResource="2"
		   width_insetResource="22" height_insetResource="22">
		
		<attribute name="modi" value="" type="string" />
		<attribute name="labelid" value="0" type="number" />
		
		<handler name="onclick">
			//if ($debug) Debug.write("parent.parent.parent.parent: ",parent.parent.parent.parent);
			if (parent.parent.parent.ignoreUpdates) {
	            return;
	        }
	        parent.parent.parent.parent._drawareaMask._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());
	        parent.parent.parent.parent._drawareaMask._drawarea.doDocumentAction(this.modi);
		</handler>
		
		<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
	    
	</class>    

</library>