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

📄 xbookmarkmenu.java

📁 XBrowser是一个完全免费并且开源的Web浏览器
💻 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.widgets;

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

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

public class XBookmarkMenu extends JMenu implements XBookmarkFolderListener
{
	public XBookmarkMenu()
	{
		setText( XRepository.getResourceManager().getProperty(this, "Title") );

	    add( XRepository.getComponentBuilder().buildMenuItem(addToBookmarksAction) );
	    add( XRepository.getComponentBuilder().buildMenuItem(newBookmarkAction) );
	    add( XRepository.getComponentBuilder().buildMenuItem(newBookmarkFolderAction) );
		add( XRepository.getComponentBuilder().buildMenuItem(deleteBookmarkFolderAction) );
	    add( XRepository.getComponentBuilder().buildMenuItem(new SearchBookmarksAction()) );
		addSeparator();
	    add( XRepository.getComponentBuilder().buildMenuItem(new ImportBookmarksAction()) );
	    add( XRepository.getComponentBuilder().buildMenuItem(new ExportBookmarksAction()) );
		addSeparator();

		XRepository.getBookmarkManager().addBookmarkFolderListener(this);
		bookmarkFolder = XRepository.getBookmarkManager();
	}

	public XBookmarkFolder getBookmarkFolder()
	{
		return bookmarkFolder;
	}

	private int computeBookmarkPosition(XAbstractBookmark new_abs_bm, JMenu folder_menu)
	{
	Component[] comps = folder_menu.getMenuComponents();
	XAbstractBookmark abs_bm = null;
	int i;

		for( i=0; i<comps.length; i++ )
		{
			if( comps[i] instanceof XBookmarkMenuItem )
				abs_bm = ((XBookmarkMenuItem)comps[i]).getBookmark();
			else if( comps[i] instanceof XBookmarkFolderMenu )
				abs_bm = ((XBookmarkFolderMenu)comps[i]).getBookmarkFolder();

			if( comparator.compare(new_abs_bm, abs_bm)<0 )
				break;
		}

		return i;
	}

	public void bookmarkAdded(XAbstractBookmark new_abs_bm, XBookmarkFolder parent)
	{
	JMenu folder_menu = getBookmarkMenu(parent,this);

		if( folder_menu==null )
			return;

		if( new_abs_bm instanceof XBookmark )
			folder_menu.insert( new XBookmarkMenuItem((XBookmark)new_abs_bm), computeBookmarkPosition(new_abs_bm, folder_menu));
		else if( new_abs_bm instanceof XBookmarkFolder )
		{
		XBookmarkFolderMenu menu = new XBookmarkFolderMenu((XBookmarkFolder)new_abs_bm);

			menu.add( XRepository.getComponentBuilder().buildMenuItem(addToBookmarksAction) );
			menu.add( XRepository.getComponentBuilder().buildMenuItem(setAsPersonalFolderAction) );
			menu.add( XRepository.getComponentBuilder().buildMenuItem(newBookmarkAction) );
			menu.add( XRepository.getComponentBuilder().buildMenuItem(newBookmarkFolderAction) );
			menu.add( XRepository.getComponentBuilder().buildMenuItem(deleteBookmarkFolderAction) );
			menu.addSeparator();

			folder_menu.insert(menu, computeBookmarkPosition(new_abs_bm, folder_menu));
		}

		if( new_abs_bm instanceof XBookmarkFolder )
		{
		XBookmarkFolder folder = (XBookmarkFolder)new_abs_bm;
		Iterator it = folder.getBookmarks();

			while( it.hasNext() )
				bookmarkAdded( (XAbstractBookmark)it.next(), folder);
		}
	}

