 #!/bin/bash
	  # lancement de l'interpréteur wish\
	  exec tclsh "$0" "${1+"$@"}"

 #	toutankamon
 #	editeur de texte en tcl tk
 #	sauvegardant le texte au formatTTC

 #_____________________________________________
 #
 #						  TOUTANKAMON  23 mai 2006
	# version 2.1
 #_____________________________________________

 #------------------------------------------------------------------------------------------

	  # Ce programme est un logiciel libre :
	  # vous pouvez le redistribuer et/ou le modifier
	  # licence NOL : pas d'Obligations, ni pour vous ni pour moi.

	  # Ce programme est distribué dans l'espoir qu'il sera utile,
	  # mais SANS AUCUNE GARANTIE ;
	  # sans même la garantie implicite de COMMERCIALISATION ou
	  # D'ADAPTATION A UN OBJET PARTICULIER.

 #-------------------------------------------------------------------------------------------

	  # la ligne suivante (package require Tk) sert à  tester l'évaluation avec Tclsh
	  #... sinon Toutankamon ne fonctionne pas :

	  package require Tk

 	  set Chemin(abs) [pwd]
	  set NomScript [info script]
	  set Chemin(rel) [file dirname $NomScript]

	set version 3_1

	global widtexte
	set widtexte .f.t

	variable fenobjet

	variable fonte ""
	variable application toutankamon

			#variable définie pour le développement  :
			 variable ttcFile C:/a_toutankamon/truc.txt
			
			# pour avoir accès au module Occurences, dont l'espace de nom est marqué par Okur::
			namespace eval Okur {}

 #_____________________________________
 #<interface>

 #<barre_commandes>

 frame .fc -background LimeGreen
 pack .fc -side top -fill x

 # ce menu ".menuTagsCleaner" correspond au bouton de nettoyage des tags
 menu .menuTagsCleaner

 pack [button .fc.bLoad -text "Ouvrir " -command "ouvrirTTC "] -side left
pack [button .fc.close -text "Fermer " -command "fermerTTC "] -side left
 pack [button .fc.bSave -text "Sauver" -command "sauverFichierTTC $widtexte"] -side left

 pack [button .fc.bUndo -text "Undo" -command "defaire $widtexte"] -side left
 pack [button .fc.bRedo -text "Redo" -command "refaire $widtexte" ] -side left

 pack [button .fc.bSelectAll -text "Select. tout" -command "selectAll $widtexte" ] -side left

 	

 pack [button .fc.bBg -text "BG color" -command "tagBgColor $widtexte"] -side left
 pack [button .fc.bFg -text "FG color" -command "tagFgColor $widtexte"] -side left

 pack [button .fc.bFont -text "Fonte" -command "choixFonte $widtexte "] -side left

 pack [button .fc.bPhoto  -text "Photo" -command "insertPhoto $widtexte"] -side left

 pack [menubutton .fc.mWidget -text "Widget" -menu .fc.mWidget.menuWidgets  -relief raise] -side left
 pack [menubutton .fc.mDraw -text "Draw" -menu .fc.mDraw.menuCanvas  -relief raise] -side left

 #<menus>
 # ce menu  ".fc.mWidget.menuWidgets" correspond au bouton d'insertion des widgets
 menu .fc.mWidget.menuWidgets
 set lw [list button checkbutton canvas entry frame label listbox menubutton message  radiobutton scale scrollbar spinbox text ]
 foreach item $lw {
	.fc.mWidget.menuWidgets add command -label $item  -command "insertWidget  $item"
	}

 # ce menu permet d'insérer des objets dans un canvas
	 menu .fc.mDraw.menuCanvas
 set lw [list line rectangle polygon oval arc text  bitmap image ]
 foreach item $lw {
	.fc.mDraw.menuCanvas add command -label $item  -command "configDraw  $item"
	}

 # barre d'aide

frame .f3 -background LimeGreen
  pack .f3 -side bottom -fill x -expand false

pack [button .f3.bCleanTags -text "Nettoyer" -foreground red -command "cleanDeadTags $widtexte"] -side left

pack [button .f3.okur -text Occurences -foreground black -command {  Okur::ChoisirMot }] -side left 

pack [label .f3.textActif -bg white -relief sunken -borderwidth 5] -side right -expand true

pack [button .f3.bAide -text "Aide" -background yellow -command {ttkaide } ] -side left


 #<Fenetre_texte>

 frame .f -background LimeGreen
 pack .f -side bottom -fill both -expand true

 scrollbar .f.x  -orient horizontal  -command {.f.t xview}
 pack .f.x  -fill x -side bottom

 text .f.t  -undo 1 -xscrollcommand {.f.x set }  -yscrollcommand {.f.y set }  -wrap none
 pack .f.t  -side left  -fill both  -expand true

 scrollbar .f.y -orient vertical -command {.f.t yview }
  pack .f.y -fill y  -side left

 #<bind>

 pack [label .f3.lBind -text "  fn+f1 affiche code ttc \n fn+f  réaffiche le document  "  -relief raise] -side left
 pack [label .f3.lBind2 -text "  clic gauche sélectionne text \nclic droit  ouvre menu insertion  "  -relief raise] -side left
#il faut avoir cliqué sur le texte pour qu'il soit  et sensible aux touche fn

 bind $widtexte <F1> {
	set dumpie [dumptags %W]\n[dumpwindows %W]\n[%W dump 1.0 end]
	%W delete 1.0 end
	%W insert end  $dumpie
		 }
 bind $widtexte <F2> {
	set content [%W get 1.0 end-13char]
	%W delete 1.0 end
	undump %W $content
	set niveaux [list %W ]
	allWidgetsKnowed $niveaux ; # pour faire la liste de tous les widgets dans tous les widgets, puis insérer un bind pour chaque widget pour pouvoir le rééditer.
	 	}

 #<Escape>
 bind $widtexte <Escape> {escapePermute $widtexte}

 #<Control+A>
 bind $widtexte <Control-a>   { selectAll $widtexte}
 bind $widtexte <Control-A>   { selectAll $widtexte}
 bind $widtexte <Control-w>  { selectAll $widtexte}
 bind $widtexte <Control-W>  { selectAll $widtexte}

 bind $widtexte <1> {set widtexte %W ; .f3.textActif configure -text "texte  : $widtexte" -fg red}
 bind  $widtexte <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .fc.mWidget.menuWidgets 25 50}
 bind $widtexte <2>  {tk_popup  .fc.mDraw.menuCanvas 25 50 }
 bind $widtexte <Control-3>  {tk_popup  .fc.mDraw.menuCanvas 25 50 }

