blob: 5b1ed9e1e3f03149a7d3019d45440e025abc8e39 [file] [log] [blame]
<?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="guiPresenter" extends="view" width="250" height="400"
clickable="$once{ this.isdragable }"
onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
<handler name="oninit">
this.setShadow();
</handler>
<method name="setShadow">
<![CDATA[
if (this.isinited && this.hasshadow){
this.normalMC = this.getDisplayObject();
this.displacementMap = new flash.filters.DropShadowFilter();
this.normalMC.filters = [this.displacementMap];
}
]]>
</method>
<attribute name="hasshadow" value="true" type="boolean" />
<!--- The Title of this Box -->
<attribute name="title" value="defaulttitle" type="string" />
<!--- if this Box should be closeable -->
<attribute name="closable" value="true" type="boolean" />
<!--- if this Box should be resizeable -->
<attribute name="resizeable" value="true" type="boolean" />
<!--- Can this Box be docked to others and
the width/height of parent compoent barrier -->
<attribute name="docking" value="true" 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" />
<!---@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 show minimize, maximize, close buttons -->
<attribute name="fullToolBar" value="true" type="boolean" />
<attribute name="maximizable" value="true" type="boolean" />
<attribute name="minimizable" value="true" type="boolean" />
<attribute name="minimized" value="false" type="boolean" />
<attribute name="customMinimizeMethod" value="false" type="boolean" />
<attribute name="initialHeight" value="0" type="number"/>
<!--- @keywords private if this window is dragable -->
<attribute name="isdragable" value="true" type="boolean" />
<attribute name="_barmenuButtonRef" value="null" />
<!--- if this Box should be resizeable -->
<attribute name="ismaximized" value="false" type="boolean" />
<attribute name="maxi_x" value="0" type="number" />
<attribute name="maxi_y" value="0" type="number" />
<attribute name="maxi_height" value="0" type="number" />
<attribute name="maxi_width" value="0" type="number" />
<attribute name="isresizeing" value="false" type="boolean" />
<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
<method name="setLabelId" args="id">
this.labelid=id;
this.setAttribute('title',canvas.getLabelName(this.labelid));
</method>
<!--- the Event will be thrown if you close the Box -->
<event name="onclose" />
<!--- the Event will be thrown if you do click on it and drag -->
<event name="onactivate" />
<!--- this Event will be triggered after resizing -->
<event name="onresized" />
<!--- @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>
<handler name="onwidth" args="w">
<![CDATA[
if (this.isresizeing){
if (w<40){
this.setAttribute('width',41);
this._resizeview.onmouseup.sendEvent();
}
if (w<_titlebar._title.width+70) {
this.setAttribute('width',_titlebar._title.width+71);
this._resizeview.onmouseup.sendEvent();
}
}
]]>
</handler>
<handler name="onheight" args="h">
<![CDATA[
if (this.isresizeing){
if (h<40) {
this.setAttribute('height',41);
this._resizeview.onmouseup.sendEvent();
}
}
]]>
</handler>
<method name="close">
if (this.onclose) this.onclose.sendEvent();
if (this._barmenuButtonRef!=null){
this._barmenuButtonRef.destroy();
this._barmenuButtonRef.parent.onwidth.sendEvent();
}
this.destroy();
</method>
<method name="minimize">
<![CDATA[
this.setAttribute("minimized",true);
this._titlebar._toolbar._minimize.setAttribute("visibility","hidden");
this._titlebar._toolbar._maximize2.setAttribute("visibility","visible");
if (this.customMinimizeMethod) {
return;
}
for (var eg in this.subviews) {
if (this.subviews[eg].name != "_titlebar"
&& this.subviews[eg].name != "_bg") {
this.subviews[eg].setAttribute("visibility","hidden");
}
}
this.initialHeight = this.height;
//this.setAttribute("height",20);
this._minimizeZoom.setAttribute("to",20);
this._minimizeZoom.setAttribute('started', true);
]]>
</method>
<method name="reminimize">
<![CDATA[
this.setAttribute("minimized",false);
this._titlebar._toolbar._minimize.setAttribute("visibility","visible");
this._titlebar._toolbar._maximize2.setAttribute("visibility","hidden");
if (this.customMinimizeMethod) {
return;
}
//this.setAttribute("height",this.initialHeight);
this._minimizeZoom.setAttribute("to",this.initialHeight);
this._minimizeZoom.setAttribute('started', true);
]]>
</method>
<method name="reminimizeComplete">
<![CDATA[
if (!this.minimized) {
for (var eg in this.subviews) {
if (this.subviews[eg].name != "_titlebar"
&& this.subviews[eg].name != "_bg") {
this.subviews[eg].setAttribute("visibility","visible");
}
}
if (!this.resizeable) {
this._resizeview.setAttribute("visibility","hidden");
}
}
]]>
</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>
<method name="activate">
this.onactivate.sendEvent();
this.bringToFront();
if (this._barmenuButtonRef!=null) this._barmenuButtonRef.sendActiveWindow(this);
</method>
<method name="rsapply">
this.isresizeing=true;
this.rs.apply();
</method>
<method name="rsremove">
this.rs.remove();
this.isresizeing=false;
//Debug.write("rsremove",this,this.isinited);
this.onresized.sendEvent();
</method>
<!--- @keywords private -->
<method name="_removeDragState" args="obj">
if (!this.ismaximized){
//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.activate();
if (!this.ismaximized){
_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" />
<view name="_bg" width="${ this.parent.width }" height="${ this.parent.height }"
bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }"
x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
</view>
<view x="1" y="1" width="${ this.parent.width-1 }" height="20" name="_titlebar" >
<!-- stretches="width" -->
<gradientview x="0" width="${ this.parent.width }" height="20"
colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"
colorTo="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
</gradientview>
<text name="_title" fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }"
fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
<view name="_toolbar" visibility="$once{ ((parent.parent.fullToolBar) ? 'visible' : 'hidden' ) }"
x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">
<miniIconsPresenter name="_minimize"
visibility="$once{ ((parent.parent.parent.minimizable) ? 'visible' : 'hidden' ) }"
iconRessourceName="btn_presenter_minimize">
<handler name="onclick">
this.parent.parent.parent.minimize();
</handler>
<labelTooltip labelid="856" />
</miniIconsPresenter>
<miniIconsPresenter name="_maximize2" visibility="hidden"
iconRessourceName="btn_presenter_maximize">
<handler name="onclick">
this.parent.parent.parent.reminimize();
</handler>
<labelTooltip labelid="857" />
</miniIconsPresenter>
<miniIconsPresenter name="_close"
visibility="$once{ ((parent.parent.parent.closable) ? 'visible' : 'hidden' ) }"
iconRessourceName="btn_presenter_close2">
<handler name="onclick">
this.parent.parent.parent.close();
</handler>
<labelTooltip labelid="430" />
</miniIconsPresenter>
</view>
</view>
<handler name="onaddsubview" args="v">
//Debug.write("onaddsubview",v);
if (v.parent.subviews.length>2) this._resizeview.bringToFront();
</handler>
<view visibility="$once{ ((this.parent.resizeable) ? 'visible' : 'hidden' ) }"
name="_resizeview" x="${ this.parent.width - 16 }"
y="${ this.parent.height - 16 }" resource="explorer_resize_rsc"
cursor="explorer_resizemouse_rsc" onmousedown="this.parent.rsapply()"
onmouseup="this.parent.rsremove()" >
<labelTooltip text="resize" />
</view>
<resizestate name="rs"/>
<animator name="_minimizeZoom" attribute="height"
duration="750" to="20" started="false">
<handler name="onstop" args="s">
parent.reminimizeComplete();
</handler>
</animator>
</class>
<class name="miniIconsPresenter" extends="view">
<attribute name="iconRessourceName" value="" type="string"/>
<handler name="onmouseover">
this._bg.setAttribute("bgcolor",0xFFFFFF);
this._bg.setAttribute("visibility","visible");
</handler>
<handler name="onmouseout">
this._bg.setAttribute("visibility","hidden");
</handler>
<handler name="onmousedown">
this._bg.setAttribute("bgcolor",canvas.getThemeColor('basebgcolorizer'));
this._bg.setAttribute("visibility","visible");
</handler>
<handler name="onmouseup">
this._bg.setAttribute("visibility","hidden");
</handler>
<view name="_bg" visibility="hidden" opacity="0.7"
width="14" height="14" x="1" y="1" bgcolor="0xFFFFFF" />
<view name="_itemRsc" resource="$once{ parent.iconRessourceName }" />
</class>
</library>