<?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="baseTopPanel" extends="baseBoundingBorderView" 
	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" hasshadow="false">
	
	<!--- if this Box should be closeable -->
	<attribute name="closable" value="false" type="boolean" />
	
	<!--- Title of this window -->
	<attribute name="title" type="string" value="basePanel" />
	
	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
	<method name="setLabelId" args="_labelid" >
		this.labelid = _labelid;
		this.title=canvas.getLabelName(this.labelid);
	</method>
	
	<view name="_bgItem" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
			width="$once{ this.parent.width-2 }" height="$once{ this.parent.height-2 }" />
			
	<view x="1" y="1" height="$once{ this.parent.height-2 }" width="17" 
		  bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
        <handler name="onmousedown">
        	parent.onmousedown.sendEvent(parent);
        </handler>
        <handler name="onmouseup">
        	lz.Cursor.unlock();
        	parent.onmouseup.sendEvent(parent);
        </handler>
        <handler name="onmouseover">
        	//cursor="arrow_draw_panel_cursor" 
        	lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
        </handler>
        <handler name="onmouseout">
        	lz.Cursor.unlock();
        </handler>
		<view resource="draw_box_vertical_rsc" />
	</view>
	
</class>

</library>
