author | wpaul |
Fri, 07 Aug 2009 13:47:27 -0500 | |
changeset 60 | 3982fab6369e |
parent 52 | 42077b7eab6e |
permissions | -rw-r--r-- |
37 | 1 |
/******************************************************************************* |
2 |
* Copyright (c) 2008 Nokia and others. |
|
3 |
* All rights reserved. This program and the accompanying materials |
|
4 |
* are made available under the terms of the Eclipse Public License v1.0 |
|
5 |
* which accompanies this distribution, and is available at |
|
6 |
* http://www.eclipse.org/legal/epl-v10.html |
|
7 |
* |
|
8 |
* Contributors: |
|
9 |
* Nokia - Initial API and implementation |
|
10 |
*******************************************************************************/ |
|
11 |
package org.eclipse.cdt.debug.internal.ui.views.executables; |
|
12 |
||
52
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
13 |
import java.util.List; |
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
14 |
|
37 | 15 |
import org.eclipse.cdt.debug.core.executables.Executable; |
16 |
import org.eclipse.cdt.debug.core.executables.ExecutablesManager; |
|
17 |
import org.eclipse.cdt.debug.core.executables.IExecutablesChangeListener; |
|
18 |
import org.eclipse.core.runtime.IProgressMonitor; |
|
19 |
import org.eclipse.core.runtime.IStatus; |
|
20 |
import org.eclipse.core.runtime.Status; |
|
21 |
import org.eclipse.jface.action.IMenuListener; |
|
22 |
import org.eclipse.jface.action.IMenuManager; |
|
23 |
import org.eclipse.jface.action.MenuManager; |
|
24 |
import org.eclipse.jface.action.Separator; |
|
25 |
import org.eclipse.jface.viewers.IStructuredSelection; |
|
26 |
import org.eclipse.jface.viewers.Viewer; |
|
27 |
import org.eclipse.jface.viewers.ViewerComparator; |
|
28 |
import org.eclipse.jface.viewers.ViewerDropAdapter; |
|
29 |
import org.eclipse.swt.SWT; |
|
30 |
import org.eclipse.swt.dnd.DND; |
|
31 |
import org.eclipse.swt.dnd.FileTransfer; |
|
32 |
import org.eclipse.swt.dnd.Transfer; |
|
33 |
import org.eclipse.swt.dnd.TransferData; |
|
34 |
import org.eclipse.swt.widgets.Composite; |
|
35 |
import org.eclipse.swt.widgets.Menu; |
|
36 |
import org.eclipse.swt.widgets.TreeColumn; |
|
37 |
import org.eclipse.ui.IWorkbenchActionConstants; |
|
38 |
import org.eclipse.ui.progress.UIJob; |
|
39 |
||
40 |
/** |
|
41 |
* Displays the list of executables gathered by the ExecutablesManager |
|
42 |
*/ |
|
43 |
public class ExecutablesViewer extends BaseViewer implements IExecutablesChangeListener { |
|
44 |
||
45 |
private static final String P_COLUMN_ORDER_KEY_EXE = "columnOrderKeyEXE"; //$NON-NLS-1$ |
|
46 |
private static final String P_SORTED_COLUMN_INDEX_KEY_EXE = "sortedColumnIndexKeyEXE"; //$NON-NLS-1$ |
|
47 |
private static final String P_COLUMN_SORT_DIRECTION_KEY_EXE = "columnSortDirectionKeyEXE"; //$NON-NLS-1$ |
|
48 |
private static final String P_VISIBLE_COLUMNS_KEY_EXE = "visibleColumnsKeyEXE"; //$NON-NLS-1$ |
|
49 |
||
50 |
||
51 |
/** |
|
52 |
* Handles dropping executable files into the view |
|
53 |
*/ |
|
54 |
public class ExecutablesDropAdapter extends ViewerDropAdapter { |
|
55 |
||
56 |
protected ExecutablesDropAdapter(Viewer viewer) { |
|
57 |
super(viewer); |
|
58 |
} |
|
59 |
||
60 |
@Override |
|
61 |
public boolean performDrop(Object data) { |
|
62 |
final String[] fileNames = (String[]) data; |
|
63 |
ExecutablesViewer.this.getExecutablesView().importExecutables(fileNames); |
|
64 |
return true; |
|
65 |
} |
|
66 |
||
67 |
@Override |
|
68 |
public boolean validateDrop(Object target, int operation, TransferData transferType) { |
|
69 |
return FileTransfer.getInstance().isSupportedType(transferType); |
|
70 |
} |
|
71 |
||
72 |
} |
|
73 |
||
74 |
public TreeColumn projectColumn; |
|
75 |
||
76 |
public ExecutablesViewer(ExecutablesView executablesView, Composite parent, int style) { |
|
77 |
super(executablesView, parent, style); |
|
78 |
||
79 |
// Setup D&D support |
|
80 |
int ops = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_DEFAULT; |
|
81 |
Transfer[] transfers = new Transfer[] { FileTransfer.getInstance() }; |
|
82 |
ExecutablesDropAdapter adapter = new ExecutablesDropAdapter(this); |
|
83 |
adapter.setFeedbackEnabled(false); |
|
84 |
addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter); |
|
85 |
||
86 |
// Setup content provider |
|
87 |
ExecutablesContentProvider exeContentProvider = new ExecutablesContentProvider(this); |
|
88 |
setContentProvider(exeContentProvider); |
|
89 |
setLabelProvider(exeContentProvider); |
|
90 |
||
91 |
getTree().setHeaderVisible(true); |
|
92 |
getTree().setLinesVisible(true); |
|
93 |
executablesView.getSite().setSelectionProvider(this); |
|
94 |
getTree().setData(".uid", "ExecutablesViewerTree"); //$NON-NLS-1$ //$NON-NLS-2$ |
|
95 |
||
96 |
createColumns(); |
|
97 |
||
98 |
setInput(ExecutablesManager.getExecutablesManager()); |
|
99 |
||
100 |
MenuManager popupMenuManager = new MenuManager("#PopupMenu"); //$NON-NLS-1$ |
|
101 |
IMenuListener listener = new IMenuListener() { |
|
102 |
public void menuAboutToShow(IMenuManager manager) { |
|
103 |
manager.add(ExecutablesViewer.this.getExecutablesView().refreshAction); |
|
104 |
manager.add(ExecutablesViewer.this.getExecutablesView().importAction); |
|
105 |
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
|
106 |
} |
|
107 |
}; |
|
108 |
popupMenuManager.addMenuListener(listener); |
|
109 |
popupMenuManager.setRemoveAllWhenShown(true); |
|
110 |
getExecutablesView().getSite().registerContextMenu(popupMenuManager, this.getExecutablesView().getSite().getSelectionProvider()); |
|
111 |
Menu menu = popupMenuManager.createContextMenu(getTree()); |
|
112 |
getTree().setMenu(menu); |
|
113 |
} |
|
114 |
||
115 |
private void createColumns() { |
|
116 |
nameColumn = new TreeColumn(getTree(), SWT.NONE); |
|
117 |
nameColumn.setWidth(100); |
|
118 |
nameColumn.setText(Messages.ExecutablesViewer_ExecutableName); |
|
119 |
nameColumn.setMoveable(true); |
|
120 |
nameColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.NAME)); |
|
121 |
||
122 |
projectColumn = new TreeColumn(getTree(), SWT.NONE); |
|
123 |
projectColumn.setWidth(100); |
|
124 |
projectColumn.setMoveable(true); |
|
125 |
projectColumn.setText(Messages.ExecutablesViewer_Project); |
|
126 |
projectColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.PROJECT)); |
|
127 |
||
128 |
locationColumn = new TreeColumn(getTree(), SWT.NONE); |
|
129 |
locationColumn.setWidth(100); |
|
130 |
locationColumn.setText(Messages.ExecutablesViewer_Location); |
|
131 |
locationColumn.setMoveable(true); |
|
132 |
locationColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.LOCATION)); |
|
133 |
||
134 |
sizeColumn = new TreeColumn(getTree(), SWT.NONE); |
|
135 |
sizeColumn.setWidth(100); |
|
136 |
sizeColumn.setText(Messages.ExecutablesViewer_Size); |
|
137 |
sizeColumn.setMoveable(true); |
|
138 |
sizeColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.SIZE)); |
|
139 |
||
140 |
modifiedColumn = new TreeColumn(getTree(), SWT.NONE); |
|
141 |
modifiedColumn.setWidth(100); |
|
142 |
modifiedColumn.setText(Messages.ExecutablesViewer_Modified); |
|
143 |
modifiedColumn.setMoveable(true); |
|
144 |
modifiedColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.MODIFIED)); |
|
145 |
||
146 |
typeColumn = new TreeColumn(getTree(), SWT.NONE); |
|
147 |
typeColumn.setWidth(100); |
|
148 |
typeColumn.setText(Messages.ExecutablesViewer_Type); |
|
149 |
typeColumn.setMoveable(true); |
|
150 |
typeColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.TYPE)); |
|
151 |
||
152 |
} |
|
153 |
||
154 |
@Override |
|
155 |
protected ViewerComparator getViewerComparator(int sortType) { |
|
156 |
if (sortType == ExecutablesView.PROJECT) { |
|
157 |
return new ExecutablesViewerComparator(sortType, column_sort_order[ExecutablesView.PROJECT]) { |
|
158 |
@SuppressWarnings("unchecked") //$NON-NLS-1$ |
|
159 |
public int compare(Viewer viewer, Object e1, Object e2) { |
|
160 |
Executable entry1 = (Executable) e1; |
|
161 |
Executable entry2 = (Executable) e2; |
|
162 |
return getComparator().compare(entry1.getProject().getName(), entry2.getProject().getName()) |
|
163 |
* column_sort_order[ExecutablesView.PROJECT]; |
|
164 |
} |
|
165 |
}; |
|
166 |
} |
|
167 |
return new ExecutablesViewerComparator(sortType, column_sort_order[sortType]); |
|
168 |
} |
|
169 |
||
170 |
@Override |
|
171 |
protected String getColumnOrderKey() { |
|
172 |
return P_COLUMN_ORDER_KEY_EXE; |
|
173 |
} |
|
174 |
||
175 |
@Override |
|
176 |
protected String getSortedColumnIndexKey() { |
|
177 |
return P_SORTED_COLUMN_INDEX_KEY_EXE; |
|
178 |
} |
|
179 |
||
180 |
@Override |
|
181 |
protected String getSortedColumnDirectionKey() { |
|
182 |
return P_COLUMN_SORT_DIRECTION_KEY_EXE; |
|
183 |
} |
|
184 |
||
185 |
@Override |
|
186 |
protected String getVisibleColumnsKey() { |
|
187 |
return P_VISIBLE_COLUMNS_KEY_EXE; |
|
188 |
} |
|
189 |
||
190 |
@Override |
|
191 |
protected String getDefaultVisibleColumnsValue() { |
|
192 |
// default visible columns |
|
193 |
return "1,1,1,0,0,0"; //$NON-NLS-1$ |
|
194 |
} |
|
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
195 |
|
52
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
196 |
public void executablesChanged(final List<Executable> executables) { |
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
197 |
// some executables have been updated. if one of them is currently |
52
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
198 |
// selected, we need to update the source file list |
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
199 |
UIJob refreshJob = new UIJob(Messages.ExecutablesViewer_RefreshExecutablesView) { |
52
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
200 |
|
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
201 |
@Override |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
202 |
public IStatus runInUIThread(IProgressMonitor monitor) { |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
203 |
// if the user has selected an executable, they expect its |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
204 |
// list of source files to be refreshed automatically |
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
205 |
if (getSelection() != null && |
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
206 |
getSelection() instanceof IStructuredSelection) { |
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
207 |
IStructuredSelection selection = (IStructuredSelection)getSelection(); |
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
208 |
|
52
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
209 |
Object firstElement = selection.getFirstElement(); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
210 |
if (firstElement instanceof Executable) { |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
211 |
Executable executable = (Executable) firstElement; |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
212 |
if (executables.contains(executable)) { |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
213 |
executable.setRefreshSourceFiles(true); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
214 |
setSelection(selection); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
215 |
} |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
216 |
} |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
217 |
} |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
218 |
return Status.OK_STATUS; |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
219 |
} |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
220 |
}; |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
221 |
refreshJob.schedule(); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
222 |
} |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
223 |
|
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
224 |
public void executablesListChanged() { |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
225 |
// Executables list has changed so refresh the view. |
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
226 |
UIJob refreshJob = new UIJob(Messages.ExecutablesViewer_RefreshExecutablesView) { |
52
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
227 |
|
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
228 |
@Override |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
229 |
public IStatus runInUIThread(IProgressMonitor monitor) { |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
230 |
refresh(null); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
231 |
packColumns(); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
232 |
return Status.OK_STATUS; |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
233 |
} |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
234 |
}; |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
235 |
refreshJob.schedule(); |
42077b7eab6e
Second merge to proper cdt_6_0 branch for CDT bugs 181020, 279844, & Carbide bugs 6152 & 9031.
timkelly
parents:
51
diff
changeset
|
236 |
} |
60
3982fab6369e
fixed executables view merge problems - bug #'s 9562, 9568, 9571.
wpaul
parents:
52
diff
changeset
|
237 |
} |