2020import android .util .Log ;
2121
2222import com .evrencoskun .tableview .ITableView ;
23- import com .evrencoskun .tableview .adapter .recyclerview .CellRecyclerView ;
2423import com .evrencoskun .tableview .adapter .recyclerview .holder .AbstractViewHolder ;
2524import com .evrencoskun .tableview .adapter .recyclerview .holder .AbstractViewHolder .SelectionState ;
2625import com .evrencoskun .tableview .sort .ISortableModel ;
2726
28- import java .util .ArrayList ;
29-
3027/**
3128 * Created by evrencoskun on 24/10/2017.
3229 * Refactored by cedricferry on 10/02/2018
@@ -42,7 +39,7 @@ public enum SELECTION_TYPE { NONE, CELLS, ROWS, COLUMNS};
4239
4340 private boolean mMultiSelectionEnabled = false ;
4441
45- private boolean shadowEnabled = true ;
42+ private boolean mShadowEnabled = true ;
4643
4744
4845 private ITableView mTableView ;
@@ -51,6 +48,14 @@ public SelectionHandler(ITableView tableView) {
5148 this .mTableView = tableView ;
5249 }
5350
51+ public boolean isShadowEnabled () {
52+ return mShadowEnabled ;
53+ }
54+
55+ public void setShadowEnabled (boolean shadowEnabled ) {
56+ this .mShadowEnabled = shadowEnabled ;
57+ }
58+
5459 /**
5560 * set selected state for one cell at (row, column) coordinates
5661 *
@@ -75,10 +80,10 @@ private void setSelectedCellPositions(int row, int column, boolean notify) {
7580 boolean clean = false ;
7681 if (selectionType != SELECTION_TYPE .CELLS && selectionType != SELECTION_TYPE .NONE ) {
7782 // unselect everything
78- clearAllSelection (false );
79- selectionType = SELECTION_TYPE .CELLS ;
83+ clearAllSelection (true );
8084 clean = true ;
8185 }
86+ selectionType = SELECTION_TYPE .CELLS ;
8287
8388 if (!mMultiSelectionEnabled && !clean ) {
8489 // unselect everything first
@@ -92,8 +97,10 @@ private void setSelectedCellPositions(int row, int column, boolean notify) {
9297 setSelectionStateCell (column , row , SelectionState .SELECTED );
9398
9499 // Shadow column and row
95- setSelectionStateRowHeader (row , SelectionState .SHADOWED );
96- setSelectionStateColumnHeader (column , SelectionState .SHADOWED );
100+ if (mShadowEnabled ) {
101+ setSelectionStateRowHeader (row , SelectionState .SHADOWED );
102+ setSelectionStateColumnHeader (column , SelectionState .SHADOWED );
103+ }
97104 } else {
98105 setSelectionStateCell (column , row , SelectionState .UNSELECTED );
99106
@@ -123,10 +130,10 @@ public void setSelectedRowPosition(int rowPosition) {
123130 boolean clean = false ;
124131 if (selectionType != SELECTION_TYPE .ROWS && selectionType != SELECTION_TYPE .NONE ) {
125132 // unselect everything
126- clearAllSelection (false );
127- selectionType = SELECTION_TYPE .ROWS ;
133+ clearAllSelection (true );
128134 clean = true ;
129135 }
136+ selectionType = SELECTION_TYPE .ROWS ;
130137
131138 if (!mMultiSelectionEnabled && !clean ) {
132139 // unselect everything first
@@ -155,8 +162,15 @@ public void setSelectedRowPosition(int rowPosition) {
155162 }
156163
157164
158- if (shadowEnabled ) {
159- // TODO: Shadow/UnShadow column headers
165+ if (mShadowEnabled ) {
166+ // Shadow/UnShadow row headers
167+ for (int columnPosition = 0 ; columnPosition < mTableView .getAdapter ().getColumnHeaderItemCount (); columnPosition ++) {
168+ if (getSelectionStateRowHeader (columnPosition ) != SelectionState .SHADOWED ){
169+ setSelectionStateColumnHeader (columnPosition , SelectionState .SHADOWED );
170+ } else {
171+ setSelectionStateColumnHeader (columnPosition , SelectionState .UNSELECTED );
172+ }
173+ }
160174 }
161175
162176 mTableView .getAdapter ().notifyDataSetChanged ();
@@ -171,9 +185,10 @@ public void setSelectedColumnPosition(Integer columnPosition) {
171185 boolean clean = false ;
172186 if (selectionType != SELECTION_TYPE .COLUMNS && selectionType != SELECTION_TYPE .NONE ) {
173187 // unselect everything
174- selectionType = SELECTION_TYPE . COLUMNS ;
175- clearAllSelection ( false ) ;
188+ clearAllSelection ( true ) ;
189+ clean = true ;
176190 }
191+ selectionType = SELECTION_TYPE .COLUMNS ;
177192
178193
179194 if (!mMultiSelectionEnabled && !clean ) {
@@ -202,8 +217,15 @@ public void setSelectedColumnPosition(Integer columnPosition) {
202217 }
203218 }
204219
205- if (shadowEnabled ) {
206- // TODO: Shadow/UnShadow row headers
220+ if (mShadowEnabled ) {
221+ // Shadow/UnShadow row headers
222+ for (int rowPosition = 0 ; rowPosition < mTableView .getAdapter ().getRowHeaderItemCount (); rowPosition ++) {
223+ if (getSelectionStateRowHeader (rowPosition ) != SelectionState .SHADOWED ){
224+ setSelectionStateRowHeader (rowPosition , SelectionState .SHADOWED );
225+ } else {
226+ setSelectionStateRowHeader (rowPosition , SelectionState .UNSELECTED );
227+ }
228+ }
207229 }
208230
209231 mTableView .getAdapter ().notifyDataSetChanged ();
@@ -301,14 +323,14 @@ public boolean rowHasItemSelected(int row) {
301323
302324 public void changeRowBackgroundColorBySelectionStatus (AbstractViewHolder viewHolder ,
303325 SelectionState selectionState ) {
304- if (shadowEnabled || (!shadowEnabled && selectionState != SelectionState .SHADOWED )) {
326+ if (mShadowEnabled || (!mShadowEnabled && selectionState != SelectionState .SHADOWED )) {
305327 viewHolder .setBackgroundColor (mTableView .getAdapter ().getColorForSelection (selectionState ));
306328 }
307329 }
308330
309331 public void changeColumnBackgroundColorBySelectionStatus (AbstractViewHolder viewHolder ,
310332 SelectionState selectionState ) {
311- if (shadowEnabled || (!shadowEnabled && selectionState != SelectionState .SHADOWED )) {
333+ if (mShadowEnabled || (!mShadowEnabled && selectionState != SelectionState .SHADOWED )) {
312334 viewHolder .setBackgroundColor (mTableView .getAdapter ().getColorForSelection (selectionState ));
313335 }
314336 }
0 commit comments