<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.eclipse.debug.ui">
<annotation>
   <appInfo>
      <meta.schema plugin="org.eclipse.debug.ui" id="debugModelPresentations" name="Debug Model Presentation"/>
   </appInfo>
   <documentation>
      This extension point allows tools to handle the 
presentation aspects of a debug model. 
A debug model presentation is responsible for 
providing labels, images, and editors for elements 
in a specific debug model.
   </documentation>
</annotation>

   <element name="extension">
      <complexType>
         <sequence>
            <element ref="debugModelPresentation" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
 		<attribute name="point" type="string" use="required">
            <annotation>
               <documentation>
                  a fully qualified identifier of the target extension point
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string">
            <annotation>
               <documentation>
                  an optional identifier of the extension instance
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                 an optional name of the extension instance
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="debugModelPresentation">
      <complexType>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  fully qualifed name of a Java class that implements the 
&lt;samp&gt;org.eclipse.debug.ui.IDebugModelPresentation&lt;/samp&gt;
interface.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.debug.ui.IDebugModelPresentation"/>
               </appInfo>
            </annotation>
         </attribute>
          <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  the identifier of the debug model this presentation is responsible for
               </documentation>
            </annotation>
         </attribute>
          <attribute name="detailsViewerConfiguration" type="string" use="optional">
            <annotation>
               <documentation>
                  the fully qualified name of the Java class that is an instance of org.eclipse.jface.text.source.SourceViewerConfiguration. When specified, the source viewer configuration will be used in the "details" area of the variables and expressions view when displaying the details of an element from the debug model associated with this debug model presentation. When unspecified, a default configuration is used. 
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <annotation>
      <appInfo>
         <meta.section type="examples"/>
      </appInfo>
      <documentation>
         The following is an example of a debug model presentations extension point:

&lt;p&gt;
&lt;pre&gt;
   &lt;extension point = "org.eclipse.debug.ui.debugModelPresentations"&gt; 
       &lt;debugModelPresentation 
           class = "com.example.JavaModelPresentation"
           id = "com.example.JavaDebugModel"&gt;
       &lt;/debugModelPresentation&gt; 
   &lt;/extension&gt; 
&lt;/pre&gt;
&lt;/p&gt;
In the example above, the class 
&lt;samp&gt;com.example.JavaModelPresentation&lt;/samp&gt; will be 
used to render and present debug elements originating 
from the debug model identified by 
&lt;samp&gt;com.example.JavaDebugModel&lt;/samp&gt;.
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="apiInfo"/>
      </appInfo>
      <documentation>
         Value of the action attribute &lt;samp&gt;class&lt;/samp&gt; must be a fully 
qualified class name of a Java class that implements 
&lt;samp&gt;org.eclipse.debug.ui.IDebugModelPresentation&lt;/samp&gt;.
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="copyright"/>
      </appInfo>
      <documentation>
         Copyright (c) 2000, 2003 IBM Corporation and others.&lt;br&gt;
All rights reserved. This program and the accompanying materials are made 
available under the terms of the Common Public License v1.0 which 
accompanies this distribution, and is available at 
&lt;a href=&quot;http://www.eclipse.org/legal/cpl-v10.html&quot;&gt;http://www.eclipse.org/legal/cpl-v10.html&lt;/a&gt;
      </documentation>
   </annotation>

</schema>
