<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook V3.1-Based Variant V1.0//EN" [
 <!ENTITY kdevelop "<application>kdevelop</application>">
 <!ENTITY % addindex "IGNORE">
 <![ %addindex; [ <!ENTITY docindex SYSTEM "docindex.docbook"> ]]>
]>
<book lang="en">
<bookinfo>
<title>El manual de usuario de KDevelop
</title>
<subtitle>Guía de referencia para el Entorno Integrado de Desarrollo KDevelop para sistemas Unix, versión 1.2. </subtitle>
<authorgroup>
<author>
<surname>Ralf Nolden </surname>
<affiliation>
	  <orgname>El equipo de KDevelop</orgname>
<address><email><ulink url="mailto:Ralf.Nolden@post.rwth-aachen.de">&lt;Ralf.Nolden@post.rwth-aachen.de&gt;</ulink></email></address>
</affiliation>
</author>
</authorgroup>
<date>Versión 1.2, 21 de marzo de 2000</date>
<releaseinfo><!-- information about this particular version --></releaseinfo>
<abstract>
<para>Este manual es parte del Entorno Integrado de Desarrollo KDevelop y está por tanto bajo la Licencia Pública General (GPL) GNU; vea <link linkend="Copyright">Copyright</link> para más información.</para>
<para>KDE</para><!-- Merge this with the previous paragraph; it comes from <META NAME="description" CONTENT="..."> --></abstract>

</bookinfo>

<chapter id="introduccin">
<title>Introducción</title>

<para>Como todo en este mundo, el mundo de los ordenadores se mueve por modas y hoy en día tiende al uso de software libre, incluso para utilidades comerciales. El proyecto de software libre más popular es Linux. Actualmente la gente está de acuerdo en que Linux, al igual que otros proyectos como el servidor web Apache, el lenguaje Perl y el conjunto de herramientas GNU, demuestra que el software libre puede ser de una calidad tan alta como el software comercial. Pero a pesar de la calidad, los usuarios finales siguen sufriendo los crípticos comandos de cualquier sistema Unix. Para que Linux prospere se necesitan aplicaciones, tanto libres como comerciales, que sean fáciles de utilizar. </para>

<para>El proyecto KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> intenta cerrar este hueco, proporcionando un escritorio fácil de utilizar y las bibliotecas complementarias para aumentar la variedad de software basado en IGU <indexterm remap="idx"><primary>IGU</primary></indexterm> (Interfaz Gráfica de Usuario). El problema está en que la mayoría de los programas libres se crean en el tiempo libre del autor, y para ellos es importante que les guste su entorno de desarrollo. KDevelop quiere dar un importante paso hacia delante: hacer la vida del programador más fácil y eficiente. Los productos creados con KDevelop pueden alcanzar un nivel de funcionalidad y estabilidad más alto que otros productos creados sin él, en el mismo periodo de desarrollo.</para>

<para>Para alcanzar esta meta, el Entorno Integrado de Desarrollo KDevelop provee de muchas características que los desarrolladores necesitan, además de servir de interfaz para otros proyectos ajenos al KDevelop como pueden ser el <literal remap="tt">make</literal> y los compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>es de C++ de GNU, haciendolos invisibles al desarrollador y parte integrada del proceso de desarrollo. El KDevelop maneja:</para>

<para><itemizedlist>
<listitem>
<para> Todas las herramientas de desarrollo necesarias para programar en C++, tales como el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>, el enlazador <indexterm remap="idx"><primary>enlazador</primary></indexterm>, el automake <indexterm remap="idx"><primary>automake</primary></indexterm> y el autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm>.</para>
</listitem>
<listitem>
<para> Al KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm> (asistente de aplicaciones), que genera aplicaciones de referencia, completas y listas para utilizar.</para>
</listitem>
<listitem>
<para> Un generador de clases, para crear nuevas clases <indexterm remap="idx"><primary>clases</primary></indexterm> e integrarlas en su proyecto.</para>
</listitem>
<listitem>
<para> Un explorador de ficheros para los fuentes, las cabeceras, la documentación, etc. a ser incluidos en el proyecto.</para>
</listitem>
<listitem>
<para> La creación de manuales de usuario en SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> y la generación automática de los ficheros HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> con el estilo del KDE.</para>
</listitem>
<listitem>
<para> Documentación automática en HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> de las API <indexterm remap="idx"><primary>API</primary></indexterm> de las clases <indexterm remap="idx"><primary>clases</primary></indexterm> del proyecto con referencias cruzadas a las bibliotecas utilizadas.</para>
</listitem>
<listitem>
<para> Soporte para la internacionalización de su proyecto, permitiendo a los traductores añadir fácilmente su idioma al proyecto.</para>
</listitem>
<listitem>
<para> WYSIWYG (del inglés, lo que ve es lo que consigue) - creación de interfaces de usuario con el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> incorporado.</para>
</listitem>
<listitem>
<para> Control de su proyecto por medio de un sistema de control de versiones (CVS), proporcionando una interfaz para la mayoría de las funciones necesarias.</para>
</listitem>
<listitem>
<para> Depurado de su aplicación en conjunción con el KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm></para>
</listitem>
<listitem>
<para> Edición de los mapas de pixeles <indexterm remap="idx"><primary>mapas de pixeles</primary></indexterm> del proyecto con el programa KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm>.</para>
</listitem>
<listitem>
<para> La posibilidad de incluir cualquier otro programa que usted considere necesario para el desarrollo de programas, mediante el menú de "Herramientas <indexterm remap="idx"><primary>Herramientas</primary></indexterm>".</para>
</listitem>
</itemizedlist>
</para>

<para>KDevelop hace agradable el trabajar con todos los programas en el mismo entorno y ahorra tiempo al automatizar los procesos estándar de la tarea de desarrollo, además le da acceso directo y transparente a toda la información que necesite. Los mecanismos de navegación integrados están diseñados para soportar las peticiones de documentación <indexterm remap="idx"><primary>documentación</primary></indexterm> que los desarrolladores tengan en relación a su proyecto.   </para>

<para>El visualizador de clases <indexterm remap="idx"><primary>visualizador de clases</primary></indexterm> y el buscador de errores le llevan a cualquier parte del código del proyecto con un solo click, sin necesidad de buscar ficheros; los árboles de ficheros le dan acceso directo a los ficheros del proyecto <indexterm remap="idx"><primary>ficheros del proyecto</primary></indexterm> y el sistema integrado de ayuda le ofrece acceso a la documentación en línea desde cualquier parte del EID (Entorno Integrado de Desarrollo).</para>

<sect1 id="cambios">
<title>Cambios</title>

<para>La versión 1.2 d el KDevelop viene con la mayoría de facilidades necesarias para el desarrollo de aplicaciones en C/C++. Durante la fase de desarrollo del KDevelop, el proyecto ha mejorado mucho desde la versión final 1.0, seguida de la versión 1.1. Creemos que la versión actual será la última para KDE 1.x, dando a los desarrolladores el entorno que desean.</para>

<para>Se han realizado mejoras en los siguientes aspectos:</para>

<para><itemizedlist>
<listitem>
<para>Se incluye un rápido analizador y navegador de clases, con una vista de árbol de las clases. Además las clases y sus miembros pueden ser añadidos mediante diálogos.</para>
</listitem>
<listitem>
<para>Soporta las funciones más necesarias de un CVS (sistema de control de versiones), tales como añadir, eliminar, actualizar o entregar ficheros y directorios.</para>
</listitem>
<listitem>
<para>Documentación actualizada y extendida. Ahora se distribuyen cinco manuales con KDevelop.</para>
</listitem>
<listitem>
<para>Se han corregido errores en el analizador de clases, en el editor de diálogos y en el buscador de errores.</para>
</listitem>
<listitem>
<para>Se incluye un árbol de documentación actualizado, que le permite acceder directamente a la documentación de cualquier clase y de sus métodos.</para>
</listitem>
</itemizedlist>
</para>

<para>Cualquier comentario sobre el entorno y su documentación, así como cualquier petición de nuevas características, es bienvenido.</para>
</sect1>

<sect1 id="acerca-de-este-manual">
<title>Acerca de este manual</title>

<para>Este manual da una visión general del EID KDevelop y describe escuetamente el proceso básico de desarrollo de una aplicación. Para más información sobre temas de programación, le recomendamos que lea el <ulink url="programming/index.html">manual de programación de KDevelop</ulink> incluido con el programa, que trata temas como la comprensión de los esqueletos de aplicación <indexterm remap="idx"><primary>esqueletos de aplicación</primary></indexterm> generados y como crear aplicaciones KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> avanzadas mediante proyectos de ejemplo.</para>

<para>El diseño de este manual está separado en las siguientes partes:
<itemizedlist>
<listitem>
<para> <link linkend="Instalacin">Instalación</link>. Enumera los requerimientos del programa y explica como instalar y configurar KDevelop. </para>
</listitem>
<listitem>
<para><link linkend="Programas">Programas</link>. Explica como se crean programas con las herramientas de desarrollo GNU estándar y como se construyen.</para>
</listitem>
<listitem>
<para><link linkend="Desarrollo-con-KDevelop">Desarrollo con KDevelop</link>. Muestra como funciona el entorno.</para>
</listitem>
<listitem>
<para><link linkend="Descripcin-general">Descripción general</link>. Explica los menús y los diálogos, además de los atajos <indexterm remap="idx"><primary>atajos</primary></indexterm> de teclado.</para>
</listitem>
<listitem>
<para><link linkend="El-sistema-de-ayuda">El sistema de ayuda</link>. Muestra como utilizar el navegador de documentación <indexterm remap="idx"><primary>navegador de documentación</primary></indexterm> y las funciones adicionales de ayuda.</para>
</listitem>
<listitem>
<para><link linkend="Trabajando-con-el-editor">Trabajando con el editor</link>. Explica las características de gestión y edición de ficheros.</para>
</listitem>
<listitem>
<para><link linkend="Proyectos">Proyectos</link>. Describe la creación y mantenimiento de proyectos de software.</para>
</listitem>
<listitem>
<para><link linkend="Generacin-de-ejecutables">Generación de ejecutables</link>. Es una referencia sobre las opciones del Compilador <indexterm remap="idx"><primary>Compilador</primary></indexterm>, del enlazador, y del proyecto.</para>
</listitem>
<listitem>
<para><link linkend="El-navegador-de-clases">El navegador de clases</link>. Te detalla como hacer uso del potente navegador de clases del KDevelop.</para>
</listitem>
<listitem>
<para><link linkend="El-editor-de-dilogos">El editor de diálogos</link>. Trata del constructor visual integrado de IGU <indexterm remap="idx"><primary>IGU</primary></indexterm> y de el código <indexterm remap="idx"><primary>código</primary></indexterm> C++ que genera.</para>
</listitem>
<listitem>
<para><link linkend="Configuracin-general">Configuración general</link>. Muestra como puede modificar las opciones de uso del KDevelop.</para>
</listitem>
<listitem>
<para><link linkend="Preguntas-y-respuestas">Preguntas y respuestas</link>. Cubre preguntas relacionadas con el uso de KDevelop bajo diferentes tipos de Unix, y de soluciones para problemas habituales.</para>
</listitem>
</itemizedlist>
</para>

<para>Si es un programador novato o un nuevo usuario de este producto, le recomendamos que lea este manual antes de empezar a utilizar el EID, ya que habla en profundidad del uso del mismo. Entender como hacer las cosas de la forma más rápida le ayudará a ahorrar tiempo buscando funciones y características, y le ayudará a utilizar la herramienta de una forma más efectiva.</para>
</sect1>
</chapter>

<chapter id="instalacin">
<title>Instalación <indexterm remap="idx"><primary>Instalación</primary></indexterm></title>

<sect1 id="cmo-obtener-el-kdevelop">
<title>Cómo obtener el KDevelop</title>

<para>KDevelop puede ser encontrado en la página de aplicaciones del KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> en <ulink url="http://www.kde.org/current.html">\|\|</ulink> o en la página web del KDevelop en <ulink url="http://www.kdevelop.org">\|\|</ulink>. El programa también se incluye con algunas distribuciones, tales como la SuSE 6.1.</para>

<para>También puede obtener copias del repositorio CVS del programa desde su página web, para aquellos que quieran tener la última versión disponible del KDevelop. Normalmente, estas copias no están hechas para su uso habitual, sino para probar nuevas características y para mostrar los avances en el desarrollo del programa. Si desea obtener los programas ajenos que KDevelop necesita para funcionar, tales como KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> y KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, también los puede obtener desde la web del programa.</para>

<para>Si encuentra problemas al compilar o utilizar KDevelop, por favor, lea la sección <link linkend="Preguntas-y-respuestas">Preguntas y respuestas</link> de este manual, o el fichero FAQ incluido con el paquete del programa. Si su problema no aparece mencionado, por favor suscríbase en la lista de correo de KDevelop en <ulink url="mailto:kdevelop@fara3.cs.uni-potsdam.de">kdevelop@fara3.cs.uni-potsdam.de</ulink> enviando un correo electrónico con la cabecera vacía, que contenga "subscribe" como único contenido. Sólo se aceptan preguntas y notificaciones de error que tengan que ver con el EID, y no relacionadas con problemas de  implementación <indexterm remap="idx"><primary>implementación</primary></indexterm> que puedan surgirle mientras programa su aplicación. Recuerde que todos los mensajes enviados a la lista deben estar escritos en inglés, para que todos los que participan en ella puedan tomar parte de su problema y ayudarle mejor. La lista de correo también está creada para aquellos usuarios que quieran ayudar y que hayan encontrado soluciones para algún problema que les surgió, de forma que podamos solucionar errores <indexterm remap="idx"><primary>errores</primary></indexterm> y utilizar su conocimiento para dar a los novatos ayuda de primera mano. Una buena forma de notificar errores es enviar la salida <indexterm remap="idx"><primary>salida</primary></indexterm> que obtenga al ejecutar KDevelop desde la consola, o copiando y pegando el contenido de la ventana de mensajes <indexterm remap="idx"><primary>ventana de mensajes</primary></indexterm> interna de KDevelop.</para>
</sect1>

<sect1 id="requerimientos-requerimientos">
<title>Requerimientos <indexterm remap="idx"><primary>Requerimientos</primary></indexterm></title>

<para>Para poder compilar y utilizar KDevelop necesita los siguientes programas y bibliotecas, que están disponibles para la mayoría de plataformas como paquetes de distribución, y que por tanto pueden ser instalados fácilmente.</para>

<para><emphasis remap="bf">Requerido:</emphasis>
<itemizedlist>
<listitem>
<para>g++ 2.7.2/g++ 2.8.1/egcs 1.1 (o compatible), disponible en <ulink url="http://www.gnu.org">\|\|</ulink></para>
</listitem>
<listitem>
<para>GNU make (o compatible), disponible en <ulink url="http://www.gnu.org">\|\|</ulink></para>
</listitem>
<listitem>
<para>perl 5.004, disponible en <ulink url="http://www.perl.com">\|\|</ulink></para>
</listitem>
<listitem>
<para>autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm> 2.12, disponible en <ulink url="http://www.gnu.org">\|\|</ulink></para>
</listitem>
<listitem>
<para>automake <indexterm remap="idx"><primary>automake</primary></indexterm> 1.2, disponible en <ulink url="http://www.gnu.org">\|\|</ulink></para>
</listitem>
<listitem>
<para>flex 2.5.4,</para>
</listitem>
<listitem>
<para>GNU gettext, disponible en <ulink url="http://www.gnu.org">\|\|</ulink></para>
</listitem>
<listitem>
<para>Qt 1.42, disponible en <ulink url="http://www.troll.no">\|\|</ulink></para>
</listitem>
<listitem>
<para>KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> 1.1.x, disponible en <ulink url="http://www.kde.org">\|\|</ulink></para>
</listitem>
</itemizedlist>
</para>

<para><emphasis remap="bf">Opcional:</emphasis>
<itemizedlist>
<listitem>
<para>a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm> o enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> para poder imprimir <indexterm remap="idx"><primary>imprimir</primary></indexterm></para>
</listitem>
<listitem>
<para>ghostview o kghostview para poder previsualizar la impresión <indexterm remap="idx"><primary>impresión</primary></indexterm></para>
</listitem>
<listitem>
<para>glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm> 4.0 para el índice de búsqueda <indexterm remap="idx"><primary>índice de búsqueda</primary></indexterm>, disponible en <ulink url="http://glimpse.cs.arizona.edu">\|\|</ulink></para>
</listitem>
<listitem>
<para>sgmltools 1.0, disponibles en <ulink url="http://www.sgmltools.org">\|\|</ulink></para>
</listitem>
<listitem>
<para>KDE-SDK <indexterm remap="idx"><primary>KDE-SDK</primary></indexterm> (<emphasis remap="bf">KDE S</emphasis>oftware <emphasis remap="bf">D</emphasis>evelopment <emphasis remap="bf">K</emphasis>it, Conjunto de herramientas de desarrolo para KDE), que incluye KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm>, KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm>, KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm> (disponible en <ulink url="http://developer.kde.org">\|\|</ulink>)</para>
</listitem>
<listitem>
<para>KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, disponible en <ulink url="http://members.telecom.at/~johsixt/kdbg.html">\|\|</ulink></para>
</listitem>
<listitem>
<para>KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> (disponible en <ulink url="http://www.kde.org">\|\|</ulink>)</para>
</listitem>
</itemizedlist>
</para>

<para>KDevelop fue probado con SuSE Linux 5.2 y con FreeBSD 3.0 en un AMD K6 200 con 64MB RAM, además de con SuSE Linux 6.0 en un Intel 200 MMX con 128MB RAM.</para>

<para>Por lo que saben los autores, tanto SuSE Linux como FreeBSD contienen todos los paquetes necesarios, incluyendo a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm> y enscript <indexterm remap="idx"><primary>enscript</primary></indexterm>, como paquetes o como ficheros rpm, por lo que no debería tener problemas instalando los programas externos necesarios.</para>

<para><emphasis remap="bf">Documentación:</emphasis>	</para>

<para>Para crear la documentación de las bibliotecas de KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>, necesita que las fuentes del paquete kdelibs estén instaladas en su sistema. Además necesita el programa <emphasis remap="bf">KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm></emphasis> (incluido con KDE-SDK <indexterm remap="idx"><primary>KDE-SDK</primary></indexterm>).</para>

<para>También se encuentra disponible en nuestra página una referencia <indexterm remap="idx"><primary>referencia</primary></indexterm> de C/C++, que se integra en navegador de documentación <indexterm remap="idx"><primary>navegador de documentación</primary></indexterm> tras su instalación. Descarga el paquete, cópialo como <literal remap="tt">superusuario</literal> en el directorio del kde <indexterm remap="idx"><primary>kde</primary></indexterm> y descomprímelo de la siguiente forma: <literal remap="tt">tar zxvf c&&lowbar;;c++&&lowbar;;reference.tar.gz</literal>. La guía de referencia estará disponible desde el árbol de documentación; si no es así, al seleccionar la guía de referencia en el navegador, se mostrará un mensaje de error, con la URL desde la que se puede descargar y las instrucciones de instalación. </para>
</sect1>

<sect1 id="compilacin-e-instalacin">
<title>Compilación e instalación</title>

<para>Para poder compilar e instalar KDevelop en su sistema, escriba lo siguiente en el directorio base de la distribución de KDevelop:</para>

<para><screen>	&&percnt;; ./configure
	&&percnt;; make

	(como superusuario)
	
	&&percnt;; make install
</screen>
</para>

<para>Como KDevelop utiliza <literal remap="tt">autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm></literal>, no debería tener problemas compilándolo. </para>

<para>Para poder compilar una copia del CVS de KDevelop, escriba lo siguiente:
<screen>	&&percnt;; make -f &lt;idx/Makefile.cvs/
	&&percnt;; ./configure
	&&percnt;; make

	cambie a superusuario y escriba:
		
	&&percnt;; make install
</screen>
</para>

<para>Si el comando make <indexterm remap="idx"><primary>comando make</primary></indexterm> de su sistema es  <literal remap="tt">gmake</literal>, escriba <literal remap="tt">gmake</literal> en lugar de <literal remap="tt">make</literal>.</para>
</sect1>

<sect1 id="arrancando-kdevelop">
<title>Arrancando KDevelop</title>

<para>Si utiliza KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> como gestor de ventanas, KDevelop puede ser lanzado desde "K"&-&gt;;"Desarrollo"&-&gt;;"KDevelop 1.1". Como KDevelop soporta los tipos Mime de KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>, puede también lanzarlo seleccionando un fichero de proyecto KDevelop ("*.kdevprj", mostrado con el icono de proyecto KDevelop) en el gestor de ficheros de KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>. En este último caso, KDevelop se ejecutará y abrirá el proyecto seleccionado.
Con otros gestores de ventana, abra la consola y escriba:</para>

<para><screen>&&percnt;; kdevelop
</screen>
</para>

<para>Para lanzar KDevelop con un proyecto ya existente, entre en el directorio del proyecto y escriba:</para>

<para><screen> 	
&&percnt;; kdevelop  &&lt;;suProyecto&&gt;;.kdevprj
</screen>
</para>

<para>La primera vez que un usuario lance el KDevelop, se ejecutará el proceso de <link linkend="El-programa-de-instalacin">instalación automática</link>, que le permitirá configurar las opciones más habituales. Si en algún momento se estropea su instalación, puede reconfigurar el KDevelop de dos formas. Puede escribir:</para>

<para><screen> 	
&&percnt;; kdevelop  --setup
</screen>
</para>

<para>o, utilizando el KDE, puede seleccionar "K"&-&gt;;"Desarrollo"&-&gt;;"KDevelop Setup".</para>
</sect1>

<sect1 id="el-programa-de-instalacin">
<title>El programa de instalación</title>

<para>KDevelop incluye un programa de instalación automática, que se ejecuta cada vez que se lanza KDevelop y no existe el fichero de configuración kdeveloprc. Le recomendamos que siga el proceso de instalación eligiendo "Proceder", para que el programa analice su sistema y para configurar el entorno KDevelop.</para>

<para>Los botones del diálogo de instalación ejecutan las siguientes acciones:</para>

<para><emphasis remap="bf">Ayuda:</emphasis> Mostrará este fichero de ayuda.</para>

<para><emphasis remap="bf">Proceder:</emphasis> Comienza el proceso de instalación y ejecuta las siguientes acciones</para>

<para><orderedlist><listitem>
<para> Búsqueda de los programas make/gmake, autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm>, autoheader, automake <indexterm remap="idx"><primary>automake</primary></indexterm> y perl, para la creación y compilación de las aplicaciones generadas por KDevelop. Si gmake está instalado, se usará como comando make <indexterm remap="idx"><primary>comando make</primary></indexterm>. Posteriormente se puede elegir los parámetros que se le pasan al comando make, en el diálogo de configuración <indexterm remap="idx"><primary>configuración</primary></indexterm> del menú Opciones. Si desea leer una introducción al desarrollo de programas en sistemas Unix, vaya a la sección <link linkend="Programas">Programas</link>.
</para>
</listitem>
<listitem>
<para> Búsqueda de los programas KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> y glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm>. Éstos permiten crear una nueva documentación de la biblioteca KDE <indexterm remap="idx"><primary>biblioteca KDE</primary></indexterm> y un índice de búsqueda <indexterm remap="idx"><primary>índice de búsqueda</primary></indexterm>. Si se encuentran los dos programas, tanto el índice como la documentación se crearán en un paso posterior de la instalación.
 </para>
</listitem>
<listitem>
<para> Búsqueda de a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm> y enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> para permitir la impresión <indexterm remap="idx"><primary>impresión</primary></indexterm> de documentos. Alguno de los dos programas ha de estar presente para permitir una correcta impresión. De todas formas, si nínguno de los dos está presente, al instalarse posteriormente alguno de ellos, se puede elegir imprimir con él sin pasar otra vez por la configuración del programa. Unicamente hay que elegir el programa en el diálogo de impresión.
</para>
</listitem>
<listitem>
<para> Búsqueda de KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> y KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm>.  Le recomendamos que instale estos programas, ya que son buenos compañeros para la creación de aplicaciones KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>. KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm> se puede utilizar para depurar <indexterm remap="idx"><primary>depurar</primary></indexterm> su proyecto; KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> sirve para mostrar y editar las imágenes <indexterm remap="idx"><primary>imágenes</primary></indexterm> que usted seleccione en el árbol de ficheros. Los programas KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> y KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm> aparecerán disponibles (si se encuentran) en el menú Herramientas <indexterm remap="idx"><primary>Herramientas</primary></indexterm> de KDevelop. Posteriormente se pueden añadir más herramientas al menú, mediante la opción Herramientas <indexterm remap="idx"><primary>Herramientas</primary></indexterm>... del menú Opciones.
</para>
</listitem>
<listitem>
<para> Resumen de los programas encontrados: se muestra una lista que indica los programas que se encontraron, y los que no. Se muestra también una pequeña sugerencia, si la presencia de algún programa es recomendada. 
</para>
</listitem>
<listitem>
<para> Detección del camino hasta la documentación de la biblioteca Qt <indexterm remap="idx"><primary>Qt</primary></indexterm>. Busca la misma en la mayoría de localizaciones estandar para la documentación y configura el camino automáticamente. Si la documentación no es encontrada, porque no está instalada, o porque está en un camino distinto a los habituales, aparecerá un diálogo, que le dará como opciones seleccionar manualmente su situación o continuar. Si elige seleccionar manualmente la situación de la documentación, se le mostrará un diálogo para elegir su localización. Normalmente estará en el directorio qt/html. Tras hacer esto, la instalación puede ser continuada pulsando en "Proceder" otra vez.
</para>
</listitem>
<listitem>
<para> Si KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> es encontrado, se le pregutará si desea crear/actualizar la documentación de las bibliotecas de KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>. Para hacer esto, necesita tener las fuentes de dichas bibliotecas. A los usuarios de Linux que hayan instalado KDE desde una distribución, les recomendamos que copien y descompriman las fuentes del paquete de bibliotecas de KDE a su sistema; los usuarios de Free BSD que instalaron las bibliotecas como paquete, deberían buscar el paquete distfile adecuado. Si ninguno de estos casos es aplicable a su situación, descargue los ficheros fuente desde <ulink url="http://www.kde.org">\|\|</ulink> y descomprímalos en su sistema. Si lo desea, puede utilizar una documentación ya creada, que se encuentra disponible en <ulink url="http://developer.kde.org">\|\|</ulink>; en ese caso, cancele este paso y continúe creando el índice de búsqueda <indexterm remap="idx"><primary>índice de búsqueda</primary></indexterm>. Cuando la instalación termine, configure el camino hasta la documentación en el diálogo Configuración de KDevelop y vuelva a crear el índice de búsqueda, mediante la opción presente en el mismo diálogo. 

El diálogo "Actualización de la documentación de la biblioteca KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>" está preparado para utilizar $HOME/.kde/share/apps/kdevelop/KDE-Documentation como el camino por defecto para la documentación. Lo único que debe de hacer es elegir el camino hasta los fuentes de la biblioteca, con el botón situado en la parte superior del diálogo, y pulsar Aceptar. Ejemplo: si obtuvo el el paquete kdelibs.tar.gz desde <ulink url="http://www.kde.org">\|\|</ulink> y lo descargo a su directorio $HOME, debe abrir una consola o terminal y ejecutar "tar zxvf kdelibs.tar.gz". Los fuentes se descomprimirán en el directorio /home/nombredeusuario/kdelibs, que contendrá los fuentes de cada biblioteca en un subdirectorio. La biblioteca kdecore estará en el directorio /home/nombredeusuario/kdelibs/kdecore, etc. En el diálogo de actualización deberá elegir el camino a todas las bibliotecas, en este caso /home/nombredeusuario/kdelibs/. Tras pulsar Aceptar, un mensaje en la ventana de instalación le informará de que se está generando la documentación y de que debe esperar al siguiente mensaje.</para>

<para><emphasis remap="bf">NOTA:</emphasis> En un sistema multiusuario <indexterm remap="idx"><primary>sistema multiusuario</primary></indexterm> o en sistemas con cuotas de disco <indexterm remap="idx"><primary>cuotas de disco</primary></indexterm> para las cuentas de usuario, la instalación de documentación HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> para todos los usuarios sería una perdida de espacio. Es este caso, pida al administrador del sistema que ejecute KDevelop como superusuario, para que pueda acceder al directorio raiz del sistema. Entonces instale la documentación dentro del directorio de KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>, en $KDEDIR/share/apps/kdevelop/KDE-Documentation. El camino hasta este punto se puede configurar más tarde en el diálogo Configuración de KDevelop <indexterm remap="idx"><primary>Configuración de KDevelop</primary></indexterm>, en el menú Opciones <indexterm remap="idx"><primary>Opciones</primary></indexterm>.</para>

</listitem>
<listitem>
<para> Si se encontró el programa glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm> en su sistema, se le ofrecerá la posibilidad de crear una base de datos de búsqueda. La base de datos de búsqueda puede incluir la documentación de KDE <indexterm remap="idx"><primary>documentación de KDE</primary></indexterm> y la documentación de las Qt <indexterm remap="idx"><primary>documentación de las Qt</primary></indexterm> (opción por defecto). Además, la documentación del KDevelop será incluida e indexada. Si desea crear un índice de cualquier otra documentación, puede seleccionar su directorio y serán incluidas en el proceso.
</para>
</listitem>
<listitem>
<para> Durante la creación del índice de búsqueda <indexterm remap="idx"><primary>índice de búsqueda</primary></indexterm> la ventana de instalación mostrará un mensaje, indicando el proceso que se está realizando.
</para>
</listitem>
<listitem>
<para> Si todos los pasos de la instalación se realizaron correctamente, aparecerá un mensaje final anunciando que el programa KDevelop será ejecutado tras pulsar Aceptar. Recuerde que puede configurar otras opciones adicionales, tales como el guardado automático de ficheros, en el diálogo <link linkend="Configuracin-general">Configuración del KDevelop</link>, que es accesible a través del menú Opciones.</para>
</listitem>
</orderedlist>
</para>

<para><emphasis remap="bf">Cancelar:</emphasis> Mostrará un mensaje advirtiendo de que el proceso de instalación va a ser cancelado. Desde este diálogo se puede volver a la instalación ("Retroceder") o arrancar KDevelop con los valores por defecto ("Continuar"). En este último caso, deberá configurar todas las opciones manualmente desde los diálogos de configuración <indexterm remap="idx"><primary>diálogos de configuración</primary></indexterm> del menú Opciones.</para>
</sect1>
</chapter>

<chapter id="programas">
<title>Programas</title>

<para>Ahora que ya ha instalado KDevelop satisfactoriamente, y que las opciones más utilizadas están configuradas, se estará preguntándose si este programa ofrece lo que promete. En este capítulo se le dará una guía sobre como crear programas con las herramientas GNU y sobre la parte que KDevelop juega en el proceso.</para>

<sect1 id="el-compilador">
<title>El compilador</title>

<para>El compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> es el programa que, como mínimo, debe estar instalado en su sistema para poder crear programas ejecutables; este programa es el que compila el código fuente, transformándolo en ficheros objeto con los que crea el programa.</para>

<para>Normalmente, lo ejecutaría de esta forma:
Abra el editor que suela utilizar - no use un procesador de textos. Escriba algo como lo siguiente para crear el código fuente de su primer programa:</para>

<para><screen>#include &lt;iostream.h&gt;

int main(){

cout &lt;&lt; "Hola Mundo" &lt;&lt; endl;

}
</screen>

Bueno, todo lo que el programa hará será imprimir la cadena "Hola Mundo" en la salida <indexterm remap="idx"><primary>salida</primary></indexterm> estandar. En cualquier caso, este es el código del programa a generar, no el programa propiamente dicho. Necesitamos un compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>, en este caso un compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> de C++ como g++. Guarde el código fuente como, por ejemplo, miprograma.c e invoque el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> con el nombre del fichero (en la consola):</para>

<para><screen>g++ -o miprograma miprograma.cpp
</screen>

Ahora ya se puede ejecutar el programa. Escriba <literal remap="tt">miprograma</literal> en la consola. El programa mostrará la cadena; después finalizará.</para>
</sect1>

<sect1 id="make">
<title>Make y ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm></title>

