Author: paperwing
Date: 2012-04-06 14:01:19 -0700 (Fri, 06 Apr 2012)
New Revision: 28754
Added:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
Log:
Now able to open a JFileChooser dialog (seems to be working fine) upon clicking
"Install from File" button, completed ListBasedTableModel class implementing
TableMode to store app data into the UI's tables, allowing app data to be added
and removed dynamically on a by-row basis.
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
2012-04-06 20:39:36 UTC (rev 28753)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -27,9 +27,7 @@
@Override
public void actionPerformed(ActionEvent event) {
- AppManagerDialog appManagerDialog = new
AppManagerDialog(swingApplication.getJFrame(), true);
-
- appManagerDialog.setVisible(true);
+ AppManagerDialog appManagerDialog = new AppManagerDialog(null,
swingApplication.getJFrame(), true);
}
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
2012-04-06 20:39:36 UTC (rev 28753)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -132,8 +132,9 @@
// AbstractCyAction implementation for updated app manager
org.cytoscape.app.internal.AppManagerAction appManagerAction2 =
new org.cytoscape.app.internal.AppManagerAction(cySwingApplicationRef);
- registerService(bc, appManagerAction2, AbstractCyAction.class,
new Properties());
- registerService(bc, appManagerAction2, AbstractAction.class,
new Properties());
+ //registerService(bc, appManagerAction2,
AbstractCyAction.class, new Properties());
+ //registerService(bc, appManagerAction2, AbstractAction.class,
new Properties());
+ registerService(bc, appManagerAction2, CyAction.class, new
Properties());
}
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
2012-04-06 20:39:36 UTC (rev 28753)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -154,8 +154,10 @@
@Override
public void actionPerformed(ActionEvent e) {
+ /*
AppManagerDialog dialog = new AppManagerDialog(null,
acceleratorSet);
dialog.setVisible(true);
+ */
/*
AppManageDialog dlg = new AppManageDialog(desktop.getJFrame(),
bookmarks, this.bookmarksUtil,
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
2012-04-06 20:39:36 UTC (rev 28753)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -3,22 +3,12 @@
public class FileChooserDialog extends javax.swing.JDialog {
private javax.swing.JFileChooser jFileChooser1;
-
- /**
- * Creates new form FileChooserDialog
- */
+
public FileChooserDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
- /**
- * This method is called from within the constructor to initialize the
form.
- * WARNING: Do NOT modify this code. The content of this method is always
- * regenerated by the Form Editor.
- */
- @SuppressWarnings("unchecked")
- // <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jFileChooser1 = new javax.swing.JFileChooser();
@@ -43,5 +33,5 @@
);
pack();
- }// </editor-fold>
+ }
}
Added:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
(rev 0)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -0,0 +1,151 @@
+package org.cytoscape.app.internal.swing;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
+/**
+ * This class is an implementation of the Swing TableModel that allows data to
+ * added and remove dynamically on a by-row basis.
+ */
+public class ListBasedTableModel implements TableModel {
+
+ private List<TableModelListener> listeners;
+ private List<Object[]> rows;
+ private Class<?>[] dataTypes;
+ private String[] columnNames;
+ private int columnCount;
+
+ public ListBasedTableModel(int columnCount, Class<?>[] dataTypes,
String[] columnNames) {
+ if (columnCount <= 0) {
+ throw new IllegalArgumentException("Can only create a
table with at least 1 column.");
+ }
+
+ if (columnCount != dataTypes.length) {
+ throw new IllegalArgumentException("The number of
columns must match the number of data types provided.");
+ }
+
+ if (columnCount != columnNames.length) {
+ throw new IllegalArgumentException("The number of
columns must match the number of column names providied.");
+ }
+
+ rows = new ArrayList<Object[]>();
+ listeners = new LinkedList<TableModelListener>();
+ this.dataTypes = dataTypes;
+ }
+
+ // TODO: Rows are added to end, need to support adding rows in middle?
+ public void addRow(Object[] row) {
+ if (row.length != columnCount) {
+ throw new IllegalArgumentException("Need to have a
number of elements equal to the number of columns in the table.");
+ }
+
+ rows.add(row);
+ int rowIndex = rows.size() - 1;
+
+ TableModelEvent event = new TableModelEvent(this, rowIndex,
rowIndex, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
+ fireTableChangedEvent(event);
+ }
+
+ public List<Object[]> getRows() {
+ return rows;
+ }
+
+ public void removeRow(Object[] row) {
+ int rowIndex = rows.indexOf(row);
+
+ if (rowIndex == -1) {
+ throw new NoSuchElementException("The requested row, "
+ row + " was not found in the table.");
+ }
+
+ rows.remove(rowIndex);
+
+ TableModelEvent event = new TableModelEvent(this, rowIndex,
rowIndex, TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE);
+ fireTableChangedEvent(event);
+ }
+
+ @Override
+ public void addTableModelListener(TableModelListener l) {
+ if (listeners.contains(l)) {
+ throw new IllegalArgumentException("This listener has
already been added.");
+ }
+
+ listeners.add(l);
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex) {
+ return dataTypes[columnIndex];
+ }
+
+ @Override
+ public int getColumnCount() {
+ return columnCount;
+ }
+
+ @Override
+ public String getColumnName(int columnIndex) {
+ return columnNames[columnIndex];
+ }
+
+ @Override
+ public int getRowCount() {
+ return rows.size();
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ checkOutOfBounds(rowIndex, columnIndex);
+
+ return rows.get(rowIndex)[columnIndex];
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ // Don't allow cell editing
+ return false;
+ }
+
+ // TODO: Implement support for TabelModelListeners
+ @Override
+ public void removeTableModelListener(TableModelListener l) {
+ if (!listeners.contains(l)) {
+ throw new NoSuchElementException("Listener " + l + "
was not added to this TableModel.");
+ }
+
+ listeners.remove(l);
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ checkOutOfBounds(rowIndex, columnIndex);
+
+ rows.get(rowIndex)[columnIndex] = aValue;
+
+ TableModelEvent event = new TableModelEvent(this, rowIndex,
rowIndex, columnIndex, TableModelEvent.UPDATE);
+ fireTableChangedEvent(event);
+ }
+
+ // Checks if the requested row index and column index are out of bounds.
+ private void checkOutOfBounds(int rowIndex, int columnIndex) {
+ if (rowIndex >= rows.size()) {
+ throw new IndexOutOfBoundsException("Cannot obtain row
" + rowIndex + ", only have " + rows.size() + " rows.");
+ }
+
+ if (columnIndex >= columnCount) {
+ throw new IndexOutOfBoundsException("Cannot obtain
column " + rowIndex + ", only have " + columnCount + " columns.");
+ }
+ }
+
+ private void fireTableChangedEvent(TableModelEvent event) {
+
+ for (TableModelListener listener : listeners) {
+ listener.tableChanged(event);
+ }
+ }
+}
Property changes on:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
2012-04-06 20:39:36 UTC (rev 28753)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -17,6 +17,11 @@
initComponents();
this.appManager = appManager;
+
+ this.setLocationRelativeTo(parent);
+ this.setVisible(true);
+
+ System.out.println("parent: " + parent);
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
2012-04-06 20:39:36 UTC (rev 28753)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
2012-04-06 21:01:19 UTC (rev 28754)
@@ -1,23 +1,37 @@
package org.cytoscape.app.internal.swing.main;
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.JFileChooser;
+import javax.swing.event.TableModelListener;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
public class InstallNewAppsPanel extends javax.swing.JPanel {
- /**
- * Creates new form InstallNewAppsPanel
- */
+ private javax.swing.JButton installFromFileButton;
+ private javax.swing.JButton installFromURLButton;
+ private javax.swing.JButton installSelectedButton;
+ private javax.swing.JLabel resultsLabel;
+ private javax.swing.JScrollPane resultsScrollPane;
+ private javax.swing.JTable resultsTable;
+ private javax.swing.JButton searchButton;
+ private javax.swing.JComboBox searchComboBox;
+ private javax.swing.JLabel searchLabel;
+ private javax.swing.JSeparator searchSeparator;
+
+ private JFileChooser fileChooser;
+
public InstallNewAppsPanel() {
initComponents();
+
+ setupFileChooser();
+ setupResultsTable();
}
- /**
- * This method is called from within the constructor to initialize the
form.
- * WARNING: Do NOT modify this code. The content of this method is always
- * regenerated by the Form Editor.
- */
- @SuppressWarnings("unchecked")
- // <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
-
installFromFileButton = new javax.swing.JButton();
installFromURLButton = new javax.swing.JButton();
searchSeparator = new javax.swing.JSeparator();
@@ -29,14 +43,14 @@
resultsTable = new javax.swing.JTable();
installSelectedButton = new javax.swing.JButton();
- installFromFileButton.setText("Install from External File");
+ installFromFileButton.setText("Install from External File ..");
installFromFileButton.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
installFromFileButtonActionPerformed(evt);
}
});
- installFromURLButton.setText("Install from URL");
+ installFromURLButton.setText("Install from URL ..");
installFromURLButton.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
installFromURLButtonActionPerformed(evt);
@@ -56,39 +70,94 @@
});
resultsLabel.setText("Search Results:");
+
+ TableModel tableModel = new TableModel() {
+ private ArrayList<ArrayList<String>> data;
+
+ @Override
+ public void addTableModelListener(TableModelListener l)
{
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex) {
+ return String.class;
+ }
+
+ @Override
+ public int getColumnCount() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getColumnName(int columnIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getRowCount() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex)
{
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int
columnIndex) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void removeTableModelListener(TableModelListener
l) {
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int
columnIndex) {
+ // TODO Auto-generated method stub
+
+ }
+
+ };
+
resultsTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
- {null, null, null, null},
{null, null, null, null}
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null},
+// {null, null, null, null}
},
new String [] {
"Name", "Version", "Author", "Description"
@@ -149,10 +218,16 @@
.add(installSelectedButton)
.addContainerGap())
);
- }// </editor-fold>
+ }
private void
installFromFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
+ int returnValue = fileChooser.showOpenDialog(this);
+
+ if (returnValue == JFileChooser.APPROVE_OPTION) {
+ File[] files = fileChooser.getSelectedFiles();
+
+ System.out.println("Selected files: " + files);
+ }
}
private void
installFromURLButtonActionPerformed(java.awt.event.ActionEvent evt) {
@@ -167,16 +242,36 @@
// TODO add your handling code here:
}
- // Variables declaration - do not modify
- private javax.swing.JButton installFromFileButton;
- private javax.swing.JButton installFromURLButton;
- private javax.swing.JButton installSelectedButton;
- private javax.swing.JLabel resultsLabel;
- private javax.swing.JScrollPane resultsScrollPane;
- private javax.swing.JTable resultsTable;
- private javax.swing.JButton searchButton;
- private javax.swing.JComboBox searchComboBox;
- private javax.swing.JLabel searchLabel;
- private javax.swing.JSeparator searchSeparator;
- // End of variables declaration
+ private void setupFileChooser() {
+ fileChooser = new JFileChooser();
+ fileChooser.setDialogTitle("Select App Files");
+ fileChooser.setApproveButtonText("Install");
+ fileChooser.setApproveButtonMnemonic('I');
+ fileChooser.setMultiSelectionEnabled(true);
+
+ fileChooser.addChoosableFileFilter(new FileFilter(){
+
+ @Override
+ public boolean accept(File file) {
+ if (file.getName().endsWith("jar") ||
file.isDirectory()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return "Jar-packaged App Files (*.jar)";
+ }
+
+ });
+ }
+
+ private void setupResultsTable() {
+ // resultsTable.setCellSelectionEnabled(false);
+
+ // resultsTable.setDefaultEditor(null, null);
+ resultsTable.setOpaque(true);
+ }
}
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.