📄 listbodycomposite.java
字号:
int i = findItemNumber(x,y);
if (i > items.size() - 1)
i = 0;
return (PListItem) items.get(i);
}
public void updateSelection(PListItem item,int stateMask){
if (singleSelect){
int[] toRedraw = new int[selectedItems.size() +2];
int i = 0;
for (Iterator iter = selectedItems.iterator(); iter.hasNext();) {
PListItem element = (PListItem) iter.next();
toRedraw[i] = indexOf(element);
i++;
}
selectedItems.clear();
toRedraw[i++] = indexOf(item);
selectedItems.add(item);
toRedraw[i++] = indexOf(previousFocus);
paintItems(toRedraw);
this.fireListeners(item);
} else {
boolean shift = false;
boolean ctrl = false;
if ((stateMask & SWT.SHIFT) == SWT.SHIFT)
shift = true;
if ((stateMask & SWT.CTRL) == SWT.CTRL)
ctrl = true;
if (!shift && !ctrl){
int[] toRedraw = new int[selectedItems.size() +2];
int i = 0;
for (Iterator iter = selectedItems.iterator(); iter.hasNext();) {
PListItem element = (PListItem) iter.next();
toRedraw[i] = indexOf(element);
i++;
}
selectedItems.clear();
toRedraw[i++] = indexOf(item);
selectedItems.add(item);
toRedraw[i++] = indexOf(previousFocus);
paintItems(toRedraw);
this.fireListeners(item);
} else if (shift){
if (selectedItems.size() == 0)
return;
PListItem first = (PListItem) selectedItems.get(0);
selectedItems.clear();
int max = Math.max(items.indexOf(first),items.indexOf(item));
int min = Math.min(items.indexOf(first),items.indexOf(item));
//keep the first one first so subsequent selections
//will still key off that item
selectedItems.add(first);
for (int i = min; i <= max; i ++){
if (!selectedItems.contains(items.get(i)))
selectedItems.add(items.get(i));
}
redraw();
fireListeners(null);
} else if (ctrl) {
if (selectedItems.contains(item)){
selectedItems.remove(item);
} else {
selectedItems.add(item);
}
paintItems(new int[]{indexOf(item),indexOf(previousFocus)});
this.fireListeners(item);
}
}
}
public void setStrategy(IListStrategy strategy) {
this.strategy = strategy;
}
public void addSelectionListener(SelectionListener listen){
selectListeners.add(listen);
}
public void removeSelectionListener(SelectionListener listen){
selectListeners.remove(listen);
}
public PListItem getFocus(){
return focus;
}
public void setSelection(PListItem[] selection){
selectedItems.add(selection);
}
public PListItem getItem(int index){
return (PListItem) items.get(index);
}
public PListItem[] getItems(){
return (PListItem[]) items.toArray();
}
public PListItem[] getSelection(){
return (PListItem[]) selectedItems.toArray();
}
public int getSelectionIndex(){
if (selectedItems.size() == 0)
return -1;
return indexOf((PListItem) selectedItems.get(0));
}
public int[] getSelectionIndices(){
if (selectedItems.size() < 1)
return new int[0];
int[] indices = new int[selectedItems.size()];
int i = 0;
for (Iterator iter = selectedItems.iterator(); iter.hasNext();) {
PListItem element = (PListItem) iter.next();
indices[i] = indexOf(element);
i ++;
}
return indices;
}
public int indexOf(PListItem item){
return items.indexOf(item);
}
public void remove(int index){
remove((PListItem)items.get(index));
}
public void remove(PListItem item){
items.remove(item);
selectedItems.remove(item);
if (focus == item)
focus = null;
redraw();
}
public void removeAll(){
items.clear();
selectedItems.clear();
focus = null;
list.redraw();
}
public boolean isSelected(int index){
return selectedItems.contains(getItem(index));
}
public void reveal(int index){
reveal((PListItem)items.get(index));
}
public void reveal(PListItem item){
int y1 = 0;
int y2 = 0;
int max = items.indexOf(item);
for (int i = 0; i <= max;i++){
y2 += ((Integer) heights.get(i)).intValue();
if (i < max)
y1 += ((Integer) heights.get(i)).intValue();
}
int currentY1 = list.getOrigin().y;
int currentY2 = currentY1 + list.getClientArea().height;
if (y1 < currentY1){
list.setOrigin(0,y1);
} else if (y2 > currentY2){
list.setOrigin(0,y2 - list.getClientArea().height);
}
}
private void fireListeners(PListItem selected){
Event e = new Event();
e.widget = list;
SelectionEvent se = new SelectionEvent(e);
se.item = selected;
list.notifyListeners(SWT.Selection,e);
for (Iterator iter = selectListeners.iterator(); iter.hasNext();) {
SelectionListener element = (SelectionListener) iter.next();
element.widgetSelected(se);
}
}
private void paintItems(int[] itemNumbers){
ArrayList list = new ArrayList(itemNumbers.length);
for (int i = 0; i < itemNumbers.length; i++) {
int j = itemNumbers[i];
list.add(new Integer(j));
}
Font f = this.getFont();
Color back = this.getBackground();
Color fore = this.getForeground();
int yOffset = 0;
int i = 0;
GC gc = new GC(this);
PGC gcPlus = new PGC(gc);
for (Iterator iter = items.iterator(); iter.hasNext();) {
PListItem item = (PListItem) iter.next();
if (i > 0)
yOffset += ((Integer) heights.get(i - 1)).intValue();
gcPlus.setYOffset(yOffset);
if (list.contains(new Integer(i))){
strategy.paintItem(item,gcPlus,selectedItems.contains(item),focus == item && this.isFocusControl(),i == hovering,new Point(getSize().x,((Integer)heights.get(i)).intValue()));
gc.setFont(f);
gc.setBackground(back);
gc.setForeground(fore);
}
i ++;
}
gc.dispose();
}
private void redrawOnHover(){
int[] redrawThese = new int[]{-1,-1};
if (previousHovering >= 0 && previousHovering < items.size()){
if (!isSelected(previousHovering)){
redrawThese[0] = previousHovering;
}
}
if (hovering >= 0 && hovering < items.size()){
if (!isSelected(hovering)){
redrawThese[1] = hovering;
}
}
paintItems(redrawThese);
}
public void setSingleSelect(boolean b) {
singleSelect = b;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -