<?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="explorerBox" extends="view" width="250" y="100" visibility="hidden" | |
height="400" bgcolor="0x000088" | |
onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" > | |
<switch> | |
<when property="$as3"> | |
<passthrough> | |
import flash.filters.DropShadowFilter; | |
</passthrough> | |
</when> | |
</switch> | |
<handler name="oninit"> | |
//if($debug) Debug.write("explorerBox/oninit showWindowEffect? ",canvas.showWindowEffect); | |
if (canvas.showWindowEffect=="y"){ | |
//if($debug) Debug.write("explorerBox/showWindowEffect == YES"); | |
new lz.boxInitEffect(parent,{x:this.x+(this.width/2)-50,y:this.y+(this.height/2)-10,zielx:this.x,ziely:this.y,zielwidth:this.width,zielheight:this.height,objRef:this}); | |
} else { | |
this.sendAnniComplete(); | |
} | |
</handler> | |
<method name="sendAnniComplete"> | |
//if($debug) Debug.write("sendAnniComplete"); | |
this.setAttribute('visibility','visible'); | |
this.setShadow(true); | |
</method> | |
<method name="setShadow" args="bool"> | |
this.hasshadow = bool; | |
<![CDATA[ | |
if (this.isinited){ | |
this.normalMC = this.getDisplayObject(); | |
//Debug.write(this.normalMC); | |
////Debug.write("this.normalMC: ",this.normalMC); | |
////Debug.write("this: ",this); | |
this.displacementMap = new DropShadowFilter(); | |
this.normalMC.filters = [this.displacementMap]; | |
} | |
]]> | |
</method> | |
<!--- The Title of this Box --> | |
<attribute name="title" value="defaulttitle" type="string" /> | |
<!--- if this Box should be closeable --> | |
<attribute name="closable" value="false" type="boolean" /> | |
<!--- if this Box should be resizeable --> | |
<attribute name="resizeable" value="false" type="boolean" /> | |
<!--- Can this Box be docked to others and | |
the width/height of parent compoent barrier --> | |
<attribute name="docking" value="false" type="boolean" /> | |
<!--- Hard to explain but its clear if you play around | |
with that. Its the number of minimum pixels before | |
the "docking" effect will be there --> | |
<attribute name="dockingbarrier" value="15" type="number" /> | |
<!--- the Event will be thrown if you close the Box --> | |
<event name="onclose" /> | |
<!---@keywords private the list of connected views --> | |
<attribute name="dockinglist" value="null" /> | |
<!--- @keywords private temp-older of x-distance to docked-Box --> | |
<attribute name="tempXdistance" value="0" type="number" /> | |
<!--- @keywords private temp-older of y-distance to docked-Box --> | |
<attribute name="tempYdistance" value="0" type="number" /> | |
<!--- @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" /> | |
<!--- @keywords private --> | |
<attribute name="initheight" value="0" type="number" /> | |
<!--- @keywords private store initial height so toggleopen can reset height --> | |
<handler name="oninit"> | |
this.initheight=this.height; | |
////Debug.write("this.isopen: ",this.isopen); | |
if (!this.open) toggleopen(); | |
</handler> | |
<method name="close"> | |
if (this.onclose) this.onclose.sendEvent(); | |
//this.doOut.doStart(); | |
this.doDestroy(); | |
</method> | |
<method name="toggleopen"> | |
////Debug.write("this.isopen",this.isopen); | |
this.setAttribute('isopen',!this.isopen); | |
if (this.isopen){ | |
_calcdockingList(); | |
for (var eg in this.dockinglist){ | |
if(this.dockinglist[eg].docking){ | |
////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title); | |
////Debug.write("open new y",this.y+this.initheight); | |
this.dockinglist[eg].toggleOpenByParent(this.initheight-22); | |
this.dockinglist[eg].setAttribute('y',this.y+this.initheight); | |
} | |
} | |
this.setAttribute('height',this.initheight); | |
} else { | |
_calcdockingList(); | |
for (var eg in this.dockinglist){ | |
if(this.dockinglist[eg].docking){ | |
////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title); | |
this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22)); | |
this.dockinglist[eg].setAttribute('y',this.y+22); | |
} | |
} | |
this.setAttribute('height',22); | |
} | |
</method> | |
<method name="toggleOpenByParent" args="changeY"> | |
////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY); | |
var tempList=new Array(); | |
<![CDATA[ | |
//check for dockable stuff which is connected to this Box | |
for (var eg in this.parent.subviews){ | |
//check that you do not calc with yourself | |
if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){ | |
// there are 4 cases which have to be proofed to check every possible situation | |
var proof=false; | |
////Debug.write("found some: ",this.parent.subviews[eg].title); | |
//top box-border | |
if ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x ) && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){ | |
proof=true; | |
} | |
if (proof) tempList.push(this.parent.subviews[eg]); | |
} | |
} | |
]]> | |
////Debug.write("tempList.length: ",tempList.length); | |
if (tempList.length!=0){ | |
for (var eg in tempList){ | |
if(tempList[eg].docking){ | |
////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY); | |
tempList[eg].toggleOpenByParent(changeY); | |
tempList[eg].setAttribute('y',tempList[eg].y+changeY); | |
} | |
} | |
} | |
</method> | |
<!--- @keywords private --> | |
<method name="_removeDragState" args="obj"> | |
//It's important to remove the dragger and do docking stuff before you check for conencted Boxes | |
dragger.remove(); | |
if (obj==this){ | |
if (docking) arrangePosition(); | |
} else { | |
if (docking) _lookforParentOnly(obj); | |
} | |
//check for connected Boxes | |
for (var eg in this.dockinglist){ | |
if(this.dockinglist[eg].docking){ | |
this.dockinglist[eg]._removeDragState(this); | |
} | |
} | |
</method> | |
<!--- @keywords private | |
the arg obj is needed because the dragging can be called by the Box itself | |
or by a Box which is connected to this Box! --> | |
<method name="_startDragState" args="obj"> | |
this.bringToFront(); | |
_calcdockingList(); | |
for (var eg in this.dockinglist){ | |
if(this.dockinglist[eg].docking){ | |
this.dockinglist[eg]._startDragState(this); | |
} | |
} | |
//store position cause it wasn't dragged by itself | |
if (obj!=this){ | |
storeAdjustmentToParent(obj.x,obj.y); | |
} | |
dragger.apply(); | |
</method> | |
<!--- Calc the List of Boxes which will be dragged and setposition if this Box | |
will be dragged,docked or minimized/maximized --> | |
<method name="_calcdockingList"> | |
//Clear list of conencted Boxes | |
this.dockinglist=new Array(); | |
<![CDATA[ | |
//check for dockable stuff which is connected to this Box | |
for (var eg in this.parent.subviews){ | |
//check that you do not calc with yourself | |
if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){ | |
// there are 4 cases which have to be proofed to check every possible situation | |
var proof=false; | |
//top box-border | |
if ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x ) && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){ | |
proof=true; | |
} | |
if (proof) this.dockinglist.push(this.parent.subviews[eg]); | |
} | |
} | |
]]> | |
////Debug.write("this.dockinglist.length:",this.dockinglist.length); | |
</method> | |
<!--- @keywords private --> | |
<method name="arrangePosition"> | |
//do the magic | |
//the idea is: look for all on the view container one level above this one | |
//and look for the width/height and 0/0 and look for "dockable" stuff there | |
var newx=this.x; | |
var newy=this.y; | |
<![CDATA[ | |
for (var eg in this.parent.subviews){ | |
//check that you do not calc with yourself | |
if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){ | |
// there are 4 cases which have to be proofed to check every possible situation | |
//left box-border | |
if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) && ( (this.y+this.height) > this.parent.subviews[eg].y ) && ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){ | |
newx= ( this.parent.subviews[eg].x - this.width ); | |
} | |
//right box-border | |
if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) && ( (this.y+this.height) > this.parent.subviews[eg].y ) && ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){ | |
newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width ); | |
} | |
//top box-border | |
if ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x ) && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){ | |
newy = this.parent.subviews[eg].y-this.height; | |
} | |
//bottom box-border | |
if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x ) && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){ | |
newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height; | |
} | |
} | |
} | |
//Check for Borders | |
//should be done _after_ checking for other dockable stuff so it gets | |
//priority to dock against the border of parent view | |
if (this.x<this.dockingbarrier){ | |
newx=0; | |
} | |
if (this.y<this.dockingbarrier){ | |
newy=0; | |
} | |
if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){ | |
newx=this.parent.width-this.width; | |
} | |
if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){ | |
newy=this.parent.height-this.height; | |
} | |
//set position | |
this.setAttribute('x',newx); | |
this.setAttribute('y',newy); | |
]]> | |
</method> | |
<method name="storeAdjustmentToParent" args="objX,objY"> | |
this.tempXdistance=objX-this.x; | |
this.tempYdistance=objY-this.y; | |
</method> | |
<!--- @keywords private | |
this method is needed because if the dragging end and | |
it was not dragged _itself_ it was draged just because a connected | |
dockable Box was dragged than it could be that the connected | |
Box was forced to dock against something different onmouseup | |
so you have to rearrange the old "adjustment" --> | |
<method name="_lookforParentOnly" args="obj"> | |
<![CDATA[ | |
var newx=obj.x-tempXdistance; | |
var newy=obj.y-tempYdistance; | |
this.setAttribute('x',newx); | |
this.setAttribute('y',newy); | |
]]> | |
</method> | |
<dragstate name="dragger" /> | |
<animator attribute="y" to="20" duration="1000" start="false" /> | |
<animator name="doOut" attribute="y" to="-500" duration="1000" start="false" onstop="parent.doDestroy()" /> | |
<method name="doDestroy"> | |
this.destroy(); | |
</method> | |
<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" | |
x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" /> | |
<view x="1" y="1" width="${ this.parent.width-2 }" height="20" > | |
<gradientview x="0" width="${ this.parent.width }" height="20" | |
colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }" | |
colorTo="0x000088" > | |
</gradientview> | |
<text fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" | |
fgcolor="0xFFFFFF" resize="true" fontstyle="bold" /> | |
<view visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-20 }" | |
y="2" resource="btn_presenter_close" | |
onmouseover="this.setAttribute('frame',2)" | |
onmouseout="this.setAttribute('frame',1)" | |
onmousedown="this.setAttribute('frame',3)" | |
onmouseup="this.setAttribute('frame',1)" > | |
<handler name="onclick"> | |
this.parent.parent.close(); | |
</handler> | |
</view> | |
<!-- | |
<view visible="${ !this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_min_rsc"> | |
<handler name="onmouseover"> | |
this.setAttribute('frame',2); | |
</handler> | |
<handler name="onmouseout"> | |
this.setAttribute('frame',1); | |
</handler> | |
<handler name="onmousedown"> | |
this.setAttribute('frame',3); | |
</handler> | |
<handler name="onmouseup"> | |
this.setAttribute('frame',1); | |
this.parent.parent.toggleopen(); | |
</handler> | |
</view> | |
<view visible="${ this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_max_rsc"> | |
<handler name="onmouseover"> | |
this.setAttribute('frame',2); | |
</handler> | |
<handler name="onmouseout"> | |
this.setAttribute('frame',1); | |
</handler> | |
<handler name="onmousedown"> | |
this.setAttribute('frame',3); | |
</handler> | |
<handler name="onmouseup"> | |
this.setAttribute('frame',1); | |
this.parent.parent.toggleopen(); | |
</handler> | |
</view> | |
--> | |
</view> | |
<handler name="onaddsubview" args="v"> | |
////Debug.write("onaddsubview",v); | |
if (v.parent.subviews.length>2) this._resizeview.bringToFront(); | |
</handler> | |
<view visible="${ this.parent.resizeable }" name="_resizeview" | |
x="${ this.parent.width - 17 }" y="${ this.parent.height - 17 }" | |
resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc" | |
onmousedown="this.parent.rs.apply()" | |
onmouseup="this.parent.rs.remove()" > | |
<handler name="oninit"> | |
//if ($debug) Debug.write("setTint"); | |
//TODO: Fix this, does not work at the moment | |
//http://code.google.com/p/openmeetings/issues/detail?id=470 | |
this.setColor(canvas.getThemeColor('baseMousecolorizer')); | |
</handler> | |
</view> | |
<resizestate name="rs"/> | |
</class> | |
</library> |