#<fin_interface>

 #---------------------------------------------------------
 proc ttkaide {} {
 destroy .aide
 toplevel .aide
 text .aide.t -bg pink -yscrollcommand {.aide.y set} -xscrollcommand {.aide.x set} -wrap word -font {helvetica 12}
 scrollbar .aide.x -command {.aide.t xview} -orient h
 scrollbar .aide.y -command {.aide.t yview} -orient v
 pack .aide.x -side bottom -fill x
 pack .aide.t -side left -fill both -expand true
 pack .aide.y -side left -fill y

 set textAide  {AIDE TOUTANKAMON

FRANÇAIS

 Ce programme est développé non pour servir réellement, mais pour expérimenter et explorer les possibilités du format .ttc, et tendre vers une formalisation de sauvegarde la plus générale possible.

 L'ergonomie n'est donc ni son fort ni son but. Les fonctions importantes sont essentiellement  'sauver' et 'ouvrir', le reste, c'est de l'habillage. 

Toutankamon est néanmoins un éditeur de texte, sa fenêtre principale permet donc d'y écrire, mais aussi

	* d'y incorporer des images
	* d'y incorporer des zones de dessin et d'y tracer des figures vectorielles
	* d'y incorporer les widgets classiques disponibles en tcl/tk
	* d'y définir des balises de formatage du texte

 Vous pouvez modifier la couleur de fond,  et la couleur de premier plan, de la partie que vous sélectionnez au curseur.

 De la même manière vous pouvez modifier la police, ainsi que la graisse et l'inclinaison, de la partie sélectionnée.

 Le bouton 'nettoyer' ouvre un menu  où sont listés les tags et leurs indices.
 En cliquant sur un item, le tag est désactivé pour la partie de texte sélectionnée.
 En revanche il reste affecté aux zones extérieures à  la sélection.

 Pour les images, elles doivent se trouver au même niveau que le fichierTTC pour pouvoir être réaffichées après sauvegarde.

 fn+f1 et fn+f permettent de voir le mode de sauvegarde et de réafficher le texte formaté.
Le texte doit être  pour que les touches agissent, donc au chargement de la page, cliquez dans la fenêtre text pour l'activer. Il doit y avoir alors le nom du widget  écrit en rouge au milieu de la barre d'outils de Toutankamon.
 Il faut avoir au préalable sauvegardé le document pour que la commande f reconnaisse le chemin de l'image sauvegardée au niveau du fichier TTC.
	ATTENTION : ne sauvegardez pas quand le code ttc est affiché, c'est le texte du code qui sera sauvegardé et qui se réafficherait au lieu du document d'origine.

 Les widgets sont reconnus par TTC,
 Mais il faut être attentif à  ce que l'option '-command' contienne des procédures ayant un sens dans le contexte d'un fenobjet 'text'.

 La touche 'escape' permute les deux caractères précédant le curseur.

 Les fonctions 'Undo' et 'Redo' ne gèrent que le texte, ni les tags ni les images :
 un tag ou une image ou un widget supprimé ne sera pas magiquement réaffiché par 'Undo'.

 Un clic gauche dans un 'text' ou un 'canvas' sélectionne l'objet pour y insérer un nouvel objet.
 Un clic droit ouvre un menu pop-up permettant de choisir un widget à inclure dans l'objet activé par un clic gauche, il s'agit d'un équivalent du bouton 'widget' de la barre des menus.
 Un clic central , ou clic gauche + clic droit ensemble, ouvre le menu pop-up pour insérer un objet dessin dans un 'canvas' s'il y en a un de sélectionné auparavant par un clic gauche.

La recherche dans les objets text est assurée par le module 'occurences'. La recherche s'effectue dans le widget text SÉLECTIONNÉ, vérifiable dans la barre du bas de Toutankamon.

}
 .aide.t insert end $textAide
 }

 #<procedures_toutankamon_editor>

 proc ouvrirTTC {} {
 global widtexte
 set widtexte .f.t
 	destroy $widtexte
	text $widtexte -xscrollcommand {.f.x set  } -yscrollcommand { .f.y set }

 	pack $widtexte -side left -before .f.y -fill both -expand true
	 bind $widtexte <1> {set widtexte %W ; .f3.textActif configure -text "texte  : $widtexte" -fg red}
	 bind  $widtexte <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}
	 bind $widtexte <2>  {tk_popup  .f.mDraw.menuCanvas 25 50 }
	 bind $widtexte <Control-3>  {tk_popup  .f.mDraw.menuCanvas 25 50 }

	bind $widtexte <F1> {
	set dumpie [dumptags %W]\n[dumpwindows %W]\n[%W dump 1.0 end]
	%W delete 1.0 end
	%W insert end  $dumpie
 	}
	 bind $widtexte <F2> {
	set content [%W get 1.0 end-13char]
	%W delete 1.0 end
	undump %W $content
	set niveaux [list $widtexte ]
	# faire la liste de tous les widgets dans tous les widgets, puis insérer un bind pour chaque widget pour pouvoir le rééditer.
	allWidgetsKnowed $niveaux
 	}

  	loadTTCfile $widtexte

	set listeWindows [list $widtexte]

	allWidgetsKnowed $listeWindows
  }

proc fermerTTC {} {

tk_messageBox -message "TTC sauvegardé?"

 global widtexte
set widtexte .f.t
 	destroy $widtexte
	text $widtexte -xscrollcommand {.f.x set  } -yscrollcommand { .f.y set }

 	pack $widtexte -side left -before .f.y -fill both -expand true
	 bind $widtexte <1> {set widtexte %W ; .f3.textActif configure -text "texte  : $widtexte" -fg red}
	 bind  $widtexte <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}
	 bind $widtexte <2>  {tk_popup  .f.mDraw.menuCanvas 25 50 }
	 bind $widtexte <Control-3>  {tk_popup  .f.mDraw.menuCanvas 25 50 }

	bind $widtexte <F1> {
	set dumpie [dumptags %W]\n[dumpwindows %W]\n[%W dump 1.0 end]
	%W delete 1.0 end
	%W insert end  $dumpie
 	}
	 bind $widtexte <F2> {
	set content [%W get 1.0 end-13char]
	%W delete 1.0 end
	undump %W $content
	set niveaux [list $widtexte ]
	# faire la liste de tous les widgets dans tous les widgets, puis insérer un bind pour chaque widget pour pouvoir le rééditer.
	allWidgetsKnowed $niveaux
 	}
