Skip to content

Instantly share code, notes, and snippets.

@MarkGoldberg
Created July 29, 2019 14:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarkGoldberg/ee34ab08bb04f3838817dc55ba4f51b2 to your computer and use it in GitHub Desktop.
Save MarkGoldberg/ee34ab08bb04f3838817dc55ba4f51b2 to your computer and use it in GitHub Desktop.
Clarion - USE( AnyVar ) work around
!for the 'ctQ_FeqAny.clw'
MEMBER()
INCLUDE('ctQ_FeqAny.inc'),ONCE
MAP
END
! NoError EQUATE(0) ! or
INCLUDE('Errors.clw'),ONCE
!=======================================
ctQ_FeqAny.CONSTRUCT PROCEDURE()
CODE
SELF.Q &= NEW qtFeqAny
CLEAR(SELF.Q)
SELF.BaseQ &= SELF.Q
!!=======================================
!ctQ_FeqAny.Del PROCEDURE()!,DERIVED
! CODE
! PARENT.Del()
!=======================================
ctQ_FeqAny.Description PROCEDURE()
CODE
RETURN 'ctQ_FeqAny'
!=======================================
ctQ_FeqAny.ToString PROCEDURE()!,STRING,DERIVED
CODE
RETURN 'FEQ[' & SELF.Q._FEQ &']' |
& 'Value[' & SELF.Q.Value &']' |
& Parent.ToString()
!=======================================
ctQ_FeqAny.Update PROCEDURE()
CODE
SELF.PrepForLoop()
LOOP WHILE SELF.GetNextRow() = NoError
SELF.Q.Value = CONTENTS( SELF.Q._FEQ )
END
!=======================================
ctQ_FeqAny.Display PROCEDURE()
CODE
SELF.PrepForLoop()
LOOP WHILE SELF.GetNextRow() = NoError
CHANGE( SELF.Q._FEQ, SELF.Q.Value )
END
!=======================================
ctQ_FeqAny.Add PROCEDURE( SIGNED xFEQ, *? xValue)
CODE
CLEAR(SELF.Q)
SELF.Q._FEQ = xFEQ
SELF.Q.Value &= xValue ! &= vs. = is important
ADD(SELF.Q, SELF.Q._FEQ)
INCLUDE('ctQueue.inc'),ONCE ! see https://github.com/MarkGoldberg/CwUnit/blob/master/Libsrc/ctQueue.inc
gtFeqAny GROUP,TYPE
_FEQ SIGNED
Value ANY
END
qtFeqAny QUEUE(gtFeqAny),TYPE
END
ctQ_FeqAny CLASS(ctQueue),TYPE,MODULE('ctQ_FeqAny.clw'),LINK('ctQ_FeqAny.clw')
Q &qtFeqAny
!------------------------
CONSTRUCT PROCEDURE()
!Del PROCEDURE(),DERIVED
Description PROCEDURE(),STRING,DERIVED
ToString PROCEDURE(),STRING,DERIVED
Update PROCEDURE()
Display PROCEDURE()
Add PROCEDURE( SIGNED xFEQ, *? xValue)
END
PROGRAM
MAP
GroupToControls(*GROUP xGrp, LONG xYPOS, *ctQ_FeqAny xFEQAnyQ)
END
Window WINDOW('Caption'),AT(,,395,224),GRAY,FONT('Microsoft Sans Serif',8)
BUTTON('&Close'),AT(333,201,42,14),USE(?Close),STD(STD:Close)
END
INCLUDE('ctQ_FEQAny.inc'),ONCE
FeqAnyQ ctQ_FeqAny
SomeGroup GROUP
A STRING(10)
B STRING(20)
C DATE
END
INCLUDE('debuger.inc'),ONCE ! see https://github.com/MarkGoldberg/ClarionCommunity/blob/master/CW/Shared/Src/debuger.inc
dbg debuger
CODE
dbg.mg_init('GroupToControls')
dbg.DebugOut('Test')
SomeGroup.A = 'Hello'
SomeGroup.B = 'There'
SomeGroup.C = TODAY()
OPEN(Window)
GroupToControls( SomeGroup, 15, FeqAnyQ)
dbg.DebugOut('About to call FeqAnyQ.Display()')
FeqAnyQ.Display()
dbg.DebugOut('About to enter the accept loop')
ACCEPT
FeqAnyQ.Update()
dbg.DebugOut('In Accept loop')
FeqAnyQ.Display()
FeqAnyQ.Dump('')
dbg.DebugOUt('A[' & SomeGroup.A &'] B['& SomeGroup.B & '] C['& SomeGroup.C &']')
END
!--------------------------------------------------------------------------
GroupToControls PROCEDURE(*GROUP xGroup, LONG xYPOS, *ctQ_FeqAny xFEQAnyQ)
CurrFEQ SIGNED,AUTO
FieldNum LONG( 1)
CurrWhat ANY
CODE
LOOP
! IF WHAT(xGroup, FieldNum) &= NULL THEN BREAK END ! compile error, Illegal reference assigment or equivalence
dbg.debugOut('FieldNum[' & FieldNum &']')
CurrWhat &= WHAT(xGroup, FieldNum)
IF CurrWhat &= NULL THEN BREAK END
! could attempt to set control type, and picture based on some reflection of the group
! could add PROMPTs and set their prop:text from the WHO( xGroup, FieldNum )
CurrFEQ = CREATE(0, CREATE:Entry)
SETPOSITION( CurrFEQ, 10, xYPos, 60, 10)
CurrFEQ{PROP:Text} = '@S50'
CurrFEQ{PROP:Hide} = FALSE
xFEQAnyQ.Add( CurrFEQ, WHAT( xGroup, FieldNum) )
xYPOS += 20
FieldNum += 1
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment