From a1d0ddef176a6d2d5e4a82d80def6e02a27a4157 Mon Sep 17 00:00:00 2001 From: tvannini Date: Tue, 25 May 2021 00:15:05 +0200 Subject: [PATCH] Icon handler to open combo-lookup controls --- htdocs/js/env.js | 99 +++++++++++++++++++++++++++----- lib/jxhtml.inc | 26 +++++++-- lib/jxjs.inc | 3 +- lib/prgs/o2sys_options_admin.prf | 99 +++++++++++++++++++++++++++++++- lib/prgs/o2sys_options_admin.prg | 2 + 5 files changed, 208 insertions(+), 21 deletions(-) diff --git a/htdocs/js/env.js b/htdocs/js/env.js index c22741f..2b660d3 100644 --- a/htdocs/js/env.js +++ b/htdocs/js/env.js @@ -2706,7 +2706,9 @@ o2jse.tab.changeRow = function(targetObj, movDir, navName) { return false; } targetObj.blur(); - var sourceRow = targetObj.parentNode.parentNode; + var sourceRow = (targetObj.o2.cT == 'listcombo' ? + targetObj.parentNode.parentNode.parentNode : + targetObj.parentNode.parentNode); var targetRow; // _________________________________________________________ Go to previous record ___ if (movDir == "P") { @@ -2861,11 +2863,13 @@ o2jse.tab.moveSel = function(sourceRow, targetRow, noRequest) { } // _____________________________________________ Combo look-up ___ else { + sourceFrame = sourceField; + sourceField = o2jse.firstRealChild(sourceFrame); // _____________________ Move hidden field with code value ___ - $code_field = document.getElementsByName(targetField.o2.c + - targetField.o2.e); - if ($code_field[0]) { - targetParent.appendChild($code_field[0]); + code_field = document.getElementsByName(targetField.o2.c + + targetField.o2.e); + if (code_field[0]) { + targetField.appendChild(code_field[0].cloneNode(true)); } // ______________________________________________ Disabled ___ if (sourceField.tagName.toLowerCase() == 'div') { @@ -2882,11 +2886,12 @@ o2jse.tab.moveSel = function(sourceRow, targetRow, noRequest) { // _______________________________________________ Enabled ___ else { targetClone.innerHTML = sourceField.value; - var newValue = targetField.innerHTML.trim(); + var newValue = targetField.firstChild + .textContent.trim(); sourceField.value = newValue.decode(); sourceField.dropDownActive = false; delete sourceField.saveValue; - targetParent.replaceChild(sourceField, targetField); + targetParent.replaceChild(sourceFrame, targetField); sourceParent.insertBefore(targetClone, sourceParent.firstChild); } @@ -5929,6 +5934,67 @@ o2jse.lu.ck = function(targetObj) { }; +/** + * Handler for onMouseDown events on lookup open icon + * + * @param {object} targetObj Lookup pseudo-element icon receiving event + */ + o2jse.lu.ick = function(targetObj) { + + ctrlObj = o2jse.firstRealChild(targetObj.parentNode); + if (ctrlObj.listObj) { + return o2jse.lu.listOff(ctrlObj); + } + else { + o2jse.lu.list(ctrlObj, true, true); + } + if (ctrlObj.select) { + ctrlObj.select(); + } + return false; + + }; + + +/** + * Handler for OnMouseOver events on lookup open icon to magnify it + * + * @param object targetObj HTML element (DIV) on which event is fired + */ + o2jse.lu.onI = function(targetObj) { + + var ratio = 1.2; + if (o2jse.lu.effectTimeout) { + clearTimeout(o2jse.lu.effectTimeout); + } + if (o2jse.lu.btnEffectObj) { + o2jse.removeEl(o2jse.lu.btnEffectObj); + o2jse.lu.btnEffectObj = null; + } + var bigImg = o2jse.createEl(targetObj.parentNode, + 'DIV', + targetObj.className); + var pos = o2jse.getPos(targetObj); + bigImg.style = 'transform:scale(' + ratio + ');'; + bigImg.style.position = 'absolute'; + bigImg.style.width = parseInt(targetObj.offsetWidth * ratio) + 'px'; + bigImg.style.height = parseInt(targetObj.offsetHeight * ratio) + 'px'; + bigImg.style.left = pos.x + 'px'; + bigImg.style.top = pos.y + 'px'; + bigImg.style.cursor = 'pointer'; + bigImg.onclick = function() { bigImg.onmouseout(); + targetObj.onmouseover = null; + targetObj.onclick(targetObj); }; + bigImg.onmouseout = function() { o2jse.removeEl(bigImg); delete bigImg; }; + targetObj.onmouseout = function() { targetObj.onmouseover = function() { + o2jse.lu.onI(this); + }; }; + o2jse.lu.btnEffectObj = bigImg; + o2jse.elBody.appendChild(o2jse.lu.btnEffectObj); + + }; + + /** * Compose and display items list panel * @@ -8520,7 +8586,7 @@ jxc = function(defObj) { } // __________________________________________________ Disabled ___ else { - divObj.onclick = null; + divObj.onclick = null; } // _________________________ Reload listbox options from items ___ var opts = divObj.getElementsByTagName("div"); @@ -8561,10 +8627,10 @@ jxc = function(defObj) { descField.style.width = defObj.w + 'px'; descField.style.height = defObj.h + 'px'; if (defObj.p.pT != 'tab') { - descField.parentNode.style.left = defObj.x + 'px'; - descField.parentNode.style.top = defObj.y + 'px'; + descField.parentNode.parentNode.style.left = defObj.x + 'px'; + descField.parentNode.parentNode.style.top = defObj.y + 'px'; } - var disabled = descField.nodeName != "INPUT"; + var disabled = descField.nodeName != "INPUT"; if (disabled == defObj.e) { // ________________________________ Replace DIV with INPUT ___ if (defObj.e) { @@ -8613,7 +8679,6 @@ jxc = function(defObj) { // ____________________________________________ Active control ___ var zoom = defObj.p.z; if (defObj.e) { - descField.style.cursor = "pointer"; if (defObj.dyn) { descField.o2.dyn = true; } @@ -8623,10 +8688,18 @@ jxc = function(defObj) { } descField.o2.rows = defObj.p.rows; descField.onkeydown = function(e) { o2jse.lu.k(e, this); }; - descField.onclick = function() { o2jse.lu.ck(this); }; descField.onpaste = function() { o2jse.lu.p(this); }; descField.onfocus = function() { o2jse.lu.f(this); }; descField.onblur = function() { o2jse.lu.b(this); }; + if (defObj.o) { + iObj = descField.parentNode.getElementsByTagName('div')[0]; + iObj.onclick = function() { o2jse.lu.ick(this); }; + descField.style.cursor = 'auto'; + } + else { + descField.onclick = function() { o2jse.lu.ck(this); }; + descField.style.cursor = 'pointer'; + } } // __________________________________________________ Disabled ___ else { diff --git a/lib/jxhtml.inc b/lib/jxhtml.inc index b92c01f..0b4a31f 100644 --- a/lib/jxhtml.inc +++ b/lib/jxhtml.inc @@ -2461,24 +2461,40 @@ class o2html { ($zoom ? ",z:!0" : ",z:!1")); $htmlname = $o2ctrl_obj->nome.$o2ctrl_obj->id_esecuzione; if ($enabled && $enabled_in_tab && $active) { + // ___________________________ Handler icon to open or click on full field ___ + $handler = $app->option_get('lookup_handler'); $js_change = 'onKeyDown="o2jse.lu.k(event, this);" '. - 'onClick="o2jse.lu.ck(this);" '. + ($handler ? '' : 'onClick="o2jse.lu.ck(this);" '). 'onPaste="o2jse.lu.p(this);" '. ($zoom ? 'onDblClick="o2jse.ctrl.zoom(event);" ' : ''). 'onFocus="o2jse.lu.f(this);" onBlur="o2jse.lu.b(this);"'; - print 'larghezza.'px;" '. + $js_prop.'>forza_submit ? ' jxsoc' : ''). ($o2ctrl_obj->error ? ' jxerror' : ''). '" style="width:'.$o2ctrl_obj->larghezza.'px;height:'. - $o2ctrl_obj->altezza."px;cursor:pointer". + $o2ctrl_obj->altezza. + "px;cursor:".($handler ? 'auto' : 'pointer'). ($o2ctrl_obj->visibile ? "" : ";display:none")."\"\n". $js_prop.$js_change. ($o2ctrl_obj->popup_exp ? ' onMouseOver="o2jse.pu.i(event)" onMouseOut="o2jse.pu.o()"' : ''). - ">\n\n"; + ">\n"; + // _________________________________________ Add DIV for open icon handler ___ + if ($handler && $o2ctrl_obj->visibile) { + $effect = $app->option_get('lookup_effect'); + print '
 
