313 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			313 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Function O4WI_FORMDESIGNER_PAGE_XXX(ACTION, headerInfo, formInfo_Orig, uniqueid, ctlentid, event, param1, param2, param3, status)
 | |
| *#!Precompile
 | |
| 
 | |
| /*
 | |
| *  This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without
 | |
| *  written permission from Revelation Technologies, Inc.
 | |
| !
 | |
| *
 | |
| *  VERSION    : 1.0
 | |
| *
 | |
| *
 | |
| *  AUTHOR     : Revelation Software Inc., All Rights Reserved
 | |
| *
 | |
| *  CREATED    : July 20, 2015
 | |
| *
 | |
| *
 | |
| !
 | |
| *
 | |
| *  REVISION HISTORY           (Most CURRENT first) :
 | |
| *
 | |
| *    DATE       IMPLEMENTOR     FUNCTION
 | |
| *  --------     -----------     --------
 | |
| *
 | |
| *
 | |
| */
 | |
| *
 | |
| $Insert o4wcommon
 | |
| $Insert o4wequates
 | |
| $Insert O4W_DESIGN_FORM_EQUATES
 | |
| $Insert O4W_COMMUTER_COMMON
 | |
| 
 | |
| Declare Function Repository, Function, RTI_VERIFY_PROC
 | |
| 
 | |
| If Assigned(ACTION) Else ACTION = ""
 | |
| If Assigned(HEADERINFO) Else HEADERINFO = ""
 | |
| If Assigned(FORMINFO_ORIG) Else FORMINFO_ORIG = ""
 | |
| If Assigned(UNIQUEID) Else UNIQUEID = ""
 | |
| If Assigned(param1) Else param1 = ""
 | |
| If Assigned(param2) Else param2 = ""
 | |
| If Assigned(param3) Else param3 = ""
 | |
| If Assigned(status) Else status = ""
 | |
| 
 | |
| If pageNo@ = "" Then pageNo@ = 1
 | |
| If pageNo@ <> headerinfo<HEADER_CURR_PAGE$> Then
 | |
|    * must load in the current page
 | |
|    Read formInfo From o4wtempfile%, uniqueID:"_PAGE_":pageNo@ Else formInfo = ""
 | |
| End Else
 | |
|    formInfo = formInfo_Orig
 | |
| end
 | |
| 
 | |
| Equ page_desc$ To "Generic"
 | |
| If formInfo<FORMINFO_PAGE_CONTROL_HDR$> = "" Then
 | |
|    Gosub setDefaults
 | |
| End Else
 | |
|    Gosub updateHeader
 | |
| end
 | |
| 
 | |
| 
 | |
| RSLT = ""
 | |
| 
 | |
| If Not(Num(ACTION)) Or ACTION < PAGEWIDGET_ACTION_MIN_VALUE$ Or ACTION > PAGEWIDGET_ACTION_MAX_VALUE$ Then
 | |
|      rslt = WIDGET_ACTION_INVALID$
 | |
| End Else
 | |
|      On action Gosub doPreDraw, doDraw, handleResults, doPropsShow, doPropsSave, doSaveDefaults
 | |
| End
 | |
| 
 | |
| Return RSLT
 | |
| 
 | |
| 
 | |
| doPropsShow:
 | |
|    O4WSectionStart("specialSection", o4wmarkedoptions(1):o4wresponseoptions())
 | |
|    num.fields = dcount(formInfo<FORMINFO_ID$>, @VM)
 | |
|    o4wtablestart("fieldTable")
 | |
|    For each.Field = 1 To num.fields
 | |
|       id = forminfo<FORMINFO_ID$, each.Field>
 | |
|       type = formInfo<FORMINFO_TYPE$, each.Field>
 | |
|       supportName = UCASE(DESIGN_SUPPORT_PREFIX$:Type)
 | |
|       IF RTI_VERIFY_PROC(supportName, 0, 5) = 0 THEN
 | |
|           CALL SET_STATUS(0)
 | |
|       END Else
 | |
|          pInfo = Function(@supportName(WIDGET_ACTION_INFO$, headerInfo, formInfo, id, WIDGET_INFO_DB$))
 | |
|          If pInfo <> "" Then
 | |
|          end
 | |
|       end
 | |
|    Next each.field
 | |
|    o4wbutton("OK", "BTN_PPROPS_OK", O4WMARKEDOPTIONS(1))
 | |
|    o4wspace(3)
 | |
|    o4wbutton("Cancel", "BTN_DISCARD_NO")
 | |
|    O4WQUALIFYEVENT("BTN_PPROPS_OK", "CLICK")
 | |
