/plugins/Tags/tags/Tags-3.1.0/tags/ChooseTagListDockable.java
# · Java · 177 lines · 140 code · 13 blank · 24 comment · 19 complexity · c551f038c770f4719d829062227b977d MD5 · raw file
- /*
- * TagsPlugin.java
- * Copyright (c) 2001, 2002 Kenrick Drew (kdrew@earthlink.net)
- * Copyright (c) 2003, 2004 Ollie Rutherfurd (oliver@jedit.org)
- * Copyright (c) 2007 Shlomy Reinstein (shlomy@users.sourceforge.net)
- *
- * This file is part of the Tags plugin.
- *
- * TagsPlugin 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.
- *
- * TagsPlugin 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.
- *
- * $Id: TagsPlugin.java 10867 2007-10-10 13:01:00Z shlomy $
- */
- package tags;
- import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyAdapter;
- import java.awt.event.KeyEvent;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Vector;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import org.gjt.sp.jedit.View;
- import org.gjt.sp.jedit.gui.DefaultFocusComponent;
- @SuppressWarnings("serial")
- public class ChooseTagListDockable extends JPanel
- implements DefaultFocusComponent {
- private View view;
- private ChooseTagList chooseTagList = null;
- private JScrollPane scroller = null;
- private JMenu filterMenu = null;
- private Vector<TagLine> origTagLines = null;
-
- public ChooseTagListDockable(View view) {
- super(new BorderLayout());
- this.view = view;
- JMenuBar menuBar = new JMenuBar();
- add(menuBar, BorderLayout.NORTH);
- filterMenu = new JMenu("Filter");
- menuBar.add(filterMenu);
- setTagLines(new Vector<TagLine>());
- }
-
- public void setTagLines(Vector<TagLine> tagLines) {
- origTagLines = tagLines;
- updateTagLines(tagLines);
- Map<String, HashSet<String>> attributes =
- new HashMap<String, HashSet<String>>();
- for (int i = 0; i < tagLines.size(); i++) {
- TagLine l = (TagLine) tagLines.get(i);
- Vector<ExuberantInfoItem> items = l.getExuberantInfoItems();
- for (int j = 0; j < items.size(); j++) {
- ExuberantInfoItem item = (ExuberantInfoItem) items.get(j);
- String [] parts = item.toString().split(":", 2);
- if (parts.length < 2)
- continue;
- HashSet<String> set = attributes.get(parts[0]);
- if (set == null) {
- set = new HashSet<String>();
- attributes.put(parts[0], set);
- }
- set.add(parts[1]);
- }
- }
- filterMenu.removeAll();
- Iterator<String> it = attributes.keySet().iterator();
- while (it.hasNext()) {
- String att = it.next();
- HashSet<String> valueSet = attributes.get(att);
- if (valueSet.size() > 1 && valueSet.size() <= 20) {
- JMenu attrMenu = new JMenu(att);
- filterMenu.add(attrMenu);
- Iterator<String> valueIt = valueSet.iterator();
- while (valueIt.hasNext()) {
- String val = valueIt.next();
- JMenuItem valItem = new JMenuItem(val);
- attrMenu.add(valItem);
- valItem.addActionListener(new FilterHandler(att, val));
- }
- }
- }
- revalidate();
- }
- private void updateTagLines(Vector<TagLine> tagLines) {
- if (scroller != null)
- remove(scroller);
- chooseTagList = new ChooseTagList(tagLines);
- scroller = new JScrollPane(chooseTagList,
- JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
- add(scroller, BorderLayout.CENTER);
- chooseTagList.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- selected();
- }
- });
- chooseTagList.addKeyListener(new KeyAdapter() {
- @Override
- public void keyTyped(KeyEvent e) {
- if (e.getKeyChar() >= '1' && e.getKeyChar() <= '9') {
- int selected = Character.getNumericValue(e.getKeyChar()) - 1;
- if (selected >= 0 &&
- selected < chooseTagList.getModel().getSize())
- {
- chooseTagList.setSelectedIndex(selected);
- selected();
- e.consume();
- }
- }
- }
- });
- }
-
- private void selected()
- {
- TagLine tagLine = (TagLine)chooseTagList.getSelectedValue();
- TagsPlugin.goToTagLine(view, tagLine, false, tagLine.getTag());
- }
- public void focusOnDefaultComponent() {
- if (chooseTagList != null)
- chooseTagList.requestFocus();
- }
-
- private class FilterHandler implements ActionListener {
- private String att;
- private String val;
- public FilterHandler(String attr, String value) {
- att = attr;
- val = value;
- }
- public void actionPerformed(ActionEvent e) {
- filter(att, val);
- }
- }
- public void filter(String att, String val) {
- AttributeValueFilter filter = new AttributeValueFilter(att, val);
- Vector<TagLine> tagLines = origTagLines;
- Vector<TagLine> filtered = new Vector<TagLine>();
- for (int i = 0; i < tagLines.size(); i++) {
- TagLine l = (TagLine) tagLines.get(i);
- if (filter.pass(l))
- filtered.add(l);
- }
- updateTagLines(filtered);
- revalidate();
- }
- }