Skip to content

Commit

Permalink
feat: implement debounced selection api
Browse files Browse the repository at this point in the history
See #113 for PR details

fixes #69
  • Loading branch information
hyyan committed Mar 27, 2019
1 parent 90d4771 commit 831243b
Show file tree
Hide file tree
Showing 11 changed files with 315 additions and 353 deletions.
134 changes: 34 additions & 100 deletions BBjGridExWidget.bbj
Original file line number Diff line number Diff line change
Expand Up @@ -498,11 +498,11 @@ class public BBjGridExWidget extends BBjWidget
type$ = map!.get("type")
detail$ = map!.get("detail")
switch type$
case "gw.rowSelecte"
#handleGridSelectRowEvent(detail$, "single")
case "gw.rowSelect"
#onSelecteRowChange(detail$, "single")
break
case "gw.rowDoubleClick"
#handleGridSelectRowEvent(detail$,"double")
#onSelecteRowChange(detail$,"double")
break
case "gw.cellClicked"
#handleGridCellEditingEvent(detail$,#ON_GRID_CELL_CLICK())
Expand Down Expand Up @@ -1332,23 +1332,42 @@ class public BBjGridExWidget extends BBjWidget
rem * @return the selected row
rem */
method public BBjGridExWidgetRow getSelectedRow()
if #SelectedRowsMap!.size() > 0 then
it! = #SelectedRowsMap!.entrySet().iterator()
methodret it!.next().getValue()
FI
returnedRow! = #executeScript("gw_getSelectedRow('" + #GRIDID$ + "')")