|    O4WQUALIFYEVENT("BTN_DISCARD_NO", "CLICK")
 | |
|    o4wsectionend("specialSection")
 | |
|    o4wdialog("specialSection", page_desc$:" Properties")
 | |
| Return
 | |
| 
 | |
| doPropsSave:
 | |
|    NAMES = "CLEAR"
 | |
|    values = ""
 | |
|    Gosub doUpdate2
 | |
|    values = o4wgetvalue("KEYFIELD")
 | |
|    names = "KEYFIELD"
 | |
|    Gosub doUpdate2
 | |
| Return
 | |
| 
 | |
| doUpdate:
 | |
|    names = param1
 | |
|    values = param2
 | |
| doUpdate2:
 | |
|    num.names = dcount(names, @FM)
 | |
|    For each.name = 1 To num.names
 | |
|       this.name = names<each.name>
 | |
|       this.value = values<each.name>
 | |
|       Begin Case
 | |
|          Case this.name = "CLEAR"
 | |
|             formInfo<FORMINFO_PAGE_CONTROL_HDR$> = HEADER_TAG_VERSION$
 | |
|             formInfo<FORMINFO_PAGE_CONTROL$> = HEADER_TAG_VERSION_VALUE$
 | |
|          Case this.name = "KEYFIELD"
 | |
|       End Case
 | |
|    Next each.name
 | |
| Return
 | |
| 
 | |
| doPreDraw:
 | |
|    DRROOverrideFlag@ = ""
 | |
|    DRShowNoneOverrideFlag@ = ""
 | |
| 
 | |
| Return
 | |
| 
 | |
| doDraw:
 | |
| Return
 | |
| 
 | |
| handleResults:
 | |
| runMode = param1
 | |
| bMobile = param2
 | |
| bHandled = 0
 | |
| 
 | |
| 
 | |
| If bHandled = 0 Then
 | |
|      * call into the helper to handle this
 | |
|      rslt = O4WI_FORMDESIGNER_PAGE_HELPER("EVENT",  headerInfo, formInfo, errs, runMode, bMobile, ctlentid, event, uniqueID)
 | |
| end
 | |
| 
 | |
| Return
 | |
| 
 | |
| setDefaults:
 | |
| formInfo<FORMINFO_PAGE_CONTROL_HDR$> = HEADER_TAG_VERSION$
 | |
| formInfo<FORMINFO_PAGE_CONTROL$> = HEADER_TAG_VERSION_VALUE$
 | |
| num.fields = dcount(formInfo<FORMINFO_ID$>, @VM)
 | |
| buttons = ""
 | |
| firstField = ""
 | |
| For each.Field = 1 To num.fields
 | |
|    id = forminfo<FORMINFO_ID$, each.Field>
 | |
|    type = formInfo<FORMINFO_TYPE$, each.Field>
 | |
|    supportName = UCASE(DESIGN_SUPPORT_PREFIX$:Type)
 | |
|    IF RTI_VERIFY_PROC(supportName, 0, 5) = 0 THEN
 | |
|        CALL SET_STATUS(0)
 | |
|    END Else
 | |
|       If type = CONTROL_TYPE_BUTTON$ Or type = CONTROL_TYPE_M_BUTTON$ Then
 | |
|            pInfo = Function(@supportName(WIDGET_ACTION_INFO$, headerInfo, formInfo, id, WIDGET_INFO_NAME$))
 | |
|            bName = ID
 | |
|            If pInfo <> "" Then
 | |
|                bName = pInfo<1>
 | |
|            End
 | |
|            buttons<1,-1> = id
 | |
|            buttons<2,-1> = bName
 | |
|       End else
 | |
|            pInfo = Function(@supportName(WIDGET_ACTION_INFO$, headerInfo, formInfo, id, WIDGET_INFO_DB$:@FM:WIDGET_INFO_INPUT$))
 | |
|            If pInfo<1,1> <> ""  And pInfo[1,1] <> "<" And pInfo<2> = "1" Then
 | |
|               Locate id In formInfo<FORMINFO_PAGE_CONTROL_HDR$> using @VM setting posn Else null 
 | |
|               formInfo<FORMINFO_PAGE_CONTROL_HDR$, posn> = id
 | |
|               tableName = pInfo<1,1>
 | |
|               fieldName = pInfo<1,2>
 | |
|               conv_o = pInfo<1,5>
 | |
|               pType = "0" ;* default to prompt
 | |
|               skipIfNull = 1 ;* default to true
 | |
|               sType = 0 ;* default to unchanged
 | |
|               jType = "0" ;* default to and
 | |