.f3.textActif configure -text "document vide" -fg green
#£ 	 bind $widtexte <1> {set widtexte %W ; .f3.textActif configure -text "texte  : $widtexte" -fg red}
}

 proc allWidgetsKnowed {listEmbeded} {
 	global widtexte

	foreach {wg} $listEmbeded {
	set mm [winfo children $wg]
		foreach wwg $mm {
				if {  [string compare [winfo class $wwg ] Text]  == 0 } {

				bind $wwg <1> { global widtexte; set widtexte %W ;.f3.textActif configure -text "texte  : $widtexte" -fg red}
				bind $wwg <3> { global widtexte ; tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}
				bind $wwg <2>  {tk_popup  .f.mDraw.menuCanvas 25 50 }
 				bind $wwg <Control-3>  {tk_popup  .f.mDraw.menuCanvas 25 50 }

				allWidgetsKnowed $mm
				}
				if {  [string compare [winfo class $wwg ] Canvas]  == 0 } {

				bind $wwg <1> { global widtexte; set widtexte %W ;.f3.textActif configure -text "canvas  : $widtexte" -fg red}
				bind $wwg <3> { global widtexte ; tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}
				bind $wwg <2>  {tk_popup  .f.mDraw.menuCanvas 25 50 }
 				bind $wwg <Control-3>  {tk_popup  .f.mDraw.menuCanvas 25 50 }

				allWidgetsKnowed $mm
				}
		}

	}
 }

 proc sauverFichierTTC w {

 	#appel de la procédure générale de sauvegarde en .TTC
 	saveTagsAndText $w

 }

 #après réaffichage de ttc, il faut pouvoir assurer l'addition de nouvelles balises sans confusion de nom :
 # ceci est obtenu dans toutankamon par le modèle ci-dessous :
 #	proc tagNouveauTag w {
 #		 set i 0
 #		while {[lsearch [$w tag names ] ($i)NouveauTag  ] != -1} {
 #			incr i
 #			}
 #		$w tag configure ($i)NouveauTag  -options?
 #		$w tag add ($i)NouveauTag  index? index?
 #	}
 # le nom du nouveau tag commence par un numéro entre parenthèses
 # toutankamon vérifie alors que ce nom avec ce numéro en préfixe n'existe pas avant de l'attribuer au nouveau tag
 # la variable i est incrémentée jusqu'à  ce qu'il n'y ait plus de balise portant ce nom et ce numéro.

 proc tagBgColor w {
 global widtexte
 set w $widtexte

	set possel [$w tag nextrange sel 1.0]
	if {[string compare $possel 1.0] == -1 } {tk_messageBox -message "
 Sélectionnez une portion de texte!
 Select a part of the text contents!	" ;
	} else {
	 set i 0
	while {[lsearch [$w tag names ] ($i)bg ] != -1} {
		incr i
		}
	$w tag configure ($i)bg -background [tk_chooseColor ]
	$w tag add ($i)bg [lindex $possel 0] [lindex $possel 1]
	}
 }

 proc tagFgColor w {
 global widtexte
 set w $widtexte
	set possel [$w tag nextrange sel 1.0]
	if {[string compare $possel 1.0] == -1 } {tk_messageBox -message "
 Sélectionnez une portion de texte!

 Select a part of text contents." ;
	} else {
	 set i 0
	while {[lsearch [$w tag names ] ($i)bg ] != -1} {
		incr i
		}
	$w tag configure ($i)fg -foreground [tk_chooseColor ]
	$w tag add ($i)fg [lindex $possel 0] [lindex $possel 1]
	}
 }

 proc insertPhoto w {
 global widtexte
 variable ttcFile
 set w $widtexte
	set imagePath [tk_getOpenFile]
	set imageName [file tail $imagePath]
	set imgNouveau [image create photo -file $imagePath]
	if {[string compare [winfo class $widtexte] Canvas ] ==0} {
	set id [	$w  create image 0 0 -image $imgNouveau ]
 		 configDrawWidget $id image  $imgNouveau
	} else {
		$w image create insert -image $imgNouveau -name $imageName}
	}

 proc tagFonte w {
  global widtexte
 set w $widtexte
  variable fonte
  set possel [$w tag nextrange sel 1.0]
  if {[string compare $possel 1.0] == -1 } {tk_messageBox -message "
  Sélectionnez une portion de texte!
  Select a part of text contents." ;
	} else {

	set i 0
	while {[lsearch [$w tag names ] ($i)Fonte ] != -1} {
		incr i
		}
	$w tag configure ($i)Fonte -font  $fonte
	$w tag add ($i)Fonte [lindex $possel 0] [lindex $possel 1]

  }
  }

 proc choixFonte {w} {
 global widtexte
 set w $widtexte
  set possel [$w tag nextrange sel 1.0]
  if {[string compare $possel 1.0] == -1 } {tk_messageBox -message "
 Sélectionnez une portion de texte!
 Select a part of text contents." ;
	} else {
		set  police helvetica
		set  taillePolice 12
		set boldie normal
		set italicie roman

 		global widtexte
		variable fonte ""

		destroy .fonte
		toplevel .fonte
		wm title .fonte "FONTE "

		wm resizable .fonte false false

		frame .fonte.f  -relief raised
		frame .fonte.f.ico -bg SteelBlue

		pack .fonte.f  -expand false -fill y
		pack .fonte.f.ico -fill x

		button .fonte.f.ico.plus -text "+" -command { incr taillePolice ; .fonte.f.tp configure -font "[list $police]  $taillePolice " } -font {-size 12}
		button .fonte.f.ico.moins -text "-" -command { incr taillePolice  -1; .fonte.f.tp configure -font "[list $police]  $taillePolice "  } -font {-size 12}

		spinbox .fonte.f.ico.nomFonte -text "nom de fonte" -relief raised -bd 3  -values [font families]\
			-textvariable police -command  {.fonte.f.tp configure -font "[list $police]  $taillePolice "}  -font {-size 12}
		button .fonte.f.ico.okP -text valider -command { set fonte "[list $police]  $taillePolice $boldie $italicie" ; tagFonte $widtexte; destroy .fonte} -font {-size 12} -fg red -bg SteelBlue -relief raise

		label .fonte.f.ico.lP -text POLICE  -relief flat -bd 0 -bg SteelBlue -fg yellow -font {-size 12}

		spinbox .fonte.f.ico.sp -text police -relief raised -bd 3 -width 3  -from 6 -to 30 -incr 2 -textvariable taillePolice -command  {.fonte.f.tp configure -font "[list $police]  $taillePolice "}
		label .fonte.f.ico.l -text CorpsFonte  -relief flat -bd 0 -bg SteelBlue -fg yellow -font {-size 12}

		pack  .fonte.f.ico.l  .fonte.f.ico.plus  .fonte.f.ico.moins .fonte.f.ico.sp  	.fonte.f.ico.lP  .fonte.f.ico.nomFonte	-side left -fill y

		radiobutton .fonte.f.ico.boldo1 -text bold -variable boldie  -value bold
		radiobutton .fonte.f.ico.boldo2 -text normal -variable boldie -value normal

		radiobutton .fonte.f.ico.italico1 -text italic -variable italicie -value italic
		radiobutton .fonte.f.ico.italico2 -text roman -variable italicie -value roman

		pack .fonte.f.ico.boldo1 .fonte.f.ico.boldo2 .fonte.f.ico.italico1 .fonte.f.ico.italico2 .fonte.f.ico.okP -side left -fill y

		text .fonte.f.tp -bg AntiqueWhite -font [list $police]  -relief sunken  -wrap char -height 5 -width 15
		pack .fonte.f.tp -fill both -expand 1
		.fonte.f.tp insert end "Ceci est un texte pour essayer les fontes \nabcdefghijklmnopqrstuvwyz\nABCDEFGHIJKLMNOPQRSTUVWXYZ"

		.fonte.f.ico.nomFonte delete 0 end
		.fonte.f.ico.nomFonte insert end  "[ list [lindex [$widtexte cget -font] 0 ] ]"
		.fonte.f.ico.sp delete 0 end
		.fonte.f.ico.sp insert end "[lindex [$widtexte cget -font] 1]"

		bind .fonte <3> { destroy .fonte }

	  }
	}

 proc cleanDeadTags {w} {
 global widtexte
 set w $widtexte

tk_messageBox -message "Suppression de tags dans $w"

	.menuTagsCleaner delete 1 end
	set possel [$w tag nextrange sel 1.0]
	if {[string compare $possel 1.0] == -1 } {tk_messageBox -message "
 Sélectionnez une portion de texte!
 Select a part of the text contents" ;
	} else {
	set dumpie [$w dump -tag 1.0 end]

	foreach {tagon tagName pos}  $dumpie {
	.menuTagsCleaner add command -label "$tagon $tagName $pos" -command "$w tag remove $tagName [lindex $possel 0] [lindex $possel 1 ];.menuTagsCleaner delete 1 end"
	}
	}
 .menuTagsCleaner add command -label "supprimer tous les tags | delete all tags" -command "deleteAllTags $w"
	tk_popup .menuTagsCleaner 333 222
  }

 proc deleteAllTags {w} {
 global widtexte
 set w $widtexte

tk_messageBox -message "w = $w"

 	set allTags [$w tag names]
	foreach element $allTags {
	$w tag delete $element
	}
	.menuTagsCleaner delete 1 end
 }

 proc escapePermute {w} {
 global widtexte
 set w $widtexte

	set dernier [$w get "insert -1 char"]
	$w delete [$w index "insert -1 char"]
	$w insert [$w index "insert -1 char"] $dernier

 }

 proc defaire { w } {
		catch {$w edit undo}
	  }

 proc refaire { w } {
 global widtexte
 set w $widtexte
		catch {$w edit redo}
	  }

 proc selectAll { w } {
 global widtexte
 set w $widtexte
		$w tag add sel 1.0 end
	  }

 #<procs_widgets>

 # la proc "insertWidget" est appelée par l'interface
 # parl'action siur le bouton "widget"
 # w correspond au "text" où on désire insérer un widget de nature "wdgt" (button, entry ...)
 # La proc recherche si un widget portant en fin de nom un numéro,
 # et poursuit la recherche (incr i) jusqu'à ce qu'elle puisse accorder un numéro inutilisé en suffixe.
 # on est certain ainsi que le nouveau widget porte un nom inutilisé.

 proc insertWidget { wdgt} {

 global widtexte
 	 set i 0
	while {[lsearch  [ winfo children $widtexte ]  $widtexte.$wdgt$i ] != -1} {
		incr i
		}

	set widget $widtexte.$wdgt$i;
	$wdgt $widget
	if {[string compare [winfo class $widtexte]  Canvas] == 0} {
 			set id [ $widtexte create window 0 0 -window $widget ]
			 configDrawWidget $id $wdgt  $widget
				} else {
			$widtexte window create insert -window $widget
			configWidget $widtexte $wdgt $widget

	bind $widget <2>  {tk_popup  .f.mDraw.menuCanvas 25 50 }
 	bind $widget <Control-3>  {tk_popup  .f.mDraw.menuCanvas 25 50 }

 #<F1>
	 bind $widget <F1> {
		set dumpie [dumptags %W]\n[dumpwindows %W]\n[%W dump 1.0 end]
		%W delete 1.0 end
		%W insert end  $dumpie
 	}

 #<F2>
 	bind $widget <F2> {
		set niveaux [list $widtexte ]
		set content [%W get 1.0 end-13char]
		%W delete 1.0 end
		undump %W $content

		# faire la liste de tous les widgets dans tous les widgets, puis insérer un bind pour chaque widget pour pouvoir le rééditer.
		allWidgetsKnowed $niveaux

 	}

 }
	}



 # la proc "configWidget "
 # est appelée par le bouton "widget" de la barre de commandes >>
 # Création d'un toplevel pour définir les options du widget à insérer
 # une boucle définit pour chaque option (liste "optionsWidget") un label et une entry
  # Le texte entré au clavier dans l'entry fournira la valeur de l'option

 proc configWidget  {w wdgt widget} {
 global widtexte

 variable fenobjet
 set fenobjet(widget) $widget
 set fenobjet(bgcolor) white
 set fenobjet(fgcolor) black
 set fenobjet(relief) raised
 set fenobjet(borderwidth) 3
 set fenobjet(text) {le fenobjet}
 set fenobjet(command) {tk_messageBox -message {Il est préférable de définir une commande auparavant!}}
 set fenobjet(textwidth) 40
 set fenobjet(height) 25

set fenobjet(wrap) word

 set fenobjet(coord) [list 0 0]

 set fenobjet(anchor) ne
 set fenobjet(image) ""
 variable listeOptions
	set listeOptions ""

  destroy .cfgwdgt

 #création du widget à insérer

	toplevel .cfgwdgt
	wm title .cfgwdgt   "ttkm config widget"
	label .cfgwdgt.etq -text "configurez votre widget"  -fg red  -bg pink
	grid .cfgwdgt.etq  -row 0 -column 1
	label .cfgwdgt.nom -text ">> $wdgt : $widget"  -fg red  -bg pink
	grid .cfgwdgt.nom  -row 0 -column 2 -sticky ew

	bind .cfgwdgt <3> {destroy .cfgwdgt }

 switch -- $wdgt {
	button {
		button .cfgwdgt.b1 -text "-background" -command { variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor]  ;raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command { variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ;raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ;raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-text" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-command" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(command)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
	grid .cfgwdgt.rien -row 10 -column 1

	button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)} -command {$fenobjet(command)} " ;\
		eval $fenobjet(widget)  configure $listeOptions ; }

	grid .cfgwdgt.envoi -row 11 -column 1
		}
	label {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-text" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
	grid .cfgwdgt.rien -row 10 -column 1

	button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ; }

	grid .cfgwdgt.envoi -row 11 -column 1
			}
	checkbutton {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-text" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-command" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(command)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

			label .cfgwdgt.rien -text " "
	grid .cfgwdgt.rien -row 10 -column 1

	button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)}  -command {$fenobjet(command)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ; }
 # les parenthèses pour les options text et command permettent les espaces dans la valeur de la variable fenobjet(?).
	grid .cfgwdgt.envoi -row 11 -column 1
			}
			entry {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-textvariable" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
	grid .cfgwdgt.rien -row 10 -column 1

	button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ; }

	grid .cfgwdgt.envoi -row 11 -column 1
			}
	text {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew
		
		button .cfgwdgt.b6 -text "-wrap" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(wrap)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
	grid .cfgwdgt.rien -row 10 -column 1

	button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -wrap $fenobjet(wrap) -relief $fenobjet(relief) \
		-borderwidth $fenobjet(borderwidth) -width {$fenobjet(textwidth)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ; \
		 ;\
		bind $fenobjet(widget) <1> {set widtexte %W; .f3.textActif configure -text "texte  : $widtexte"};\
		bind  $fenobjet(widget) <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}}

	grid .cfgwdgt.envoi -row 11 -column 1
			}
	canvas {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-borderwidth" -command {variable fenobjet ;	; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-height" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(height)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
	grid .cfgwdgt.rien -row 10 -column 1

	button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -height  $fenobjet(height) -relief $fenobjet(relief) \
		-borderwidth $fenobjet(borderwidth) -width {$fenobjet(textwidth)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ; \
		 ;\
 		bind $fenobjet(widget) <1> {set widtexte %W; .f3.textActif configure -text "canvas  : $widtexte"};\
 		bind  $fenobjet(widget) <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}}

	grid .cfgwdgt.envoi -row 11 -column 1
			}

	} ;#fin du switch
 }

 proc configDrawWidget  { id wdgt  widget } {
 global widtexte

 variable fenobjet
 set fenobjet(widget) $widget
 set fenobjet(bgcolor) white
 set fenobjet(fgcolor) black
 set fenobjet(relief) raised
 set fenobjet(borderwidth) 3
 set fenobjet(text) {le fenobjet}
 set fenobjet(command) {tk_messageBox -message {Il est préférable de définir une commande auparavant!}}
 set fenobjet(textwidth) 25
 set fenobjet(height) 25
 set fenobjet(id) $id
  set fenobjet(image) ""

 set fenobjet(coord) [list 0 0]

 set fenobjet(anchor) nw
 set fenobjet(font) [list helvetica 14 bold italic underline]

 variable listeOptions
	set listeOptions ""

  destroy .cfgwdgt

 #création du widget à insérer

	toplevel .cfgwdgt
	wm title .cfgwdgt   "ttkm config widget"
	label .cfgwdgt.etq -text "configurez votre widget"  -fg red  -bg pink
	grid .cfgwdgt.etq  -row 0 -column 1
	label .cfgwdgt.nom -text ">> $wdgt : $widget"  -fg red  -bg pink
	grid .cfgwdgt.nom  -row 0 -column 2 -sticky ew

	bind .cfgwdgt <3> {destroy .cfgwdgt }

 switch -- $wdgt {
	button {
		button .cfgwdgt.b1 -text "-background" -command { variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor]  ;raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command { variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ;raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ;raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-text" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-command" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(command)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		button .cfgwdgt.b7 -text "-coord" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b7 -row 7 -column 1 -sticky ew
		entry .cfgwdgt.e7 -textvariable fenobjet(coord)
		grid .cfgwdgt.e7 -row 7 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;variable identification \
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)} -command {$fenobjet(command)} " ;\
		eval $fenobjet(widget)  configure $listeOptions ; eval  $widtexte move $fenobjet(id)  $fenobjet(coord) ; }

		grid .cfgwdgt.envoi -row 11 -column 1
		}
	label {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-text" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-coord" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(coord)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ;  eval  $widtexte move $fenobjet(id)  $fenobjet(coord) ;}

		grid .cfgwdgt.envoi -row 11 -column 1
			}
	checkbutton {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-text" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-command" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(command)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		button .cfgwdgt.b7 -text "-coord" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b7 -row 7 -column 1 -sticky ew
		entry .cfgwdgt.e7 -textvariable fenobjet(coord)
		grid .cfgwdgt.e7 -row 7 -column 2 -sticky ew

			label .cfgwdgt.rien -text " "
	 	grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)}  -command {$fenobjet(command)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ; eval  $widtexte move $fenobjet(id)  $fenobjet(coord) ; }
 # les parenthèses pour les options text et command permettent les espaces dans la valeur de la variable fenobjet(?).
	grid .cfgwdgt.envoi -row 11 -column 1
			}
	entry {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-foreground" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-borderwidth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-textvariable" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(text)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-coord" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(coord)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -foreground  $fenobjet(fgcolor) -relief $fenobjet(relief) -borderwidth $fenobjet(borderwidth) -text {$fenobjet(text)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ;  eval  $widtexte move $fenobjet(id)  $fenobjet(coord) ;}

		grid .cfgwdgt.envoi -row 11 -column 1
			}
	text  { tk_messageBox -message "Utilisez le menu "DRAW" pour insérer un "text" dan sun "canvas""
			}
	canvas {
		button .cfgwdgt.b1 -text "-background" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.b1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.e1 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.e1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.b2 -text "-borderwidth" -command {variable fenobjet ;	; raise .cfgwdgt}
		grid .cfgwdgt.b2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.e2 -textvariable fenobjet(borderwidth)
		grid .cfgwdgt.e2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.b3 -text "-relief" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.e3 -textvariable fenobjet(relief)
		grid .cfgwdgt.e3 -row 3 -column 2 -sticky ew

		button .cfgwdgt.b4 -text "-height" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b4 -row 4 -column 1 -sticky ew
		entry .cfgwdgt.e4 -textvariable fenobjet(height)
		grid .cfgwdgt.e4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.b5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.e5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.e5 -row 5 -column 2 -sticky ew

		button .cfgwdgt.b6 -text "-coord" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(coord)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "-background $fenobjet(bgcolor) -height  $fenobjet(height) -relief $fenobjet(relief) \
		-borderwidth $fenobjet(borderwidth) -width {$fenobjet(textwidth)} " ;\
		 eval $fenobjet(widget)  configure $listeOptions ;  eval  $widtexte move $fenobjet(id)  $fenobjet(coord) ;\
		bind $fenobjet(widget) <1> {set widtexte %W; .f3.textActif configure -text "canvas  : $widtexte"};\
 		bind  $fenobjet(widget) <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}}

		grid .cfgwdgt.envoi -row 11 -column 1
			}
	image {
		button .cfgwdgt.b6 -text "-coord" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.b6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.e6 -textvariable fenobjet(coord)
		grid .cfgwdgt.e6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoi -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;		set listeOptions "";\
		 ; eval  $widtexte move $fenobjet(id)  $fenobjet(coord) ;\
		bind $fenobjet(widget) <1> {set widtexte %W; .f3.textActif configure -text "canvas  : $widtexte"};\
 		bind  $fenobjet(widget) <3> { tk_messageBox -message "insertion de widget dans  : $widtexte" ;tk_popup  .f.mWidget.menuWidgets 25 50}

		}
		grid .cfgwdgt.envoi -row 11 -column 1
	}

	} ;#fin du switch
 }

