Calendrier perpétuel en picwin

Contenu du snippet

Il s'agit d'un calendrier perpétuel qui permet d'avoir les calendrier de toutes les années a partir de 2004.
pour le lancer vous pouvez taper /calendrier dans le status a ce moment vous aurez le calendrier des année 2004 et 2005

sinon vous pouvez taper /calendrier année
a ce moment vous aurez le calendrier de l'année désirée (si celle ci est superieure a 2004)

Source / Exemple :


alias calendrier { 
  if (!$1) { drawcld 2004 | drawcld 2005 | echo -a pour avoir d'autre année tapez : /calendrier année } 
  elseif ($1 isnum ) && ( $1 >= 2004 ) { drawcld $1 }
  else { echo -a erreur de spécification pour l'année, vous devez spécifier un nombre supérieur a 2003. }
}

alias drawmoi { 
  var %bi = $iif( $calc($1 /4) = $int($calc($1 /4)) ,$int($calc(($1 -2004)/4)),$int($calc(1+ ($1 -2004)/4)) ),%no = $calc($1 -2004 - %bi),%total = $calc(%bi *366 + %no *365),%itr = 1
  if ($calc($1 /4) = $int($calc($1 /4))) { var %moi = 31,29,31,30,31,30,31,31,30,31,30,31 }
  else { var %moi = 31,28,31,30,31,30,31,31,30,31,30,31 }
  while ( %itr < $2 ) { %total = $calc(%total + $gettok(%moi,%itr,44)) | inc %itr }
  var %itr = 1,%jour = Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche,%c = 4,%t = $calc(%total - 7* $int($calc(%total /7)))
  while ( %itr <= %t ) { if ( %c = 8 ) { %c = 1 } | inc %c | inc %itr }
  var %itr = 1,%fenetre = $+(@,$1,-,$2),%j = 25
  window -hkp %fenetre 0 0 291 153
  while ( %itr <= $gettok(%moi,$2,44) ) {
    if ( %c = 8 ) { %c = 1 }
    drawtext %fenetre 1 arial 9 $calc(40* (%c -1) +5) %j %itr
    if ( $calc(%itr /7) = $int($calc(%itr /7)) ) { inc %j 20 }
    inc %c
    inc %itr
  }
  var %i = 1,%j = 0
  while ($gettok(%jour,%i,44)) { 
    while ( %j <= 140 ) { drawline %fenetre 1 0 0 %j 280 %j | inc %j 20 }
    drawtext %fenetre 1 arial 9 $calc((%i -1) * 40 +2) 5 $gettok(%jour,%i,44)
    drawline %fenetre 1 0 $calc(%i *40) 0 $calc(%i *40) 140
    inc %i
  }
}

alias drawtab { 
  var %itr = 1
  if (!$window($1)) { halt }
  while ($gettok($4-,%itr,32)) {
    drawtext $1 1 arial 9 $calc( (%itr -1) * $2 +4) 3 $ifmatch
    drawline $1 1 0 $calc(%itr * $2) 0 $calc(%itr * $2) $3
    inc %itr
  }
  drawline $1 1 0 0 $3 $window($1).w $3
}

alias drawcld { window -ap $+(@Calendrier-,$1) -1 -1 293 183 | drawtab $+(@Calendrier-,$1) 23.5 15 1 2 3 4 5 6 7 8 9 10 11 12 }

menu @Calendrier-* { 
  sclick :{ 
    var %itr = 0,%c = 1,%p = 0,%window = $active,%date = $gettok(%window,2,45),%moi = Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Aout,Septembre,Octobre,Novembre,Décembre
    while ( %itr <= $window(%window).w ) {
      if ($inrect($mouse.x,$mouse.y,%itr,0,24,15)) { inc %p | goto end }
      inc %itr 23.5
      inc %c
    }
    :end
    if ( %p = 0 ) { halt }
    drawline %window 1 0 0 15 $window(%window).w 15
    drawline %window 0 0 %itr 15 $calc(%itr +24) 15
    drawrect -f %window 0 1 0 18 300 11
    drawtext %window 1 arial 9 0 18 $gettok(%moi,%c,44) %date
    if (!$window($+(@,%date,-,%c))) { drawmoi %date %c }
    drawcopy $+(@,%date,-,%c) 0 0 291 125 %window 2 30
  }
  Nouvelle Année : { 
    :c
    var %a = $$?="Entrer une année s'il vous plait"
    if ( %a < 2004 ) { Echo -a [Calendrier] Année invalide | goto c }
    drawcld %a
  }
}

on *:close:@Calendrier-*:{ var %window = $active,%date = $gettok(%window,2,45),%itr = 1 | while ( %itr <= 12 ) { window -c $+(@,%date,-,%itr) | inc %itr } }

Conclusion :


Ce code possede une limite, il ne va pas dans le passé, aussi une fois que la fenetre c'est lancé clicker sur les numéros de 1 a 12 pour voir le calendrier proprement dit.

J'ai essayé de copier tres sommairement des tabs mais l'effet est la.
Graphiquement c'est tres simple mais c'est rapide ça ne bug et ça fonctionne pour toutes les années avec la meme vitesse.

Je n'ai pas prevu de mise a jour. Tout va dépendre de vos appréciations.

Vu la simplicité du design je ne met pas de capture vous verez de vous meme :)

c'est un code rédigé a l'occasion d'un defi sur mircstudio.tk
(site de Remi34 merci au passage :) )

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.