File: n_svc_dw_rowselection.sru
Size: 3409
Date: Mon, 07 Apr 2008 21:31:44 +0200
$PBExportHeader$n_svc_dw_rowselection.sru
$PBExportComments$Row Selection service
forward
global type n_svc_dw_rowselection from n_svc_base
end type
end forward

global type n_svc_dw_rowselection from n_svc_base
end type
global n_svc_dw_rowselection n_svc_dw_rowselection

type variables

end variables

forward prototypes
public subroutine of_selectrow (readonly u_dw adw, readonly integer ai_selectionmode, readonly long al_row, ref str_dwrowselect astr, readonly boolean ab_isclicked)
public subroutine of_rowfocuschanged (readonly u_dw adw, readonly integer ai_selectionmode, readonly long al_currentrow, ref str_dwrowselect astr)
public subroutine of_clicked (readonly u_dw adw, readonly long al_row, readonly integer ai_selectionmode, ref dwobject adwo, ref str_dwrowselect astr)
public subroutine of_invertselection (readonly u_dw adw)
end prototypes

public subroutine of_selectrow (readonly u_dw adw, readonly integer ai_selectionmode, readonly long al_row, ref str_dwrowselect astr, readonly boolean ab_isclicked);long ll_count, n

CHOOSE CASE ai_selectionmode
   CASE CDWRowSelect.SINGLE
      IF adw.IsSelected(al_row) THEN RETURN
      adw.SelectRow(0, FALSE)
      adw.SelectRow(al_row, TRUE)
   CASE CDWRowSelect.MULTIPLE
      IF ab_isclicked THEN
         adw.SelectRow(al_row, NOT adw.IsSelected(al_row))
      END IF
   CASE CDWRowSelect.EXTENDED
      IF KeyDown(KeyShift!) THEN
         //reset selection
         adw.SelectRow(0, FALSE)       
         //shift pressed
         IF astr.AnchorRow = 0 THEN
            adw.SelectRow(al_row, TRUE)
         ELSE
            adw.SetRedraw(FALSE)
            IF astr.AnchorRow > al_row THEN
               FOR n = astr.AnchorRow to al_row STEP -1
                  adw.SelectRow(n, TRUE)
               NEXT
            ELSE
               FOR n = astr.AnchorRow to al_row
                  adw.SelectRow(n, TRUE)
               NEXT              
            END IF               
            adw.SetRedraw(TRUE)
         END IF
      ELSEIF KeyDown(KeyControl!) THEN
         //control pressed
         IF ab_isclicked THEN
            adw.SelectRow(al_row, NOT adw.IsSelected(al_row))
            astr.AnchorRow = al_row
         END IF
      ELSE
         astr.AnchorRow = al_row
         adw.SelectRow(0, FALSE)
         adw.SelectRow(al_row, TRUE)
      END IF
END CHOOSE

astr.prevrow = al_row
astr.prevrowcount = adw.RowCount()
end subroutine

public subroutine of_rowfocuschanged (readonly u_dw adw, readonly integer ai_selectionmode, readonly long al_currentrow, ref str_dwrowselect astr);IF NOT ISVALID(adw) THEN RETURN
IF al_currentrow <= 0 THEN RETURN

this.of_SelectRow(adw, ai_selectionmode, al_currentrow, astr, FALSE)

//reset clicked row
astr.currentclickedrow = 0
end subroutine

public subroutine of_clicked (readonly u_dw adw, readonly long al_row, readonly integer ai_selectionmode, ref dwobject adwo, ref str_dwrowselect astr);IF NOT ISVALID(adw) THEN RETURN
IF NOT ISVALID(adwo) THEN RETURN
IF al_row <= 0 THEN RETURN

//store clicked row
astr.currentclickedrow = al_row

this.of_SelectRow(adw, ai_selectionmode, al_row, astr, TRUE)

//set as current row
IF adw.GetRow() <> al_row THEN
   adw.SetRow(al_row)
END IF
end subroutine

public subroutine of_invertselection (readonly u_dw adw);long n, ll_count

ll_count = adw.RowCount()

adw.SetRedraw(FALSE)
FOR n = 1 to ll_count
   adw.SelectRow(n, NOT adw.IsSelected(n))
NEXT
adw.SetRedraw(TRUE)
end subroutine

on n_svc_dw_rowselection.create
call super::create
end on

on n_svc_dw_rowselection.destroy
call super::destroy
end on