#<INSERTION_DES_DRAW_DANS_CANVAS>  

 proc insertDraw {wdgt} {
 	global widtexte
	set objetDraw [$widtexte create $wdgt ]
	configDraw $objetDraw.

 }

 proc configDraw  { wdgt } {
 global widtexte

 variable fenobjet

tk_messageBox -message $wdgt

 set fenobjet(bgcolor) white
 set fenobjet(fgcolor) black
 set fenobjet(relief) raised
 set fenobjet(borderwidth) 3
 set fenobjet(text) {le fenobjet}
 set fenobjet(command) {tk_messageBox -message {Il est préférable de définir une commande auparavant!}}
 set fenobjet(textwidth) 25
 set fenobjet(height) 25

set fenobjet(outline) green
set fenobjet(splinesteps) 3

 set fenobjet(coord) [list 0 0]
 set fenobjet(smooth) 1
 set fenobjet(arrow) none
 set fenobjet(anchor) ne
 set fenobjet(font) { [list helvetica 14 bold italic underline] }
 set fenobjet(textcanvas) {[list text de dessin]}
 set fenobjet(start) 0
 set fenobjet(extent) 45
 set fenobjet(style) pieslice

  destroy .cfgwdgt

 #création du widget à insérer
 toplevel .cfgwdgt
	wm title .cfgwdgt   "ttkm config draw"
	label .cfgwdgt.etq -text "configurez votre objet dessin"  -fg red  -bg pink
	grid .cfgwdgt.etq  -row 0 -column 1
	label .cfgwdgt.nom -text ">> $wdgt "  -fg red  -bg pink
	grid .cfgwdgt.nom  -row 0 -column 2 -sticky ew

	bind .cfgwdgt <3> {destroy .cfgwdgt }

 switch -- $wdgt {

 rectangle {
		button .cfgwdgt.bc1 -text "coordonnées " -command {variable fenobjet ;  raise .cfgwdgt}
		grid .cfgwdgt.bc1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.ec1 -textvariable fenobjet(coord)
		grid .cfgwdgt.ec1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.bc2 -text "-fill" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.bc2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.ec2 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.ec2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.bc4 -text "-anchor" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc4  -row 4 -column 1 -sticky ew
		entry .cfgwdgt.ec4  -textvariable fenobjet(anchor)
		grid .cfgwdgt.ec4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.bc5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.ec5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.ec5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoiC -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "$fenobjet(coord) -fill $fenobjet(bgcolor)   -width $fenobjet(textwidth) " \
		 ; eval $widtexte create rectangle $listeOptions }

		grid .cfgwdgt.envoiC -row 11 -column 1
			}
 	oval {
		button .cfgwdgt.bc1 -text "coordonnées " -command {variable fenobjet ;  raise .cfgwdgt}
		grid .cfgwdgt.bc1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.ec1 -textvariable fenobjet(coord)
		grid .cfgwdgt.ec1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.bc2 -text "-fill" -command {variable fenobjet ; set  fenobjet(bgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.bc2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.ec2 -textvariable fenobjet(bgcolor)
		grid .cfgwdgt.ec2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.bc4 -text "-anchor" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc4  -row 4 -column 1 -sticky ew
		entry .cfgwdgt.ec4  -textvariable fenobjet(anchor)
		grid .cfgwdgt.ec4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.bc5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.ec5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.ec5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoiC -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "$fenobjet(coord) -fill $fenobjet(bgcolor)   -width $fenobjet(textwidth) " \
		 ; eval $widtexte create oval $listeOptions }

		grid .cfgwdgt.envoiC -row 11 -column 1
			}
	arc {
		button .cfgwdgt.bc1 -text "coordonnées " -command {variable fenobjet ;  raise .cfgwdgt}
		grid .cfgwdgt.bc1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.ec1 -textvariable fenobjet(coord)
		grid .cfgwdgt.ec1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.bc2 -text "-start" -command {variable fenobjet ;  raise .cfgwdgt }
		grid .cfgwdgt.bc2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.ec2 -textvariable fenobjet(start)
		grid .cfgwdgt.ec2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.bc4 -text "-extent" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc4  -row 4 -column 1 -sticky ew
		entry .cfgwdgt.ec4  -textvariable fenobjet(extent)
		grid .cfgwdgt.ec4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.bc5 -text "-style" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.ec5 -textvariable fenobjet(style)
		grid .cfgwdgt.ec5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoiC -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "$fenobjet(coord) -start $fenobjet(start)   -extent $fenobjet(extent) -style $fenobjet(style) " \
		 ; eval $widtexte create arc $listeOptions }

		grid .cfgwdgt.envoiC -row 11 -column 1
			}
 	line {
		button .cfgwdgt.bc1 -text "coordonnées " -command {variable fenobjet ;  raise .cfgwdgt}
		grid .cfgwdgt.bc1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.ec1 -textvariable fenobjet(coord)
		grid .cfgwdgt.ec1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.bc2 -text "-fill" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.bc2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.ec2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.ec2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.bc3 -text "-arrow" -command {variable fenobjet ; ; raise .cfgwdgt}
		grid .cfgwdgt.bc3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.ec3 -textvariable fenobjet(arrow)
		grid .cfgwdgt.ec3 -row 3  -column 2 -sticky ew

		button .cfgwdgt.bc4 -text "-smooth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc4  -row 4 -column 1 -sticky ew
		entry .cfgwdgt.ec4  -textvariable fenobjet(smooth)
		grid .cfgwdgt.ec4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.bc5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.ec5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.ec5 -row 5 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoiC -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "$fenobjet(coord) -fill $fenobjet(fgcolor) -arrow $fenobjet(arrow)   -width $fenobjet(textwidth)  -smooth $fenobjet(smooth) " \
		 ; eval $widtexte create line $listeOptions }

		grid .cfgwdgt.envoiC -row 11 -column 1
			}
	 polygon {
		button .cfgwdgt.bc1 -text "coordonnées " -command {variable fenobjet ;  raise .cfgwdgt}
		grid .cfgwdgt.bc1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.ec1 -textvariable fenobjet(coord)
		grid .cfgwdgt.ec1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.bc2 -text "-fill" -command {variable fenobjet ; set  fenobjet(fgcolor)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.bc2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.ec2 -textvariable fenobjet(fgcolor)
		grid .cfgwdgt.ec2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.bc3 -text "-splinesteps" -command {variable fenobjet ; ; raise .cfgwdgt}
		grid .cfgwdgt.bc3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.ec3 -textvariable fenobjet(splinesteps)
		grid .cfgwdgt.ec3 -row 3  -column 2 -sticky ew

		button .cfgwdgt.bc4 -text "-smooth" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc4  -row 4 -column 1 -sticky ew
		entry .cfgwdgt.ec4  -textvariable fenobjet(smooth)
		grid .cfgwdgt.ec4 -row 4 -column 2 -sticky ew

		button .cfgwdgt.bc5 -text "-width" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc5 -row 5 -column 1 -sticky ew
		entry .cfgwdgt.ec5 -textvariable fenobjet(textwidth)
		grid .cfgwdgt.ec5 -row 5 -column 2 -sticky ew
		
		button .cfgwdgt.bc6 -text "-outline" -command {variable fenobjet ; set  fenobjet(outline)  [tk_chooseColor] ; raise .cfgwdgt}
		grid .cfgwdgt.bc6 -row 6 -column 1 -sticky ew
		entry .cfgwdgt.ec6 -textvariable fenobjet(outline)
		grid .cfgwdgt.ec6 -row 6 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1 
		
		#£ 		 set listeOptions "$fenobjet(coord) -fill $fenobjet(fgcolor) -arrow $fenobjet(arrow)   -width $fenobjet(textwidth)  -smooth $fenobjet(smooth) " \


		button .cfgwdgt.envoiC -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
				 set listeOptions "$fenobjet(coord) -fill $fenobjet(fgcolor)  -splinesteps $fenobjet(splinesteps) -outline  $fenobjet(outline)   -width $fenobjet(textwidth)  " \
 ; eval $widtexte create polygon $listeOptions }
		grid .cfgwdgt.envoiC -row 11 -column 1
			}
	text {
		button .cfgwdgt.bc1 -text "coordonnées " -command {variable fenobjet ;  raise .cfgwdgt}
		grid .cfgwdgt.bc1 -row 1 -column 1 -sticky ew
		entry .cfgwdgt.ec1 -textvariable fenobjet(coord)
		grid .cfgwdgt.ec1 -row 1 -column 2 -sticky ew

		button .cfgwdgt.bc2 -text "-text" -command {variable fenobjet ; }
		grid .cfgwdgt.bc2 -row 2 -column 1 -sticky ew
		entry .cfgwdgt.ec2 -textvariable fenobjet(textcanvas)
		grid .cfgwdgt.ec2 -row 2 -column 2 -sticky ew

		button .cfgwdgt.bc3 -text "-anchor" -command {variable fenobjet ; ; raise .cfgwdgt}
		grid .cfgwdgt.bc3 -row 3 -column 1 -sticky ew
		entry .cfgwdgt.ec3 -textvariable fenobjet(anchor)
		grid .cfgwdgt.ec3 -row 3  -column 2 -sticky ew

		button .cfgwdgt.bc4 -text "-font" -command {variable fenobjet ; raise .cfgwdgt}
		grid .cfgwdgt.bc4  -row 4 -column 1 -sticky ew
		entry .cfgwdgt.ec4  -textvariable fenobjet(font)
		grid .cfgwdgt.ec4 -row 4 -column 2 -sticky ew

		label .cfgwdgt.rien -text " "
		grid .cfgwdgt.rien -row 10 -column 1

		button .cfgwdgt.envoiC -text valider -bg red -fg yellow \
		 -command {variable fenobjet ;variable listeOptions;\
		 set listeOptions "$fenobjet(coord)  -anchor $fenobjet(anchor) -text  $fenobjet(textcanvas) -font $fenobjet(font)  " \
		 ; eval $widtexte create text $listeOptions }

		grid .cfgwdgt.envoiC -row 11 -column 1
			}
			}
			}

 #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 #<PROCEDURES_TTC>

 # Le format TTC permet de sauvegarder dans un fichier texte les indications de mise en page d'un texte d'un widget "text" de tcl-tk
 # les configurations des tags sont récupérées par la procédure dumptags,
 # le texte et ses tags le sont par la commande dump
 # il en est de même des indications d'image
 # les widgets sont non seulement sauvegardés, mais leur contenu éditable l'est aussi

 # la procédure "undump" permet de réafficher le texte avec son formatage
 # à  partir du résultat de la commande "dump"
 # et de la procédure "dumptags"
 # et de la procédure "dumpwindows"

 variable ttcFile ;  # Il importe de définir une variable "ttcFile" afin de connaitre le nom du fichier ttc pour les sauvegardes rapides.

 variable saveFlag 0 ;  # la variable saveflag est prévue pour distinguer une fonction "Save" d'une fonction  "Save As..."

 variable fenetre "" ; 	# la variable fenetre est INDISPENSABLE
				  # pour que la proc undump relise les "contenu" sur plusieurs niveaux d'imbrication des widgets.

 proc undump {w content} {
 variable ttcFile

 variable fenetre
 set fenetre $w

	foreach {type value pos } $content {
		switch -- $type {
			variable {variable $value $pos}
			text {$w insert $pos $value}
			image {$w image create  $pos -image [image create photo -file [file join [file dirname $ttcFile ] $value]] -name  $value}
			tag {eval [list $w tag configure $value] $pos }
			tagon {set on($value) $pos}
			tagoff {$w tag add $value $on($value) $pos ; unset on($value) }
			mark  {$w mark set $value $pos }
			window { 	set suffix [lindex [split $value .]  [expr [llength [split $value .] ] -1]  ]
		 		catch [$w window create $pos -window $w.$suffix]				}
			Dwindow { variable fenetre ;
					undumpdraw $fenetre $pos 					}

			Button {eval [concat "button" $w.$value  $pos ]  }
			Checkbutton  {eval [concat "checkbutton"  $w.$value  $pos ] }
			Canvas  {variable fenetre ; eval [concat "canvas"  $w.$value  $pos ] ;set fenetre $w.$value }
			Entry {eval [concat "entry" $w.$value  $pos ] }
			Frame  {eval [concat "frame" $w.$value  $pos ] }
			Label  {eval [concat "label" $w.$value  $pos ] }
			Listbox  {eval [concat "listbox" $w.$value  $pos ] }
			Menubutton {eval [concat "menubutton"  $w.$value  $pos ] }
			Message {eval [concat  "message"  $w.$value  $pos ] }
			Radiobutton  {eval [concat "radiobutton"  $w.$value  $pos ] }
			Scale  {eval [concat  "scale"  $w.$value  $pos ] }
			Scrollbar  {eval [concat  "scrollbar"  $w.$value  $pos ] }
			Spinbox  {eval [concat "spinbox"  $w.$value  $pos ] }
			Text  {variable fenetre; eval [concat "text"  $w.$value  $pos ] ; set fenetre $w.$value}
			contenu {variable fenetre ; 	undump $fenetre  $pos ; }
			draw {variable fenetre  ; undumpdraw $fenetre $pos}

		}
	}

 }

 proc undumpdraw {w content } {
 variable fenetre
 variable ttcFile

	foreach {type value pos } $content {
		switch -- $type {

			Button {eval [concat "button" $w.$value  $pos ]  }
			Checkbutton  {eval [concat "checkbutton"  $w.$value  $pos ] }

			Canvas  {variable fenetre; eval [concat "canvas"  $w.$value  $pos ] ;			}
			Dwindow {		undumpdraw $w.[lindex [split $value .] end ] $pos }

			Entry {eval [concat "entry" $w.$value  $pos ] }
			Frame  {eval [concat "frame" $w.$value  $pos ] }
			Label  {eval [concat "label" $w.$value  $pos ] }
			Listbox  {eval [concat "listbox" $w.$value  $pos ] }
			Menubutton {eval [concat "menubutton"  $w.$value  $pos ] }
			Message {eval [concat  "message"  $w.$value  $pos ] }
			Radiobutton  {eval [concat "radiobutton"  $w.$value  $pos ] }
			Scale  {eval [concat  "scale"  $w.$value  $pos ] }
			Scrollbar  {eval [concat  "scrollbar"  $w.$value  $pos ] }
			Spinbox  {eval [concat "spinbox"  $w.$value  $pos ] }
			draw {variable fenetre  ; undumpdraw $w.[lindex [split $value .] end] $pos}

				arc {eval $w create arc $value $pos }
				line {eval $w create line $value $pos }
				rectangle {eval $w create rectangle $value $pos}
				polygon {eval $w create polygon $value $pos}
				oval {eval $w create oval $value $pos}
				text {eval $w create text $value $pos }
				image {tk_messageBox -message pos=$pos ;$w  create image $value -image [image create photo -file [file join [file dirname $ttcFile ] [lindex $pos end] ]] }
				bitmap {eval $w create bitmap $value $pos}
				window {variable fenetre ; 	eval $w create window $value -window $w.[ lindex [split  [lindex $pos 1] . ] end ]		}

			}
			}
 }

 proc dumpcanvas w {

	set res {}

	foreach element [$w find all]  {
	set items {}
		foreach option [$w itemconfigure $element] {
			 if {[string compare [lindex $option 0]  -image] ==0} {
			tk_messageBox -message "procDumpCanvas image element=$element "
			set iname [ $w itemcget $element -image]
				if { [lindex $option 3] ne [lindex $option 4]} {
				lappend items [lindex $option 0] [lindex [split [lindex [lindex [$iname configure] 2] end] / ] end ] ;
				}
			} else {
				if { [lindex $option 3] ne [lindex $option 4]} {
				lappend items [lindex $option 0] [lindex $option 4]
				}
				}
				}

		if [llength $items] {lappend res [$w type $element] [$w coord $element] $items }

	}
  	return $res

 }

 proc dumptags w {
	set res {}
	foreach tagName [$w tag names] {
		set items {}
		foreach balise [$w tag configure $tagName] {
			if { [lindex $balise 3] ne [lindex $balise 4]} {
				lappend items [lindex $balise 0] [lindex $balise 4]
			}
		}
		if [llength $items] {lappend res tag $tagName $items}
	}
	set res
 }

 proc dumpwindows w  {
	# il faut retrouver dans cette proc un shema semblable à  dumptags : trois chaines dans une liste.

	set res {}
	foreach widget [winfo children $w] {
		set suffix [lindex [split $widget .] [ expr [llength [split $widget .] ] - 1 ] ]

		set items {}
		foreach opti [$widget configure] {
			if { [lindex $opti 3] ne [lindex $opti 4]} {
				lappend items [lindex $opti 0] [lindex $opti 4]
			}
		}
		if [llength $items] {lappend res [winfo class $widget]  $suffix  $items}

		if {[string compare  [winfo class $widget]  Entry] == 0} {
			foreach {opt val } $items {
				if {[string compare $opt "-textvariable"] == 0 } {
				variable $val
					lappend res variable $val [set $val]
				}
 			}
		}

		if {[string compare  [winfo class $widget]  Text] == 0}  {
		set contenu [dumptags $widget ]\n[dumpwindows $widget]\n[$widget dump 1.0 end]

					lappend res contenu $widget  $contenu
		}

		if {[string compare  [winfo class $widget]  Canvas] == 0}  {

		set contenu [dumpwindows $widget]
		if {$contenu != ""} {
		lappend res Dwindow  $widget  $contenu }

		set draw [dumpcanvas $widget]
		if {$draw != ""} {
					lappend res draw $widget  $draw}

		}
	}

	set res
 }

 proc saveTagsAndText { w } {
		variable application
		variable ttcFile

		# Il importe d'avoir une variable "ttcFile" afin de connaitre le nom du fichier ttc pour les sauvegardes rapides.
		# ceci n'est pas nécessaire si on supprime la distinction entre "sauvegarder" et "sauvegarder sous..."

		# la variable saveflag est prévue pour distinguer éventuellement une fonction "Save" d'une fonction  "Save As..."
		variable saveFlag

		set  types {
		  {{Fichier TTC} {.ttc}} {{Fichier Texte} {.txt}} {{Tout fichier } {.*}}
		}

 # si le fichier a déja été sauvegardé sous un nom, l'enregistrement se fait de manière transparente.
		if {$saveFlag == 1} {
			 set choix $ttcFile
			 set idf [open $choix w]
			set dumpie [dumptags $w ]\n[dumpwindows $w]\n[$w dump 1.0 end]
			puts -nonewline $idf $dumpie
		 	close $idf
		tk_messageBox -message "le fichier $choix a bien été enregistré.
		The file $choix is saved well. "
			return
		}

		# sinon une boite tk_getSaveFile s'ouvre, pour choisir un nom de fichier :
		if {$saveFlag==0} {
				  set choix [ tk_getSaveFile \
		-title " Sauvegarder sous ... / Save as ..." -defaultextension .ttc -filetypes $types] ;
		set fichier $choix
		} else {
		  if [catch {set choix $fichier}] {
			tk_messageBox -type ok -icon warning \
				-message "Aucun fichier n'a encore été défini, utilisez :\n"Sauvegarder sous".
				Not yet defined file: use "Save as ..."."
			return
		  }
		}

		if {$choix==""} {
		  tk_messageBox -type ok -icon warning \
			  -message "Erreur d'écriture ... le fichier n'a pas été enregistré.
			Write error ... the file was not saved."
		} else {
		   set idf [open $choix w]

		set dumpie [dumptags $w ]\n[dumpwindows $w]\n[$w dump 1.0 end]

		  puts -nonewline $idf $dumpie
		  close $idf
		  set ttcFile $choix

		set saveFlag 1

		  }
		}

 proc loadTTCfile w {

 variable ttcFile

 set  types {
		  {{Fichier TTC} {.ttc}} {{Fichier Texte} {.txt}} {{Tout fichier } {.*}}
		}

	set choix [tk_getOpenFile  -defaultextension .ttc -filetypes $types]
	set ttcFile $choix
	if [ catch { open $choix } FIC ] {
		  tk_messageBox -type ok -icon warning \
			  -message "Impossible d'ouvrir le fichier $choix
			The file $choix cannot be open."
		  return 1
		} else {

		  set contenu [ read -nonewline $FIC ]
		  regsub -all {\ {4}} $contenu "\t" contenu

	undump $w $contenu

		  close $FIC
		  return 0
		}

 }

 #Fin des procédures TTC
 #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

	  


	  ###########################################################################
	  #	# LES ROUTINES d' "OCCURRENCES "
	  ###########################################################################
 #<Occurences>

 # la variable global widtexte est nécessaire. 
 # Elle désigne le widget text dans lequel il faut rechercher la suite de mots indiqués. 
 # dans cet exemple se sera le widget " text" nommé .texte
	global widtexte
	set widtexte .texte 
	
 proc Okur::OuvrirAide {aide}  {
	tk_messageBox -message " AIDE  pour OCCURRENCES \n$aide"
	}
	
 proc Okur::OuvrirAideRegExp {aide} {
		destroy .topRG
		# création d'une fenêtre pour les expressions régulières
		toplevel .topRG
		set largeurEcran [ winfo screenwidth . ]
		wm geometry .topRG +[expr ${largeurEcran}/2]+60
		text .topRG.fenRG -wrap none  -bg beige  -fg black\
			-tabs {1c} -font "Helvetica 10"	-yscrollcommand ".topRG.sy set" -xscrollcommand ".topRG.sx set" -relief groove  -cursor "hand1"
		scrollbar .topRG.sy -orient vertical -command ".topRG.fenRG yview" -cursor hand2
		scrollbar .topRG.sx  -orient horizontal -command ".topRG.fenRG xview" -cursor hand2
		
		pack .topRG.sx -fill x  -side top
		pack .topRG.sy -fill y -side left
		pack .topRG.fenRG -expand false -fill both -side left
		
		.topRG.fenRG insert 1.0 $aide
	
		.topRG.fenRG configure -state disabled
		bind .topRG <3> {destroy .topRG}
		
	  }
	  


 proc Okur::ChoisirMot {} {
		destroy .topMot 	; #ferme la fenêtre précédemment ouverte
		toplevel .topMot		; #ouvre la fenêtre de recherche
		
 #----------------------------------------
		
		variable fichierAideRegExp {
	Aide mémoire sur les 
		
 EXPRESSIONS REGULIERES
 *************************************

 ________________________
 SYNTAXE
 regexp ?option? motif chaine ?variables?
 ________________________
 options
	-about	informations sur l'expression régulière
	-all	  recherche toutes les occurences du motif défini
	-expanded la syntaxe développée est acceptée
	-indices  retourne la position des occurences trouvées
	-inline   les résultats sont retournés sous forme de liste
	-lineanchor ancrage aux extrémités des lignes
	-linestop  pas de correspondances sur plusieurs lignes
	-line	  recherche ligne par ligne
	-nocase	  recherche sans tenir compte de la casse des caractères
	-start	  recherche à partir de l'indice défini
	--	  fin des options
 ________________________
 METACARACTERES

 .	n'importe quel caractère, sauf fin de ligne
 []	n'importe quel caractère entre crochets
 *	zéro ou plusieurs fois
 +	une ou plusieurs fois
 ?	zéro ou une fois
 ^	1)en début d'expressio : début de ligne
	2) entre crochet : pas les caractères entre crochets
 $	fin de ligne
 \	caractère modifiant le sens du caractère qui le suit
 ()	sert à grouper des sous expressions
 |	ou d'alternative propre à regexp
 ________________________
 LES "ECHAPPEMENTS"

 \a	bip interne
 \b	retour arrière
 \f	saut de page
 \n	saut de ligne
 \r	retour chariot
 \t	tabulation horizontale
 \v	tabulation verticale
 \B	contre-oblique \

 \d	nombre entier
 \s	espace
 \w	lettre, chiffre ou _
 \D	tout sauf un nombre
 \S	tout sauf une espace
 \W	tout sauf lettre chiffre ou _

 \m	debut de mot
 \M	fin de mot
 \y	extrémité de mot
 \Y	pas une extrémité de mot
 \A	début de chaine
 \Z	fin de chaine

 \e	séquence ESC (octal: 033)
 \0	zéro octet nul
 \xy	code octal 0xy
 \xyz	code octal xyz
 \xhhh	code hexadécimal 0xhhh
 \uxxxx Unicode U+xxxx
 \Uxxxxxxxx Unicode U+xxxxxxxx
 \cX	mise à zéro des 3 bits forts de X

 a-z	tout caractère alpha minuscule
 A-Z	tout caractère alpha majuscule
 ___________________________
 LES CLASSES

 [:alpha:]	lettres alpha
 [:upper:]	lettres majuscules
 [:lower:]	lettres minuscules
 [:digit:]	chiffre 0 à 9
 [:xdigit:]	nombre hexadécimal
 [:alnum:]	alphanumérique
 [:print:]	caractère affichable
 [:blank:]	espace ou tabulation
 [:space:]	espace
 [:punct:]	tout caractère de ponctuation
 [:graph:]	tout caractère imprimable
 [:cntrl:]	caractère non imprimable


 ======================== }

 #-------------------------------------------------
		
		
		variable fichierAide 		"Saississez le mot ou la portion de phrase que vous recherchez dans le texte.
		Des options permettent de  préciser votre recherche.
		
		Après avoir lancé la recherche, un deuxième volet s'ouvre à droite du tableau de commande. les résultats sont affichés.
		En positionnant le curseur de la souris sur une de ces lignes, une bulle apparait contenant le paragraphe où se trouve cette occurrence du motif recherché.
		Un clic gauche sur la ligne positionne le paragraphe dans la fenêtre principale.
		
		Tant que la fenêtre de recherche n'est pas refermée, le début des occurrences est marqué par un point jaune. 
		Un clic droit dans la fenêtre de recherche la referme, et le surlignage jaune disparait."
