home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / Split_GUI.lha / Split_v1.0 / Sources.lha / Sources / gadgets.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-12  |  8.7 KB  |  303 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <exec/libraries.h>
  4. #include <dos/dos.h>
  5. #include <intuition/gadgetclass.h>
  6. #include <intuition/intuitionbase.h>
  7. #include <libraries/iffparse.h>
  8. #include <prefs/prefhdr.h>
  9. #include <prefs/font.h>
  10. #include <string.h>
  11.  
  12. #include <proto/exec.h>
  13. #include <proto/intuition.h>
  14. #include <proto/gadtools.h>
  15. #include <proto/dos.h>
  16. #include <proto/iffparse.h>
  17. #include <proto/diskfont.h>
  18. #include <proto/graphics.h>
  19.  
  20. #include "split.h"
  21.  
  22. /* for debug purposes */
  23. #include <stdio.h>
  24.  
  25. extern UWORD wwidth, wheight, wleft, wtop;
  26. extern VolumeList *vlist;
  27. extern STRPTR msg_warnfilenotproc, msg_warngadgets,
  28.     msg_write, msg_chunkoffs, msg_chunksize, msg_chunknum, msg_chunkname,
  29.     msg_file, msg_size, status_title, statname[];
  30. extern UBYTE chunk_number, status;
  31. extern ULONG chunkoffset, chunksize;
  32. extern STRPTR chunkname, filename;
  33. extern ULONG filesize;
  34. extern struct IntuitionBase *IntuitonBase;
  35.  
  36. struct Gadget *glist, *gad, *vlist_gad, *chunk_gad, *chunknum_gad,
  37.     *chunksize_gad, *chunkoffs_gad, *write_gad, *chunknam1_gad, *chunknam2_gad,
  38.     *filenam1_gad, *filenam2_gad, *filesize_gad, *status_gad, *hide_gad, *quit_gad;
  39.  
  40. STRPTR msg_hide, msg_quit;
  41.  
  42. struct VisualInfo *vi;
  43. struct NewGadget newgdg = { 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0 };
  44. struct Screen *WBS;
  45. struct Library *GadToolsBase, *IFFParseBase, *DiskFontBase;
  46. struct DrawInfo *dri;
  47.  
  48. struct IntuiText it = { 0, 0, 0, 0, 0, NULL, NULL, NULL };
  49. UWORD maxstrlen;
  50.  
  51. UWORD CheckMax( STRPTR text, UWORD add_gdw, UWORD prev )
  52. {
  53. register UWORD ilength;
  54.  
  55. it.IText = text;
  56. if ( ( ilength = IntuiTextLength( &it ) + add_gdw ) > prev )
  57.     return( ilength );
  58. else
  59.     return( prev );
  60. }
  61.  
  62.  
  63. char fontname[FONTNAMESIZE];
  64. struct TextAttr topazattr = { "topaz.font", 8, FS_NORMAL, FPF_ROMFONT };
  65. struct FontPrefs fp;
  66.  
  67. BOOL setUpGadgets( void )
  68. {
  69. UWORD fontw = 8, fonth = 8;
  70.  
  71. if ( GadToolsBase = OpenLibrary( "gadtools.library", 0L ) )
  72.     {
  73.     if ( DiskFontBase = OpenLibrary( "diskfont.library", 37L ) )
  74.         {
  75.         if ( IFFParseBase = OpenLibrary( "iffparse.library", 37L ) )
  76.             {
  77.             struct IFFHandle *iffhandle;
  78.  
  79.             if ( iffhandle = AllocIFF() )
  80.                 {
  81.                 ULONG intuiVersion = IntuitionBase->LibNode.lib_Version;
  82.                 if ( iffhandle->iff_Stream = Open( intuiVersion >= 39L ? "ENV:Sys/font.prefs" : "ENV:Sys/sysfont.prefs", MODE_OLDFILE ) )
  83.                     {
  84.                     InitIFFasDOS( iffhandle );
  85.                     if ( !OpenIFF( iffhandle, IFFF_READ ) )
  86.                         {
  87.                         struct TextFont *font;
  88.  
  89.                         if ( !StopChunk( iffhandle, ID_PREF, ID_FONT ) )
  90.                             {
  91.                             ParseIFF( iffhandle, IFFPARSE_SCAN );
  92.                             if ( intuiVersion >= 39L )
  93.                                 ParseIFF( iffhandle, IFFPARSE_SCAN );
  94.  
  95.                             ReadChunkBytes( iffhandle, &fp, sizeof(struct FontPrefs) );
  96.                             strcpy( fontname, fp.fp_Name );
  97.                             topazattr.ta_Name = fontname;
  98.                             topazattr.ta_YSize = fp.fp_TextAttr.ta_YSize;
  99.                             topazattr.ta_Style = fp.fp_TextAttr.ta_Style;
  100.                             topazattr.ta_Flags = fp.fp_TextAttr.ta_Flags;
  101.                             fonth = topazattr.ta_YSize;
  102.                             if ( font = OpenDiskFont( &topazattr ) )
  103.                                 {
  104.                                 fontw = font->tf_XSize;
  105.                                 CloseFont( font );
  106.                                 }
  107.                             }
  108.                         CloseIFF( iffhandle );
  109.                         }
  110.                     Close( iffhandle->iff_Stream );
  111.                     }
  112.                 FreeIFF( iffhandle );
  113.                 }
  114.             CloseLibrary( IFFParseBase );
  115.             }
  116.         CloseLibrary( DiskFontBase );
  117.         }
  118.  
  119.     if ( WBS = LockPubScreen( NULL ) )
  120.         {
  121.         it.ITextFont = &topazattr;
  122.  
  123.         if ( vi = GetVisualInfoA( WBS, TAG_END ) )
  124.             {
  125.             newgdg.ng_Flags = NULL;
  126.             newgdg.ng_VisualInfo = vi;
  127.             newgdg.ng_TopEdge = WBS->BarHeight + 3;
  128.             newgdg.ng_TextAttr = &topazattr;
  129.             gad = CreateContext (&glist);
  130.  
  131.             /* Prima riga */
  132.  
  133.             newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
  134.             newgdg.ng_Width = ( 4 + VOLUMENODENAMELEN ) * fontw + 4;
  135.             newgdg.ng_Height = fonth * 5 + 4;
  136.             newgdg.ng_GadgetText = NULL;
  137.             newgdg.ng_GadgetID = DOSLIST_GDG;
  138.             vlist_gad = gad = CreateGadget( LISTVIEW_KIND, gad, &newgdg,
  139.                 GTLV_Labels, vlist,
  140.                 GTLV_ShowSelected, NULL,
  141.                 TAG_END );
  142.  
  143.             /* Seconda riga */
  144.  
  145.             newgdg.ng_Flags = PLACETEXT_IN;
  146.             newgdg.ng_Height = fonth + 6;
  147.             newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
  148.             newgdg.ng_TopEdge += fonth * 5 + 6;
  149.             newgdg.ng_Width = fontw * 5 + 20;
  150.             newgdg.ng_GadgetText = msg_chunknum;
  151.             newgdg.ng_GadgetID = CHUNK_GDG;
  152.             chunk_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  153.                 TAG_END );
  154.  
  155.             newgdg.ng_Flags = PLACETEXT_LEFT;
  156.             newgdg.ng_LeftEdge += gad->Width + 2;
  157.             newgdg.ng_Width = fontw * 2 + 10;
  158.             newgdg.ng_GadgetText = NULL;
  159.             newgdg.ng_GadgetID = CHUNKNMB_GDG;
  160.             chunknum_gad = gad = CreateGadget( NUMBER_KIND, gad, &newgdg,
  161.                 GTNM_Number, chunk_number,
  162.                 GTNM_Border, TRUE,
  163.                 TAG_END );
  164.  
  165.             newgdg.ng_LeftEdge += gad->Width + fontw * 4 + 22;
  166.             newgdg.ng_Width = fontw * 8 + 12;
  167.             newgdg.ng_GadgetText = msg_chunksize;
  168.             newgdg.ng_GadgetID = CHUNKSIZE_GDG;
  169.             chunksize_gad = gad = CreateGadget( INTEGER_KIND, gad, &newgdg,
  170.                 GTIN_Number, chunksize,
  171.                 STRINGA_Justification, STRINGRIGHT,
  172.                 TAG_END );
  173.  
  174.             newgdg.ng_LeftEdge += gad->Width + fontw * 4 + 34;
  175.             newgdg.ng_Width = fontw * 8 + 12;
  176.             newgdg.ng_GadgetText = msg_chunkoffs;
  177.             newgdg.ng_GadgetID = CHUNKOFFS_GDG;
  178.             chunkoffs_gad = gad = CreateGadget( INTEGER_KIND, gad, &newgdg,
  179.                 GTIN_Number, chunkoffset,
  180.                 STRINGA_Justification, STRINGRIGHT,
  181.                 TAG_END );
  182.  
  183.             /* Terza riga */
  184.  
  185.             newgdg.ng_Flags = PLACETEXT_IN;
  186.             newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
  187.             newgdg.ng_TopEdge += fonth + 7;
  188.             newgdg.ng_Width = fontw * 5 + 20;
  189.             newgdg.ng_GadgetText = msg_write;
  190.             newgdg.ng_GadgetID = WRITE_GDG;
  191.             write_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  192.                 TAG_END );
  193.  
  194.             newgdg.ng_LeftEdge += gad->Width + 2;
  195.             newgdg.ng_Width = fontw * 6 + 14;
  196.             newgdg.ng_GadgetText = msg_chunkname;
  197.             newgdg.ng_GadgetID = CHUNKNAM1_GDG;
  198.             chunknam1_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  199.                 TAG_END );
  200.  
  201.             newgdg.ng_LeftEdge += fontw * 6 + 16;
  202.             newgdg.ng_Width = 6 + chunkoffs_gad->LeftEdge + chunkoffs_gad->Width - newgdg.ng_LeftEdge /*fontw * 16 + 94 ...222*/;
  203.             newgdg.ng_GadgetText = NULL;
  204.             newgdg.ng_GadgetID = CHUNKNAM2_GDG;
  205.             chunknam2_gad = gad = CreateGadget( STRING_KIND, gad, &newgdg,
  206.                 GTST_String, chunkname,
  207.                 TAG_END );
  208.  
  209.             /* Quarta riga */
  210.  
  211.             newgdg.ng_Flags = PLACETEXT_IN;
  212.             newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
  213.             newgdg.ng_TopEdge += fonth + 7;
  214.             newgdg.ng_Width = fontw * 5 + 20;
  215.             newgdg.ng_GadgetText = msg_file;
  216.             newgdg.ng_GadgetID = FILENAM1_GDG;
  217.             filenam1_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  218.                 TAG_END );
  219.  
  220.             newgdg.ng_LeftEdge += fontw * 6 + 14;
  221.             newgdg.ng_Width = chunkoffs_gad->LeftEdge + chunkoffs_gad->Width - newgdg.ng_LeftEdge - fontw * 9 /* fontw * 25 + 8 ...208*/;
  222.             newgdg.ng_GadgetText = NULL;
  223.             newgdg.ng_GadgetID = FILENAM2_GDG;
  224.             filenam2_gad = gad = CreateGadget( TEXT_KIND, gad, &newgdg,
  225.                 GTTX_Text, filename,
  226.                 GTTX_Border, TRUE,
  227.                 TAG_END );
  228.  
  229.             newgdg.ng_LeftEdge += gad->Width + 4;
  230.             newgdg.ng_Width = fontw * 9 + 2;
  231.             newgdg.ng_GadgetText = NULL;
  232.             newgdg.ng_GadgetID = FILESIZE_GDG;
  233.             filesize_gad = gad = CreateGadget( NUMBER_KIND, gad, &newgdg,
  234.                 GTNM_Number, filesize,
  235.                 GTNM_Border, TRUE,
  236.                 GTNM_Justification, GTJ_RIGHT,
  237.                 TAG_END );
  238.  
  239.             /* Quinta riga */
  240.  
  241.             newgdg.ng_Flags = PLACETEXT_LEFT;
  242.             newgdg.ng_LeftEdge = WBS->WBorLeft + fontw * 6 + 18;
  243.             newgdg.ng_TopEdge += fonth + 7;
  244.             newgdg.ng_Width = 6 + chunkoffs_gad->LeftEdge + chunkoffs_gad->Width - newgdg.ng_LeftEdge /*fontw * 35 + 6 ...286*/;
  245.             newgdg.ng_GadgetText = status_title;
  246.             newgdg.ng_GadgetID = STATUS_GDG;
  247.             status_gad = gad = CreateGadget( TEXT_KIND, gad, &newgdg,
  248.                 GTTX_Text, statname[status],
  249.                 GTTX_Border, TRUE,
  250.                 TAG_END );
  251.  
  252.             /* Sesta riga */
  253.  
  254.             newgdg.ng_Flags = PLACETEXT_IN;
  255.             newgdg.ng_LeftEdge = WBS->WBorLeft + 2 + vlist_gad->Width / 3 - 50;
  256.             newgdg.ng_TopEdge += fonth + 10;
  257.             newgdg.ng_Width = 100;
  258.             newgdg.ng_GadgetText = msg_hide;
  259.             newgdg.ng_GadgetID = HIDE_GDG;
  260.             hide_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  261.                 TAG_END );
  262.  
  263.             newgdg.ng_LeftEdge += vlist_gad->Width / 3;
  264.             newgdg.ng_GadgetText = msg_quit;
  265.             newgdg.ng_GadgetID = QUIT_GDG;
  266.             quit_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  267.                 TAG_END );
  268.  
  269.             /* Set up gadgets */
  270.             if ( gad )
  271.                 {
  272.                 wwidth = (UWORD)(vlist_gad->LeftEdge + vlist_gad->Width + 4 + WBS->WBorRight);
  273.                 if ( GadToolsBase->lib_Version < 38 )
  274.                     wheight = (UWORD)(gad->TopEdge + gad->Height + 3 + WBS->WBorBottom);
  275.                 else
  276.                     wheight = (UWORD)(gad->TopEdge + gad->Height + 2 + WBS->WBorBottom);
  277.                 if ( wleft == ~0 && wtop == ~0 )
  278.                     {
  279.                     wleft = (WBS->Width - wwidth)>>1;
  280.                     wtop = (WBS->Height - wheight)>>1;
  281.                     }
  282.                 return( TRUE );
  283.                 }
  284.  
  285.             FreeVisualInfo( vi );
  286.             vi = NULL;
  287.             }
  288.         UnlockPubScreen( NULL, WBS );
  289.         }
  290.     CloseLibrary( GadToolsBase );
  291.     }
  292. return( FALSE );
  293. }
  294.  
  295.  
  296. void removeGadgets( void )
  297. {
  298. FreeGadgets( glist );
  299. FreeVisualInfo( vi );
  300. UnlockPubScreen( NULL, WBS );
  301. CloseLibrary( GadToolsBase );
  302. }
  303.