|
/**
|
|
_enyo.LeftRightArranger_ is an <a href="#enyo.Arranger">enyo.Arranger</a>
|
|
that displays the active control and some of the previous and next controls.
|
|
The active control is centered horizontally in the container, and the
|
|
previous and next controls are laid out to the left and right, respectively.
|
|
|
|
Transitions between arrangements are handled by sliding the new control
|
|
in from the right and sliding the active control out to the left.
|
|
*/
|
|
enyo.kind({
|
|
name: "enyo.LeftRightArranger",
|
|
kind: "Arranger",
|
|
//* The margin width (i.e., how much of the previous and next controls
|
|
//* are visible) in pixels
|
|
margin: 40,
|
|
//* @protected
|
|
axisSize: "width",
|
|
offAxisSize: "height",
|
|
axisPosition: "left",
|
|
constructor: function() {
|
|
this.inherited(arguments);
|
|
this.margin = this.container.margin != null ? this.container.margin : this.margin;
|
|
},
|
|
//* @public
|
|
size: function() {
|
|
var c$ = this.container.getPanels();
|
|
var port = this.containerBounds[this.axisSize];
|
|
var box = port - this.margin -this.margin;
|
|
for (var i=0, b, c; c=c$[i]; i++) {
|
|
b = {};
|
|
b[this.axisSize] = box;
|
|
b[this.offAxisSize] = "100%";
|
|
c.setBounds(b);
|
|
}
|
|
},
|
|
arrange: function(inC, inIndex) {
|
|
var o = Math.floor(this.container.getPanels().length/2);
|
|
var c$ = this.getOrderedControls(Math.floor(inIndex)-o);
|
|
var box = this.containerBounds[this.axisSize] - this.margin -this.margin;
|
|
var e = this.margin - box * o;
|
|
var m = (c$.length - 1) / 2;
|
|
for (var i=0, c, b, v; c=c$[i]; i++) {
|
|
b = {};
|
|
b[this.axisPosition] = e;
|
|
b.opacity = (i == 0 || i == c$.length-1) ? 0 : 1;
|
|
this.arrangeControl(c, b);
|
|
e += box;
|
|
}
|
|
},
|
|
calcArrangementDifference: function(inI0, inA0, inI1, inA1) {
|
|
var i = Math.abs(inI0 % this.c$.length);
|
|
//enyo.log(inI0, inI1);
|
|
return inA0[i][this.axisPosition] - inA1[i][this.axisPosition];
|
|
},
|
|
destroy: function() {
|
|
var c$ = this.container.getPanels();
|
|
for (var i=0, c; c=c$[i]; i++) {
|
|
enyo.Arranger.positionControl(c, {left: null, top: null});
|
|
enyo.Arranger.opacifyControl(c, 1);
|
|
c.applyStyle("left", null);
|
|
c.applyStyle("top", null);
|
|
c.applyStyle("height", null);
|
|
c.applyStyle("width", null);
|
|
}
|
|
this.inherited(arguments);
|
|
}
|
|
});
|
|
|
|
/**
|
|
_enyo.TopBottomArranger_ is an <a href="#enyo.Arranger">enyo.Arranger</a>
|
|
that displays the active control and some of the previous and next controls.
|
|
The active control is centered vertically in the container, and the previous
|
|
and next controls are laid out above and below, respectively.
|
|
|
|
Transitions between arrangements are handled by sliding the new control
|
|
in from the bottom and sliding the active control out the top.
|
|
*/
|
|
enyo.kind({
|
|
name: "enyo.TopBottomArranger",
|
|
kind: "LeftRightArranger",
|
|
dragProp: "ddy",
|
|
dragDirectionProp: "yDirection",
|
|
canDragProp: "vertical",
|
|
//* @protected
|
|
axisSize: "height",
|
|
offAxisSize: "width",
|
|
axisPosition: "top"
|
|
});
|
|
|
|
/**
|
|
_enyo.SpiralArranger_ is an <a href="#enyo.Arranger">enyo.Arranger</a> that
|
|
arranges controls in a spiral. The active control is positioned on top and
|
|
the other controls are laid out in a spiral pattern below.
|
|
|
|
Transitions between arrangements are handled by rotating the new control
|
|
up from below and rotating the active control down to the end of the spiral.
|
|
*/
|
|
enyo.kind({
|
|
name: "enyo.SpiralArranger",
|
|
kind: "Arranger",
|
|
//* Always go through incremental arrangements when transitioning
|
|
incrementalPoints: true,
|
|
//* The amount of space between successive controls
|
|
inc: 20,
|
|
size: function() {
|
|
var c$ = this.container.getPanels();
|
|
var b = this.containerBounds;
|
|
var w = this.controlWidth = b.width/3;
|
|
var h = this.controlHeight = b.height/3;
|
|
for (var i=0, c; c=c$[i]; i++) {
|
|
c.setBounds({width: w, height: h});
|
|
}
|
|
},
|
|
arrange: function(inC, inName) {
|
|
var s = this.inc;
|
|
for (var i=0, l=inC.length, c; c=inC[i]; i++) {
|
|
var x = Math.cos(i/l * 2*Math.PI) * i * s + this.controlWidth;
|
|
var y = Math.sin(i/l * 2*Math.PI) * i * s + this.controlHeight;
|
|
this.arrangeControl(c, {left: x, top: y});
|
|
}
|
|
},
|
|
start: function() {
|
|
this.inherited(arguments);
|
|
var c$ = this.getOrderedControls(this.container.toIndex);
|
|
for (var i=0, c; c=c$[i]; i++) {
|
|
c.applyStyle("z-index", c$.length - i);
|
|
}
|
|
},
|
|
calcArrangementDifference: function(inI0, inA0, inI1, inA1) {
|
|
return this.controlWidth;
|
|
},
|
|
destroy: function() {
|
|
var c$ = this.container.getPanels();
|
|
for (var i=0, c; c=c$[i]; i++) {
|
|
c.applyStyle("z-index", null);
|
|
enyo.Arranger.positionControl(c, {left: null, top: null});
|
|
c.applyStyle("left", null);
|
|
c.applyStyle("top", null);
|
|
c.applyStyle("height", null);
|
|
c.applyStyle("width", null);
|
|
}
|
|
this.inherited(arguments);
|
|
}
|
|
});
|
|
|
|
|
|
/**
|
|
_enyo.GridArranger_ is an <a href="#enyo.Arranger">enyo.Arranger</a> that
|
|
arranges controls in a grid. The active control is positioned at the
|
|
top-left of the grid and the other controls are laid out from left to right
|
|
and then from top to bottom.
|
|
|
|
Transitions between arrangements are handled by moving the active control to
|
|
the end of the grid and shifting the other controls to the left, or up to
|
|
the previous row, to fill the space.
|
|
*/
|
|
enyo.kind({
|
|
name: "enyo.GridArranger",
|
|
kind: "Arranger",
|
|
//* Always go through incremental arrangements when transitioning
|
|
incrementalPoints: true,
|
|
//* @public
|
|
//* Column width
|
|
colWidth: 100,
|
|
//* Column height
|
|
colHeight: 100,
|
|
size: function() {
|
|
var c$ = this.container.getPanels();
|
|
var w=this.colWidth, h=this.colHeight;
|
|
for (var i=0, c; c=c$[i]; i++) {
|
|
c.setBounds({width: w, height: h});
|
|
}
|
|
},
|
|
arrange: function(inC, inIndex) {
|
|
var w=this.colWidth, h=this.colHeight;
|
|
var cols = Math.floor(this.containerBounds.width / w);
|
|
var c;
|
|
for (var y=0, i=0; i<inC.length; y++) {
|
|
for (var x=0; (x<cols) && (c=inC[i]); x++, i++) {
|
|
this.arrangeControl(c, {left: w*x, top: h*y});
|
|
}
|
|
}
|
|
},
|
|
flowControl: function(inControl, inA) {
|
|
this.inherited(arguments);
|
|
enyo.Arranger.opacifyControl(inControl, inA.top % this.colHeight != 0 ? 0.25 : 1);
|
|
},
|
|
calcArrangementDifference: function(inI0, inA0, inI1, inA1) {
|
|
return this.colWidth;
|
|
},
|
|
destroy: function() {
|
|
var c$ = this.container.getPanels();
|
|
for (var i=0, c; c=c$[i]; i++) {
|
|
enyo.Arranger.positionControl(c, {left: null, top: null});
|
|
c.applyStyle("left", null);
|
|
c.applyStyle("top", null);
|
|
c.applyStyle("height", null);
|
|
c.applyStyle("width", null);
|
|
}
|
|
this.inherited(arguments);
|
|
}
|
|
});
|