#include #include #include #include #include #include "projet.h" #include "prjlist.h" #include "projetx.m" #define MAX_PROJET 100 // Nombre maximum de projet principaux /* affiche information dans un window sur programmeur */ void projet_setupinfo (DIALOG &dia, USERINFO *user) { dia.newf_info (MSG_U(F_PROGNAME,"Programmeur"),user->getnom()); char progid[10]; sprintf (progid,"%d",user->getno()); dia.newf_info (MSG_U(F_PROGID,"ID"),progid); char verstr[30]; char revstr[10]; user->getrevdst()->format(revstr); sprintf (verstr,"%-8s (%s)",user->getversion(),revstr); dia.newf_info (MSG_U(F_VERSION,"Version"),verstr); char path[MAXSIZ_PATH]; user->makusrpath("",path); dia.newf_info (MSG_U(F_USRPATH,"Sources"),path); #if 0 user->makobjpath("",path); dia.newf_info (MSG_U(F_OBJPATH,"Objets"),path); dia.last_readonly(); #endif } /* Information pass‚ … la fonction fctbut indirectement via FCTBUT_DATA */ class FCTBUT_INFO{ public: PRJLISTE *liste; USERINFO *user; PRJ_INFO tbprj[MAX_PROJET]; int nbprj; char tbsel[MAX_PROJET]; /*~PROTOBEG~ FCTBUT_INFO */ public: FCTBUT_INFO (PRJLISTE *_liste, USERINFO *_user); void setprjlist (DIALOG&dia); ~FCTBUT_INFO (void); /*~PROTOEND~ FCTBUT_INFO */ }; PUBLIC FCTBUT_INFO::FCTBUT_INFO(PRJLISTE *_liste, USERINFO *_user) { liste = _liste; user = _user; nbprj = 0; } PUBLIC FCTBUT_INFO::~FCTBUT_INFO() { PRJ_INFO *ptprj = tbprj; for (int i=0; inom); } // Comparaison pour hsort(). static int cmp_info (const void *pt1, const void *pt2) { PRJ_INFO *p1 = (PRJ_INFO*)pt1; PRJ_INFO *p2 = (PRJ_INFO*)pt2; return strcmp(p1->nom,p2->nom); } /* Cr‚ation de la sous-page qui contient la liste des projets. Retourne la sous-page. */ PUBLIC void FCTBUT_INFO::setprjlist (DIALOG &dia) { { PRJ_INFO *ptprj = tbprj; for (int i=0; i< MAX_PROJET; i++,ptprj++){ ptprj->nom = NULL; ptprj->atr = ' '; } } nbprj = liste->getlist (user,tbprj,MAX_PROJET); if (nbprj > 0){ /* On tri les projets en ordre alphabetique. On garde tbatr synchronise. */ hsort (tbprj,nbprj,sizeof(PRJ_INFO),cmp_info); /* Ajoute un etoile vis a vis les projets avec transaction */ PRJ_INFO *ptprj = tbprj; dia.gui_groupfit (MSG_U(T_PROJETS,"Projets")); dia.auto_newline(false); const int nbcol=6; for (int i=0; iatr; char buf[100]; sprintf (buf,"%s %s",str,ptprj->nom); tbsel[j] = str[0] != ' '; dia.newf_chk ("",tbsel[j],buf); } dia.newline(); } dia.gui_end(); dia.gui_dispolast (GUI_H_LEFT,2,GUI_V_TOP,1); dia.auto_newline(true); } } /* S‚lection d'un ou des projets et applique un op‚ration */ int projet_select ( USERINFO *user, PRJLISTE &liste) // Permet de composer la liste des projets // et de prendre action. { int ret = -1; FCTBUT_INFO info(&liste,user); if (info.nbprj > 0 || 1){ DIALOG dia; int nof = 0; projet_setupinfo (dia,user); liste.setupdia (dia); int prjfield = dia.getnb(); info.setprjlist (dia); const char **tbbut = liste.getbutton(); dia.setbutinfo(MENU_USR1,MSG_U(B_ALL,"Tous"),MSG_R(B_ALL)); dia.setbutinfo(MENU_USR2,MSG_U(B_NONE,"Aucun"),MSG_R(B_NONE)); int butmask = MENUBUT_USR1|MENUBUT_USR2; for (int i=0; tbbut[i] != NULL; i++){ dia.setbutinfo(MENU_USR3+i,tbbut[i],tbbut[i]); butmask |= (MENUBUT_USR3 <exec(user,code-MENU_USR3,tb,nb) != -1){ break; } } } }else{ xconf_error (MSG_U(E_NOPROJECT ,"Il n'y a aucun projet sélectionnable\n" "pour l'opération courante.")); } return ret; }