1 contributor
var pageClass = {
new : func (d) {
var m = { parents : [pageClass] };
m.page = d.display.screen;
m.window = {};
m.state = {};
m.selected = '';
return m;
},
del : func (id = nil) {
if (id != nil and typeof(v) == 'scalar') {
delete(me.state, id);
id = [ id ];
}
else {
foreach (var s; keys(me.state))
delete(me.state, s);
id = keys(me.window);
}
foreach (var w; id) {
me.window[w]
.hide()
.del();
delete(me.window, w);
}
},
_selected_text : func (id, text, x, y) {
me.selected = id;
me.window[id]
.setFontSize(16)
.setFont('LiberationFonts/LiberationMono-Regular.ttf')
.setTranslation(x, y)
.setDrawMode(0x01 + 0x04)
.setText(text)
.setColorFill(0,1,1)
.setColor(0,0,0);
},
_editable_text : func (id, text, x, y) {
me.window[id]
.setFontSize(16)
.setFont('LiberationFonts/LiberationMono-Regular.ttf')
.setTranslation(x, y)
.setText(text)
.setColorFill(0,0,0)
.setColor(0,1,1);
},
_normal_text : func (id, text, x, y) {
me.window[id]
.setFontSize(16)
.setFont('LiberationFonts/LiberationMono-Regular.ttf')
.setTranslation(x, y)
.setText(text)
.setColorFill(0,0,0)
.setColor(1,1,1);
},
_title_text : func (id, text, x, y) {
me.window[id]
.setFontSize(16)
.setFont('LiberationFonts/LiberationMono-Regular.ttf')
.setTranslation(x, y)
.setAlignment('center-center')
.setText(text)
.setColorFill(0,0,0)
.setColor(0,1,1);
},
fill : func (id) {
var state = me.state[id];
forindex (var line; state.lines) {
if (find('separator', state.lines[line].type) > -1) {
me.window[id ~ '-' ~ line] = me.page.createChild('path')
.setStrokeLineWidth(1)
.moveTo(state.x_base, state.geometry.y - 12)
.horiz(state.geometry.w - 20)
.setColor(1,1,1);
state.geometry.x = state.x_base;
state.geometry.y += 8;
}
else {
me.window[id ~ '-' ~ line] = me.page.createChild('text');
if (find('normal', state.lines[line].type) > -1)
me._normal_text(
id ~ '-' ~ line,
state.lines[line].text,
state.geometry.x,
state.geometry.y,
);
elsif (find('selected', state.lines[line].type) > -1)
me._selected_text(
id ~ '-' ~ line,
state.lines[line].text,
state.geometry.x,
state.geometry.y,
);
elsif (find('editable', state.lines[line].type) > -1)
me._editable_text(
id ~ '-' ~ line,
state.lines[line].text,
state.geometry.x,
state.geometry.y,
);
elsif (find('title', state.lines[line].type) > -1)
me._title_text(
id ~ '-' ~ line,
state.lines[line].text,
state.x_base - 10 + state.geometry.w / 2,
state.geometry.y
);
if (find('end-of-line', state.lines[line].type) > -1
or find('title', state.lines[line].type) > -1) {
state.geometry.x = state.x_base;
state.geometry.y += 24;
}
else
state.geometry.x += size(state.lines[line].text) * 10 + 8;
}
}
},
draw : func (id, geometry, lines) {
if (contains(me.window, id ~ '-bg')) {
printlog('debug', 'objet ' ~ id ~ ' already exists');
return;
}
if (!contains(geometry, 'h') and !contains(geometry, 'l')) {
printlog('debug', 'missing parameter l or h');
return;
}
me.state[id] = {
lines: lines,
geometry: geometry,
x_base : geometry.x + 10,
h_max : contains(geometry, 'h') ? h : geometry.l * 24 + 8 + geometry.sep * 16,
};
me.state[id].y_max = me.state[id].h_max + me.state[id].geometry.y;
me.window[id ~ '-bg'] = me.page.createChild('path');
me.window[id ~ '-bg']
.rect(geometry.x, geometry.y,
geometry.w, me.state[id].h_max)
.setColor(1,1,1)
.setColorFill(0,0,0);
me.state[id].geometry.x += 10;
me.state[id].geometry.y += 16;
me.fill(id);
},
};