Project

General

Profile

Bug #3559

trigger matching for multi-label events (i.e. RETURN/ENTER/CTRM-M, PAGE-UP/PGUP/PREV-PAGE/PREV-SCRN)

Added by Constantin Asofiei about 6 years ago. Updated about 6 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:
version:

History

#1 Updated by Constantin Asofiei about 6 years ago

4GL has a weird way of matching an event to a trigger, if that event has multiple labels associated with it. For example, a APPLY "RETURN" will match to a ENTER trigger, but only if there is no explicit RETURN trigger. There is also a special case for AUTO-RETURN, where it will match only and only to a ENTER trigger, and not RETURN trigger.

For example, GuiKeyboard.standardKeyFunctions defines multiple events with more than one function - RETURN, COPY, CUT, PAGE_UP, PAGE_DOWN, PASTE. We need to find the rules of trigger matching based on the defined triggers - I assume we will need to test misc combinations of defined triggers, apply and keyboard-level raised events.

An assumption is that each case has a 'default' trigger which will be matched if an explicit trigger is not found; but I don't understand why an APPLY "PG-UP" will match to a PREV-SCRN trigger even if there is an explicit PG-UP trigger. Maybe there is a specific order in which event labels are searched for triggers? And if no trigger found for a label, go to the next one (and labels are sorted in some pre-determined way)?

In FWD's trigger matching, there is this code in EventList.lookupWorker and EventList.addEvent:

         caseEvent = setCase(event[i]);

         // alternate key labels won't be matched if we don't convert them to the primary label

         // convert the label to a key code, alternate labels are honored here 
         int code = Keyboard.keyCode(caseEvent);

         // is this a valid label?
         if (code != -1)
         {
            // yes, it was a label so now convert the common code to the primary label name
            String primary = Keyboard.keyLabel(code); 
            caseEvent = (primary.length() > 0) ? primary : caseEvent;
         }

This converts an event to its 'primary label' - the lookupWorker is a recent change which fixes a APPLY "RETURN", as the trigger was computing the ENTER primary label and APPLY "RETURN" was not matching to it - but the problem is more complex than this.

Also available in: Atom PDF