<para>Vale, ya tiene todo lo que necesita: un editor y un compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>. Además puede ejecutar sus propios programas C++... Pero no es todo tan fácil, ¿qué pasa si tiene más de un fichero fuente? Además, ¿Tiene que compilar todos los ficheros cada vez que modifique uno? A medida que los programas se hacen más grandes, se vuelven más costosos y complejos de compilar, ya que tiene que ejecutar todos los comandos y opciones directamente. La solución pasa por crear un fichero con el nombre Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm> (en realidad puede tomar cualquier nombre menos el del programa) en el que insertar todos los comandos necesarios para compilar <indexterm remap="idx"><primary>compilar</primary></indexterm> el programa, por supuesto con unas normas de sintaxis. Si las herramientas make <indexterm remap="idx"><primary>make</primary></indexterm> o gmake <indexterm remap="idx"><primary>gmake</primary></indexterm> están instaladas, lo único que tiene que hacer es escribir el nombre de la herramienta en el directorio en el que el fichero Makefile se encuentra (si el fichero tiene otro nombre es necesario pasar el parametro `-f nombrefichero'). En ese momento la aplicación make toma el control y se encarga de la compilación del programa. La aplicación make tiene otras muchas ventajas y puede ser utilizada para muchos propositos. Para obtener una visión más clara de la herramienta, abra la consola y escriba:</para>

<para><literal remap="tt">man make</literal></para>

<para>o busque "GNU Make" en la ayuda del KDE, en "System GNU Info contents".</para>

<para>Ahora ya se habrá dado cuenta de las razones por las que un desarrollador necesita la herramienta make, para facilitar la compilación de sus aplicaciones.
Sin embargo, el problema que existía hasta ahora era que escribir los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm> era un trabajo costoso y que requería que el programador se aprendiera las opciones y la sintaxis de make. Afortunadamente, con el KDevelop esto se hace innecesario. Tan sólo tiene que elegir las opciones que desea para el make en el diálogo <link linkend="Configuracin-general">Configuración del KDevelop</link>. KDevelop se encarga de crear el fichero Makefile y de generar la aplicación con él, todo sin necesidad de teclear nada. Sencillamente utilice los botones de la barra de herramientas, a partir del segundo separador, o elija la función deseada en el menú "Construir".</para>

<para>La barra de herramientas y el menú "Construir" le ofrecen las funciones más habituales a la hora de utilizar el make:</para>

<para><itemizedlist>
<listitem>
<para> Compilar fichero <indexterm remap="idx"><primary>Compilar fichero</primary></indexterm>: sólo está activado si está trabajando con un fichero fuente. Llama al comando make, indicándole que compile únicamente el fichero abierto. </para>
</listitem>
<listitem>
<para> Make: llama al make y crea el objetivo.</para>
</listitem>
<listitem>
<para> Reconstruir todo: reconstruye el proyecto entero.</para>
</listitem>
<listitem>
<para> Limpiar/Reconstruir todo: primero limpia el directorio del proyecto y después ejecuta el programa make.</para>
</listitem>
<listitem>
<para> Parar la construcción: cancela el proceso en ejecución. Normalmente se utiliza cuando se está viendo como make hace su trabajo, a la vez que observa el código, y de repente -ooooh- se da cuenta de que hay un error en el código sin corregir. En ese caso sólo tiene que pulsar Parar, corregir el error, y volver a ejecutar make.  </para>
</listitem>
</itemizedlist>
</para>

<para>Compilar los ficheros no es lo único que KDevelop realiza con la ayuda de make. Otras cosas más propias de las aplicaciones KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>, como la creación de los ficheros con los mensajes del programa para su traducción, también son controladas por KDevelop y make, por lo que no debe preocuparse por ellas.  </para>

<para>Ahora ya debería tener unos conocimientos básicos sobre los fuentes, el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>, y porque el programa make es necesario. En la próxima sección, se hablará sobre como los proyectos creados con KDevelop pueden ser compilados en la mayoría de sistemas Unix gracias al fichero de comandos <literal remap="tt">configure</literal>.</para>
</sect1>

<sect1 id="configure">
<title>Configure</title>

<para>El título de esta sección puede que le lleve a preguntarse ¿configure? ¿Qué he de configurar?
Bueno, supongamos que ha escrito un programa que incluye un fichero Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>. Le gustaría distribuirlo, pero el programa compilado sólo funciona en su sistema y en aquellos que sean compatibles con él. Para que funcione en otras plataformas distintas a la suya, tales como otros sistemas Unix o máquinas Alpha o RISC, hay que recompilar el programa. La manera más fácil sería copiar los ficheros fuente y ejecutar make <indexterm remap="idx"><primary>make</primary></indexterm> en la otra máquina. Pero, ¿que pasa si la otra máquina utiliza otro compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>? (o tiene algún otro problema al compilar el programa). Eso sin pensar en que los directorios de instalación del programa y su documentación pueden ser distintos. Ejemplo: los programas KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> puede que en su máquina se instalen en <literal remap="tt"></literal>opt/kde/, pero en otra máquina puede que estén instalados en <literal remap="tt"></literal>usr/local/kde/ o en otro sitio. En este caso, tendría que modificar el fichero Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm> cada vez, para asegurar la correcta compilación e instalación de su producto.</para>

<para>Afortunadamente, las herramientas GNU no sólo le proporcionan el mítico <literal remap="tt">make</literal>, también incluyen otros dos paquetes: automake <indexterm remap="idx"><primary>automake</primary></indexterm> y autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm>. El prefijo "auto" de las utilidades puede inducirle a pensar que, por fin, algo relacionado con el diseño de la aplicación puede hacerse rápida y fácilmente. Pues ha acertado.</para>

<para>La tarea de Automake es, generalmente, crear un fichero <literal remap="tt">Makefile.in <indexterm remap="idx"><primary>Makefile.in</primary></indexterm></literal> desde un fichero llamado <literal remap="tt">Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm></literal>, que usted debe crear para su proyecto. Este fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> está compuesto por varias macros, que intentan reducir la complejidad de make y hacer que este fichero sea escrito más rápido y de forma más segura que el Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>..  </para>

<para>Habiendo dicho esto, ¿quién se encarga de crear finalmente el fichero Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>? Aquí es donde aparece autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm>. Autoconf necesita varios ficheros de macros para funcionar: el fichero Makefile.in <indexterm remap="idx"><primary>Makefile.in</primary></indexterm> (creado por automake), y el fichero <literal remap="tt">configure.in</literal>. Por un lado, el fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> (y por tanto el .in) contiene los macros que especifican que ficheros deben compilarse, que ficheros pertenecen al paquete, y cual será el nombre del fichero o biblioteca que se cree. Por el otro lado, el fichero configure.in contiene macros que configure utilizará para saber lo que tiene que buscar en el sistema. Por ejemplo el nombre del compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>, las bibliotecas necesarias para crear el binario, etc.</para>

<para>Por ejemplo, supongamos que desea crear una aplicación KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>. Tras escribir el código, querrá distribuir el programa entre la comunidad de usuarios, y cada usuario tendrá que compilar el binario. Lo que haría sería escribir un fichero configure.in que contenga las macros necesarias para crear una aplicación KDE. Estas macros se encargarían de comprobar que la biblioteca Qt está instalada, de buscar las cabeceras de Qt, de encontrar las bibliotecas y cabeceras de KDE, etc.</para>

<para><emphasis remap="bf">Resumen:</emphasis>  Para crear una aplicación según el estándar GNU, que se pueda transportar a distintas máquinas y sistemas Unix, necesita hacer lo siguiente:</para>

<para><orderedlist><listitem>
<para> escribir el código de su proyecto</para>
</listitem>
<listitem>
<para> escribir un fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> para cada subsirectorio, incluyendo el directorio principal del proyecto</para>
</listitem>
<listitem>
<para> crear un fichero configure.in en el directorio principal del proyecto que contenga los requerimientos del sistema</para>
</listitem>
<listitem>
<para> ejecutar automake <indexterm remap="idx"><primary>automake</primary></indexterm></para>
</listitem>
<listitem>
<para> ejecutar autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm></para>
</listitem>
</orderedlist>
</para>

<para>Y el trabajo principal está hecho. Automake crea el fichero Makefile.in <indexterm remap="idx"><primary>Makefile.in</primary></indexterm>, autoconf procesa el fichero configure.in y crea un fichero de comandos (script) llamado <literal remap="tt">configure</literal>. Cuando se ejecute ./<literal remap="tt">configure</literal>, se realizarán todas las comprobaciones que fueran necesarias, creandose un(os) fichero(s) Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm> que permitirán la ejecución del make para la creación del binario.</para>

<para>Puede que todo esto parezca un montón de trabajo para crear una aplicación pequeña, además de que hay que aprender como escribir las macros correctas. Pero el hecho de que está permitiendo la compilación del programa, en prácticamente todos los sistemas Unix, valdrá la pena tarde o temprano. Además, sólo tiene que hacer esto una vez por cada proyecto, y si el número de ficheros del mismo se incrementa, tan sólo debe añadir los nuevos ficheros a las macros.</para>

<para>Ahora, ¿hasta que punto el KDevelop te ayuda con los anteriores aspectos de la programación? Pues hasta el punto de que no será necesario que sepa nada sobre macros y ficheros de comandos. Todos los detalles al respecto se ocultan tras la interfaz gráfica, que es la que se encarga de este trabajo. Las aplicaciones se crean por tanto de una forma muy agradable (con las herramientas GNU):</para>

<para>Crea la aplicación con el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm>, únicamente tiene que elegir el tipo de aplicación que desea crear, ya sea una aplicación de terminal o un programa que utilice las bibliotecas Qt o KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>. Todo el trabajo se realiza automáticamente, y su fichero ya contendrá los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm> creados con la ayuda de las herramientas GNU.</para>

<para>Y no hay nada más. Ya está preparado para extender el código de su proyecto, tal vez con nuevas clases <indexterm remap="idx"><primary>clases</primary></indexterm>, diálogos, traducciones o documentación, todo esto también automatizado. Tan sólo tiene que concentrarse en el verdadero trabajo del desarrollador, que es hacer que aplicación que desea crear sea util. En la mayoría de los casos, lo más probable es que no llegue a tocar los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm> mientras trabaje con KDevelop.</para>
</sect1>

<sect1 id="depuracin">
<title>Depuración</title>

<para>La siguiente sección trata sobre un término usado comúnmente por los desarrolladores: el depurado. La depuración de un programa consiste en asegurarse de que el programa no fallará ni se colgará durante la ejecución, debido a algún fallo en el código. Como nota curiosa, mencionaremos que a este tipo de fallos también se les suele llamar con el anglicismo bug (bicho). Esto es debido a que en los primeros ordenadores, los primeros errores que se produjeron fueron debidos a que había bichos dentro de ellos, que estropeaban los circuitos. Obviamente, hoy en día esto es sólo una anécdota y los fallos se encuentran, como ya hemos dicho, en el código. En las herramientas GNU, encontramos el depurador de GNU, el <literal remap="tt">gdb</literal>. Este programa permite inspeccionar los valores internos de una aplicación en ejecución, además de permitir que esta se ejecute paso a paso, mediante la introducción de puntos de interrupción en el código. Gdb para la ejecución del programa cada vez que este llega a un punto de interrupción. Como en el resto de herramientas, el depurador puede ser manejado desde otro programa que sirva de interfaz de usuario, facilitando la inspección de variables y la distribución de puntos de interrupción. </para>

<para>Para este propósito, la aplicación de su proyecto se crea, por defecto, con la opción de depurado del compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>, que hace que se guarden datos adicionales junto al ejecutable, para poder localizar valores y líneas dentro del código. KDevelop utiliza el programa KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, que es una interfaz de usuario para el gdb. Para depurar su programa, tan sólo tiene que seleccionar "Depurar" en el menú "Construir", o pulsar el botón correspondiente en la barra de herramientas, que es el que tiene dibujados un engranaje con gafas, representando que desea observar la ejecución de la aplicación.</para>

<para>KDevelop abre entonces la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> y lanza su aplicación con KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>. La interfaz de KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm> aparecerá dentro de la ventana, permitiendo el uso del programa como si hubiera sido ejecutado desde el exterior.</para>

<para>En general, los pasos descritos arriba intentan mostrar, claramente, lo que un desarrollador tiene que hacer al comenzar a escribir su propia aplicación, tratando temas que son comunes a todo los proyectos. Además, se ha explicado la parte de estos que KDevelop realiza y como intenta proveer una forma fácil de programar en Unix. Si desea obtener más información sobre el papel y la razón de ser de las herramientas GNU, debería leer la documentación que se entrega con ellas, normalmente accesible desde la sección "System GNU Info contents" en la ayuda de KDE.</para>
</sect1>
</chapter>

<chapter id="desarrollo-con-kdevelop">
<title>Desarrollo con KDevelop</title>

<para>En este capítulo obtendrá una visión general sobre como utilizar KDevelop y el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> interno para crear sus propias aplicaciones. Esto implica que todas las herramientas serán descritas en función de su uso en el proceso de desarrollo. Si es un principiante en el diseño y programación de aplicaciones C++ con interfaz de usuario, debería leer el <ulink url="programming/index.html">Manual de programación de KDevelop</ulink>, que describe algunas cosas básicas para el diseño de programas y muestra el uso, de forma más detallada, de KDevelop, con proyectos de ejemplo que puede seguir paso a paso para acostumbrarse a la forma en que se crean aplicaciones con KDevelop. Además, debería haber leído el capítulo <link linkend="Programas">Programas</link>, para tener un conocimiento general sobre el por qué las aplicaciones Unix deben utilizar algunas de las herramientas de desarrollo incluidas; esto le ayudará a que las cosas estén más claras cuando se referencia a los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>, etc. </para>

<sect1 id="qu-son-los-proyectos-de-kdevelop">
<title>¿Qué son los proyectos de KDevelop?</title>

<para>Los proyectos creados con KDevelop intentan facilitar el uso de las herramientas GNU a los desarrolladores. Los proyectos de KDevelop se encargan de la creación de los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>, evitando tener que crearlos a mano, además facilitan el transporte de los programas a plataformas diferentes gracias a la creación de ficheros configure con autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm>.</para>

<para>Al distribuir su aplicación, lo único que el usuario final debe tener para compilar el programa es un compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> de C++ y las bibliotecas de desarrollo necesarias, que suelen estar instaladas; por supuesto, también se puede distribuir un paquete con la aplicación ya compilada. En cualquier caso, no hace falta que el usuario final tenga instalado el KDevelop. A la hora de distribuir los ficheros fuente, le recomendamos que incluya el fichero de proyecto de KDevelop, ya que facilitará que otros usuarios de KDevelop puedan trabajar con sus fuentes.
La distribución de este fichero se hace necesaria para proyectos que se realicen por varios desarrolladores, tal vez trabajando desde lugares distintos, ya que de esta forma asegurará la consistencia del fichero Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>, evitando problemas. Permitirá además que, en aplicaciones multilíngüe, los traductores no tengan que trabajar con el código, salvo en los casos que halla que modificarlo para permitir su traducción. En cualquier caso, éstos agradecerán las opciones de KDevelop a la hora de añadir un nuevo idioma, permitiendo que el trabajo se reduzca a la traducción.</para>

<para>Cuando utilice KDevelop para sus propios proyecto, normalmente empezará creando una nueva aplicación con el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm>. Desde ahí puede elegir el tipo de proyecto que se corresponde con el tipo de aplicación que desea crear. Tras esto, puede empezar a desarrollar la interfaz de usuario, añadiendo controles <indexterm remap="idx"><primary>controles</primary></indexterm> que ya estén construidos en las bibliotecas y sólo tienen que ser llamados desde la aplicación, o construyendo nuevos en el editor de diálogos. A continuación va la ampliación de la interfaz de usuario, cambiando y extendiendo las partes que KDevelop ya haya añadido, como las barras de estado, de menús, y de herramientas. Como los recursos están agrupados en ficheros de recursos, se pueden extender sencillamente añadiendo nuevos valores a los existentes; los recursos generados por KDevelop pueden utilizarse como referencia a la hora de crear nuevos. Tras implementar los métodos que el editor de diálogos creo vacios, o los que contienen código para acciones estándar, debería extender el manual de usuario editando el fichero SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> incluido, para describir las características de la aplicación. El último paso sería generar los ficheros de traducción y distribuir el proyecto entre los traductores.</para>

<para>KDevelop facilita la creación de nuevos proyectos incluso cuando la aplicación no tiene interfaz de usuario <indexterm remap="idx"><primary>interfaz de usuario</primary></indexterm>. El editor y el navegador de clases, junto con las facilidades para gestionar el proyecto que proporciona KDevelop, le ayudarán a reducir el tiempo de desarrollo al mínimo necesario para implementar <indexterm remap="idx"><primary>implementar</primary></indexterm> su funcionalidad.</para>
</sect1>

<sect1 id="breve-descripcin-de-las-herramientas-herrami">
<title>Breve descripción de las herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> de KDevelop</title>

<para>Con KDevelop ha elegido un paquete que, junto con otras herramientas, le ofrecerá un entorno bajo sistemas Unix flexible y adecuado para el desarrollo de aplicaciones orientadas a objetos. KDevelop está compuesto básicamente por el entorno de programación y por el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm>; el resto de programas que pueden ser útiles al diseñar una aplicación también están incluidos, de una forma u otra.</para>

<sect2 id="el-entorno-de-programacin-y-el-editor-de-dil">
<title>El entorno de programación y el editor de diálogos</title>

<sect3 id="el-entorno-de-programacin">
<title>El entorno de programación</title>

<para>El entorno de programación es la interfaz de usuario que KDevelop ofrece para crear y mantener proyectos, utilizando implícitamente otras herramientas para simplificar su uso. El editor incorporado, junto con los navegadores de documentación y de clases, reduce la cantidad de trabajo que el programador ha de realizar durante el proceso de desarrollo. La facilidad de uso del programa hace que proceso de escribir aplicaciones para Unix sea agradable, y ayudará probablemente a reducir los ciclos de desarrollo y a mejoras en el desarrollo. Desde el entorno, podrá controlar todos los detalles de su proyecto, tendrá una visión general de sus clases <indexterm remap="idx"><primary>clases</primary></indexterm> y se le hará innecesario utilizar la consola para su trabajo. Además, la integración de todas las interfaces de usuario hace que usted sólo tenga que trabajar en una ventana, evitando tener que controlar un montón de ventanas repartidas por el escritorio.</para>
</sect3>

<sect3 id="el-editor-de-dilogos">
<title>El editor de diálogos</title>

<para>El editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> incorporado en KDevelop ofrece una manera fácil de diseñar interfaces de usuario que utilicen las bibliotecas Qt o KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>. Su funcionamiento le permite realizar casi todas las acciones con el ratón, lo que facilita una mayor rapidez a la hora de construir diálogos y ventanas para su aplicación, que serán transformados en código C++ para ser añadidos al proyecto. Como el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> es parte de la interfaz de usuario de KDevelop, en él tiene las mismas opciones disponibles que cuando está programando. Esto permite, por ejemplo, construir un diálogo, generar su código, y probarlo desde el programa, gracias a la disponibilidad de las opciones de make. Además puede ver los mensajes del compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> sin necesidad de volver al modo de edición. Para obtener una descripción más detallada del editor vea el capítulo <link linkend="El-editor-de-dilogos">\|\|</link>.</para>
</sect3>
</sect2>

<sect2 id="el-asistente-de-aplicaciones-asistente-de-ap">
<title>El asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> y las herramientas de clases</title>

<para>El asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> y las herramientas de clases incluidas para la creación del proyecto, y para la extensión automática del código, tienen la intención de hacer que la creación de aplicaciones sea lo más fácil y segura que sea posible, ofreciendo a aquellos con poca experiencia con Qt y KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> una buena manera de empezar a diseñar IGUs (interfaces gráficas de usuario), ya que se pueden conseguir resultados rápidamente.</para>

<sect3 id="el-asistente-de-aplicaciones-asistente-de-ap">
<title>El asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm></title>

<para>La función del asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> es ayudar a crear proyectos de aplicaciones que estén listas para ser ejecutadas, con la ayuda de las herramientas GNU estándar, además de ayudar a crear aplicaciones con interfaz de usuario, que hagan uso de las bibliotecas KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> y Qt. Mediante la introducción de una información mínima, el usuario puede empezar a trabajar en un nuevo proyecto en cuestión de segundos. Cuando vaya a crear una nueva aplicación con KDevelop lo primero que debe hacer es llamar al asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm>.</para>

<para>El asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> creará el esqueleto de la nueva aplicación, con todos los ficheros fuente en C++ necesarios para ejecutar la aplicación. Después de que le de nombre al proyecto y configure los datos necesarios, se creará su nuevo proyecto y usted tendrá una aplicación completa, con diversas funciones (en el caso de proyectos Qt y KDE), sin que tenga que escribir ni una línea de código C++. Una vez configuradas todas las opciones posibles del asistente, su aplicación ya se creará con:
<itemizedlist>
<listitem>
<para>una interfaz SDI (interfaz de un solo documento), basado en el modelo document-view-controller</para>
</listitem>
<listitem>
<para>menús y diálogos para abrir y guardar ficheros, además de diálogos de impresión</para>
</listitem>
<listitem>
<para>barras de herramientas y de estado, con completa funcionalidad</para>
</listitem>
<listitem>
<para>un sistema de ayuda, con un manual de usuario creado en SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> y con ayuda en la barra de estado</para>
</listitem>
<listitem>
<para>completa documentación de la API (interfaz de programación de la aplicación) del proyecto</para>
</listitem>
<listitem>
<para>rutina de instalación a través de make</para>
</listitem>
</itemizedlist>
</para>

<para>El asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> está disponible desde el menú Proyecto, desde la entrada "Nuevo...".</para>
</sect3>

<sect3 id="herramienta-de-clases">
<title>Herramienta de clases</title>

<para>El termino "herramienta de clases" se refiere a un grupo de utilidades, disponibles para el desarrollador, que le permiten trabajar con los fuentes del proyecto de una forma orientada a objetos. Lo que se intenta es hacer que el programador se preocupe más por las clases <indexterm remap="idx"><primary>clases</primary></indexterm> que por los ficheros, de forma que se concentre en los objetos que contiene el proyecto. KDevelop ofrece para esta tarea un generador de clases y un navegador de clases, cada uno de los cuales ofrece una gran cantidad de opciones automatizadas.</para>

<sect4 id="creando-una-nueva-clase-con-el-generador-de-">
<title>Creando una nueva clase con el generador de clases</title>

<para>Tras crear un proyecto con el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> lo siguiente que debería hacer, como desarrollador, es añadir un conjunto de clases <indexterm remap="idx"><primary>clases</primary></indexterm> adecuadas para el diseño de su aplicación. La forma habitual de hacerlo, sin KDevelop, sería crear unos nuevos ficheros de cabecera y de implementación, añadirlos manualmente al fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> correspondiente, y empezar a escribir las declaraciones <indexterm remap="idx"><primary>declaraciones</primary></indexterm> e implementaciones <indexterm remap="idx"><primary>implementaciones</primary></indexterm> las clases <indexterm remap="idx"><primary>clases</primary></indexterm>. Para simplificar el proceso, el generador de clases le permite hacer todo esto, tan sólo diciendo el nombre de la nueva clase, la clase padre, la forma de herencia, y alguna información extra, como una pequeña descripción de lo que hace, para la documentación. Además, puede cambiar el nombre de los ficheros que se crearán, si no le gustan los que pone por defecto el generador, y también puede decidir si la clase estará preparada desde el principio para soportar el mecanismo de ranuras y señales (slot/signal) de Qt.</para>

<para>El resto del trabajo se realiza automáticamente. No tiene que preocuparse del fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> ni de ningún fichero extra. Lo único que hace falta para que la clase aparezca en el proceso de compilación es invocar al programa make. Como el navegador de clases se actualiza cada vez que se añade una clase, las declaraciones <indexterm remap="idx"><primary>declaraciones</primary></indexterm> e implementaciones <indexterm remap="idx"><primary>implementaciones</primary></indexterm> están disponibles inmediatamente, para que usted pueda empezar a trabajar en extender la clase. Se puede llamar al generador de clases desde el menú Proyecto, desde la entrada "Nueva clase... <indexterm remap="idx"><primary>Nueva clase...</primary></indexterm>"</para>
</sect4>

<sect4 id="el-navegador-de-clases">
<title>El navegador de clases</title>

<para>EL navegador de clases muestra todos los objetos y funciones de su proyecto en un árbol situado a la izquierda de la ventana de edición. Un analizador de clases busca todos los métodos y clases <indexterm remap="idx"><primary>clases</primary></indexterm> disponibles en los ficheros y los muestra mediante siímbolos gráficos. Desde ellos, los menús contextuales ofrecen funciones especificas, que permiten trabajar con los ficheros centrándose en las clases <indexterm remap="idx"><primary>clases</primary></indexterm> y funciones.</para>

<para>Al seleccionar una clase se mostrará el fichero que contiene su declaración <indexterm remap="idx"><primary>declaración</primary></indexterm>; al seleccionar un método o función se mostrará su implementación <indexterm remap="idx"><primary>implementación</primary></indexterm>. Para obtener una descripción más completa, vea el capítulo <link linkend="El-navegador-de-clases">El navegador de clases</link>.</para>
</sect4>
</sect3>
</sect2>
</sect1>

<sect1 id="el-proceso-de-desarrollo">
<title>El proceso de desarrollo</title>

<para>El desarrollo de una aplicación con KDevelop puede dividirse, como norma general, en dos partes: en la primera se genera el esqueleto del programa con el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm>, la segunda consiste en el desarrollo del programa con el resto de herramientas que proporciona KDevelop y depende de la habilidad que tenga como programador. Para describir el proceso de desarrollo, hemos dado por hecho que usted desea crear una aplicación Qt o KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>, lo que significa utilizar la mayor parte de las posibilidades que KDevelop ofrece para este tipo de proyectos, para que tenga un "¿Cómo..." (o HOW-TO en inglés) general.</para>

<sect2 id="creando-el-esqueleto-del-programa">
<title>Creando el esqueleto del programa</title>

<para>Habitualmente, para empezar a crear su aplicación, lo primero que hará será llamar al asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm>, introducir el nombre del proyecto, y generar el programa. Para hacer esto, el asistente crea un fichero de proyecto para la aplicación e inserta aspectos del KDevelop en el fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> que se utilizará posteriormente al extender la aplicación. El fichero de proyecto es el que tiene que cargar cuando desee abrir el proyecto posteriormente.</para>

<para>Se accede al asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> desde el menú "Proyecto", en la entrada "Nuevo...". Cuando el asistente aparezca, tiene que elegir el tipo de proyecto en la primera página. Pulsando "Siguiente &gt;&gt;" llegará a la siguiente página, en la que tiene que introducir el nombre del proyecto, la versión, el directorio, y sus datos personales. La página 3 ofrece algunas opciones para el uso de un sistema de control de versiones, mientras que las 4 y 5 permiten editar las cabeceras de los ficheros de cabecera y de implementación <indexterm remap="idx"><primary>implementación</primary></indexterm>. Si ya tiene alguna cabecera en un fichero y desea utilizarla como plantilla, también puede hacerlo. La última página contiene las ventanas de salida <indexterm remap="idx"><primary>salida</primary></indexterm> y de errores. Cuando pulse en "Crear", su aplicación será generada, y las acciones que se realicen podrán ser observadas en la ventana de salida <indexterm remap="idx"><primary>salida</primary></indexterm>. Si en ella aparece la palabra READY, significa que el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> ha terminado y ya puede pulsar "Salir" para volver al entorno de programación. Para crear el binario, elija "Make" en el menú "Construir" o pulse el botón correspondiente en la barra de herramientas. Puede probar las funciones que ya están presentes en el programa eligiendo "Ejecutar" en el menú "Construir".</para>
</sect2>

<sect2 id="desarrollando-una-aplicacin">
<title>Desarrollando una aplicación</title>

<para>Esta sección describe la fase de desarrollo de una aplicación con KDevelop y el  editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm>, además de mostrar todo lo que se puede realizar con el EID.</para>

<para>El proceso de desarrollo se compone, habitualmente, de los siguientes pasos: se editan los ficheros fuente, se compilan y se enlazan para crear el binario final, se buscan los errores <indexterm remap="idx"><primary>errores</primary></indexterm> que hayan aparecido durante el proceso anterior o durante la depuración <indexterm remap="idx"><primary>depuración</primary></indexterm>, se añade la documentación y las traducciones. El problema es que todos estos pasos pueden acabar intercalandose entre ellos y no es fácil describir una forma general con la que crear una aplicación. Normalmente, lo más habitual es crear primero todas las partes visibles del proyecto, tales como la vista principal y los diálogos de configuración. Después se genera el código fuente y se implementan todas las conexiones que deben realizarse, como cambiar las barras de menús y de herramientas, añadir mensajes de ayuda (para los menús) a la barra de estado, y llenar las nuevas funciones miembro con los objetos que muestren los diálogos. Después se suele compilar la apliación y probar sus funciones, arreglar los errores que se encuentren, y volver a probarla. Las siguientes secciones explican como se realiza todo esto. Por supuesto, cuando realice su propia aplicación, puede que elija otra forma de hacerla. KDevelop le da suficiente facilidad para que decida que es lo que quiere hacer en cada momento.</para>

<sect3 id="interfaces-de-usuario">
<title>Interfaces de usuario</title>

<para>La interfaz de usuario es la parte de la aplicación que se le muestra al usuario, además de con la que interactúa. Por lo tanto, esta interfaz está compuesta habitualmente de las barras de menús, herramientas, y estado, además de una vista principal que sería, por ejemplo, aquella en la que se introduce texto, en un editor. El asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> puede crear aplicaciones que ya contengan la mayor parte de la estructura de la interfaz de usuario, incluyendo menús y botones. Cuando desarrolle sus propias aplicaciones tendrá que ampliar la estructura, para darle a la aplicacion todas las posibilidades de interacción que usted desee. Parte del trabajo consiste en diseñar diálogos, por ejemplo para cambiar el tamaño de una brocha en un programa de dibujo. Esto puede realizarse fácilmente con el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> incorporado. Ahora, ¿como crear diálogos que sean agradables a la vista? La respuesta está en la biblioteca Qt <indexterm remap="idx"><primary>biblioteca Qt</primary></indexterm>, que es en realidad una herramienta para crear interfaces de usuario (IGU). Para ello ofrece un conjunto base de controles <indexterm remap="idx"><primary>controles</primary></indexterm>, como etiquetas para mostrar texto, campos de texto para la entrada de texto, botones... Además de estos objetos de "bajo nivel" (respecto a la IGU), también ofrece diálogos estándar listos para usar, por ejemplo diálogos de impresión <indexterm remap="idx"><primary>impresión</primary></indexterm>. Las bibliotecas KDE <indexterm remap="idx"><primary>bibliotecas KDE</primary></indexterm> están basadas en la biblioteca Qt y contienen sustitutos para algunos de los diálogos, además de controles <indexterm remap="idx"><primary>controles</primary></indexterm> adicionales que pueden ser utilizados en su aplicación. Todo esto significa que, cuando empiece a diseñar el comportamiento de su aplicación de cara al usuario, debería familiarizarse con los controles que tanto Qt como KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> ofrecen. La documentación en línea de la biblioteca Qt ofrece imágenes de la mayoría de ellos, por lo que le recomendamos que le eche un vistazo en cuanto pueda. Después, le recomendamos que se informe sobre la biblioteca KDE-UI, que ofrece controles <indexterm remap="idx"><primary>controles</primary></indexterm> adicionales. Otras bibliotecas como la KHTML <indexterm remap="idx"><primary>HTML</primary></indexterm> ofrecen controles <indexterm remap="idx"><primary>controles</primary></indexterm> muy especializados, que son usados por muchos programas. Su función es simplificar el diseño de aplicaciones, al igual que los diálogos predefinidos que vienen con la biblioteca Qt. Cuando diseñe sus propios diálogos, le recomendamos que utilice estos controles especializados. Un diálogo está formado, básicamente, por un grupo de controles <indexterm remap="idx"><primary>controles</primary></indexterm> combinados para crear la interfaz, siendo programado en código C++ dentro de una clase que deriva de <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> o de una clase de diálogo más especializada, que a su vez es derivada de <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal>. Esto significa que el programa que utilice el control necesita un objeto de la clase de dicho objeto. Con esto se acaba prácticamente todo lo que necesita para entender como se utilizan los diálogos o vistas.
El editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> de KDevelop permite construir diálogos e interfaces de usuario de forma visual, evitando que tenga que crear los diálogos en C++ directamente (que es la forma difícil de crear interfaces). Salte al editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> eligiendo la entrada correspondiente del menú "Ver" (o pulsando en el botón de la barra de herramientas). Verá que la apariencia del KDevelop ha variado pero que, por ejemplo, las barras de menús y herramientas son muy similares. Esto facilita el cambio entre los dos modos de trabajo, y hará que se sienta comfortable en los dos en poco tiempo. Desde el editor puede construir sus vistas y diálogos como desee, y modificar las propiedades de todos los elementos que utilice. Cuando termine, seleccione "Generar fuentes..." desde el menú "Construir"; el programa se encargará del resto. Puede comprobar si todo fue bien pulsando en "Ejecutar make" o "Ejecutar", para construir la aplicación con los nuevos ficheros fuente. Pero no espere que los diálogos estén disponibles desde el principio. Se requiere algo de programación primero, pero no se preocupe, no será muy difícil. Si desea más información sobre la creación de diálogos, vea el capítulo <link linkend="El-editor-de-dilogos">El editor de diálogos</link>, también podrá encontrar ejemplos y guías de estilo en <ulink url="programming/index-6.html">el manual de programación</ulink>.</para>
</sect3>

<sect3 id="incluir-nuevos-elementos">
<title>Incluir nuevos elementos</title>

<para>Tras haber creado la interfaz de usuario y haber generado sus ficheros fuente, está preparado para que su aplicación utilice estos nuevos elementos. Como se ha descrito arriba, una aplicación basada en IGU <indexterm remap="idx"><primary>IGU</primary></indexterm> contiene barras y una vista principal; además la vista principal interacciona con las barras, que son parte de la clase principal de la aplicación, y con el objeto documento que esté abierto. Usando el lenguaje del diseño orientado a objetos, la arquitectura usada se podría definir como un modelo "Documento-Vista-Controlador". Este modelo describe las funciones básicas de los objetos de una aplicación dependiendo de su papel dentro del programa.  El Controlador representa al coordinador de la aplicación principal, ofreciendo la interacción con el usuario a través de la barra de menús y, opcionalmente, de las barras de herramientas y de estado. La clase Documento se encarga de la tarea de mostrar el documento con el que el usuario está trabajando. Esto implica que la clase Documento debe ser la encargada de realizar las acciones del tipo cargar/guardar documentos. La Vista es el centro de la ventana de la aplicación, mostrando visualmente al usuario una parte del documento y ofreciéndole facilidades para manipular los datos. Como las barras de herramientas, menús y estado ya están creadas, su trabajo consistirá en crear la vista principal y los diálogos adicionales con los que el usuario pueda configurar cualquier opción, o acceder a funciones adicionales. </para>

<para>Para construir su vista principal, el código generado para su aplicación ya contiene una clase llamada &&lt;;SuAplicación&&gt;;View, que hereda de la clase <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> (esta clase es la clase mínima necesaria para manejar interfaces gráficas en aplicaciones Qt, y por tanto también en aplicaciones KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>). En general, hay tres formas de ampliar la clase dada:
<itemizedlist>
<listitem>
<para>eliminando la estructura de vista de documentos y utilizando uno de los controles <indexterm remap="idx"><primary>controles</primary></indexterm> "grandes" incluidos, que ya contienen una gran número de funciones. Tan sólo tiene que eliminar la clase View y reemplazar el objeto view por otro.</para>
</listitem>
<listitem>
<para>cambiando la herencia de la clase View. Cambie la herencia, por ejemplo, a la clase QMultiLineEdit y su aplicación será un editor.</para>
</listitem>
<listitem>
<para>si su vista principal consiste de distintas partes, cree los controles <indexterm remap="idx"><primary>controles</primary></indexterm> y sus clases <indexterm remap="idx"><primary>clases</primary></indexterm> con el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm>, y cree los objetos de estas clases <indexterm remap="idx"><primary>clases</primary></indexterm> en los constructores de la clase View, al combinarse crearán la vista principal.</para>
</listitem>
</itemizedlist>
</para>

<para>Con los diálogos, el proceso es algo diferente. La forma normal de llamar a un diálogo sería a través de una entrada de menú, o de un icono de la barra de herramientas. Tras haber construido el diálogo y haber generado los fuentes, la clase está disponible para crear un objeto que será el diálogo. Lo primero que hay que hacer es buscar un lugar apropiado en el menú en que añadir la entrada que, al ser seleccionada, mostrará el diálogo. Si los menús existentes no se corresponden con la función del diálogo, cree un nuevo menú, igual que el resto, y añada la entrada y la ranura a la que llamar cuando se seleccione el elemento. Entonces implemente la ranura, creando una instancia de la clase diálogo y llamando al diálogo con las funciones miembro <indexterm remap="idx"><primary>funciones miembro</primary></indexterm> proporcionadas por la clase base. También debe proporcionar un identificador a la entrada de menú. La aplicación princpial tiene listados todos los identificadores ya utilizados en el fichero resource.h, por lo que lo único que tiene que hacer es añadir el identificador y darle un nuevo número. Con esto ya se ha acabado, aunque también podría añadir otro icono a la barra de herramientas, y añadir un mensaje de ayuda para la barra de estado. En cualquier caso, su aplicación ofrece ahora una nueva opción al usuario. Lo único que hay que hacer ahora es añadir la implementación <indexterm remap="idx"><primary>implementación</primary></indexterm> de los metodos que utilizará el diálogo. Para acabar, llame a la herramienta make, o ejecute la aplicación, y los ficheros modificados serán recompilados; el resultado de los cambios podra ser entonces comprobado rápidamente. </para>
</sect3>

<sect3 id="el-proceso-completo-de-desarrollo">
<title>El proceso completo de desarrollo</title>

<para>Arriba se ha hablado de la manera habitual de comenzar a trabajar en una nueva aplicación, usando KDevelop, y de como ampliar la interfaz de usuario. Estos son los pasos más habituales en los que el EID le ayuda, pero KDevelop no sólo ofrece herramientas para crear aplicaciones e interfaces. A continuación, se dará una pequeña descripción de las principales facilidades que KDevelop ofrece para mejorar el desarrollo de aplicaciones. </para>

<sect4 id="administracin-del-cdigo">
<title>Administración del código</title>

<para>KDevelop ofrece una gran cantidad de opciones para que el programador alcance su meta en el menor tiempo posible. Como se ha descrito arriba, el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> y el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> reducen la cantidad de tiempo que se necesitaría para conseguir el mismo resultado manualmente. Pero no se ha hablado de la principal tarea del programador: implementar <indexterm remap="idx"><primary>implementar</primary></indexterm> el correcto funcionamiento de la aplicación. La pregunta es, ¿por qué utilizar KDevelop como entorno de desarrollo, incluso para crear aplicaciones sin IGU <indexterm remap="idx"><primary>IGU</primary></indexterm>?</para>

<para>Implicitamente, el EID se encarga de controlar su proyecto; esto es: no tiene que preocuparse de guardar los cambios, de generar el fichero Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>, etc. Se está proporcionando una completa administración del proyecto, siendo aquídonde KDevelop ofrece todas sus posibilidades, en cualquier tipo de desarrollo en C++. Es fácil entender que, al hacer que el programador se olvide de la administración del proyecto, se consigue una mayor concentración en la programación del código. Por otro lado, el código suele estar distribuido en diversos ficheros a lo largo del proyecto, para separar ciertas partes. Normalmente, esto significaría que el desarrollador tendría que encargarse de crear cada uno de estos ficheros, y de insertar las líneas que todos ellos suelen llevar como norma general, como las cabeceras con la fecha y el nombre del autor, la licencia con que se distribuye el código, etc. Además, esto implicaría que el desarrollador se acordara, en todo momento, de en que ficheros se encuentra cada función, declaración e implementación de cada clase. Para evitar todo esto, KDevelop contiene la herramienta de clases, que proporciona una serie de acciones que facilitan el trabajo del desarrollador y permiten que se centre en los objetos, clases <indexterm remap="idx"><primary>clases</primary></indexterm>, estructuras y métodos que contiene la aplicación, en lugar de en sus ficheros. El generador de clases le permite crear una nueva clase, pudiendo especificar su documentación, sus atributos y si posee algún tipo de herencia. En lo que al trabajo orientado a objetos se refiere, el navegador de clases le posibilita localizar sus objetos; no importa en que parte del código estén. El navegador recorre todos los fuentes y se actualiza para mostrar información actualizada sobre los objetos, permitiéndole acceder a cualquier nuevo código directamente. Mediante los menús contextuales, el navegador le ofrece aún más posibilidades, como mostrar la implementación <indexterm remap="idx"><primary>implementación</primary></indexterm> de la clase o la declaración <indexterm remap="idx"><primary>declaración</primary></indexterm> de sus funciones miembro <indexterm remap="idx"><primary>funciones miembro</primary></indexterm>. Con esto, la adición de miembros se hace mediante diálogos, no hace falta buscar el fichero y la línea en la que se ha de introducir el código. Por último, puede obtener una visión más directa de las clases de su proyecto con la ayuda del diálogo de clases <indexterm remap="idx"><primary>clases</primary></indexterm>, que le muestra un árbol en el que se puede ver el uso, los contenidos y la herencia de las clases <indexterm remap="idx"><primary>clases</primary></indexterm> y sus objetos. Para obtener una información más detallada, vea el apartado sobre <link linkend="El-navegador-de-clases">el navegador de clases</link>.</para>
</sect4>

<sect4 id="construyendo-y-ejecutando-su-aplicacin">
<title>Construyendo y ejecutando su aplicación</title>

<para>KDevelop está diseñado para eliminar todos esos pasos que se deben realizar periódicamente, tales como la construcción y ejecución de su programa, además de la localización de errores <indexterm remap="idx"><primary>errores</primary></indexterm> en el código fuente.</para>

<para>Puede comenzar el proceso de construcción:
<itemizedlist>
<listitem>
<para>pulsando en los botones "Construir" o "Reconstruir todo" de la barra de herramientas</para>
</listitem>
<listitem>
<para>o seleccionando "Construir"/"Reconstruir todo" desde el menú Construir.</para>
</listitem>
</itemizedlist>
</para>

<para>Para ejecutar su aplicación, elija:
<itemizedlist>
<listitem>
<para>los botones "Ejecutar" o "Depurar" (que abrirá el depurador junto a su programa) de la barra de herramientas</para>
</listitem>
<listitem>
<para>las entradas de menú correspondientes del menú Construir</para>
</listitem>
<listitem>
<para>o seleccione "Ejecutar con argumentos" para lanzar su aplicación pasándole argumentos adicionales.</para>
</listitem>
</itemizedlist>

Para obtener más información sobre el proceso de construcción, vea el apartado <link linkend="Proyectos">Proyectos</link>.</para>
</sect4>

<sect4 id="buscando-errores-en-el-programa">
<title>Buscando errores en el programa</title>

<para>Como la aparición de errores <indexterm remap="idx"><primary>errores</primary></indexterm> es habitual, tanto durante el proceso de construcción (en el que son detectados por el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> y en el que son llamados errores <indexterm remap="idx"><primary>errores</primary></indexterm> sintácticos, porque son resultado de errores de sintaxis en los fuentes) como durante la ejecución de la aplicación, estos errores tienen que ser detectados y eliminados por el programador. Para encontrar estos errores <indexterm remap="idx"><primary>errores</primary></indexterm>, el desarrollador necesita saber la razón exacta de su existencia. Como se ha mencionado, el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> es capaz de detectar errores <indexterm remap="idx"><primary>errores</primary></indexterm> de sintaxis el solo, dando como resultado que el ejecutable no se cree (esto también puede pasar en enlazado, cuando el enlazador <indexterm remap="idx"><primary>enlazador</primary></indexterm> detecta "símbolos sin resolver"-vea <link linkend="Opciones-de-enlazado">Opciones de enlazado</link>). Como se da una descripción del error lo más detallada posible, el error puede ser encontrado y eliminado. Durante el proceso de construcción, verá que aparece la ventana de salida <indexterm remap="idx"><primary>salida</primary></indexterm> mostrando los mensajes de la herramienta make y del compilador. En caso de que aparezcan errores <indexterm remap="idx"><primary>errores</primary></indexterm> o avisos <indexterm remap="idx"><primary>avisos</primary></indexterm>, tan sólo pulse con el ratón sobre el mensaje de error y el editor mostrará el fichero afectado y moverá el cursor a la línea que contiene el error. Esto también puede ser realizarse desde las entradas del menú "Ver" "Siguiente error" y "Anterior error" o mediante sus atajos <indexterm remap="idx"><primary>atajos</primary></indexterm> de teclado. Encontrará que estas funciones son muy útilas y ahorran mucho tiempo en ir a los errores, lo cual le dará más tiempo para solucionarlos.</para>

<para>Los errores en tiempo de ejecución, que ocurren durante la ejecución de la aplicación y suelen resultar en un dallo de segmentación, suelen ser más difíciles de encontrar. Para encontrarlos más fácilmente, puede decirle al compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> que añada información dentro del binario que permita observar su ejecución con el código fuente.  
Runtime Errors, which occur during execution and will mostly result in a segmentation fault, are sometimes hard to find. Un depurador es otro programa que le permite hacer esto, lanzando la aplicación y permitiéndole poner puntos de interrupción en el código para que la ejecución del mismo se detenga en ellos, de forma que pueda controlar las zonas críticas <indexterm remap="idx"><primary>críticas</primary></indexterm> de la implementación y encontrar al menos de esta forma la línea que provocó el error. Encontrar la causa del error es una tarea que ya depende del programador. El depurador <emphasis remap="bf">gdb</emphasis> viene con el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm> GNU y los programas del tipo <emphasis>ddd</emphasis> o <emphasis>KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm></emphasis> son interfaces de usuario para facilitar su uso. KDevelop utiliza el KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm> y le permite comenzar el proceso de depurado <indexterm remap="idx"><primary>depurado</primary></indexterm> desde la entrada "Inicio" del menú "Depurar" o desde el botón "Depurar" de la barra de herramientas. Para obtener más información sobre aplicaciones de depurado, vea el capítulo <link linkend="Proyectos">Proyectos</link> y <ulink url="programming/index-12.html">el manual de programación de KDevelop</ulink>.</para>
</sect4>
</sect3>
</sect2>
</sect1>

<sect1 id="informacin-adicional">
<title>Información adicional</title>

<para>Los temas de los que se ha hablado en este capítulo son tratados con más detalle dentro de la documentación incluida con KDevelop, además de en otras documentaciones:</para>

<para><itemizedlist>
<listitem>
<para><ulink url="programming/index.html">El manual de programación de KDevelop</ulink>, que incluye una completa introducción al diseño de la interfaz de usuario de aplicaciones, y a la programación con las bibliotecas Qt y KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>,</para>
</listitem>
<listitem>
<para>este manual, en las secciones desde <link linkend="Descripcin-general">Descripción general</link> hasta <link linkend="Proyectos">Proyectos</link>, donde se descubren todas las funciones disponibles con KDevelop,</para>
</listitem>
<listitem>
<para>este manual, en la sección <link linkend="El-editor-de-dilogos">El editor de diálogos</link>, donde se trata el uso del editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> para la creación de sus propios controles <indexterm remap="idx"><primary>controles</primary></indexterm>,</para>
</listitem>
<listitem>
<para>la <emphasis>guía de referencia <indexterm remap="idx"><primary>referencia</primary></indexterm> en línea</emphasis> de la biblioteca Qt <indexterm remap="idx"><primary>biblioteca Qt</primary></indexterm>, que contiene ejemplos de uso de la biblioteca Qt para crear interfaces de usuario, además de una guía de referencia de las clases, y de capturas de pantalla mostrando los controles <indexterm remap="idx"><primary>controles</primary></indexterm> más importantes incluidos en la biblioteca,</para>
</listitem>
<listitem>
<para>la <emphasis>guía de referencia <indexterm remap="idx"><primary>referencia</primary></indexterm> de las clases de KDE</emphasis>, generada automáticamente por KDevelop desde los fuentes de la biblioteca KDE, que contiene descripciones de todas las clases <indexterm remap="idx"><primary>clases</primary></indexterm> y controles <indexterm remap="idx"><primary>controles</primary></indexterm>, además de código de ejemplo mostrando su uso,</para>
</listitem>
<listitem>
<para>en Internet, vea:
<itemizedlist>
<listitem>
<para><ulink url="http://www.troll.no">\|\|</ulink> para encontrar información sobre los controles Qt y sobre controles adicionales de otros desarrolladores,</para>
</listitem>
<listitem>
<para><ulink url="http://www.kde.org">\|\|</ulink> para obtener información sobre el proyecto KDE y sobre las guías de estilo para el desarrollo,</para>
</listitem>
<listitem>
<para><ulink url="http://developer.kde.org">\|\|</ulink> para ver referencias adicionales sobre el desarrollo de aplicaciones KDE,</para>
</listitem>
<listitem>
<para>y la página web de KDevelop <ulink url="http://www.kdevelop.org">\|\|</ulink></para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</sect1>
</chapter>

<chapter id="descripcin-general">
<title>Descripción general</title>

<para>Mirando al KDevelop, la interfaz de usuario puede describirse en función de sus partes lógicas: la ventana principal, la vista de árbol y la ventana de salida <indexterm remap="idx"><primary>salida</primary></indexterm>, todo ello rodeado por las barras de menú, de herramientas y de estado. Esté capítulo describe la razón de ser de cada parte de la interfaz, comenzando por las ventanas y acabando en las barras y las posibilidades que ofrecen.</para>

<sect1 id="ventana-principal">
<title>Ventana principal</title>

<para>La ventana principal está compuesta por cuatro tabuladores, de los cuales los dos primeros se utilizan para la edición. Primero aparece la ventana de ficheros de cabecera/recursos, para editar los las cabeceras y otros ficheros de texto, tales como la documentación en SGML <indexterm remap="idx"><primary>SGML</primary></indexterm>, después aparece la ventana de C/C++ para la edición del código fuente. A éstas les sigue la ventana de documentación, que se muestra en formato HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>. Por último viene la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm>, para el uso de programas externos como KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> y KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, que son incrustados en la ventana. Cualquier herramienta que esté registrada es accesible desde el menú Herramientas <indexterm remap="idx"><primary>Herramientas</primary></indexterm>, siendo posible registrar programas externos desde un diálogo de configuración <indexterm remap="idx"><primary>diálogo de configuración</primary></indexterm> (vea <link linkend="Configuracin-general">Configuración general</link>). Para obtener una descripción de las posibilidades de las ventanas del editor, vea el capítulo <link linkend="Trabajando-con-el-editor">Trabajando con el editor</link>, y para hallar información sobre el navegador de documentación <indexterm remap="idx"><primary>navegador de documentación</primary></indexterm>, vea el apartado <link linkend="Utilizando-el-navegador-de-documentacin">Utilizando el navegador de documentación</link>.</para>
</sect1>

<sect1 id="el-navegador-de-clases-y-los-visores-de-fich">
<title>El navegador de clases y los visores de ficheros</title>

<sect2 id="el-visor-de-clases-visor-de-clases">
<title>El visor de clases <indexterm remap="idx"><primary>visor de clases</primary></indexterm></title>

<para>El visor de clases <indexterm remap="idx"><primary>visor de clases</primary></indexterm> (VC <indexterm remap="idx"><primary>VC</primary></indexterm>) muestra las clases <indexterm remap="idx"><primary>clases</primary></indexterm> de su proyecto, además de las funciones y variables <indexterm remap="idx"><primary>variables</primary></indexterm> globales. El abrir el árbol le mostrará todas las funciones miembro <indexterm remap="idx"><primary>funciones miembro</primary></indexterm> y los miembros, junto a un icono que indica sus atributos <indexterm remap="idx"><primary>atributos</primary></indexterm> (privada, protegida, pública, ranuras y señales), para que pueda ver visualmente las propiedades de los miembros, sin necesidad de abrir los ficheros de cabecera. El seleccionar el nombre de una clase abrirá el fichero de cabecera que contiene la clase y colocará el cursor al comienzo de la declaración <indexterm remap="idx"><primary>declaración</primary></indexterm> de la clase. El seleccionar funciones miembro <indexterm remap="idx"><primary>funciones miembro</primary></indexterm> abrirá el fichero de implementación <indexterm remap="idx"><primary>implementación</primary></indexterm> y situará el cursor sobre la cabecera de la función. En el caso de los elementos, KDevelop buscará en el fichero de cabecera y posicionará el cursor en la línea en que se declara el elemento. El visor de clases <indexterm remap="idx"><primary>visor de clases</primary></indexterm> también ofrece menús contextuales que ofrecen opciones más específicas, vea el capítulo <link linkend="El-navegador-de-clases">El navegador de clases</link> para obtener más información.</para>
</sect2>

<sect2 id="el-visor-lgico-de-ficheros">
<title>El visor lógico de ficheros</title>

<para>El visor lógico de ficheros (VLF <indexterm remap="idx"><primary>VLF</primary></indexterm>) le permite ver los ficheros ordenados por grupos. Se pueden añadir nuevos grupos pulsando con el botón derecho en los elementos del árbol. Esto buscar ficheros de forma más directa, mostrandose inicialmente sólo los ficheros incluidos en el proyecto. Los ficheros, al seleccionarse, serán abiertos conforme a su tipo Mime. Por ejemplo, le gustará que al elegir un gráfico <indexterm remap="idx"><primary>gráfico</primary></indexterm> en el VLF <indexterm remap="idx"><primary>VLF</primary></indexterm> se abrá KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> (si está instalado) en la ventana de herramientas, con el dibujo seleccionado abierto.</para>
</sect2>

<sect2 id="el-visor-real-de-ficheros">
<title>El visor real de ficheros</title>

<para>El visor real de ficheros (VRF <indexterm remap="idx"><primary>VRF</primary></indexterm>) muestra el árbol de directorios del proyecto con todos los ficheros, para que pueda editar ficheros que no sean del proyecto <indexterm remap="idx"><primary>proyecto</primary></indexterm>, o ficheros ocultados por el VLF <indexterm remap="idx"><primary>VLF</primary></indexterm> como configure.in y los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>. Desde el menú contextual puede realizar acciones como la eliminación o adición de ficheros al proyecto abierto.</para>
</sect2>

<sect2 id="el-rbol-de-documentacin">
<title>El árbol de documentación</title>

<para>El árbol de documentación (DOC <indexterm remap="idx"><primary>DOC</primary></indexterm>) muestra toda la documentación HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> disponible que esté configurada como libro. El seleccionar un libro hará que se muestre la primera página en la ventana del navegador. Además, el menú contextual ofrece opciones de configuración personal, para añadir más paquetes de documentación en HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>.</para>
</sect2>
</sect1>

<sect1 id="la-ventana-de-salida">
<title>La ventana de salida</title>

<para>La ventana de salida está separada a su vez en una ventana de mensajes, una ventana de entrada/salida por defecto, y una de salida de errores, con el siguiente propósito:
<itemizedlist>
<listitem>
<para> ventana de mensajes: muestra los mensajes de salida <indexterm remap="idx"><primary>salida</primary></indexterm> del compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>. Si pulsa en un mensaje de error, la ventana de edición moverá el cursor a la línea en que se encontró el error.</para>
</listitem>
<listitem>
<para> salida estándar: muestra la salida de las aplicaciones basadas en terminal que  mensajes a la salida estándar <indexterm remap="idx"><primary>estándar</primary></indexterm> del ordenador. Nota: las aplicaciones de terminal ahora se lanzan en una ventana de consola externa.</para>
</listitem>
<listitem>
<para> salida de errores: muestra todos los mensajes de error que su programa produce. Es útil para realizar pruebas. La ventana de salida está programada para aparecer cada vez que se llama a un proceso externo, como make o una aplicación de terminal.</para>
</listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="opciones-de-la-barra-de-mens-barra-de-mens">
<title>Opciones de la barra de menús <indexterm remap="idx"><primary>barra de menús</primary></indexterm></title>

<sect2 id="manejo-de-ficheros-e-impresin">
<title>Manejo de ficheros e impresión</title>

<para>Esta sección trata las funciones que KDevelop ofrece para el manejo de ficheros; se puede acceder a ellas desde el menú Archivo o desde los iconos correspondientes en la barra de herramientas:
<indexterm><primary>Menú "Archivo"</primary></indexterm>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Nuevo			Ctrl+N</emphasis> Abre el diálogo de "Nuevo fichero <indexterm remap="idx"><primary>Nuevo fichero</primary></indexterm>", permitiendo crear un nuevo fichero. El fichero puede ser creado con la ayuda de diversos patrones. Hace falta especificar tanto el nombre del nuevo fichero como el directorio en que se creará.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Abrir	Ctrl+O</emphasis> muestra el diálogo "Abrir fichero..." y le permite seleccionar el fichero a abrir.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Cerrar Ctrl+W</emphasis> Cierra el fichero abierto en la ventana de edición activa</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Guardar Ctrl+S</emphasis> Guarda el fichero abierto en la ventana de edición activa. Si el fichero aún no había sido guardado, se abrirá el diálogo "Guardar como..." para que elija el nombre del fichero y donde se guardará.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Guardar como...</emphasis> Abre el diálogo "Guardar como..." para permitirle guardar el fichero con un nuevo nombre</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Guardar todo</emphasis> Guarda todos los ficheros modificados</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Imprimir... Ctrl+P</emphasis> Abre el diálogo "Imprimir fichero", desde el que puede seleccionar diversas opciones de impresión, usandoa2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm>, enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> o lpr</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Salir Ctrl+Q</emphasis> Cierra KDevelop. Si se han modificado ficheros, se le preguntará si desea guardar dichos ficheros</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="editando-ficheros">
<title>Editando ficheros</title>

<para><indexterm><primary>Menú "Editar"</primary></indexterm>
Aquí, se tratan las entradas del menú "Editar" y sus iconos correspondientes de la barra de herramientas. Las funciones de edición también están disponibles a través de un menú desplegable en el editor <indexterm remap="idx"><primary>editor</primary></indexterm>. 
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Deshacer	Ctrl+Z</emphasis> Deshace el último paso de edición.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Rehacer	Ctrl+Y</emphasis> Le permite recuperar el último paso deshecho.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Cortar	Ctrl+X</emphasis> Corta una selección de texto y la copia al portapapeles del sistema.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Copiar	Ctrl+C</emphasis> Copia una selección de texto al portapapeles del sistema. También copia texto seleccionado en el navegador de documentación.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Pegar		Ctrl+V</emphasis> Inserta el contenido del portapapeles en la posición del cursor.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Indentar	Ctrl+I</emphasis> Mueve el texto seleccionado hacia la derecha.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Desindentar	Ctrl+U</emphasis> Mueve el texto seleccionado hacia la izquierda.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Insertar fichero... Ctrl+Insert</emphasis> Le permite seleccionar un fichero e insertar su contenido en la posición del cursor.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Buscar...	Ctrl+F</emphasis> Abre el diálogo de búsqueda, que le permite buscar una expresión en el fichero abierto. Para buscar en varios ficheros, utilice "Buscar en ficheros...".</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Repetir búsqueda	F3</emphasis> Repite la última búsqueda. También sirve para busquedas realizadas en la documentación, cuando la expresión se encontró más de una vez en la misma página. La siguiente ocurrencia de la expresión se mostrará al seleccionar "Repetir búsqueda" o F3, siendo resaltada.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Reemplazar...		Ctrl+R</emphasis> Abre el diálogo "Buscar y reemplazar" que le permite buscar una expresión en el texto y reemplazarlo por una nueva.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Buscar en ficheros...	Ctrl+Alt+F</emphasis> Muestra el diálogo "Buscar en ficheros...", que usando el programa <literal remap="tt">grep <indexterm remap="idx"><primary>grep</primary></indexterm></literal> busca un texto en directorios, mediante comodines. Los resultados se muestran con una lista de ficheros, línea y expresión. Seleccionando una entrada de la lista se mostrará el fichero y el cursor se situará en la línea en que se encontró la expresión</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Seleccionar todo  Ctrl+A</emphasis> Selecciona todo el texto del fichero abierto en la ventana de edición activa</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Deseleccionar todo</emphasis> Deselecciona todo el texto del fichero abierto. Se utiliza habitualmente cuando se han realizado selecciones múltiples, para no tener que ir deseleccionando individualmente cada selección.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Invertir selección</emphasis> Invierte la selección. El texto que está seleccionado deja de estarlo y el que no lo estaba pasa a estar seleccionado.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="configuracin-de-visionado">
<title>Configuración de visionado</title>

<para><indexterm><primary>Menú "Ver"</primary></indexterm>
El menú ver controla las funciones para abrir y cerrar ventanas, y ofrece comandos para habilitar/deshabilitar las barras de herramientas y de estado, además de permitir saltar a los errores <indexterm remap="idx"><primary>errores</primary></indexterm> del código.</para>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Ir a la línea...	Ctrl+G</emphasis> Abre el diálogo "Ir a la línea..." que le permite introducir el número de línea del fichero abierto que se desea ver. El último número de línea introducido es recordado y marcado, para que pueda volver a esa línea otra vez o introducir el número de una nueva línea que desea ver.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Siguiente error	F4</emphasis>Salta al siguiente error que KDevelop detecte desde la ventana de salida <indexterm remap="idx"><primary>salida</primary></indexterm>. El mensaje de salida <indexterm remap="idx"><primary>salida</primary></indexterm>, lanzado por make o otra herramienta, debería darle una descripción del programa, para que pueda solucionar el error.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Anterior error	Shift+F4</emphasis> Salta al error anterior del que se tenga constancia.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Editor de diálogos   Ctrl+D</emphasis> Salta al editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Vista de árbol	Ctrl+T</emphasis> (des)Habilita la vista de árbol, situada a la izquierda de la vista principal. Contiene el navegador de clases, el árbol de documentación y los árboles de ficheros.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Vista de salida Ctrl+B</emphasis> (des)Habilita la vista de salida, situada en la parte inferior de la vista principal.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Barra de herramientas <indexterm remap="idx"><primary>Barra de herramientas</primary></indexterm></emphasis> (des)Habilita la barra de herramientas.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Barra <indexterm remap="idx"><primary>Barra</primary></indexterm> de navegación</emphasis> (des)Habilita la barra de navegación, que contiene botones de retroceso, avance y búsqueda para el navegador.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Refrescar</emphasis> Recorre todos los ficheros para reconstruir el navegador de clases. El progreso de la acción se muestra en el indicador de progreso de la barra de estado.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="creacin-y-mantenimiento-de-proyectos">
<title>Creación y mantenimiento de proyectos</title>

<para><indexterm><primary>Menú "Proyecto"</primary></indexterm> Esta sección describe las funciones disponibles desde el menú "Proyecto", que pretenden cubrir la creación y el mantenimiento de proyectos.
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Nuevo...</emphasis> Lanza el asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> y le permite crear un nuevo proyecto, seleccionando el tipo, el nombre, la versión y otras opciones.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Abrir</emphasis> Muestra el diálogo "Abrir proyecto", desde el cual puede seleccionar el proyecto KDevelop a abrir. Tras seleccionarlo, el proyecto será cargado.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Abrir proyecto reciente...</emphasis> Contiene un submenú con los últimos 5 proyectos abiertos. Con este menú puede abrir proyectos más fácilmente.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Cerrar</emphasis> Cierra el proyecto abierto. Esto se hace automáticamente al salir de KDevelop, por lo que si lo hace manualmente llame al asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> o abra otro proyecto para seguir utilizando el programa.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Nueva clase <indexterm remap="idx"><primary>Nueva clase</primary></indexterm>...</emphasis> Llama al generador de clases para crear una nueva clase, que será añadida al proyecto abierto. El generador de clases le permite especificar el nombre de la clase, su herencia, y los ficheros de la nueva clase.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Añadir fichero(s) existente(s)</emphasis> Abre un fichero desde el que puede seleccionar un grupo de ficheros a añadir al proyecto actual y el directorio al que se copiarán. Si selecciona un directorio destino que no estaba incluido en el proyecto, ej. creando un nuevo subdirectorio, KDevelop copiará los ficheros al nuevo subdirectorio y creará un nuevo fichero Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>. Tras copiar con éxito los ficheros, el proyecto será reconstruido por automake <indexterm remap="idx"><primary>automake</primary></indexterm> y and autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm> para incluir el nuevo subdirectorio en el proceso de construcción.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Añadir nueva traducción...</emphasis> Abre un desde el que seleccionar el idioma de la traducción que será añadida al proyecto. Esta función esta principalmente para ser usada por los traductores, que pueden añadir fácilmente su idioma al proyecto y trabajar en su traducción sin tener que preocuparse de los ficheros Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Propiedades del fichero Mayús+F7</emphasis> Abre el diálogo "Propiedades del fichero", que muestra una copia del VLF <indexterm remap="idx"><primary>VLF</primary></indexterm> y las opciones del fichero. Desde aquí puede modificar propiedades como dónde se instalará el fichero y su tipo.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Crear mensajes y mezclar</emphasis> Se utiliza para crear el fichero de mensajes de su proyecto. El fichero de mensajes contiene todas las cadenas que han sido configuradas en los fuentes como traducibles y se utiliza por los traductores para crear el fichero .po de su idioma.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Crear doc. de la API <indexterm remap="idx"><primary>doc. de la API</primary></indexterm></emphasis> Llama a KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> con los ficheros de cabecera del proyecto y genera una salida <indexterm remap="idx"><primary>salida</primary></indexterm> en HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> con la documentación de las clases <indexterm remap="idx"><primary>clases</primary></indexterm> de su proyecto.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Crear manual de usuario</emphasis> Ejecuta KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm> sobre el fichero SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> de su manual, creando el manual de usuario en HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>. Si KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm> no está instalado, se utilizará sgml2html para este propósito.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Crear distribución:</emphasis></para>
<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Fuente-tgz </emphasis> Crea, en el directorio del proyecto, un fichero de distribución del proyecto abierto, con los fuentes del mismo,  listo para entregar a los usuarios finales. El usuario final tiene que ejecutar <literal remap="tt">tar zxvf suproyecto.tar.gz</literal> para descomprimirlo en un directorio, y ejecutar los comandos <literal remap="tt">./configure, make</literal> y <literal remap="tt">make install</literal> dentro del directorio creado, para compilar e instalar el programa.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Opciones  F7</emphasis> Abre el diálogo "Opciones del proyecto", que le permite cambiar varias opciones de su proyecto. Por ejemplo, se puede cambiar el número de versión, o las opciones del compilador <indexterm remap="idx"><primary>opciones del compilador</primary></indexterm> para pasar -02 como parámetro y optimizar el binario.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="construccin-de-proyectos">
<title>Construcción de proyectos</title>

<para><indexterm><primary>Menú "Construir"</primary></indexterm>
Esta sección describe el menú Construir, que contiene todas las acciones relacionadas con make, además de otras acciones como la reconstrucción de la ayuda en línea del proyecto, o la documentación de la API <indexterm remap="idx"><primary>API</primary></indexterm>.</para>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Compilar fichero... Ctrl+F8</emphasis> Sólo se puede seleccionar si la ventana de edición abierta es la de C++. Únicamente compila el fichero de implementación <indexterm remap="idx"><primary>implementación</primary></indexterm> abierto y le permite ahorrar tiempo en caso de que sospeche que existen errores <indexterm remap="idx"><primary>errores</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ejecutar make  F8</emphasis> Llama al comando make <indexterm remap="idx"><primary>make</primary></indexterm> con su proyecto y construye el objetivo.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Reconstruir todo</emphasis> Reconstruye todos los objetos y el objetivo de su proyecto.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Limpiar/Reconstruir todo</emphasis> Elimina del directorio del proyecto todos los ficheros generados por el comando make y reconstruye el objetivo.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Parar la construcción  F10</emphasis> Para el proceso en ejecución.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ejecutar F9</emphasis> Ejecuta su objetivo tras construir el programa con make.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ejecutar con argumentos Alt+F9</emphasis> Ejecuta el objetivo con argumentos. Primero se muestra un diálogo para permitirle especificar los argumentos de ejecución (que serán guardados en el proyecto para la siguiente sesión), tras esto, la aplicación recibe los argumentos introducidos. Recuerde que su aplicación será ejecutada desde el directorio del proyecto.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Depurar...</emphasis> Ejecuta KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm> en la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> para depurar la aplicación. KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm> abrirá automáticamente el fichero que contenga la función main() y ejecutará la aplicación.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Distclean</emphasis> Elimina todos los ficheros generados por el proyecto, tales como objetos, etc. Se ha de ejecutar Distclean antes de distribuir el proyecto, para que la distribución no contenga ningún fichero dependiente de la plataforma, como los creados por el compilador <indexterm remap="idx"><primary>compilador</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Autoconf y automake <indexterm remap="idx"><primary>automake</primary></indexterm></emphasis> Ejecuta el programa make sobre el fichero Makefile.dist <indexterm remap="idx"><primary>Makefile.dist</primary></indexterm>, situado en el directorio principal del proyecto. Este fichero contiene todos los comandos necesarios para que los programas automake <indexterm remap="idx"><primary>automake</primary></indexterm>, autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm> etc. construyan su proyecto. Si ha cambiado macros o añadido ficheros manualmente, debería ejecutar autoconf, seguido de configure, para volver a crear todos los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ejecutar configure</emphasis> Ejecuta el archivo de comandos configure generado por autoconf <indexterm remap="idx"><primary>autoconf</primary></indexterm>. Si no se puede ejecutar el comando, ejecute autoconf y vuelva seleccionar configure.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="llamando-a-las-herramientas-herramientas">
<title>Llamando a las herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm></title>

<para><indexterm><primary>Menú "herramientas"</primary></indexterm>
El menú de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> contiene, por defecto, entradas para los siguientes programas, si están instalados: KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm>, KIconEdit <indexterm remap="idx"><primary>KIconEdit</primary></indexterm> y KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm>. El programa de instalación de KDevelop comprueba si están instalados para insertarlos, en el orden mencionado, en el menú. Al seleccionar una herramienta se abrirá la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> y se ejecutará el programa seleccionado en esta ventana. El menú de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> puede ser modificado desde la entrada Herramientas... <indexterm remap="idx"><primary>Herramientas...</primary></indexterm> del menú Opciones; vea <link linkend="Configurando-el-men-idxHerramientas">Configurando el menú "&lt;idx/Herramientas/"</link>.</para>
</sect2>

<sect2 id="cambiando-la-configuracin-de-kdevelop">
<title>Cambiando la configuración de KDevelop</title>

<para><indexterm><primary>Menú "Opciones"</primary></indexterm>
El menú Opciones contiene entradas para lanzar todos los diálogos de configuración <indexterm remap="idx"><primary>diálogos de configuración</primary></indexterm> desde los que cambiar la configuración de KDevelop. Los apartados de configuración más importantes, tales como los de impresión <indexterm remap="idx"><primary>impresión</primary></indexterm> y los de configuración del editor <indexterm remap="idx"><primary>editor</primary></indexterm>, tiene sus propias entradas en el menú; otros apartados más generales pueden ser modificados desde el diálogo <link linkend="Configuracin-de-KDevelop">Configuración de KDevelop</link>.
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Editor...</emphasis> Le permite modificar el comportamiento del editor, por ejemplo con las selecciones, al partir palabras, etc.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Colores del editor...</emphasis> Desde aquí, puede seleccionar los colores del editor <indexterm remap="idx"><primary>editor</primary></indexterm>, por ejemplo, el color de fondo.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Por defecto del editor...</emphasis> Selecciona la apariencia por defecto del editor, por ejemplo permite cambiar el tipo y tamaño de letra del editor <indexterm remap="idx"><primary>editor</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Resaltado de sintaxis...</emphasis> Este diálogo le permite configurar los tipos de letra y colores que se usarán para resaltar los distintos lenguajes de programación, incluyendo HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Navegador de documentación...</emphasis> En este diálogo tabulado, puede seleccionar los tipos de letra, los tamaños y los colores del navegador de la ayuda <indexterm remap="idx"><primary>navegador de la ayuda</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Configurar impresora...</emphasis> Contiene entradas para los diálogos de configuración <indexterm remap="idx"><primary>diálogos de configuración</primary></indexterm> de la impresión, según el programa de impresión <indexterm remap="idx"><primary>impresión</primary></indexterm> utilizado, a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm> o enscript <indexterm remap="idx"><primary>enscript</primary></indexterm>.</para>
<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm></emphasis> Configura la impresión para ser utilizada con a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm>. Vea Impresión para obtener más información.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">enscript <indexterm remap="idx"><primary>enscript</primary></indexterm></emphasis> Configura la impresión para ser utilizada con enscript <indexterm remap="idx"><primary>enscript</primary></indexterm>. Vea Impresión para obtener más información.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Herramientas <indexterm remap="idx"><primary>Herramientas</primary></indexterm>...</emphasis> Abre el diálogo de configuración de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm>. Desde él, puede configurar el menú herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm>, añadiendo o eliminando programas a ser lanzados en la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Configuración de KDevelop</emphasis> Abre el diálogo Configuración de KDevelop. Desde el primer tabulador se configuran las preferencias generales. A este tabulador le siguen los de configuración de teclas y de documentación. Desde el tabulador de documentación se puede generar una nueva documentación en HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> de la biblioteca y reconstruir el índice de búsqueda <indexterm remap="idx"><primary>índice de búsqueda</primary></indexterm> del navegador de la ayuda <indexterm remap="idx"><primary>navegador de la ayuda</primary></indexterm>.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="el-men-ventana">
<title>El menú Ventana</title>

<para><indexterm><primary>Menú "Ventana"</primary></indexterm>
El menú Ventana contiene una lista con todos los ficheros abiertos. Esto le permite saltar rápidamente a otro fichero con el que esté trabajando.</para>
</sect2>

<sect2 id="gestin-de-marcadores">
<title>Gestión de marcadores</title>

<para><indexterm><primary>Menú "Marcadores"</primary></indexterm>
El menú Marcadores esta pensado para añadir y eliminar marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> que desee situar en el fichero en edición. Como KDevelop utiliza dos ventanas de edición, cada una configura sus marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> por separado.
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Alternar marcador Ctrl+Alt+T</emphasis> Pone un marcador a la línea en que el cursor esté situado. Si la línea ya tiene un marcador, lo quita.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Siguiente marcador F5</emphasis> Salta al siguiente marcador del documento abierto.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Anterior marcador Mayús+F5</emphasis> Salta al anterior marcador del documento abierto.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Vaciar marcadores Ctrl+Alt+C</emphasis> Vacia la lista de marcadores de la ventana de edición abierta o del navegador. Ej. si la ventana visible es la de ficheros de cabecera, sólo se borran los marcadores de esta ventana.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ventana de cabeceras</emphasis> Contiene la lista de marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> de la ventana de cabecera. Los marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> se asignan sólo al fichero abierto, por que si cambia de fichero los marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> no se perderán, pero no estarán accesibles para el nuevo fichero.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ventana de C/C++</emphasis> Contiene la lista de marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> de la ventana de C/C++. Su funcionamiento es idéntico al de la opción anterior.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Ventana de navegación</emphasis> Contiene la lista de marcadores <indexterm remap="idx"><primary>marcadores</primary></indexterm> de la ventana de navegación. Al seleccionar un marcador se abrirá el navegador en la página seleccionada.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="ayuda-en-lnea-ayuda-en-lnea">
<title>Ayuda en línea <indexterm remap="idx"><primary>Ayuda en línea</primary></indexterm></title>

<para><indexterm><primary>Menú Ayuda</primary></indexterm>
El menú Ayuda contiene entradas para navegar por el navegador de documentación <indexterm remap="idx"><primary>navegador de documentación</primary></indexterm>, además de entradas para las bibliotecas. Se puede acceder a la ayuda en línea adicional desde el árbol DOC <indexterm remap="idx"><primary>DOC</primary></indexterm> en la vista de árbol, que se mostrará automáticamente (si el cambio de contexto automático está habilitado) cuando abra la ventana del navegador de documentación.
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Retroceder <indexterm remap="idx"><primary>Retroceder</primary></indexterm>  Alt+Flecha izq.</emphasis> Muestra la página abierta antes que la actual.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Avanzar <indexterm remap="idx"><primary>Avanzar</primary></indexterm> Alt+Flecha der.</emphasis> Abre la siguiente página en el historial del navegador, está disponible despúes de haber seleccionado "Retroceder".</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Buscar texto marcado <indexterm remap="idx"><primary>Buscar texto marcado</primary></indexterm>		F2</emphasis> Intenta encontrar, en el índice de búsqueda, el texto seleccionado en la ventana de edición o en la ventana de navegador.  Tras la búsqueda, se mostrará una página con los resultados, que le permite seleccionar la página de la ayuda que desea visitar. Al seleccionar la página, el navegador resaltará la expresión que se buscaba. Con la tecla F3 se puede ir a la siguiente ocurrencia de la expresión en la misma página, si aparece varias veces.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Buscar ayuda sobre... <indexterm remap="idx"><primary>Buscar ayuda sobre...</primary></indexterm></emphasis> Abre el diálogo "Buscar ayuda sobre...", que le permite buscar una expresión en la ayuda.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Manual de usuario <indexterm remap="idx"><primary>Manual de usuario</primary></indexterm>		F1 <indexterm remap="idx"><primary>F1</primary></indexterm></emphasis> Muestra el índice del manual de usuario de KDevelop, que es el manual en que usted se encuentra ahora.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Manual de programación <indexterm remap="idx"><primary>Manual de programación</primary></indexterm> </emphasis> Abre el índice del <ulink url="programming/index.html">manual de programación de KDevelop</ulink>.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Sugerencia del día <indexterm remap="idx"><primary>Sugerencia del día</primary></indexterm></emphasis> Abre el diálogo "Sugerencia del día", que le informará de algunas de las características de KDevelop.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Página web de KDevelop <indexterm remap="idx"><primary>Página web de KDevelop</primary></indexterm></emphasis> Abre la página web de KDevelop en la ventana del navegador, si existe acceso a Internet.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Notificar error <indexterm remap="idx"><primary>Notificar error</primary></indexterm>...</emphasis> Abre el diálogo de notificación de errores, desde el cual puede notificar directamente, por correo electrónico, de un error al equipo de KDevelop. Vea el apartado <link linkend="Notificando-errores">Notificando errores</link>.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Referencia <indexterm remap="idx"><primary>Referencia</primary></indexterm> de C/C++</emphasis> Muestra el índice de la guía de referencia del lenguaje. Si la guía no está instalada, se mostrará una página de error informándole de donde puede conseguirla y como instalarla.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Biblioteca Qt <indexterm remap="idx"><primary>Biblioteca Qt</primary></indexterm></emphasis> Muestra el índice de la documentación de la biblioteca Qt, incluida con su copia de la biblioteca Qt.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Biblioteca del núcleo de KDE <indexterm remap="idx"><primary>Biblioteca del núcleo de KDE</primary></indexterm></emphasis> Muestra el índice de clases de la documentación de la biblioteca del núcleo de KDE.<indexterm><primary>kdecore</primary></indexterm>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Biblioteca de la IGU de KDE <indexterm remap="idx"><primary>Biblioteca de la IGU de KDE</primary></indexterm></emphasis> Como la anterior, pero para la biblioteca de la IGU.<indexterm><primary>kdeui</primary></indexterm>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Biblioteca KFile de KDE <indexterm remap="idx"><primary>Biblioteca KFile de KDE</primary></indexterm></emphasis> Como arriba, pero para la biblioteca KFile.
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Biblioteca HTML de KDE <indexterm remap="idx"><primary>Biblioteca HTML de KDE</primary></indexterm></emphasis> Como arriba, pero para la biblioteca HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Doc. de la API del Proyecto <indexterm remap="idx"><primary>Doc. de la API del Proyecto</primary></indexterm></emphasis> Muestra el índice de la documentación de las clases del proyecto.<indexterm><primary>KDoc</primary></indexterm><indexterm><primary>API</primary></indexterm>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Manual de usuario del proyecto <indexterm remap="idx"><primary>Manual de usuario del proyecto</primary></indexterm></emphasis> Abre el índice del manual de usuario del proyecto abierto. Puede utilizarse para comprobar los documentos HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> creados por KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Acerca de KDevelop...</emphasis> Muestra el diálogo "Acerca de" de KDevelop que muestra el número de versión, el nombre de los autores y sus direcciones de correo electrónico, y el tipo de licencia de KDevelop.</para>
</listitem>
</itemizedlist>
</para>
</sect2>
</sect1>

<sect1 id="elementos-de-la-barra-de-herramientas-barra-">
<title>Elementos de la barra de herramientas <indexterm remap="idx"><primary>barra de herramientas</primary></indexterm></title>

<para>KDevelop ofrece un acceso más rápido a alguna de sus funciones por medio de la barra de herramientas. Hay dos barras: la estándar y la del navegador; en el editor de diálogos <indexterm remap="idx"><primary>editor de diálogos</primary></indexterm> sólo está disponible la barra estándar. Ambas pueden ser (des)habilitadas desde las entradas correspondientes del menú "Ver"; también pueden ser arrastradas fuera de la ventana y colocadas a los lados del área de trabajo.</para>

<sect2 id="la-barra-de-herramientas-barra-de-herramient">
<title>La barra de herramientas <indexterm remap="idx"><primary>barra de herramientas</primary></indexterm> estándar</title>

<para>La barra de herramientas estándar ofrece un acceso rápido a las funciones más utilizadas para procesar y editar ficheros, además de para construir su aplicación. Los botones ejecutan los siguientes comandos, de izquierda a derecha: <indexterm><primary>menú "Fichero"</primary></indexterm><indexterm><primary>menú "Editar"</primary></indexterm><indexterm><primary>menú "Proyecto"</primary></indexterm><indexterm><primary>menú "Construir"</primary></indexterm><indexterm><primary>depurado</primary></indexterm><indexterm><primary>Vista de árbol</primary></indexterm><indexterm><primary>Vista de salida</primary></indexterm><indexterm><primary>ejecutar objetivo</primary></indexterm></para>

<para><itemizedlist>
<listitem>
<para>Abrir proyecto - muestra el diálogo de abrir proyecto</para>
</listitem>
<listitem>
<para>Abrir fichero - muestra el diálogo de abrir fichero; si se mantiene apretado, muestra un menú desplegable que le permite seleccionar los ficheros fuente y de cabecera del proyecto abierto.</para>
</listitem>
<listitem>
<para>Guardar fichero - guarda en disco el fichero abierto</para>
</listitem>
<listitem>
<para>Imprimir fichero - abre el diálogo de impresión</para>
</listitem>
<listitem>
<para>(separador)</para>
</listitem>
<listitem>
<para>Deshacer - deshace la última acción</para>
</listitem>
<listitem>
<para>Rehacer - rehace la última acción deshecha</para>
</listitem>
<listitem>
<para>Cortar - corta el texto/control seleccionado</para>
</listitem>
<listitem>
<para>Copiar - copia el texto/control seleccionado al portapapeles del sistema</para>
</listitem>
<listitem>
<para>Paste - inserta los contenidos del portapapeles en la posición del cursor</para>
</listitem>
<listitem>
<para>(separador)</para>
</listitem>
<listitem>
<para>Compilar fichero <indexterm remap="idx"><primary>Compilar fichero</primary></indexterm> - compila el fichero abierto en la ventana de C/C++. En el editor de diálogos el botón es reemplazado por el de "Generar ficheros".</para>
</listitem>
<listitem>
<para>Ejecutar make - ejecuta make sobre el proyecto</para>
</listitem>
<listitem>
<para>Reconstruir todo - reconstruye el proyecto</para>
</listitem>
<listitem>
<para>Depurar - abre KDbg <indexterm remap="idx"><primary>KDbg</primary></indexterm> con el binario de la aplicación para depurarlo <indexterm remap="idx"><primary>depurarlo</primary></indexterm> en la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm></para>
</listitem>
<listitem>
<para>Ejecutar - ejecuta el binario objetivo de la aplicación</para>
</listitem>
<listitem>
<para>Detener - cancela el proceso activo</para>
</listitem>
<listitem>
<para>(separador)</para>
</listitem>
<listitem>
<para>Editor de diálogos - salta al modo de edición de diálogos. En él, el botón es reemplazado por el de "Modo edición".</para>
</listitem>
<listitem>
<para>Vista de árbol - (des)habilita la vista de árbol. En función de si está habilitada o no, el botón estará hundido o no.</para>
</listitem>
<listitem>
<para>Vista de salida - (des)habilita la vista de salida. En función de si está habilitada o no, el botón estará hundido o no.</para>
</listitem>
<listitem>
<para>(separador)</para>
</listitem>
<listitem>
<para>¿Qué es esto.....? - el cursor se transforma en una fecha de interrogación, permitiéndole obtener información sobre los componentes de la IGU <indexterm remap="idx"><primary>IGU</primary></indexterm> de KDevelop.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="la-barra-de-herramientas-barra-de-herramient">
<title>La barra de herramientas <indexterm remap="idx"><primary>barra de herramientas</primary></indexterm> del navegador</title>

<para>La barra de herramientas del navegador <indexterm remap="idx"><primary>navegador</primary></indexterm> ofrece funciones útiles para la navegación de la documentación <indexterm remap="idx"><primary>documentación</primary></indexterm> y de ficheros. La barra de herramientas contiene:
<indexterm><primary>navegador de documentación</primary></indexterm><indexterm><primary>menú de ayuda"</primary></indexterm>
<itemizedlist>
<listitem>
<para>la lista desplegable de clases - le permite seleccionar una clase del proyecto abierto a la que ir.</para>
</listitem>
<listitem>
<para>la lista desplegable de métodos - le permite seleccionar un método del proyecto abierto. Al seleccionarlo se mostrará la implementación <indexterm remap="idx"><primary>implementación</primary></indexterm> del método.</para>
</listitem>
<listitem>
<para>el botón del asistente de Clases - le transporta a la declaración <indexterm remap="idx"><primary>declaración</primary></indexterm> del método seleccionado en ese momento. Si se mantiene pulsado aparece un menú, que le permite acceder a las herramientas para añadir clases, métodos y atributos, además de navegar por la clase y sus métodos.</para>
</listitem>
<listitem>
<para>Retroceder - navega hacia atrás en el historial del navegador de documentación <indexterm remap="idx"><primary>navegador de documentación</primary></indexterm>; si se mantiene pulsado, aparece un desplegable desde el que se puede acceder a algúna de las últimas páginas visitadas.</para>
</listitem>
<listitem>
<para>Avanzar - navega hacia delante en el historial del navegador de documentación <indexterm remap="idx"><primary>navegador de documentación</primary></indexterm>; si se mantiene pulsado, aparece un desplegable desde el que se puede acceder a alguna de las páginas desde las que se ha retrocedido.</para>
</listitem>
<listitem>
<para>Detener - le dice al navegador que deje de cargar un fichero de la documentación</para>
</listitem>
<listitem>
<para>Recargar - vuelve a cargar la página abierta</para>
</listitem>
<listitem>
<para>Manual de usuario - abre la página principal del manual de usuario de KDevelop en el navegador</para>
</listitem>
<listitem>
<para>Buscar el texto en la documentación - busca el texto seleccionado en la documentación; funciona en las ventanas de edición <indexterm remap="idx"><primary>edición</primary></indexterm> y en la del navegador</para>
</listitem>
<listitem>
<para>Buscar ayuda sobre... - muestra el diálogo "Buscar ayuda sobre..." que le permite buscar una palabra en la documentación</para>
</listitem>
</itemizedlist>
</para>
</sect2>
</sect1>

<sect1 id="atajos-del-teclado">
<title>Atajos del teclado</title>

<para>Esta sección trata de los valores de los atajos de teclado, estándar o predefinidos, para su uso en KDevelop. Debería ver la sección <link linkend="Cambiando-los-atajos-de-teclado">Cambiando los atajos de teclado</link> para obtener una descripción más detallada sobre como cambiar el valor asignado a cada comando.</para>

<sect2 id="atajos-para-el-procesado-de-texto">
<title>Atajos para el procesado de texto</title>

<para><indexterm><primary>Atajos de teclado</primary></indexterm><indexterm><primary>Atajos</primary></indexterm></para>

<sect3 id="movimientos-del-cursor">
<title>Movimientos del cursor</title>

<para><programlisting>una letra a la izquierda                         Flecha izquierda
una letra a la derecha                           Flecha derecha
una palabra a la izquierda                       Ctrl+Flecha izquierda
una palabra a la derecha                         Ctrl+Flecha derecha
una línea hacia arriba                           Flecha superior
una línea hacia abajo                            Flecha inferior
al comienzo de la línea                          Inicio
al final de la línea                             Fin
una página hacia arriba                          RePág
una página hacia abajo                           AvPág
al principio del fichero abierto                 Ctrl+RePág
al final del fichero abierto                     Ctrl+AvPág</programlisting>
</para>
</sect3>

<sect3 id="selecciones-de-texto">
<title>Selecciones de texto</title>

<para><programlisting>una letra a la izquierda                         Mayús+Flecha izquierda
una letra a la derecha                           Mayús+Flecha derecha
una palabra a la izquierda                       Ctrl+Mayús+Flecha izquierda
una palabra a la derecha                         Ctrl+Mayús+Flecha derecha
una línea hacia arriba                           Ctrl+Flecha superior
una línea hacia abajo                            Ctrl+Flecha inferior
al comienzo de la línea                          Ctrl+Inicio
al final de la línea                             Ctrl+Fin
una página hacia arriba                          Mayús+RePág
una página hacia abajo                           Mayús+AvPág
al principio del fichero abierto                 Ctrl+Mayús+RePág
al final del fichero abierto                     Ctrl+Mayús+AvPág</programlisting>
</para>
</sect3>

<sect3 id="insercin-y-copia-de-texto-tabuladores">
<title>Inserción y copia de texto, tabuladores</title>

<para><programlisting>(des)habilitar modo de inserción                 Insert
copiar la selección al portapapeles              Ctrl+C, Ctrl+Insert
insertar texto desde el portapapeles             Ctrl+V, Mayús+Insert
borrar la línea seleccionada                     Ctrl+K
insertar línea tras la seleccionada              Fin, después Intro
insertar línea delante de la seleccionada        Inicio, después Intro
deshacer paso de edición                         Ctrl+Z
rehacer paso de edición                          Ctrl+Y
tabulador                                        Tabulador</programlisting>
</para>
</sect3>

<sect3 id="borrado-de-texto">
<title>Borrado de texto</title>

<para><programlisting>borrar la letra a la izquierda del cursor        Retroceso
borrar la letra a la derecha del cursor          Supr
borrar el texto seleccionado                     Retroceso o Supr
</programlisting>
</para>
</sect3>

<sect3 id="bsqueda-de-texto-dentro-del-editor-editor">
<title>Búsqueda de texto dentro del editor <indexterm remap="idx"><primary>editor</primary></indexterm></title>

<para><programlisting>abrir diálogo de Ir a la línea...                Ctrl+G
abrir diálogo de Buscar texto                    Ctrl+F
repetir la última búsqueda                       F3
abrir diálogo de Buscar y reemplazar             Ctrl+R

abrir diálogo de Búsqueda en ficheros            Ctrl+Alt+F
buscar el texto seleccionado con grep            Mayús+F2

ir al siguiente error                            F4
ir al error anterior                             Mayús+F4
</programlisting>
</para>
</sect3>

<sect3 id="bsqueda-de-texto-con-el-navegador-de-documen">
<title>Búsqueda de texto con el navegador de documentación</title>

<para><programlisting>buscar el texto seleccionado del editor en
la documentación                                 F2
buscar el texto seleccionado del navegador en
la documentación                                 F2
mostrar la siguiente aparición del texto en
la misma página                                  F3

buscar el texto seleccionado en el navegador
dentro del proyecto                              Mayús+F2</programlisting>
</para>
</sect3>

<sect3 id="atajos-del-navegador">
<title>Atajos del navegador</title>

<para><programlisting>página anterior                                  Alt+Flecha izquierda
página siguiente                                 Alt+Flecha derecha</programlisting>
</para>
</sect3>

<sect3 id="administrando-marcadores">
<title>Administrando marcadores</title>

<para><programlisting>añadir marcador                                  Ctrl+Alt+A
eliminar la lista de marcadores                  Ctrl+Alt+C</programlisting>
</para>
</sect3>
</sect2>

<sect2 id="atajos-para-los-botnes-de-la-barra-de-herram">
<title>Atajos para los botónes de la barra de herramientas <indexterm remap="idx"><primary>barra de herramientas</primary></indexterm></title>

<para><programlisting>Botón "Abrir fichero"                           Ctrl+O
Botón "Guardar fichero"                         Ctrl+S
Botón "Imprimir fichero                         Ctrl+P
Botón "Deshacer"                                Ctrl+Z
Botón "Rehacer"                                 Ctrl+Y
Botón "Cortar"                                  Ctrl+X
Botón "Copiar"                                  Ctrl+C
Botón "Pegar"                                   Ctrl+V
Botón "Compilar fichero"                        Ctrl+F8
Botón "Ejecutar make"                           F8
Botón "Ejecutar"                                F9
Botón "Ejecutar con argumentos"                 Alt+F9
Botón "Editor de diálogos"                      Ctrl+D
Botón "Retroceder"                              Alt+Flecha izquierda,
                                                si el navegador está abierto
Botón "Avanzar"                                 Alt+Flecha derecha,
                                                si el navegador está abierto
Botón "Buscar el texto seleccionado"            F2</programlisting>
</para>
</sect2>

<sect2 id="administracin-de-ventanas">
<title>Administración de ventanas</title>

<para>Para saltar a una ventana en concreto, pulse Alt más la letra subrayada en el título de la ventana, ej. para mostrar la ventana de herramientas <indexterm remap="idx"><primary>herramientas</primary></indexterm> debería pulsar Alt+S</para>
</sect2>

<sect2 id="atajos-del-proceso-de-compilacin">
<title>Atajos del proceso de compilación</title>

<para><programlisting>Compilar el fichero fuente abierto               Ctrl+F8
Construir el objetivo del proyecto abierto       F8
Ejecutar el objetivo tras construirlo            Ctrl+F9
Ejecutar el objetivo con argumentos              Alt+F9
Detener el proceso en ejecución                  F10</programlisting>
</para>
</sect2>
</sect1>
</chapter>

<chapter id="el-sistema-de-ayuda">
<title>El sistema de ayuda</title>

<para>Most of KDevelop's strength is accumulated in the Help System.  It is also to be understood as an example of how to extend your own
KDE application with a complete set of help functionality, and is, in part, already realized in the template applications, so
KDE/Qt application framework <indexterm remap="idx"><primary>application framework</primary></indexterm>s generated with the asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> do already contain the basic functionality for statusbar help and
documentation, that only has to be extended by the programmer. This section therefore introduces into the usage of the general
help provided within the IDE as well as to show the usage of the Helpbrowser <indexterm remap="idx"><primary>Helpbrowser</primary></indexterm>, which, by intelligent use, will make it very easy to
get the information you need for development.</para>

<sect1 id="the-whats-this-button-and-quickhelp-quickhel">
<title>The "What's this ?"-Button and Quickhelp <indexterm remap="idx"><primary>Quickhelp</primary></indexterm></title>

<para>Looking at KDevelop's top toolbar, you will see the "What's this?" button on the right end. By selecting the button, the cursor
will change to a pointer with a question mark on the right, as is the same as the button in the toolbar. Now, you can select any
visible part of the KDevelop user interface and click on it. This will result in displaying a help-window giving you a short
description of the function this part gives you or what it can do for you. Included are the main view, the tree-views and the
toolbars, for which every button help is provided. After another mouse click or a keyboard input, the What's this? help window
disappears and your cursor is set to the last active position. Mind, that, if you place the mouse pointer over a button, it gets
raised and after a short time, you will get a Quick-Tip-window, describing the function the button represents in the menubar; this
will disappear if you move the mouse pointer away.</para>

<para>For user interaction dialogs, Quickhelp <indexterm remap="idx"><primary>Quickhelp</primary></indexterm> provides you help windows with a short description of the selected item you want help for.
These are accessed by a right-button mouse click to the item, a context-menu pops up that allows the selection of "Quick-Help".
Selecting this will pop up the help window. This is always useful for dialogs where you can't see the action's purpose for as long
as you are not familiar with KDevelop. Mind that most dialogs offer a Help-button which will show you the detailed context-help
for the dialog's options within the provided online-manual in the help-browser.</para>
</sect1>

<sect1 id="the-statusbar-statusbar-help">
<title>The Statusbar <indexterm remap="idx"><primary>Statusbar</primary></indexterm> Help</title>

<para>The statusbar of KDevelop offers you many functions that inform you about the current activity state as well as "status messages"
offering a short description for commands.</para>

<sect2 id="statusbar-statusbar-entries">
<title>Statusbar <indexterm remap="idx"><primary>Statusbar</primary></indexterm> Entries</title>

<para>The Statusbar <indexterm remap="idx"><primary>Statusbar</primary></indexterm> contains:
<orderedlist><listitem>
<para> a general message field, most left. This is used for help messages and displays the current activity.</para>
</listitem>
<listitem>
<para> the progressbar, indicating the progress for actions that require a comparably long time to be finished, such as saving
files and the scan-progress of the Class Browser. The progressbar only appears during those processes are executed.</para>
</listitem>
<listitem>
<para> an Insert/Overwrite indicator. It shows the editor <indexterm remap="idx"><primary>editor</primary></indexterm> mode for insert actions by INS for Insert mode and OVR for Overwrite
mode. The mode can be changed by the INS-key on the keyboard.</para>
</listitem>
<listitem>
<para> a line counter, displaying the current line the cursor is placed.</para>
</listitem>
<listitem>
<para> a column counter, indicating the current column position of the cursor in a line.</para>
</listitem>
</orderedlist>
</para>
</sect2>

<sect2 id="help-messages">
<title>Help Messages</title>

<para>The statusbar informs you about the action of menu entries if you select a menu within the menubar and select an action without
executing it. Further, if you press on a toolbar icon, but without releasing the mousebutton, the help message for the button is
displayed in the same way as for the menu entries. You can prevent the execution of the selected icon by moving the mousepointer
away from the icon, still holding the button pressed. If the cursor is away, release the mousebutton.</para>

<para>For actions that are currently executed, KDevelop displays the action. This counts for processes running in the background
such as saving files as well as for dialogs. If the process has exited such as a make-invocation, the statusbar display
changes back to "Ready" state.</para>

<para>Also, when using the documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm>, the statusbar displays link urls for as long as the cursor is placed over an URL link
in the browser window. Therefore, you can easily find out if the file is a local or a remote file only accessed by network
connection.</para>

<para>The caption of the KDevelop Project Editor shows you the currently opened filename in the top window. This would be a HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> file
for the documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm> or a text file for the editing windows. Further, the Project name is displayed, so you have constant
control where you are and what you're currently working at.</para>
</sect2>
</sect1>

<sect1 id="configuring-the-html-html-browser">
<title>Configuring the HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> Browser</title>

<para>The browser included in KDevelop is completely HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>-based, therefore you can specify the usual options like background and the
like. You can set all preferences by the "Documentation Browser"-entry of the "Options"-menu.
The configuration dialog <indexterm remap="idx"><primary>configuration dialog</primary></indexterm> shows you two tabulators; the first for setting the font preferences, the second for color selection.</para>

<sect2 id="font-preferences">
<title>Font Preferences</title>

<para>The first option for the font display is the size. Available are small, medium and large. The best display for normal use
is set to small by default.
For the font selection you have to specify a standard font for normal text as it appears in HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> documents; the fixed font is the
one used for displaying e.g. code within the HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> file.</para>
</sect2>

<sect2 id="color-preferences">
<title>Color Preferences</title>

<para>The color preferences dialog allows configuration of background, normal text, URL Link and followed link color. The
colored buttons on the right are displaying the current settings; selecting a button will result in opening the "Select Color"
dialog. There, you can specify the color either by choosing a System Color, a custom color, select the color by the multi-colored
window or by setting the values directly. The middle contains a preview for the color selected.</para>

<para>Further, you can specify if the browser should underline links to easier detect them visually and if you like to use your own
colors always independent of the page's preset ones. "Apply" will execute all changes, while "OK" will apply changes and close the
dialog. "Cancel" leaves all settings untouched and exits the configuration.</para>
</sect2>
</sect1>

<sect1 id="utilizando-el-navegador-de-documentacin">
<title>Utilizando el navegador de documentación</title>

<para>The documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm> allows quick and easy access to all manuals and documentations that are provided with KDevelop or
generated automatically, including online-documentation for the KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> and your project documentation. Plus, the
Documentation Tree in the tree-view lets you customize a special "Others" folder that contains all individually added
documentation.</para>

<sect2 id="requerimientos">
<title>Requerimientos</title>

<para>To make use of all features of the Helpbrowser <indexterm remap="idx"><primary>Helpbrowser</primary></indexterm>, you should have KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> and glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm> installed. KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> will generate all kind of online
class-documentation for the KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> during the setup <indexterm remap="idx"><primary>setup</primary></indexterm> process, but can also invoked by option in the <link linkend="Configuracin-general">Configuración del KDevelop</link>. For the generation of an API <indexterm remap="idx"><primary>API</primary></indexterm> (Application Programming Interface) Documentation for your
project's classes <indexterm remap="idx"><primary>classes</primary></indexterm>, KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> is also used and called by the Project-menu, entry "Make API <indexterm remap="idx"><primary>API</primary></indexterm>-Doc". This will process all current header files
of the project plus the addition of a cross-reference to the Qt and KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> if those are available in the Helpbrowser <indexterm remap="idx"><primary>Helpbrowser</primary></indexterm>. For
the generation of the project handbooks, you should have KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm> (provided with the KDE-SDK <indexterm remap="idx"><primary>KDE-SDK</primary></indexterm>) and, as a minimum, SGML <indexterm remap="idx"><primary>SGML</primary></indexterm>-tools
installed on your system. To extend and change your project's online-documentation, you have to edit the documentation file for your
project by selecting it in the RFV <indexterm remap="idx"><primary>RFV</primary></indexterm>. After saving your changes, call "Make User-Manual" from the Project-menu. In case SGML <indexterm remap="idx"><primary>SGML</primary></indexterm>tools detect
formatting errors <indexterm remap="idx"><primary>errors</primary></indexterm>, those will be displayed in the output <indexterm remap="idx"><primary>output</primary></indexterm> window allow you to find the error line directly. The program "glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm>"
is used to create a personal search-index for your documentation automatically. The index is generally build during the
installation process, but can also be build with the <link linkend="Configuracin-general">Configuración de KDevelop</link> dialog. For a description of
the provided search functions see <link linkend="Using-the-Searchindex">Using the Searchindex</link>.</para>
</sect2>

<sect2 id="documentacin-entregada">
<title>Documentación entregada</title>

<para>The KDevelop IDE comes with two sets of online-documentation, which can be accessed either via the Help-menu or by the Doc-tree in
the Tree-View in the KDevelop folder. The first book provided is this online-handbook containing all information you need towards
installation, configuration, available functionality and introduction to application development. The second book is <ulink url="programming/index.html">The KDevelop Programming Handbook</ulink> in it's first edition. The programming handbook covers most
questions related to the creation and extension of projects that work with KDevelop. By tutorials the user gets an introduction to the
rich facilities that applications created with the Qt- and/or KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> have to offer as well as given a guideline for
ensuring KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>-compliance, which covers the same instructions given on the Internet site at <ulink url="http://developer.kde.org">\|\|</ulink>.
However, the programming handbook cannot replace any additional documentation available in printed or electronic form about the C++
programming language as well as about the usage of the Qt-library in certain terms.</para>

<para>The C/C++-Reference <indexterm remap="idx"><primary>Reference</primary></indexterm> used with KDevelop is currently only available on the KDevelop homepage at <ulink url="http://www.kdevelop.org">\|\|</ulink>. On distributions the reference may be included, see your distribution installation program index for
more information. It can be installed easily by downloading and copying the sourcefile to the main KDE-directory ($KDEDIR). There, you
have to untar it as root with <literal remap="tt">tar zxvf c&&lowbar;;c++&&lowbar;;reference.tar.gz</literal>, the reference will then be copied the documentation directory of
KDevelop. For uninstalling the reference documentation you just have to delete the "reference" folder under
($KDEDIR)/share/doc/HTML/default/kdevelop/reference.</para>

<para>The Qt/KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> documentation folder allows direct access to the HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>-online documentation of your copy of the
Qt-library. The path to the library documentation is usually automatically detected by the KDevelop installation program, but can be
set manually in the <link linkend="Configuracin-general">Configuración de KDevelop</link> dialog. Also, all available documentation for the
KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> are listed in order of the library name, so if you would use classes <indexterm remap="idx"><primary>classes</primary></indexterm> of a certain library it is easy to
determine the library type to be added to the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> settings in the project. Mind that the whole KDE-Library documentation is
only accessible when generated by KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm>- so this program, included in the KDE-SDK <indexterm remap="idx"><primary>KDE-SDK</primary></indexterm>, has to be installed before the
documentation can be generated. As the installation program of KDevelop does this automatically, it should be installed before running
the KDevelop Setup. If this is not the case and the documentation cannot be build, you are able to create it afterwards at any time
with the <link linkend="Configuracin-general">Configuración de KDevelop</link> dialog.</para>

<para>The documentation tree also contains the "Others" folder which is intended to contain all personally customized
documentation as described below. Finally, the Doc-Tree allows access to the API <indexterm remap="idx"><primary>API</primary></indexterm> and the Manual for your current
project.</para>
</sect2>

<sect2 id="aadiendo-documentacin-al-navegador-de-la-ayu">
<title>Añadiendo documentación al navegador de la ayuda <indexterm remap="idx"><primary>navegador de la ayuda</primary></indexterm></title>

<para>To customize your Helpbrowser <indexterm remap="idx"><primary>Helpbrowser</primary></indexterm>, open the Tree-View and select the "DOC <indexterm remap="idx"><primary>DOC</primary></indexterm>" Tabulator. You will see an opened tree containing four folders.
The "Others" folder is, by default, empty. On a right mousebutton click over this folder, a context menu opens that has an entry "Add
Entry". Select this to open the Add Entry dialog where you have to enter two values: the upper one for the name that will be displayed
for the documentation within the Doc-tree, and, below that, a file-entry line. Here, you have to enter the path and filename to the
start page that will be opened by the selection of the entry later. You can enter the path and filename directly or by selection of the
pushbutton on the right to open a file-chooser dialog. This allows a quick browsing on your system to the path for your start page. Mind
that only HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>-documentation can be selected, so only HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> files are allowed to choose. Selecting OK will add the entry to the Doc-tree
and is available directly.</para>
</sect2>

<sect2 id="using-the-searchindex">
<title>Using the Searchindex</title>

<para>KDevelop includes a set of functions to help you search information within HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> documentation. To use these features, your system
needs to have the program "glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm>", a free database generator, installed, which creates the search index <indexterm remap="idx"><primary>search index</primary></indexterm> and executes searches
within the documentation. To set up the index, see <link linkend="Configuracin-general">Configuración de KDevelop</link>. The index is also
automatically generated during the installation program.</para>

<para>The search functions are available through several ways which you can choose from:
<orderedlist><listitem>
<para>in the editor <indexterm remap="idx"><primary>editor</primary></indexterm>, select the text you want to have help on or place the cursor in the word that you want to look for. Then
press the right mouse button and select look up: "expression" This can also be done by selecting "Search Marked Text" from the
Help-menu, the shortcut key F2 or by selecting the Search icon from the toolbar.</para>
</listitem>
<listitem>
<para>in the Documentation browser select the text you want to look up and press the right mouse button, select look
up:"expression" or select "Search Marked Text" or the search icon as above.</para>
</listitem>
<listitem>
<para>if you want to search for a specific keyword, select "Search for Help on..." in the Help-menu or select the "Search for Help
on..." icon from the toolbar, opening a search dialog where you can enter the expression you want to get information for.</para>
</listitem>
</orderedlist>

Direct access to specific documentation is given by selecting the according icon in the "DOC <indexterm remap="idx"><primary>DOC</primary></indexterm>" -tree-view or by the Help-menu
entries.</para>

<para>The Helpbrowser <indexterm remap="idx"><primary>Helpbrowser</primary></indexterm> also offers support for grep <indexterm remap="idx"><primary>grep</primary></indexterm> to search for a selection within your current project, e.g you've opened the documentation
page for the <literal remap="tt">KTMainWindow</literal> class (KDEUI library) and you want to know where in your code <literal remap="tt">KTMainWindow</literal> appears. Mark
<literal remap="tt">KTMainWindow</literal> and either select "Grep: KTMainWindow" or press Shift+F2. The "Search in Files" dialog opens with the results about
your grep <indexterm remap="idx"><primary>grep</primary></indexterm> search directly. Then you can choose an result line to jump to the according sourcecode.</para>
</sect2>
</sect1>
</chapter>

<chapter id="trabajando-con-el-editor">
<title>Trabajando con el editor</title>

<para>An important part of the integrated development environment is the editor <indexterm remap="idx"><primary>editor</primary></indexterm>. You're using it for:
<itemizedlist>
<listitem>
<para>creating, opening and saving source and project files <indexterm remap="idx"><primary>project files</primary></indexterm></para>
</listitem>
<listitem>
<para>editing source and project files <indexterm remap="idx"><primary>project files</primary></indexterm></para>
</listitem>
<listitem>
<para>writing your SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> documentation</para>
</listitem>
<listitem>
<para>printing <indexterm remap="idx"><primary>printing</primary></indexterm> your project files <indexterm remap="idx"><primary>project files</primary></indexterm></para>
</listitem>
</itemizedlist>

Generally, the editor <indexterm remap="idx"><primary>editor</primary></indexterm> itself doesn't do much difference in comparison to other editors; especially as it is a build-in version of
the popular KWrite, also known as the "Extended Editor". If you're familiar with that, you won't have any problems using it for
managing your projects. In addition to normal editors, KDevelop contains a new printing <indexterm remap="idx"><primary>printing</primary></indexterm> system, that is far more extended for use
with sourcecodes- and you can choose between the printing <indexterm remap="idx"><primary>printing</primary></indexterm> program you want to use.</para>

<para>This section gives you more information about how to handle your project files <indexterm remap="idx"><primary>project files</primary></indexterm> and to make you more familiar with the editor <indexterm remap="idx"><primary>editor</primary></indexterm>'s
functionality. A lot of Unix-hardliners would prefer using Emacs or XEmacs- they're fine with that. But it isn't necessary for
easy programming, and especially for beginners, to work themselves into powerful editors which shall, in the result, only allow
you to enter your code.</para>

<sect1 id="managing-project-files">
<title>Managing Project Files</title>

<para>The following sections describe how to create, save, open and close your project files <indexterm remap="idx"><primary>project files</primary></indexterm> you need to edit- mind that this doesn't
include translation files or pixmaps <indexterm remap="idx"><primary>pixmaps</primary></indexterm>. Those are recognized automatically and the according editing program like KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm> opens
those files for you.</para>

<para>To give you an easy access to your files, KDevelop contains two easy-to-handle tree-views, similar to a filemanager, that recognize
if you selected a file, and opens it in the according editor <indexterm remap="idx"><primary>editor</primary></indexterm> window. The main view contains two windows that are used
independently, but connected via the Project Editor, so you can do all menubar actions the same way. The intention behind this is
that it allows you to handle two windows at the same time, although only one is visible. The C/C++ window thereby takes another
task, which allows you to easily compile your sources one by one, so you can check the implementations without having to run a
complete build-process over your project.</para>

<para>This can be done when having the C/C++ window on top. Select "Compile File <indexterm remap="idx"><primary>Compile File</primary></indexterm>" from the Build-menu or press the according button in
the toolbar. Your file gets saved and compiled, and you can control any errors <indexterm remap="idx"><primary>errors</primary></indexterm> by the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> output <indexterm remap="idx"><primary>output</primary></indexterm> in the output <indexterm remap="idx"><primary>output</primary></indexterm> window.</para>

<para>Within the IDE you can open as many text files as you like. All opened files are listed in the Window-menu, so you can switch
between them by selecting the according filename from the menu. Further, the actual opened file is displayed with its name in the
window frame of KDevelop.</para>

<sect2 id="creating-and-saving-files">
<title>Creating and Saving Files</title>

<para>To create a new file, choose "New" from the File-menu. This opens the "New File <indexterm remap="idx"><primary>New File</primary></indexterm>" dialog, where you can specify the filename and type.
Additionally, you have to set the destination directory as well if the file is added to the project or not. Finally, you can also use
your header template for the project in case you want to add a new sourcefile without generating a new class by the Class-Generator.</para>

<para>After the file has been created, you can edit the new file as usual; if you have to switch between different files, you can always
turn back to the file either via the file-trees or by the Window-menu.</para>

<para>For saving any changes, KDevelop offers a whole variety of options. The standard way would be to save the file by selecting "Save"
or "Save As" from the File-menu or by the Save-button on the toolbar. For saving all changed files at once, you could as well
select "Save all" from the File-menu.</para>

<para>Now, when working on a project, it is very annoying if something critical happens while you have done a lot of changes on your
files; sometimes you will bite yourself that you have forgotten to save the changes. KDevelop takes care of this by offering
"Autosaving", which is by default enabled and set to save all files in intervals of 5 minutes. To select another saving period or
to disable this, see <link linkend="Configuracin-de-KDevelop">Configuración de KDevelop</link>, where the setup <indexterm remap="idx"><primary>setup</primary></indexterm> options are described.</para>

<para>Additionally, KDevelop takes care for all changes if you open another project or exit KDevelop. You will be asked for saving the
changed files, where you also have the option to specify which one to save and which you want to stay unsaved. Further, when
invoking any build-processes, your files get saved automatically, so you won't ever wonder why your application doesn't run the
way you expected it to do after your changes to the source files. The only exception is the "Compile File <indexterm remap="idx"><primary>Compile File</primary></indexterm>" command, which only
saves the currently opened source file visible in the source editor <indexterm remap="idx"><primary>editor</primary></indexterm> window.</para>
</sect2>

<sect2 id="opening-and-closing-files">
<title>Opening and Closing Files</title>

<para>To open a source file, you have a lot of options as well. One way could be, as the standard for editors, to select "Open" from the
File-menu. You will be presented an "Open File" dialog, which allows you to choose the file you want to edit. Another, probably
more frequently used way is to select the file from the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm>, the Logical File Viewer, or the RFV <indexterm remap="idx"><primary>RFV</primary></indexterm>, the Real File Viewer (see <link linkend="Descripcin-general">\|\|</link>). The advantage of the file trees is that they provide a quick visual access to your files, especially the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm>,
which only displays your project files <indexterm remap="idx"><primary>project files</primary></indexterm> by their type, collected into folders. You can as well configure the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm> towards sorting
your files in another manner by a right mouse click on the tree. Select "New Group" from the popup-menu, and you can configure a
new group, or select "Edit Group" to install new file filters by specifying the group's file extensions, separated by commas.</para>

<para>The standard file groups for a project generated by asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm> are the Headers, Sources, GNU and Others. Additionally, after
adding a translation file, KDevelop adds a folder "Translations", containing your *.po files.</para>

<para>To close files, select the file to close from the Window-menu, which loads the opened file into the front editor <indexterm remap="idx"><primary>editor</primary></indexterm>. Then select
"Close" from the File-menu. If your file has been changed, you will be asked to save it. When closing a project, all currently
opened files will be checked for changes and you will be asked for saving as well.</para>
</sect2>
</sect1>

<sect1 id="navigating-within-files">
<title>Navigating within Files</title>

<para>The following gives you a general guideline how to locate certain positions within your files for a quicker access.</para>

<para><emphasis remap="bf"> How to find a certain line in a file</emphasis></para>

<para><orderedlist><listitem>
<para>Select "Goto Line" in the "View"-menu or press Ctrl+G. The dialogfield "Goto Line" appears.</para>
</listitem>
<listitem>
<para>Insert the linenumber you want to go to.</para>
</listitem>
<listitem>
<para>Press OK.</para>
</listitem>
</orderedlist>
</para>

<para><emphasis remap="bf"> How to set a bookmark</emphasis></para>

<para><orderedlist><listitem>
<para>Set the cursor to the line you want to access via a bookmark</para>
</listitem>
<listitem>
<para>Select "Set Bookmark" from the "Bookmarks"-menu.</para>
</listitem>
<listitem>
<para>A popup-menu opens that allows you to select the bookmark number you want to set for the new bookmark.</para>
</listitem>
<listitem>
<para>Select the bookmark number.</para>
</listitem>
</orderedlist>
</para>

<para>Another way to set bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm> would be to select "Add Bookmark" from the "Bookmarks"-menu. This sets a bookmark to the current line
and appends it to the bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm>-list. The documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm> also offers setting a bookmark to the current page by a context menu
entry "Add Bookmark".</para>

<para><emphasis remap="bf"> How to delete bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm></emphasis></para>

<para>The bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm> are set for each editing window separately- mind that your bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm> aren't connected to a certain file you set the
bookmark for. To delete all bookmarks, select "Delete Bookmarks" from the "Bookmarks"-menu. This deletes the bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm> for the
window actually on top, either the Header window, the C++ window or the browser window.</para>

<para><emphasis remap="bf"> How to go to a bookmarked line</emphasis></para>

<para><orderedlist><listitem>
<para>Select the "Bookmarks"-menu and open the popup menu containing the bookmarks <indexterm remap="idx"><primary>bookmarks</primary></indexterm> for the window containing the bookmark you want
to view; either the C++-Window or the Header-Window entry.</para>
</listitem>
<listitem>
<para>Select the bookmarked line.</para>
</listitem>
</orderedlist>
</para>

<para>Selecting a bookmark for the browser window will open the browser and loads the page.</para>
</sect1>

<sect1 id="working-with-keyboard-shortcuts">
<title>Working with Keyboard Shortcuts</title>

<para>For using the editor <indexterm remap="idx"><primary>editor</primary></indexterm>, you should make yourself comfortable with some keyboard shortcuts <indexterm remap="idx"><primary>shortcuts</primary></indexterm> that make it easier to position the cursor
and edit the file. The complete shortcut reference is also listed in section <link linkend="Descripcin-general">Descripción general</link>.</para>

<para><programlisting>one letter to the left                           Left Arrow
one letter to the right                          Right Arrow
one word to the left                             Ctrl+Left Arrow
one word to the right                            Ctrl+Right Arrow
one line upwards                                 Up Arrow
one line downwards                               Down Arrow
to the beginning of the line                     Inicio
to the end of the line                           END
one page up                                      RePág
one page down                                    AvPág
to the beginning of the current file             Ctrl+RePág
to the end of the current file                   Ctrl+AvPág
one letter to the left                           Mayús+Left Arrow
one letter to the right                          Mayús+Right Arrow
one word to the left                             Ctrl+Mayús+Left Arrow
one word to the right                            Ctrl+Mayús+Right Arrow
one line upwards                                 Ctrl+Up
one line downwards                               Ctrl+Down
to the beginning of the current line             Ctrl+Inicio
to the end of the current line                   Ctrl+END
one page up                                      Mayús+RePág
one page down                                    Mayús+AvPág
to the beginning of the current file             Ctrl+Mayús+RePág
to the end of the current file                   Ctrl+Mayús+AvPág
en/disable insertmode                            INS
copy selection to the clipboard                  Ctrl+C, Ctrl+INS
insert text from the clipboard                   Ctrl+V, Mayús+INS
delete current line                              Ctrl+K
insert line after current line                   END, then Intro
insert line before current line                  Inicio, then Intro
undo editing step                                Ctrl+Z
redo an undo step                                Ctrl+Y
tabulator                                        TAB
delete letter left of cursor position            Backspace
delete letter right of cursor position           Delete
delete selected text                             Select text, then Backspace</programlisting>
</para>
</sect1>

<sect1 id="edit-windows-settings">
<title>Edit Windows Settings</title>

<para>The editor <indexterm remap="idx"><primary>editor</primary></indexterm> inside KDevelop can be configured towards special editing needs with a global effect on all editing windows. Thereby
you can set the color modes, highlighting colors (also configurable in reference to the programming language of the file) and
automatic text settings like tab-with and selection modes. The following describes how to set these options by the configuration
dialogs provided in the "Options"-menu.</para>

<sect2 id="general-settings">
<title>General Settings</title>

<para>The editor <indexterm remap="idx"><primary>editor</primary></indexterm>'s general settings can be configured with the "Editor" entry in the "Options"-menu. Select the according values and
press OK after you finished with your configuration.</para>

<sect3 id="edit-options">
<title>Edit Options</title>

<para><variablelist>
<varlistentry>
<term>Auto Indent:</term>
<listitem>
<para>this sets the editor to place the cursor below the first literal when a new line is entered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Backspace Indent:</term>
<listitem>
<para>this option sets the cursor below the first literal of the line above when backspace is pressed.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Word Wrap:</term>
<listitem>
<para>words are taken into the next line after the column set in "Wrap Words At:"</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Replace Tabs:</term>
<listitem>
<para>tabulators in the current text are replaced with tabulators of the "Tab Width:" value</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Remove Trailing Spaces:</term>
<listitem>
<para>removes trailing spaces</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Wrap Cursor:</term>
<listitem>
<para>sets the cursor to the end of the last line when backspace enters the beginning of a line</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Auto Brackets:</term>
<listitem>
<para>creates a closing bracket in front of the cursor when a bracket (any kind) is opened.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect3>

<sect3 id="select-options">
<title>Select Options</title>

<para><variablelist>
<varlistentry>
<term>Persistent Selections:</term>
<listitem>
<para>selections made stay marked after setting the cursor to a different place</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Multiple Selections:</term>
<listitem>
<para>allows multiple independent selections within the text</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Vertical Selections:</term>
<listitem>
<para>allows vertical selections of text</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Delete On Input:</term>
<listitem>
<para>deletes a selection when writing in the selection.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Toggle Old:</term>
<listitem>
<para>allows only one selection. A selection made gets deselected when another selection is made.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Wrap Words At:</term>
<listitem>
<para>sets the maximum columns that a line can have. The word that contains a letter that reaches over this value
will be automatically broken into the next line.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect3>
</sect2>

<sect2 id="colors">
<title>Colors</title>

<para>For changing the editor <indexterm remap="idx"><primary>editor</primary></indexterm>'s general appearance, you can define a set of colors that the editor uses by selecting "Editor Colors"
from the "Options"-menu. You can configure colors for:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">background:      </emphasis>        the editor's background</para>
</listitem>
<listitem>
<para><emphasis remap="bf">text background:  </emphasis>     	the background of displayed text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">selected:         </emphasis>       the color of selected text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">found:            </emphasis>       the color of text found by a search via the menu "Edit"-"Search", "Repeat search" and "Replace".</para>
</listitem>
<listitem>
<para><emphasis remap="bf">selected + found: </emphasis>       the color of text selected to search for and found</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="syntax-highlighting">
<title>Syntax Highlighting</title>

<para>The syntax-highlighting mode of KDevelop's editor <indexterm remap="idx"><primary>editor</primary></indexterm> can be configured by two dialogs; first you can set default colors for
syntax-highlighting by the "Editor Defaults" entry in the "Options"-menu. There, you can set colors and fonts as well as the
fontsize for e.g. keywords. Select the default item and set all needed options.</para>

<para>The second configuration dialog <indexterm remap="idx"><primary>configuration dialog</primary></indexterm> is accessed by the "Syntax-Highlighting" entry in the "Options"-menu. This allows you to set the
file filters for the programming language, e.g. *.cpp, *.h  for C++. Then select the item that you want to configure. If you wish
to use the default values you've set in the "Editor Defaults" dialog, select the "default" checkboxes in the Item-style and
Item-Font sections. This reads the default settings for the selected item. After pressing OK, your new values will be enabled and
used by the editor <indexterm remap="idx"><primary>editor</primary></indexterm>.</para>
</sect2>
</sect1>

<sect1 id="searching-and-replacing">
<title>Searching and Replacing</title>

<sect2 id="single-file-search">
<title>Single File Search</title>

<para><emphasis remap="bf"> How to find one or more characters in the actual editing window</emphasis>
<orderedlist><listitem>
<para>Select "Search" from the "Edit"-menu. This opens the search dialog.</para>
</listitem>
<listitem>
<para>Specify the expression to search for in the edit field. The drop-down menu offers selecting a previous search expression.</para>
</listitem>
<listitem>
<para>Select additional options like "Whole Words only"</para>
</listitem>
<listitem>
<para>Press OK.</para>
</listitem>
</orderedlist>
</para>

<para>To repeat searching for an expression entered in the search dialog, press F3.</para>
</sect2>

<sect2 id="searching-over-several-files">
<title>Searching over Several Files</title>

<para>As the search function only is referencing searches over a single file that is currently visible, you're limited to this. But often
you want to search for the same expression overall your project. Therefore, KDevelop contains a <literal remap="tt">grep <indexterm remap="idx"><primary>grep</primary></indexterm></literal>-dialog, which
lets you search over all files that you specify either by setting the directory to start the search from and/or by mime-type.
Specifying the exact directory and the mime-type will therefore reduce the time that KDevelop needs to read your files and display
the results. To start a search over several files, select "Search in files..." from the "Edit"-menu. The search dialog opens and
lets you enter:</para>

<para><itemizedlist>
<listitem>
<para>The expression to search for (the pattern)</para>
</listitem>
<listitem>
<para>The template used for the search</para>
</listitem>
<listitem>
<para>The mime-type of files to search in</para>
</listitem>
<listitem>
<para>The directory to start form</para>
</listitem>
<listitem>
<para>If the search is recursive over all included subdirectories</para>
</listitem>
</itemizedlist>
</para>

<para>By default, the grep <indexterm remap="idx"><primary>grep</primary></indexterm>-dialog is set to start at your project directory and works recursively over implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> and header files.</para>

<para>You can even extend your search pattern by using the following options:</para>

<para><orderedlist><listitem>
<para><emphasis remap="bf">.</emphasis> Match any character</para>
</listitem>
<listitem>
<para><emphasis remap="bf">&&circ;;</emphasis> Match the beginning of a line</para>
</listitem>
<listitem>
<para><emphasis remap="bf">$</emphasis> Match the end of a line</para>
</listitem>
<listitem>
<para><emphasis remap="bf">\&lt; </emphasis> Match the beginning of a word</para>
</listitem>
<listitem>
<para><emphasis remap="bf">\&gt; </emphasis> Match the end of a word</para>
</listitem>
</orderedlist>
</para>

<para>For a repeating search, you can also use the available operators:
<orderedlist><listitem>
<para><emphasis remap="bf">?</emphasis> The preceding item matches less than once</para>
</listitem>
<listitem>
<para><emphasis remap="bf">*</emphasis> The preceding item is matched zero or more times</para>
</listitem>
<listitem>
<para><emphasis remap="bf">+</emphasis> The preceding item is matched once or more times</para>
</listitem>
<listitem>
<para><emphasis remap="bf">&&lcub;; n &&rcub;;</emphasis> The preceding item is matched exactly <emphasis>n</emphasis> times</para>
</listitem>
<listitem>
<para><emphasis remap="bf">&&lcub;; n,&&rcub;;</emphasis> The preceding item is matched <emphasis>n</emphasis> or more times</para>
</listitem>
<listitem>
<para><emphasis remap="bf">&&lcub;;,n &&rcub;;</emphasis> The preceding item matches less than <emphasis>n</emphasis> times</para>
</listitem>
<listitem>
<para><emphasis remap="bf">&&lcub;;n,m&&rcub;;</emphasis> The preceding item matches at least <emphasis>n</emphasis> times but less than <emphasis>m</emphasis> times</para>
</listitem>
</orderedlist>
</para>

<para>Backreferences to bracketed subexpressions are also available by the notation <emphasis>\n</emphasis>.</para>

<para>After specifying your search, press "Search". The results are then displayed in the result-window. To jump to a file and line
number, select the resultline and press Intro or double click the result. The editor will automatically open the according file
and place the cursor to the line of the result. This allows a complete specification for any search action and give out exact
results.</para>

<para>KDevelop offers also some more specialized functionality to use grep <indexterm remap="idx"><primary>grep</primary></indexterm> within the editor <indexterm remap="idx"><primary>editor</primary></indexterm>s and the browser. Select the expression you want
to search for in either of the windows and press Mayús+F2 or select "grep <indexterm remap="idx"><primary>grep</primary></indexterm>:&&lt;;your&&lowbar;;expression&&gt;;" from the right button popup menu.
This will ask grep <indexterm remap="idx"><primary>grep</primary></indexterm> to search for the selection in your project directory's files and will show the results immediately. Switching to
the result works as described above. From within the editor window, it lasts to place the cursor over a word and start searching; the
word under the cursor will be the search pattern.</para>
</sect2>

<sect2 id="searching-within-documentation">
<title>Searching within Documentation</title>

<para>While working on a project, you often need to have information about the parameters of member functions <indexterm remap="idx"><primary>member functions</primary></indexterm> you want to use- most
often you remember the function's name that matches your needs, but the parameters are a very hard thing to keep in mind.
Therefore, and for other purposes that may occur, KDevelop contains a search functionality that combines searching expressions
that appear in your files with the documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm>. To make use of this search functionality, you should have set up the
documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm> correctly and created the search database. For invoking a search through the documentation, do the
following:</para>

<para><orderedlist><listitem>
<para>place your cursor at the word you want to search or mark an expression</para>
</listitem>
<listitem>
<para>select "Search Marked Text" from the Help-menu <indexterm remap="idx"><primary>Help-menu</primary></indexterm> or press the right mouse button to open the context menu; then select
"Look Up: "expression".</para>
</listitem>
<listitem>
<para>after the search result <indexterm remap="idx"><primary>search result</primary></indexterm> page is displayed in the documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm>, select the page that you think could contain the
information you need.</para>
</listitem>
<listitem>
<para>the selected documentation page is displayed and your search result <indexterm remap="idx"><primary>search result</primary></indexterm> is marked. To display the next result within the same
documentation page, press F3.</para>
</listitem>
</orderedlist>
</para>

<para>This allows you to easily find the information you need. For using the results, the documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm> allows marking a
selection and copying it to the clipboard. Then return to the file you're editing and select "Paste" from the "Edit"-menu.</para>

<para>For a full description on how to use the Documentation, see <link linkend="Using-the-Searchindex">Using the Searchindex</link>.</para>
</sect2>

<sect2 id="replacing-text">
<title>Replacing Text</title>

<para>For replacing an expression, select "Search and Replace" from the "Edit"-menu. The "Search and Replace"-dialog lets you specify
the expression to be replaced as well as the replacement expression. Then press OK. The first expression which is found will be
marked, so you can see where the expression is and in which context. Then you can specify by a dialog if the expression shall be
replaced or not. When the search is finished by reaching the end of the current file, you will be asked if you want to start the
search again from the beginning. If you're finished, select "Cancel".</para>
</sect2>
</sect1>

<sect1 id="printing">
<title>Printing</title>

<para>As KDevelop is designed to give developers the best access to files and information to reduce development cycles, it also contains
a new printing <indexterm remap="idx"><primary>printing</primary></indexterm> utility which makes use of two common printing <indexterm remap="idx"><primary>printing</primary></indexterm> programs available for Unix-Systems, <emphasis>a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm></emphasis> (ASCII-to-Postscript) and
<emphasis>enscript <indexterm remap="idx"><primary>enscript</primary></indexterm></emphasis>. Besides these, you can also print by directly using lpr (the lineprinter device). As using a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm> or enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> offers the
most options towards printing <indexterm remap="idx"><primary>printing</primary></indexterm>, you should install either one of these on your system; both programs are usually shipped with
distributions, so you shouldn't have any problem to get them. But before printing <indexterm remap="idx"><primary>printing</primary></indexterm>, you should have a look at the available
configuration dialog <indexterm remap="idx"><primary>configuration dialog</primary></indexterm>s to prepare the output <indexterm remap="idx"><primary>output</primary></indexterm> according to your needs. The following section describes how to configure KDevelop for
printing <indexterm remap="idx"><primary>printing</primary></indexterm> files.</para>

<sect2 id="configuring-the-printer">
<title>Configuring the Printer</title>

<para>The printing <indexterm remap="idx"><primary>printing</primary></indexterm> programs can both be configured by selecting "Print" from the "File"-menu <indexterm remap="idx"><primary>"File"-menu</primary></indexterm>; on the printing <indexterm remap="idx"><primary>printing</primary></indexterm> dialog,
select the program by the drop-down-menu in the left upper corner. Then press the "Options" button on the right. This opens the
configuration for the selected program that will be used. Another way to configure the programs are selecting "Printer
Configuration..." from the "Options"-menu; then select "a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm>" or "enscript <indexterm remap="idx"><primary>enscript</primary></indexterm>".</para>

<sect3 id="the-a2ps-a2ps-configuration-options">
<title>The a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm> Configuration Options</title>

<sect4 id="printing-0">
<title>Printing</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">header:</emphasis>  adds a header frame to the page</para>
</listitem>
<listitem>
<para><emphasis remap="bf">filename:</emphasis>  if checked, the header frame will contain the filename as its text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">login:</emphasis>  adds the User ID to the right upper corner of the page</para>
</listitem>
<listitem>
<para><emphasis remap="bf">borders:</emphasis>  adds frame borders to the text page</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Date & Time:</emphasis>  adds the printing <indexterm remap="idx"><primary>printing</primary></indexterm> date and time</para>
</listitem>
<listitem>
<para><emphasis remap="bf">align files:</emphasis>  prints out files on the same page, available for two-page printing <indexterm remap="idx"><primary>printing</primary></indexterm> mode</para>
</listitem>
<listitem>
<para><emphasis remap="bf">set TAB size:</emphasis>  sets the TAB size for printing <indexterm remap="idx"><primary>printing</primary></indexterm> TABs</para>
</listitem>
<listitem>
<para><emphasis remap="bf">headertext:</emphasis> available, if filename is deselected and allows inserting another text to the header frame</para>
</listitem>
<listitem>
<para><emphasis remap="bf">fontsize:</emphasis>  sets the fontsize for the text. The default fontsize is 9</para>
</listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="textprinting-printing">
<title>Textprinting <indexterm remap="idx"><primary>printing</primary></indexterm></title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">cut lines:</emphasis>  cuts the line's contents if the line is too large to be printed. If deselected, lines will be broken.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">interpret TAB, BS and FF:</emphasis> interpret TAB, Backspace and FastForward characters.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">replace non-printing <indexterm remap="idx"><primary>printing</primary></indexterm> character by space:</emphasis> if the file contains non-printable characters, those will be replaced by space
characters.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">print non-ASCII character as ISO-Latin 1:</emphasis> prints characters not included in the ASCII format in ISO-Latin 1 mode output <indexterm remap="idx"><primary>output</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">bold font:</emphasis> prints the whole text in bold font mode.</para>
</listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="numbering">
<title>Numbering</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">numbering lines:</emphasis>  numbers all lines top-down if enabled</para>
</listitem>
<listitem>
<para><emphasis remap="bf">numbering pages:</emphasis> allows selecting page-numbering mode by:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">file single:</emphasis> numbers each file's pages beginning with 1</para>
</listitem>
<listitem>
<para><emphasis remap="bf">file together:</emphasis>  appends all following pages after the first for page numbering</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">lines per page:</emphasis>  sets the maximum lines per page to be printed.</para>
</listitem>
</itemizedlist>
</para>
</sect4>
</sect3>

<sect3 id="the-enscript-enscript-configuration-options">
<title>The enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> Configuration Options</title>

<sect4 id="header">
<title>Header</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Fancy Header:</emphasis> adds a fancy header</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Header Text:</emphasis> enables adding a header text
<itemizedlist>
<listitem>
<para><emphasis remap="bf">text:</emphasis> sets the text's contents</para>
</listitem>
<listitem>
<para><emphasis remap="bf">position:</emphasis> sets the text's position to left, center or right</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Login:</emphasis> add the UserID to the header
<itemizedlist>
<listitem>
<para><emphasis remap="bf">login:</emphasis> enables adding UserID</para>
</listitem>
<listitem>
<para><emphasis remap="bf">position:</emphasis> sets the position for the UserID</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Filename:</emphasis> add the filename to the header
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Size of filename:</emphasis> add filename as full or short, meaning full path or filename only</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Position:</emphasis> sets the position for the filename</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Hostname:</emphasis> add the hostname to the header
<itemizedlist>
<listitem>
<para><emphasis remap="bf">hostname:</emphasis> enables adding hostname</para>
</listitem>
<listitem>
<para><emphasis remap="bf">size of hostname:</emphasis> sets the size for hostname</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Position:</emphasis> sets the position for hostname</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="date-time">
<title>Date & Time</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Current Date:</emphasis> include the current date
<itemizedlist>
<listitem>
<para><emphasis remap="bf">current date:</emphasis> enables current date adding</para>
</listitem>
<listitem>
<para><emphasis remap="bf">position:</emphasis> sets the position for the date entry</para>
</listitem>
<listitem>
<para><emphasis remap="bf">format:</emphasis> sets the date format</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Modification Date:</emphasis> include the last modification date
<itemizedlist>
<listitem>
<para><emphasis remap="bf">modification date:</emphasis> enables modification date adding</para>
</listitem>
<listitem>
<para><emphasis remap="bf">position:</emphasis> sets the position for modification date entry</para>
</listitem>
<listitem>
<para><emphasis remap="bf">format:</emphasis> sets the date format</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Current Time:</emphasis> include current time
<itemizedlist>
<listitem>
<para><emphasis remap="bf">current time:</emphasis> enables current time adding</para>
</listitem>
<listitem>
<para><emphasis remap="bf">AM/PM:</emphasis> use AM/PM or 24h format</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Position:</emphasis> sets the position for the time entry</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Format:</emphasis> sets the time format</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Modification Time:</emphasis> include the last modification time
<itemizedlist>
<listitem>
<para><emphasis remap="bf">modification time:</emphasis> enables adding modification time</para>
</listitem>
<listitem>
<para><emphasis remap="bf">AM</emphasis>PM:/ use AM/PM or 24h format</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Position:</emphasis> sets the position for the time entry</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Format:</emphasis> sets the time format</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="layout">
<title>Layout</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Numbering & Border:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">numbering lines:</emphasis> adds line numbers to the document for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">borders:</emphasis> adds a border to the pages for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">numbering pages:</emphasis> numbers pages for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">align files:</emphasis> appends files for page numbering</para>
</listitem>
<listitem>
<para><emphasis remap="bf">lines per page:</emphasis> the maximum value for lines per page</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Format and TAB:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">set TAB size:</emphasis> sets the TAB size for interpreting TABs</para>
</listitem>
<listitem>
<para><emphasis remap="bf">font for header:</emphasis> sets the font used for the header text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">font for body:</emphasis> sets the font for the body text (file contents)</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Textprinting <indexterm remap="idx"><primary>printing</primary></indexterm>:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">cut lines:</emphasis> cuts the lines if too large. If unchecked, lines are broken</para>
</listitem>
<listitem>
<para><emphasis remap="bf">replace non-printing <indexterm remap="idx"><primary>printing</primary></indexterm> character by space:</emphasis> replaces characters that the printing <indexterm remap="idx"><primary>printing</primary></indexterm> charset doesn't support by space characters</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Other Options:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">table of contents:</emphasis> adds a table of contents page that contains information about printed files, page numbers etc.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Highlight bars:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">highlight bars:</emphasis> highlights rows for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">cycle fo change:</emphasis> sets the number of rows to change highlight style</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Wrapped line:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">mark wrapped lines:</emphasis> lines that are broken get marked for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">value for wrapped line:</emphasis> the preset value for the new line the line is broken into.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</sect4>

<sect4 id="underlay">
<title>Underlay</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Text:</emphasis> sets the text to underlay</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Position:</emphasis> sets the position of underlay text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Font:</emphasis> sets the font used for the underlay</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Angle:</emphasis> sets the angle for the underlay text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Gray scaling:</emphasis> sets the grayscaling for the underlay text</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Style:</emphasis> sets the underlay text to be printed as outlined or filled</para>
</listitem>
</itemizedlist>
</para>
</sect4>
</sect3>
</sect2>

<sect2 id="the-printing-dialog">
<title>The Printing Dialog</title>

<sect3 id="direct-printing-options">
<title>Direct Printing Options</title>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Program:</emphasis> sets the printing <indexterm remap="idx"><primary>printing</primary></indexterm> program to be used for printing <indexterm remap="idx"><primary>printing</primary></indexterm>: a2ps <indexterm remap="idx"><primary>a2ps</primary></indexterm>, enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> or lpr</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Printer:</emphasis> sets the printer to be used for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">Output location:</emphasis> for printing <indexterm remap="idx"><primary>printing</primary></indexterm> into a file, select the output <indexterm remap="idx"><primary>output</primary></indexterm> location</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Orientation:</emphasis> sets the orientation for printing <indexterm remap="idx"><primary>printing</primary></indexterm>, either landscape or portrait</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Copy:</emphasis> sets the amount of copies to be made per page</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Paper Size:</emphasis> sets the paper size to be used</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Output Format:</emphasis> for using enscript <indexterm remap="idx"><primary>enscript</primary></indexterm> as printing <indexterm remap="idx"><primary>printing</primary></indexterm> program, you can choose between postscript or html printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">Default Printsettings:</emphasis> sets the default settings to use for printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">Outprinting <indexterm remap="idx"><primary>printing</primary></indexterm>:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Page Printing:</emphasis> sets one or two pages on one sheet</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Pages:</emphasis> select all,odd or even for using enscript <indexterm remap="idx"><primary>enscript</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">Pretty Print:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">pretty-print:</emphasis> enables pretty-print mode for enscript <indexterm remap="idx"><primary>enscript</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">color:</emphasis> use color printing <indexterm remap="idx"><primary>printing</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">Pretty Print Mode:</emphasis> sets the printing <indexterm remap="idx"><primary>printing</primary></indexterm> mode dependent on your file format</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</sect3>

<sect3 id="file-selection">
<title>File Selection</title>

<para>The file selection dialog is accessed by the "Files" button on the printing <indexterm remap="idx"><primary>printing</primary></indexterm> dialog. The file selection allows specifying which files to
print out by certain criteria:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">File Selection:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">current:</emphasis> the currently opened file visible in the editing window</para>
</listitem>
<listitem>
<para><emphasis remap="bf">all in project:</emphasis> all files included in the project currently opened</para>
</listitem>
<listitem>
<para><emphasis remap="bf">self chosen files:</emphasis> allows choosing the files to be printed by file-selection</para>
</listitem>
<listitem>
<para><emphasis remap="bf">all cpp files:</emphasis> prints out all source files of the project</para>
</listitem>
<listitem>
<para><emphasis remap="bf">all headers:</emphasis> prints out all header files of the project</para>
</listitem>
<listitem>
<para><emphasis remap="bf">changed files:</emphasis> allows specifying files that are changed in a timespan:</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Changed Files:</emphasis>
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Between:</emphasis> specifies all files changed after:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Date:</emphasis> the date the files were changed</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Time:</emphasis> the time the files were changed</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">And:</emphasis> specifies all files changed before:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Date:</emphasis> the date the files were changed</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Time:</emphasis> the time the files were changed</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Self Chosen Files:</emphasis> available if self chosen files is selected (see above)
<itemizedlist>
<listitem>
<para><emphasis remap="bf">add:</emphasis> press this to add a file selected for printing <indexterm remap="idx"><primary>printing</primary></indexterm> in the lineedit field left</para>
</listitem>
<listitem>
<para><emphasis remap="bf">delete:</emphasis> deletes a selected file from the printing <indexterm remap="idx"><primary>printing</primary></indexterm> list</para>
</listitem>
<listitem>
<para><emphasis remap="bf">clear:</emphasis> clears the printing <indexterm remap="idx"><primary>printing</primary></indexterm> list</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</sect3>

<sect3 id="print-preview">
<title>Print Preview</title>

<para>Print Preview is available for you to control how the output <indexterm remap="idx"><primary>output</primary></indexterm> will look like. Therefore, KDevelop uses the program <emphasis>ghostview</emphasis> or
<emphasis>kghostview</emphasis>. When the preview-button was pressed on either printing <indexterm remap="idx"><primary>printing</primary></indexterm> dialog, you will be presented a template output <indexterm remap="idx"><primary>output</primary></indexterm> that shows you
the effect of the currently set options.</para>
</sect3>
</sect2>
</sect1>
</chapter>

<chapter id="proyectos">
<title>Proyectos</title>

<sect1 id="projecttypes">
<title>Projecttypes</title>

<sect2 id="programas-1">
<title>Programas</title>

<para>KDevelop creates a projectfile with the .kdevprj ending. This file contains all your project information, so be careful not to
delete it. It is stored in the project's base directory and has to be opened to load the project. The projectfile keeps all
information for your files like the file properties, install path, distribution status and compiler options <indexterm remap="idx"><primary>compiler options</primary></indexterm> (CXXFLAGS). Setting
file properties allows you to keep track of where the files should go.</para>

<para>With asistente de aplicaciones <indexterm remap="idx"><primary>asistente de aplicaciones</primary></indexterm>, you can create a new application project according to your choice of application type. For now, KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm>
generates four kinds of frame applications, as:</para>

<para><itemizedlist>
<listitem>
<para>a single document interface (SDI) KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>-application including a menubar, a toolbar and a statusbar. It contains basic control
resource management to allow extending the frame application into a unique KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> application. The application frame also
contains statusbar help messages as known from commercial products just like KDevelop itself. From the programmer's point of view,
it is based on three application-specific classes <indexterm remap="idx"><primary>classes</primary></indexterm> leaning on the MVC-concept (Model-View-Controller). Technically, the base
classes <indexterm remap="idx"><primary>classes</primary></indexterm> may not be viewed that way, but it's construction is at least created most logical to create applications with a GUI <indexterm remap="idx"><primary>GUI</primary></indexterm>.
</para>
</listitem>
<listitem>
<para>a KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>-based application frame window. This application type offers most flexibility to those wanting to develop their
program from scratch, but can also be used as a basis for developing wizard applications or modules.
</para>
</listitem>
<listitem>
<para>a Qt-only based program framework. For those programmers who want to use the Qt-library <indexterm remap="idx"><primary>Qt-library</primary></indexterm> as the GUI <indexterm remap="idx"><primary>GUI</primary></indexterm> interface alone, we
tried to offer you a smart framework to support your application development. As Qt programming is fully supported, you should
have no problems to create a full-functional application by using Qt only.
</para>
</listitem>
<listitem>
<para>a C++ program framework. This application type is intended for those wanting to write a terminal based C++ program. Just
remove the "Hello World" line in main() and construct your classes <indexterm remap="idx"><primary>classes</primary></indexterm> the same way with KDevelop as for KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> applications.</para>
</listitem>
<listitem>
<para>a C program framework for C programmers. This is as well a terminal based application but only uses the C compiler.</para>
</listitem>
</itemizedlist>
</para>

<para>Additionally, KDevelop enables you to work with already existing projects. Those can have any options set by the programmer himself by
configure and Makefiles. As far as the execution and the build-process is concerned, the current state only allows the same structure
as for the other baseclasses. Create a custom project with the application wizard and add your files to the project to allow scanning
by the classbrowser.</para>

<para>To ensure the build process, your custom project has to have all sources in a subdirectory matching the lowercase name of your project;
the execution of the binary is also restricted to this lowercase project name.</para>

<para>Mind that KDevelop does not write any information into Makefiles or configuration files. You are responsible for any project behavior
and build settings yourself.</para>
</sect2>

<sect2 id="libraries">
<title>Libraries</title>

<para>A general project-type to create libraries is not available at the moment. Anyway, building libraries is not impossible with KDevelop.
Here are a few guidelines and workarounds:</para>

<para><itemizedlist>
<listitem>
<para>Whenever your project subdirectory gets another subdirectory that contains source files, KDevelop will build a static library of
these. That means static libraries are already supported by automatic creation in order to sort project sourcefiles.
Mind that the static library is part of the binary later and won't get installed.</para>
</listitem>
<listitem>
<para>to create a shared library, you have the option to create another project subdirectory. The sourcefiles that are created in this
subdirectory are included in the project and are therefore available in the classviewer as root classes. To create the shared library,
the <ulink url="programming/index-19.html">KDevelop Programming Handbook</ulink> offers a Makefile.am template. If the subdirectory's
Makefile is added to the configure.in script, you only have to run "Autoconf and automake" and "Configure" to create the Makefiles. The
build instead is only possible from a make-command within the subdirectory, as KDevelop invokes the build from within the original
project subdirectory. Another possibility to create shared libraries is changing the Makefile.am of the original project-subdirectory
according to the template in the Programming Handbook by hand following the rules for project modifications explained in chapter <link linkend="Project-Hacking">Project Hacking</link>.</para>
</listitem>
<listitem>
<para>for installing a shared library, you have to watch the KDE-File-system Standard as explained in <ulink url="programming/index-13.html">The KDevelop Programming Handbook</ulink></para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="multiple-targets">
<title>Multiple Targets</title>

<para>For some projects, the facilities of KDevelop at it's current state will not last. Those are projects that include multiple
targets like packages containing several applications. As commands like "Execute" require that only one target is build by the
developer, those types of projects are only supported in the way that you have to write your own entries to the Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>'s and
creating your directories for the additional libraries or binaries to build. Nevertheless, a build-process always invokes your
make-program independent from what actually the targets are; so these functions still can be used (with the restriction that the build
is invoked from the main project subdirectory).</para>

<para>Another way to still work with this type and to still have access to the binaries themselves are creating empty projects and move their
subdirectories in conjunction with the project files <indexterm remap="idx"><primary>project files</primary></indexterm> to the directory containing all sources later. Then you could load each
target independently by its project file; this also allows executing and debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> the target.</para>

<para>Multiple binaries or libraries within the main project subdirectory are possible with following the rules explained in section <link linkend="Project-Hacking">Project Hacking</link> and the following guidelines for editing the main project's subdirectory Makefile.am (all
modifications outside the KDevelop write area):</para>

<para><itemizedlist>
<listitem>
<para>add your target to the bin&&lowbar;;PROGRAMS if it is an executable</para>
</listitem>
<listitem>
<para>add your library declaration line if it is a shared library</para>
</listitem>
<listitem>
<para>add the same declarations like the original project binary is build:
<itemizedlist>
<listitem>
<para>newtarget&&lowbar;;METASOURCES</para>
</listitem>
<listitem>
<para>newtarget&&lowbar;;LD&&lowbar;;FLAGS</para>
</listitem>
<listitem>
<para>DISTCLEANFILES</para>
</listitem>
<listitem>
<para>copy the messages: entry for the original binary and replace target&&lowbar;;SOURCES with newtarget&&lowbar;;SOURCES, target.pot with
newtarget.pot</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>add your sources like the KDevelop write area contains outside the write area for your binary or library</para>
</listitem>
<listitem>
<para>for installing static libraries, create the library with KDevelop's auto-creation inside subdirectories. Then modify the
Makefile.am outside the write area according to the needed settings</para>
</listitem>
</itemizedlist>
</para>
</sect2>
</sect1>

<sect1 id="new-project-new-projects">
<title>New Project <indexterm remap="idx"><primary>New Project</primary></indexterm>s</title>

<para>The KDevelop Application Wizard allows the creation of four different types of projects, constructing a framework for each. All
projects use the GNU standard development tools as described in the requirements section of this handbook. For KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> applications,
the wizard offers two different frameworks, the KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>-Application, providing a complete application with base classes <indexterm remap="idx"><primary>classes</primary></indexterm> for
document type, view and application. This includes the creation of a menubar, toolbar and statusbar, the mainwindow inherits the
KTMainWindow class. The KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>-Mini-Application only gives a view which is empty. This type of project can be used for the creation
of small desktop tools or other simple applications without too much change on the existing code provided by the framework. A
Qt-Application offers the creation of a Qt-only program if you wish no dependencies towards the KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm> for end-users.
The Qt-Application also is created by using tree base classes <indexterm remap="idx"><primary>classes</primary></indexterm> like the KDE-standard-Application and provides a menubar, toolbar
and statusbar.</para>

<para>The C++ -Application type offers a framework for creating commandline applications.  It is ready to run and by default displays
"Hello World" as the only action.  This may be useful for C++ learners who would like to program applications without using a GUI <indexterm remap="idx"><primary>GUI</primary></indexterm>
first or for those working on commandline programs written in C++ or C. C programmers can also take advantage of the C-only project,
which requires any C-compiler at the minimum.</para>

<para>The wizard asks for your project name, version and the location where the project directory will be build.  Further, your Name and
Email address are asked for inserting them in header and cpp templates on top of your source files as well as for entries in the
*.lsm file.</para>
</sect1>

<sect1 id="opening-and-closing-of-projects">
<title>Opening and Closing of Projects</title>

<para>KDevelop is by default configured to open the last project loaded when starting. This allows a fast start, but you may want to
change that to just start the IDE without any project. To prevent the default behavior, disable the "Load last project" option in
the <link linkend="Configuracin-de-KDevelop">Configuración de KDevelop</link> dialog.</para>

<para>To open another project, select "Open" from the "Project" menu or press the "Open Project" button on the toolbar. In case you've
got another project currently open, this will be closed. If your current project then contains files that aren't saved, you are
asked to save all changed files. Thereby, you can select which file to save and which you want to close without saving, or to save
all at once.</para>

<para>Then you get an "Open Project" dialog, where you can change to the directory containing the project file to be loaded. KDevelop
project files <indexterm remap="idx"><primary>project files</primary></indexterm> have the <emphasis>*.kdevprj</emphasis> mime-type which is also displayed by a project icon. Select the project file and press
"Open". When loading a project, the Class Browser scans all files and builds the initial classtree, so you can start working on the
project by using the Class Browser directly.</para>

<para>Another comfortable way to open a project is to select the project file in the KFM, the KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> File Manager. This will start
KDevelop with loading the selected project file. You could as well open a project by commandline, entering <literal remap="tt">kdevelop
projectname.kdevprj</literal>.</para>

<para>When closing KDevelop, your project file will be saved automatically and the IDE detects if you have changed any project files.
Then you will be asked to save any changes before exiting. The available options for closing are the same than for closing a
project before loading another.</para>
</sect1>

<sect1 id="editing-a-project">
<title>Editing a Project</title>

<para>After you created a new project with the KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm>, the usual task is to extend the project by editing the already created
sources and adding classes <indexterm remap="idx"><primary>classes</primary></indexterm>, pixmaps <indexterm remap="idx"><primary>pixmaps</primary></indexterm>, pictures and whatelse you project needs. Now, editing a project means that you can change the
default project after its generation by menus and dialogs according to your needs. The next section therefore describes how you
can add existing files and classes <indexterm remap="idx"><primary>classes</primary></indexterm> as well as creating new files. This is needed for building your project, but this won't help
you for the installation process by the end-user. Therefore, section <link linkend="Setting-Project-File-Options">Setting Project File Options</link> describes how to set File Properties especially for additional files that you want make to install, like documentation or
pixmaps <indexterm remap="idx"><primary>pixmaps</primary></indexterm>.
Another part in project maintaining is adding translations for applications that support internationalization, which is described
in <link linkend="Adding-Translations">Adding Translations</link>.</para>

<para><link linkend="Extending-the-Project-Documentation">Extending the Project Documentation</link> covers questions on how to create a good set
of documentation for online help enabling the end-user to help himself in case of troubles as well as how to use your product.</para>

<para>Finally, <link linkend="Project-Hacking">Project Hacking</link> describes how you can eventually work around the KDevelop project
management in special cases.</para>

<sect2 id="adding-files-and-classes">
<title>Adding and Removing Files and Classes</title>

<para>Adding a new file is often used when you think that you should separate your class implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> file into several ones. Then you
need to create an new file which will contain the part of the class implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> you want to move. You can do this by choosing
"New" from the "File"-menu <indexterm remap="idx"><primary>"File"-menu</primary></indexterm>, opening the "New File <indexterm remap="idx"><primary>New File</primary></indexterm>" dialog. This enables you to specify the file-type, name and the
location. When entering the filename, KDevelop automatically enters the extension for you, but you can as well change the extensions
towards your own preferences. Further, you can include the header template for sourcefiles, so you don't have to copy this into your
new file yourself. Also, you can decide, if the file is included in the project or not. Mind that this doesn't cover the installation
destination; this has to be configured later by setting the file preferences.</para>

<para>After the new file has been created, the project file will be updated as well as the according Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>'s.
To add a complete class to your project, you can construct a new class with the Classgenerator which is invoked by "New Class <indexterm remap="idx"><primary>New Class</primary></indexterm>" from
the Project-menu.</para>

<para>In case you have an existing project and you want to add certain classes <indexterm remap="idx"><primary>classes</primary></indexterm> that you want to re-use in your project, select "Add
File(s) to Project..." from the "Project"-menu <indexterm remap="idx"><primary>"Project"-menu</primary></indexterm>. Select "Add existing files", which will open a dialog to let you specify which
files will be added to the project and the destination directory. Mind that the files will be copied into the specified directory and
added to the project. You should call "Make" after adding sources; then your added files will be included in the build-process. In
case you want to add e.g. pixmaps <indexterm remap="idx"><primary>pixmaps</primary></indexterm> that have to be installed by the end-user, you should update the File Properties for the added
file and specify the installation path (see <link linkend="Setting-Project-File-Options">Setting Project File Options</link></para>

<para>To add a file to the project that is already in the project directory, go to the RFV <indexterm remap="idx"><primary>RFV</primary></indexterm>, where all project-included files are
displayed by their project status by a red ! over the file icon. Select the file you want to add to the project (which has a normal
file icon) and press the right mouse button to get the popup-menu. Then select "Add".</para>

<para>Files can also be removed from your project. This could be needed in cases where you don't want to use pre-generated files that
are already given by the KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm>. To remove a file, you have additionally the option between removing a file from the project
or delete it completely. To remove a file from the project, select the file in the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm> or the RFV <indexterm remap="idx"><primary>RFV</primary></indexterm>, press the right mouse button
and select "remove". To delete a file, select "delete physically".</para>
</sect2>

<sect2 id="setting-project-file-options">
<title>Setting Project File Options</title>

<para>The file properties dialog can be accessed via the project menu or within the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm> by a right mouseclick.  It shows the project
files in groups as they are sorted in the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm> and displays the file properties like file size, file type and if the file is
included in the project as well as the installation path if the file is going to be installed by the end-user's make install
command.  It is important for documentation files as well as pixmaps <indexterm remap="idx"><primary>pixmaps</primary></indexterm> to specify the location where the files should go when the
project is build and installed by end users, so you have to set up those locations. For standard KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> location macros you should
look in your Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> where the location macros are specified.</para>
</sect2>

<sect2 id="adding-translations">
<title>Adding Translations</title>

<para>As KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> allows configuring your desktop and the behavior of your applications, you also have the option to choose the language
that your application uses, in regards of the use of online-documentation as well as the application's look. For documentation files,
this seems a trivial task. You would add a subdirectory labeled by the desired language, e.g. <literal remap="tt">de</literal> for German, to the
<literal remap="tt">docs</literal> directory of your project and copy the english documentation into that directory. Then you would generate the
documentation and set all project file options for the installation directories. Then you could start translating the SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> file to
your desired language and regenerate the documentation; then you're done.
For the application, this seems a bit more difficult for the programmer. Now, we want to explain how to enable
internationalization support for your application and how to add the languages you want to support.</para>

<para>First, you have to enclose all visible strings of your application that appear in bars or dialogs with the <literal remap="tt">i18n <indexterm remap="idx"><primary>i18n</primary></indexterm>()</literal> macro.
This macro is a replacement for the function <literal remap="tt">klocale-&gt;translate()</literal> of the KLocale class and much easier to use. As this macro
is declared in the <literal remap="tt">kapp.h</literal> include file, you have to add <literal remap="tt">&&num;;include &&lt;;kapp.h&&gt;;</literal> to the source file or the class
declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> file of the class that makes use of the macro. Also it should be mentioned, that although <literal remap="tt">i18n <indexterm remap="idx"><primary>i18n</primary></indexterm>()</literal> is a macro and
therefore you could think about using the original function, this won't work because the strings that are set up for translation
have to be read out of the sources and get stored in the application's translation file (&&lt;;YourApp&&gt;;.pot in the /po
subdirectory). This task is done by the program xgettext, and to do this, you would enter <literal remap="tt">make messages <indexterm remap="idx"><primary>messages</primary></indexterm></literal> in your project
directory containing the sources. As xgettext depends on the <literal remap="tt">i18n <indexterm remap="idx"><primary>i18n</primary></indexterm>()</literal> macro, the original function won't do the job.</para>

<para>For translations themselves, you first have to create the message file containing all strings that are used in your sources with
the <literal remap="tt">i18n <indexterm remap="idx"><primary>i18n</primary></indexterm>()</literal> macro. This can be done by choosing "Make messages <indexterm remap="idx"><primary>messages</primary></indexterm> and merge" from the Build-menu.
Then you have to add the languages that your application wants to support. Therefore, select "Add Translation File" from the
Project-menu. This opens a language selection dialog. Select the language and press OK. This will build the ASCII file containing
entries for the filename of the string and the line where the original string is placed. Then you will see a <literal remap="tt">msgid</literal> line
containing the string to translate, followed by <literal remap="tt">msgstr</literal>. The msgstr line is mostly empty except for the translations already
provided by the KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm>. Those have to be filled with the according translations of your language.</para>

<para>You could think about writing the translations by hand, which can also be done. But the KDE-SDK <indexterm remap="idx"><primary>KDE-SDK</primary></indexterm> offers the use of the program
KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm>, which ready the already existing files from other applications installed on the system, so you can reuse already
translated strings to support your language.</para>

<para>To access KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm>, the easiest way is selecting a &&lt;;language&&gt;;.po file in the /po directory either in the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm> or in the
RFV <indexterm remap="idx"><primary>RFV</primary></indexterm>. This opens KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm> and lets you do the translating easily. Mind that you have to set up KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm>'s properties
yourself to include the author name and the language as well as the destination file. KTranslator <indexterm remap="idx"><primary>KTranslator</primary></indexterm> by default only opens your
translation file.</para>

<para>For all translation files, <literal remap="tt">make <indexterm remap="idx"><primary>make</primary></indexterm></literal> uses the program <literal remap="tt">msgfmt</literal> to format your message files to use with the binary, but you
don't have to take care for that, as well as specifying the destination directory for installing the translation files; this is
all done by KDevelop automatically.</para>

<para>For more information about internationalization support, see <ulink url="http://www.kde.org">\|\|</ulink>; a lot of people are doing translations for
you to support their language. You will find a list of email-addresses of the translators you could write to and who will help you with
this. Also read <link linkend="El-editor-de-dilogos">El editor de diálogos</link> and <ulink url="programming/index-11.html">The KDevelop Programming Handbook</ulink> where questions about internationalization are covered again.</para>
</sect2>

<sect2 id="extending-the-project-documentation">
<title>Extending the Project Documentation</title>

<para>All projects created with KDevelop contain a pre-configured documentation, which already contains standard chapters for
installation, project name and version as well as the author name and email-address. As KDevelop uses SGML <indexterm remap="idx"><primary>SGML</primary></indexterm>-templates, it's very
easy to extend the documentation to a full descriptive helpsystem. The only thing you have to do is editing the SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> file, placed
in docs/en as index.sgml. The reference documentation included with your sgml-tools package can be added to the Helpbrowser <indexterm remap="idx"><primary>Helpbrowser</primary></indexterm> and
allow you direct access to special tags as well as a short description of how to extend the documentation. SGML <indexterm remap="idx"><primary>SGML</primary></indexterm> has a lot of
advantages, whereas KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> makes wide use by this documentation type with the additional KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm> tool. This creates the typical
KDE <indexterm remap="idx"><primary>KDE</primary></indexterm>-style documentation and makes it look nicer. Anyway, the sgmltools alone are enough to produce a html output <indexterm remap="idx"><primary>output</primary></indexterm> that is already
included in your application. To create the documents using KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm>, install the tool and run "Make User-Manual" from the
Build-menu. The Documentation Browser allows a direct controlling of the output <indexterm remap="idx"><primary>output</primary></indexterm> by selecting "Project User-Manual" from the
Help-menu or the according icon in the DOC <indexterm remap="idx"><primary>DOC</primary></indexterm>-tree. Then you can browse the documentation online in KDevelop and have a better
overview by the output <indexterm remap="idx"><primary>output</primary></indexterm> over errors <indexterm remap="idx"><primary>errors</primary></indexterm> that result in missing tags.</para>

<para>Now, while extending the documentation, you can't avoid that additional files are produced that have to be included into the
project as each <literal remap="tt">sect</literal>-tag creates a new HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> file. The output <indexterm remap="idx"><primary>output</primary></indexterm> generated by the KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm> is already included in the project,
so you don't have to care for their installation path. What you have to watch out for is any index-xx.html file, where xx is
higher than 6 (as the first six pages are already included in the project). After generating the documentation, switch to the RFV <indexterm remap="idx"><primary>RFV</primary></indexterm>
and browse to your documentation directory. Press the right mouse button over the files to add and select "Add". Further,
KSgml2Html <indexterm remap="idx"><primary>KSgml2Html</primary></indexterm> adds the KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> logo to the documentation directory. This file, <literal remap="tt">logotp3.gif</literal>, has to be added to the project as well.
Then you have to select the "File Properties" either from the Project menu or by the popup menu in the file-viewers. The easiest
way to set the installation path is to select a documentation file already set up for installation such as <literal remap="tt">index.html</literal>. You
see that <literal remap="tt">Install</literal> is checked and the Installdir+filename already contains the destination. Mark the Installdir and enter
Ctrl+C to copy the installation path to the clipboard. Then select the file you want to specify for installation. Enable
<literal remap="tt">Install</literal>, this will enable the installdir-entry field, already containing the filename. Place the cursor in front of the
filename and enter Ctrl+V to insert the clipboard contents (which was the installation path copied before). This is the fastest
way to specify the installation path. For more options about specifying installation destinations, see <ulink url="programming/index-14.html">The KDevelop Programming Handbook</ulink>.</para>
</sect2>

<sect2 id="project-hacking">
<title>Project Hacking</title>

<para>When working with a project, you should never edit the project file by hand. This will prevent KDevelop from loading your project
correctly under certain circumstances, as well as changes will not result in updating the Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>s. To change any settings for
your project, you have to use the given menu entries like e.g. for adding files or setting file properties. For experts that are
not comfortable with certain options for e.g. the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> or need additional project configuration, you should work yourself into
the Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> macros and add all changes in the Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>'s after the section separated with the entry "KDevelop write area".
As the GNU-tools are using the commands at the end of all macro files, you can overwrite KDevelop's settings with this. Mind that
this will prevent using KDevelop for any changes related to project configuration.</para>
</sect2>
</sect1>

<sect1 id="compiler-and-linker-linker-flags-for-project">
<title>Compiler and Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> Flags for Projects</title>

<para>Each new project contains all needed options for the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> and Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> as well as general settings. By default, your project
is set to use debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> by the -g flag, and warnings <indexterm remap="idx"><primary>warnings</primary></indexterm> are set to the standard, -Wall. This ensures you can debug your application
and detect constructions that may cause program errors <indexterm remap="idx"><primary>errors</primary></indexterm>. For some applications, you would need additional Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> or Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> flags,
especially if you're using libraries that are not currently included by the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm>. Then you need to update the project by
configuring the correct settings with the Project Options dialog. See <link linkend="Generacin-de-ejecutables">Generación de ejecutables</link> for more
information how and where to set Compiler Options, Warnings and Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> Options.</para>
</sect1>

<sect1 id="external-projects">
<title>External Projects</title>

<para>Existing projects can be converted to KDevelop projects by selecting "New" from the project menu.  The following dialog creates an
empty project file with your project name, version and type information as well as your name and email address.  Then copy all your
compilation and construction files to the new project directory and choose "Add Files" from the project menu.  The files selected
will be copied into your project directory and the Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>'s are updated.   Please change all Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> entries existing
before the conversion towards the now created entries done by KDevelop in the KDevelop area.  Test, if your program can still be
compiled and installed after the conversion to ensure the project's consistency.</para>
</sect1>
</chapter>

<chapter id="generacin-de-ejecutables">
<title>Generación de ejecutables</title>

<para>The Project Options dialog, accessed by the project menu, lets you specify all needed parameters for your project. Those will be
used for the Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm>'s and the configure <indexterm remap="idx"><primary>configure</primary></indexterm>.in script (e.g. version number change or compiler warnings <indexterm remap="idx"><primary>compiler warnings</primary></indexterm> ) and thereby set the
compilation preferences as well.. After changing the project options, you should invoke "make <indexterm remap="idx"><primary>make</primary></indexterm> clean" or "rebuild all" to compile
your project with the new options. Please mind that debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> is only available if the project options are set to create debugging <indexterm remap="idx"><primary>debugging</primary></indexterm>
information, the amount can be set with the debug level (0-3). If you add functions that belong to a library that is not included
in the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> flags, your program will not link correctly if those are not updated, so keep track of your library linking.</para>

<para>For a release build of your application or for distributing the sourcecode package, you should watch the following standard
settings:</para>

<para><itemizedlist>
<listitem>
<para>disable debugging <indexterm remap="idx"><primary>debugging</primary></indexterm></para>
</listitem>
<listitem>
<para>enable optimization and set optimization level to <emphasis remap="bf">-02</emphasis></para>
</listitem>
<listitem>
<para>set the compiler warnings <indexterm remap="idx"><primary>compiler warnings</primary></indexterm> to <emphasis remap="bf">-Wall</emphasis></para>
</listitem>
<listitem>
<para>for each new release, increase the version number and update the project.lsm file for version and requirements.</para>
</listitem>
</itemizedlist>
</para>

<sect1 id="general-options">
<title>General Options</title>

<para>The first page of the Project Options dialog sets the general options for your project. These are project name and number, the
handbook sgml file which is used for generating a set of HTML <indexterm remap="idx"><primary>HTML</primary></indexterm> files that are included in the project and specific information
about the author. The short description field is for additional information that you want to include like the program's purpose
and the like.</para>
</sect1>

<sect1 id="compiler-options">
<title>Compiler Options</title>

<para>The compiler options <indexterm remap="idx"><primary>compiler options</primary></indexterm> page sets the compiler flags towards your target, debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> and additional.</para>

<sect2 id="target">
<title>Target</title>

<para>The target box contains three options that can be set:</para>

<para>Target Machine: You have the choice to set the target machine option here by choosing between your machine (default) and i386v,
which is the option if you configure <indexterm remap="idx"><primary>configure</primary></indexterm>d your Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> as a cross-compiler for an Intel 386-compatible machine running System V. This
option sets the -b flag to the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm>. Usually you would leave this to the default.</para>

<para>only syntax-check: If checked, the -fsyntax-only flag is set. This means that the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> will check your code only for
correctness in regards to the syntax, but doesn't check anything beyond that.</para>

<para>Optimize: You can enable optimization for your build process by this option, meaning to set the -O flag. If not checked, the flag
is set to -O0, so no optimization will be used. If you enable optimization by checking this option, you can as well specify the
optimization level below from 1 to 3.</para>

<para>For a release version of your application, enable optimization and set the level to 2.</para>
</sect2>

<sect2 id="debugging">
<title>Debugging</title>

<para>Right of the Target box, you can see the debugging <indexterm remap="idx"><primary>debugging</primary></indexterm>-section. This means that you can set your Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> to include information for
debuggers within the final binary, so the programmer can follow the execution of the application with the debugger in direct
context to the sourcecode.</para>

<para>Enable debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> therefore sets the -g flag; the debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> level specifies the amount of information to be included in the binary.
Available are level 1 to 3 to choose from. Mind that the binary execution will be slower by setting any debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> option and that
the binary size will increase by the debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> level.</para>

<para>Generate extra information for gprof: sets the -pg flag, resulting that the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> will include information for the gprof
program that displays caller graphs of your program's function.</para>

<para>Store temporary intermediate files: sets the -save-temps flag. This will result in storing the usually temporary files produced by
the preprocessor and the assembler. A compilation of a sourcefile will therefore produce three output <indexterm remap="idx"><primary>output</primary></indexterm> files: an *.o file which is
the final output <indexterm remap="idx"><primary>output</primary></indexterm> of the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm>, an *.i file produced by the preprocessor and an *.s file as the output <indexterm remap="idx"><primary>output</primary></indexterm> of the assembler.</para>

<para>For a release of your project, disable any debugging <indexterm remap="idx"><primary>debugging</primary></indexterm>.</para>
</sect2>

<sect2 id="additional-options">
<title>Additional Options</title>

<para>The text entry field on the bottom is intended for you to manually set any flags for the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> by setting the CXXFLAGS
environment variable <indexterm remap="idx"><primary>variable</primary></indexterm> in the Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>s, so make sets the flags before the build process and reset them afterwards. For a complete
description of all available Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> flags you should see your Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> documentation; for gcc and egcs this can be done by
<emphasis remap="bf">man gcc</emphasis>; <emphasis remap="bf">man g++</emphasis> will show you information about the c++ script that is used to lead the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm>.</para>
</sect2>
</sect1>

<sect1 id="compiler-warnings">
<title>Compiler Warnings</title>

<para>The following gives a description about the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> warning options that can be set on page 3 of the project options dialog. The
explanations are taken from the man page for GCC, egcs version 1.1.1.
The warnings <indexterm remap="idx"><primary>warnings</primary></indexterm> themselves are diagnostic messages that indicate that constructions may cause errors <indexterm remap="idx"><primary>errors</primary></indexterm>.</para>

<para><variablelist>
<varlistentry>
<term>-Wall</term>
<listitem>
<para>Standard `-W' options combined.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-W</term>
<listitem>
<para>Compile with -W. This option sets options not included in -Wall which are very specific. Please read GCC-Info for more
information.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wtraditional</term>
<listitem>
<para>Warn about certain constructs that behave differently in traditional and ANSI C.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wundef</term>
<listitem>
<para>Warn if an undefined identifier is evaluated in an `&&num;;if' directive.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wshadow</term>
<listitem>
<para>Warn whenever a local variable <indexterm remap="idx"><primary>variable</primary></indexterm> shadows another local variable <indexterm remap="idx"><primary>variable</primary></indexterm>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wid-clash-LEN</term>
<listitem>
<para>Warn whenever two distinct identifiers match in the first len characters. This may help you prepare a program
that will compile with certain obsolete, brain-damaged Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm>s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wlarger-then-LEN</term>
<listitem>
<para>Warn whenever an object of larger than LEN bytes is defined.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wpointer-arith</term>
<listitem>
<para>Warn about anything that depends on the «size of» a function type or of void. GNU C assigns these types a
size of 1, for convenience in calculations with void * pointers and pointers to functions.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wbad-function-cast</term>
<listitem>
<para>Warn whenever a function call is cast to a non-matching type. For example, warn if <literal remap="tt">int malloc()</literal> is
cast to <literal remap="tt">anything *.</literal></para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wcast-equal</term>
<listitem>
<para>Warn whenever a pointer is cast so as to remove a type qualifier from the target type. For example, warn if a
const char * is cast to an ordinary char *.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wcast-align</term>
<listitem>
<para>Warn whenever a pointer is cast such that the required alignment of the target is increased. For example, warn
if a char * is cast to an int * on machines where integers can only be accessed at two- or four-byte boundaries.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wwrite-strings</term>
<listitem>
<para>Give string constants the type const char&&lsqb;;length] so that copying the address of one into a non-const char *
pointer will get a warning. These warnings <indexterm remap="idx"><primary>warnings</primary></indexterm> will help you find at compile time code that can try to write into a string constant,
but only if you have been very careful about using const in declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>s and prototypes. Otherwise, it will just be a nuisance;
this is why we did not make `-Wall' request these warnings <indexterm remap="idx"><primary>warnings</primary></indexterm>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wconversion</term>
<listitem>
<para>Warn if a prototype causes a type conversion that is different from what would happen to the same argument in the absence of a
prototype. This includes conversions of fixed point to floating and vice versa, and conversions changing the width or signedness
of a fixed point argument except when the same as the default promotion.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wsign-compare</term>
<listitem>
<para>Warn when a comparison between signed and unsigned values could produce an incorrect result when the signed
value is converted to unsigned.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Waggregate-return</term>
<listitem>
<para>Warn if any functions that return
structures or unions are defined or called. (In languages where you can return an array, this also elicits a warning.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wmissing-prototypes</term>
<listitem>
<para>Warn if a global function is defined without a previous prototype declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>. This warning is issued even if the definition
itself provides a prototype. The aim is to detect global functions that fail to be declared in header files.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wmissing-declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>s</term>
<listitem>
<para>Warn if a global function is defined without a previous declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>. Do so even if the definition
itself provides a prototype. Use this option to detect global functions that are not declared in header files. -Wredundant-decls
Warn if anything is declared more than once in the same scope, even in cases where multiple declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> is valid and changes nothing.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wredundant-decls</term>
<listitem>
<para>Warn if anything is declared more than once in the same scope even in cases where multiple declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> is
valid and changes nothing.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wnested-externs</term>
<listitem>
<para>Warn if an extern declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> is encountered within an function.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Winline</term>
<listitem>
<para>Warn if a function can not be inlined, and either it was declared as inline, or else the -fin*line-functions option was given.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wold-style-cast</term>
<listitem>
<para>Warn if an old-style (C-style) cast is used within a program</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Woverloaded-virtual</term>
<listitem>
<para>(C++ only.) In a derived class, the definitions of virtual functions must match the type signature of a
virtual function declared in the base class. Use this option to request warnings <indexterm remap="idx"><primary>warnings</primary></indexterm> when a derived class declares a function that may
be an erroneous attempt to define a virtual function: that is, warn when a function with the same name as a virtual function in
the base class, but with a type signature that doesn't match any virtual functions from the base class.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-Wsynth</term>
<listitem>
<para>Warn when g++'s synthesis behavior does not match that of cfront.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>make all warnings <indexterm remap="idx"><primary>warnings</primary></indexterm> into errors <indexterm remap="idx"><primary>errors</primary></indexterm></term>
<listitem>
<para>(-Werror) Treat warnings <indexterm remap="idx"><primary>warnings</primary></indexterm> as errors <indexterm remap="idx"><primary>errors</primary></indexterm>; abort compilation after any warning.</para>
</listitem>
</varlistentry>
</variablelist>
</para>

<para>For a release of your project, it is recommended to enable <emphasis remap="bf">-Wall</emphasis>.</para>
</sect1>

<sect1 id="opciones-de-enlazado">
<title>Opciones de enlazado <indexterm remap="idx"><primary>enlazado</primary></indexterm></title>

<para><indexterm><primary>linker options</primary></indexterm>
The Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> Options for your current project can be set by the last page of the project options dialog. You have to enable those
libraries that your application uses to link them to your binary with the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm>, e.g. your application uses the class
<indexterm remap="cdx"><primary><literal>KFileDialog</literal></primary></indexterm>KFileDialog. As the class <indexterm remap="cdx"><primary><literal>KFileDialog</literal></primary></indexterm>KFileDialog is part of the KFile library, you have to enable kfile. For classes <indexterm remap="idx"><primary>classes</primary></indexterm>
or functions that are not listed as checkboxes, use the <emphasis remap="bf">"additional libraries"</emphasis> field.</para>

<sect2 id="linker-linker-flags">
<title>Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> Flags</title>

<para><indexterm><primary>linker flags</primary></indexterm>
<variablelist>
<varlistentry>
<term>remove all symbol table and relocation information from the executable:</term>
<listitem>
<para>This means that all redundant information will be
removed from the object files and the binary, resulting that debugging <indexterm remap="idx"><primary>debugging</primary></indexterm> will not be possible. For as long as your application is in
a development stage and not released as final, you should leave this option disabled.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>prevent using shared libraries:</term>
<listitem>
<para>This option disables the use of shared libraries on systems that support this. On systems
using no shared libraries, this option will have no effect.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>additional flags:</term>
<listitem>
<para>Here, you can enter additional flags for the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm>, setting the LDFLAGS environment variable <indexterm remap="idx"><primary>variable</primary></indexterm> by make <indexterm remap="idx"><primary>make</primary></indexterm>. The
available options can be taken from the man page for <emphasis remap="bf">ld</emphasis> or your Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> manpage.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>

<sect2 id="libraries-0">
<title>Libraries</title>

<para>The libraries section contains checkboxes for the most needed libraries in conjuction with Qt/KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> application
development. You have to enable those libraries that your application uses, otherwise the Linker <indexterm remap="idx"><primary>Linker</primary></indexterm> will complain about unresolved
symbol tables.
<variablelist>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>X11</literal></primary></indexterm>X11</term>
<listitem>
<para>The X11 library. Recommended for all X-Window programs.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>Xext</literal></primary></indexterm>Xext</term>
<listitem>
<para>The X11 extension library. Also most X-Window programs depend on Xext.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>qt</literal></primary></indexterm>qt</term>
<listitem>
<para>The Qt-library <indexterm remap="idx"><primary>Qt-library</primary></indexterm>. Recommended for Qt and KDE <indexterm remap="idx"><primary>KDE</primary></indexterm> applications.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>kdecore</literal></primary></indexterm>kdecore</term>
<listitem>
<para>The KDE Core library; contains the classes <indexterm remap="idx"><primary>classes</primary></indexterm> for KDE Application frameworks.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>kdeui</literal></primary></indexterm>kdeui</term>
<listitem>
<para>The KDE User Interface library; contains KDE-specific widgets <indexterm remap="idx"><primary>widgets</primary></indexterm>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>khtmlw</literal></primary></indexterm>khtmlw</term>
<listitem>
<para>The KHTML Widget library.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>kfm</literal></primary></indexterm>kfm</term>
<listitem>
<para>The KFM library containing classes <indexterm remap="idx"><primary>classes</primary></indexterm> for KFM functions.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>kfile</literal></primary></indexterm>kfile</term>
<listitem>
<para>The KFile library. Contains file dialogs etc.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>kspell</literal></primary></indexterm>kspell</term>
<listitem>
<para>The KSpell library. Contains an interface for programs to use Ispell for spell-checking.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><indexterm remap="cdx"><primary><literal>kab</literal></primary></indexterm>kab</term>
<listitem>
<para>The KAdressBook library. Needed for access to the addressbook as well as providing addressbook widgets <indexterm remap="idx"><primary>widgets</primary></indexterm></para>
</listitem>
</varlistentry>
</variablelist>

<emphasis remap="bf">additional libraries:</emphasis> Here you can enter additional libraries that your application needs, e.g. the KOM library. Set the
libraries with the -l option; for the example -lkom.</para>
</sect2>

<sect2 id="make-0">
<title>Make</title>

<para>As GNU make <indexterm remap="idx"><primary>make</primary></indexterm> supports some useful options, the Project Options dialog contains a page called "Make-Options", where those can be
en/disabled. The available settings are:</para>

<para><variablelist>
<varlistentry>
<term></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
<varlistentry>
<term>Print debug information</term>
<listitem>
<para>prints out all information about the project files <indexterm remap="idx"><primary>project files</primary></indexterm> and what make <indexterm remap="idx"><primary>make</primary></indexterm> determines for rebuilding them.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Continue after errors <indexterm remap="idx"><primary>errors</primary></indexterm></term>
<listitem>
<para>tries to continue with the compilation after an error occurred (e.g. a file couldn't be compiled due to an
error)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Print the data base</term>
<listitem>
<para>prints out the make <indexterm remap="idx"><primary>make</primary></indexterm>-database for the current process which contains the changes from the last
build-run. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>Environment variables</term>
<listitem>
<para>give the current environment variables a higher priority than the currently used variables in
the Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>No built-in rules</term>
<listitem>
<para>doesn't use built-in rules for make <indexterm remap="idx"><primary>make</primary></indexterm>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Touch files</term>
<listitem>
<para>don't run the Compiler <indexterm remap="idx"><primary>Compiler</primary></indexterm> on changed files; instead only touches them. This sets them as already processed by make <indexterm remap="idx"><primary>make</primary></indexterm>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Ignore all errors <indexterm remap="idx"><primary>errors</primary></indexterm></term>
<listitem>
<para>Ignores all errors <indexterm remap="idx"><primary>errors</primary></indexterm> that occur</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Silent operation</term>
<listitem>
<para>doesn't print out any information about the build-process</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Print working directory</term>
<listitem>
<para>prints the current directory during the make <indexterm remap="idx"><primary>make</primary></indexterm>-process.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>job number</term>
<listitem>
<para>sets the amount of parallel processes for make <indexterm remap="idx"><primary>make</primary></indexterm>. For a single-CPU system we recommend setting this to one or two.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>set modified</term>
<listitem>
<para>sets the selected file modified. Choose the file by clicking the folder button on the right. Setting a file modified
means that the file will be processed by make <indexterm remap="idx"><primary>make</primary></indexterm> and compiled if it is a source file.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>additional options</term>
<listitem>
<para>set additional options to make <indexterm remap="idx"><primary>make</primary></indexterm>; those can be found in your local man page for "GNU Make". </para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
</chapter>

<chapter id="el-navegador-de-clases-0">
<title>El navegador de clases</title>

<sect1 id="the-classviewer">
<title>The Classviewer</title>

<para><indexterm><primary>classbrowser</primary></indexterm>
The KDevelop Classviewer is one of the most useful and important tools that the IDE provides a developer for managing his project
sources. When a project is loaded, a class parser reads all project sources for functions, classes <indexterm remap="idx"><primary>classes</primary></indexterm> etc., then displays the results in
the CV <indexterm remap="idx"><primary>CV</primary></indexterm> treeview. This chapter shows you how to use the Classviewer and the provided functionality and how it can improve your work.</para>

<para>Classes and their methods can also be accessed by the browser toolbar. There, the left combo selects the class; the right
lets you choose the methods of the selected class. When you select a method, the classbrowser will automatically bring you to the
implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> file and sets the cursor to the method. Finally, the class-assistant button on the right of the method combo will bring
you to the declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> of the method on a click; on another click to the definition. The delayed popup menu, displayed by the
down-arrow on the button, offers additional functionality that is also available in the classviewer's context menus, such as:</para>

<para><itemizedlist>
<listitem>
<para>Goto Declaration: browses to the declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> of the method</para>
</listitem>
<listitem>
<para>Goto Definition: browses to the definition of the method</para>
</listitem>
<listitem>
<para>Goto Class Declaration: browses to the class declaration <indexterm remap="idx"><primary>declaration</primary></indexterm></para>
</listitem>
<listitem>
<para>New Class <indexterm remap="idx"><primary>New Class</primary></indexterm>: opens the New Class <indexterm remap="idx"><primary>New Class</primary></indexterm> dialog to construct a new class</para>
</listitem>
<listitem>
<para>Add Method: adds a method to the selected class</para>
</listitem>
<listitem>
<para>Add Attribute: adds an attribute to the selected class</para>
</listitem>
</itemizedlist>
</para>

<sect2 id="available-objects">
<title>Available Objects</title>

<para>By available objects, we describe a term that means that C++ code can be seen as a collection of objects- classes <indexterm remap="idx"><primary>classes</primary></indexterm>, their members,
global functions and the like. The classtree displays these objects logically and orders them by character, so they are easy to locate
in the tree as well by their according icon. Therefore the classtree contains a "Classes" and a "Globals" folder. Thereby the "Classes"
folder generally contains the project's classes <indexterm remap="idx"><primary>classes</primary></indexterm>; if your project contains subfolders to manage your sourcefiles, these are also
displayed by their original folder name and contain all classes <indexterm remap="idx"><primary>classes</primary></indexterm> that are stored in the files located in the subfolder.</para>

<para>Further, when popping up a class, the classtree displays the class contents by separating methods and attributes <indexterm remap="idx"><primary>attributes</primary></indexterm>. As these can have
attributes <indexterm remap="idx"><primary>attributes</primary></indexterm> as well like public, private and protected, these are displayed by modified icons as well. You see that a class displayed in
the Class Browser contains all the objects that are present in the class declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>.</para>

<para>Now, classes <indexterm remap="idx"><primary>classes</primary></indexterm> are a very common thing when programming in C++ and will contain most of the code. But applications also contain objects
that have a "Global" appearance to the program. These would be structs, functions etc. Especially the <literal remap="tt">main()</literal> function appears in
every application and you need to modify it in one or the other way sometimes. To access these objects, the Classviewer provides the
"Globals" folder, containing subfolders for the following object types:
<itemizedlist>
<listitem>
<para>Structs</para>
</listitem>
<listitem>
<para>Functions</para>
</listitem>
<listitem>
<para>Variables</para>
</listitem>
</itemizedlist>
</para>

<para>As the icons displaying these items are similar to those used in the class-viewer, their meaning is easy to guess and to remember by
the programmer.</para>

<para>Finally, it can be stated that the classviewer <indexterm remap="idx"><primary>classviewer</primary></indexterm> displays your project graphically by their objects related to their appearance in the
code. In the following section you will learn how to use the classviewer <indexterm remap="idx"><primary>classviewer</primary></indexterm> and it's tools in conjunction with your code.</para>
</sect2>

<sect2 id="browsing-object-declarations-and-implementat">
<title>Browsing Object Declarations and Implementations</title>

<para>The Classviewer's best strength is providing a fast and good access to his code by the code's contents independent of the location
within files. Therefore, selections by a mouse click will result in the following actions:</para>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">On a classname:</emphasis>  Switches to the class declaration <indexterm remap="idx"><primary>declaration</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">On a class method:</emphasis> Switches to the method implementation <indexterm remap="idx"><primary>implementation</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">On a class attribute:</emphasis> Switches to the attribute's declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> in the class declaration <indexterm remap="idx"><primary>declaration</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">On a struct:</emphasis> Switches to the struct's declaration <indexterm remap="idx"><primary>declaration</primary></indexterm></para>
</listitem>
<listitem>
<para><emphasis remap="bf">On a global function:</emphasis> Switches to the function's implementation <indexterm remap="idx"><primary>implementation</primary></indexterm></para>
</listitem>
</itemizedlist>
</para>

<para>Now, this provides you the most needed access towards code objects. Apparently, it may be needed to change a method's header, resulting
that you have to change it's declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> in the class as well as the implementation <indexterm remap="idx"><primary>implementation</primary></indexterm>. The classviewer <indexterm remap="idx"><primary>classviewer</primary></indexterm> supports this by providing
right-button context menus over items. On a method or function, this means that you can select where to go:</para>

<para><itemizedlist>
<listitem>
<para><emphasis remap="bf">Go to definition:</emphasis> Switches to the implementation <indexterm remap="idx"><primary>implementation</primary></indexterm>- this is the default for a left click as described above</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Go to declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>:</emphasis> Switches to the declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> of the method or function.</para>
</listitem>
</itemizedlist>
</para>

<para>By this behavior, the Class Browser offers you access to every place you have to go for coding your C++ application.</para>

<para>The following sections give you a description of the other tools that the Class Browser offers- you will find them very useful when
working with large projects as they enhance working object-orientated on C++ programs.</para>
</sect2>
</sect1>

<sect1 id="the-classtools">
<title>The Classtools</title>

<para><indexterm><primary>classtools</primary></indexterm>
The classtools are dialogs that makes it even more easier for the developer to get more information about his project's classes <indexterm remap="idx"><primary>classes</primary></indexterm>.
The classviewer <indexterm remap="idx"><primary>classviewer</primary></indexterm> displays all objects by their occurrence in the code, but you sometimes want to get more information about
classes <indexterm remap="idx"><primary>classes</primary></indexterm> without having to look inside the code. Therefore, the classtool dialogs are specialized on displaying specific class
attributes <indexterm remap="idx"><primary>attributes</primary></indexterm>.</para>

<para>The classtool dialog is invoked by the popup menu over a class in the classviewer <indexterm remap="idx"><primary>classviewer</primary></indexterm>. Select "Classtool", and the dialog will appear.
To get informed about a class, select the class in the combo box on top. Then the buttons in the toolbar provide functions that give
you specific trees for your class. These are:</para>

<para><variablelist>
<varlistentry>
<term> Parents:</term>
<listitem>
<para>The parents of the selected class, which means the class it inherits. This is useful for multiple inheritance as well as to see why a
class behaves in one or the other way, e.g. for dialogs your parent class could be <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> or <literal remap="tt"><indexterm remap="cdx"><primary><literal>QDialog</literal></primary></indexterm>QDialog</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Children:</term>
<listitem>
<para>Displays the children classes <indexterm remap="idx"><primary>classes</primary></indexterm> that inherit the current class.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Clients:</term>
<listitem>
<para>Classes that make use of the selected class by an attribute in their class declaration <indexterm remap="idx"><primary>declaration</primary></indexterm></para>
</listitem>
</varlistentry>
<varlistentry>
<term>Suppliers:</term>
<listitem>
<para>The suppliers that give attributes <indexterm remap="idx"><primary>attributes</primary></indexterm> to the selected class.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Attributes:</term>
<listitem>
<para>The attributes <indexterm remap="idx"><primary>attributes</primary></indexterm> of the class by their name</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Methods:</term>
<listitem>
<para>The Methods of the selected class</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Virtual Methods:</term>
<listitem>
<para>The virtual methods that a class provides</para>
</listitem>
</varlistentry>
</variablelist>

Further, the selection of the attribute public, protected, private or all shows Attributes, Methods and Virtual Methods by their
attribute value.</para>
</sect1>

<sect1 id="managing-classes">
<title>Managing Classes</title>

<para>The Class Browser additionally allows adding methods and attributes <indexterm remap="idx"><primary>attributes</primary></indexterm> directly by dialogs. This means you don't have to type the
classdeclaration <indexterm remap="idx"><primary>classdeclaration</primary></indexterm> and the implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> header yourself. After adding a method, you only have to set the formal parameters to the
implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> header and, if the method requires an attribute, to the declaration <indexterm remap="idx"><primary>declaration</primary></indexterm>.</para>

<para><emphasis remap="bf"> How to add a method to a class</emphasis></para>

<para><orderedlist><listitem>
<para>select the class you want to add a method</para>
</listitem>
<listitem>
<para>press the right mouse button; the popup menu appears</para>
</listitem>
<listitem>
<para>select "Add member function".</para>
</listitem>
<listitem>
<para>the "Add member function" dialog appears.</para>
</listitem>
<listitem>
<para>insert the type, declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> and documentation for the method</para>
</listitem>
<listitem>
<para>specify the access and the modifiers for the method</para>
</listitem>
<listitem>
<para>press OK to exit the dialog</para>
</listitem>
</orderedlist>
</para>

<para>For adding a variable <indexterm remap="idx"><primary>variable</primary></indexterm>, this is the same action, just with selecting "Add member variable <indexterm remap="idx"><primary>variable</primary></indexterm>" in the popup menu.</para>

<para>The difference between the actions of these dialogs is that the adding of a variable <indexterm remap="idx"><primary>variable</primary></indexterm> will add the variable <indexterm remap="idx"><primary>variable</primary></indexterm> to the classdeclaration <indexterm remap="idx"><primary>classdeclaration</primary></indexterm>,
the adding of a method will add the method's declaration <indexterm remap="idx"><primary>declaration</primary></indexterm> and the method's implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> header to the sources. As the classviewer <indexterm remap="idx"><primary>classviewer</primary></indexterm>
directly updates himself, you have a direct access to the new method implementation <indexterm remap="idx"><primary>implementation</primary></indexterm>, so you only have to fill out the code for the
actual purpose of the method.</para>
</sect1>
</chapter>

<chapter id="el-editor-de-dilogos-0">
<title>El editor de diálogos</title>

<para>The KDevelop integrated dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> allows the easy construction of widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> and dialogs your application uses all by graphical means.
You see the direct appearance of your dialog as it will be presented to the user. Using the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> is usually the first step you
would take after creating a new project with the KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm> to create your main view, the user interaction dialogs and, after finishing
the graphical work, the code generation. This way, your project will contain all the usually considered "difficult" parts that normally
would take a long time to implement. Then, the "rest" of your work is implementing the functionality in the generated code. This
chapter deals with how to use the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> to create your project widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> as well as what to do in case you see your widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> need
corrections or additions during the further development process.</para>

<para>You can switch to the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> either by selecting "Dialog Editor" from the "View <indexterm remap="idx"><primary>View</primary></indexterm>"-menu or by the according toolbar icon.
To switch back to the Project Editor, select "KDevelop" from the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm>'s "View <indexterm remap="idx"><primary>View</primary></indexterm>"-menu or by the icon in the toolbar.</para>

<para>What else does the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm>'s interface offer you ?  Mainly, that its appearance is almost the same as the project editor in term
of the main view separation as well as the menu- and toolbars. This allows you to make yourself accustomed with the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> very
quickly and, as he completely interacts with the project management, stay in the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> if you want to control your
build-process. Actions that require to switch back to KDevelop will do that automatically for you, like accessing the documentation
browser. Just select the menu commands, and KDevelop reacts to your will.</para>

<para>The following chapters give you an overview of the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> interface, how to create a new dialog initially and how set up the
properties of the child widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> that your dialog contains.</para>

<sect1 id="the-dialog-editor-view">
<title>The Dialog Editor View</title>

<sect2 id="the-mainview">
<title>The Mainview</title>

<para>The dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm>'s view is logically separated by:
<itemizedlist>
<listitem>
<para>The Widgets Tabulator, containing the "Widgets", "Dialogs" and "Items" tabs. These are described in <link linkend="Adding-Widgets">Adding Widgets</link>.</para>
</listitem>
<listitem>
<para>The Widget-Editor, representing the editing view for creating your dialog. See <link linkend="The-Widget-Editor">The Widget Editor</link></para>
</listitem>
<listitem>
<para>The Properties window, containing a list of properties and their values, dependent on the currently selected widget in the widget
editor. See <link linkend="Setting-Properties">Setting Properties</link> for information how to specialize the widget's behavior and look.</para>
</listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="menubar-menubar-toolbar-toolbar-and-statusba">
<title>Menubar <indexterm remap="idx"><primary>Menubar</primary></indexterm>, Toolbar <indexterm remap="idx"><primary>Toolbar</primary></indexterm> and Statusbar <indexterm remap="idx"><primary>Statusbar</primary></indexterm> differences to KDevelop</title>

<para>In Dialogeditor mode, KDevelop changes the menubar, toolbar and statusbar slightly to provide the functionality you need for creating
widgets <indexterm remap="idx"><primary>widgets</primary></indexterm>. These are:</para>

<sect3 id="menubar-menubar">
<title>Menubar <indexterm remap="idx"><primary>Menubar</primary></indexterm></title>

<para><emphasis remap="bf">"File"-menu <indexterm remap="idx"><primary>"File"-menu</primary></indexterm>:</emphasis> . "Open" allows to open a dialog definition file.</para>

<para><emphasis remap="bf">"View"-menu <indexterm remap="idx"><primary>"View"-menu</primary></indexterm>:</emphasis> replaces "Tree-View" with "Widgets-View", en/disabling the Widgets-View tabulators; adds "Properties-View" to
en/disable the Properties-View and "Grid Size" to let you specify the grid size in pixels for horizontal and vertical values.</para>

<para><emphasis remap="bf">"Build"-menu <indexterm remap="idx"><primary>"Build"-menu</primary></indexterm>:</emphasis> replaces "Compile File <indexterm remap="idx"><primary>Compile File</primary></indexterm>" with "Generate Sources". This lets you actually generate the sources for your
dialog.</para>
</sect3>

<sect3 id="toolbar-toolbar">
<title>Toolbar <indexterm remap="idx"><primary>Toolbar</primary></indexterm></title>

<para>The toolbar contains a new icon for "New Dialog" as well as a replacement for "Compile File <indexterm remap="idx"><primary>Compile File</primary></indexterm>" by "Generate Sources".</para>
</sect3>

<sect3 id="statusbar-statusbar">
<title>Statusbar <indexterm remap="idx"><primary>Statusbar</primary></indexterm></title>

<para>The statusbar is providing you information about the currently selected widget, especially displaying the values for X
and Y size in the coordinate system. For Statusbar <indexterm remap="idx"><primary>Statusbar</primary></indexterm> help, you are provided the same functionality than in Project-editing mode.</para>

<para>While changing widget size, the statusbar shows the current values for width and height of the selected widget.</para>
</sect3>
</sect2>
</sect1>

<sect1 id="creating-a-new-dialog">
<title>Creating a New Dialog</title>

<para>After creating your project skeleton, you are provided a ready-to-run application, according to your preferences. As KDevelop provides
the project types KDE and Qt application, the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> recognizes this and offers widget construction by the widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> that are
provided by the used libraries. To save time, you already should have a design in mind that will do the intended actions. For
information about widget design, see <ulink url="programming/index-6.html">The KDevelop Programming Handbook</ulink>.</para>

<para>To create a new dialog, select "New" from the "File"-menu <indexterm remap="idx"><primary>"File"-menu</primary></indexterm> or select "New" from the context menu in the "Dialogs" tab. The New File Dialog 
appears where you can select the item Qt/KDE Dialog(*.kdevdlg). Enter the file name for your dialog to save the layout to.
Then press OK and a new dialog will appear. When finished with the new dialog, select "Generate Complete Sources" from the Build-Menu. The
dialog to generate the widget´s source file will appear. There you have to give KDevelop the dialog-specific information about the baseclass, 
the source file names and destination.</para>

<sect2 id="dialog-class">
<title>Dialog Class</title>

<para>The dialog class you can select, is the class that is inherited by your new widget, which is technically represented by a class itself.
Therefore, you have the following options:
<orderedlist><listitem>
<para><emphasis remap="bf"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget:</emphasis> the base class for all user interaction widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> provided by Qt. Used for main views and top-level widgets <indexterm remap="idx"><primary>widgets</primary></indexterm>.</para>
</listitem>
<listitem>
<para><emphasis remap="bf"><indexterm remap="cdx"><primary><literal>QFrame</literal></primary></indexterm>QFrame:</emphasis> inherits <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> and is used by numerous widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> as a base class. This is useful for
widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> that already want to have a <literal remap="tt"><indexterm remap="cdx"><primary><literal>QFrame</literal></primary></indexterm>QFrame</literal> functionality in addition to <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> methods.</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Custom:</emphasis> inherits a custom class that has to be set in the "Custom Properties". This could be an already designed class
provided by your project or the libraries.</para>
</listitem>
<listitem>
<para><emphasis remap="bf"><indexterm remap="cdx"><primary><literal>QDialog</literal></primary></indexterm>QDialog:</emphasis> the base class for dialogs that you would inherit for user interaction like setting properties or changing values.</para>
</listitem>
<listitem>
<para><emphasis remap="bf"><indexterm remap="cdx"><primary><literal>QTabDialog</literal></primary></indexterm>QTabDialog:</emphasis> inherits <indexterm remap="cdx"><primary><literal>QDialog</literal></primary></indexterm>QDialog and provides a dialog with predefined buttons and a set of tabs, which you will provide by the
widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> that you create.</para>
</listitem>
</orderedlist>
</para>

<para><emphasis remap="bf">Custom Properties</emphasis></para>

<para>For the inheritance of a custom class as selected in the dialog class field, you have to specify the classname, which goes to "Custom
Class". The dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> uses this for the code-generation; therefore, you also have to insert the "Custom Header", where the header
filename of the custom class has to be set.</para>
</sect2>

<sect2 id="files">
<title>Files</title>

<para>In the "Files" section, you have to enter the widget's specific information. This is the classname (which would be e.g. KColorSelectDlg
for a dialog that allows selecting the color of a pen), the header, C++ and Data filenames.
When inserting the Classname, the filenames are given by the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm>, but you can as well change the filenames.</para>

<para>Now, what about the files ? When you are ready with constructing the widget visually, you will have to generate the files that contain
the implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> for your widget. As this will be a class, the dialog will exist by the header file containing the classdeclaration <indexterm remap="idx"><primary>classdeclaration</primary></indexterm>,
a C++ file containing the method implementation <indexterm remap="idx"><primary>implementation</primary></indexterm> for your widget's methods and slots. The Data file is the file that will contain a
function that is called by the constructor of your widget, the <emphasis>initDialog()</emphasis> method. The file itself shouldn't be changed as it
will contain the generated code from the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> to create the widget on the screen. If you ever have to change values, you should
do this by the constructor or be sure that you won't change the dialog during the development process, as the Data file will be
overwritten each time the code is generated for your widget. The header and C++ file contain sections, where the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> writes;
these are marked by comments. After file generation, you can change any values and settings outside these sections; otherwise your
changes will get lost by the next code-creation.</para>
</sect2>

<sect2 id="location">
<title>Location</title>

<para>For generating the widget's sources, the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> needs to know the location where these will go. The default value for the
output <indexterm remap="idx"><primary>output</primary></indexterm> directory is the current project subdirectory containing the sources already present.</para>

<para>After pressing "OK", your default values are generated and an empty Widget constructor is opened. Then you are ready to go for creating
your own widget. Mind that the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> currently only supports static widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> without geometry management. If you're about to use
geometry management for your widgets <indexterm remap="idx"><primary>widgets</primary></indexterm>, you should make yourself accustomed with the classes <indexterm remap="idx"><primary>classes</primary></indexterm> that Qt provides for this, create a new
class with the classgenerator and write your widget by hand. For more information, see <ulink url="programming/index.html">The KDevelop Programming Handbook</ulink>.</para>
</sect2>
</sect1>

<sect1 id="adding-widgets">
<title>Adding Widgets</title>

<para>After specifying the dialogs or widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> class and filenames, you are ready to start creating the widget and filling it with contents.
Adding low-level widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> to your dialog is a very easy task. Just select the widget you want to add from the "Widgets" tabulator on the
left by a single click over the according widget icon. The widget will then be laid on the left upper corner of the currently opened
main widget. An added widget then gets the default size of 100x30 pixels on the editor <indexterm remap="idx"><primary>editor</primary></indexterm> view. To move a widget, click over it to
activate the drawing frame, which is displayed in dark grey with hot spots on the corners and on the center of the top, bottom, left
and right sides of the widget. A cross-cursor indicates that the widget can be moved. To move it, press the left mouse button and keep
it pressed. then move the widget with your mouse to the place you want to have it displayed later.</para>

<para>To resize a widget, move your mouse cursor over one of the hot spots of the already activated item. The mouse cursor then changes to a
double-arrow indicating the directions, in which resizing can be done. Press the left mouse button and hold it pressed. The widget item
will change it's size when the mouse is moved to the direction indicated by the cursor.</para>

<para>Further, the widget editor contains a lot of context menus to help you coordinate your work. Those are available over all items in the
widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> tabulator and give you a quick help message window that shows the class name of the selected widget with a short description.
Over a selected widget, the context menu shows the class name of the selected item and offers:</para>

<para><itemizedlist>
<listitem>
<para>Raise</para>
</listitem>
<listitem>
<para>Lower</para>
</listitem>
<listitem>
<para>Raise to top</para>
</listitem>
<listitem>
<para>Lower to bottom</para>
</listitem>
<listitem>
<para>Cut</para>
</listitem>
<listitem>
<para>Delete</para>
</listitem>
<listitem>
<para>Copy</para>
</listitem>
<listitem>
<para>Paste</para>
</listitem>
<listitem>
<para>Help</para>
</listitem>
</itemizedlist>
</para>

<para>After setting the size and position, you can edit the preferences for the selected item on the Preferences window.</para>

<sect2 id="the-widgets-tabulator">
<title>The Widgets Tabulator</title>

<para><indexterm><primary>dialog editor widgets</primary></indexterm>
The widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> tab represents the available widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> you can place on the dialog. If you want information about a certain widget, press the
right mouse button over a widget icon and select "Quick-Help" from the popup-menu. Mind that the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> automatically determines,
if your project type is Qt-only or KDE. This prevents you from using KDE-widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> in a Qt application.</para>

<para>After you selected a widget item, it is placed with default sizes and values on the editing window and marked selected by a frame and
darkened corners. To resize a widget, move your mouse over one of the dark spots and your cursor will change to display which resizing
directions are possible. Then press the mousebutton and move the mouse while holding it. When you're finished with resizing the widget,
release the mouse. While resizing, the statusbar displays the current position of the item by X and Y values and the current size by
W(Width) and H(Height) values.</para>
</sect2>

<sect2 id="the-dialogs-tabulator">
<title>The Dialogs Tabulator</title>

<para><indexterm><primary>project dialogs</primary></indexterm>
The dialogs tabulator is intended to let you open your project's dialogs by a mouseclick. As the dialog's structure is saved in a
*.kdevdlg file within the directory that contains the generated files, only those dialog definition files are shown. Also mind that you
don't delete these definition files.</para>

<para>On selecting a dialog, it will be shown as by the state it was saved in the last editing step in the Widget-Editor view.</para>
</sect2>

<sect2 id="the-items-tabulator">
<title>The Items Tabulator</title>

<para><indexterm><primary>dialog items</primary></indexterm>
The Items tabulator lets you have an overview over the currently present widget items of the dialog hierarchically. This means, that, as
your background represents the parent of all widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> within the dialog, it is shown on top of the tree. The children of the main dialog
are then listed in the next tree-level.</para>

<para>On selecting an item, it gets marked in the editor view, as well as the properties are shown in the properties window.
Using the items view is sometimes important if your widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> behavior depends on the parent-child relationship.</para>
</sect2>
</sect1>

<sect1 id="the-widget-editor">
<title>The Widget Editor</title>

<para>The Widget Editor is the main view that is placed in the middle and where you are constructing your widget. After adding items, those
can be selected and resized, as well as moved to the place you need them. Over all items, popup menus provide a quick access to
functions like cut, copy and insert.</para>
</sect1>

<sect1 id="setting-properties">
<title>Setting Properties</title>

<para><indexterm><primary>setting widget properties</primary></indexterm>
The properties window on the right is the place where you set the default behavior for the widget and its items. It displays the
pre-set values for each selected item right away; changing values will result in direct changes on the Widget Editor view, e.g. naming
labels or buttons.</para>

<para>To separate certain property values by their effect, the properties window contains four folders; selecting a folder will pop up all
values for the properties group. All possible values are described below. Mind that the properties are dependent on the widget, e.g. a
label and button will have a property for their on-screen name, while lineedits will have properties for methods like <emphasis>setText()</emphasis>.</para>

<para>For a complete list of the available values per item, you should see the class-reference of the widget which explains the used methods
and all possible values. Note that most values are implemented in <literal remap="tt"><indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget</literal> and are used for all widgets <indexterm remap="idx"><primary>widgets</primary></indexterm> that inherit
<indexterm remap="cdx"><primary><literal>QWidget</literal></primary></indexterm>QWidget. Also mind that the final code does not contain any method calls that are unchanged by the user and therefore use the
default values as given in the widget's constructors.</para>

<para>A complete list of the supported properties that can be set in the properties window for each widget item.</para>
</sect1>

<sect1 id="generating-files">
<title>Generating Files</title>

<para><indexterm><primary>dialog sourcecode generation</primary></indexterm></para>

<para>After creating a widget, you have to generate the sourcecode to make it available in your project. This can be done either with the
"Generate Sources" from the "Build"-menu or by the according icon in the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm> toolbar. Your Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>s will be updated
automatically to include the new widget in the compiling process; therefore, after calling "Generate Sources", you can build your
project again within the dialog editor <indexterm remap="idx"><primary>dialog editor</primary></indexterm>. The output <indexterm remap="idx"><primary>output</primary></indexterm> window pops up below the Widget-Editor window as in Project Editor mode.</para>

<para>Now that your project contains a new widget, your work as a programmer is to implement functionality to the used slots and eventually
add other methods you may need. 
<footnote>
<para>See <ulink url="programming/index-6.html">The KDevelop Programming Handbook, The Dialogeditor</ulink> for more information about widget properties and sourcecode generation.</para>
</footnote>
</para>
</sect1>
</chapter>

<chapter id="integracin-con-cvs">
<title>Integración con CVS</title>

<para>KDevelop also takes care of managing your project via CVS repositories. The goal behind CVS (concurrent version control) is to enable
groups of developers to work on the same source-tree independently and to merge changes into the repository. Usually, the repository is
located at a server. The initial repository contains the base set of files that the project includes; directories and files are then
added or removed to the CVS by the developers.</para>

<para>Locally, the developer works on his copy of the CVS tree. He writes his changes into his files and tests, if his project still works,
at least to a certain extend where incomplete sources don't prevent other developers from still working on the CVS repository if they
receive the changes.</para>

<sect1 id="enabling-cvs-support">
<title>Enabling CVS Support</title>

<para>As CVS support is most often only needed by professionals or companies as well as by KDE developers maintaining their project over the
KDE CVS server, using the CVS commands of KDevelop is optional. To enable the CVS commands, open the Project-Options dialog and change
the option for Version Control to "CVS".</para>
</sect1>

<sect1 id="using-cvs-commands">
<title>Using CVS Commands</title>

<para>Then the following commands are available in the LFV and RFV by context menus:</para>

<para>Over a file not included in the repository:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Add to Repository</emphasis>: adds the file to the repository. The file is set up to be added and will be introduced to the repository
on the next <literal remap="tt">commit</literal> command that includes the directory where the added file is located locally.</para>
</listitem>
</itemizedlist>
</para>

<para>Over a file included in the repository:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Update</emphasis>: update the selected file with the CVS version</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Commit</emphasis>: commit the selected file to the CVS repository</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Remove from Repository</emphasis>: remove the file from the repository</para>
</listitem>
</itemizedlist>
</para>

<para>Over a folder:
<itemizedlist>
<listitem>
<para><emphasis remap="bf">Add</emphasis>: adds the folder to the repository</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Remove</emphasis>: removes the folder from the repository</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Update</emphasis>: update the folder recursively to be in sync with the repository</para>
</listitem>
<listitem>
<para><emphasis remap="bf">Commit</emphasis>: commit any changes recursively to the repository</para>
</listitem>
</itemizedlist>
</para>

<para>The CVS commands all require a working network connection to the CVS server. When invoking a command, you will be shown a dialog with
the command sent to the CVS server and the retrieved output. Thereby you can control what actually happens and if the command was
successful or not.</para>

<para>As the CVS commands of KDevelop only work with the <literal remap="tt">cvs</literal> system command and its commandline options, you should have no trouble to
use the cvs features.</para>
</sect1>
</chapter>

<chapter id="configuracin-general">
<title>Configuración general</title>

<para>This chapter describes how you can set your individual preferences about how KDevelop works. All settings addressed below can be
found by the according entry in the Options-menu.</para>

<sect1 id="configurando-el-men-dquotltidxherramientasdq">
<title>Configurando el menú Herramientas <indexterm remap="idx"><primary>Herramientas</primary></indexterm></title>

<para><indexterm><primary>configuring the Tools-menu</primary></indexterm><indexterm><primary>"Options"-menu</primary></indexterm></para>

<para>As KDevelop supports the use of third-party programs within it's user interface, you are able to configure <indexterm remap="idx"><primary>configure</primary></indexterm> any program that suits
your needs towards application development. This can be done by adding programs to the already pre-defined ones in the
"Tools"-menu <indexterm remap="idx"><primary>"Tools"-menu</primary></indexterm>. To change the tools-menu, select "Tools <indexterm remap="idx"><primary>Tools</primary></indexterm>" from the "Options" menu. This dialog allows to specify the entry
name, program and additional command line options you want to pass to the execution. To remove a program from the menu, select the
entry name and choose "Delete". To add a program, specify the menuentry, where a & is used as a menu-accelerator; you may compare the
already configured entries with the entry list. Select the binary and pass your commandline options. Then hit "Add" and the entry
is added to the list. After leaving the configuration dialog <indexterm remap="idx"><primary>configuration dialog</primary></indexterm>, the tools-menu updates itself, so the new configuration is already
usable without restarting KDevelop.</para>
</sect1>

<sect1 id="file-viewer-options">
<title>File Viewer Options</title>

<para><indexterm><primary>file viewers</primary></indexterm></para>

<para>The Logical File Viewer can be configured by context menus completely. As it's intention is to separate files logically to keep a
better overview over complex projects, one of the most used configurations is to create file groups. Those can be set by opening the
context menu with a right mouse button click over the project icon displayed at the root of the tree. The menu offers:
<itemizedlist>
<listitem>
<para>New File <indexterm remap="idx"><primary>New File</primary></indexterm>: Opens the New File <indexterm remap="idx"><primary>New File</primary></indexterm> dialog. Equals to the menubar command "File"-"New"</para>
</listitem>
<listitem>
<para>New Class <indexterm remap="idx"><primary>New Class</primary></indexterm>: Opens the Classgenerator to create a new class. Equals to the menubar command "Project"-"New
Class <indexterm remap="idx"><primary>New
Class</primary></indexterm>"<indexterm><primary>"Project"-menu</primary></indexterm></para>
</listitem>
<listitem>
<para>New Group: Opens a dialog to create a new group. There, set the group name and the file filter for
the project files <indexterm remap="idx"><primary>project files</primary></indexterm> that will be displayed in this group.</para>
</listitem>
<listitem>
<para>Show relative path: displays the files with their path name starting from the main project directory if checked; otherwise only
the filename is shown.</para>
</listitem>
</itemizedlist>
</para>

<para>Over a group folder, the according context menu offers:
<itemizedlist>
<listitem>
<para>New Group: Opens the New Group dialog as in the context menu described above.</para>
</listitem>
<listitem>
<para>Remove group: removes the group from the LFV <indexterm remap="idx"><primary>LFV</primary></indexterm>.</para>
</listitem>
<listitem>
<para>Properties: Opens the properties of the group. There, you can edit the file filters by a list of wildcards separated by commas.</para>
</listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="configuracin-de-kdevelop">
<title>Configuración de KDevelop <indexterm remap="idx"><primary>Configuración de KDevelop</primary></indexterm></title>

<para><emphasis remap="bf">Make-command <indexterm remap="idx"><primary>Make-command</primary></indexterm>:</emphasis>
The General Options dialog lets you configure KDevelop's general settings.
First, you should set the make-command <indexterm remap="idx"><primary>make-command</primary></indexterm> available on your system. If the selected program does not exist,
KDevelop will warn you the next time you're invoking a make command.</para>

<para><emphasis remap="bf">Autosave <indexterm remap="idx"><primary>Autosave</primary></indexterm>:</emphasis></para>

<para>If Autosave is checked, KDevelop will save all changed files periodically.  The autosaving time range can be set to 3, 5, 15 or 30 minutes.</para>

<para><emphasis remap="bf">Autoswitch <indexterm remap="idx"><primary>Autoswitch</primary></indexterm>:</emphasis></para>

<para>If Autoswitch is enabled, the KDevelop windows will switch on and off according to the usage context, e.g.  if you switch to a
documentation in the Help-menu, the Documentation browser will be opened, together with the documentation tree and the output <indexterm remap="idx"><primary>output</primary></indexterm>
window turned off.
Startup:</para>

<para>For starting KDevelop, you have the option to enable/disable the start-logo <indexterm remap="idx"><primary>start-logo</primary></indexterm> to be shown during the time KDevelop loads.
Further, if you don't like the last project to be opened on startup, you can disable the default behavior.</para>
</sect1>

<sect1 id="cambiando-los-atajos-de-teclado">
<title>Cambiando los atajos de teclado <indexterm remap="idx"><primary>atajos de teclado</primary></indexterm></title>

<para>The Configure Keys dialog lets you configure the KDevelop key bindings. Note that global keys can be configured in the
KDE Control Center, such as open file and print.  A key function can be configured by choosing the menu entry. Then the
configuration can be changed by checking values like the Alt / Ctrl key etc.</para>
</sect1>

<sect1 id="documentation">
<title>Documentation</title>

<sect2 id="directoriesdocumentation-path">
<title>Directories<indexterm><primary>documentation path</primary></indexterm></title>

<para>For setting up the documentation browser <indexterm remap="idx"><primary>documentation browser</primary></indexterm> to work correctly, KDevelop needs some information about where the HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>-documentation
is placed on the system. Therefore, the Documentation Path properties dialog needs the path of the Qt- online documentation in HTML <indexterm remap="idx"><primary>HTML</primary></indexterm>
as well as the path to the KDE-Library documentation.</para>

<para>Usually, the Qt-Documentation <indexterm remap="idx"><primary>Qt-Documentation</primary></indexterm> is placed in the same directory where Qt is installed; e.g. if Qt resides in /usr/local/qt, the path
you have to enter is /usr/local/qt/html. For the KDE- Documentation, you have to set the directory to the root of the
documentation, assumed all KDE-Libs documentation resides in the same directory. Both path's can be selected by pressing the
according buttons, displaying a path-selection. If your system doesn't contain the documentation for the KDE-libs,  you should
first enter the next configuration dialog <indexterm remap="idx"><primary>configuration dialog</primary></indexterm>, Update KDE-Documentation <indexterm remap="idx"><primary>KDE-Documentation</primary></indexterm>. This will create the documentation to a path of your choice,
also setting the KDE Library Doc path automatically.</para>
</sect2>

<sect2 id="options">
<title>Options</title>

<sect3 id="update-kde-documentation-kde-documentation">
<title>Update KDE-Documentation <indexterm remap="idx"><primary>KDE-Documentation</primary></indexterm></title>

<para>For those users who don't have a recent documentation of the KDE-libraries <indexterm remap="idx"><primary>KDE-libraries</primary></indexterm>, especially the documentation for the files
installed on the system, the Update KDE-Documentation <indexterm remap="idx"><primary>KDE-Documentation</primary></indexterm> dialog creates a new one or updates existing documentations. This
function requires your system to have KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> and qt2KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm> installed, included in the KDE-SDK <indexterm remap="idx"><primary>KDE-SDK</primary></indexterm> package. First of, you have
to set up the path to your recent kdelibs sources, which is not the include-path for KDE ! Just enter the path to the sources, like:
/home/rnolden/kdelibs-1.1/.</para>

<para>Then, you can choose three different installation modes, as:</para>

<para><itemizedlist>
<listitem>
<para> Delete old Documentation and  install to recent Documentation-path:  this assumes that you already have a documentation
installed and is placed in the path the Documentation Path-dialog was entered. This will delete all documentation and install the
newly generated documentation into the recent path.</para>
</listitem>
<listitem>
<para> Delete old Documentation and install to new Documentation-path:   this will result in deleting the old documentation as
well as above, but gives you the choice to set up a new documentation place.</para>
</listitem>
<listitem>
<para> Leave old Documentation untouched and install to new Documentation path:   This is recommended for a new generation of
the kdelibs documentation for users who didn't have one before and for those who want to keep the last documentation for an older
kdelibs version.</para>
</listitem>
</itemizedlist>
</para>

<para>The "new KDE Libs Documentation path" is to be set  for option 2 and 3 of the installation mode.  This is also recommended for
users who generate a new documentation from scratch.</para>

<para>After pressing the OK button, KDevelop will create a subdirectory "KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm>-reference" in the documentation path containing the KDoc <indexterm remap="idx"><primary>KDoc</primary></indexterm>
reference files.  First, the qt library documentation classes <indexterm remap="idx"><primary>classes</primary></indexterm> will be indexed to connect the Qt documentation with the
documentation to be generated for the kdelibs.  So it is important that you have set up the Qt documentation path first to ensure
that it can be found by <literal remap="tt"><indexterm remap="cdx"><primary><literal>qt2kdoc</literal></primary></indexterm>qt2kdoc</literal>. Finally, the KDE libs will be indexed and the documentation will be build with
cross-references to give browsing the most functionality.</para>
</sect3>

<sect3 id="create-search-database">
<title>Create Search Database</title>

<para>The Create Search Database dialog, accessed via the create-button, allows the programmer to create a database to search for a
keyword interactively.  To create and use the documentation search function, you must have the program glimpse <indexterm remap="idx"><primary>glimpse</primary></indexterm> 4.0 installed.
Preset are the options to index the given KDE-Library documentation as well as the Qt-Documentation <indexterm remap="idx"><primary>Qt-Documentation</primary></indexterm>, assuming the path to the
documentation files were set in the "Documentation Path" dialog of the options- menu.   Additionally, the index can include
directories the user can set up himself by the "additional directories to index"-field.  After setting a path to an additional
directory, the "Add" - button must be pushed to set the path.  A path once set can be removed from the index by selecting the path
in the path field and pushing "Remove". Furthermore, the user is offered three different modes for the index size: tiny, small and
medium.  The higher the index size, the more the index files will grow. On the other hand, a search in a bigger search-database
will be faster and more successful, so we suggest choosing a "medium" size. For using the search function, see section
<link linkend="Utilizando-el-navegador-de-documentacin">Utilizando el navegador de documentación</link>.</para>
</sect3>
</sect2>
</sect1>
</chapter>

<chapter id="preguntas-y-respuestas">
<title>Preguntas y respuestas</title>

<para>Esta sección trata preguntas de los usuarios que fueron respondidas por el equipo de KDevelop o por sus colaboradores, en la lista de correo de KDevelop. Las preguntas versan sobre algunas experiencias con versiones actuales de KDevelop y sobre la notificación de errores en general.</para>

<sect1 id="notificando-errores">
<title>Notificando errores <indexterm remap="idx"><primary>Notificando errores</primary></indexterm> </title>

<para>Otra mejora de KDevelop es el sistema integrado de notificación de errores mediante correo electrónico. Si descubre un error, puede optar por informar al equipo de KDevelop mediante un programa de correo o mediante el diálogo de notificicación de errores. Todos los informes de error se recogen en la web de KDevelop y pueden examinarse en <ulink url="http://fara3.cs.uni-potsdam.de/~smeier/kdevelop/bugarchive/maillist.html">\|\|</ulink>. También puede recibir todos los informes de error suscribiéndose en la lista de correo de informes de error, enviando un correo electrónico a  <ulink url="mailto:kdevelop-bug-report-request@fara3.cs.uni-potsdam.de">kdevelop-bug-report-request@fara3.cs.uni-potsdam.de</ulink> con el texto "subscribe <emphasis>tu&&lowbar;;dirección&&lowbar;;de&&lowbar;;correo&&lowbar;;electrónico</emphasis>" como contenido del mensaje.</para>

<para>Para informar de errores, por favor, utilice esta dirección con su programa de correo. Si desea utilizar KDevelop para notificar un error, seleccione "Notificar error..." desde el menú Ayuda <indexterm remap="idx"><primary>Ayuda</primary></indexterm>. Se le mostrará un diálogo de notificación que le permitirá introducir toda la información necesaria sobre el error encontrado. Tras pulsar "Aceptar" el contenido del diálogo será enviado automáticamente a la lista de correo. </para>
</sect1>

<sect1 id="dnde-obtener-informacin">
<title>Dónde obtener información</title>

<para><emphasis remap="bf">P:</emphasis> Tengo una duda que no está respondida ni en el fichero de preguntas frecuentes (FAQ), ni en los manuales de KDevelop. ¿Con quién contacto?</para>

<para><emphasis remap="bf">R:</emphasis>  En cualquier caso, envía todas las peticiones relacionadas a la lista de correo de KDevelop. Para ello suscríbase enviando un correo a <ulink url="mailto:kdevelop@fara3.cs.uni-potsdam.de">kdevelop@fara3.cs.uni-potsdam.de</ulink> con la cabecera vacía y con "subscribe" como contenido del mensaje; de esta forma podrá participar en las discusiones de la lista. Todas las preguntas deben ir a esa dirección, y también serán tratadas en ella. Si sigue estos pasos, obtendrá toda la ayuda posible de los desarrolladores y de los usuarios que tengan los mismos problemas, además de que ayudará a mantener el documento de preguntas frecuentes actualizado. </para>

<para>La página web de KDevelop <indexterm remap="idx"><primary>página web de KDevelop</primary></indexterm> situada en <ulink url="http://www.kdevelop.org">\|\|</ulink> contiene un archivo de la lista de correo <indexterm remap="idx"><primary>lista de correo</primary></indexterm> que le permitirá navegar por los mensajes ya enviados por los suscriptores, por lo que le recomendamos que mire ahí en primer lugar, ya que lo más probable es que la mayoría de problemas ya hayan sido tratados por el equipo o por otros usuarios.</para>
</sect1>

<sect1 id="problemas-del-sistema-o-de-bibliotecas">
<title>Problemas del sistema o de bibliotecas</title>

<para><emphasis remap="bf">P:</emphasis> Obtengo el siguiente mensaje de error: "Wrong JPEG library version: library is 61, caller expects 62"</para>

<para><emphasis remap="bf">R:</emphasis>  Hay dos soluciones.
<orderedlist><listitem>
<para> Cuando se instalan las kdelibs, se instalan ficheros de cabecera para la biblioteca jpeg, en su versión 61. Sin embargo, la mayoría de distribuciones (Redhat) usan la versión 62 de la biblioteca. Para solucionarlo, elimine el fichero jpeglib.h de /opt/kde/include. El fichero de cabecera de la versión 62 debería utilizarse ahora. De todas formas, mirando el error, puede que se trate del caso inverso. En cualquier caso, asegúrese de que sólo tiene una versión del fichero de cabecera, de la biblioteca, y de que ambos se corresponden.

Es útil utilizar el comando locate para comprobar que tiene la versión correcta de la biblioteca y del fichero de cabecera, ej:
<screen> updatedb
 locate libjpeg
 locate jpeglib
</screen>

</para>
</listitem>
<listitem>
<para> Recompile kdesupport sin la biblioteca jpeg (./configure <indexterm remap="idx"><primary>configure</primary></indexterm> --with-libjpeg --with-libgif).</para>
</listitem>
</orderedlist>
</para>

<para><emphasis remap="bf">P:</emphasis>Obtengo el siguiente mensaje de error:
<screen>make[2]: Entering directory `/usr/local/src/kdevelop-0.3/po'
cd .. && automake --gnu --include-deps po/Makefile
aclocal.m4: 2709: `AM_PROG_INSTALL' is obsolete; use `AC_PROG_INSTALL'
make[2]: *** [Makefile.in] Error 1
</screen>

<emphasis remap="bf">R:</emphasis>  Solución para los usuarios de automake-1.4/automake-2.13: Ejecute "aclocal" manualmente, entonces compilará.</para>

<para><emphasis remap="bf">P:</emphasis>  ¿Qué hago si al ejecutar configure <indexterm remap="idx"><primary>configure</primary></indexterm> se me informa de que me hace falta la biblioteca giflib23?</para>

<para><emphasis remap="bf">R:</emphasis>  Pruebe con una versión más moderna de kdesupport, ¿o tal vez tiene otro giflib instalado?</para>

<para><emphasis remap="bf">P:</emphasis> ¿Cómo convierto un proyecto de KDevelop 0.2 en un proyecto de la versión 0.3?</para>

<para><emphasis remap="bf">R:</emphasis> Modifique la opción AC&&lowbar;;OUTPUT en el fichero configure <indexterm remap="idx"><primary>configure</primary></indexterm>.in para que esté en una sola línea.</para>

<para>por ejemplo:
versión antigua:
<screen>AC_OUTPUT(Makefile \
kdevelop/kwrite/Makefile \
kdevelop/templates/Makefile
)
</screen>

versión nueva:
<screen>AC_OUTPUT(Makefile kdevelop/kwrite/Makefile kdevelop/templates/Makefile)
</screen>
</para>

<para><emphasis remap="bf">P:</emphasis>  Obtengo los siguientes errores <indexterm remap="idx"><primary>errores</primary></indexterm> de enlazado <indexterm remap="idx"><primary>enlazado</primary></indexterm>, utilizando SuSE Linux con KDE 1.1. ¿Qué hago para poder enlazar KDevelop?
<screen>/usr/lib/libqt.so:
warning: multiple common of `QArrayT&&lt;;char&&gt;; type_info node'
ckdevelop.o: warning: previous common is here
ckdevelop.o: In function `CKDevelop::slotFileSaveAll(void)':
ckdevelop.o(.text+0x784): undefined reference to `kdebug(unsigned short,
unsigned short, char const *,...)'
ckdevelop.o(.text+0x839): undefined reference to `kdebug(unsigned short,
unsigned short, char const *,...)'
ckdevelop.o(.text+0x89d): undefined reference to `kdebug(unsigned short,
unsigned short, char const *,...)'
ckdevelop.o: In function `CKDevelop::slotFileSaveAs(void)':
ckdevelop.o(.text+0xd28): undefined reference to `kdebug(unsigned short,
unsigned short, char const *,...)'
ckdevelop.o: In function `CKDevelop::slotFileClose(void)':
ckdevelop.o(.text+0x1216): undefined reference to `kdebug(unsigned short,
unsigned short, char const *,...)'
ckdevelop.o(.text+0x1263): more undefined references to `kdebug(unsigned
short, unsigned short, char const     *,...)' follow  collect2: ld returned 1
exit status  make[2]: ***
[kdevelop] Error 1  make[2]: Leaving directory
'/home/LinuXDaten/Programme_Updates_Packete/KDE_Updates/Kdevelop_actual_sna-&gt;
-&gt;pshot/kdevelop-0.3/kdevelop'
make[1]: *** [all-recursive] Error 1  make[1]: Leaving directory
`/home/LinuXDaten/Programme_Updates_Packete/KDE_Updates/Kdevelop_actual_sna-&gt;
-&gt;pshot/kdevelop-0.3'
make: *** [all-recursive-am] Error 2
</screen>

<emphasis remap="bf">R:</emphasis> Si tiene instalado los paquetes rpm del KDE 1.1 de SuSE, debe recompilar kdelibs sin el parche incluido por SuSE y reinstalarlas, o conseguir un rpm actualizado de kdelibs desde <ulink url="ftp://ftp.suse.com">\|\|</ulink></para>
</sect1>

<sect1 id="preguntas-de-utilizacin">
<title>Preguntas de utilización</title>

<para><emphasis remap="bf">P:</emphasis> Veo que KDevelop no permite el uso de la tecla Suprimir (o de la de retroceso) para borrar un texto seleccionado.</para>

<para><emphasis remap="bf">R:</emphasis>  Vaya a "Opciones"-&gt;"Editor..." y asegúrese de que la opción "Borrar al escribir" está habilitada, entonces funcionarán las teclas de suprimir y retroceso.</para>

<para><emphasis remap="bf">P:</emphasis> Si añado ficheros a mi proyecto, ¿serán incluidos y compilados automáticamente?</para>

<para><emphasis remap="bf">R:</emphasis> Sí, serán incluidos en los ficheros Makefile.am <indexterm remap="idx"><primary>Makefile.am</primary></indexterm> y, si selecciona "Reconstruir todo", (./configure <indexterm remap="idx"><primary>configure</primary></indexterm> actualizará los ficheros Makefile <indexterm remap="idx"><primary>Makefile</primary></indexterm>) y sus ficheros serán incluidos.</para>

<para><emphasis remap="bf">P:</emphasis> Borré un fichero y obtengo unos extraños mensajes de enlazado <indexterm remap="idx"><primary>enlazado</primary></indexterm>. ¿Qué le pasa a mi proyecto?</para>

<para><emphasis remap="bf">R:</emphasis> Si el fichero eliminado era un fichero de cabecera, que es procesado automáticamente por automoc (ejecutando Qt-Meta-Object-Compile automáticamente en todas las cabeceras), su fichero de cabecera aún está presente como fichero *.moc.cpp y es compilado. Elimine el fichero *.moc.cpp correspondiente y reconstruya el proyecto.</para>

<para><emphasis remap="bf">P:</emphasis> Configure se queja de que no es capaz de compilar una pequeña aplicación KDE. Al examinar el fichero config.log se ve que no puede encontrar la biblioteca libXext.
<emphasis remap="bf">R:</emphasis> Instale el paquete xdevel</para>

<para><emphasis remap="bf">P:</emphasis> Estoy desarrollando una aplicación en la que se le debe pasar opciones del tipo -D al preprocesador. Si añado las opciones en las opciones del proyecto, todo va bien, pero cuando distribuyo el paquete, las opciones -D seleccionadas en KDevelop no se utilizan. ¿Qué he de hacer para que se utilicen?
<emphasis remap="bf">R:</emphasis> Edite el fichero configure.in situado en el directorio raiz de los fuentes. En él debe introducir, cerca del principio:</para>

<para>CXXFLAGS=$(CXXFLAGS) " -DSusOpciones"
AC&&lowbar;;SUBST(CXXFLAGS)</para>

<para><emphasis remap="bf">P:</emphasis> Estoy utilizando una instantánea de KDE2 y deseo utilizar KDevelop bajo KDE2. ¿Cuál es la mejor forma de conseguirlo?
<emphasis remap="bf">R:</emphasis> KDE2 aún está siendo desarrollado, por lo que le recomendamos que considere utilizar una versión 1.x estable para usar KDevelop. En cualquier caso, KDevelop 1.x puede ser fácilmente ejecutado en KDE2 mediante un fichero de comandos de shell (script) con el siguiente contenido:</para>

<para>&&num;;/bin/bash
QTDIR=/usr/lib/qt-1.44 export QTDIR
KDEDIR=/opt/kde export KDEDIR
exec /opt/kde/bin/kdevelop</para>

<para>Guarde este fichero como (por ejemplo) kdevelop1 y márquelo como ejecutable mediante</para>

<para>chmod 755 kdevelop1</para>

<para>Con esto podrá ejecutar KDevelop 1.x bajo KDE 2 ejecutando kdevelop1. Para desarrollar aplicaciones para KDE 2 con KDevelop 1.x debe configurar correctamente los directorios en la configuración de KDevelop, aunque esté ejecutando KDevelop bajo KDE 2.</para>
</sect1>
</chapter>

<chapter id="autores">
<title>Autores</title>

<para><emphasis remap="bf">Desarrolladores principales:</emphasis></para>

<para>Sandy Meier 			<ulink url="mailto:smeier@rz.uni-potsdam.de">&lt;smeier@rz.uni-potsdam.de&gt;</ulink>
(mantenimiento, coordinador de desarrollo y proveedor de la página web)
<quote>Desarrollo principal de: estructura del programa, apariencia del entorno, gestión del proyecto.</quote></para>

<para>Stefan Heidrich			<ulink url="mailto:sheidric@rz.uni-potsdam.de">&lt;sheidric@rz.uni-potsdam.de&gt;</ulink>
<quote>Desarrollo principal de: KAppWizard <indexterm remap="idx"><primary>KAppWizard</primary></indexterm>, habilidad de impresión <indexterm remap="idx"><primary>impresión</primary></indexterm> </quote></para>

<para>Ralf Nolden			<ulink url="mailto:Ralf.Nolden@post.rwth-aachen.de">&lt;Ralf.Nolden@post.rwth-aachen.de&gt;</ulink>
<quote>Desarrollo principal de: intefaz del editor de diálogos, opciones de configuración, ayuda y manuales en línea</quote></para>

<para>Jonas Nordin			<ulink url="mailto:jonas.nordin@cenacle.se">&lt;jonas.nordin@cenacle.se&gt;</ulink>
<quote>Desarrollo principal de: visor y analizador de clases</quote></para>

<para>Pascal Krahmer 			<ulink url="mailto:pascal@beast.de">&lt;pascal@beast.de&gt;</ulink>
<quote>Desarrollo principal de: editor de diálogos</quote></para>

<para>Bernd Gehrmann 			<ulink url="mailto:bernd@physik.hu-berlin.de">&lt;bernd@physik.hu-berlin.de&gt;</ulink>
<quote>Desarrollo principal de: diálogo de la herramienta grep, integración del CVS, nuevo árbol de documentación</quote></para>

<para>Jörgen Olsson       <ulink url="mailto:jorgen@cenacle.net">&lt;jorgen@cenacle.net&gt;</ulink>
<quote>Desarrollo principal de: árbol de clases visual</quote></para>

<para>Stefan Bartel 			<ulink url="mailto:bartel@rz.uni-potsdam.de">&lt;bartel@rz.uni-potsdam.de&gt;</ulink>
<quote>Desarrollo principal de: visor real de ficheros</quote></para>

<para>Walter Tasin <ulink url="mailto:tasin@kdevelop.de">&lt;tasin@kdevelop.de&gt;</ulink>
<quote>Desarrollo principal de: mejoras y depuración de errores</quote></para>

<para>John Birch <ulink url="mailto:jbb@ihug.co.nz">&lt;jbb@ihug.co.nz&gt;</ulink>
<quote>Desarrollo principal de: depurador integrado</quote></para>

<para><emphasis remap="bf">Coordinador de traducciones:</emphasis></para>

<para>Martin Piskernig		<ulink url="mailto:martin.piskernig@stuwo.at">&lt;martin.piskernig@stuwo.at&gt;</ulink></para>

<para><emphasis remap="bf">Traductores del programa y la documentación:</emphasis></para>

<para><itemizedlist>
<listitem>
<para>Martin Spirk 				<ulink url="mailto:spirk@kla.pvt.cz">&lt;spirk@kla.pvt.cz&gt;</ulink> 		-Checo</para>
</listitem>
<listitem>
<para>Steen Rabol    			<ulink url="mailto:rabol@get2net.dk">&lt;rabol@get2net.dk&gt;</ulink>			-Danés</para>
</listitem>
<listitem>
<para>Peeter Russak       <ulink url="mailto:pezz@tkwcy.ee">&lt;pezz@tkwcy.ee&gt;</ulink>	            - Estonio</para>
</listitem>
<listitem>
<para>Sami Kuhmonen 			<ulink url="mailto:sami@iqs.fi">&lt;sami@iqs.fi&gt;</ulink>					-Finlandés</para>
</listitem>
<listitem>
<para>Herve Lefebvre 			<ulink url="mailto:hlefebvre@easynet.fr">&lt;hlefebvre@easynet.fr&gt;</ulink>			-Francés</para>
</listitem>
<listitem>
<para>Martin Piskernig    <ulink url="mailto:mpiskernig@kdevelop.de">&lt;mpiskernig@kdevelop.de&gt;</ulink>	-Alemán</para>
</listitem>
<listitem>
<para>Ralf Funken         <ulink url="mailto:rfunken@kdevelop.de">&lt;rfunken@kdevelop.de&gt;</ulink>	-Alemán</para>
</listitem>
<listitem>
<para>Pahan Szabolcs 			<ulink url="mailto:szabczy@bigfoot.com">&lt;szabczy@bigfoot.com&gt;</ulink>			-Húngaro</para>
</listitem>
<listitem>
<para>Massimo Morin       <ulink url="mailto:mmorin@schedsys.com">&lt;mmorin@schedsys.com&gt;</ulink> -Italiano</para>
</listitem>
<listitem>
<para>Taiki Komoda        <ulink url="mailto:kom@kde.gr.jp">&lt;kom@kde.gr.jp&gt;</ulink>  - Japonés</para>
</listitem>
<listitem>
<para>Jacek Wojdel 				<ulink url="mailto:wojdel@kbs.twi.tudelft.nl">&lt;wojdel@kbs.twi.tudelft.nl&gt;</ulink>     -Polaco</para>
</listitem>
<listitem>
<para>Duarte Loreto 			<ulink url="mailto:dnloreto@esoterica.pt">&lt;dnloreto@esoterica.pt&gt;</ulink>		-Portugués</para>
</listitem>
<listitem>
<para>Guilherme Ceschiatti B.M.<ulink url="mailto:guiga@cpdee.ufmg.br">&lt;guiga@cpdee.ufmg.br&gt;</ulink>  -Portugués/Brasil</para>
</listitem>
<listitem>
<para>Ilmar Habibulin    	<ulink url="mailto:ilmar@ints.ru">&lt;ilmar@ints.ru&gt;</ulink>				-Ruso</para>
</listitem>
<listitem>
<para>Jan Prokop 					<ulink url="mailto:jprokop@ibl.sk">&lt;jprokop@ibl.sk&gt;</ulink>	-Eslovaco</para>
</listitem>
<listitem>
<para>Salvador Gimeno Zanón	<ulink url="mailto:salgiza@eui.upv.es">&lt;salgiza@eui.upv.es&gt;</ulink>		-Español</para>
</listitem>
<listitem>
<para>Patrik Adolfsson 		<ulink url="mailto:patrik.adolfsson@iname.com">&lt;patrik.adolfsson@iname.com&gt;</ulink>		-Sueco</para>
</listitem>
<listitem>
<para>Kaðan Kongar        <ulink url="mailto:kongar@doruk.net.tr">&lt;kongar@doruk.net.tr&gt;</ulink> - Turco</para>
</listitem>
<listitem>
<para>Sunchange Lee       <ulink url="mailto:leesongchen@263.net">&lt;leesongchen@263.net&gt;</ulink> - Chino simplificado (GB2312)</para>
</listitem>
</itemizedlist>
</para>

<para><emphasis remap="bf">Logo de inicio:</emphasis></para>

<para><itemizedlist>
<listitem>
<para>KDevelop 1.0: Jacek Wojdel 			<ulink url="mailto:wojdel@kbs.twi.tudelft.nl">&lt;wojdel@kbs.twi.tudelft.nl&gt;</ulink></para>
</listitem>
<listitem>
<para>KDevelop 1.1, 1.2: Ralph Kocher      <ulink url="mailto:RKocher@t-online.de">&lt;RKocher@t-online.de&gt;</ulink></para>
</listitem>
</itemizedlist>
</para>

<para><emphasis remap="bf">Colaboraciones, parches y arreglo de fallos:</emphasis></para>

<para><itemizedlist>
<listitem>
<para>Pau Estalella Fernandez <ulink url="mailto:pef@upcnet.upc.es">&lt;pef@upcnet.upc.es&gt;</ulink></para>
</listitem>
<listitem>
<para>Jost Schenk    					<ulink url="mailto:Jost@Schenk.de">&lt;Jost@Schenk.de&gt;</ulink></para>
</listitem>
<listitem>
<para>David Barth    					<ulink url="mailto:dbarth@videotron.ca">&lt;dbarth@videotron.ca&gt;</ulink></para>
</listitem>
<listitem>
<para>Matthias Hipp						<ulink url="mailto:Matthias.Hipp@gmx.de">&lt;Matthias.Hipp@gmx.de&gt;</ulink></para>
</listitem>
<listitem>
<para>Martin Piskernig    		<ulink url="mailto:martin.piskernig@stuwo.at">&lt;martin.piskernig@stuwo.at&gt;</ulink></para>
</listitem>
<listitem>
<para>Jochen Wilhelmy 				<ulink url="mailto:digisnap@cs.tu-berlin.de">&lt;digisnap@cs.tu-berlin.de&gt;</ulink></para>
</listitem>
<listitem>
<para>Matthias Hoelzer-Kluepfel    	<ulink url="mailto:mh@caldera.de">&lt;mh@caldera.de&gt;</ulink></para>
</listitem>
<listitem>
<para>Matt Koss 							<ulink url="mailto:koss@napri.sk">&lt;koss@napri.sk&gt;</ulink></para>
</listitem>
<listitem>
<para>Torsten Uhlmann 				<ulink url="mailto:TUhlmann@debis.com">&lt;TUhlmann@debis.com&gt;</ulink></para>
</listitem>
<listitem>
<para>Stefan Mars             <ulink url="mailto:mars@lysator.liu.se">&lt;mars@lysator.liu.se&gt;</ulink></para>
</listitem>
<listitem>
<para>Nikolay Liber           <ulink url="mailto:nikolay_liber@mail.ru">&lt;nikolay_liber@mail.ru&gt;</ulink></para>
</listitem>
<listitem>
<para>Gordon Tyler            <ulink url="maito:gtyler@iafrica.com">&lt;gtyler@iafrica.com&gt;</ulink></para>
</listitem>
<listitem>
<para>Huy Cuong Nguyen        <ulink url="maito:huyc@iquebec.com">&lt;huyc@iquebec.com&gt;</ulink></para>
</listitem>
<listitem>
<para>John R. Zedlewski       <ulink url="mailto:zedlwski@princeton.edu">&lt;zedlwski@princeton.edu&gt;</ulink></para>
</listitem>
<listitem>
<para>Stephan Uhlmann         <ulink url="mailto:suhlmann@gmx.de">&lt;suhlmann@gmx.de&gt;</ulink></para>
</listitem>
<listitem>
<para>Charles Egan            <ulink url="mailto:cega@oklahoma.net">&lt;cega@oklahoma.net&gt;</ulink></para>
</listitem>
<listitem>
<para>Andrew Morton           <ulink url="mailto:morton@nortelnetworks.com">&lt;morton@nortelnetworks.com&gt;</ulink></para>
</listitem>
<listitem>
<para>p&&lowbar;;george                <ulink url="mailto:p_george@club-internet.fr">&lt;p_george@club-internet.fr&gt;</ulink></para>
</listitem>
<listitem>
<para>Lubos Lunak             <ulink url="mailto:l.lunak@sh.cvut.cz">&lt;l.lunak@sh.cvut.cz&gt;</ulink></para>
</listitem>
<listitem>
<para>Armin L. Schneider      <ulink url="mailto:armin@uumail.de.uu.net">&lt;armin@uumail.de.uu.net&gt;</ulink></para>
</listitem>
<listitem>
<para>Martin Spirk            <ulink url="mailto:spirk@kla.pvt.cz">&lt;spirk@kla.pvt.cz&gt;</ulink></para>
</listitem>
<listitem>
<para>Ralf Palsa              <ulink url="mailto:rpalsa@eso.org">&lt;rpalsa@eso.org&gt;</ulink></para>
</listitem>
<listitem>
<para>Richard Dale            <ulink url="mailto:Richard_Dale@tipitina.demon.co.uk">&lt;Richard_Dale@tipitina.demon.co.uk&gt;</ulink></para>
</listitem>
<listitem>
<para>Holger Schurig          <ulink url="mailto:holger@holger.om.org">&lt;holger@holger.om.org&gt;</ulink></para>
</listitem>
<listitem>
<para>Dag Andersen            <ulink url="mailto:dandersen@c2i.net">&lt;dandersen@c2i.net&gt;</ulink></para>
</listitem>
<listitem>
<para>Alexis Mikhailov        <ulink url="mailto:alexis@abc.cap.ru">&lt;alexis@abc.cap.ru&gt;</ulink></para>
</listitem>
<listitem>
<para>Ulltveit-Moe            <ulink url="mailto:Nils.Ulltveit-Moe@hia.no">&lt;Nils.Ulltveit-Moe@hia.no&gt;</ulink></para>
</listitem>
<listitem>
<para>Nich Hudson             <ulink url="mailto:nick@nthcliff.demon.co.uk">&lt;nick@nthcliff.demon.co.uk&gt;</ulink></para>
</listitem>
<listitem>
<para>R. Imura                <ulink url="mailto:imura@cs.titech.ac.jp">&lt;imura@cs.titech.ac.jp&gt;</ulink></para>
</listitem>
<listitem>
<para>Falk Brettschneider     <ulink url="mailto:gigafalk@yahoo.com">&lt;gigafalk@yahoo.com&gt;</ulink></para>
</listitem>
<listitem>
<para>Ralf Funken             <ulink url="mailto:rfunken@kdevelop.de">&lt;rfunken@kdevelop.de&gt;</ulink></para>
</listitem>
</itemizedlist>
</para>

<para><emphasis remap="bf">KDevelop contiene código fuente de las siguientes aplicaciones:</emphasis></para>

<para><emphasis remap="bf">KWrite 0.98</emphasis> &&copy;;		por Jochen Wilhelmy		<ulink url="mailto:digisnap@cs.tu-berlin.de">&lt;digisnap@cs.tu-berlin.de&gt;</ulink></para>

<para><emphasis remap="bf">KDE Help</emphasis> &&copy;;		por Martin R. Jones 		<ulink url="mailto:mjones@kde.org">&lt;mjones@kde.org&gt;</ulink></para>

<para><emphasis remap="bf">KSwallow</emphasis>	&&copy;; 		por Matthias Hoelzer  <ulink url="mailto:hoelzer@physik.uni-wuerzburg.de">&lt;hoelzer@physik.uni-wuerzburg.de&gt;</ulink></para>

<para><emphasis remap="bf">kcmlocale</emphasis>	&&copy;; 1998 	por Matthias Hoelzer <ulink url="mailto:hoelzer@physik.uni-wuerzburg.de">&lt;hoelzer@physik.uni-wuerzburg.de&gt;</ulink></para>
</chapter>

<chapter id="agradecimientos">
<title>Agradecimientos</title>

<para>Nos gustaría mostrar nuestro a gradecimiento a todos los familiares y amigos que nos apoyaron de distintas maneras para ayudarnos a construir y mejorar KDevelop.</para>

<para>Además, gracias a Jochen Wilhelmy por ofrecernos su programa kwrite y por su ayuda al integrarlo con KDevelop.</para>

<para>Gracias también al equipo de KDE y a Stephan Kulow, quien nos dio la posibilidad de trabajar en KDevelop mediante un CVS.</para>

<para>Esperamos que nuestro trabajo en este producto conduzca a una mejor aceptación del software libre y su desarrollo. Sin la ayuda y el idealismo de muchos, KDevelop nunca podría haber sido creado en tan poco tiempo, y estamos orgullosos de que haya tantos usuarios que ya han comentado sus buenas experiencias con el programa, conduciéndolo a su propósito: ayudar a los programadores de software libre a construir un mundo mejor en el que los usuarios tengan la libertad de la elección.</para>
</chapter>

<chapter id="copyright">
<title>Copyright </title>

<para><screen>
KDevelop Copyright 1998,1999,2000 The KDevelop Team.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</screen>
</para>
</chapter>
<![ %addindex; [ &docindex; ]]>
</book>
<!--
Local Variables:
mode: sgml
sgml-omittag: nil
sgml-shorttag: t
sgml-general-insert-case: lower
End:
-->
