📄 xbookmarktree.java
字号:
/****************************************************************
* 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 + -