- private final static class DirectoryModel extends BasicDirectoryModel\r
- {\r
- int col = 0;\r
- boolean ascending;\r
-\r
- /**************************************************************************\r
- * Must be overridden to extend BasicDirectoryModel\r
- * @param chooser\r
- *************************************************************************/\r
- DirectoryModel(JFileChooser chooser)\r
- {\r
- super(chooser);\r
- }\r
-\r
-\r
- /**************************************************************************\r
- * Supposedly this is not used anymore, hopefully not. We implemented\r
- * some basic attempt at sorting just in case\r
- * @param a\r
- * @param b\r
- * @return\r
- *************************************************************************/\r
- protected final boolean lt(File a, File b)\r
- {\r
- System.out.println("LT called?");\r
- boolean less = false;\r
- switch (col)\r
- {\r
- case COLUMN_FILEDATE:\r
- less = a.lastModified() > b.lastModified();\r
- break;\r
- case COLUMN_FILESIZE:\r
- less = a.length() > b.length();\r
- break;\r
- default:\r
- less = a.getName().compareToIgnoreCase(b.getName()) > 0;\r
- break;\r
- }\r
- if (ascending) return less = !less;\r
- return less;\r
- }\r
-\r
- /**************************************************************************\r
- * Resorts the JFileChooser table based on new column\r
- * @param c\r
- *************************************************************************/\r
- protected final void sort(int c, JTable tbl)\r
- {\r
- //Set column and order\r
- col = c;\r
- ascending = !ascending;\r
- String indicator = " (^)";\r
- if (ascending)\r
- indicator = " (v)";\r
-\r
- final JTableHeader th = tbl.getTableHeader();\r
- final TableColumnModel tcm = th.getColumnModel();\r
-\r
- for (int i=0;i<JalviewFileChooser.COLUMN_COLCOUNT;i++)\r
- {\r
- final TableColumn tc = tcm.getColumn( i ); // the column to change\r
- tc.setHeaderValue( COLUMNS[i] );\r
- }\r
-\r
- final TableColumn tc = tcm.getColumn( col ); // the column to change\r
- tc.setHeaderValue( COLUMNS[col] + indicator );\r
-\r
- th.repaint();\r
-\r
- //Requery the file listing\r
- validateFileCache();\r
- }\r
-\r
- /**************************************************************************\r
- * Sorts the data based on current column setting\r
- * @param data\r
- *************************************************************************/\r
- protected final void sort(Vector data)\r
- {\r
- switch (col)\r
- {\r
- case COLUMN_FILEDATE:\r
- Collections.sort(data,new Comparator(){\r
- public int compare(Object o1,Object o2)\r
- {\r
- int ret = 1;\r
- final File a = (File)o1;\r
- final File b = (File)o2;\r
- if (a.lastModified() > b.lastModified())\r
- ret = -1;\r
- else if (a.lastModified() == b.lastModified())\r
- ret = 0;\r
-\r
- if (ascending)\r
- ret *= -1;\r
- return ret;\r
- }\r
-\r
- });\r
- break;\r
- case COLUMN_FILESIZE:\r
- Collections.sort(data,new Comparator(){\r
- public int compare(Object o1,Object o2)\r
- {\r
- int ret = 1;\r
- final File a = (File)o1;\r
- final File b = (File)o2;\r
- if (a.length() > b.length())\r
- ret = -1;\r
- else if (a.length() == b.length())\r
- ret = 0;\r
-\r
- if (ascending)\r
- ret *= -1;\r
- return ret;\r
- }\r
-\r
- });\r
- break;\r
- case COLUMN_FILENAME:\r
- Collections.sort(data,new Comparator(){\r
- public int compare(Object o1,Object o2)\r
- {\r
- final File a = (File)o1;\r
- final File b = (File)o2;\r
- if (ascending)\r
- return a.getName().compareToIgnoreCase(b.getName());\r
- else\r
- return -1 * a.getName().compareToIgnoreCase(b.getName());\r
- }\r
-\r
- });\r
- break;\r
- }\r
- }\r
+ private final class DirectoryModel\r
+ extends BasicDirectoryModel\r
+ {\r
+ String sortingColumnName=null;\r
+ int col = 0;\r
+ boolean ascending;\r
+\r
+ /**************************************************************************\r
+ * Must be overridden to extend BasicDirectoryModel\r
+ * @param chooser\r
+ *************************************************************************/\r
+ DirectoryModel(JFileChooser chooser)\r
+ {\r
+ super(chooser);\r
+ }\r
+\r
+\r
+ /**************************************************************************\r
+ * Resorts the JFileChooser table based on new column\r
+ * @param c\r
+ *************************************************************************/\r
+ protected final void sort(int c, JTable tbl)\r
+ {\r
+\r
+\r
+ //Set column and order\r
+ col = c;\r
+ ascending = !ascending;\r
+\r
+ String indicator = " (^)";\r
+\r
+ if (ascending)\r
+ {\r
+ indicator = " (v)";\r
+ }\r
+\r
+ final JTableHeader th = tbl.getTableHeader();\r
+ final TableColumnModel tcm = th.getColumnModel();\r
+ TableColumn tc = null;\r
+ String title = null;\r
+\r
+\r
+ //Remove indicator from old sort, and add to new\r
+ for(int i=0; i<tcm.getColumnCount(); i++)\r
+ {\r
+ tc = tcm.getColumn(i);\r
+ title = tc.getHeaderValue().toString();\r
+ if (title.endsWith(" (^)") || title.endsWith(" (v)"))\r
+ {\r
+ title = title.substring(0, title.length() - 4);\r
+ }\r
+\r
+ if(i==col)\r
+ {\r
+ sortingColumnName = title;\r
+ title = title + indicator;\r
+ }\r
+\r
+ tc.setHeaderValue(title);\r
+ }\r
+\r
+ //Requery the file listing\r
+ validateFileCache();\r
+ }\r
+\r
+ /**************************************************************************\r
+ * Sorts the data based on current column setting\r
+ * @param data\r
+ *************************************************************************/\r
+ protected final void sort(Vector data)\r
+ {\r
+ /*\r
+ UIManager.getString("FileChooser.fileTypeHeaderText", l),\r
+ UIManager.getString("FileChooser.fileAttrHeaderText", l)\r
+*/\r
+ if(sortingColumnName==null)\r
+ return;\r
+\r
+\r
+ if(sortingColumnName.equals(UIManager.getString("FileChooser.fileDateHeaderText")))\r
+ {\r
+ Collections.sort(data,\r
+ new Comparator()\r
+ {\r
+\r
+ public int compare(Object o1, Object o2)\r
+ {\r
+ int ret = 1;\r
+ final File a = (File) o1;\r
+ final File b = (File) o2;\r
+\r
+ if (a.lastModified() > b.lastModified())\r
+ {\r
+ ret = -1;\r
+ }\r
+ else if (a.lastModified() == b.lastModified())\r
+ {\r
+ ret = 0;\r
+ }\r
+\r
+ if (ascending)\r
+ {\r
+ ret *= -1;\r
+ }\r
+\r
+ return ret;\r
+ }\r
+ });\r
+ }\r
+ else if(sortingColumnName.equals(UIManager.getString("FileChooser.fileSizeHeaderText")))\r
+ {\r
+\r
+ Collections.sort(data,\r
+ new Comparator()\r
+ {\r
+\r
+ public int compare(Object o1, Object o2)\r
+ {\r
+ int ret = 1;\r
+ final File a = (File) o1;\r
+ final File b = (File) o2;\r
+\r
+ if (a.length() > b.length())\r
+ {\r
+ ret = -1;\r
+ }\r
+ else if (a.length() == b.length())\r
+ {\r
+ ret = 0;\r
+ }\r
+\r
+ if (ascending)\r
+ {\r
+ ret *= -1;\r
+ }\r
+\r
+ return ret;\r
+ }\r
+ });\r
+ }\r
+ else if(sortingColumnName.equals(UIManager.getString("FileChooser.fileTypeHeaderText")))\r
+ {\r
+ Collections.sort(data,\r
+ new Comparator()\r
+ {\r
+ public int compare(Object o1, Object o2)\r
+ {\r
+ final String a = getFileSystemView().getSystemTypeDescription( (File)o1 );\r
+ final String b = getFileSystemView().getSystemTypeDescription( (File)o2 );\r
+ if (ascending)\r
+ {\r
+ return a.compareToIgnoreCase(b);\r
+ }\r
+ else\r
+ {\r
+ return -1 * a.compareToIgnoreCase(b);\r
+ }\r
+ }\r
+ });\r
+ }\r
+ else if(sortingColumnName.equals(UIManager.getString("FileChooser.fileNameHeaderText")))\r
+{\r
+ Collections.sort(data,\r
+ new Comparator()\r
+ {\r
+ public int compare(Object o1, Object o2)\r
+ {\r
+ final String a = ((File) o1).getName();\r
+ final String b = ((File) o2).getName();\r
+\r
+ if (ascending)\r
+ {\r
+ return a.compareToIgnoreCase(b);\r
+ }\r
+ else\r
+ {\r
+ return -1 * a.compareToIgnoreCase(b);\r
+ }\r
+ }\r
+ });\r