|               addl = ""
 | |
|               details = "IMP":@SVM:ptype:@SVM:addl:@SVM:type:@SVM:tableName:@SVM:fieldName:@SVM:conv_o:@SVM:skipIfNull:@SVM:sType:@SVM:jType
 | |
|               formInfo<FORMINFO_PAGE_CONTROL$, posn> = details
 | |
|               If pInfo<2> = "1" And firstField = "" Then firstField = id
 | |
|            End
 | |
|        end
 | |
|    End
 | |
| Next each.Field
 | |
| num.buttons = dcount(buttons<1>, @VM)
 | |
| For each.button = 1 To num.buttons
 | |
|      this.button = buttons<1, each.button>
 | |
|      this.button.name = buttons<2, each.button>
 | |
|      If this.button = "" Then this.button = " "
 | |
|      bType = ""
 | |
|      unassignedCnt = 1
 | |
|      Begin Case
 | |
|      Case indexc(this.button.name, "read", 1) Or indexc(this.button.name, "go", 1)
 | |
|           bType = TRIGGER_EVENT_READ$     
 | |
|      Case indexc(this.button.name, "search", 1)
 | |
|           bType = TRIGGER_EVENT_SEARCH$
 | |
|      Case indexc(this.button.name, "forward", 1) Or indexc(this.button.name, "next", 1)
 | |
|           bType = TRIGGER_EVENT_FORWARD$
 | |
|      Case indexc(this.button.name, "prev", 1) Or indexc(this.button.name, "back", 1)
 | |
|           bType = TRIGGER_EVENT_BACK$  
 | |
|      Case indexc(this.button.name, "save", 1)
 | |
|           btype = TRIGGER_EVENT_SAVE$
 | |
|      Case indexc(this.button.name, "cancel", 1)
 | |
|           btype = TRIGGER_EVENT_CANCEL$
 | |
|      Case indexc(this.button.name, "del", 1)
 | |
|           btype = TRIGGER_EVENT_DEL$
 | |
|      Case indexc(this.button.name, "new", 1)
 | |
|           btype = TRIGGER_EVENT_NEW$
 | |
|      Case indexc(this.button.name, "qbf", 1)
 | |
|           * not an assignable type
 | |
|      CASE unassignedCnt = 1
 | |
|           bType = TRIGGER_EVENT_SEARCH$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 2 
 | |
|           bType =  TRIGGER_EVENT_CANCEL$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 3
 | |
|           bType = TRIGGER_EVENT_FORWARD$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 4
 | |
|           bType = TRIGGER_EVENT_BACK$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 5 
 | |
|           bType = TRIGGER_EVENT_NEW$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 6 
 | |
|           bType = TRIGGER_EVENT_DEL$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 7 
 | |
|           bType = TRIGGER_EVENT_READ$
 | |
|           unassignedCnt += 1
 | |
|      CASE unassignedCnt = 8
 | |
|           btype = TRIGGER_EVENT_SAVE$
 | |
|           unassignedCnt += 1
 | |
|      End CASE
 | |
|      If bType <> "" Then
 | |
|           * bzs 011721 swapped for version 2.0
 | |
|           formInfo = Insert(formInfo, FORMINFO_PAGE_CONTROL_HDR$, 1, 0, this.button)
 | |
|           formInfo = Insert(formInfo, FORMINFO_PAGE_CONTROL$, 1, 0, bType)
 | |
|           If bType = TRIGGER_EVENT_NEW$ Then
 | |
|                * default to 'user entered' key
 | |
|                formInfo = Insert(formInfo, FORMINFO_PAGE_CONTROL_HDR$, 1, 0, HEADER_TAG_NEW_DETAIL$)
 | |
|                formInfo = Insert(formInfo, FORMINFO_PAGE_CONTROL$, 1, 0, "U")
 | |
|           end
 | |
|       end
 | |
| Next each.button
 | |
| If firstField <> "" Then
 | |
|      formInfo<FORMINFO_PAGE_CONTROL_HDR$, -1> = HEADER_TAG_FOCUS$
 | |
|      formInfo<FORMINFO_PAGE_CONTROL$, -1> = firstField
 | |
| end
 | |
| Return
 | |
| 
 | |
| updateHeader:
 | |
| * bzs 011721 make sure header info is in new format
 | |
| If formInfo<FORMINFO_PAGE_CONTROL_HDR$,1> <> HEADER_TAG_VERSION$ Or formInfo<FORMINFO_PAGE_CONTROL$,1> <> HEADER_TAG_VERSION_VALUE$ Then
 | |
