|
What this is
Other links
The source code
/*
* PluginsProvider.java - Plugins menu
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2003 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.menu;
import javax.swing.*;
import java.util.*;
import org.gjt.sp.jedit.*;
import org.gjt.sp.util.Log;
public class PluginsProvider implements DynamicMenuProvider
{
//{{{ updateEveryTime() method
public boolean updateEveryTime()
{
return false;
} //}}}
//{{{ update() method
public void update(JMenu menu)
{
// We build a set of lists, each list contains plugin menu
// items that begin with a given letter.
int count = 0;
List[] letters = new List[26];
for(int i = 0; i < letters.length; i++)
{
letters[i] = new ArrayList();
}
Vector pluginMenuItems = new Vector();
PluginJAR[] pluginArray = jEdit.getPluginJARs();
for(int i = 0; i < pluginArray.length; i++)
{
PluginJAR jar = pluginArray[i];
EditPlugin plugin = jar.getPlugin();
if(plugin == null)
continue;
JMenuItem menuItem = plugin.createMenuItems();
if(menuItem != null)
{
addToLetterMap(letters,menuItem);
count++;
}
//{{{ old API
else if(jEdit.getProperty("plugin."
+ plugin.getClassName()
+ ".activate") == null)
{
try
{
pluginMenuItems.clear();
plugin.createMenuItems(pluginMenuItems);
Iterator iter = pluginMenuItems.iterator();
while(iter.hasNext())
{
addToLetterMap(letters,
(JMenuItem)iter.next());
count++;
}
}
catch(Throwable t)
{
Log.log(Log.ERROR,this,
"Error creating menu items"
+ " for plugin");
Log.log(Log.ERROR,this,t);
}
} //}}}
}
if(count == 0)
{
JMenuItem menuItem = new JMenuItem(
jEdit.getProperty("no-plugins.label"));
menuItem.setEnabled(false);
menu.add(menuItem);
return;
}
// Sort each letter
for(int i = 0; i < letters.length; i++)
{
List list = letters[i];
Collections.sort(list,new MiscUtilities
.MenuItemCompare());
}
int maxItems = jEdit.getIntegerProperty("menu.spillover",20);
// if less than 20 items, put them directly in the menu
if(count <= maxItems)
{
for(int i = 0; i < letters.length; i++)
{
Iterator iter = letters[i].iterator();
while(iter.hasNext())
{
menu.add((JMenuItem)iter.next());
}
}
return;
}
// Collect blocks of up to maxItems of consecutive letters
count = 0;
char first = 'A';
JMenu submenu = new JMenu();
menu.add(submenu);
for(int i = 0; i < letters.length; i++)
{
List letter = letters[i];
if(count + letter.size() > maxItems && count != 0)
{
char last = (char)(i + 'A' - 1);
if(last == first)
submenu.setText(String.valueOf(first));
else
submenu.setText(first + " - " + last);
first = (char)(char)(i + 'A');
count = 0;
submenu = null;
}
Iterator iter = letter.iterator();
while(iter.hasNext())
{
if(submenu == null)
{
submenu = new JMenu();
menu.add(submenu);
}
submenu.add((JMenuItem)iter.next());
}
count += letter.size();
}
if(submenu != null)
{
char last = 'Z';
if(last == first)
submenu.setText(String.valueOf(first));
else
submenu.setText(first + " - " + last);
}
} //}}}
//{{{ addToLetterMap() method
private void addToLetterMap(List[] letters, JMenuItem item)
{
char ch = item.getText().charAt(0);
ch = Character.toUpperCase(ch);
if(ch < 'A' || ch > 'Z')
{
Log.log(Log.ERROR,this,"Plugin menu item label must "
+ "begin with A - Z, or a - z: "
+ item.getText());
}
else
letters[ch - 'A'].add(item);
} //}}}
}
|
| ... 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.