'; + } + print '\n"; } else { if (!$desc_value) { diff --git a/lib/jxjs.inc b/lib/jxjs.inc index 37f8ab2..65bd8a9 100644 --- a/lib/jxjs.inc +++ b/lib/jxjs.inc @@ -496,7 +496,8 @@ class jxjs { (!$o2ctrl_obj->tab_index ? ',x:'.$o2ctrl_obj->x.',y:'.$o2ctrl_obj->y : ''). ',w:'.$o2ctrl_obj->larghezza. - ',h:'.$o2ctrl_obj->altezza, + ',h:'.$o2ctrl_obj->altezza. + ($app->option_get('lookup_handler') ? ',o:!0' : ',o:!1'), $o2ctrl_obj->js_props("cssf:'".$o2ctrl_obj->css. ($enabled ? '_field' : '_field_dis'). ($zoom ? ' jxzoom' : ''). diff --git a/lib/prgs/o2sys_options_admin.prf b/lib/prgs/o2sys_options_admin.prf index 71118fa..8755713 100644 --- a/lib/prgs/o2sys_options_admin.prf +++ b/lib/prgs/o2sys_options_admin.prf @@ -12,6 +12,8 @@ function o2sys_options_admin $task_prg§_§var->definisci("opt_grid_scroll", "_o2logical"); $task_prg§_§var->definisci("opt_grid_settings", "o2sys_generic_opt"); $task_prg§_§var->definisci("opt_language", "o2sys_language"); + $task_prg§_§var->definisci("opt_lookup_effect", "_o2logical"); + $task_prg§_§var->definisci("opt_lookup_handler", "_o2logical"); $task_prg§_§var->definisci("opt_lookup_time", "_o2number"); $task_prg§_§var->definisci("opt_menu_app", "_o2logical"); $task_prg§_§var->definisci("opt_menu_help", "_o2logical"); @@ -48,7 +50,7 @@ function o2sys_options_admin $ctrl_o2multipage7->y(20); $ctrl_o2multipage7->larghezza(370); $ctrl_o2multipage7->altezza(260); - $ctrl_o2multipage7->label(array("Language","Menu","Tables","Themes","Miscellaneous")); + $ctrl_o2multipage7->label(array("Language","Menu","Tables","Themes","Combo-lookup")); $ctrl_o2multipage7->buttons("T"); $ctrl_o2button2 = &$form_options_admin->ctrldef("o2button2", "button", "", "", ""); $ctrl_o2button2->x(220); @@ -351,6 +353,20 @@ function o2sys_options_admin $ctrl_o2label21->altezza(20); $ctrl_o2label21->info_padre(array(4)); $ctrl_o2label21->label("NOTE: Minimum allowed time is 300 ms."); + $ctrl_o2label22 = &$form_options_admin->ctrldef("o2label22", "label", "o2multipage7", "", ""); + $ctrl_o2label22->x(30); + $ctrl_o2label22->y(100); + $ctrl_o2label22->larghezza(160); + $ctrl_o2label22->altezza(20); + $ctrl_o2label22->info_padre(array(4)); + $ctrl_o2label22->label("Click on icon handler to open:"); + $ctrl_o2label23 = &$form_options_admin->ctrldef("o2label23", "label", "o2multipage7", "", ""); + $ctrl_o2label23->x(30); + $ctrl_o2label23->y(125); + $ctrl_o2label23->larghezza(160); + $ctrl_o2label23->altezza(20); + $ctrl_o2label23->info_padre(array(4)); + $ctrl_o2label23->label("Magnify icon handler on over:"); $ctrl_o2edit4 = &$form_options_admin->ctrldef("o2edit4", "edit", "o2multipage7", "prg§_§var", "opt_lookup_time"); $ctrl_o2edit4->x(190); $ctrl_o2edit4->y(50); @@ -359,6 +375,23 @@ function o2sys_options_admin $ctrl_o2edit4->azione("mod_lookup_time"); $ctrl_o2edit4->on_change(o2sys_options_admin_exp_5()); $ctrl_o2edit4->info_padre(array(4)); + $ctrl_o2checkbox7 = &$form_options_admin->ctrldef("o2checkbox7", "check", "o2multipage7", "prg§_§var", "opt_lookup_handler"); + $ctrl_o2checkbox7->x(190); + $ctrl_o2checkbox7->y(100); + $ctrl_o2checkbox7->larghezza(20); + $ctrl_o2checkbox7->altezza(20); + $ctrl_o2checkbox7->azione("mod_lookup_handler"); + $ctrl_o2checkbox7->on_change(o2sys_options_admin_exp_5()); + $ctrl_o2checkbox7->info_padre(array(4)); + $ctrl_o2checkbox8 = &$form_options_admin->ctrldef("o2checkbox8", "check", "o2multipage7", "prg§_§var", "opt_lookup_effect"); + $ctrl_o2checkbox8->x(190); + $ctrl_o2checkbox8->y(125); + $ctrl_o2checkbox8->larghezza(20); + $ctrl_o2checkbox8->altezza(20); + $ctrl_o2checkbox8->modificabile(o2sys_options_admin_exp_58()); + $ctrl_o2checkbox8->azione("mod_lookup_effect"); + $ctrl_o2checkbox8->on_change(o2sys_options_admin_exp_5()); + $ctrl_o2checkbox8->info_padre(array(4)); } function o2sys_options_admin§§add_skin_act(&$o2exe) { @@ -406,6 +439,12 @@ function o2sys_options_admin // $o2exe->s(36) && True && o2act::remark("Lookup request delay time while typing") && $o2exe->e(); $o2exe->s(37) && True && o2act::set("prg§_§var", "option_key", o2sys_options_admin_exp_34()) && $o2exe->e(); $o2exe->s(38) && True && o2act::set("prg§_§var", "opt_lookup_time", o2sys_options_admin_exp_40()) && $o2exe->e(); +// $o2exe->s(39) && True && o2act::remark("Lookup uses icon handler or full field to open") && $o2exe->e(); + $o2exe->s(40) && True && o2act::set("prg§_§var", "option_key", o2sys_options_admin_exp_52()) && $o2exe->e(); + $o2exe->s(41) && True && o2act::set("prg§_§var", "opt_lookup_handler", o2sys_options_admin_exp_4()) && $o2exe->e(); +// $o2exe->s(42) && True && o2act::remark("Lookup maginfy handler icon on over") && $o2exe->e(); + $o2exe->s(43) && True && o2act::set("prg§_§var", "option_key", o2sys_options_admin_exp_53()) && $o2exe->e(); + $o2exe->s(44) && True && o2act::set("prg§_§var", "opt_lookup_effect", o2sys_options_admin_exp_54()) && $o2exe->e(); } //|o2_fine_act| function o2sys_options_admin§§load_skins_act(&$o2exe) { @@ -434,6 +473,15 @@ function o2sys_options_admin $o2exe->s(1) && True && o2act::set("prg§_§var", "modified_options", o2sys_options_admin_exp_5()) && $o2exe->e(); } //|o2_fine_act| +function o2sys_options_admin§§mod_lookup_effect_act(&$o2exe) { + $o2exe->s(1) && True && o2act::set("prg§_§var", "modified_options", o2sys_options_admin_exp_5()) && $o2exe->e(); + } //|o2_fine_act| + +function o2sys_options_admin§§mod_lookup_handler_act(&$o2exe) { + $o2exe->s(1) && (o2sys_options_admin_exp_57() || $o2exe->e()) && o2act::set("prg§_§var", "opt_lookup_effect", o2sys_options_admin_exp_8()) && $o2exe->e(); + $o2exe->s(2) && True && o2act::set("prg§_§var", "modified_options", o2sys_options_admin_exp_5()) && $o2exe->e(); + } //|o2_fine_act| + function o2sys_options_admin§§mod_lookup_time_act(&$o2exe) { $o2exe->s(1) && True && o2act::set("prg§_§var", "opt_lookup_time", o2sys_options_admin_exp_35()) && $o2exe->e(); $o2exe->s(2) && True && o2act::set("prg§_§var", "modified_options", o2sys_options_admin_exp_5()) && $o2exe->e(); @@ -587,7 +635,19 @@ function o2sys_options_admin $o2exe->s(82) && True && o2act::set("options", "code", o2sys_options_admin_exp_2()) && $o2exe->e(); $o2exe->s(83) && True && o2act::set("options", "value", o2sys_options_admin_exp_35()) && $o2exe->e(); $o2exe->s(84) && True && o2act::view("options", "S", "") && $o2exe->e(); - $o2exe->s(85) && True && o2act::alert(o2sys_options_admin_exp_45(), 0) && $o2exe->e(); + $o2exe->s(85) && True && o2act::set("prg§_§var", "option_key", o2sys_options_admin_exp_52()) && $o2exe->e(); + $o2exe->s(86) && (o2sys_options_admin_exp_6() || $o2exe->e()) && o2act::view("options", "I", "") && $o2exe->e(); + $o2exe->s(87) && True && o2act::set("options", "o2user", o2sys_options_admin_exp_1()) && $o2exe->e(); + $o2exe->s(88) && True && o2act::set("options", "code", o2sys_options_admin_exp_2()) && $o2exe->e(); + $o2exe->s(89) && True && o2act::set("options", "value", o2sys_options_admin_exp_55()) && $o2exe->e(); + $o2exe->s(90) && True && o2act::view("options", "S", "") && $o2exe->e(); + $o2exe->s(91) && True && o2act::set("prg§_§var", "option_key", o2sys_options_admin_exp_53()) && $o2exe->e(); + $o2exe->s(92) && (o2sys_options_admin_exp_6() || $o2exe->e()) && o2act::view("options", "I", "") && $o2exe->e(); + $o2exe->s(93) && True && o2act::set("options", "o2user", o2sys_options_admin_exp_1()) && $o2exe->e(); + $o2exe->s(94) && True && o2act::set("options", "code", o2sys_options_admin_exp_2()) && $o2exe->e(); + $o2exe->s(95) && True && o2act::set("options", "value", o2sys_options_admin_exp_56()) && $o2exe->e(); + $o2exe->s(96) && True && o2act::view("options", "S", "") && $o2exe->e(); + $o2exe->s(97) && True && o2act::alert(o2sys_options_admin_exp_45(), 0) && $o2exe->e(); } //|o2_fine_act| function o2sys_options_admin§§start_act(&$o2exe) { @@ -897,4 +957,39 @@ function o2sys_options_admin_exp_51() { return ((o2val('prg§_§var','opt_nav_effects') ? true : false)); } //|o2_fine_exp| + +function o2sys_options_admin_exp_52() { + +return ('lookup_handler'); + } //|o2_fine_exp| + +function o2sys_options_admin_exp_53() { + +return ('lookup_effect'); + } //|o2_fine_exp| + +function o2sys_options_admin_exp_54() { + +return ((o2val('prg§_§var','opt_lookup_handler') && o2val('options','value') ? true : false)); + } //|o2_fine_exp| + +function o2sys_options_admin_exp_55() { + +return ((o2val('prg§_§var','opt_lookup_handler') ? true : false)); + } //|o2_fine_exp| + +function o2sys_options_admin_exp_56() { + +return ((o2val('prg§_§var','opt_lookup_handler') && o2val('prg§_§var','opt_lookup_effect') ? true : false)); + } //|o2_fine_exp| + +function o2sys_options_admin_exp_57() { + +return (!o2val('prg§_§var','opt_lookup_handler')); + } //|o2_fine_exp| + +function o2sys_options_admin_exp_58() { + +return (o2val('prg§_§var','opt_lookup_handler')); + } //|o2_fine_exp| ?> diff --git a/lib/prgs/o2sys_options_admin.prg b/lib/prgs/o2sys_options_admin.prg index b91659b..43bb1bc 100644 --- a/lib/prgs/o2sys_options_admin.prg +++ b/lib/prgs/o2sys_options_admin.prg @@ -18,6 +18,8 @@ o2def::act("mod_grid_dblclick"); o2def::act("mod_grid_settings"); o2def::act("mod_grid_wheel"); o2def::act("mod_language"); +o2def::act("mod_lookup_effect"); +o2def::act("mod_lookup_handler"); o2def::act("mod_lookup_time"); o2def::act("mod_menu_help"); o2def::act("mod_menu_open_on");