/* * * (c) COPYRIGHT INRIA, 1996. * Please first read the full copyright statement in file COPYRIGHT. * */ /* * Messages and printing management. */ #include "thot_sys.h" #include "libmsg.h" #include "message.h" #include "constmenu.h" #include "constmedia.h" #include "typemedia.h" #include "language.h" #include "constmenu.h" #include "document.h" #include "dialog.h" #include "appdialogue.h" #include "view.h" #include "print.h" #undef THOT_EXPORT #define THOT_EXPORT extern #include "print_tv.h" #include "edit_tv.h" #include "appdialogue_tv.h" #include "printmenu_f.h" #include "views_f.h" #include "actions_f.h" static int NewFirstPage; static int NewLastPage; static int NewNbCopies; static int NewReduction; static int NewPagesPerSheet; static int NbVuesImprimables; static int NbPrintViews; static AvailableView LesVuesImprimables; static int EntreesMenuVuesAImprimer[MAX_FRAME]; static Document docPrint; /* ---------------------------------------------------------------------- */ /* | ComposePrintMenu compose le menu Imprimer pour le | */ /* | document pDoc. | */ /* ---------------------------------------------------------------------- */ #ifdef __STDC__ static void ComposePrintMenu (PtrDocument pDoc, char *buffer, int *nbEntry) #else /* __STDC__ */ static void ComposePrintMenu (pDoc, buffer, nbEntry) PtrDocument pDoc; char *buffer; int *nbEntry; #endif /* __STDC__ */ { int i, v; int nbentrees; int lgmenu, lgentree; PrintedView *pVueImp; boolean trouve; /* compose le menu des vues a imprimer */ /* construit d'abord la liste de toutes les vues possibles pour */ /* ce document */ NbVuesImprimables = BuildDocumentViewList (pDoc, LesVuesImprimables); /* et indique qu'aucune de ces vues n'est dans le menu */ for (i = 0; i < NbVuesImprimables; i++) LesVuesImprimables[i].VdOpen = False; /* initialise le menu (vide) */ nbentrees = 0; buffer[0] = '\0'; lgmenu = 0; /* met en tete du menu les vues indiquees dans l'instruction */ /* PRINT du schema de presentation du document */ for (v = 1; v <= pDoc->DocSSchema->SsPSchema->PsNPrintedViews; v++) { pVueImp = &pDoc->DocSSchema->SsPSchema->PsPrintedView[v - 1]; /* cherche cette vue dans la liste des vues possibles */ i = 0; trouve = False; while (i < NbVuesImprimables && !trouve) { i++; if (pVueImp->VpAssoc) /* c'est une vue d'elements associes */ trouve = (LesVuesImprimables[i - 1].VdAssocNum == pVueImp->VpNumber) && (LesVuesImprimables[i - 1].VdSSchema->SsCode == pDoc->DocSSchema->SsCode); else /* c'est une vue de l'arbre principal */ trouve = LesVuesImprimables[i - 1].VdView == pVueImp->VpNumber && LesVuesImprimables[i - 1].VdSSchema->SsCode == pDoc->DocSSchema->SsCode; } if (trouve) { /* met le nom de la vue dans le menu */ lgentree = strlen (LesVuesImprimables[i - 1].VdViewName) + 1; if (lgmenu + lgentree < MAX_TXT_LEN) { buffer[lgmenu] = 'B'; lgmenu++; strcpy (buffer + lgmenu, LesVuesImprimables[i - 1].VdViewName); lgmenu += lgentree; if (!LesVuesImprimables[i - 1].VdPaginated) /* vue sans pages, on met une etoile a la fin du nom */ { buffer[lgmenu - 1] = '*'; buffer[lgmenu] = '\0'; lgmenu++; } EntreesMenuVuesAImprimer[nbentrees] = i; nbentrees++; } /* indique que la vue est dans le menu */ LesVuesImprimables[i - 1].VdOpen = TRUE; } } /* met ensuite dans le menu les autres vues */ for (i = 1; i <= NbVuesImprimables; i++) { if (!LesVuesImprimables[i - 1].VdOpen) /* cette vue n'est pas encore dans le menu, on la met */ /* sauf si c'est une vue de nature : print ne sait pas */ /* (pas encore) imprimer les vues de natures */ if (!LesVuesImprimables[i - 1].VdNature) { lgentree = strlen (LesVuesImprimables[i - 1].VdViewName) + 1; if (lgmenu + lgentree < MAX_TXT_LEN) { buffer[lgmenu] = 'B'; lgmenu++; strcpy (buffer + lgmenu, LesVuesImprimables[i - 1].VdViewName); lgmenu += lgentree; if (!LesVuesImprimables[i - 1].VdPaginated) /* vue sans pages, on met une etoile a la fin du nom */ { buffer[lgmenu - 1] = '*'; buffer[lgmenu] = '\0'; lgmenu++; } EntreesMenuVuesAImprimer[nbentrees] = i; nbentrees++; } } } if((nbentrees > 0) && !LesVuesImprimables[0].VdOpen) LesVuesImprimables[0].VdOpen=TRUE; *nbEntry = nbentrees; } /*---------------------------------------------------------------------- CallbackExtPrintmenu analyse les retours des extensions du formulaire d'impression. ----------------------------------------------------------------------*/ #ifdef __STDC__ void CallbackExtPrintmenu (int ref, int val, char *txt) #else /* __STDC__ */ void CallbackExtPrintmenu (ref, val, txt) int ref; int val; char *txt; #endif /* __STDC__ */ { int i; boolean okprint; char BufMenu[MAX_TXT_LEN]; switch (ref) { case NumZoneFirstPage: NewFirstPage=val; break; case NumZoneNbOfCopies: NewNbCopies=val; break; case NumZoneReduction: if (NewReduction != val) NewReduction = val; break; case NumZoneLastPage: NewLastPage = val; break; case NumMenuNbPagesPerSheet: switch (val) { case 0: NewPagesPerSheet = 1; break; case 1: NewPagesPerSheet = 2; break; case 2: NewPagesPerSheet = 4; break; } break; case NumMenuViewsToPrint: LesVuesImprimables[EntreesMenuVuesAImprimer[val] - 1].VdOpen = !LesVuesImprimables[EntreesMenuVuesAImprimer[val] - 1].VdOpen; break; case NumFormPrint: FirstPage = NewFirstPage; LastPage = NewLastPage; NbCopies = NewNbCopies; Reduction = NewReduction; PagesPerSheet = NewPagesPerSheet; okprint = FALSE; BufMenu[0]='\0'; for (i=0;i