|
What this is
Other links
The source code
/*
* FavoritesVFS.java - Stores frequently-visited directory locations
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2000, 2004 Slava Pestov
*
* 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.gjt.sp.jedit.io;
//{{{ Imports
import java.awt.Component;
import java.util.*;
import org.gjt.sp.jedit.msg.DynamicMenuChanged;
import org.gjt.sp.jedit.*;
//}}}
/**
* A VFS used for remembering frequently-visited directories. Listing it
* returns the favorites list. The deletePath of each entry is the
* directory prefixed with "favorites:" so that right-clicking on a
* favorite and clicking 'delete' in the browser just deletes the
* favorite, and not the directory itself.
* @author Slava Pestov
* @version $Id: FavoritesVFS.java,v 1.11 2004/02/23 00:15:21 spestov Exp $
*/
public class FavoritesVFS extends VFS
{
public static final String PROTOCOL = "favorites";
//{{{ FavoritesVFS constructor
public FavoritesVFS()
{
super("favorites",DELETE_CAP | LOW_LATENCY_CAP,
new String[] { EA_TYPE });
/* addToFavorites(), which is a static method
* (for convinience) needs an instance of the
* VFS to pass to VFSManager.sendVFSUpdate(),
* hence this hack. */
instance = this;
} //}}}
//{{{ getParentOfPath() method
public String getParentOfPath(String path)
{
return PROTOCOL + ":";
} //}}}
//{{{ _listDirectory() method
public VFS.DirectoryEntry[] _listDirectory(Object session, String url,
Component comp)
{
return getFavorites();
} //}}}
//{{{ _getDirectoryEntry() method
public DirectoryEntry _getDirectoryEntry(Object session, String path,
Component comp)
{
// does it matter that this doesn't set the type correctly?
return new FavoritesEntry(path,VFS.DirectoryEntry.DIRECTORY);
} //}}}
//{{{ _delete() method
public boolean _delete(Object session, String path, Component comp)
{
synchronized(lock)
{
path = path.substring(PROTOCOL.length() + 1);
Iterator iter = favorites.iterator();
while(iter.hasNext())
{
if(((FavoritesEntry)iter.next()).path.equals(path))
{
iter.remove();
VFSManager.sendVFSUpdate(this,PROTOCOL
+ ":",false);
EditBus.send(new DynamicMenuChanged(
"favorites"));
return true;
}
}
}
return false;
} //}}}
//{{{ loadFavorites() method
public static void loadFavorites()
{
synchronized(lock)
{
favorites = new LinkedList();
String favorite;
int i = 0;
while((favorite = jEdit.getProperty("vfs.favorite." + i)) != null)
{
favorites.add(new FavoritesEntry(favorite,
jEdit.getIntegerProperty("vfs.favorite."
+ i + ".type",
VFS.DirectoryEntry.DIRECTORY)));
i++;
}
}
} //}}}
//{{{ addToFavorites() method
public static void addToFavorites(String path, int type)
{
synchronized(lock)
{
if(favorites == null)
loadFavorites();
Iterator iter = favorites.iterator();
while(iter.hasNext())
{
if(((FavoritesEntry)iter.next()).path.equals(path))
return;
}
favorites.add(new FavoritesEntry(path,type));
VFSManager.sendVFSUpdate(instance,PROTOCOL + ":",false);
EditBus.send(new DynamicMenuChanged("favorites"));
}
} //}}}
//{{{ saveFavorites() method
public static void saveFavorites()
{
synchronized(lock)
{
if(favorites == null)
return;
int i = 0;
Iterator iter = favorites.iterator();
while(iter.hasNext())
{
FavoritesEntry e = ((FavoritesEntry)
iter.next());
jEdit.setProperty("vfs.favorite." + i,
e.path);
jEdit.setIntegerProperty("vfs.favorite." + i
+ ".type",e.type);
i++;
}
jEdit.unsetProperty("vfs.favorite." + favorites.size());
jEdit.unsetProperty("vfs.favorite." + favorites.size()
+ ".type");
}
} //}}}
//{{{ getFavorites() method
public static VFS.DirectoryEntry[] getFavorites()
{
synchronized(lock)
{
if(favorites == null)
loadFavorites();
return (VFS.DirectoryEntry[])favorites.toArray(
new VFS.DirectoryEntry[favorites.size()]);
}
} //}}}
//{{{ Private members
private static FavoritesVFS instance;
private static Object lock = new Object();
private static List favorites;
//}}}
//{{{ FavoritesEntry class
static class FavoritesEntry extends VFS.DirectoryEntry
{
FavoritesEntry(String path, int type)
{
super(path,path,PROTOCOL + ":" + path,type,0,false);
}
public String getExtendedAttribute(String name)
{
if(name.equals(EA_TYPE))
return super.getExtendedAttribute(name);
else
{
// don't want it to show "0 bytes" for size,
// etc.
return null;
}
}
} //}}}
}
|
| ... 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.