154 lines
2.9 KiB
JavaScript
154 lines
2.9 KiB
JavaScript
load('ansiedit.js');
|
|
|
|
load('frame.js');
|
|
load('tree.js');
|
|
load('scrollbar.js');
|
|
load('event-timer.js');
|
|
load('graphic.js');
|
|
|
|
var CONTROL_FRAMEEDIT = '1';
|
|
|
|
function edit(fo) {
|
|
log(LOG_DEBUG,'+ Control EDIT loaded');
|
|
var complete = false;
|
|
var inProperty = false;
|
|
|
|
Object.defineProperty(this,'getName', {
|
|
get: function() {
|
|
return 'Frame Edit';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(this,'isComplete', {
|
|
get: function() {
|
|
return complete;
|
|
}
|
|
});
|
|
|
|
log(LOG_DEBUG,' - Owner: '+JSON.stringify(fo.owner));
|
|
|
|
const frame = new Frame(1,1,console.screen_columns,console.screen_rows,BG_BLACK|LIGHTGRAY);
|
|
frame.gotoxy(1,1);
|
|
|
|
header = '\1n'+fo.pageownerlogo+' '.repeat(fo.settings.FRAME_HEADER-console.strlen(fo.pageownerlogo))+'\1n '+
|
|
'\1W\1H'+fo.page+' '.repeat(fo.settings.FRAME_PAGENUM-fo.page.length)+' '+
|
|
'\1G\1H'+' Edit';
|
|
frame.putmsg(header);
|
|
frame.open();
|
|
|
|
var editor = new ANSIEdit({
|
|
x: 1,
|
|
y: 2,
|
|
width: 80,
|
|
height: 23,
|
|
attr: WHITE,
|
|
//showPosition: true,
|
|
menuHeading: 'Frame Edit '+fo.page,
|
|
parentFrame: frame,
|
|
});
|
|
|
|
editor.open();
|
|
editor.menu.addItem('Properties',properties);
|
|
editor.menu.addItem('Exit',onexit);
|
|
editor.menu.addItem('Save & Exit',saveexit);
|
|
|
|
var x = new Graphic;
|
|
x.ANSI = fo.parse(base64_decode(fo.content));
|
|
log(LOG_DEBUG,' - Fields: '+JSON.stringify(fo.frame_fields));
|
|
|
|
const bin = x.BIN;
|
|
var o = 0; // offset into 'bin'
|
|
for (var yy = 0; yy < 22; yy++) {
|
|
for (var xx = 0; xx < 80; xx++) {
|
|
editor.putChar({
|
|
x : xx,
|
|
y : yy,
|
|
ch : bin.substr(o, 1),
|
|
attr : bin.substr(o + 1, 1).charCodeAt(0) || BG_BLACK
|
|
});
|
|
o = o + 2;
|
|
}
|
|
}
|
|
|
|
editor.cycle();
|
|
frame.cycle();
|
|
|
|
this.handle=function(read) {
|
|
if (! js.terminated) {
|
|
switch (ascii(read)) {
|
|
case 26:
|
|
if (inProperty) {
|
|
propFrame.close();
|
|
frame.top();
|
|
frame.cycle();
|
|
inProperty = false;
|
|
|
|
} else {
|
|
properties();
|
|
}
|
|
|
|
return '';
|
|
|
|
case 27:
|
|
if (inProperty) {
|
|
log(LOG_DEBUG, ' + FrameEdit properties(): ESC');
|
|
propFrame.close();
|
|
frame.top();
|
|
frame.cycle();
|
|
inProperty = false;
|
|
}
|
|
|
|
return '';
|
|
|
|
default:
|
|
if (inProperty) {
|
|
log(LOG_DEBUG, ' + FrameEdit properties(): read');
|
|
propFrame.putmsg(read);
|
|
propFrame.cycle();
|
|
|
|
} else {
|
|
editor.getcmd(read);
|
|
editor.cycle();
|
|
frame.cycle();
|
|
}
|
|
|
|
if (! complete)
|
|
return '';
|
|
}
|
|
}
|
|
|
|
editor.close();
|
|
frame.close();
|
|
fo.render();
|
|
|
|
return '';
|
|
}
|
|
|
|
function properties() {
|
|
inProperty = true;
|
|
log(LOG_DEBUG, '+ FrameEdit properties()');
|
|
frame.bottom();
|
|
propFrame = new Frame(1,2,40,14,BG_BLUE|WHITE,frame);
|
|
propFrame.gotoxy(1,1);
|
|
propFrame.putmsg('Properties!');
|
|
propFrame.open();
|
|
propFrame.cycle();
|
|
}
|
|
|
|
function save() {
|
|
fo.content = base64_encode(editor.exportAnsi().join(''));
|
|
fo.save();
|
|
}
|
|
|
|
function onexit() {
|
|
complete = true;
|
|
}
|
|
|
|
function saveexit() {
|
|
save();
|
|
onexit();
|
|
}
|
|
}
|
|
|
|
this;
|