if len(returnedRow!) > 0 then
parser! = new JsonParser()
parsedRow! = parser!.parse(returnedRow!).getAsJsonObject()
row! = new BBjGridExWidgetRow(#RS!)

row!.setId(parsedRow!.get("id").getAsString())
row!.setChildIndex(parsedRow!.get("childIndex").getAsInt())
row!.setIndex(parsedRow!.get("index").getAsString())
row!.setParentKey(parsedRow!.get("parentKey").getAsString())
row!.setIsSelected(iff(parsedRow!.get("selected").getAsString() = "true" , 1 , 0))

methodret row!
fi

methodret null()
methodend
rem /**
rem * @return BBjVector with the selected rows
rem */
method public BBjVector getSelectedRows()
declare BBjVector ids!

returnedRows! = #executeScript("gw_getSelectedRows('" + #GRIDID$ + "')")
parser! = new JsonParser()
array! = parser!.parse(returnedRows!).getAsJsonArray()
rows! = new BBjVector()
it! = #SelectedRowsMap!.entrySet().iterator()
while it!.hasNext()
rows!.addItem(it!.next().getValue())
it! = array!.iterator()
while (it!.hasNext())
next! = it!.next().getAsJsonObject()
row! = new BBjGridExWidgetRow(#RS!)
row!.setId(next!.get("id").getAsString())
row!.setChildIndex(next!.get("childIndex").getAsInt())
row!.setIndex(next!.get("index").getAsString())
row!.setParentKey(next!.get("parentKey").getAsString())
row!.setIsSelected(iff(next!.get("selected").getAsString() = "true" , 1 , 0))
rows!.add( row!)
wend

methodret rows!
Expand Down Expand Up @@ -1652,36 +1671,8 @@ class public BBjGridExWidget extends BBjWidget
rem *
rem * @see BBjGridExWidgetSelectRowEvent
rem */
method private void handleGridSelectRowEvent(BBjString detail$, BBjString type$)
parser! = new JsonParser()
array! = parser!.parse(detail$).getAsJsonObject().get("0")
rows! = new BBjVector()
selected! = new BBjVector()
deselected! = new BBjVector()
it! = array!.iterator()
while (it!.hasNext())
next! = it!.next().getAsJsonObject()
row! = new BBjGridExWidgetRow(#RS!)
row!.setId(next!.get("id").getAsString())
row!.setChildIndex(next!.get("childIndex").getAsInt())
row!.setIndex(next!.get("index").getAsString())
row!.setParentKey(next!.get("parentKey").getAsString())
row!.setIsSelected(iff(next!.get("selected").getAsString() = "true" , 1 , 0))
rows!.add( row!)

if row!.getIsSelected() = 1 then
selected!.add(row!)
#SelectedRowsMap!.put(row!.getIndex(),row!)
else
deselected!.add(row!)
#SelectedRowsMap!.remove(row!.getIndex())
FI
wend

method private void onSelecteRowChange(BBjString detail$, BBjString type$)
event! = new BBjGridExWidgetSelectRowEvent()
event!.setChangedRows(rows!)
event!.setNewSelectedRows(selected!)
event!.setNewDeselectedRows(deselected!)
event!.setSelectedRows(#getSelectedRows())

if type$ = "single" then
Expand Down Expand Up @@ -2268,73 +2259,16 @@ classend

class public BBjGridExWidgetSelectRowEvent

field public BBjVector ChangedRows! = new BBjVector()
field public BBjVector NewSelectedRows! = new BBjVector()
field public BBjVector NewDeselectedRows! = new BBjVector()
field public BBjVector SelectedRows! = new BBjVector()

rem /**
rem * Get the number of affected rows by the last event
rem *
rem * @return BBjNumber
rem */
method public BBjNumber getRowCount()
methodret #ChangedRows!.size()
methodend
rem /**
rem * Get the number of selected rows by the last event
rem *
rem * @return BBjNumber
rem */
method public BBjNumber getSelectedRowCount()
methodret #NewSelectedRows!.size()
methodret #SelectedRows!.size()
methodend
rem /**
rem * Get the number of deselected rows by the last event
rem *
rem * @return BBjNumber
rem */
method public BBjNumber getDeselectedRowCount()
methodret #NewDeselectedRows!.size()
methodend
rem /**
rem * Get the ids of selected rows by the last event
rem *
rem * @return BBjVector
rem */
method public BBjVector getNewSelectedRows()
declare BBjVector ids!

ids! = new BBjVector()
selectedCount! = #getSelectedRowCount()

if selectedCount! > 0 then
for n = 0 to selectedCount! - 1 step 1
ids!.add(cast(BBjGridExWidgetRow,#NewSelectedRows!.getItem(n)).getId())
next n
FI

methodret ids!
methodend
rem /**
rem * Get the ids of deselected rows by the last event
rem *
rem * @return BBjNumber
rem */
method public BBjVector getNewDeselectedRows()
declare BBjVector ids!

ids! = new BBjVector()
deselectedCount! = #getDeselectedRowCount()

if deselectedCount! > 0 then
for n = 0 to deselectedCount! - 1 step 1
ids!.add(cast(BBjGridExWidgetRow,#NewDeselectedRows!.getItem(n)).getId())
next n
FI

methodret ids!
methodend

classend

class public BBjGridWidgetCellEditingEvent
Expand Down
6 changes: 2 additions & 4 deletions Demo/SelectionDemo.bbj
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,8 @@ onSelection:


print 'SHOW',
print ev!.getRowCount(), " ROW(s) AFFECTED By Event:" , ev!.getChangedRows()
print ev!.getSelectedRowCount()," ROW(S) SELECTED By Event: ",ev!.getNewSelectedRows()
print ev!.getDeselectedRowCount()," ROW(S) DESELECTED By Event: ",ev!.getNewDeselectedRows()
print ev!.getSelectedRows().size()," ROW(S) NOW SELECTED : ", ev!.getSelectedRows()
print ev!.getSelectedRowCount(), " ROW(s) AFFECTED By Event:"
rem print ev!.getSelectedRowCount()," ROW(S) SELECTED By Event: ",ev!.getSelectedRowCount()

print "------------------------------------------------------------------------"
fi
Expand Down

0 comments on commit 831243b

Please sign in to comment.