//# Grid, Move Cell
import device;
import ui.TextView as TextView;
import ui.View as View;
import ui.widget.GridView as GridView;
import ui.widget.ButtonView as ButtonView;
//## Class: Application
exports = Class(GC.Application, function () {
this.setHorizontalMargin = function (horizontalMargin) {
this._gridView.updateOpts({horizontalMargin: horizontalMargin});
};
this.setVerticalMargin = function (verticalMargin) {
this._gridView.updateOpts({verticalMargin: verticalMargin});
};
this.setHorizontalGutter = function (horizontalGutter) {
this._gridView.updateOpts({horizontalGutter: horizontalGutter});
};
this.setVerticalGutter = function (verticalGutter) {
this._gridView.updateOpts({verticalGutter: verticalGutter});
};
this.setCols = function (cols) {
this._gridView.setCols(cols);
};
this.setRows = function (rows) {
this._gridView.setRows(rows);
};
this.setColspan = function (colspan) {
this._demoCell._opts.colspan = colspan;
};
this.setRowspan = function (rowspan) {
this._demoCell._opts.rowspan = rowspan;
};
this.moveCell = function () {
this._demoCell.move();
};
this.initUI = function () {
this.view.style.backgroundColor = "#FFFFFF";
this._gridView = new GridView({
superview: this.view,
backgroundColor: "#FF0000",
x: device.width / 2 - 140,
y: 10,
width: 280,
height: 200,
cols: 5,
rows: 4,
//Make hide cells out of the grid range...
hideOutOfRange: true,
//Make cells in the grid range visible...
showInRange: true
});
this._demoCell = new DemoCellView({superview: this._gridView, backgroundColor: "#880000", col: 0, row: 0});
var left = device.width / 2 - 140;
//A button to change the horizontal margin of the GridView
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 220,
property: "horizontalMargin",
setter: bind(this, "setHorizontalMargin"),
options: [0, 10, [5, 15], [10, 0]]
});
//A button to change the vertical margin of the GridView
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 255,
property: "verticalMargin",
setter: bind(this, "setVerticalMargin"),
options: [0, 10, [5, 15], [10, 0]]
});
//A button to change the number of columns
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 290,
property: "cols",
setter: bind(this, "setCols"),
options: [5, 4]
});
//A button to change the colspan
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 325,
property: "colspan",
setter: bind(this, "setColspan"),
options: [1, 2, 3]
});
//A button to move the cell
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 360,
property: "",
setter: bind(this, "moveCell"),
options: ["move"]
});
left = device.width / 2 + 5;
//A button to change the horizontal gutter of the GridView
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 220,
property: "horizontalGutter",
setter: bind(this, "setHorizontalGutter"),
options: [0, 10]
});
//A button to change the vertical gutter of the GridView
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 255,
property: "verticalGutter",
setter: bind(this, "setVerticalGutter"),
options: [0, 10]
});
//A button to change the number of rows
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 290,
property: "rows",
setter: bind(this, "setRows"),
options: [4, 3]
});
//A button to change the number of rows
new GridViewSetting({
superview: this.view,
target: this._gridView,
x: left,
y: 325,
property: "rowspan",
setter: bind(this, "setRowspan"),
options: [1, 2, 3]
});
};
this.launchUI = function () {};
});
function optionValue (s) {
s += "";
return (s.length > 10) ? (s.substr(0, 10) + "...") : s;
}
//## Class: DemoCellView
var DemoCellView = Class(View, function (supr) {
this.move = function () {
var opts = this._opts;
var col = opts.col;
var row = opts.row;
col++;
if (col >= this._superview.getCols()) {
col = 0;
row++;
if (row >= this._superview.getRows()) {
row = 0;
}
}
opts.col = col;
opts.row = row;
};
});
//## Class: GridViewSetting
//A button to modify settings of a View
var GridViewSetting = Class(ButtonView, function (supr) {
this.init = function (opts) {
opts = merge(
opts,
{
width: 135,
height: 34,
images: {
up: "resources/images/blue1.png",
down: "resources/images/blue2.png"
},
scaleMethod: "9slice",
sourceSlices: {
horizontal: {left: 80, center: 116, right: 80},
vertical: {top: 10, middle: 80, bottom: 10}
},
destSlices: {
horizontal: {left: 40, right: 40},
vertical: {top: 4, bottom: 4}
},
text: {
color: "#000044",
size: 11,
autoFontSize: false,
autoSize: false
},
on: {
up: bind(this, "onChange")
},
title: opts.property + (opts.property ? "=" : "") + optionValue(opts.options[0])
}
);
supr(this, "init", [opts]);
this._target = opts.target;
this._textViewOpts = opts.textViewOpts;
this._options = opts.options;
this._optionIndex = 0;
this._property = opts.property;
this._setter = opts.setter;
};
this.onChange = function () {
//Step through the available options
this._optionIndex = (this._optionIndex + 1) % this._options.length;
this._text.setText(this._property + (this._property ? "=" : "") + optionValue(this._options[this._optionIndex]));
this._setter(this._options[this._optionIndex]);
};
});
//The output should look like this screenshot:
//