<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<plugin>

   <extension
         id="application"
         point="org.eclipse.core.runtime.applications">
      <application>
         <run
               class="org.apache.directory.ldapstudio.Application">
         </run>
      </application>
   </extension>
   <extension
         point="org.eclipse.ui.bindings">
      <key
            commandId="org.eclipse.ui.file.exit"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            sequence="CTRL+Q">
      </key>
   </extension>
   <extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="org.apache.directory.ldapstudio.application"
            name="LDAP Studio">
         <property
               name="aboutText"
               value="%aboutText"/>
         <property
               name="aboutImage"
               value="resources/pictures/product_lg.gif"/>
         <property
               name="preferenceCustomization"
               value="plugin_customization.ini"/>
         <property
               name="windowImages"
               value="resources/icons/window/ldapstudio_16x16.gif,resources/icons/window/ldapstudio_32x32.gif,resources/icons/window/ldapstudio_48x48.gif,resources/icons/window/ldapstudio_64x64.gif,resources/icons/window/ldapstudio_128x128.gif"/>
      </product>
   </extension>
   <extension
         point="org.eclipse.ui.perspectives">
      <perspective
            class="org.apache.directory.ldapstudio.view.Perspective"
            icon="resources/icons/welcome-perspective.gif"
            id="org.apache.directory.ldapstudio.perspective"
            name="Welcome"/>
   </extension>
   <extension
         point="org.eclipse.ui.views">
      <view
            category="org.apache.directory.ldapstudio.rcp.ui.category"
            class="org.apache.directory.ldapstudio.view.WelcomeView"
            id="org.apache.directory.ldapstudio.view.WelcomeView"
            name="Welcome View"/>
	  <view
            name="Progress"
            icon="resources/icons/progress.gif"
            category="org.eclipse.ui"
            class="org.eclipse.ui.ExtensionFactory:progressView"
            id="org.eclipse.ui.views.ProgressView">
         </view>
      <category
            id="org.apache.directory.ldapstudio.rcp.ui.category"
            name="LDAP Studio RCP"/>
   </extension>

</plugin>
