/** * {@inheritDoc} */ @Override public int convertRowIndexToView(int rowModelIndex) { return list.convertIndexToView(rowModelIndex); }
/** * {@inheritDoc} */ @Override public int convertRowIndexToView(int rowModelIndex) { return list.convertIndexToView(rowModelIndex); }
/** * {@inheritDoc} */ @Override public int convertRowIndexToView(int rowModelIndex) { return list.convertIndexToView(rowModelIndex); }
/** * {@inheritDoc} */ @Override public int convertRowIndexToView(int rowModelIndex) { return list.convertIndexToView(rowModelIndex); }
protected Point getContinousMappedRange(ListDataEvent e) { List<Integer> mapped = new ArrayList<Integer>(); for (int i = e.getIndex0(); i <= e.getIndex1(); i++) { int viewIndex = convertIndexToView(i); if (viewIndex >= 0) { mapped.add(viewIndex); } } if (mapped.size() == 0) return OUTSIDE; if (mapped.size() == 1) return new Point(mapped.get(0), mapped.get(0)); Collections.sort(mapped); for (int i = 0; i < mapped.size() - 2; i++) { if (mapped.get(i+1) - mapped.get(i) != 1) return null; } return new Point(mapped.get(0), mapped.get(mapped.size() - 1)); }
/** * Refires the received event. Tries its best to map to the new * coordinates. At this point, the internals (selection, filter) are * updated, so it's safe to use the conversion methods. * * @param e the ListDataEvent received from the wrapped model. */ private void refireContentsChanged(ListDataEvent e) { // quick check for single item removal if ((e.getIndex0() >= 0) && (e.getIndex0() == e.getIndex1())) { // single outside - no notification int viewIndex = convertIndexToView(e.getIndex0()); if (viewIndex == -1) return; fireContentsChanged(this, viewIndex, viewIndex); } else if (e.getIndex0() >= 0) { // PENDING JW: narrow the interval bounds fireContentsChanged(this, 0, getSize()); } else { fireContentsChanged(this, -1, -1); } }
private ListDataEvent getMappedEvent(ListDataEvent e) { // quick check for single item removal if ((e.getIndex0() != - 1) && (e.getIndex0() == e.getIndex1())) { int viewIndex = convertIndexToView(e.getIndex0()); // single outside - no notification if (viewIndex == -1) return null; return new ListDataEvent(this, e.getType(), viewIndex, viewIndex); } Point mappedRange = getContinousMappedRange(e); if (mappedRange == null) { // cant help - no support for discontiouns interval remove notification return new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, -1, -1); } else if (OUTSIDE == mappedRange) { return null; // do nothing, everything is outside } // could map to a continous interval return new ListDataEvent(this, e.getType(), mappedRange.x, mappedRange.y); }