<?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="mainToolsPanelItem" extends="blueButton" 
	   width="26" height="26">
	
	<attribute name="modi" value="" type="string" />
	<attribute name="labelid" value="0" type="number" />
	
	<attribute name="setSelectionToItem" value="true" type="boolean" />
	<attribute name="_isselected" value="false" type="boolean" />
	
	<handler name="oninit">
		if (this._isselected) parent.parent.parent.setSelection(this);
	</handler>
	
	<method name="setSelectionWithoutEvent">
        parent.parent.parent.setSelectionWithoutEvent(this);
    </method>
	
	<handler name="onmouseup">
		//if ($debug) Debug.write("parent.parent.parent",parent.parent.parent);
		parent.parent.parent.setSelection(this);
	</handler>
	<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
</class>

<class name="redoUndoToolsPanelItem" extends="mainToolsPanelItem" setSelectionToItem="false">
	<attribute name="doredo" value="true" type="boolean" />
	<handler name="onclick">	  
          if(this.doredo){
            this.parent.parent.parent.parent._drawareaMask._drawarea.doredo();
          } else {
            this.parent.parent.parent.parent._drawareaMask._drawarea.undoredo();
          }
        </handler>
</class>

<class name="mainToolsHPanelSeperator" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
	   width="26" height="1" ></class>
	   
<class name="mainToolsVPanelSeperator" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
	   width="1" height="26" ></class>

    
</library>
