mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
csv sort by ID (hacky?)
This commit is contained in:
@@ -35,6 +35,8 @@ public class CSVEditor extends JFrame {
|
||||
private final int ARBITRARY = 240;
|
||||
private int[] colWidth = new int[]{FOUR_DIGIT, FOUR_DIGIT, ARBITRARY, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, TWO_DIGIT, FOUR_DIGIT, FOUR_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, TWO_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT, SIX_DIGIT};
|
||||
|
||||
private final int UNDO_BUFFER_SIZE = 10;
|
||||
|
||||
private CSVFormat csvFormat = CSVFetcher.INSTANCE.getTerrarumCSVFormat();
|
||||
|
||||
private final int INITIAL_ROWS = 2;
|
||||
@@ -49,9 +51,14 @@ public class CSVEditor extends JFrame {
|
||||
private JTextPane comment = new JTextPane();
|
||||
private JLabel statBar = new JLabel("null.");
|
||||
|
||||
private JMenu undoMenu = new JMenu("Undo");
|
||||
private JMenu redoMenu = new JMenu("Redo");
|
||||
|
||||
private Properties props = new Properties();
|
||||
private Properties lang = new Properties();
|
||||
|
||||
private TraversingCircularArray<Object[][]> undoBuffer = new TraversingCircularArray(UNDO_BUFFER_SIZE);
|
||||
|
||||
public CSVEditor() {
|
||||
// setup application properties //
|
||||
try {
|
||||
@@ -227,12 +234,88 @@ public class CSVEditor extends JFrame {
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
undoMenu.setEnabled(false);
|
||||
redoMenu.setEnabled(false);
|
||||
|
||||
menuBar.add(new JMenu("Edit") {
|
||||
{
|
||||
add("New rows...");
|
||||
add("New rows...").addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
Integer rows = askInteger("ADD_ROWS");
|
||||
|
||||
if (rows != null) {
|
||||
DefaultTableModel tableModel = (DefaultTableModel) spreadsheet.getModel();
|
||||
tableModel.setRowCount(tableModel.getRowCount() + rows);
|
||||
}
|
||||
}
|
||||
});
|
||||
add("New column...");
|
||||
add("Delete current row");
|
||||
add("Delete current column");
|
||||
addSeparator();
|
||||
add(undoMenu);
|
||||
add(redoMenu);
|
||||
addSeparator();
|
||||
add("Sort by ID").addMouseListener(new MouseAdapter() {
|
||||
private String[] getRow(int row, DefaultTableModel table) {
|
||||
String[] v = new String[table.getColumnCount()];
|
||||
for (int k = 0; k < v.length; k++) {
|
||||
v[k] = (String) table.getValueAt(row, k);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
private void setRow(int row, String[] data, DefaultTableModel table) {
|
||||
for (int k = 0; k < data.length; k++) {
|
||||
table.setValueAt(data[k], row, k);
|
||||
}
|
||||
}
|
||||
|
||||
private int toInt(String s) {
|
||||
int i;
|
||||
try {
|
||||
i = Integer.parseInt(s);
|
||||
|
||||
if (i == -1) i = 2147483646;
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
i = 2147483647;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
DefaultTableModel table = (DefaultTableModel) spreadsheet.getModel();
|
||||
int tableLen = table.getRowCount();
|
||||
|
||||
// perkele, had to get dirty
|
||||
// using insertion sort (should work good enough)
|
||||
int i = 1;
|
||||
while (i < tableLen) {
|
||||
String[] xData = getRow(i, table);
|
||||
int xComparator = toInt(xData[0]); // x <- A[i]
|
||||
|
||||
int j = i - 1;
|
||||
String[] jData = getRow(j, table);
|
||||
|
||||
while (j >= 0 && toInt(jData[0]) > xComparator) {
|
||||
// manually set a row
|
||||
setRow(j + 1, jData, table);
|
||||
j -= 1;
|
||||
|
||||
if (j < 0) break;
|
||||
jData = getRow(j, table);
|
||||
}
|
||||
|
||||
setRow(j + 1, xData, table);
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user