diff options
author | Lisa Stillwell <lisa@renci.org> | 2012-10-26 19:09:51 (GMT) |
---|---|---|
committer | Lisa Stillwell <lisa@renci.org> | 2012-10-26 19:09:51 (GMT) |
commit | 2f2487fc769529bce49c69efc498e1463fad6e44 (patch) | |
tree | 9738d61bc60fdac30a3145cbe17de2ddf455f306 /idrop-swing | |
parent | 24929e70cfad8e6c0c1ad121767400fd1e3905c1 (diff) | |
download | QCG-Data-2f2487fc769529bce49c69efc498e1463fad6e44.zip QCG-Data-2f2487fc769529bce49c69efc498e1463fad6e44.tar.gz QCG-Data-2f2487fc769529bce49c69efc498e1463fad6e44.tar.bz2 |
[#983] add split pane for local tree
Diffstat (limited to 'idrop-swing')
3 files changed, 330 insertions, 22 deletions
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form index a5ef47e..392e538 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form @@ -347,14 +347,158 @@ <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> <SubComponents> - <Container class="javax.swing.JScrollPane" name="scrollIrodsTree"> + <Container class="javax.swing.JSplitPane" name="splitPanelTrees"> + <Properties> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[834, 360]"/> + </Property> + </Properties> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> <BorderConstraints direction="Center"/> </Constraint> </Constraints> - <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="scrollIrodsTree"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription"> + <JSplitPaneConstraints position="right"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + </Container> + <Container class="javax.swing.JPanel" name="pnlLocalTreeArea"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="66" green="ff" red="99" type="rgb"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder/> + </Border> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[0, 0]"/> + </Property> + <Property name="opaque" type="boolean" value="false"/> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[0, 0]"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription"> + <JSplitPaneConstraints position="left"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="pnlLocalRoots"> + <Properties> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[0, 0]"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="North"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="scrollLocalDrives"> + <Properties> + <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="null"/> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[0, 0]"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[300, 100]"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="Center"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JList" name="listLocalDrives"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> + <LineBorder/> + </Border> + </Property> + <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor"> + <StringArray count="0"/> + </Property> + <Property name="selectionMode" type="int" value="0"/> + <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="null"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[150, 200]"/> + </Property> + <Property name="visibleRowCount" type="int" value="4"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="pnlDrivesFiller"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="South"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/> + </Container> + </SubComponents> + </Container> + <Container class="javax.swing.JScrollPane" name="scrollLocalFileTree"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ee" green="ee" id="Button.background" palette="3" red="ee" type="palette"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="null"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/irods/jargon/idrop/desktop/systraygui/Bundle.properties" key="iDrop.scrollLocalFileTree.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="verticalScrollBarPolicy" type="int" value="22"/> + <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="null"/> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[0, 0]"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[500, 500]"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="Center"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + </Container> + </SubComponents> + </Container> + </SubComponents> </Container> </SubComponents> </Container> diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java index 719a155..3f1157f 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java @@ -24,10 +24,13 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import javax.swing.tree.TreePath; import org.irods.jargon.core.connection.IRODSAccount; import org.irods.jargon.core.exception.JargonException; @@ -40,6 +43,7 @@ import org.irods.jargon.idrop.desktop.systraygui.services.IRODSFileService; import org.irods.jargon.idrop.desktop.systraygui.services.IdropConfigurationService; import org.irods.jargon.idrop.desktop.systraygui.utils.FieldFormatHelper; import org.irods.jargon.idrop.desktop.systraygui.utils.IDropUtils; +import org.irods.jargon.idrop.desktop.systraygui.utils.LocalFileUtils; import org.irods.jargon.idrop.desktop.systraygui.utils.LookAndFeelManager; import org.irods.jargon.idrop.desktop.systraygui.utils.TreeUtils; import org.irods.jargon.idrop.desktop.systraygui.viscomponents.IRODSFileSystemModel; @@ -49,6 +53,7 @@ import org.irods.jargon.idrop.desktop.systraygui.viscomponents.IRODSRowModel; import org.irods.jargon.idrop.desktop.systraygui.viscomponents.IRODSSearchTableModel; import org.irods.jargon.idrop.desktop.systraygui.viscomponents.IRODSTree; import org.irods.jargon.idrop.desktop.systraygui.viscomponents.InfoPanelTransferHandler; +import org.irods.jargon.idrop.desktop.systraygui.viscomponents.LocalFileNode; import org.irods.jargon.idrop.desktop.systraygui.viscomponents.LocalFileSystemModel; import org.irods.jargon.idrop.desktop.systraygui.viscomponents.LocalFileTree; import org.irods.jargon.idrop.exceptions.IdropException; @@ -71,6 +76,8 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, private IDROPCore iDropCore = new IDROPCore(); private IRODSTree irodsTree = null; + private LocalFileTree fileTree = null; + private LocalFileSystemModel localFileModel = null; private static final org.slf4j.Logger log = LoggerFactory.getLogger(iDrop.class); private boolean receivedStartupSignal = false; private TrayIcon trayIcon = null; @@ -108,7 +115,9 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, if (irodsTree == null) { buildTargetTree(false); } - + + setUpLocalFileSelectTree(); + splitPanelTrees.setDividerLocation(0.0d); // togglePauseTransfer.setSelected(pausedItem.getState()); // TransferManager.RunningStatus status = iDropCore.getTransferManager().getRunningStatus(); // iDropCore.getIconManager().setRunningStatus(status); @@ -134,21 +143,21 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, HeadlessException { initComponents(); // this.pnlLocalTreeArea.setVisible(false); -// this.pnlIrodsInfo.setVisible(false); -// this.splitTargetCollections.setResizeWeight(0.8d); -// try { -// pnlIrodsInfo.setTransferHandler(new InfoPanelTransferHandler(this)); -// } catch (IdropException ex) { -// Logger.getLogger(iDrop.class.getName()).log(Level.SEVERE, null, ex); -// throw new IdropRuntimeException( -// "error setting up infoPanelTransferHandler", ex); -// } - -// tableSearchResults.setModel(new IRODSSearchTableModel()); -// MouseListener popupListener = new PopupListener(); -// // add the listener specifically to the header -// tableSearchResults.addMouseListener(popupListener); -// tableSearchResults.getTableHeader().addMouseListener(popupListener); +// this.pnlIrodsInfo.setVisible(false); + this.splitPanelTrees.setResizeWeight(0.8d); +// try { +//// pnlIrodsInfo.setTransferHandler(new InfoPanelTransferHandler(this)); +//// } catch (IdropException ex) { +//// Logger.getLogger(iDrop.class.getName()).log(Level.SEVERE, null, ex); +//// throw new IdropRuntimeException( +//// "error setting up infoPanelTransferHandler", ex); +//// } +// +//// tableSearchResults.setModel(new IRODSSearchTableModel()); +//// MouseListener popupListener = new PopupListener(); +//// // add the listener specifically to the header +//// tableSearchResults.addMouseListener(popupListener); +//// tableSearchResults.getTableHeader().addMouseListener(popupListener); Toolkit t = getToolkit(); int width = t.getScreenSize().width; @@ -557,12 +566,11 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, } public LocalFileTree getFileTree() { -// return fileTree; - return null; + return fileTree; } public void setFileTree(final LocalFileTree fileTree) { -// this.fileTree = fileTree; + this.fileTree = fileTree; } @@ -649,6 +657,106 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, return irodsTree; } + /** + * Set up a JTree that depicts the local file system + */ + private void setUpLocalFileSelectTree() { + + /* + * build a list of the roots (e.g. drives on windows systems). If there is only one, use it + * as the basis for the file model, otherwise, display an additional panel listing the other + * roots, and build the tree for the first drive encountered. + */ + + if (fileTree != null) { + log.info("file tree already initialized"); + return; + } + + log.info("building tree to look at local file system"); + final iDrop gui = this; + + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + + initializeLocalFileTreeModel(null); + fileTree = new LocalFileTree(localFileModel, gui); + listLocalDrives.getSelectionModel().addListSelectionListener( + new ListSelectionListener() { + + @Override + public void valueChanged(final ListSelectionEvent e) { + if (e.getValueIsAdjusting()) { + return; + } + + log.debug("new local file system model"); + log.debug("selection event:{}", e); + Object selectedItem = listLocalDrives.getSelectedValue(); + initializeLocalFileTreeModelWhenDriveIsSelected(selectedItem); + + } + }); + scrollLocalFileTree.setViewportView(fileTree); + pnlLocalTreeArea.add(scrollLocalFileTree, + java.awt.BorderLayout.CENTER); + } + }); + + } + + private void initializeLocalFileTreeModelWhenDriveIsSelected( + final Object selectedDrive) { + if (selectedDrive == null) { + log.debug("selected drive is null, use the first one"); + listLocalDrives.setSelectedIndex(0); + + localFileModel = new LocalFileSystemModel(new LocalFileNode( + new File((String) listLocalDrives.getSelectedValue()))); + + fileTree.setModel(localFileModel); + } else { + log.debug( + "selected drive is not null, create new root based on selection", + selectedDrive); + listLocalDrives.setSelectedValue(selectedDrive, true); + localFileModel = new LocalFileSystemModel(new LocalFileNode( + new File((String) selectedDrive))); + fileTree.setModel(localFileModel); + + } + + scrollLocalDrives.setVisible(true); + } + + private void initializeLocalFileTreeModel(final Object selectedDrive) { + List<String> roots = LocalFileUtils.listFileRootsForSystem(); + + if (roots.isEmpty()) { + IdropException ie = new IdropException( + "unable to find any roots on the local file system"); + log.error("error building roots on local file system", ie); + showIdropException(ie); + return; + } else if (roots.size() == 1) { + scrollLocalDrives.setVisible(false); + localFileModel = new LocalFileSystemModel(new LocalFileNode( + new File(roots.get(0)))); + + } else { + DefaultListModel listModel = new DefaultListModel(); + for (String root : roots) { + listModel.addElement(root); + } + + listLocalDrives.setModel(listModel); + + scrollLocalDrives.setVisible(true); + } + } + /** * Display an error message dialog that indicates an exception has occcurred * @@ -1337,7 +1445,14 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, txtMainToolbarSearchTerms = new javax.swing.JTextField(); btnMainToolbarSearchFiles = new javax.swing.JButton(); pnlMainIrodsTree = new javax.swing.JPanel(); + splitPanelTrees = new javax.swing.JSplitPane(); scrollIrodsTree = new javax.swing.JScrollPane(); + pnlLocalTreeArea = new javax.swing.JPanel(); + pnlLocalRoots = new javax.swing.JPanel(); + scrollLocalDrives = new javax.swing.JScrollPane(); + listLocalDrives = new javax.swing.JList(); + pnlDrivesFiller = new javax.swing.JPanel(); + scrollLocalFileTree = new javax.swing.JScrollPane(); pnlMainTransferStatus = new javax.swing.JPanel(); pnlIdropBottom = new javax.swing.JPanel(); pnlCurrentTransferStatus = new javax.swing.JPanel(); @@ -1485,7 +1600,48 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, pnlMainIrodsTree.setBorder(javax.swing.BorderFactory.createEtchedBorder()); pnlMainIrodsTree.setPreferredSize(new java.awt.Dimension(834, 360)); pnlMainIrodsTree.setLayout(new java.awt.BorderLayout()); - pnlMainIrodsTree.add(scrollIrodsTree, java.awt.BorderLayout.CENTER); + + splitPanelTrees.setPreferredSize(new java.awt.Dimension(834, 360)); + splitPanelTrees.setRightComponent(scrollIrodsTree); + + pnlLocalTreeArea.setBackground(new java.awt.Color(153, 255, 102)); + pnlLocalTreeArea.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); + pnlLocalTreeArea.setMinimumSize(new java.awt.Dimension(0, 0)); + pnlLocalTreeArea.setOpaque(false); + pnlLocalTreeArea.setPreferredSize(new java.awt.Dimension(0, 0)); + pnlLocalTreeArea.setLayout(new java.awt.BorderLayout()); + + pnlLocalRoots.setMinimumSize(new java.awt.Dimension(0, 0)); + pnlLocalRoots.setLayout(new java.awt.BorderLayout()); + + scrollLocalDrives.setMaximumSize(null); + scrollLocalDrives.setMinimumSize(new java.awt.Dimension(0, 0)); + scrollLocalDrives.setPreferredSize(new java.awt.Dimension(300, 100)); + + listLocalDrives.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); + listLocalDrives.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + listLocalDrives.setMaximumSize(null); + listLocalDrives.setPreferredSize(new java.awt.Dimension(150, 200)); + listLocalDrives.setVisibleRowCount(4); + scrollLocalDrives.setViewportView(listLocalDrives); + + pnlLocalRoots.add(scrollLocalDrives, java.awt.BorderLayout.CENTER); + pnlLocalRoots.add(pnlDrivesFiller, java.awt.BorderLayout.SOUTH); + + pnlLocalTreeArea.add(pnlLocalRoots, java.awt.BorderLayout.NORTH); + + scrollLocalFileTree.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background")); + scrollLocalFileTree.setBorder(null); + scrollLocalFileTree.setToolTipText(org.openide.util.NbBundle.getMessage(iDrop.class, "iDrop.scrollLocalFileTree.toolTipText")); // NOI18N + scrollLocalFileTree.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + scrollLocalFileTree.setMaximumSize(null); + scrollLocalFileTree.setMinimumSize(new java.awt.Dimension(0, 0)); + scrollLocalFileTree.setPreferredSize(new java.awt.Dimension(500, 500)); + pnlLocalTreeArea.add(scrollLocalFileTree, java.awt.BorderLayout.CENTER); + + splitPanelTrees.setLeftComponent(pnlLocalTreeArea); + + pnlMainIrodsTree.add(splitPanelTrees, java.awt.BorderLayout.CENTER); pnlMain.add(pnlMainIrodsTree, java.awt.BorderLayout.CENTER); @@ -1728,8 +1884,12 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, private javax.swing.JLabel lblTransferFilesCounts; private javax.swing.JLabel lblTransferMessage; private javax.swing.JLabel lblTransferType; + private javax.swing.JList listLocalDrives; private javax.swing.JPanel pnlCurrentTransferStatus; + private javax.swing.JPanel pnlDrivesFiller; private javax.swing.JPanel pnlIdropBottom; + private javax.swing.JPanel pnlLocalRoots; + private javax.swing.JPanel pnlLocalTreeArea; private javax.swing.JPanel pnlMain; private javax.swing.JPanel pnlMainIrodsTree; private javax.swing.JPanel pnlMainToolbar; @@ -1740,6 +1900,9 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, private javax.swing.JLabel progressIconImageLabel; private javax.swing.JProgressBar progressIntraFile; private javax.swing.JScrollPane scrollIrodsTree; + private javax.swing.JScrollPane scrollLocalDrives; + private javax.swing.JScrollPane scrollLocalFileTree; + private javax.swing.JSplitPane splitPanelTrees; private javax.swing.JToggleButton togglePauseTransfer; private javax.swing.JProgressBar transferStatusProgressBar; private javax.swing.JTextField txtMainToolbarSearchTerms; diff --git a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties index 336c670..926f72f 100644 --- a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties +++ b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties @@ -136,3 +136,4 @@ iDrop.transferStatusProgressBar.string= iDrop.lblTransferFilesCounts.text=Total Progress: iDrop.progressIntraFile.string= iDrop.lblBreadCrumb.text= +iDrop.scrollLocalFileTree.toolTipText=scroll panel tooltip |