BBjGrid::setDragAccept

Description

Sets whether the BBjGrid will accept drag and drop operations.

Syntax

Return Value

Method

void

setDragAccept(booleandrag)

Parameters

Variable

Description

drag

Sets whether the grid will accept drag and drop operations.

0 = No drag and drop operation

1 = Drag and drop operation

Return Value

None.

Remarks

If drag and drop operation is set ON, the user can click on a cell and drag to another cell and release, copying the contents from the first cell into the second cell. The grid handles drag and drop operations if this option is set. By default, drag and drop operations are not allowed.

setDragAccept(1) causes the following behavior:

1.

If the user begins a drag gesture while cursor is on the grid, BBj fires a BBjGridMouseDragEvent and displays the drag cursor.

2.

In 4.03- If the user is executing a drag gesture and releases the mouse button while over the grid, then BBj fires a BBjGridMouseUpEvent rather than a BBjGridDragDropEvent. The grid does not accept the dragged item and the content of the grid does not change.

 

In BBj 6.0and higher - If the user is executing a drag gesture and releases the mouse button while over the grid, then BBj will accept the dragged item and fires a BBjGridDragDropEvent rather than a BBjGridMouseUpEvent. If the dragged item is a string, the content of the grid will be changed.

Example

rem 'Set a BBjGrid object to accept drag and drop operations

rem 'Obtain the instance of the BBjAPI object
let myAPI!=BBjAPI()

rem 'Open the SysGui device
SYSGUI=UNT
OPEN (SYSGUI) "X0"

rem 'Obtain the instance of the BBjSysGui object
let mySysGui!=myAPI!.getSysGui()

rem 'Create the main window and control objects
GOSUB CreateCalendar

rem 'Display the initial data
GOSUB DisplayMonth

rem 'Set the calendar to editable and configure it to accept drag and drop operations
Calendar!.setGridEditable(mySysgui!.TRUE)
Calendar!.setDragAccept(mySysGui!.TRUE)

rem 'Display the main window
MainWindow!.setVisible(mySysGui!.TRUE)

rem 'Register the CALLBACK routines
CALLBACK(ON_CLOSE,DoAppClose,CalendarContext)

rem 'Process Events
process_events

rem 'Callback routine called when the user closes the application window
DoAppClose:
release
return

rem 'Subroutine called to display the days in the current selected month/year
DisplayMonth:
    let DayNum=0
    let FirstDayOfMonth=DayTable!.get(DATE(JUL(CurrentYear,CurrentMonth,1):"%Ds"))
    let DaysInMonth=FNDaysInMonth(CurrentYear,CurrentMonth)
    MonthVector!.clear()
    if (CurrentDay>DaysInMonth+1) then
        CurrentDay=DaysInMonth+1
    endif
    let CurrentJul=JUL(CurrentYear,CurrentMonth,CurrentDay)

    rem 'Week 0
    FOR DayOfWeek=0 TO 6
        if (FirstDayOfMonth>DayOfWeek) then
            let Item$=STR(0:DayMask$)
        else
            let Item$=STR(DayNum+1:DayMask$)
            let DayNum=DayNum+1
        endif
        MonthVector!.addItem(Item$)
    NEXT DayOfWeek

    rem 'Week 1-3
    FOR Week=1 TO 3
        FOR DayOfWeek=0 TO 6
            let Item$=STR(DayNum+1:DayMask$)
            let DayNum=DayNum+1
            MonthVector!.addItem(Item$)
        NEXT DayOfWeek
    NEXT Week

    rem 'Week 4-5
    FOR week=4 TO 5
        FOR DayOfWeek=0 TO 6
            if (DayNum>DaysInMonth) then
                let Item$=STR(0:DayMask$)
            else
                let Item$=STR(DayNum+1:DayMask$)
                let DayNum=DayNum+1
            endif
            MonthVector!.addItem(Item$)
        NEXT DayOfWeek
    NEXT week

    rem 'Set the current information
    Calendar!.setCellText(MonthVector!)
    let CurrRow=INT((FirstDayOfMonth+CurrentDay-1)/7)
    let CurrCol=MOD(FirstDayOfMonth+CurrentDay-1,7)
    Calendar!.setSelectedCell(CurrRow,CurrCol)
    let CurrentMonthYear$=DATE(CurrentJul:"%Ml %Y")
    CurrDate!.setText(CurrentMonthYear$)
    Calendar!.setCellText(5,5," To")
    Calendar!.setCellText(5,6,"day ")
return

rem 'Function called to return the number of days in the passed year and month
DEF FNDaysInMonth(fYear,fMonth)

