352 lines
11 KiB
HTML
352 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<SCRIPT src="../Base.js" type='text/javascript'></SCRIPT>
|
||
<SCRIPT src="../stdFunctions.js" type='text/javascript'></SCRIPT>
|
||
<SCRIPT src="../controls.js" type='text/javascript'></SCRIPT>
|
||
<SCRIPT src="../zdnd_commons.js" type='text/javascript'></SCRIPT>
|
||
<SCRIPT src="EditableGridCtrl.js" type='text/javascript'></SCRIPT>
|
||
<link rel="stylesheet" type="text/css" media="screen" title="default" href="../filewindow.css"></link>
|
||
<script>
|
||
//function initialiseGetData(){
|
||
var GET_DATA=(function(){
|
||
var res={};
|
||
var getDataString=new String(window.location);
|
||
var questionMarkLocation=getDataString.search(/\?/);
|
||
if (questionMarkLocation!=-1){
|
||
getDataString=getDataString.substr(questionMarkLocation+1);
|
||
var getDataArray=getDataString.split(/&/g);
|
||
for (var i=0;i<getDataArray.length;i++){
|
||
var nameValuePair=getDataArray[i].split(/=/);
|
||
res[unescape(nameValuePair[0])]=unescape(nameValuePair[1]);
|
||
}
|
||
}
|
||
return res;
|
||
})();
|
||
//}
|
||
|
||
var parameters={
|
||
id: 'parameters',
|
||
titles: [ 'Name' , 'Type' , 'Object'],
|
||
options:[ {type:'textbox'}, {type:'combobox',values:['var','dataobj','func','const']}, {type:'combobox',values:['articoli_sql','cod_art','this.Trim(this.cod_art.Value())','...other']}],
|
||
blank: [ '' , '' , '']
|
||
};
|
||
|
||
var events={
|
||
id: 'events',
|
||
titles: [ 'Object' , 'Event'],
|
||
options:[ {type:'combobox',values:['TODO:Object list']}, {type:'combobox',values:['TODO:Related events list']}],
|
||
blank: ['' , '']
|
||
};
|
||
|
||
Z.Dict=function(){
|
||
var newkey=function(){
|
||
var res="";
|
||
for(var i=0; i++<9; res+=String.fromCharCode(Math.floor(Math.random()*26+97)));
|
||
return res;
|
||
}
|
||
var keys={};
|
||
this.Add=function(data){
|
||
var k=newkey();
|
||
while(k in this){
|
||
k=this.newkey();
|
||
}
|
||
this[k]=data;
|
||
keys[k]=null;
|
||
return k;
|
||
}
|
||
this.Remove=function(key){
|
||
return delete this[key] && delete keys[key];
|
||
}
|
||
this.Keys=function(){
|
||
return Z.Merge({}, keys);
|
||
}
|
||
}
|
||
|
||
Z.ParametrsGrid = Z.EditableGrid.extend({
|
||
constructor:function(configuration, data){
|
||
this.inherit(configuration, data);
|
||
},
|
||
inputizeCell:function(srcElem){
|
||
var res=this.inherit(srcElem);
|
||
switch(""+srcElem.getAttribute('dataoptions')){
|
||
case '1': //colonna Type
|
||
res.onchange=this.typeChanged.closure(this);
|
||
break;
|
||
case '2': //colonna Object
|
||
var cell = srcElem;
|
||
var row = srcElem.parentNode;
|
||
var txtOld = this.data.rows[row.getAttribute('datarow')][2];
|
||
/*
|
||
var ele=cell;
|
||
while(ele.firstChild){
|
||
ele=ele.firstChild;
|
||
if(ele.tagName=='INPUT' || ele.tagName=='SELECT'){break;}
|
||
}
|
||
ele.parentNode.removeChild(res);*/
|
||
cell.firstChild.removeChild(res);
|
||
switch(row.cells[1].firstChild.lastChild.value){
|
||
case 'dataobj':
|
||
res = this.inputizeObjectCellAsCombo(this.data.options[2].values.dataobjs, txtOld);
|
||
break;
|
||
case 'var':
|
||
res = this.inputizeObjectCellAsCombo(this.data.options[2].values.vars, txtOld);
|
||
break;
|
||
default: //toglie combo e crea textbox per input utente
|
||
res=document.createElement ("INPUT");
|
||
res.setAttribute("type", "TEXT");
|
||
res.setAttribute("value" , txtOld);
|
||
break;
|
||
}
|
||
LibJavascript.Events.addEvent(res, 'keydown', this.checkForEnterEsc.closure(this));
|
||
res.style.width = "100%";
|
||
res.style.boxSizing='border-box';
|
||
res.style.MozBoxSizing='border-box';
|
||
res.style.webkitBoxSizing='border-box';
|
||
cell.firstChild.appendChild(res);
|
||
break;
|
||
}
|
||
return res;
|
||
},
|
||
inputizeObjectCellAsCombo: function(opts, initValue){
|
||
var combo=document.createElement('SELECT');
|
||
var selIdx=0;
|
||
for(var i=0, opt, l=opts.length; i<l; i++){
|
||
opt=opts[i];
|
||
if(opt==initValue)
|
||
selIdx=combo.options.length;
|
||
combo.options[i] = new Option(opt, opt);
|
||
}
|
||
combo.selectedIndex=selIdx;
|
||
return combo;
|
||
},
|
||
typeChanged: function(){
|
||
var objcell=this.objRowSelected.cells[2];//cella di colonna 'Object'
|
||
this.inputizeCell(objcell);
|
||
}
|
||
});
|
||
|
||
Z.EventsGrid = Z.EditableGrid.extend({
|
||
constructor:function(configuration, data){
|
||
this.inherit(configuration, data);
|
||
},
|
||
inputizeCell:function(srcElem){
|
||
var res=this.inherit(srcElem);
|
||
switch(''+srcElem.getAttribute('dataoptions')){
|
||
case '0': //colonna Object
|
||
res.onchange=this.typeChanged.closure(this);
|
||
break;
|
||
case '1': //colonna Event
|
||
var cell = srcElem;
|
||
var row = srcElem.parentNode;
|
||
var txtOld = this.data.rows[row.getAttribute('datarow')][1];
|
||
/*
|
||
var ele=cell;
|
||
while(ele.firstChild){
|
||
ele=ele.firstChild;
|
||
if(ele.tagName=='INPUT' || ele.tagName=='SELECT'){break;}
|
||
}
|
||
ele.parentNode.removeChild(res);
|
||
*/
|
||
cell.firstChild.removeChild(res);
|
||
res = this.inputizeObjectCellAsCombo(this.data.options[1].values[row.cells[0].firstChild.lastChild.value], txtOld);
|
||
LibJavascript.Events.addEvent(res, 'keypress', this.checkForEnterEsc.closure(this));
|
||
res.style.width = "100%";
|
||
cell.firstChild.appendChild(res);
|
||
break;
|
||
}
|
||
return res;
|
||
},
|
||
inputizeObjectCellAsCombo: function(opts, initValue){
|
||
var combo=document.createElement('SELECT');
|
||
var selIdx=-1;
|
||
opts=opts||[];
|
||
for(var i=0, opt, l=opts.length; i<l; i++){
|
||
opt = IsA(opts[i],'O') ? opts[i][0] : opts[i];
|
||
if(opt==initValue)
|
||
selIdx=combo.options.length;
|
||
combo.options[i] = new Option(opt, opt);
|
||
}
|
||
if(selIdx!=-1){
|
||
combo.selectedIndex=selIdx;
|
||
}
|
||
return combo;
|
||
},
|
||
typeChanged: function(){
|
||
var objcell=this.objRowSelected.cells[1];//cella di colonna 'Event'
|
||
this.inputizeCell(objcell);
|
||
}
|
||
});
|
||
</script>
|
||
<title>Event emitter properties</title>
|
||
</head>
|
||
<body bgcolor="#E4E4E4" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" scroll="yes" style="border:0px;overflow:auto;margin:0pt">
|
||
<div id='maindiv'>
|
||
<table valign='top' class='contenuto' style='width:100%;'>
|
||
<tr class='titoli' style='width:100%;'>
|
||
<td align='center' class='titoli' style='width:50%;'><b>Parameters</b></td>
|
||
</tr>
|
||
<tr style='width:100%;'>
|
||
<td valign='top' id='parametersDiv'>
|
||
</td>
|
||
</tr>
|
||
<tr style='width:100%;'>
|
||
<td valign='top' class='footer'>
|
||
<INPUT class='bottoni' value='+' id="btn_addParameters" title="Add" type="button" onclick="javascript:onBtnAdd(parametersCtrl);">
|
||
<INPUT class='bottoni' value='-' id="btn_deleteParameters" title="Remove selection" type="button" onclick="javascript:parametersCtrl.deleteRow();">
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<table valign='top' class='contenuto' style='width:100%;'>
|
||
<tr class='titoli' style='width:100%;'>
|
||
<td align='center' class='titoli' style='width:50%;'><b>Events</b></td>
|
||
</tr>
|
||
<tr style='width:100%;'>
|
||
<td valign='top' id='eventsDiv'>
|
||
</td>
|
||
</tr>
|
||
<tr style='width:100%;'>
|
||
<td valign='top' class='footer'>
|
||
<INPUT class='bottoni' value='+' id="btn_addEvents" title="Add" type="button" onclick="javascript:onBtnAdd(eventsCtrl);">
|
||
<INPUT class='bottoni' value='-' id="btn_deleteEvents" title="Remove selection" type="button" onclick="javascript:eventsCtrl.deleteRow();">
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<table style='width:100%;'>
|
||
<tr><td valign="middle" align="right" nowrap>
|
||
<button onclick="javascript:onOk();" accesskey="o" class="bottoni" style="width:40px;"><u>O</u>k</button>
|
||
<button onclick="javascript:onCancel();" accesskey="c" class="bottoni"><u>C</u>ancel</button>
|
||
</td></tr>
|
||
</table>
|
||
</div>
|
||
<script>
|
||
function onBtnAdd(obj){
|
||
obj.addRow();
|
||
obj.selectLastRow();
|
||
obj.editSelectedRow();
|
||
}
|
||
|
||
|
||
var emitterObj=GetOpener().itemsHTML[GET_DATA.objIdx];
|
||
|
||
parameters.options[2].values=(function(){
|
||
var res={vars:[], dataobjs:[]};
|
||
for(var i=0, items=GetOpener().itemsHTML, l=items.length, itm; i<l;i++){
|
||
itm=items[i];
|
||
if(itm!=emitterObj){
|
||
switch(itm.type){
|
||
case 'Textbox': case 'Variable': case 'Combobox': case 'Checkbox': case 'Radio':
|
||
res.vars.push(itm.name);
|
||
break;
|
||
case 'SQLDataobj': case 'XMLDataobj':
|
||
if(Trim(itm.query)!=''){
|
||
var fields=GetOpener().GetQueryFields(itm.query)[0];
|
||
for(var ii=0, ll=fields.length; ii<ll; res.dataobjs.push(itm.name+'.'+fields[ii++]));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return res
|
||
})();
|
||
|
||
parameters.rows=(function(){
|
||
var res=new Z.Dict();
|
||
var names=emitterObj.parmsNames.split(','), types=emitterObj.parmsTypes.split(','), values=emitterObj.parmsValues.split(',');
|
||
for(var i=0, name,value,type, l=names.length; i<l; i++){
|
||
name=Trim(names[i]);
|
||
value=Trim(values[i]);
|
||
type=Trim(types[i]);
|
||
if(!(name=='' && value=='' && type==''))
|
||
res.Add([name, type ? type : '', value ? Strtran(value,'|',',') : '']);
|
||
}
|
||
return res;
|
||
})();
|
||
|
||
|
||
events.rows=(function(){
|
||
var res=new Z.Dict();
|
||
var names=emitterObj.eventsNames.split(','), objs=emitterObj.eventsObjs.split(',');
|
||
for(var i=0, name,obj, l=names.length; i<l; i++){
|
||
obj=Trim(objs[i]);
|
||
name=Trim(names[i]);
|
||
if(!(name=='' && obj==''))
|
||
res.Add([obj, name ? Strtran(name,'|',',') : '']);
|
||
}
|
||
return res;
|
||
})();
|
||
|
||
events.options=(function(){
|
||
var res=[{type:'combobox', values:[]}, {type:'combobox', values:{}} ];
|
||
for(var i=0, items=GetOpener().itemsHTML, l=items.length, itm; i<l;i++){
|
||
itm=items[i];
|
||
if(itm!=emitterObj){
|
||
if(itm.objClass.events){
|
||
res[0].values.push(itm.name);
|
||
res[1].values[itm.name]=itm.objClass.events;
|
||
/*switch(itm.type){ //solo finch<63> il sistema degli eventi non sara' adeguato
|
||
case 'SQLDataobj': case 'XMLDataobj': case 'Button': case 'Label': case 'Image': //solo finch<63> il sistema degli eventi non sara' adeguato
|
||
res[0].values.push(itm.name);
|
||
res[1].values[itm.name]=itm.objClass.events;
|
||
break; //solo finch<63> il sistema degli eventi non sara' adeguato
|
||
} //solo finch<63> il sistema degli eventi non sara' adeguato
|
||
*/
|
||
}
|
||
}
|
||
}
|
||
return res
|
||
})();
|
||
|
||
var configuration={ blnPointToSelect: false };
|
||
|
||
var parametersCtrl=new Z.ParametrsGrid(configuration, parameters);
|
||
Ctrl('parametersDiv').insertBefore(parametersCtrl.buildTable(), Ctrl('parametersDiv').firstChild);
|
||
parametersCtrl.init();
|
||
|
||
var eventsCtrl=new Z.EventsGrid(configuration, events);
|
||
Ctrl('eventsDiv').insertBefore(eventsCtrl.buildTable(), Ctrl('eventsDiv').firstChild);
|
||
eventsCtrl.init();
|
||
|
||
function onOk(){
|
||
//salva eventuali righe
|
||
if(parametersCtrl.objRowSelected)
|
||
parametersCtrl.saveRow(parametersCtrl.objRowSelected, true);
|
||
if(eventsCtrl.objRowSelected)
|
||
eventsCtrl.saveRow(eventsCtrl.objRowSelected, true);
|
||
|
||
//assegna i parametri
|
||
var parms={names:[], values:[], types:[]};
|
||
var row, rows=parametersCtrl.data.rows;
|
||
for(var k_row in rows.Keys()){
|
||
row = rows[k_row];
|
||
parms.names.push(row[0]);
|
||
parms.types.push(row[1]);
|
||
parms.values.push(Strtran(row[2], ',', '|'));
|
||
}
|
||
emitterObj.parmsNames = parms.names.join(',');
|
||
emitterObj.parmsValues = parms.values.join(',');
|
||
emitterObj.parmsTypes = parms.types.join(',');
|
||
|
||
//assegna gli eventi
|
||
var events={objs:[], types:[]};
|
||
var row, rows=eventsCtrl.data.rows;
|
||
for(var k_row in rows.Keys()){
|
||
row = rows[k_row];
|
||
events.objs.push(row[0]);
|
||
events.types.push(Strtran( row[1] , ',' , '|' ));
|
||
}
|
||
emitterObj.eventsObjs = events.objs.join(',');
|
||
emitterObj.eventsNames = events.types.join(',');
|
||
GetOpener().Properties();
|
||
GetOpener().writeHTML();
|
||
window.close();
|
||
}
|
||
function onCancel(){
|
||
//check for changes: to do
|
||
window.close();
|
||
}
|
||
</script>
|
||
</body>
|
||
</html> |