mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
selection handlers
This commit is contained in:
@@ -44,4 +44,14 @@ public class FixedColumnsModel extends MultiColumnListModel {
|
||||
final int columns = getColumnCount();
|
||||
return columns == 0 ? -1 : row * columns + column;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumn(int listIndex) {
|
||||
return listIndex % myMaxColumns;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRow(int listIndex) {
|
||||
return listIndex / myMaxColumns;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,4 +44,14 @@ class FixedRowsModel extends MultiColumnListModel {
|
||||
final int rows = getRowCount();
|
||||
return rows == 0 ? -1 : column * rows + row;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumn(int listIndex) {
|
||||
return listIndex / myMaxRows;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRow(int listIndex) {
|
||||
return listIndex % myMaxRows;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -60,6 +61,44 @@ public class MultiColumnList extends JTable {
|
||||
getColumnModel().setColumnMargin(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processKeyEvent(KeyEvent e) {
|
||||
final int key = e.getKeyCode();
|
||||
final int col = getSelectedColumn();
|
||||
final int row = getSelectedRow();
|
||||
final MultiColumnListModel model = getModel();
|
||||
int r = row;
|
||||
int c = col;
|
||||
if (key == KeyEvent.VK_RIGHT) {
|
||||
if (c + 1 < getColumnCount()) {
|
||||
c++;
|
||||
}
|
||||
} else if (key == KeyEvent.VK_DOWN) {
|
||||
if (r + 1 < getRowCount()) {
|
||||
r++;
|
||||
if (model.toListIndex(r, c ) >= model.getSize()) {
|
||||
r = 0; c++;
|
||||
}
|
||||
} else {
|
||||
r = 0; c++;
|
||||
}
|
||||
}
|
||||
if (col != c || row != r) {
|
||||
if (e.getID() == KeyEvent.KEY_RELEASED) return;
|
||||
int index = model.toListIndex(r, c);
|
||||
if (index >= model.getSize() || r >= getRowCount() || c >= getColumnCount()) {
|
||||
e.consume();
|
||||
final int last = model.getSize() - 1;
|
||||
changeSelection(model.getRow(last), model.getColumn(last), false, false);
|
||||
} else {
|
||||
changeSelection(r, c, false, false);
|
||||
e.consume();
|
||||
}
|
||||
} else {
|
||||
super.processKeyEvent(e);
|
||||
}
|
||||
}
|
||||
|
||||
public MultiColumnList(Object...elements) {
|
||||
this(createListModel(elements));
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ public abstract class MultiColumnListModel extends AbstractTableModel implements
|
||||
}
|
||||
|
||||
public abstract int toListIndex(int row, int column);
|
||||
public abstract int getColumn(int listIndex);
|
||||
public abstract int getRow(int listIndex);
|
||||
|
||||
public int getSize() {
|
||||
return myModel.getSize();
|
||||
|
||||
Reference in New Issue
Block a user