⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xbookmarktree.java

📁 java写的浏览器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/****************************************************************
*              XBrowser  -  eXtended web Browser                *
*                                                               *
*           Copyright (c) 2000-2001  Armond Avanes              *
*     Refer to ReadMe & License files for more information      *
*                                                               *
*                                                               *
*                      By: Armond Avanes                        *
*       Armond555@yahoo.com     &    Armond333@yahoo.com        *
*                http://xbrowser.sourceforge.net/               *
*****************************************************************/
package xbrowser.plugin.defaults.bookmarkpane;

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.beans.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.*;
import java.util.*;

import xbrowser.*;
import xbrowser.plugin.*;
import xbrowser.doc.*;
import xbrowser.screen.*;
import xbrowser.widgets.*;
import xbrowser.util.*;
import xbrowser.bookmark.*;
import xbrowser.bookmark.event.*;

public class XBookmarkTree extends JTree implements DragGestureListener, PropertyChangeListener
{
	public XBookmarkTree(XPluginContext context)
	{
		this.context = context;

		customizeTree();
	  	registerListeners();

	    bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new AddToBookmarksAction()) );
	    bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new SetAsPersonalFolderAction()) );
		bookmarkFolderPopup.addSeparator();
	    bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new OpenAllBookmarksAction()) );
	    bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new NewBookmarkAction()) );
	    bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new NewBookmarkFolderAction()) );
		bookmarkFolderPopup.addSeparator();
		bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new ImportBookmarksAction()) );
		bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new ExportBookmarksAction()) );
		bookmarkFolderPopup.addSeparator();
		bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new CopyAction()) );
		bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new DeleteAction()) );
		bookmarkFolderPopup.addSeparator();
		bookmarkFolderPopup.add( context.getComponentBuilder().buildMenuItem(new PropertiesAction()) );

	    bookmarkPopup.add( context.getComponentBuilder().buildMenuItem(new OpenBookmarkAction()) );
	    bookmarkPopup.add( context.getComponentBuilder().buildMenuItem(new OpenBookmarkInNewPageAction()) );
		bookmarkPopup.addSeparator();
		bookmarkPopup.add( context.getComponentBuilder().buildMenuItem(new CopyAction()) );
		bookmarkPopup.add( context.getComponentBuilder().buildMenuItem(new DeleteAction()) );
		bookmarkPopup.addSeparator();
		bookmarkPopup.add( context.getComponentBuilder().buildMenuItem(new PropertiesAction()) );

		add(bookmarkPopup);
		add(bookmarkFolderPopup);
	}

	private void customizeTree()
	{
	XTreeCellRenderer renderer = new XTreeCellRenderer();

		setModel( new XTreeModel(new XMutableTreeNode(context.getBookmarkManager())) );
		setCellRenderer(renderer);
    	getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    	putClientProperty("JTree.lineStyle", "Angled");
    	//setToggleClickCount(1);
    	setScrollsOnExpand(true);

    	setEditable(false);
    	//setEditable(true);
    	//setCellEditor( new DefaultTreeCellEditor(this, renderer, new XCellEditor()) );
	}

	private void registerListeners()
	{
		context.getConfiguration().addPropertyChangeListener(this);
	  	DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
		ToolTipManager.sharedInstance().registerComponent(this);

		addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e)
			{
				if( e.getClickCount()==2 )
				{
				TreePath tree_path = getPathForLocation(e.getX(),e.getY());

					if( tree_path!=null && isPathSelected(tree_path) )
					{
					int path_len = tree_path.getPath().length;
					XMutableTreeNode tree_node = (XMutableTreeNode)tree_path.getPath()[path_len-1];

						if( tree_node instanceof XMutableTreeNode )
							((XMutableTreeNode)tree_node).handleDoubleClick();
					}
				}

				showPopup(e);
			}

		    public void mouseReleased(MouseEvent e)
		    {
				showPopup(e);
			}

			public void mousePressed(MouseEvent e)
			{
				showPopup(e);
			}

			private void showPopup(MouseEvent e)
			{
      			if( e.isPopupTrigger() )
      			{
				TreePath tree_path = getPathForLocation(e.getX(),e.getY());

					if( tree_path!=null )
					{
					int path_len = tree_path.getPath().length;
					XMutableTreeNode tree_node = (XMutableTreeNode)tree_path.getPath()[path_len-1];

						setSelectionPath(tree_path);

						if( ((XMutableTreeNode)tree_node).isLeaf() )
							bookmarkPopup.show(XBookmarkTree.this,e.getX(),e.getY());
						else
							bookmarkFolderPopup.show(XBookmarkTree.this,e.getX(),e.getY());
					}
				}
			}
		});
	}

	public void propertyChange(PropertyChangeEvent evt)
	{
	String prop_name = evt.getPropertyName();

		if( prop_name.equals("ActiveLNF") || prop_name.equals("ActiveTheme") )
			setCellRenderer( new XTreeCellRenderer() );
	}

	public void dragGestureRecognized(DragGestureEvent e)
	{
	TreePath tree_path = getSelectionPath();

		if( tree_path==null )
			return;

	XMutableTreeNode tree_node = (XMutableTreeNode)tree_path.getPath()[tree_path.getPath().length-1];
	XAbstractBookmark abs_bm = (XAbstractBookmark)tree_node.getUserObject();

		if( tree_node.getUserObject() instanceof XAbstractBookmark )
		{
		XObjectSelection obj_sel = new XObjectSelection( tree_node.getUserObject() );

			e.startDrag(DragSource.DefaultCopyDrop, obj_sel, new DragSourceListener() {
				public void dragDropEnd(DragSourceDropEvent e) {}
				public void dragEnter(DragSourceDragEvent e) {}
				public void dragExit(DragSourceEvent e) {}
				public void dragOver(DragSourceDragEvent e) {}
				public void dropActionChanged(DragSourceDragEvent e) {}
			});
		}
	}

	private XAbstractBookmark getSelectedBookmark()
	{
		return( getBookmark(getSelectionPath()) );
	}

	private XAbstractBookmark getBookmark(TreePath path)
	{
	Object user_obj = ((XMutableTreeNode)path.getLastPathComponent()).getUserObject();

		if( user_obj instanceof XAbstractBookmark )
			return( (XAbstractBookmark)user_obj );
		else
			return null;
	}

	public String getToolTipText(MouseEvent ev)
	{
		if( ev==null )
			return null;

	TreePath path = getPathForLocation(ev.getX(), ev.getY());

		if( path!=null )
		{
		XAbstractBookmark bookmark = getBookmark(path);

			if( bookmark instanceof XBookmark )
				return ((XBookmark)bookmark).getHRef();
			else if( bookmark instanceof XBookmarkFolder )
				return ((XBookmarkFolder)bookmark).getTitle();
		}
		return null;
	}

	private void newBookmark()
	{
	TreePath tree_path = getSelectionPath();
	XMutableTreeNode tree_node = (XMutableTreeNode)tree_path.getPath()[tree_path.getPath().length-1];
	XBookmark bm = context.getBookmarkManager().createNewBookmark();
	XBookmarkFolder parent = null;

		if( !tree_node.isLeaf() )
			parent = (XBookmarkFolder)tree_node.getUserObject();

		context.getScreenManager().getBookmarkPropertiesLayout(bm, parent).setVisible(true);
	}
