<?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="basePropertyPanel" extends="view" >
	
	<!--- @keywords private is the Box minimized  -->
	<attribute name="isopen" value="true" type="boolean" />
	
	<!--- @keywords private is the Box minimized  -->
	<attribute name="open" value="true" type="boolean" />		
	
	<!--- if this Box should be closeable -->
	<attribute name="closable" value="false" type="boolean" />
	
	<!--- Title of this window -->
	<attribute name="title" type="string" value="basePanel" />
	
	<!--- @keywords private  -->
	<attribute name="initheight" value="0" type="number" />
	
	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
		
	<method name="setLabelId" args="_labelid" >
		this.labelid = _labelid;
		this.title=canvas.getLabelName(this.labelid);
	</method>
	
	<method name="toggleopen">
		//if ($debug) Debug.write("toggleopen:: this.isopen", this.isopen);
		this.setAttribute('isopen',!this.isopen);
		if (this.isopen){		
			this.setAttribute('height',this.initheight);
			this.setAttribute('height',this.initheight);
		} else {	
			this.setAttribute('height',22);		
		}
	</method>
	
    <handler name="oninit">
    	this.initheight=this.height;
    </handler>
	
	<view width="${ this.parent.width }" height="${ this.parent.height-2 }" 
		  x="0" y="1"  />
	
    <view x="0" y="1" width="${ this.parent.width }" height="20" bgcolor="0xE0E1EB" />
    
    <view x="0" y="0" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
    
    <view x="0" y="19" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
	
		  
    <view x="0" y="1" width="${ this.parent.width }" height="20" >
		
		<handler name="onclick">
            this.parent.toggleopen();
        </handler>
		
        <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.parent.title }" 
			fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" resize="true" fontstyle="bold" />
			
		<button visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-23 }" 
			y="1" text="X" height="18" width="20" >
			<handler name="onmouseup">
				this.parent.parent.close();
			</handler>									
		</button>
		
		<view visible="${ !this.parent.parent.isopen }" x="2" y="2" resource="conferenceBox_button_min_small_rsc">
			<handler name="onmouseup">
				this.parent.parent.toggleopen();
			</handler>	
			<labelTooltip name="_labelTooltip" labelid="857" />								
		</view>
		
		<view visible="${ this.parent.parent.isopen }" x="2" y="2" resource="conferenceBox_button_max_small_rsc">
			<handler name="onmouseup">
				this.parent.parent.toggleopen();
			</handler>
			<labelTooltip name="_labelTooltip" labelid="856" />									
		</view>
		
	</view>
</class>

</library>
