
Historique :
- 25/11/02 (diam) : cration

contenu :

    Ce fichier et juste un brouillon de doc pour moi ! Il sera
    complter; mais pour l'instant je me contente de copier-coller
    queques presse-papier au fur et a mesure 



########################################################################
Voici un exemple de cration de menu personaliser pour stead

## mode_gvt_defineMenu_Templates - dfini le menu Templates de matlab
# 
# 
proc mode_gvt_defineMenu_Templates {} {
    global stead
    
    ####################################################################
    # 
    set menubutton  .menu.template
    set m           .menu.template.m
    
    if {[winfo exists $menubutton]} {
        destroy $menubutton
    }
    # Cration d'un bouton de menu (ce qu'on voit)
    menubutton $menubutton \
            -text Templates \
            -menu $m
    
    lappend stead(mode,gvt,deleteCmds) [list destroy  $menubutton]
    
    # On positionne ce bouton
    pack append .menu $menubutton left
  
    # Cration d'un menu (ce qui ce droule quand on clique sur le menubutton)
    set m [menu $m]
    # 
    ####################################################################


    $m add command \
            -label "Insrer un separateur \"***...\"" \
            -command {separator 1}
    
    $m add separator
                                    
    ######## DEBUT DE EN TEST ########
    
    # Cette commande dclanche l'insertion d'un alias pralablement dclarer
    $m add command \
            -label {bloc (TEST 1 : electricAlias-insert "proc2")} \
            -command {electricAlias-insert $stead(text) proc2}
    
    # Meme chose que prcdement, mais la slection ventuelle est rcuprer 
    # et insr au niveau du premier "stop"
    $m add command \
            -label {bloc (TEST 2 : electricAlias-wrap "proc2")} \
            -command {electricAlias-wrap proc2}
            
    # Cette commande dclanche une procdure permettant un traitement
    # arbitrairement compliqu, spcifier par une procdure utilisateur
    # Dans ce cas : elle a le meme effet que ci-dessus
    $m add command \
            -label {bloc (TEST 3 : mySpecialInsertionProc "proc2")} \
            -command {mySpecialInsertionProc proc2}
        
    ######## FIN DE EN TEST ########
    
    $m add cascade -label Alias -menu $m.alias
    menu $m.alias
    foreach alias [electricAlias-softNames] {
        set tmp [string index $alias 0]
        if {$tmp == [string toupper $tmp]} {
            $m.alias add command \
              -label $alias \
              -command "electricAlias-insert $stead(text) [te:no_interp $alias]"
        }
    }
}

## mySpecialInsertionProc - exemple de procdure spcifique d'insertion
#  
# 
# 
proc mySpecialInsertionProc {alias} {

    global EDITPREFS stead
    set w $stead(text)
   
    # On mmorise l'tat de l'diteur en vu d'un undo ventuel
    xtext_pushState
    
    # On cherche la colonne courante du point d'insertion
    set ins [$w index insert]         ;# retourne par exemple 53.6
    set lin [lindex [split $ins .] 0] ;# retourne la ligne courante : 53
    set col [lindex [split $ins .] 1] ;# retourne la colonne courante : 6
    
    # On place le point d'insertion en fin de la ligne courante
    $w mark set insert "insert lineend"
    
    # On recupere le texte de la ligne courante :
    set currentIndent [$w get "insert linestart" "insert lineend"]
    
    # Si la ligne courante contient autre chose que des espaces :
    # on commence une nouvelle ligne avec indentation :
    if {![regexp "^\[ \t\]*\$" $currentIndent]} {
         $w insert insert "\n[i]"
         set currentIndent [i]
    }   
    
    # on pourrait inserer n'importe quoi par un text_insert ...
    electricAlias-wrap $alias
  
}
########################################################################