rem 'calculate the number of days in a month - zero based
let DaysInMonth=30
if (fMonth<>12) then
    let DaysInMonth=NUM(DATE(JUL(fYear,fMonth+1,1)-1:"%D"))-1
endif
return DaysInMonth
FNEND

rem 'Subroutine called to create the calendar
CreateCalendar:
    rem 'Create the vector to hold month info
    let MonthVector!=mySysGui!.makeVector()

    rem 'Create a java hash table to hold day names
    let DayTable!=new java.util.Hashtable()

    rem 'Get standard date info from the STRING table
    DIM DateInfo$:"Mask:C(32*=0),SM[12]:C(3*=0),M[12]:C(32*=0),SD[7]:C(3*=0),D[7]:C(32*=0)"
    let DateInfo$=STBL("!DATE")

    rem 'Build the masks for the dates
    let dateMask$=DateInfo.Mask$
    let M=POS("%M"=dateMask$),dateMask$=dateMask$(1,M+1)+"l"+dateMask$(M+3)
    let M=POS("%Y"=dateMask$),dateMask$=dateMask$(1,M+1)+dateMask$(M+3)
    while POS("/"=dateMask$)
        let M=POS("/"=dateMask$),dateMask$(M,1)=" "
    wend

    rem 'Build the day table
    FOR X=0 TO 6
        let Item$=DateInfo.SD$[x+1]
        DayTable!.put(Item$,x)
    NEXT X

    rem 'Get current date info
    let CurrentDate$=DATE(CurrentJul:dateMask$)
    let CurrentMonthYear$=DATE(CurrentJul:"%Ml %Y")
    let CurrentDay=NUM(DATE(CurrentJul:"%Dz"))
    let CurrentMonth=NUM(DATE(CurrentJul:"%Mz"))
    let CurrentYear=NUM(DATE(CurrentJul:"%Y"))

    rem 'Misc
    let TITLE$="BBjGrid"
    let DayMask$="##B"
    let CurrentJul=0,CalX=400,CalY=400

    rem 'Get the next available context
    let CalendarContext=mySysGui!.getAvailableContext()
    mySysGui!.setContext(CalendarContext)

    rem 'Create the main window
    let MainWindow! = mySysGui!.addWindow(100,100,202,160,TITLE$,$00010013$)

    rem 'Add the calendar (grid) to the main window
    let Calendar! = MainWindow!.addGrid(100,3,26,198,121)

    rem 'Set the attributes of the grid
    Calendar!.setGridEditable(1)
    blueColor! = mySysGui!.makeColor(mySysGui!.BLUE)
    Calendar!.setColumnHeaderForeColor(blueColor!)
    Calendar!.setNumRows(6)
    Calendar!.setRowHeight(20)
    Calendar!.setNumColumns(7)
    Calendar!.setMaxColumns(255)
    Calendar!.setHasColumnHeader(mySysGui!.TRUE)
    Calendar!.setVerticalLinesVisible(mySysGui!.TRUE)
    Calendar!.setHorizontalLinesVisible(mySysGui!.TRUE)
    Calendar!.setClientEdge(mySysGui!.TRUE)
    Calendar!.setSelectionMode(Calendar!.GRID_SELECT_CELL)

    rem 'Set the attributes for the grid's columns
    FOR COL = 0 TO 6
        Calendar!.setColumnWidth(COL, 25)
        Calendar!.setColumnAlignment(COL, Calendar!.GRID_ALIGN_RIGHT)
        Calendar!.setColumnForeColor(COL, blueColor!)
    NEXT COL
    Calendar!.setColumnHeaderStyle(Calendar!.GRID_STYLE_BUTTON_UP)

    rem 'Set the attributes for the grid's column headers
    myVector! = mySysGui!.makeVector()
    myVector!.addItem("S")
    myVector!.addItem("M")
    myVector!.addItem("T")
    myVector!.addItem("W")
    myVector!.addItem("T")
    myVector!.addItem("F")
    myVector!.addItem("S")
    Calendar!.setColumnHeaderText(myVector!)
    Calendar!.setColumnHeaderForeColor(blueColor!)

    rem 'Set the attributes for the current date (static text control)
    let CurrDate! = MainWindow!.addStaticText(101,45,3,90,20,"")
    CurrDate!.setClientEdge(mySysGui!.TRUE)
    CurrDate!.setForeColor(blueColor!)
return

See Also

BBjAPI

BBjSysGui

BBjControl

BBjWindow

See the BBj Object Diagram for an illustration of the relationship between BBj Objects.