/* exported navElemQueries navElemVariables navElemReportVariables navElemBands navElemBo NavForm navCom refreshQuery setVisibility EndPutShadowField putField getVariablesDesc putVar putSystemVar getBands clickTreeBand switchBands */ var navValue = ""; var navDim = ""; var navDec = ""; var navIDX = ""; var navType = ""; var navCom = ""; var lastBandSelected; var navElemQueries = true; var navElemVariables = false; var navElemReportVariables = false; var navElemBands = true; var navElemBo = true; var ident = 0; var cacheItemDataObjQuery = []; /* *** Gestione del disegno del Navigator *** */ function NavForm() { ident = 20; // Queries navQueries(); // BO navBO(); // User Variables navUserVariables(); // Report Variables navReportVariables(); // Bands navBands(); selectBand(lastBandSelected); resizeGadgetsPane(); m_bUpdated = true; } /* Disegna la zona Queries del Navigator */ function navQueries() { fieldHTML["vqr"] = []; var tabID = "queries_tab_content"; Ctrl(tabID).innerHTML = ""; // Campi e parametri della query principale designQuery(reportProp.query,tabID,true); // Campi e parametri delle query secondarie (Alternative Queries e Chart) for (var nav_i = 0; nav_i < queryList.length; nav_i++) { if (!Empty(queryList[nav_i]) && queryList[nav_i] != LRTrim(reportProp.query)) { designQuery(queryList[nav_i], tabID); } } } /* Disegna la zona Business Objects del Navigator */ function navBO() { fieldHTML["bo"] = []; var tabID = "business_objects_tab_content"; Ctrl(tabID).innerHTML = ""; for (var nav_i = 0; nav_i < boList.length; nav_i++) { if (!Empty(boList[nav_i])) { designBo(boList[nav_i],tabID); } } } /* Disegna la zona User Variables del Navigator */ function navUserVariables() { var tabID = "variables_tab_content"; Ctrl(tabID).innerHTML = '
' nVar = 0; if (Ctrl("variableList")) { Ctrl("variableList").innerHTML = ""; } for (var nav_i = 0; nav_i < reportVariables.length; nav_i++) { addVariable(reportVariables[nav_i]); } } /* Disegna la zona System Variables del Navigator */ function navReportVariables() { } /* Disegna la zona Bands del Navigator */ var field_tree; function createTree(root_name,children) { var json = [{ "property": { "name": root_name, "deleteDenied": true }, "children": children, "type": "fieldList", "data": { "level": 1, "itemType": "fieldList" } }]; return json; } function initTree() { Mif.Tree.UID = 1; field_tree = new Mif.Tree({ container: document.id('bands_nav'),// tree container initialize: function() { new Mif.Tree.Drag(this, { onDrag: function() { if (this.current && this.current.type[0].indexOf('header') >= 0) { if (this.target && this.target.type[0].indexOf('header') < 0) { this.where = 'notAllowed'; } } if (this.current && this.current.type[0].indexOf('footer') >= 0) { if (this.target && this.target.type[0].indexOf('footer') < 0) { this.where = 'notAllowed'; } } }, onStart: function() { }, onComplete: function() { }, onDrop: function(current, target/*, where*/) { if (current && target) { var tmp = current.dropDenied; current.dropDenied = target.dropDenied; target.dropDenied = tmp; moveBand(current.data.ctrlid) } } }); }, types: {// node types field: { openIcon: 'isFilter',//css class open icon closeIcon: 'isFilter'// css class close icon }, pageheader : { openIcon: 'pageheader',//css class open icon closeIcon: 'pageheader'// css class close icon }, pagefooter : { openIcon: 'pagefooter',//css class open icon closeIcon: 'pagefooter'// css class close icon }, reportheader : { openIcon: 'reportheader',//css class open icon closeIcon: 'reportheader'// css class close icon }, reportfooter : { openIcon: 'reportfooter',//css class open icon closeIcon: 'reportfooter'// css class close icon }, group : { openIcon: 'group',//css class open icon closeIcon: 'group'// css class close icon }, altquery : { openIcon: 'altquery',//css class open icon closeIcon: 'altquery'// css class close icon }, section : { openIcon: 'section',//css class open icon closeIcon: 'section'// css class close icon }, sectbo : { openIcon: 'sectbo',//css class open icon closeIcon: 'sectbo'// css class close icon }, breakpage : { openIcon: 'breakpage',//css class open icon closeIcon: 'breakpage'// css class close icon }, htmlsection : { openIcon: 'htmlsection',//css class open icon closeIcon: 'htmlsection'// css class close icon }, autocover : { openIcon: 'autocover',//css class open icon closeIcon: 'autocover'// css class close icon }, fieldList:{ openIcon: 'root',//css class open icon closeIcon: 'root'// css class close icon } }, dfltType: 'field',//default node type height: 24, //node height onSelect: function(node) { if (node.data && node.data.ctrlid && Ctrl(node.data.ctrlid)) { clickBand2(node.data.ctrlid); } }, propertiesEditable :false, deletable : false, onBeforeDelete : function(/*node*/) { }, onDelete: function(/*node*/) { }, onToggle: function() { resizeGadgetsPane(); } }); } function addNodeTree(current, ptype, pname, pindex, pid) { var position = "inside"; var newNode = new Mif.Tree.Node({ parentNode: null, tree: field_tree }, { property: { name: pname, id : pid }, type: ptype , data : {index:pindex, ctrlid:pid} }); if (ptype != 'pageheader' && ptype != 'pagefooter' && ptype != 'reportheader' && ptype != 'reportfooter') { newNode.dragDisabled = true; newNode.dropDenied = ['before', 'inside', 'after']; } else { if (ptype.indexOf('header') >= 0) { if (ptype == 'pageheader') { phtree = newNode; } else { rhtree = newNode; } } else { if (ptype == 'pagefooter') { pftree = newNode; } else { rftree = newNode; } } } field_tree.add(newNode, current, position); } var rhtree, rftree, phtree, pftree; function navBands() { Ctrl('bands_nav').innerHTML = ""; initTree(); field_tree.load({ json: createTree("",[]) }); if (reorganizeBandList) { reorganizeBandList = false; } var current_node = field_tree.root; field_tree.root.dragDisabled = true; field_tree.root.dropDenied = ['before', 'inside', 'after']; rhtree = null; rftree = null; phtree = null; pftree = null; for (var nav_i = 0; nav_i < bandList.length; nav_i++) { if (bandList[nav_i] != undefined) { if (bandList[nav_i].type == "HeaderBar_top") { addNodeTree(field_tree.root, 'pageheader', Strtran(getDescBand(bandList[nav_i], 25), " ", " "), 0, bandList[nav_i].id); } else if (bandList[nav_i].type == "ReportBar_top") { addNodeTree(field_tree.root, 'reportheader', Strtran(getDescBand(bandList[nav_i], 25), " ", " "), 0, bandList[nav_i].id); } else if (bandList[nav_i].type == "HeaderBar_bottom") { addNodeTree(field_tree.root, 'pagefooter', Strtran(getDescBand(bandList[nav_i], 25), " ", " "), 0, bandList[nav_i].id); } else if (bandList[nav_i].type == "ReportBar_bottom") { addNodeTree(field_tree.root, 'reportfooter', Strtran(getDescBand(bandList[nav_i], 25), " ", " "), 0, bandList[nav_i].id); } else if (bandList[nav_i].type.indexOf("_top") > 0) { addNodeTree(current_node, Strtran(bandList[nav_i].type,'_top', '').toLowerCase(), Strtran(getDescBand(bandList[nav_i], 25), " ", " "), 0, bandList[nav_i].id); current_node = current_node.children[current_node.children.length - 1]; } else if (bandList[nav_i].type.indexOf("_down") > 0) { if (current_node.parentNode) { current_node = current_node.parentNode; } else { current_node = field_tree.root; } } else { addNodeTree(current_node, Strtran(bandList[nav_i].type,'_top','').toLowerCase(), Strtran(getDescBand(bandList[nav_i], 25), " ", " "), 0, bandList[nav_i].id); } } } if (phtree && rhtree) { if (phtree.UID > rhtree.UID) { rhtree.dropDenied = ['inside', 'after']; phtree.dropDenied = ['inside', 'before']; } else { phtree.dropDenied = ['inside', 'after']; rhtree.dropDenied = ['inside', 'before']; } //console.log(Mif.Tree.Draw.isUpdatable(phtree)) phtree.updateProperty('cls', '', 'fldtreemove'); rhtree.updateProperty('cls', '', 'fldtreemove'); } else if (phtree) { phtree.dropDenied = ['inside', 'after', 'before']; } else if (rhtree) { rhtree.dropDenied = ['inside', 'after', 'before']; } if (pftree && rftree) { if (pftree.UID > rftree.UID) { rftree.dropDenied = ['inside', 'after']; pftree.dropDenied = ['inside', 'before']; } else { pftree.dropDenied = ['inside', 'after']; rftree.dropDenied = ['inside', 'before']; } pftree.updateProperty('cls', '', 'fldtreemove'); rftree.updateProperty('cls', '', 'fldtreemove'); } else if (pftree) { pftree.dropDenied = ['inside', 'after', 'before']; } else if (rhtree) { rftree.dropDenied = ['inside', 'after', 'before']; } } /* *** Fine gestione del disegno del Navigator *** */ /* *** Gestione dei campi/parametri delle query e del BO nel Navigator *** */ /* Disegna il div principale della query, che conterra' tutti i suoi elementi. Chiamata da navQueries. */ function designQuery(itemDataObjQuery,accID,isPrincipal) { designQueryFields(itemDataObjQuery,accID,isPrincipal); } function refreshQuery(itemDataObjQuery) { removeCachedQuery(itemDataObjQuery); if (itemDataObjQuery.indexOf("BO:") == 0) { navBO(); } else { navQueries(); } } /* Disegna il div principale del BO, che conterra' tutti i suoi elementi. Chiamata da navBO. */ function designBo(itemDataObjQuery,accID) { designQueryFields(itemDataObjQuery,accID); } /* Disegna il div contenente i campi/i parametri del singolo BO o della query. */ function designQueryFields(itemDataObjQuery, accID, isPrincipal) { // eseguo due volte il metodo per fields e per params designQueryComponents(itemDataObjQuery, "queryFields", accID, isPrincipal); designQueryComponents(itemDataObjQuery, "queryParameters", accID); } /* Disegna i campi/i parametri del singolo BO o della query. */ function designQueryComponents(itemDataObjQuery, type, accID, isPrincipal) { isPrincipal = !isPrincipal ? false : true; var elemByGrp = []; var dataType = (itemDataObjQuery.indexOf("BO:") >= 0) ? "bo" : "vqr"; var map = dataType == "vqr" ? mapQueryItems : mapBoItems; if (itemDataObjQuery != null && Trim(itemDataObjQuery) != "") { var AllField = null; if (type == "queryFields") { AllField = cachedQuery(itemDataObjQuery); } else { AllField = GetQueryParameters(itemDataObjQuery, true); } if (itemDataObjQuery.indexOf("BO:") == 0) { itemDataObjQuery = itemDataObjQuery.substring(3); } var param = (type.indexOf("Param") >= 0) ? true : false; var mtype = param ? "parameter" : "field"; var y = 0; var drgFldObj, item, bList, aList, actband, desc; if (!Ctrl(accID + "_divz")) { elemByGrp[itemDataObjQuery] = 0; } var btnList = ["edit", "reload"]; for (var nav_i = 0; nav_i < AllField[0].length; nav_i++) { y = (elemByGrp[itemDataObjQuery] + 1) * 20; desc = Empty(AllField[1][nav_i]) ? AllField[0][nav_i] : AllField[1][nav_i]; drgFldObj = new ZTObjects.dragFieldObj('field' + fieldcountindex, "Field" + fieldcountindex, mtype, 0, y, 0, 0, AllField[0][nav_i], desc, AllField[2][nav_i], AllField[3][nav_i], AllField[4][nav_i], itemDataObjQuery, itemDataObjQuery, false, param, '', '', true); drgFldObj.fieldDetail.idx = elemByGrp[itemDataObjQuery]; fieldHTML[dataType].push(drgFldObj); fieldcountindex++; elemByGrp[itemDataObjQuery]++; bList = []; aList = dataType == "bo" ? [] : ["EditQuery(\'\'," + isPrincipal + ",\'" + itemDataObjQuery + "\')", "refreshQuery(\'" + itemDataObjQuery + "\')"]; if (!isPrincipal && map[itemDataObjQuery]) { item = itemsHTML[map[itemDataObjQuery]]; type = item.type.toLowerCase().replace(/_top/g, ""); type = type.replace(/_down/g, ""); if (dataType == "bo") { bList = [type]; } else { bList = [type].concat(btnList); } actband = ""; if (bandList.indexOf(item)>=0) { actband = "clickBand(\'"+item.id+"\')"; //"HightlightSelectedSpaceBar("+map[itemDataObjQuery]+")"; } else { actband = "clickItem(event,\'"+item.id+"\')"; } aList = [actband].concat(aList); } else if (isPrincipal) { bList = ["principal"].concat(btnList); aList = [""].concat(aList); } putFieldInAccordion(accID,fieldHTML[dataType][fieldHTML[dataType].length - 1], bList, aList); } } } /* Verifica se la query e' presente nella cache delle query/Bo. Se non e' presente, la inserisce in cache. */ function cachedQuery(itemDataObjQuery) { for (var nav_i = 0; nav_i < cacheItemDataObjQuery.length; nav_i++) { if (cacheItemDataObjQuery[nav_i][0] == itemDataObjQuery) { return cacheItemDataObjQuery[nav_i][1]; } } var AllField = null; if (itemDataObjQuery.indexOf("BO:") == 0) { AllField = MGetQueryFields(itemDataObjQuery, true, true); } else { AllField = MGetQueryFields(itemDataObjQuery, true, false); } if (AllField.indexOf("Error" + itemDataObjQuery) < 0 && AllField.indexOf("ERROR" + itemDataObjQuery) < 0) { cacheItemDataObjQuery.push(new Array(itemDataObjQuery, AllField)); } return AllField; } function removeCachedQuery(itemDataObjQuery) { for (var nav_i = 0; nav_i < cacheItemDataObjQuery.length; nav_i++) { if (cacheItemDataObjQuery[nav_i][0] == itemDataObjQuery) { cacheItemDataObjQuery.splice(nav_i, 1); return; } } } /* Cambia l'immagine che indica se l'elenco dei campi e' aperto o meno. */ function setVisibility(id) { var obj = Ctrl(id); if (obj) { if (obj.style.display == "none") { obj.style.display = "block"; Ctrl("arrow_" + id).src = "images/down.gif"; } else { obj.style.display = "none"; Ctrl("arrow_" + id).src = "images/right.gif"; } resizeGadgetsPane(); } } /* Inserisce il campo nell'area di lavoro. */ function EndPutShadowField(e, idFld, isVar) { if (!isVar) { putFieldInReport(e, idFld); } else { putVariableInReport(e, idFld); } } function putFieldInReport(e,idFld) { var fldObj = getFieldHTMLObj(idFld); navValue = (fldObj.fieldDetail.isParam) ? fldObj.fieldDetail.alias : (fldObj.groupDetail.name + ".c_" + fldObj.fieldDetail.alias); navDim = fldObj.fieldDetail.len; navCom = (fldObj.fieldDetail.desc ? fldObj.fieldDetail.desc : ""); navDec = fldObj.fieldDetail.dec; navType = decodeType(fldObj.fieldDetail.type); putGenericExpression(e, idFld, true, fldObj.fieldDetail.desc); } function putVariableInReport(e,idVar) { var vobj; for (var i = 0; i < reportVariables.length && !vobj; i++) { if (reportVariables[i].id == idVar) { vobj = reportVariables[i]; } } navValue = "w_" + vobj.name; navDim = vobj.len; navCom = (vobj.comment ? vobj.comment : ""); navDec = vobj.dec; navType = vobj.type_value.toLowerCase(); var cc = encodeType(navType); if (navDim == 0) { if (cc == "N") { navDim = 10; } if (cc == "C" || cc == "M") { navDim = 15; } if (cc == "D") { navDim = 8; } if (cc == "T") { navDim = 14; } } putGenericExpression(e, idVar); } function putGenericExpression(e,id,isField,fcomment) { var divContainer = document.createElement("div"); xpos = Ctrl(id+"_shadow").offsetLeft; ypos = Ctrl(id+"_shadow").offsetTop; xpos = xpos - Ctrl("backcanvas").offsetLeft + Ctrl("backcanvas").scrollLeft; ypos = ypos - Ctrl("backcanvas").offsetTop + Ctrl("backcanvas").scrollTop; type = "Expr"; itemsHTML[countindex] = new ZTObjects.ExprObj('item' + nitem, 'Expr' + nitem, 'Expr', 'Expr', '', xpos, ypos); if (isField && !Empty(fcomment)) { itemsHTML[countindex].comment = fcomment; } nitem++; countindex++; nAllItems++; divContainer.innerHTML = itemsHTML[countindex - 1].html; Ctrl("canvasitems").appendChild(divContainer.childNodes[0]); divContainer = null; itemsHTML[countindex - 1].h = Ctrl("item" + (nitem - 1)).offsetHeight * scale / 100; itemsHTML[countindex - 1].w = Ctrl("item" + (nitem - 1)).offsetWidth * scale / 100; itemsHTML[countindex - 1].scale = scale; itemsHTML[countindex - 1].page = reportProp.page; if (navValue != "") { itemsHTML[countindex - 1].exp = navValue; itemsHTML[countindex - 1].len = navDim; itemsHTML[countindex - 1].dec = navDec; itemsHTML[countindex - 1].type_exp = navType; itemsHTML[countindex - 1].comment = navCom; var wz = getDim(itemsHTML[countindex - 1]); itemsHTML[countindex - 1].w = wz * scale / 100; navValue = ""; } undoItemsMoved[undoItemsMoved.length] = new ZTObjects.undoObj(itemsHTML[countindex - 1].id, "add", itemsHTML[countindex - 1].x, itemsHTML[countindex - 1].y, itemsHTML[countindex - 1].x, itemsHTML[countindex - 1].y, itemsHTML[countindex - 1], itemsHTML[countindex - 1].w, itemsHTML[countindex - 1].h, itemsHTML[countindex - 1].w, itemsHTML[countindex - 1].h); putBarDown(e); type = null; insertIntoUndoSequence(); removeClassFromElement("selected_var"); } /* *** Fine della gestione dei campi/parametri delle query e del BO nel Navigator *** */ /* *** Gestione delle variabili nel Navigator *** */ function getVariablesDesc(name) { var label = ""; for (var nav_i = 0; nav_i < reportVariables.length; nav_i++) { if ("w_" + reportVariables[nav_i].name == name) { label = name; if (!(Empty(reportVariables[nav_i].comment))) { label += " : " + Strtran(reportVariables[nav_i].comment, "'", "\'"); } label += " - " + encodeType(reportVariables[nav_i].type_value) + "(" + reportVariables[nav_i].len + "," + (LRTrim(reportVariables[nav_i].dec) == '' ? 0 : reportVariables[nav_i].dec) + ")"; break; } } return label; } function decodeType(code) { switch (code) { case "C": return "character"; case "N": return "numeric"; case "D": return "date"; case "L": return "logic"; case "M": return "memo"; case "T": return "datetime"; } } /* Inserisce un'espressione contenente la variabile nell'area di lavoro. */ function putVar(vobj) { navValue = "w_" + vobj.name; navDim = vobj.len; navCom = ( vobj.comment ? vobj.comment : "" ); navDec = vobj.dec; navType = vobj.type_value.toLowerCase(); var cc = encodeType(navType); if (navDim == 0) { if (cc == "N") { navDim = 10; } if (cc == "C" || cc == "M") { navDim = 15; } if (cc == "D") { navDim = 8; } if (cc == "T") { navDim = 14; } } addItem("Expr"); } /* Inserisce un'espressione contenente la variabile nell'area di lavoro. */ function putSystemVar(name) { var evtType = "click", e; if (arguments[0].type && arguments[0].type == "drop") { e = arguments[0]; name = arguments[1]; evtType = "drag"; } else if (arguments[0].type && arguments[0].type == "click") { name = arguments[1]; } var obj = Ctrl(navIDX); if (obj != undefined) { obj.removeClass("nav_element_selected"); } navValue = name; navIDX = "var_" + name; for (var nav_i = 0; nav_i < systemVariables.length; nav_i++) { if ((systemVariables[nav_i][0]) == name) { navDim = systemVariables[nav_i][3]; navDec = systemVariables[nav_i][4]; navCom = systemVariables[nav_i][1]; if (Empty(navDec)) { navDec = 0; } navType = systemVariables[nav_i][2].toLowerCase(); break; } } if (evtType == "drag") { addItem(e, "Expr"); } else { addItem("Expr"); } } function getDim(item) { var str = ""; for (var n = 0; n < navDim; n++) { str += "x"; } return textSize(item, str); } /* *** Fine della gestione dello spostamento delle barre sul del Navigator *** */ function getBands(item) { var result = ""; if (item.type.indexOf("_down") > 0) { return result; } switch (item.type) { case "Group_top": case "AltQuery_top": case "Section_top": case "SectBo_top": result = getStandardBands(item); break; default: result = getSpecialBands(item); break; } return result; } function getStandardBands(item) { var image, str, tooltip; if (item.type.indexOf("_down") > 0) { return ""; } if (item.id.indexOf("section") < 0) { ident = 11; } else { ident = 20; } str = "
";
}
str += "