|      NUM.HDR = DCOUNT(forminfo<FORMINFO_PAGE_CONTROL_HDR$>, @VM)
 | |
|      NEW.HDR = HEADER_TAG_VERSION$
 | |
|      NEW.DETAILS = HEADER_TAG_VERSION_VALUE$
 | |
|      For EACH.HDR = 1 To NUM.HDR
 | |
|           this.element = formInfo<FORMINFO_PAGE_CONTROL_HDR$, each.hdr>
 | |
|           this.detail = formInfo<FORMINFO_PAGE_CONTROL$, each.hdr>
 | |
|           Begin Case
 | |
|                Case THIS.ELEMENT = HEADER_TAG_VERSION$
 | |
|                     * ignored - already updated
 | |
|                Case this.element = TRIGGER_EVENT_DEL$ Or this.element = TRIGGER_EVENT_CANCEL$ Or this.element = TRIGGER_EVENT_NEW$ Or this.element = TRIGGER_EVENT_SAVE$ Or this.element = TRIGGER_EVENT_READ$
 | |
|                     * swap these
 | |
|                     NEW.HDR<1,-1> = this.detail ;* button ID
 | |
|                     NEW.DETAILS<1,-1> = this.element ;* action name
 | |
|                Case this.element = HEADER_TAG_FOCUS$ Or THIS.ELEMENT = HEADER_TAG_NEW_DETAIL$ Or THIS.ELEMENT = HEADER_TAG_PREDRAW_EVENT$ Or THIS.ELEMENT = HEADER_TAG_POSTDRAW_EVENT$ Or THIS.ELEMENT = HEADER_TAG_CUSTOM_EVENT$
 | |
|                     * these belong in the options
 | |
|                     formInfo<FORMINFO_PAGE_OPTIONS_HDR$, -1> = THIS.ELEMENT
 | |
|                     formInfo<FORMINFO_PAGE_OPTIONS$, -1> = THIS.DETAIL
 | |
|                Case 1
 | |
|                     * these are OK
 | |
|                     NEW.HDR<1,-1> = this.element
 | |
|                     NEW.DETAILS<1,-1> = this.detail
 | |
|           End case
 | |
|      Next EACH.HDR
 | |
|      formInfo<FORMINFO_PAGE_CONTROL_HDR$> = NEW.HDR
 | |
|      formInfo<FORMINFO_PAGE_CONTROL$> = NEW.DETAILS
 | |
|      NUM.OPTIONS = DCOUNT(formInfo<FORMINFO_PAGE_OPTIONS_HDR$>, @VM)
 | |
|      NEW.HDR = ""
 | |
|      NEW.DETAILS = ""
 | |
|      For EACH.HDR = 1 To NUM.HDR
 | |
|           THIS.ELEMENT = formInfo<FORMINFO_PAGE_OPTIONS_HDR$, each.hdr>
 | |
|           THIS.DETAIL = formInfo<FORMINFO_PAGE_OPTIONS$, each.hdr>
 | |
|           Begin Case
 | |
|                Case this.element = "MAXSEARCH" Or THIS.element = "WARNSEARCH" Or this.element = "TRIGGER_TYPE"
 | |
|                     NEW.HDR<1,-1> = "<":THIS.ELEMENT:">"
 | |
|                     NEW.DETAILS<1,-1> = THIS.DETAIL
 | |
|                Case this.element = "QBFDISABLE" or this.element = "NOSAVEOK" Or THIS.element = "REDIRECTTO"
 | |
|                     NEW.HDR<1,-1> = "<":THIS.ELEMENT:">"
 | |
|                     NEW.DETAILS<1,-1> = THIS.DETAIL
 | |
|                Case 1
 | |
|                     * these are OK
 | |
|                     NEW.HDR<1,-1> = this.element
 | |
|                     NEW.DETAILS<1,-1> = this.detail          
 | |
|           End case
 | |
|      Next EACH.HDR
 | |
|      formInfo<FORMINFO_PAGE_OPTIONS_HDR$> = NEW.HDR
 | |
|      formInfo<FORMINFO_PAGE_OPTIONS$> = NEW.DETAILS
 | |
|      Gosub doSaveDefaults
 | |
| End
 | |
| return
 | |
| 
 | |
| 
 | |
| doSaveDefaults:
 | |
| * property defaults must already be set; just make sure To save them
 | |
| Write formInfo On o4wtempfile%, uniqueID:"_PAGE_":pageNo@
 | |
| If pageNo@ = headerInfo<HEADER_CURR_PAGE$> Then
 | |
|  formInfo_ORIG = formInfo
 | |
| end   
 | |
| return
 |