Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/gjt/sp/jedit/menu/MarkersProvider.java


1   /*
2    * MarkersProvider.java - Markers menu
3    * :tabSize=8:indentSize=8:noTabs=false:
4    * :folding=explicit:collapseFolds=1:
5    *
6    * Copyright (C) 2001, 2003 Slava Pestov
7    *
8    * This program is free software; you can redistribute it and/or
9    * modify it under the terms of the GNU General Public License
10   * as published by the Free Software Foundation; either version 2
11   * of the License, or any later version.
12   *
13   * This program is distributed in the hope that it will be useful,
14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   * GNU General Public License for more details.
17   *
18   * You should have received a copy of the GNU General Public License
19   * along with this program; if not, write to the Free Software
20   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21   */
22  
23  package org.gjt.sp.jedit.menu;
24  
25  //{{{ Imports
26  import javax.swing.event.*;
27  import javax.swing.*;
28  import java.awt.event.*;
29  import java.awt.*;
30  import java.util.*;
31  import org.gjt.sp.jedit.*;
32  //}}}
33  
34  public class MarkersProvider implements DynamicMenuProvider
35  {
36    //{{{ updateEveryTime() method
37    public boolean updateEveryTime()
38    {
39      return true;
40    } //}}}
41  
42    //{{{ update() method
43    public void update(JMenu menu)
44    {
45      final View view = GUIUtilities.getView(menu);
46      Buffer buffer = view.getBuffer();
47  
48      Vector markers = buffer.getMarkers();
49  
50      if(markers.size() == 0)
51      {
52        JMenuItem mi = new JMenuItem(jEdit.getProperty(
53          "no-markers.label"));
54        mi.setEnabled(false);
55        menu.add(mi);
56        return;
57      }
58  
59      int maxItems = jEdit.getIntegerProperty("menu.spillover",20);
60  
61      JMenu current = menu;
62  
63      for(int i = 0; i < markers.size(); i++)
64      {
65        final Marker marker = (Marker)markers.elementAt(i);
66        int lineNo = buffer.getLineOfOffset(marker.getPosition());
67  
68        if(current.getItemCount() >= maxItems && i != markers.size() - 1)
69        {
70          //current.addSeparator();
71          JMenu newCurrent = new JMenu(
72            jEdit.getProperty(
73            "common.more"));
74          current.add(newCurrent);
75          current = newCurrent;
76        }
77  
78        JMenuItem mi = new MarkersMenuItem(buffer,
79          lineNo,marker.getShortcut());
80        mi.addActionListener(new ActionListener()
81        {
82          public void actionPerformed(ActionEvent evt)
83          {
84            view.getTextArea().setCaretPosition(
85              marker.getPosition());
86          }
87        });
88        current.add(mi);
89      }
90    } //}}}
91  
92    //{{{ MarkersMenuItem class
93    static class MarkersMenuItem extends JMenuItem
94    {
95      //{{{ MarkersMenuItem constructor
96      MarkersMenuItem(Buffer buffer, int lineNo, char shortcut)
97      {
98        String text = buffer.getLineText(lineNo).trim();
99        if(text.length() == 0)
100         text = jEdit.getProperty("markers.blank-line");
101       setText((lineNo + 1) + ": " + text);
102 
103       shortcutProp = "goto-marker.shortcut";
104       MarkersMenuItem.this.shortcut = shortcut;
105     } //}}}
106 
107     //{{{ getPreferredSize() method
108     public Dimension getPreferredSize()
109     {
110       Dimension d = super.getPreferredSize();
111 
112       String shortcut = getShortcut();
113 
114       if(shortcut != null)
115       {
116         d.width += (getFontMetrics(acceleratorFont)
117           .stringWidth(shortcut) + 15);
118       }
119       return d;
120     } //}}}
121 
122     //{{{ paint() method
123     public void paint(Graphics g)
124     {
125       super.paint(g);
126 
127       String shortcut = getShortcut();
128 
129       if(shortcut != null)
130       {
131         g.setFont(acceleratorFont);
132         g.setColor(getModel().isArmed() ?
133           acceleratorSelectionForeground :
134           acceleratorForeground);
135         FontMetrics fm = g.getFontMetrics();
136         Insets insets = getInsets();
137         g.drawString(shortcut,getWidth() - (fm.stringWidth(
138           shortcut) + insets.right + insets.left + 5),
139           getFont().getSize() + (insets.top - 1)
140           /* XXX magic number */);
141       }
142     } //}}}
143 
144     //{{{ Private members
145     private String shortcutProp;
146     private char shortcut;
147     private static Font acceleratorFont;
148     private static Color acceleratorForeground;
149     private static Color acceleratorSelectionForeground;
150 
151     //{{{ getShortcut() method
152     private String getShortcut()
153     {
154       if(shortcut == '\0')
155         return null;
156       else
157       {
158         String shortcutPrefix = jEdit.getProperty(shortcutProp);
159 
160         if(shortcutPrefix == null)
161           return null;
162         else
163         {
164           return shortcutPrefix + " " + shortcut;
165         }
166       }
167     } //}}}
168 
169     //{{{ Class initializer
170     static
171     {
172       acceleratorFont = UIManager.getFont("MenuItem.acceleratorFont");
173       acceleratorFont = new Font("Monospaced",
174         acceleratorFont.getStyle(),
175         acceleratorFont.getSize());
176       acceleratorForeground = UIManager
177         .getColor("MenuItem.acceleratorForeground");
178       acceleratorSelectionForeground = UIManager
179         .getColor("MenuItem.acceleratorSelectionForeground");
180     } //}}}
181 
182     //}}}
183   } //}}}
184 }