-*-outline-*-

# *****************************************************************************
# HACKING-fr : Notes du programmeur
# HACKING-fr : Programmer notes
#
#
# TouxDoux : Chtit gestionnaire de projet - A littl' project manager
# Copyright (c) 2000-2001 Philippe Roy
# Auteur - Author : Philippe Roy <ph_roy@toutdoux.org>
#
#
# Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
# sous les termes de la licence publique gnrale GNU telle qu'elle est publie par
# la Free Software Foundation ; soit la version 2 de la licence, ou
# (comme vous voulez) toute version ultrieure.
#
# Ce programme est distribu dans l'espoir qu'il sera utile,
# mais SANS AUCUNE GARANTIE ; mme sans la garantie de
# COMMERCIALIT ou d'ADQUATION A UN BUT PARTICULIER. Voir la
# licence publique gnrale GNU pour plus de dtails.
#
# Vous devriez avoir reu une copie de la licence publique gnrale GNU
# avec ce programme ; si ce n'est pas le cas, crivez  la Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
# *****************************************************************************

* 1. Convention des noms
** 1. Rpertoires
** 2. Fichiers standards des greffons
** 3. Types - Objets - Macros - Variables
** 4. Fonctions 
* 2. Paramtrage
** 1. Schma
** 2. Modules
** 3. Symboles
* 4. Protocoles
** 1. Drag'n'Drop en mode Xdnd
* 5. Limites
* 6. Rservations
** 1. mots rservs
** 2. MOD_CORE[i] : module noyaux chargs au dmarrage
* 7. Environnement
** 1. Commandes externes requises
** 2. Commandes externes optionnelles
** 3. Variables 
* 8. Modules inexpoitable

* 1. Convention des noms
 
** 1. Rpertoires

  	- lib				: fonctions communes aux greffons utilisant des donnes communes
  	- app				: application
  	- core-plugins			: greffons noyaux
  	- data-plugins			: greffons pouvant traiter les fichiers
  	- backends			: dorsaux
  	- scripts			: scripts (Shell, Perl, ...)
  	- pixmaps			: images (xpm, xbm)
  	- doc				: documentation (SGML)

** 2. Fichiers standards des greffons

  	- main.c			: donnes et fonctions de base
  	- main.h			: donnes et fonctions de base
  	- icons.h			: icnes
  	- icon_*.xpm			: icne du greffon
  	- share/tables.xml		: schma et paramtrage
  	- share/symbols.xml		: symbles du cavenas
  	- share/en/customize.xml	: personnalisation
  	- share/en/presto.xml		: documentation
  	- share/en/faq.xml		: foire aux questions

** 3. Types - Objets - Macros - Variables
      
	- Td_*				: types : ex. Td_about
	- Td*				: types et objets : ex. TdAbout
	- TD_*(majuscule)		: macros d'objet : ex. TD_ABOUT(...)
	- *(majuscule)			: valeurs communes (lib) : ex. FLAG_DRAG_ROW_OLD

	- TD_CURRENT (champs)		: commandes interne SQL bas sur CURRENT_ROW

** 4. Fonctions 

	- gtdk_*			: fonctions complmentaires aux widgets standards
	- td_*				: fonctions communes sur les objects

	- plugins_about_def		: definition du  propos du greffon
	- plugins_mod_def		: definition gnrale du greffon
	- plugins_init			: initialisation du greffon
	- plugins_destroy		: dtruction du greffon

* 2. Paramtrage

** 1. Schma

	- base de donnes (nom, commentaire)
	- table (nom, commentaire)
	 	- champs (nom, commentaire)
		* td_id : identificateur
		* td_obso : donne obsolte (champs en prvision)
		         - proprites (nom, valeur)
			 * type
			          * bool
				  * int2
				  * int4
				  * int8
				  * numeric(p,s) (TODO)
				  * serial
				  * float4
				  * float8
				  * decimal(p,s) (TODO)
				  * char
				  * char(n)
				  * varchar(n)
				  * text (TODO)
				  * blob (TODO)
				  * enum() (TODO)
				  * set()
				  * time (TODO)
				  * timez (TODO)
				  * date
				  * timestamp (TODO)
				  * timestampz (TODO)
				  * interval
			* type option
				  * unsigned
				  * zero fill
				  * binary
			* constraint
				  * not null
				  * unique
				  * primary key
			* default

** 2. Modules

	- module (nom, nom de paramtrage, commentaire, icone)
		- table (nom, table)
			- champs (nom, champs de la table)
				  - proprites (nom, valeur)
				  * column name
				  * column size
				           * automatic
					   * hidden
				  * column editpropmenu
		- palette
			- proprites (nom, valeur)
			* palette name
			* palette icon
		- tabli
			- proprites (nom, valeur)
			* editprop name
			* editprop visibility
				  * hidden
				  * uneditable
			* editprop list item
			* editprop list query
			* editprop list static query
			* editprop editor
				  * hidden
		- menu

