📄 driverstreepanel.java
字号:
/* * DriversTreePanel.java * * Copyright (C) 2002, 2003, 2004, 2005, 2006 Takis Diakoumis * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */package org.executequery.gui.drivers;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.Enumeration;import java.util.Vector;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.UIManager;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.TreeNode;import javax.swing.tree.TreePath;import org.executequery.GUIUtilities;import org.executequery.JDBCProperties;import org.underworldlabs.swing.tree.DefaultTreeRootNode;import org.underworldlabs.swing.tree.DynamicTree;import org.underworldlabs.swing.tree.AbstractTreeCellRenderer;import org.underworldlabs.swing.toolbar.PanelToolBar;import org.executequery.databasemediators.DatabaseDriver;import org.executequery.gui.*;import org.underworldlabs.swing.plaf.UIUtils;/* ---------------------------------------------------------- * CVS NOTE: Changes to the CVS repository prior to the * release of version 3.0.0beta1 has meant a * resetting of CVS revision numbers. * ---------------------------------------------------------- *//** * * @author Takis Diakoumis * @version $Revision: 1.9 $ * @date $Date: 2006/09/21 14:33:02 $ */public class DriversTreePanel extends AbstractDockedTabActionPanel implements TreeSelectionListener { public static final String TITLE = "Drivers"; /** the tree display */ private DynamicTree tree; /** saved drivers collection */ private Vector<DatabaseDriver> savedDrivers; /** the driver display panel */ private DriverViewPanel driversPanel; /** the tree popup menu */ private PopMenu popupMenu; /** whether to reload the panel view */ private boolean reloadView; // ------------------------------------- // tool bar buttons /** move connection up button */ private JButton upButton; /** move connection down button */ private JButton downButton; /** new connection button */ private JButton newDriverButton; /** delete connection button */ private JButton deleteDriverButton; // ------------------------------------- /** Creates a new instance of DriversTreePanel */ public DriversTreePanel() { super(new BorderLayout()); init(); } private void init() { // load the drivers savedDrivers = JDBCProperties.getDriversVector(); DatabaseDriverNode child = null; DefaultMutableTreeNode root = new DefaultTreeRootNode("JDBC Drivers"); for (int i = 0, k = savedDrivers.size(); i < k; i++) { // add the driver to the root node root.add(new DatabaseDriverNode(savedDrivers.get(i))); // add to the cache } // init the tree tree = new DynamicTree(root); tree.setCellRenderer(new DriversTreeCellRenderer()); tree.addTreeSelectionListener(this); tree.addMouseListener(new MouseHandler()); // --------------------------------------- // the tool bar PanelToolBar tools = new PanelToolBar(); newDriverButton = tools.addButton( this, "newDriver", GUIUtilities.getAbsoluteIconPath("NewJDBCDriver16.gif"), "New JDBC driver"); deleteDriverButton = tools.addButton( this, "deleteDriver", GUIUtilities.getAbsoluteIconPath("Delete16.gif"), "Remove driver"); upButton = tools.addButton( this, "moveDriverUp", GUIUtilities.getAbsoluteIconPath("Up16.gif"), "Move up"); downButton = tools.addButton( this, "moveDriverDown", GUIUtilities.getAbsoluteIconPath("Down16.gif"), "Move down"); // add the tools and tree to the panel add(tools, BorderLayout.NORTH); add(new JScrollPane(tree), BorderLayout.CENTER); enableButtons(false); // make sure we have a display panel //checkDriversPanel(); } private void enableButtons(boolean enable) { upButton.setEnabled(enable); downButton.setEnabled(enable); deleteDriverButton.setEnabled(enable); } public void moveDriverUp() { tree.moveSelectionUp(); Object object = tree.getLastPathComponent(); moveNode((DatabaseDriverNode)object, DynamicTree.MOVE_UP); } public void moveDriverDown() { tree.moveSelectionDown(); // adjust the position of the connection Object object = tree.getLastPathComponent(); moveNode((DatabaseDriverNode)object, DynamicTree.MOVE_DOWN); } public void newDriver() { String name = buildDriverName("New Driver"); newDriver(new DatabaseDriver(System.currentTimeMillis(), name)); } /** * Adds a new driver with the specified driver as the base * for the new one. * * @param driver - the driver the new is to be based on */ public void newDriver(DatabaseDriver driver) { if (driver == null) { String name = buildDriverName("New Driver"); driver = new DatabaseDriver(System.currentTimeMillis(), name); } savedDrivers.add(driver); DatabaseDriverNode node = new DatabaseDriverNode(driver); tree.addToRoot(node); } public void deleteDriver() { deleteDriver(null); } public void deleteDriver(DatabaseDriverNode node) { boolean isSelectedNode = false; if (node == null) { Object object = tree.getLastPathComponent(); node = (DatabaseDriverNode)object; isSelectedNode = true; } else { if (tree.getLastPathComponent() == node) { isSelectedNode = true; } } DatabaseDriver driver = node.getDriver(); // check if they're trying to delete the ODBC driver if (driver.getId() == JDBCProperties.DEFAULT_ODBC_ID) { GUIUtilities.displayErrorMessage( "The ODBC driver definition is a built-in and can not be removed"); return; } int yesNo = GUIUtilities.displayConfirmCancelDialog( "Are you sure you want to delete the driver " + driver + " ?"); if (yesNo != JOptionPane.YES_OPTION) { return; } // the next selection index will be the index of // the one being removed - (index - 1) int index = savedDrivers.indexOf(driver); // remove from the connections savedDrivers.remove(index); if (index > savedDrivers.size() - 1) { index = savedDrivers.size() - 1; } if (isSelectedNode) { String prefix = savedDrivers.get(index).getName(); tree.removeSelection(prefix); } else { tree.removeNode(node); } // save the drivers driversPanel.saveDrivers(); } /** * Sets the selected tree node to the specified driver. * * @param driver - the driver to select */ public void setSelectedDriver(DatabaseDriver driver) { DefaultMutableTreeNode node = null; // retrieve the root node and loop through DefaultMutableTreeNode root = tree.getRootNode(); for (Enumeration i = root.children(); i.hasMoreElements();) { DefaultMutableTreeNode _node = (DefaultMutableTreeNode)i.nextElement(); Object userObject = _node.getUserObject(); // make sure its a connection object if (userObject == driver) { node = _node; break; } } // select the node path if (node != null) { TreePath path = new TreePath(node.getPath()); tree.scrollPathToVisible(path); tree.setSelectionPath(path); if (reloadView) { Object object = tree.getLastPathComponent(); if (object instanceof DatabaseDriverNode) { checkDriversPanel(); DatabaseDriverNode _node = (DatabaseDriverNode)object; driversPanel.valueChanged(_node); } } } } private void moveNode(DatabaseDriverNode node, int direction) { DatabaseDriver driver = node.getDriver(); int currentIndex = savedDrivers.indexOf(driver); if (currentIndex == 0 && direction == DynamicTree.MOVE_UP) { return; } int newIndex = -1; if (direction == DynamicTree.MOVE_UP) { newIndex = currentIndex - 1; } else { newIndex = currentIndex + 1; if (newIndex > (savedDrivers.size() - 1)) { return; } } savedDrivers.remove(currentIndex); savedDrivers.insertElementAt(driver, newIndex); // save the drivers driversPanel.saveDrivers(); } /** * Indicates that a node name has changed and fires a call
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -