a(Simple)Meter

 

ulis, 2005-12-17. Un package rapidement hacké pour afficher une valeur dynamique.

ulis, 2005-12-25. En cadeau de Noël : une option -variable.

ulis, 2006-01-21. Paramètre %widget%.


Pourquoi

Pour animer Tk.


Comment

Avec le canvas.


Installation


Utilisation

  package require ASimpleMeter
  meter set -width 100 -height 50
  meter .c1 -cmd {myCmd %widget%}
  meter .c2 -var ::c2

création d'un widget

  meter <path> [<option> <value>]...

récupération d'une valeur par défaut

  meter get <option>

modification d'une valeur par défaut

  meter set [<option> <value>]...
  -bd           largeur de la bordure
  -bg           couleur du fond
  -cmd          commande
  -delay        délai entre deux invocation de la commande
  -gcolor       couleur du bandeau
  -height       hauteur
  -ncolor       couleur de l'aiguille
  -relief       relief
  -sections     liste des sections
  -width        largeur
  -max          valeur maximale
  -min          valeur minimale
  toutes les options du canvas, et

  -cmd          commande
  -command      commande
  -delay        délai entre deux invocation de la commande
  -gcolor       couleur du bandeau
  -max          valeur maximale
  -min          valeur minimale
  -ncolor       couleur de l'aiguille
  -sections     liste de sections de couleur du bandeau
      chaque section est une liste comprenant :
        - l'angle de début de la section (en °)
        - la largeur de la section (en °)
        - la couleur de la section
      ex : [list [list 75 25 red]]
  toutes les opérations du canvas, et

récupération de la valeur courante

  <path> get

invocation de la commande

  <path> invoke

positionnement de l'aiguille

  <path> set <value>

démarrage de l'invocation automatique de la commande

  <path> start

arrêt de l'invocation automatique de la commande

  <path> stop

Package ASimpleMeter.tcl

  if {[info exists ::meter::version]} { return }

  namespace eval ::meter \
  {
  # beginning of ::meter namespace definition

  # ####################################
  #
  #   meter widget
  #
    variable version 1.0
  #
  #   ulis, (C) 2005
  #
  # ------------------------------------
  # ####################################

    # ==========================
    #
    # package
    #
    # ==========================

    package provide ASimpleMeter $version

    package require Tk

    # ====================
    #
    # entry point
    #
    # ====================

      namespace export meter

    # ====================
    #
    #   global variables
    #
    # ====================
    variable {}
    array set {} \
    {
      -bd         1
      -bg         ""
      -cmd        ""
      -delay      100
      -gcolor     green
      -height     50
      -ncolor     orange
      -relief     groove
      -sections   {{75 25 red}}
      -width      100
      -min        0
      -max        100
    }

    # ====================
    #
    #   meter proc
    #
    # ====================

    proc meter {args} \
    {
      set rc [catch \
      {
        set cmd [lindex $args 0]
        switch -glob -- -$cmd \
        {
          -get    { return [uplevel 1 ::meter::meter:dget $args] }
          -set    { return [uplevel 1 ::meter::meter:dset $args] }
          default \
          {
            if {[string index $cmd 0] != "."} \
            { error "use is 'meter path options' or 'meter set options' or 'meter get key'" }
            return [uplevel 1 ::meter::meter:create $args]
          }
        }
      } msg]
      if {$rc == 1} { return -code error $msg } else { return $msg }
    }

    # ====================
    #
    #   get proc
    #
    # ====================

    proc meter:dget {get args} \
    {
      variable {}
      if {[llength $args] != 1} \
      { return -code error "use is 'meter get key'" }
      set key [lindex $args 0]
      switch -glob -- $key \
      {
        -bg     -
        -bac*   { set (-bg) }
        -bd     -
        -bor*   { set (JL