** 3. Symboles (TODO)

	- symbole (nom, requete de visibilit)
		- primitive de dessin (nom, type)
		         - proprites (nom, type, valeur)
		* color
			 * foreground
			 * background
		* pencil
			 * line width
			 * line style
			 * line cap
			 * line join
		* font
			 * font
		* text
			 * text
			 * x
			 * y
		* point
			 * x
			 * y
		* points
			 * x
			 * y
		* line
			 * x
			 * y
			 * x
			 * y
		* lines
			 * x
			 * y
			 * x
			 * y
		* segments
			 * x
			 * y
			 * x
			 * y
		* rectangle
			 * filled
			 * x
			 * y
			 * width
			 * height
		* polygon
			 * filled
			 * x
			 * y
		* arc
			 * filled
			 * x
			 * y
			 * width
			 * height
			 * angle1
			 * angle2

	Les proprits peuvent tre
	      - statique: static
	      - dynamique par requete SQL: query
	      - paramtre: param

* 4. Protocoles

** 1. Drag'n'Drop en mode Xdnd
   
	La donne tampon est une chane de caractre.

		- '\\' spare les lignes
		- la dernire valeur de la ligne reprsente le niveau de la node dans l'arbre 

* 5. Limites

	- champs
	        - 50 champs maxi par table

	- greffons
		- rpertoire : 1 (situation temporaire)
		- chargs : 50

	- dictionnaire des greffons
		- langues : 50
		- mots : 50

	- drag'n'drop en mode Xdnd
		- donnes : 6000

	- menu
	        - fichiers rcents : 10
	        - greffons statiques : 50

	- fichier support XML
	        - 4 niveaux en mode normal (branch, petal, foliole et stomate)
		- pour le momment l'association de "mode_one_column" et de "mode_level" n'existe pas

	- fichier csv
	        - caractres maxi par lignes : 100 000

	- fonction 
		- uniquement pour le premier enfant du module
		- uniquement sur la node courante

* 6. Rservations

** 1. mots rservs

	- '(null)'				: valeur nulle
	- '(bud)'				: valeur indfinis
	- '(ok)'				: valeur anonyme
	- '(separator)'				: separateur de menu
	- '(default value)'			: valeur par dfaut du menu
	- 'TD_CURRENT x;'			: cache SQL : valeur du champs x de la node couurante
	- 'TD_CURRENT (*);'			: cache SQL : liste des valeurs de la node couurante
	- 'TD_CURRENT (null);'			: cache SQL : existance de la node couurante
	- 'TD_CURRENT x WHERE [...];'		: cache SQL : valeur du champs x de la node couurante avec une condition positive
	- 'TD_CURRENT x WHERE NOT [...];'	: cache SQL : valeur du champs x de la node couurante avec une condition ngative
	- 'TD_CURRENT_ID			: cache SQL : identificateur de la node courante pour une requte du type SELECT.
	- 'TD_CURRENT_ID_PARENT			: cache SQL : identificateur du parent de la node courante pour une requte du type SELECT.
	- 'msgid'				: identificateur d'un message po
	- 'msgstr'				: traduction d'un message po

** 2. MOD_CORE[i] : module noyaux chargs au dmarrage

        -  0 : dialog_messages
        -  1 : communication_url
        -  2 : communication_db
        -  3 : help_customize
        -  4 : help_doc

* 7. Environnement

** 1. Commandes externes requises

  	- 'cp' : copie de fichier
  	- 'mv' : dplacement de fichier
  	- 'sed' : diteur shell

** 2. Commandes externes optionnelles

  	- 'wget' : recuprateur HTTP ou FTP
  	- 'gcolorsel : navigateur de la palette des couleurs du serveur X
  	- 'hopla' : lien XML/SQL
  	- 'emacs' : diteur GNU Emacs
  	- 'emacsclient' : diteur GNU Emacs en mode serveur
  	- 'xwininfo' : descripteur de fentres x
  	- 'createdb' : cration de base de donnes PostgreSQL
  	- 'dropdb' : destruction de base de donnes PostgreSQL

** 3. Variables 

  	- 'HOSTNAME' : hte
  	- 'LANGUAGE' : language
  	- 'BROWSER' : navigateur

* 8. Modules inexpoitables

  	- dorsal et frontal 'hupli' : charge plus longue que prvu initialement -> +tards
  	- dorsal et frontal 'hopla' : modification importante du contexte -> +tards
  	- frontal 'emacs': charge plus longue que prvu initialement -> +tards
  	- greffon 'old_file_x' : modification importante du contexte -> +tards
  	- greffon 'rigopo' : module juste initialis
  	- greffon 'tree' : modification importante du contexte -> +tards
  	- greffon 'mindmap' : module juste initialis
