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

Quick Search    Search Deep

Source code: com/port80/eclipse/jdt/history/GotoVisitedAction.java


1   package com.port80.eclipse.jdt.history;
2   
3   import java.util.Arrays;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import org.eclipse.jface.action.Action;
8   import org.eclipse.jface.action.IAction;
9   import org.eclipse.jface.action.IMenuCreator;
10  import org.eclipse.jface.action.IStatusLineManager;
11  import org.eclipse.jface.viewers.ISelection;
12  import org.eclipse.swt.SWT;
13  import org.eclipse.swt.events.ArmEvent;
14  import org.eclipse.swt.events.ArmListener;
15  import org.eclipse.swt.events.MenuAdapter;
16  import org.eclipse.swt.events.MenuEvent;
17  import org.eclipse.swt.events.SelectionAdapter;
18  import org.eclipse.swt.events.SelectionEvent;
19  import org.eclipse.swt.widgets.Control;
20  import org.eclipse.swt.widgets.Menu;
21  import org.eclipse.swt.widgets.MenuItem;
22  import org.eclipse.ui.IWorkbenchWindow;
23  import org.eclipse.ui.IWorkbenchWindowPulldownDelegate;
24  import org.eclipse.ui.internal.Workbench;
25  import org.eclipse.ui.internal.WorkbenchWindow;
26  
27  import com.port80.eclipse.jdt.JdtPlugin;
28  import com.port80.eclipse.jdt.util.PersistentItem;
29  import com.port80.eclipse.util.NavigateHistory;
30  import com.port80.eclipse.util.UtilPluginImages;
31  
32  /**
33   * Popup a dialog to let user choose the sort key from a list.
34   * @author chrisl
35   */
36  public class GotoVisitedAction extends Action implements IMenuCreator, IWorkbenchWindowPulldownDelegate {
37  
38    private static final String NAME = "GotoVisitedAction";
39    private static final boolean DEBUG = true;
40  
41    IWorkbenchWindow fWindow;
42  
43    //  private static final int HISTORY_MENU_LENGTH = 8;
44  
45    /** Fast action is go back. */
46    public void run() {
47      //JdtPlugin.getNavHistory().goBack();
48    }
49  
50    /**
51     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
52     */
53    public void run(IAction action) {
54      if (DEBUG)
55        System.err.println(NAME + ".run(IAction)");
56    }
57  
58    /**
59     * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
60     */
61    public void selectionChanged(IAction action, ISelection selection) {
62      if (DEBUG)
63        System.err.println(NAME + ".selectionChanged()");
64    }
65  
66    /** 
67     * Popup menu.
68     * Method declared on IWorkbenchWindowPulldownDelegate.
69     */
70    public Menu getMenu(Control parent) {
71      Menu menu = new Menu(parent);
72      return createMenu(menu);
73    }
74  
75    /**
76     * Pulldown menu.
77     */
78    public Menu getMenu(Menu parent) {
79      Menu menu = new Menu(parent);
80      return createMenu(menu);
81    }
82  
83    /* (non-Javadoc)
84     * Method declared on IWorkbenchWindowActionDelegate.
85     */
86    public void dispose() {
87    }
88  
89    /* (non-Javadoc)
90     * Method declared on IWorkbenchWindowActionDelegate.
91     */
92    public void init(IWorkbenchWindow window) {
93      fWindow = window;
94      UtilPluginImages.setToolImageDescriptors(this, UtilPluginImages.IMG_GOTO);
95      setMenuCreator(this);
96    }
97  
98    /**
99     * Creates the menu for the action
100    */
101   private Menu createMenu(Menu menu) {
102     // Add listener to repopulate the menu each time
103     // it is shown because of dynamic history list
104     menu.addMenuListener(new MenuAdapter() {
105       public void menuShown(MenuEvent e) {
106         Menu m = (Menu) e.widget;
107         MenuItem[] items = m.getItems();
108         for (int i = 0; i < items.length; i++)
109           items[i].dispose();
110         populateMenu(m);
111       }
112     });
113     return menu;
114   }
115 
116   /**
117    * Populates the menu with its items
118    */
119   void populateMenu(Menu menu) {
120     final EditorHistory editorhistory = JdtPlugin.getEditorHistory();
121     if (editorhistory == null)
122       return;
123     final NavigateHistory history = editorhistory.getHistory();
124     // Add a menu item for each tool in the history.
125     Map map = new HashMap();
126     String sortedkey;
127     PersistentItem item;
128     int size;
129     int pos;
130     MenuItem mi;
131     //
132     size = history.visitedSize();
133     for (int i = 0; i < size; ++i) {
134       Object a = history.getVisited(i);
135       if (a instanceof PersistentItem) {
136         item = (PersistentItem) a;
137         //FIXME: See if this is too time consuming.
138         if (item.resolve() == null)
139           continue;
140         sortedkey = item.getName() + "\0" + item.toString();
141         map.put(sortedkey, new Integer(i));
142       }
143     }
144     Object[] sorted = map.keySet().toArray();
145     Arrays.sort(sorted);
146     mi = new MenuItem(menu, SWT.NONE);
147     mi.setText("Visited:");
148     mi.setEnabled(false);
149     for (int i = 0; i < sorted.length; ++i) {
150       mi = new MenuItem(menu, SWT.NONE);
151       sortedkey = (String) sorted[i];
152       pos = ((Integer) map.get(sortedkey)).intValue();
153       mi.setData(map.get(sortedkey));
154       sortedkey = sortedkey.substring(0, sortedkey.indexOf("\0"));
155       sortedkey = ((pos == size - 1) ? "->" : "-  ") + sortedkey;
156       mi.setText(sortedkey);
157       mi.addArmListener(new ArmListener() {
158         public void widgetArmed(ArmEvent e) {
159           Integer n = (Integer) e.widget.getData();
160           PersistentItem a = (PersistentItem) history.getVisited(n.intValue());
161           Workbench workbench = (Workbench) JdtPlugin.getDefault().getWorkbench();
162           WorkbenchWindow window = (WorkbenchWindow) workbench.getActiveWorkbenchWindow();
163           IStatusLineManager status = window.getActionBars().getStatusLineManager();
164           status.setMessage(a.getFullPath());
165         }
166       });
167       mi.addSelectionListener(new SelectionAdapter() {
168         public void widgetSelected(SelectionEvent e) {
169           Integer n = (Integer) e.widget.getData();
170           history.gotoVisited(n.intValue());
171         }
172       });
173     }
174     //
175     size = history.historySize();
176     if (size > 0) {
177       new MenuItem(menu, SWT.SEPARATOR);
178       mi = new MenuItem(menu, SWT.NONE);
179       mi.setText("History:");
180       mi.setEnabled(false);
181       pos = history.historyPos();
182       int start = 0; // Math.max(0, size - HISTORY_MENU_LENGTH);
183       for (int i = start; i < history.historySize(); ++i) {
184         Object a = history.getHistory(i);
185         if (!(a instanceof PersistentItem))
186           continue;
187         item = (PersistentItem) a;
188         mi = new MenuItem(menu, SWT.NONE);
189         sortedkey = ((i == pos) ? "->" : "-  ") + item.getName();
190         mi.setText(sortedkey);
191         mi.setData(new Integer(i));
192         mi.addArmListener(new ArmListener() {
193           public void widgetArmed(ArmEvent e) {
194             Integer n = (Integer) e.widget.getData();
195             PersistentItem a = (PersistentItem) history.getHistory(n.intValue());
196             Workbench workbench = (Workbench) JdtPlugin.getDefault().getWorkbench();
197             WorkbenchWindow window =
198               (WorkbenchWindow) workbench.getActiveWorkbenchWindow();
199             IStatusLineManager status =
200               window.getActionBars().getStatusLineManager();
201             status.setMessage(a.getFullPath());
202           }
203         });
204         mi.addSelectionListener(new SelectionAdapter() {
205           public void widgetSelected(SelectionEvent e) {
206             Integer n = (Integer) e.widget.getData();
207             history.gotoHistory(n.intValue());
208           }
209         });
210       }
211     }
212   }
213 
214   ////////////////////////////////////////////////////////////////////////
215 }