Aliases pour fasciliter l'usage de mdx (framework)

0/5 (10 avis)

Snippet vu 4 376 fois - Téléchargée 19 fois

Contenu du snippet

il s'agit de petites aliases mdx pour fasciliter son implentation dans certains dialogs

la premiere: mdx.set.linebar
elle requier comme controle hote une "list"

usage: mdx.set.linebar DIALOG_NAME id:min-max-default:mode
explication:
- DIALOG_NAME = nom du dialog ($dname)
- id = id du controle à cibler
- min = nombre minimum de l'amplitude numerique selectionable
- max = nombre maximum de cette amplitude
- default = nombre pré-selectioné lors de la creation de l'id
- mode = par defaut l'aliase créé une bare horizontale, il est possible de spécifier que l'on veut une bare verticale avec le mode "v" (ce paramètre est optionel)

exemple:
mdx.set.linebar $dname 1:0-100,2:20-30,45:7-12,8:0-100-50,40,1-5:v
transoformera les id: 1 2 45 8 40 et 1 le 1 seras vertical
pour recuperer les resultat: $gettok($did(id).seltext,1,32)

la seconde aliase: wbs.mdx.table
elle sers a créé une sorte de tableau en grille
syntaxe: wbs.mdx.table $dname ID section:taille
exemple: wbs.mdx.table $dname 5 nom:40 prenom:80 age:30
va créer un tableau a 3 colones de 40, 80 et 30 pixels de large dans la list portant l'id 5
lors de la recuperation via $did(id).seltext les colones sont séparée par des chr(9) (a vous d'utiliser $gettok pour filtrer)

l'aliase wdll retourne le chemin de la dll à son format court et relatif, l'aliase wbs.relat retourne le chemin relatif d'un fichier (depuis mirc)

mgettok permet les imbrication de $gettok (toujours utile lors de l'usage de mdx)

les fonctions utilisant mdx DOIVENT toutes etre précédées de 'mdxinit' a l'appel du dialog (une seule fois)

installation: le code requiers: mdx.dll , views.mdx et bars.mdx dans un dossier enfant de $mircdir

Source / Exemple :


alias mdx.set.linebar {
  ;syntaxe: $dname id:min-max,id:min-max-defaut (optionel) :mode (optionel)
  ;exemple:$dname 1:0-100,2:20-30,45:7-12,8:0-100-50,40,1-5:v
  ;modes disponibles: [v] : bare verticalle (par defaut horizontal)
  ;retours: 1 si $dname manque, 2 si dialog es introuvable, 0 en cas de réusite
  var %param = $2- , %i 1 , %n = $numtok(%param,44) , %dname = $1
  if (!%dname) return 1
  if (!$dialog(%dname).title) return 2
  while (%i <= %n) {
    var %curent = $gettok(%param,%i,44) , %id = $gettok(%curent,1,58) , %min = $mgettok(%curent,2,58,1,45) , %max = $mgettok(%curent,2,58,2,45) , %defaut = $mgettok(%curent,2,58,3,45)
    if (!%defaut) var %defaut = 0
    mdx SetControlMDX %dname %id TrackBar autoticks $iif($gettok(%curent,3,58) == v, vertical) > $wdll(bars.mdx)
    mdx SetBorderStyle %dname %id windowedge   
    did -i %dname %id 1 params %defaut %min %max * * * * 14
    did -i %dname %id 1 tickfreq 1
    inc %i
  }
  return 0
}
alias wbs.mdx.table {
  ;syntaxe: wbs.mdx.table $dname ID section:taille
  var %dname = $iif($1 == x,$dname,$1)
  if (!$isid) && ($dialog(%dname)) && ($3) {
    mdx SetControlMDX %dname $2 ListView report single grid > $wdll(views.mdx)
    var %i 1
    while ($gettok($3-,%i,32)) {
      var %tmp = $ifmatch , %size = %size $gettok(%tmp,2,58) , %text = %text $chr(9) $gettok(%tmp,1,58)
      inc %i
    }
    did -i %dname $2 1 headerdims %size
    did -i %dname $2 1 headertext $mid($strip($gettok(%text,1-,9)) $chr(9),2-)
  }
}
alias mdx {
  var %mdx = $wdll(mdx.dll)
  if (%mdx) dll $shortfn(%mdx) $1-
  else echo -s mdx.dll introuvable
}
alias mdxinit {
  if ($1) var %dname = $1-
  else var %dname = $dname
  if (!%dname) { echo -a erreur: Mdxinit: nom du dialog manquant !  | halt }
  else {
    mdx SetMircVersion $version
    mdx MarkDialog %dname 
    return OK
  }
}
alias wdll {
;pour interdir l'usage d'une dll la stipuler dans un fichier Exepts.ini (se touvant dans le dossier du script) dans la section [DLLS] nom_de_la_dll=1
  if ($1) {
    if ($readini($scriptdirExepts.ini,DLLS,$1) == 1) { return }
    else {
      if ($hget(wbs.dlls,$1)) { return $wbs.relat($shortfn($ifmatch)) }
      var %wdll = $wbsdir $+ dlls\ $+ $1
      if (!$exists(%wdll)) { 
        var %wdll = $findfile($mircdir,$ifmatch,1)
        if (%wdll) { hadd -m wbs.dlls $nopath(%wdll) %wdll }
      }
      if (%wdll) { return $wbs.relat($shortfn($ifmatch))  }
    }
  }
}
alias -l wbs.relat { 
  if ($gettok($$1,1- $+ $numtok($mircdir,92),92) $+ \ == $mircdir) {
    if ($gettok($$1,$calc($numtok($mircdir,92) +1),92)) {  return $gettok($$1,$calc($numtok($mircdir,92) +1) $+ -,92) }
  }
  else return $$1
}
alias mgettok {
  ;permet l'imbrication de plusieurs gettok: $gettok($1-,a,c,b,d) == $mgettok($1-,a,b,c,d)
  if ($0) && ($isid) {
    var %n = $calc(($0 -1) / 2)
    if ($chr(46) !isin %n) {
      var %i 1 , %tok = 3 , %id = 2
      while (%i <= %n) {
        var %tmp = $eval($+($,%tok),2)
        if (%tmp !isnum) var %tmp = $asc(%tmp)
        if (!%data) var %data = $gettok($1,$eval($+($,%id),2),%tmp)
        else var %data =  $gettok(%data,$eval($+($,%id),2),%tmp)
        inc %id 2
        inc %tok 2
        inc %i
      }
      return %data
    }
    else echo -s Error: mgettok syntaxe/parametres invalides
  }
}

Conclusion :


voila j'espere avoir été assé clair et que ces aliases vous seront utiles

A voir également

Ajouter un commentaire Commentaires
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
12 juin 2008 à 19:52
Franchement je doute que ces alias soit utiles a quelqu'un et ce, pour plusieurs raisons:

-Il existe une autre dll, DCX, mise a jours régulièrement (contrairement a dcx), qui permet de faire entièrement ce que fait mdx, en mieux, avec des dizaine de fonctions en plus, et avec une aide relativement bien faites (mais surtout existante)
-Mdx n'est utilisé que par les personnes qui ont commencé avec mdx et qui n'ont pas envie de modifier tout leur code pour dcx (compréhensible)

Enfin malgré le commentaire négatif, au moins ça change et c'est relativement bien codé (codé a l'ancienne en tout cas, $ifmatch, mdr :')).
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
12 juin 2008 à 20:46
Codé à l'ancienne codé à l'ancienne... c'est de la rétrocompatibilité pour pas un rond, on aurait tord de se priver, d'autant que j'ai jamais vu que ça allait être laché :p

Bon sinon un peu d'accord pour les commentaires.. Le ticket d'entrée dans DCX est trop important par certains aspects (la gestion de l'algo de resizing j'avais trouvé ça difficile quand j'avais fait quelques tests). C'est vraiment dommage, parce que les dialogs avec mIRC c'est certainement une des plus grosses puissances du langage de mon point de vue, y'a une API simpliste avec une syntaxe sympa (qui sépare extrêmement bien les différents aspects de la gestion de l'UI, entre la déclaration et les évènements, et mêmes les types d'évènements entre eux) ce que je n'ai jamais vu ailleurs (que ce soit les apis perl ruby c java etc pour gtk qt wxwidgets etc...).

Bon j'arrête de parler à + :D
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
12 juin 2008 à 21:27
ce que je reproche a dxc c'est qu'il est vraiment trop dur a metre en place coté code: des tas d'appels a la dll et je n'avais pas trouvé la doc tres claire a l'époque , de ce fait j'avais preferé mdx

pour le $ifmatch oui j'avoue:) $v1 est valable depuis 6.16 et beaucoup sont encore en 6.14 pour cause de vieux scripts :)
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
12 juin 2008 à 21:57
Trop dur a mettre en place ?

Dcx : tu load la dll
mdx :tu load la dll

ah bah, nan, si ? nan, ah bah nan, pas de différence :|
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
12 juin 2008 à 22:10
je parle au niveau des syntaxes des commandes et du nombre d'argument requis

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.