	public void bookmarkRemoved(XAbstractBookmark abs_bm_to_remove, XBookmarkFolder parent)
	{
	JMenu folder_menu = getBookmarkMenu(parent,this);

		if( folder_menu==null )
			return;

		if( abs_bm_to_remove instanceof XBookmarkFolder )
		{
		XBookmarkFolder folder = (XBookmarkFolder)abs_bm_to_remove;
		Iterator it = folder.getBookmarks();

			while( it.hasNext() )
				bookmarkRemoved( (XAbstractBookmark)it.next(), folder);
		}

	Component[] comps = folder_menu.getMenuComponents();
	XAbstractBookmark abs_bm = null;

		for( int i=0; i<comps.length; i++ )
		{
			if( comps[i] instanceof XBookmarkMenuItem )
				abs_bm = ((XBookmarkMenuItem)comps[i]).getBookmark();
			else if( comps[i] instanceof XBookmarkFolderMenu )
				abs_bm = ((XBookmarkFolderMenu)comps[i]).getBookmarkFolder();

			if( abs_bm==abs_bm_to_remove )
			{
				if( comps[i] instanceof XBookmarkMenuItem )
					((XBookmarkMenuItem)comps[i]).removingFromParent();
				else if( comps[i] instanceof XBookmarkFolderMenu )
					((XBookmarkFolderMenu)comps[i]).removingFromParent();

				folder_menu.remove(i);
				break;
			}
		}
	}

	public void personalFolderChanged(XBookmarkFolder old_folder, XBookmarkFolder new_folder)
	{
	XBookmarkFolderMenu old_folder_menu = (XBookmarkFolderMenu)getBookmarkMenu(old_folder,this);
	XBookmarkFolderMenu new_folder_menu = (XBookmarkFolderMenu)getBookmarkMenu(new_folder,this);

		if( old_folder_menu!=null )
			old_folder_menu.setPersonal(false);

		if( new_folder_menu!=null )
			new_folder_menu.setPersonal(true);
	}

	public void clearBookmarks()
	{
		///???!!!
	}

	private JMenu getBookmarkMenu(XBookmarkFolder bookmark_folder, JMenu base_menu)
	{
		if( bookmark_folder==bookmarkFolder )
			return this;
		else
		{
		Component[] components = base_menu.getMenuComponents();
		JMenu menu;

			for( int i=0; i<components.length; i++ )
			{
				if( components[i] instanceof XBookmarkFolderMenu )
				{
					menu = (JMenu)components[i];
					if( ((XBookmarkFolderMenu)menu).getBookmarkFolder()==bookmark_folder )
						return menu;
					else
					{
						menu = getBookmarkMenu(bookmark_folder,menu);
						if( menu!=null )
							return menu;
					}
				}
			}

			return null;
		}
	}

	private void newBookmark(JMenu parent)
	{
	XBookmark bm = XRepository.getBookmarkManager().createNewBookmark();
	XBookmarkFolder parent_folder = null;

		if( parent instanceof XBookmarkMenu )
			parent_folder = ((XBookmarkMenu)parent).getBookmarkFolder();
		else if( parent instanceof XBookmarkFolderMenu )
			parent_folder = ((XBookmarkFolderMenu)parent).getBookmarkFolder();

		XRepository.getScreenManager().getBookmarkPropertiesLayout(bm, parent_folder).setVisible(true);
	}

    private class AddToBookmarksAction extends XDefaultAction
    {
        public AddToBookmarksAction()
        {
            super(XBookmarkMenu.this, "AddBookmark", KeyStroke.getKeyStroke(KeyEvent.VK_D,Event.CTRL_MASK));
        }

        public void actionPerformed(ActionEvent e)
        {
		JMenu parent = (JMenu) ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getInvoker();
		XDocument active_doc = XBrowser.getBrowser().getDocumentContainer().getActiveDocument();

			if( active_doc!=null )
			{
			XBookmark bm = new XBookmark(active_doc.getPageCompletePath());

				bm.setTitle(active_doc.getPageTitle());

				if( parent instanceof XBookmarkMenu )
					(((XBookmarkMenu)parent).getBookmarkFolder()).addBookmark(bm);
				else if( parent instanceof XBookmarkFolderMenu )
					(((XBookmarkFolderMenu)parent).getBookmarkFolder()).addBookmark(bm);
			}
			else
				newBookmark(parent);
        }
    }