/*
	private class XCellEditor extends DefaultCellEditor implements CellEditorListener
	{
		public XCellEditor()
		{
			super( new JTextField() );

			setClickCountToStart(1);
			addCellEditorListener(this);
		}

		public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row)
		{
			if( value instanceof XMutableTreeNode )
			{
			XMutableTreeNode node = (XMutableTreeNode)value;
			Object user_obj = node.getUserObject();

				if( user_obj instanceof XAbstractBookmark )
				{
					bookmarkBeingEdited = (XAbstractBookmark)user_obj;
					return super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row);
				}
			}

			bookmarkBeingEdited = null;
			return null;
		}

	 	public Object getCellEditorValue()
	 	{
			return bookmarkBeingEdited;
		}

		public void editingCanceled(ChangeEvent e)
		{
		}

		public void editingStopped(ChangeEvent e)
		{
			if( bookmarkBeingEdited!=null )
			{
			CellEditor editor = (CellEditor)e.getSource();

				bookmarkBeingEdited.setTitle( (String)editor.getCellEditorValue() );
			}
		}

      // Attributes:
		private XAbstractBookmark bookmarkBeingEdited = null;
	}
*/
	private class XTreeCellRenderer extends DefaultTreeCellRenderer
	{
		public Icon getOpenIcon()
		{
			if( currentBookmark==null )
				return super.getOpenIcon();
			else
				return( ((XBookmarkFolder)currentBookmark).isPersonalFolder() ? ICON_PERSONAL_OPEN_BM_FOLDER : ICON_OPEN_BM_FOLDER);
		}

		public Icon getClosedIcon()
		{
			if( currentBookmark==null )
				return super.getOpenIcon();
			else
				return( ((XBookmarkFolder)currentBookmark).isPersonalFolder() ? ICON_PERSONAL_CLOSED_BM_FOLDER : ICON_CLOSED_BM_FOLDER);
		}

		public Icon getLeafIcon()
		{
			if( currentBookmark==null )
				return super.getLeafIcon();
			else
				return ICON_BM;
		}

		public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
		{
			if( value instanceof XMutableTreeNode )
			{
			XMutableTreeNode node = (XMutableTreeNode)value;
			Object user_obj = node.getUserObject();

				if( user_obj instanceof XAbstractBookmark )
					currentBookmark = (XAbstractBookmark)user_obj;
				else
					currentBookmark = null;
			}

			return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
		}

	// Attributes:
		private XAbstractBookmark currentBookmark = null;

		private final ImageIcon ICON_BM = context.getComponentBuilder().buildImageIcon(XBookmarkTree.this, "image.Bookmark");
		private final ImageIcon ICON_OPEN_BM_FOLDER = context.getComponentBuilder().buildImageIcon(XBookmarkTree.this, "image.OpenBookmarkFolder");
		private final ImageIcon ICON_PERSONAL_OPEN_BM_FOLDER = context.getComponentBuilder().buildImageIcon(XBookmarkTree.this, "image.PersonalOpenBookmarkFolder");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -