EditSpinClass - Conceptual Example  

Top  Previous  Next

The following example shows a sequence of statements to declare, instantiate, initialize, use, and terminate an EditSpinClass object and a related BrowseClass object. The example page-loads a LIST of actions and associated attributes (priority and completed), then edits the "Priority" items with an EditSpinClass object. Note that the BrowseClass object calls the "registered" EditSpinClass object's methods as needed.

 

The EditSpinClass requires values for PROP:RangeLow, PROP:RangeHigh, and PROP:Step to function correctly. The EditSpinClass.Init method is the proper place to set these properties. See SPIN in the Language Reference for more information.

  PROGRAM

_ABCDllMode_  EQUATE(0)

_ABCLinkMode_ EQUATE(1)

  INCLUDE('ABWINDOW.INC'),ONCE

  INCLUDE('ABEIP.CLW'),ONCE

  INCLUDE('ABBROWSE.CLW'),ONCE

  MAP

  END

Actions        FILE,DRIVER('TOPSPEED'),PRE(ACT),CREATE,BINDABLE,THREAD

KeyAction        KEY(ACT:Action),NOCASE,OPT

Record           RECORD,PRE()

Action           STRING(20)

Priority         DECIMAL(2)

Completed        DECIMAL(1)

                END

              END

ViewActions    VIEW(Actions)

              END

ActQ           QUEUE

ACT:Action       LIKE(ACT:Action)

ACT:Priority     LIKE(ACT:Priority)

ACT:Completed    LIKE(ACT:Completed)

ViewPosition     STRING(1024)

              END

       

ActionWindow WINDOW('Actions File'),|

 AT(,,164,144),IMM,HLP('BrowseActions'),SYSTEM,GRAY

 LIST,AT(8,6,148,115),USE(?List),IMM,HVSCROLL,FORMAT('80L(2)|~Action~'&|

        '@S20@31C|~Priority~@N2@40L(2)|~Done~L(0)@N1@'),FROM(ActQ)

 BUTTON('&Insert'),AT(10,126,45,14),USE(?Insert:2)

 BUTTON('&Change'),AT(59,126,45,14),USE(?Change:2),DEFAULT

 BUTTON('&Delete'),AT(108,126,45,14),USE(?Delete:2)

            END

 

ThisWindow     CLASS(WindowManager)

Init             PROCEDURE(),BYTE,PROC,DERIVED

Kill             PROCEDURE(),BYTE,PROC,DERIVED

              END

BRW1           CLASS(BrowseClass)

Q                &ActQ

              END

Edit:ACT:Priority CLASS(EditSpinClass) !EIP class for field ACT:Priority

Init PROCEDURE(UNSIGNED FieldNumber,UNSIGNED ListBox,*? UseVar),DERIVED

                 END

 

 CODE

 GlobalResponse = ThisWindow.Run()

 

ThisWindow.Init PROCEDURE

ReturnValue          BYTE,AUTO

 CODE

 SELF.Request = GlobalRequest

 ReturnValue =PARENT.Init()

 IF ReturnValue THEN RETURN ReturnValue.

 SELF.FirstField = ?List

 SELF.Errors &= GlobalErrors

 CLEAR(GlobalRequest)

 CLEAR(GlobalResponse)

 Relate:Actions.Open

 FilesOpened = True

 BRW1.Init(?List,ActQ.ViewActions,BRW1::ViewActions,ActQ,Relate:Actions,SELF)

 OPEN(ActionWindow)

 SELF.Opened=True

 BRW1.Q &= ActQ

 BRW1.AddSortOrder(ACT:KeyAction)

 BRW1.AddField(ACT:Action,BRW1.Q.ACT:Action)

 BRW1.AddField(ACT:Priority,BRW1.Q.ACT:Priority)

 BRW1.AddField(ACT:Completed,BRW1.Q.ACT:Completed)

 BRW1.AddEditControl(EditInPlace::ACT:Priority,2)!Add cutom edit-inplace class

 BRW1.ArrowAction = EIPAction:Default+EIPAction:Remain+EIPAction:RetainColumn

 BRW1.InsertControl=?Insert:2

 BRW1.ChangeControl=?Change:2

 BRW1.DeleteControl=?Delete:2

 SELF.SetAlerts()

 RETURN ReturnValue

 

ThisWindow.Kill PROCEDURE

ReturnValue          BYTE,AUTO

 CODE

 ReturnValue =PARENT.Kill()

 IF ReturnValue THEN RETURN ReturnValue.

 IF FilesOpened

   Relate:Actions.Close

 END

 RETURN ReturnValue

 

Edit:ACT:Priority.Init PROCEDURE(UNSIGNED FieldNumber,UNSIGNED ListBox,*? UseVar)

 CODE

 PARENT.Init(FieldNumber,ListBox,UseVar)

 SELF.FEQ{PROP:RANGE,1} = 1        !Set the Low Range for the Spinbox

 SELF.FEQ{PROP:RANGE,2} = 10       !Set the High Range for the Spinbox

 SELF.FEQ{PROP:Step} = 1           !Set the incremental steps of the Spinbox