home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / xfedor.zip / XFree86 / src / xfedor / tr_num.c < prev    next >
C/C++ Source or Header  |  1999-03-02  |  7KB  |  245 lines

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>
  3. #include "couche.h"        /* myEvent */
  4. #include "clientimage.h"
  5. #include "fedor.h"
  6. #include "sos.h"          /* constante NUM */
  7.  
  8. extern nf_mono ;
  9. extern fedchar cartrav ;    /* depuis tr_edit */
  10.  
  11. extern int maxup, maxdown, maxhsize, maxhincr, maxhadj ;
  12. extern char codemaxup, codemaxdown, codemaxhsize, codemaxhincr, codemaxhadj ;
  13.  
  14.  
  15. void Init_num();
  16. void Aff_all() ;
  17. void Aff_max() ;
  18. void Aff_name();
  19. void Autom_helpnum () ;
  20. void Autom_num();
  21. static int Aff_item() ;
  22. static int AffMax_item() ;
  23.  
  24. int nf_num ;    /* NUMERO DE LA FENETRE tableau numerique */
  25. int nf_helpnum ;  /* NUMERO DE LA FENETRE help numerique */
  26.  
  27.     /*--------- reste du LOCAL */
  28.  
  29. static char * lib [] = {"UP","DOWN","HSIZE","HINCR","HADJ","NAME"};
  30. #define RangUp 1 
  31. #define RangDown 2
  32. #define RangHsize 3
  33. #define RangHincr 4 
  34. #define RangHadj 5 
  35. #define RangName 6
  36.  
  37.  
  38. static int zhelp, zname,zhincr,zhadj ; 
  39.  
  40. #define NbItem 6    /* voir lib */
  41. #define HNUMITEM 23
  42. #define HNUM ((NbItem+1)*HNUMITEM)    /* +1 pour l'entete */
  43.  
  44. #define WNUMITEM 55
  45. #define WCHAR 87
  46. #define WFONT 98
  47. #define WNUM (WNUMITEM+WCHAR+WFONT)  /* 3 colonnes : field, char et font */
  48.  
  49. #define XNUM (10 + 100+514+12 + 10 + 2)
  50. #define YNUM (10 + 22 + 2*22+130 + 2) 
  51.  
  52.  
  53. void Init_num ()   
  54.  
  55. {    int i,y ;
  56.  
  57.           nf_num = w_ouvrir(nf_mono,XNUM, YNUM, WNUM, HNUM,
  58.               "XFEDOR : Metric",CURS2, 
  59.               EnterZone|ButtonPressed|LeaveZone,WMON) ;
  60.      zhelp = w_crzon(nf_num,0,0,WNUM,HNUMITEM,CURS2);
  61.      zhincr = w_crzon(nf_num,WNUMITEM,RangHincr*HNUMITEM,
  62.             (WNUMITEM+WCHAR),(RangHincr+1)*HNUMITEM,CURS2);
  63.      zhadj = w_crzon(nf_num,WNUMITEM,RangHadj*HNUMITEM,
  64.             (WNUMITEM+WCHAR),(RangHadj+1)*HNUMITEM,CURS2);
  65.      zname = w_crzon(nf_num,WNUMITEM,RangName*HNUMITEM,
  66.             (WNUMITEM+WCHAR+WFONT),(RangName+1)*HNUMITEM,CURS2);
  67.          w_montrer(nf_num);    
  68.  
  69.      /* on cree ici la fenetre help_num */
  70.      nf_helpnum = w_ouvrir(nf_mono,XNUM, YNUM, WNUM, HNUM , 
  71.               "HelpMetric",CURS2,ButtonPressed,WMON);
  72. }
  73.  
  74. static Reaffich(fen)
  75. int fen ;
  76. {   int i,y ;
  77.     if (fen == nf_num) {
  78.          w_clear(nf_num);
  79.      for (i=1,y=HNUMITEM;i<= NbItem ;i++,y+=HNUMITEM) {
  80.          w_line(nf_num,0,y,WNUM,y,ON);
  81.          w_centrer(nf_num,lib[i-1],0,y,WNUMITEM,y+HNUMITEM);
  82.      } 
  83.      w_line(nf_num,WNUMITEM,0,WNUMITEM,HNUM,ON);
  84.      w_line(nf_num,WNUMITEM+WCHAR,0,WNUMITEM+WCHAR,HNUM-HNUMITEM,ON);
  85.  
  86.      w_centrer(nf_num,"SOS",0,0,WNUMITEM,HNUMITEM);
  87.      w_centrer(nf_num,"CHAR",WNUMITEM,0,WNUMITEM+WCHAR,HNUMITEM);
  88.      w_centrer(nf_num,"FONT",WNUMITEM+WCHAR,0,WNUM,HNUMITEM);
  89.  
  90.      Aff_all() ;
  91.      Aff_name(cartrav.name) ;
  92.      Aff_max() ;
  93.     } else
  94.     if (fen == nf_helpnum) {    
  95.        w_line(nf_helpnum,0,HNUM/2,WNUM,  HNUM/2,ON);    /* baseline */
  96.        w_rect(nf_helpnum,WNUM/3,HNUM/5,2*WNUM/3,4*HNUM/5,ON);  /*  BBox */
  97.  
  98.        w_line(nf_helpnum,WNUM-30,HNUM/2 -2,WNUM-30,HNUM/2 +5,ON);
  99.        w_line(nf_helpnum,WNUM-30,HNUM -10,WNUM-30,HNUM,ON);
  100.                     /* marque hincr sur baseline */
  101.  
  102.        w_ecrire(nf_helpnum,"<-HADJ->",30,HNUM/2-10);
  103.        w_ecrire(nf_helpnum,"<-HSIZE->",WNUM/3+20,20);
  104.        w_ecrire(nf_helpnum,"<--HINCR-->",WNUM/3-10,HNUM-10);
  105.        w_ecrire(nf_helpnum,"Baseline",WNUM*2/3+20,HNUM/2-5);
  106.        w_ecrire(nf_helpnum,"Up",WNUM*2/3+3,HNUM/5);
  107.        w_ecrire(nf_helpnum,"Down",WNUM*2/3+3,HNUM*4/5);
  108.        w_fellips(nf_helpnum,WNUM/3+2,HNUM/5+2,WNUM*2/3-2,HNUM/2-2,ON);
  109.        w_fore(nf_helpnum,WNUM/3+2,HNUM/5+2,WNUM/3+30,HNUM*4/5-2);
  110.     }
  111. }    
  112.  
  113.  
  114. static int Inverser_zone(zone)
  115.     int zone;
  116. {
  117.     if (zone==zhincr) w_inv(nf_num,WNUMITEM+2,RangHincr*HNUMITEM+2,
  118.         WNUMITEM+WCHAR-2,(RangHincr+1)*HNUMITEM-2); else
  119.     if (zone==zhadj) w_inv(nf_num,WNUMITEM+2,RangHadj*HNUMITEM+2,
  120.         WNUMITEM+WCHAR-2,(RangHadj+1)*HNUMITEM-2); else
  121.     if (zone==zname) w_inv(nf_num,WNUMITEM+2,RangName*HNUMITEM+2,
  122.         WNUMITEM+WCHAR+WFONT-2,(RangName+1)*HNUMITEM-2); 
  123. }    
  124.  
  125. static int Traiter_clic(evt)
  126.     myEvent * evt ;
  127. {    char s[50] ;
  128.     long lf ;    /* en virgule fixe */
  129.  
  130.     if (evt->zone==zhelp) {
  131.          if (evt->x <= WNUMITEM) Helping(NUM); 
  132.           else     w_montrer(nf_helpnum); 
  133.              } else
  134.         if (evt->zone==zhincr) {
  135.          gd_lireentier("Value for Hincr ?",&lf);
  136.          cartrav.hincr = lf ;
  137.          Aff_item(cartrav.hincr,RangHincr); 
  138.         }else
  139.         if (evt->zone==zhadj) {
  140.          gd_lireentier("Value for Hadj ?",&lf);
  141.          cartrav.hadj = lf;
  142.          Aff_item(cartrav.hadj,RangHadj) ;
  143.           }else
  144.         if (evt->zone==zname) {
  145.        gd_lirechaine("Name for Glyph ?",cartrav.name);
  146.        Aff_name(cartrav.name);
  147.     }    
  148. }
  149.  
  150. void Aff_all()
  151. {
  152.     Aff_item(cartrav.hsize,RangHsize); 
  153.     Aff_item(cartrav.up,RangUp) ;
  154.     Aff_item(cartrav.down,RangDown) ;
  155.     Aff_item(cartrav.hincr,RangHincr); 
  156.     Aff_item(cartrav.hadj,RangHadj) ;
  157. }
  158.  
  159. void Aff_max() 
  160. {
  161.     AffMax_item(codemaxup,maxup,RangUp);
  162.     AffMax_item(codemaxdown,maxdown,RangDown);
  163.     AffMax_item(codemaxhsize,maxhsize,RangHsize);
  164.     AffMax_item(codemaxhincr,maxhincr,RangHincr);
  165.     AffMax_item(codemaxhadj,maxhadj,RangHadj);
  166.     
  167. }
  168.  
  169. static int Aff_item(val,rang)
  170.     int val ;
  171.     int rang ;
  172. {   char s [10];
  173.     sprintf(s,"%d",val);
  174.     w_centrer(nf_num,s,WNUMITEM,rang*HNUMITEM,
  175.             WNUMITEM+WCHAR,(rang+1)*HNUMITEM);
  176. }
  177.     
  178. static int AffMax_item(c,val,rang)
  179.     char c ;
  180.     int val ;
  181.     int rang ;
  182. {   char s [10];
  183.     sprintf(s,"%d  %c",val,c);
  184.     w_centrer(nf_num,s,WNUMITEM+WCHAR,rang*HNUMITEM,
  185.             WNUM,(rang+1)*HNUMITEM);
  186. }
  187.     
  188. void Aff_name(name)
  189.     char * name;
  190. {   
  191.   w_cleararea(nf_num,WNUMITEM+1,HNUM-HNUMITEM+1,WNUM-1,HNUM-1);
  192.   w_ecrire(nf_num,name,WNUMITEM+5,HNUM-HNUMITEM/3);
  193. }
  194.     
  195.  
  196. /************************ procedure AUTOM_NUM ***************************/ 
  197. /* Des que le controleur detecte l'entree de la souris dans le tableau
  198.    numerique, il appelle cette procedure */
  199.  
  200. void Autom_num (pev) 
  201.    myEvent * pev ;
  202. {
  203.     static zonecour = 0 ;
  204.     switch(pev->type){
  205.     case Exposure : 
  206.         Reaffich(pev->window) ;
  207.         if (zonecour) Inverser_zone(zonecour);
  208.         break ;
  209.     case EnterZone : 
  210.         if (pev->zone == zhelp) Afficher_boutons("Help","Help") ;else
  211.                         Afficher_boutons("Select","Select") ;
  212.         Inverser_zone(pev->zone);
  213.         zonecour = pev->zone ;
  214.         break ;
  215.     case ButtonPressed : 
  216.         Traiter_clic(pev);
  217.         break ;
  218.     case LeaveZone :
  219.                    Afficher_boutons("","") ;
  220.            Inverser_zone(pev->zone);
  221.            zonecour = 0 ;
  222.            break ;
  223.     case CloseWindow : break ;                
  224.       }
  225.   }        
  226.  
  227. /************************ procedure AUTOM_HELPNUM ***************************/ 
  228. /* si la fenetre helpnum est visible, elle peut recevoir l'evenement
  229.     ButtonPressed qui la cache */
  230.  
  231. void Autom_helpnum (pev) 
  232.    myEvent * pev ;
  233. {
  234.    switch(pev->type){
  235.     case Exposure :
  236.         Reaffich(pev->window);
  237.         break ;
  238.     case ButtonPressed : 
  239.         w_cacher(nf_helpnum);
  240.         break ;
  241.     default : break ;
  242.       }
  243. }        
  244.  
  245.