|
What this is
Other links
The source code
/*
* BrowserCommandsMenu.java - provides various commands
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2000, 2003 Slava Pestov
* Portions copyright (C) 1999 Jason Ginchereau
*
* 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.browser;
//{{{ Imports
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import org.gjt.sp.jedit.io.*;
import org.gjt.sp.jedit.*;
//}}}
/**
* @version $Id: BrowserCommandsMenu.java,v 1.25 2004/07/12 19:25:07 spestov Exp $
* @author Slava Pestov and Jason Ginchereau
*/
public class BrowserCommandsMenu extends JPopupMenu
{
//{{{ BrowserCommandsMenu constructor
public BrowserCommandsMenu(VFSBrowser browser, VFS.DirectoryEntry[] files)
{
this.browser = browser;
if(files != null)
{
VFS vfs = VFSManager.getVFSForPath(files[0].deletePath);
int type = files[0].type;
boolean fileOpen = (jEdit.getBuffer(files[0].path) != null);
boolean delete = !fileOpen && (vfs.getCapabilities() & VFS.DELETE_CAP) != 0;
boolean rename = !fileOpen && (vfs.getCapabilities() & VFS.RENAME_CAP) != 0;
for(int i = 1; i < files.length; i++)
{
VFS.DirectoryEntry file = files[i];
VFS _vfs = VFSManager.getVFSForPath(file.deletePath);
delete &= (vfs == _vfs) && (_vfs.getCapabilities()
& VFS.DELETE_CAP) != 0;
if(type == file.type)
/* all good */;
else
{
// this will disable most operations if
// files of multiple types are selected
type = -1;
}
// set rename to false if > 1 file selected
rename = false;
// show 'close' item if at least one selected
// file is currently open
if(jEdit.getBuffer(file.path) != null)
fileOpen = true;
}
if(type == VFS.DirectoryEntry.DIRECTORY
|| type == VFS.DirectoryEntry.FILESYSTEM)
{
if(files.length == 1)
add(createMenuItem("browse"));
if(browser.getMode() == VFSBrowser.BROWSER)
add(createMenuItem("browse-window"));
}
else if(type == VFS.DirectoryEntry.FILE
&& (browser.getMode() == VFSBrowser.BROWSER
|| browser.getMode() == VFSBrowser.BROWSER_DIALOG))
{
add(createMenuItem("open"));
add(GUIUtilities.loadMenu(
VFSBrowser.getActionContext(),
"vfs.browser.open-in"));
add(createMenuItem("insert"));
if(fileOpen)
add(createMenuItem("close"));
}
else if(type != -1)
add(createMenuItem("open"));
if(rename)
add(createMenuItem("rename"));
if(delete)
add(createMenuItem("delete"));
add(createMenuItem("copy-path"));
addSeparator();
}
add(createMenuItem("up"));
add(createMenuItem("reload"));
add(createMenuItem("roots"));
add(createMenuItem("home"));
add(createMenuItem("synchronize"));
addSeparator();
if(browser.getMode() == VFSBrowser.BROWSER)
add(createMenuItem("new-file"));
add(createMenuItem("new-directory"));
if(browser.getMode() == VFSBrowser.BROWSER)
{
addSeparator();
add(createMenuItem("search-directory"));
}
addSeparator();
add(createMenuItem("show-hidden-files"));
if(browser.getMode() == VFSBrowser.BROWSER
|| browser.getMode() == VFSBrowser.BROWSER_DIALOG)
{
addSeparator();
add(createEncodingMenu());
}
update();
} //}}}
//{{{ update() method
public void update()
{
if(encodingMenuItems != null)
{
JRadioButtonMenuItem mi = (JRadioButtonMenuItem)
encodingMenuItems.get(browser.currentEncoding);
if(mi != null)
{
mi.setSelected(true);
otherEncoding.setText(jEdit.getProperty(
"vfs.browser.other-encoding.label"));
}
else
{
otherEncoding.setSelected(true);
otherEncoding.setText(jEdit.getProperty(
"vfs.browser.other-encoding-2.label",
new String[] { browser.currentEncoding }));
}
}
} //}}}
//{{{ Private members
private VFSBrowser browser;
private HashMap encodingMenuItems;
private JCheckBoxMenuItem autoDetect;
private JRadioButtonMenuItem otherEncoding;
//{{{ createMenuItem() method
private JMenuItem createMenuItem(String name)
{
return GUIUtilities.loadMenuItem(VFSBrowser.getActionContext(),
"vfs.browser." + name,false);
} //}}}
//{{{ createEncodingMenu() method
private JMenu createEncodingMenu()
{
ActionHandler actionHandler = new ActionHandler();
encodingMenuItems = new HashMap();
JMenu encodingMenu = new JMenu(jEdit.getProperty(
"vfs.browser.commands.encoding.label"));
JMenu menu = encodingMenu;
autoDetect = new JCheckBoxMenuItem(
jEdit.getProperty(
"vfs.browser.commands.encoding.auto-detect"));
autoDetect.setSelected(browser.autoDetectEncoding);
autoDetect.setActionCommand("auto-detect");
autoDetect.addActionListener(actionHandler);
menu.add(autoDetect);
menu.addSeparator();
ButtonGroup grp = new ButtonGroup();
List encodingMenuItemList = new ArrayList();
String[] encodings = MiscUtilities.getEncodings();
for(int i = 0; i < encodings.length; i++)
{
String encoding = encodings[i];
JRadioButtonMenuItem mi = new JRadioButtonMenuItem(encoding);
mi.setActionCommand("encoding@" + encoding);
mi.addActionListener(actionHandler);
grp.add(mi);
encodingMenuItems.put(encoding,mi);
encodingMenuItemList.add(mi);
}
String systemEncoding = System.getProperty("file.encoding");
if(encodingMenuItems.get(systemEncoding) == null)
{
JRadioButtonMenuItem mi = new JRadioButtonMenuItem(
systemEncoding);
mi.setActionCommand("encoding@" + systemEncoding);
mi.addActionListener(actionHandler);
grp.add(mi);
encodingMenuItems.put(systemEncoding,mi);
encodingMenuItemList.add(mi);
}
Collections.sort(encodingMenuItemList,
new MiscUtilities.MenuItemCompare());
Iterator iter = encodingMenuItemList.iterator();
while(iter.hasNext())
{
JRadioButtonMenuItem mi = (JRadioButtonMenuItem)
iter.next();
if(menu.getMenuComponentCount() > 20)
{
JMenu newMenu = new JMenu(
jEdit.getProperty("common.more"));
menu.add(newMenu);
menu = newMenu;
}
menu.add(mi);
}
menu.addSeparator();
otherEncoding = new JRadioButtonMenuItem();
otherEncoding.setActionCommand("other-encoding");
otherEncoding.addActionListener(actionHandler);
grp.add(otherEncoding);
menu.add(otherEncoding);
return encodingMenu;
} //}}}
//}}}
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
String actionCommand = evt.getActionCommand();
if(actionCommand.equals("auto-detect"))
{
browser.autoDetectEncoding
= autoDetect.isSelected();
}
else if(actionCommand.equals("other-encoding"))
{
String encoding = GUIUtilities.input(browser,
"encoding-prompt",null,
jEdit.getProperty("buffer.encoding",
System.getProperty("file.encoding")));
if(encoding == null)
return;
browser.currentEncoding = encoding;
}
else if(actionCommand.startsWith("encoding@"))
{
browser.currentEncoding = actionCommand.substring(9);
}
}
} //}}}
}
|
| ... 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.