Version 0 of Network Activity Indicator

Updated 2004-06-13 01:51:56 by SRIV

2004-06-11 SRIV This is a network traffic/activity indicator as done on the Windows systray that you can add to you GUI network apps.

  package require Tk

  #network activity icon
  # 2004-12-06 Steve Redler IV

  set ::networkright [image create photo .networkright -data {
    R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xoXP94/g/7Hn9Mb8/53c9ZHK7Z/o
    /6Pq/5nl/47a+4zf/3HR/zg4XmfM/13H/zSz/1Sz9oSEzcXF2ZeX0G5uzFJf
    ll1dnN7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH2+Dg4dnZ3c3N3bm5zJmZwJeX
    wMDA4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKSwNLS262txYeJtf//////////
    /////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZ6
    wJ9wCCgCAkjBcPkbEAqGAyKhZAqdBcWC0aj+jMckg+F4eAeQtFoQaUfO6nVb
    IoHHIYLJhEKxxwUVFV5Xd3gWFxgZSwMajY4CGxwdHkwfIJchIiMkJSYnTCgp
    hyorKKYoLEsXLS4bLzAxVkMXJCMyJTM0skOnpru/u0EAOw==}]

  set ::networkleft [image create photo .networkleft -data {
    R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xjg4XoXP94/g/7Hn9Mb8/5zn/5HK
    7Znl/4HZ/3rV/2fM/11dnGTK/4SEzUe8/07A/0q+/0Sx+cXF2ZeX0G5uzFJf
    llSz9t7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH2+Dg4dnZ3c3N3bm5zJmZwJeX
    wMDA4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKSwNLS262txYeJtf//////////
    /////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZ+
    wJ9wCCgCAkjBcPkbEJ5QJVPohD6lP+MxacUOCoYDIqEQdIdfw2JdMEfRBYa8
    4RA87g+vY7+HCCIRWFQSEhMTFBUCFhcYGUsDGpGSAhscHR5MHyCbISIjJCUm
    J0woKYsqKyiqKCxLFy0uGy8wMVNDFyQjMiUzNLZDq6q/w79BADs=}]

  set ::networkon [image create photo .networkon -data {  
    R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xoXP94/g/7Hn9Mb8/53c9ZHK7Z/o
    /6Pq/5nl/47a+4zf/3HR/5zn/2fM/13H/4HZ/3rV/zSz/1Sz9mTK/4SEzUe8
    /07A/0q+/0Sx+cXF2ZeX0G5uzFJflt7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH
    2+Dg4dnZ3c3N3bm5zJmZwJeXwMDA4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKS
    wNLS262txYeJtf///////////////////yH5BAEKAD8ALAAAAAAQABAAAAaD
    wJ9wCCgCAkjBcPkbEAqGAyKhZAqdBcWC0aj+jMckg+F4eLFRCDXCjpyfYwZB
    wJZI3pM8xV2pWCxnbWwXAhgYXlcZGRoaGxwCHR4fIEsDf5eAISIjJEwlJqAn
    KCkqKywtTC4vkTAxLq8uMkseMzQhNTY3VkMeKik4Kzk6u0Owr8TIxEEAOw==}]

  set ::networkoff [image create photo .networkoff -data {  
    R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xjg4Xl1dnISEzcXF2ZeX0G5uzFJf
    lt7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH2+Dg4dnZ3c3N3bm5zJmZwJeXwMDA
    4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKSwNLS262txYeJtf//////////////
    ////////////////////////////////////////////////////////////
    /////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZo
    wJ9wCCgCAkjBcPkbEJ5QJVPohD6lP+MxacVWu93hNxqmWq+FdMF7JggMBqz5
    LDggEorlQK0WLBgNDkwPEIUREhMUFRYXTBgZdhobGJQYHEsIHR4LHyAhU0MI
    FBMiFSMkoEOVlKmtqUEAOw==}]

  set ::networknc [image create photo .networknc -data { 
    R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xjg4Xv8CAtIOFrwUINF8iJWTuHom
    P00yU4drtOgIDJAgNcM3W25Ti11dnNIpRYSEzaYaK9GaqZeX0G5uzFJfloBJ
    evsbG7Cw1pOTzI+PwFR5qYmJ1OQgMMohQ8fH2+Dg4foaGuhcY7m5zJmZwJeX
    wMDA4N5uefMSGYlttYqKv612lqKGq1JghfPz8/PX19treqCgzJKSwNnZ3dLS
    283N3a2txYeJtf///////////////////yH5BAEKAD8ALAAAAAAQABAAAAaK
    wJ9wCCgCAkjBcPkbEJ5QJbPQhBoOBOnPiCgkAgJFYZEdOp8HA4HRcDy1Z8Ki
    oXio32YoQdEoQCKAcHoEBRITE1pCcQQUfRUWFxhLA4AREAUZDxobHB1MHh8f
    ICEiIyQlJidMKCkqKywtKC4FLzBLFjEyGjM0NUIFVLc2Izc4OTpMqyjLKMnO
    z0tBADs=}]  


  proc blinkoff {labelname dir} {

    switch $dir {

      tx  {set ::txlight 0}

      rx  {set ::rxlight 0}   

    }  

    if {$::rxlight && $::txlight} {
      $labelname configure -image $::networkon 
      return
    }

    if {$::rxlight && ! $::txlight} {
      $labelname configure -image $::networkright 
      return
    }  

    if {! $::rxlight && $::txlight} {
      $labelname configure -image $::networkleft 
      return
    }  

    $labelname configure -image $::networkoff  

  }

  proc blinkon {labelname dir} { 

    switch $dir {

      tx  {if {$::txlight} {
             return
           } else {
             set ::txlight 1
             after 400 [list blinkoff $labelname tx]
           }
          }

      rx  {if {$::rxlight} {
             return
           } else {
             set ::rxlight 1
             after 400 [list blinkoff $labelname rx]
           }
          }         
    }

    if {$::rxlight && $::txlight} {
      $labelname configure -image $::networkon 
      return
    }

    if {$::rxlight && ! $::txlight} {
      $labelname configure -image $::networkright
      return
    }  

    if {! $::rxlight && $::txlight} {
      $labelname configure -image $::networkleft
      return
    }  

    $labelname configure -image $::networkoff   

  }



  #start of demo code
  set ::txlight 0
  set ::rxlight 0
  label .label1  -width 4  -borderwidth 1
  label .label2 -text "Net Activity"
  button .button1 -text "connect" -width 10 -command {set ::connected 1; backgroundprocess}
  button .button2 -text "disconnect" -width 10 -command {set ::connected 0}
  pack .button1   -fill x
  pack .button2  -fill x
  pack .label1 -side left -expand n -fill none
  pack .label2 -side right -expand n -fill none


  .label1 configure -image $::networknc  -width 16 -height 16
  wm geometry . 110x80
  update
  set ::connected 1


  proc backgroundprocess {} {
   if {! $::connected} {.label1 configure -image $::networknc; return}

   after 10 [list  blinkon .label1 rx]
   after 1000 [list  blinkon .label1 tx]
   after 2000 [list backgroundprocess] 
  }