a lot of bugfixes
[phpeclipse.git] / net.sourceforge.phpeclipse.debug.ui / src / net / sourceforge / phpdt / internal / debug / ui / PHPDebugModelPresentation.java
1 /**********************************************************************
2 Copyright (c) 2000, 2002 IBM Corp. and others.
3 All rights reserved. This program and the accompanying materials
4 are made available under the terms of the Common Public License v1.0
5 which accompanies this distribution, and is available at
6 http://www.eclipse.org/legal/cpl-v10.html
7
8 Contributors:
9     IBM Corporation - Initial implementation
10     Vicente Fernando - www.alfersoft.com.ar
11 **********************************************************************/
12 package net.sourceforge.phpdt.internal.debug.ui;
13
14 import java.util.HashMap;
15
16 import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiPlugin;
17 import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint;
18 import net.sourceforge.phpdt.internal.debug.core.model.IPHPDebugTarget;
19 import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
20 import net.sourceforge.phpdt.internal.debug.core.model.PHPThread;
21 import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable;
22 import net.sourceforge.phpdt.internal.debug.core.model.PHPValue;
23 import org.eclipse.core.resources.IFile;
24 import org.eclipse.core.resources.IMarker;
25 import org.eclipse.core.runtime.CoreException;
26 import org.eclipse.debug.core.DebugPlugin;
27 import org.eclipse.debug.core.model.IValue;
28 import org.eclipse.debug.core.model.IBreakpoint;
29 import org.eclipse.debug.ui.IDebugModelPresentation;
30 import org.eclipse.debug.ui.IValueDetailListener;
31 import org.eclipse.debug.ui.DebugUITools;
32 import org.eclipse.debug.ui.IDebugUIConstants;
33 import org.eclipse.jface.viewers.LabelProvider;
34 import org.eclipse.swt.graphics.Image;
35 import org.eclipse.ui.IEditorDescriptor;
36 import org.eclipse.ui.IEditorInput;
37 import org.eclipse.ui.IEditorRegistry;
38 import org.eclipse.ui.PlatformUI;
39 import org.eclipse.ui.part.FileEditorInput;
40
41 /**
42  * @see IDebugModelPresentation
43  */
44 public class PHPDebugModelPresentation extends LabelProvider implements IDebugModelPresentation {
45
46         protected HashMap fAttributes= new HashMap(3);
47
48         public PHPDebugModelPresentation() {
49                 super();
50         }
51         /**
52          * @see IDebugModelPresentation#getEditorId(IEditorInput, Object)
53          */
54         public String getEditorId(IEditorInput input, Object inputObject) {
55                 IEditorRegistry registry= PlatformUI.getWorkbench().getEditorRegistry();
56                 IEditorDescriptor descriptor= registry.getDefaultEditor(input.getName());
57                 if (descriptor != null)
58                         return descriptor.getId();
59                 
60                 return null;
61         }
62         /**
63          * @see IDebugModelPresentation#setAttribute(String, Object)
64          */
65         public void setAttribute(String id, Object value) {
66                 if (value == null) {
67                         return;
68                 }
69                 fAttributes.put(id, value);
70         }
71         
72         /**
73          * @see IDebugModelPresentation#getEditorInput(Object)
74          */
75         public IEditorInput getEditorInput(Object item) {
76
77                 if (item instanceof PHPLineBreakpoint) {
78                         IBreakpoint bp= (IBreakpoint)item;
79                         IMarker ma= bp.getMarker();
80                         IFile eclipseFile = PHPDebugUiPlugin.getWorkspace().getRoot().getFileForLocation(ma.getResource().getLocation());
81                 if (eclipseFile == null) {
82                                 return null;
83                         }
84                         return new FileEditorInput(eclipseFile);
85                 }
86                 return null;
87         }
88
89         /**
90          * @see IDebugModelPresentation#getImage(Object)
91          */
92         public Image getImage(Object element) {
93                 if (element instanceof PHPLineBreakpoint) {
94                         return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT);
95                 } else if (element instanceof IMarker) {
96                         return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT);
97                 } else if (element instanceof PHPStackFrame || element instanceof PHPThread || element instanceof IPHPDebugTarget) {
98                         return getDebugElementImage(element);
99                 } else if (element instanceof PHPVariable) {
100                         return getVariableImage((PHPVariable)element);
101                 } else if (element instanceof PHPValue) {
102                         return getValueImage((PHPValue)element);
103                 }
104                 return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT);
105         }
106
107         private Image getVariableImage(PHPVariable phpVar) {
108                 if (phpVar != null) {
109                         if (phpVar.isLocal())
110                                 return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
111                         if (phpVar.isHashValue())
112                                 return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
113                 }
114                 return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
115         }
116
117         private Image getValueImage(PHPValue phpVar) {
118                 if (phpVar != null) {
119                         return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
120                 }
121                 return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_VARIABLE);
122         }
123
124         /**
125          * @see IDebugModelPresentation#getText(Object)
126          */
127         public String getText(Object element) {
128                 try {
129                         if (element instanceof PHPLineBreakpoint) {
130                                 return getBreakpointText((IBreakpoint)element);
131                         } else if (element instanceof PHPVariable) {
132                                 PHPVariable phpVar= (PHPVariable) element;
133                                 return phpVar.toString();
134                         }
135                 } catch (CoreException e) {
136                         return PHPDebugUiMessages.getString("PHPDebugModelPresentation.<not responding>"); //$NON-NLS-1$
137                 }
138                 return null;
139         }
140         
141         /**
142          * @see IDebugModelPresentation#computeDetail(IValue, IValueDetailListener)
143          */
144         public void computeDetail(IValue value, IValueDetailListener listener) {
145                 return;
146         }
147
148         protected IBreakpoint getBreakpoint(IMarker marker) {
149                 return DebugPlugin.getDefault().getBreakpointManager().getBreakpoint(marker);
150         }
151
152         protected String getBreakpointText(IBreakpoint breakpoint) throws CoreException {
153                 if (breakpoint instanceof PHPLineBreakpoint) {
154                         return getLineBreakpointText((PHPLineBreakpoint) breakpoint);
155                 }
156                 return ""; //$NON-NLS-1$
157         }
158         
159         protected String getLineBreakpointText(PHPLineBreakpoint breakpoint) throws CoreException {
160
161                 StringBuffer label= new StringBuffer();
162
163                 label.append(breakpoint.getMarker().getResource().getFullPath());
164                 label.append(" ["); //$NON-NLS-1$
165                 label.append(PHPDebugUiMessages.getString("PHPDebugModelPresentation.line")); //$NON-NLS-1$
166                 label.append(' ');
167                 label.append(breakpoint.getLineNumber());
168                 label.append(']');
169                 
170                 return label.toString();
171         }
172         
173         /**
174          * Returns the image associated with the given element or <code>null</code>
175          * if none is defined.
176          */
177         protected Image getDebugElementImage(Object element) {
178                 Image image= null;
179                 if (element instanceof PHPThread) {
180                         PHPThread thread = (PHPThread)element;
181                         if (thread.isSuspended()) {
182                                 image= DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_SUSPENDED);
183                         } else if (thread.isTerminated()) {
184                                 image= DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_TERMINATED);
185                         } else {
186                                 image= DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_RUNNING);
187                         }
188                 } else if (element instanceof PHPStackFrame) {
189                         image= DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_STACKFRAME);
190                 } else if (element instanceof IPHPDebugTarget) {
191                         IPHPDebugTarget debugTarget=(IPHPDebugTarget) element;
192                         if (debugTarget.isTerminated()) {
193                                 image= DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET_TERMINATED);
194                         } else {
195                                 image= DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET);
196                         }
197                 }
198                 return image;
199         }
200 }