home *** CD-ROM | disk | FTP | other *** search
- // Gets08.prg
- //
- // Example illustrating issuing gets from database
- // Save in our own array of GET objects - edit to memvars
- // Use cargo as dictionary
- // Use WHEN clause as .F. if say without GET - otherwise have GET
- // on NULL field which is bad
- // Use translate to access cargo
- // Implement user priveledges + name
-
- #include "Inkey.ch"
-
- #define COMPILE(c) &("{||" + c + "}")
-
- #xtranslate SAY_ROW(<o>) => DictAt(<o>:cargo, "Say Row")
- #xtranslate SAY_ROW(<o>,<n>) => DictPutPair(<o>:cargo, {"Say Row", <n>})
-
- #xtranslate SAY_COL(<o>) => DictAt(<o>:cargo, "Say Col")
- #xtranslate SAY_COL(<o>,<n>) => DictPutPair(<o>:cargo, {"Say Col", <n>})
-
- #xtranslate SAY_STRING(<o>) => DictAt(<o>:cargo, "Say String")
- #xtranslate SAY_STRING(<o>,<c>) => DictPutPair(<o>:cargo, {"Say String", <c>})
-
- #xtranslate SAY_PICT(<o>) => DictAt(<o>:cargo, "Say Pict")
- #xtranslate SAY_PICT(<o>, <c>) => DictPutPair(<o>:cargo, {"Say Pict", <c>})
-
- #xtranslate SAY_COLOR(<o>) => DictAt(<o>:cargo, "Say Color")
- #xtranslate SAY_COLOR(<o>, <c>) => DictPutPair(<o>:cargo, {"Say Color", <c>})
-
- #xtranslate GET_BLOCK(<o>) => DictAt(<o>:cargo, "Get Block")
- #xtranslate GET_BLOCK(<o>, <b>) => DictPutPair(<o>:cargo, {"Get Block", <b>})
-
- #xtranslate GET_VALUE(<o>) => DictAt(<o>:cargo, "Get Value")
- #xtranslate GET_VALUE(<o>, <x>) => DictPutPair(<o>:cargo, {"Get Value", <x>})
-
- FUNCTION Gets08
-
- FIELD ScrName, FldNum
- LOCAL aScreen1, aScreen2
- LOCAL cUserPriv := "ade"
-
- CLEAR SCREEN
-
- USE Screens NEW
- IF !File("Screens.ntx")
- INDEX ON Upper(ScrName) + Str(FldNum, 3) TO Screens
- ELSE
- SET INDEX TO Screens
- ENDIF
- USE Test NEW SHARED
-
- SET KEY K_F2 TO test
- aScreen1 := BuildScreen("TEST", cUserPriv)
- ReadScreen(aScreen1)
-
- cUserPriv := "b"
- aScreen1 := BuildScreen("TEST", cUserPriv)
- ReadScreen(aScreen1)
-
- aScreen2 := BuildScreen("TEST1", cUserPriv)
- ReadScreen(aScreen2)
-
- ReadScreen(aScreen1)
-
- RETURN NIL
-
-
- FUNCTION BuildScreen(cScrName, cUserPriv)
-
- FIELD ScrName, SayRow, SayCol, SayString, ;
- SayPict, SayColor IN Screens
-
- FIELD GetRow, GetCol, GetFld, GetPict, ;
- GetWhen, GetValid, GetColor, GetPriv, GetName IN Screens
-
- LOCAL nGets := 0
- LOCAL i
- LOCAL aGets := {}
- LOCAL oGet
-
- Screens -> (DbSeek(cScrName))
- DO WHILE cScrName == Trim(Upper(Screens -> ScrName))
- IF GetPriv $ cUserPriv
- nGets++
- Aadd(aGets, GetNew())
- oGet := aGets[nGets]
- oGet:cargo := DictNew()
- SAY_ROW(oGet, SayRow)
- SAY_COL(oGet, SayCol)
- SAY_STRING(oGet, Trim(SayString))
- SAY_PICT(oGet, Trim(SayPict))
-
- oGet:name := Trim(GetName)
- IF Empty(SayColor)
- SAY_COLOR(oGet, NIL)
- ELSE
- SAY_COLOR(oGet, Trim(SayColor))
- ENDIF
-
- IF Empty(GetFld)
- GET_BLOCK(oGet, NIL)
- GET_VALUE(oGet, NIL)
- oGet:preBlock := {|| .F. }
- ELSE
- GET_BLOCK(oGet, FieldBlock(GetFld))
- GET_VALUE(oGet, Eval(FieldBlock(GetFld)))
- oGet:block := Oblk(oGet)
- oGet:row := GetRow
- oGet:col := GetCol
- oGet:picture := Trim(GetPict)
-
- IF !Empty(GetColor)
- oGet:colorSpec := GetColor
- ENDIF
-
- IF !Empty(GetWhen)
- oGet:preBlock := &GetWhen
- ENDIF
-
- IF !Empty(GetValid)
- oGet:postBlock := &GetValid
- ENDIF
- ENDIF
- ENDIF
- Screens -> (DbSkip(1))
- ENDDO
-
- RETURN aGets
-
-
- FUNCTION ReadScreen(aScreen)
-
- LOCAL i
- LOCAL oGet
- LOCAL nGets := Len(aScreen)
-
- CLEAR SCREEN
- // DevOutPict is not documented .. Pass 3rd param as color
- FOR i := 1 TO nGets
- oGet := aScreen[i]
- DevPos(SAY_ROW(oGet), SAY_COL(oGet))
- DevOutPict(SAY_STRING(oGet), SAY_PICT(oGet), SAY_COLOR(oGet))
- IF oGet:block != NIL
- oGet:display()
- ENDIF
- NEXT
-
- ReadModal(aScreen)
- IF LastKey() != K_ESC .AND. Updated()
- IF Rlock()
- FOR i := 1 TO nGets
- oGet := aScreen[i]
- IF oGet:block != NIL
- Eval(GET_BLOCK(oGet), GET_VALUE(oGet))
- ENDIF
- NEXT
- ENDIF
- ENDIF
-
- RETURN NIL
-
-
- FUNCTION Oblk(oGet)
-
- RETURN {|x| iif(x == NIL, GET_VALUE(oGet), ;
- GET_VALUE(oGet, x))}
-
-
- FUNCTION GetFldRefresh(aGets)
-
- Aeval(aGets, ;
- {|oGet| iif(oGet:block != NIL, ;
- DictPutPair(oGet:cargo, ;
- {"Get Value", ;
- Eval(DictAt(oGet:cargo, "Get Block")) } ), ;
- NIL) })
-
- RETURN NIL
-
-
- FUNCTION test(p, l, v)
-
- @ 18, 0
- ? p, l, v
- Inkey(0)
-
- RETURN NIL