{
private static final int HASH_MULTIPLIER = 31;
+ private static final int NUMCOLUMNS_RESET = -1; // value of numColumns if it
+ // needs to be recalculated
+
private static final ReentrantReadWriteLock LOCK = new ReentrantReadWriteLock();
/*
if (!hiddenColumns.isEmpty())
{
// set up cursor reset values
- HiddenCursorPosition cursorPos = cursor.findRegionForColumn(start);
+ HiddenCursorPosition cursorPos = cursor.findRegionForColumn(start,
+ false);
regionindex = cursorPos.getRegionIndex();
if (regionindex > 0)
prevHiddenCount);
// reset the number of columns so they will be recounted
- numColumns = 0;
+ resetNumColumns();
} finally
{
hideColumns(r[0], r[1]);
}
cursor = new HiddenColumnsCursor(hiddenColumns);
- numColumns = 0;
+ resetNumColumns();
} finally
{
LOCK.writeLock().unlock();
}
hiddenColumns.clear();
cursor = new HiddenColumnsCursor(hiddenColumns);
- numColumns = 0;
+ resetNumColumns();
} finally
{
if (!hiddenColumns.isEmpty())
{
- int regionIndex = cursor.findRegionForColumn(start)
+ int regionIndex = cursor.findRegionForColumn(start, false)
.getRegionIndex();
if (regionIndex != -1 && regionIndex != hiddenColumns.size())
if (hiddenColumns.isEmpty())
{
- numColumns = 0;
+ resetNumColumns();
}
else
{
{
LOCK.readLock().lock();
- if (numColumns == 0)
+ if (numColumns == NUMCOLUMNS_RESET)
{
// numColumns is out of date, so recalculate
int size = 0;
}
/**
+ * Reset numColumns so that it gets recalculated. Currently the code does not
+ * recalculate numColumns on hide/reveal as it requires a full sweep of the
+ * hidden columns collection / smarter updating. Placeholder here if later on
+ * a recalculation is added.
+ */
+ private void resetNumColumns()
+ {
+ numColumns = NUMCOLUMNS_RESET;
+ }
+
+ /**
* Get the number of distinct hidden regions
*
* @return number of regions
if (!hiddenColumns.isEmpty())
{
- result += cursor.findRegionForVisColumn(column).getHiddenSoFar();
+ result += cursor.findRegionForColumn(column, true)
+ .getHiddenSoFar();
}
return result;
if (!hiddenColumns.isEmpty())
{
HiddenCursorPosition cursorPos = cursor
- .findRegionForColumn(hiddenColumn);
+ .findRegionForColumn(hiddenColumn, false);
int index = cursorPos.getRegionIndex();
int hiddenBeforeCol = cursorPos.getHiddenSoFar();
LOCK.readLock().lock();
if (!hiddenColumns.isEmpty())
{
- int index = cursor.findRegionForColumn(alPos).getRegionIndex();
+ int index = cursor.findRegionForColumn(alPos, false)
+ .getRegionIndex();
if (left && index > 0)
{
{
LOCK.readLock().lock();
- int regionindex = cursor.findRegionForColumn(column).getRegionIndex();
+ int regionindex = cursor.findRegionForColumn(column, false)
+ .getRegionIndex();
if (regionindex > -1 && regionindex < hiddenColumns.size())
{
int[] region = hiddenColumns.get(regionindex);
hideColumns(firstSet, lastSet - 1);
}
cursor = new HiddenColumnsCursor(hiddenColumns);
- numColumns = 0;
+ resetNumColumns();
} finally
{
LOCK.writeLock().unlock();
if (!hiddenColumns.isEmpty())
{
- HiddenCursorPosition pos = cursor.findRegionForColumn(start);
+ HiddenCursorPosition pos = cursor.findRegionForColumn(start, false);
int index = pos.getRegionIndex();
int startindex = index; // first index in hiddenColumns to remove
}
}
- pos = cursor.findRegionForColumn(end);
+ pos = cursor.findRegionForColumn(end, false);
index = pos.getRegionIndex();
int endindex = index - 1; // last index in hiddenColumns to remove
hiddenColumns.subList(startindex, endindex + 1).clear();
cursor = new HiddenColumnsCursor(hiddenColumns);
- numColumns = 0;
+ resetNumColumns();
}
} finally
{
if (!hiddenColumns.isEmpty())
{
// look for a region ending just before adjres
- int regionindex = cursor.findRegionForColumn(adjres - 1)
+ int regionindex = cursor.findRegionForColumn(adjres - 1, false)
.getRegionIndex();
if (regionindex < hiddenColumns.size()
&& hiddenColumns.get(regionindex)[1] == adjres - 1)
// region we'll get the cursor pointing to the region before, which is
// what we want
HiddenCursorPosition pos = cursor
- .findRegionForColumn(absoluteStart - 1);
+ .findRegionForColumn(absoluteStart - 1, false);
return new BoundedStartRegionIterator(pos, start, end,
hiddenColumns);