    private class DeleteBookmarkFolderAction extends XDefaultAction
    {
        public DeleteBookmarkFolderAction()
        {
            super(XBookmarkMenu.this, "DeleteFolder", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		JMenu parent = (JMenu) ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getInvoker();

			if( parent instanceof XBookmarkMenu )
				(((XBookmarkMenu)parent).getBookmarkFolder()).removeAllBookmarks();
			else if( parent instanceof XBookmarkFolderMenu )
			{
			XBookmarkFolder folder = ((XBookmarkFolderMenu)parent).getBookmarkFolder();

				folder.getParent().removeBookmark(folder);
			}
        }
    }

    private class NewBookmarkAction extends XDefaultAction
    {
        public NewBookmarkAction()
        {
            super(XBookmarkMenu.this, "NewBookmark", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		JMenu parent = (JMenu) ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getInvoker();

			newBookmark(parent);
        }
    }

    private class NewBookmarkFolderAction extends XDefaultAction
    {
        public NewBookmarkFolderAction()
        {
            super(XBookmarkMenu.this, "NewBookmarkFolder", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		JMenu parent = (JMenu) ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getInvoker();
		XBookmarkFolder bm_folder = XRepository.getBookmarkManager().createNewBookmarkFolder();
		XBookmarkFolder parent_folder = null;

			if( parent instanceof XBookmarkMenu )
				parent_folder = ((XBookmarkMenu)parent).getBookmarkFolder();
			else if( parent instanceof XBookmarkFolderMenu )
				parent_folder = ((XBookmarkFolderMenu)parent).getBookmarkFolder();

			XRepository.getScreenManager().getBookmarkPropertiesLayout(bm_folder, parent_folder).setVisible(true);
        }
    }

    private class SearchBookmarksAction extends XDefaultAction
    {
        public SearchBookmarksAction()
        {
            super(XBookmarkMenu.this, "SearchBookmarks", null);
        }

        public void actionPerformed(ActionEvent e)
        {
	        XRepository.getScreenManager().getFindLayout2(XFindLayout2.SEARCH_BOOKMARKS).setVisible(true);
        }
    }

    private class SetAsPersonalFolderAction extends XDefaultAction
    {
        public SetAsPersonalFolderAction()
        {
            super(XBookmarkMenu.this, "SetAsPersonalFolder", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		JMenu parent = (JMenu) ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getInvoker();

			if( parent instanceof XBookmarkFolderMenu )
			{
			XBookmarkFolder folder = ((XBookmarkFolderMenu)parent).getBookmarkFolder();

				folder.setPersonalFolder(true);
			}
        }
    }

    private class ImportBookmarksAction extends XDefaultAction
    {
        public ImportBookmarksAction()
        {
            super(XBookmarkMenu.this, "ImportBookmarks", null);
        }

        public void actionPerformed(ActionEvent e)
        {
			XRepository.getScreenManager().getImportExportBookmarksLayout(XImportExportBookmarksLayout.IMPORT_BOOKMARKS, null).setVisible(true);
        }
    }

    private class ExportBookmarksAction extends XDefaultAction
    {
        public ExportBookmarksAction()
        {
            super(XBookmarkMenu.this, "ExportBookmarks", null);
        }

        public void actionPerformed(ActionEvent e)
        {
			XRepository.getScreenManager().getImportExportBookmarksLayout(XImportExportBookmarksLayout.EXPORT_BOOKMARKS, null).setVisible(true);
        }
    }

// Attributes:
	private XAction addToBookmarksAction = new AddToBookmarksAction();
	private XAction deleteBookmarkFolderAction = new DeleteBookmarkFolderAction();
	private XAction newBookmarkAction = new NewBookmarkAction();
	private XAction newBookmarkFolderAction = new NewBookmarkFolderAction();
	private XAction setAsPersonalFolderAction = new SetAsPersonalFolderAction();

	private XBookmarkFolder bookmarkFolder = null;
	private XBookmarkComparator comparator = new XBookmarkComparator(0, true);
}

⌨️ 快捷键说明

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