#-------------------------------------------------
	
		frame .topMot.f	
		button .topMot.f.boutonAide -text Aide -bg beige -fg red -command {variable fichierAide ; Okur::OuvrirAide $fichierAide} 
		button .topMot.f.boutonAideRegExp  -text "Aide memoire RegExp" -bg beige -fg red -command {variable fichierAideRegExp ; Okur::OuvrirAideRegExp $fichierAideRegExp} 
	
	
		label .topMot.label1 -text "Saisissez la phrase à rechercher :"  -height 2 -fg black -width 35 -font {-size 8}  -bg beige -justify left
		entry .topMot.entreMot  -textvariable motRecherche -font {-size 12} -bg ivory -justify left
		checkbutton .topMot.ch1 -text "Différencier Maj/Min" -variable majmin -onvalue 1 -offvalue 0 -font {-size 12} -bg beige -justify left
		checkbutton .topMot.ch2 -text "Expression Régulière" -variable expressRegul -onvalue 1 -offvalue 0 -font {-size 12} -bg beige -justify left
		checkbutton .topMot.ch3 -text "Dans texte caché	" -variable texteCache  -onvalue 1 -offvalue 0 -font {-size 12} -bg beige -justify left
		
		radiobutton .topMot.ch4 -text "Après curseur	" -variable wards  -value forwards -font {-size 12} -bg beige -justify left
		radiobutton .topMot.ch5 -text "Avant curseur	" -variable wards  -value backwards  -font {-size 12} -bg beige -justify left
		radiobutton .topMot.ch6 -text "Tout le texte	" -variable wards  -value 0  -font {-size 12} -bg beige -justify left
		radiobutton .topMot.ch7 -text "Texte sélectionné" -variable wards  -value selection  -font {-size 12} -bg beige -justify left
		
		button .topMot.ok -text "lancer la recherche" -bg beige -fg blue -font {-size 12} -bd 5 -relief raise \
			 -command { Okur::AfficheListeOccurences $widtexte $motRecherche $wards $texteCache $majmin $expressRegul  } -justify left
	
	grid .topMot.f -column 1 -row 0 -padx 3 -sticky ew
		#grid .topMot.boutonAide -column 1 -row 0 -padx 3 -sticky ew
		grid .topMot.label1   -column 1 -row 1 -padx  3 -sticky ew
		grid .topMot.entreMot -column 1 -row 2 -padx 3 -sticky ew
		grid .topMot.ch1 -column 1 -row 3 -padx 3 -sticky ew
		grid .topMot.ch2 -column 1 -row 4 -padx 3 -sticky ew
		grid .topMot.ch3 -column 1 -row 5 -padx 3  -sticky ew
		grid .topMot.ch4 -column 1 -row 6 -padx 3  -sticky ew
		grid .topMot.ch5 -column 1 -row 7 -padx 3  -sticky ew
		grid .topMot.ch6 -column 1 -row 8 -padx 3  -sticky ew
		grid .topMot.ch7 -column 1 -row 9 -padx 3  -sticky ew
		grid .topMot.ok  -column 1 -row 10 -padx 3 -sticky ew
		
		pack .topMot.f.boutonAide .topMot.f.boutonAideRegExp -side left -fill x -expand 1
		
		bind .topMot <3> {destroy .topMot }
		
	  }
	  

 proc Okur::RechercherElement { widtexte element wards texteCache minMaj expressRegul } { 
 
		
		variable ListeOccurences
		
		 set indices [ $widtexte tag ranges sel ]
		  if { [llength $indices] == 0  } {
		  set debut 1.0
		  set fin end
		} else {
		  	set indices [ $widtexte tag ranges sel ]
		 	set debut [$widtexte index  [lindex $indices 0]]
			set fin [$widtexte index  [lindex $indices 1]]
			  }
		  
		
		$widtexte tag remove  surligner 1.0 end
		
	
		#différenciation des majuscules et des minuscules
		if {$minMaj == 1} {
		set  casse ""
		} else {
		 set casse "-nocase"
		}
		# recherche avec ou sans expression régulière
		set ListeOccurences ""
		if {$expressRegul==1} {
		  set com "-regexp $casse \{$element\}"
		} else {		  
		  set com \"$element\"
		}
		
		#recherche avec ou sans texte caché
		if {$texteCache == 1} {
			set masque "-elide"
		} else {
			set masque ""
		}
		
		#sens de la recherche
				
		switch $wards forwards {set debut [$widtexte index insert] ; set fin end  }
		switch $wards backwards {set fin [$widtexte index insert] ;set debut 1.0 }
		switch $wards 0 {set fin end  }
		switch $wards "" {set debut 1.0 ; set fin end  }
		switch $wards "selection" {set debut $debut ; set fin $fin  }
		
		# boucle de recherche enregistrant les indices d'occurences dans une liste "ListeOccurences"
		while 1 {
		  set lacom "$widtexte search $casse $masque -count longueur $com  \"$debut\" \"$fin\" "
		  set indice [eval $lacom]
		  if {$indice==""} { break }
		  lappend ListeOccurences $indice
		  set debut "$indice + $longueur char"
		}
		
	
	}
	
	
 proc Okur::AfficheListeOccurences { widtexte element wards texteCache majmin expressRegul} {
		variable ListeOccurences
		
				
		destroy .topMot.fenoccs
		destroy .topMot.occssy
		scrollbar .topMot.occssy -orient vertical -command ".topMot.fenoccs yview" -cursor "hand2"
		text  .topMot.fenoccs -wrap word -bd 6 -relief raised -bg lavender -fg black \
			-tabs {1c} -font "Helvetica 12" -height 18 -yscrollcommand ".topMot.occssy set" -width 40 -cursor "hand1"
		
		
		
	
		
		Okur::RechercherElement $widtexte $element $wards $texteCache $majmin $expressRegul
		
		grid .topMot.fenoccs  -row 1 -column 2 -rowspan 10
		grid .topMot.occssy -row 1 -column 3 -rowspan 10 -sticky ns
		
		# lancement de la boucle d'affichage dans la fenêtre crée à la ligne ci-dessus
		set compteur 0
		if {[llength $ListeOccurences]!=0} {
		  foreach el $ListeOccurences {
			
			set ligneOccurence "... ligne N° $el ème caractère..." ;# $el est un indice text (ex : 10.5 ) N°ligne.N°caractère
			
			$widtexte tag add surligner $el
			$widtexte tag configure surligner -background yellow
			
			.topMot.fenoccs insert end "Occurence $compteur : $ligneOccurence"
			.topMot.fenoccs tag add $compteur "current linestart" "current lineend"
			.topMot.fenoccs tag configure $compteur -foreground blue -underline 1
			.topMot.fenoccs tag bind $compteur <1> "$widtexte see $el ;destroy .topBulleOccurence "
			
			.topMot.fenoccs tag bind $compteur <Enter> ".topMot.fenoccs tag configure $compteur -background AntiqueWhite  -foreground blue -underline 1 ; Okur::BulleOccurence $widtexte $el"
			.topMot.fenoccs tag bind $compteur <Leave> " .topMot.fenoccs tag configure $compteur -background  lavender  ; destroy .topBulleOccurence "
			
			.topMot.fenoccs insert end \n
			incr compteur
			
			
		  }

		}
		.topMot.fenoccs insert 1.0 "$compteur occurence(s) de \"$element\"\n\n"
		
		bind .topMot.fenoccs <3> {	destroy .topBulleOccurence  ;	destroy .topMot	; $widtexte tag remove "surligner" 1.0 end }
	  }
	  
 proc Okur::BulleOccurence { widtexte indice} {
		toplevel .topBulleOccurence
		text .topBulleOccurence.texte   -bg White -fg tomato -relief raised -borderwidth 2 -wrap word -width 45
		
		wm overrideredirect .topBulleOccurence  1 ; # supprime la barre de titre
		set x [ winfo pointerx . ]
		set y [ winfo pointery . ]
		wm geometry .topBulleOccurence  +[expr $x + 10]+[expr $y - 10]
		
		set contenuLigneOccurence [ string trimleft [$widtexte get "$indice linestart" "$indice  lineend" ] " \t"]
		set contenuLigneOccurence [ string trimright $contenuLigneOccurence " " ]
		.topBulleOccurence.texte insert end $contenuLigneOccurence
		pack .topBulleOccurence.texte
		.topBulleOccurence.texte configure -height [expr [string length $contenuLigneOccurence] / 45 + 1] 
		
	  }
	
 #---------------------------------------------------------------------------------------------------------------------------------------
 #-----------------------
 #  fin de TouTanKamon
