|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.url;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import org.openide.awt.Actions;
import org.openide.awt.JMenuPlus;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObject;
import org.openide.loaders.InstanceDataObject;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.Repository;
import org.openide.util.actions.Presenter;
import org.openide.util.actions.SystemAction;
import org.openide.util.NbBundle;
import org.openide.util.HelpCtx;
import org.openide.util.WeakListeners;
import org.openide.util.Utilities;
/** Only purpose of this dummy action is to present Places/Bookmarks folder in menu.
*
* @author Ian Formanek, Peter Zavadsky
* @author Marian Petras
* @see org.openide.Places#bookmarks
*/
public class BookmarksAction extends SystemAction implements Presenter.Menu {
/** Icon. */
private static ImageIcon icon;
/** Generated serial veriosn UID. */
static final long serialVersionUID =2183102479251760123L;
/** */
public String getName() {
return NbBundle.getMessage(BookmarksAction.class,
"ACT_Bookmarks"); //NOI18N
}
/** */
public HelpCtx getHelpCtx() {
return new HelpCtx(BookmarksAction.class);
}
/** */
protected String iconResource() {
return "org/netbeans/modules/url/bookmarks.gif"; // NOI18N
}
/** */
public JMenuItem getMenuPresenter() {
JMenuItem menu = null;
FileObject bookmarksFolder = Repository.getDefault()
.getDefaultFileSystem()
.findResource("Bookmarks"); //NOI18N
if (bookmarksFolder != null && bookmarksFolder.isFolder()) {
String menuLabel = NbBundle.getMessage(BookmarksAction.class,
"Bookmarks"); //NOI18N
menu = new LazyMenu(
DataFolder.findFolder(bookmarksFolder),
menuLabel);
}
return menu;
}
/** Dummy implementation of superclass abstract method. */
public void actionPerformed(ActionEvent evt) {}
/**
* Menu item which will create its items lazilly when the popup be first asked.
* Performance savings.
*/
private static class LazyMenu extends JMenuPlus {
/** Bookmarks node on which menu to create. */
private DataFolder folder;
/** Indicates whether menu items were uptodate. */
private boolean uptodate = false;
/** Listener on changes in folder (children/order). */
private PropertyChangeListener propertyListener;
/** Constructor. */
public LazyMenu(DataFolder folder, String name) {
this.folder = folder;
Actions.setMenuText(this, name, true);
if (icon == null) {
icon = new ImageIcon(Utilities.loadImage(
"org/netbeans/modules/url/bookmarks.gif")); //NOI18N
}
setIcon(icon);
this.folder.addPropertyChangeListener(WeakListeners.propertyChange(propertyListener = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
String propName = evt.getPropertyName();
if (propName != null) {
if (propName.equals(DataFolder.PROP_CHILDREN)
|| propName.equals(DataFolder.PROP_ORDER)) {
uptodate = false;
} else if (propName.equals(DataFolder.PROP_NAME)) {
Actions.setMenuText(LazyMenu.this,
LazyMenu.this.folder.getName(),
true);
}
}
}
}, this.folder));
}
/** Gets popup menu. Adds lazy menu items creation. */
public JPopupMenu getPopupMenu() {
if (!uptodate) {
createMenuItems();
}
return super.getPopupMenu();
}
/** Creates items when actually needed. */
private void createMenuItems() {
uptodate = true;
removeAll();
DataObject[] childrenDataObjects = folder.getChildren();
for (int i = 0; i < childrenDataObjects.length; i++) {
DataObject childDO = childrenDataObjects[i];
if (childDO instanceof URLDataObject) {
URLDataObject urlDataObject = (URLDataObject) childDO;
add(new URLPresenter(urlDataObject).getMenuPresenter());
} else if (childDO instanceof InstanceDataObject) {
InstanceDataObject instanceDO = (InstanceDataObject)
childDO;
if (instanceDO.instanceOf(JSeparator.class)) {
addSeparator();
}
} else if (childDO instanceof DataFolder) {
DataFolder dataFolder = (DataFolder) childDO;
add(new LazyMenu(dataFolder,
dataFolder.getNodeDelegate().getName())
);
}
}
if (getItemCount() == 0) {
String itemName = NbBundle.getMessage(
BookmarksAction.class,
"LBL_EmptyMenuItem"); //NOI18N
JMenuItem emptyMenuItem = new JMenuItem(itemName);
emptyMenuItem.setEnabled(false);
add(emptyMenuItem);
}
}
} // End of class LazyMenu.
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.