home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d913 / stickit.lha / StickIt / Source / Source.lha / stickit.c < prev    next >
C/C++ Source or Header  |  1993-08-03  |  12KB  |  444 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : Andy Dean
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23. #include "stickit.h"
  24.  
  25. struct Screen         *Scr = NULL;
  26. UBYTE                 *PubScreenName = "Workbench";
  27. APTR                   VisualInfo = NULL;
  28. struct Window         *editWnd = NULL;
  29. struct Window         *aboutWnd = NULL;
  30. struct Window         *dummynoteWnd = NULL;
  31. struct Gadget         *editGList = NULL;
  32. struct Menu           *editMenus = NULL;
  33. struct IntuiMessage    editMsg;
  34. struct IntuiMessage    aboutMsg;
  35. struct IntuiMessage    dummynoteMsg;
  36. struct Gadget         *editGadgets[10];
  37. UWORD                  editLeft = 97;
  38. UWORD                  editTop = 84;
  39. UWORD                  editWidth = 444;
  40. UWORD                  editHeight = 56;
  41. UWORD                  aboutLeft = 268;
  42. UWORD                  aboutTop = 96;
  43. UWORD                  aboutWidth = 92;
  44. UWORD                  aboutHeight = 37;
  45. UWORD                  dummynoteLeft = 189;
  46. UWORD                  dummynoteTop = 53;
  47. UWORD                  dummynoteWidth = 208;
  48. UWORD                  dummynoteHeight = 146;
  49. UBYTE                 *editWdt = (UBYTE *)"Edit notes";
  50. UBYTE                 *aboutWdt = NULL;
  51. UBYTE                 *dummynoteWdt = NULL;
  52. struct TextAttr       *Font, Attr;
  53. UWORD                  FontX, FontY;
  54. UWORD                  OffX, OffY;
  55.  
  56. struct NewMenu editNewMenu[] = {
  57.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  58.     NM_ITEM, (STRPTR)"Open", (STRPTR)"O", 0, 0L, (APTR)editopen,
  59.     NM_ITEM, (STRPTR)"Save", (STRPTR)"S", 0, 0L, (APTR)editsave,
  60.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  61.     NM_ITEM, (STRPTR)"About", (STRPTR)"A", 0, 0L, (APTR)editabout,
  62.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)editquit,
  63.     NM_TITLE, (STRPTR)"Edit", NULL, 0, NULL, NULL,
  64.     NM_ITEM, (STRPTR)"Cut", (STRPTR)"X", 0, 0L, (APTR)editcut,
  65.     NM_ITEM, (STRPTR)"Copy", (STRPTR)"C", 0, 0L, (APTR)editcopy,
  66.     NM_ITEM, (STRPTR)"Paste", (STRPTR)"V", 0, 0L, (APTR)editpaste,
  67.     NM_ITEM, (STRPTR)"Delete", (STRPTR)"B", 0, 0L, (APTR)editdelete,
  68.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  69.     NM_ITEM, (STRPTR)"Show notes...", (STRPTR)"N", 0, 0L, (APTR)editshownotes,
  70.     NM_END, NULL, NULL, 0, 0L, NULL };
  71.  
  72. UWORD editGTypes[] = {
  73.     STRING_KIND,
  74.     STRING_KIND,
  75.     BUTTON_KIND,
  76.     BUTTON_KIND,
  77.     BUTTON_KIND,
  78.     BUTTON_KIND,
  79.     BUTTON_KIND,
  80.     CHECKBOX_KIND,
  81.     NUMBER_KIND,
  82.     BUTTON_KIND
  83. };
  84.  
  85. struct NewGadget editNGad[] = {
  86.     55, 4, 237, 13, (UBYTE *)"_Title", NULL, GD_title, PLACETEXT_LEFT, NULL, (APTR)titleClicked,
  87.     55, 21, 378, 13, (UBYTE *)"_Note", NULL, GD_note, PLACETEXT_LEFT, NULL, (APTR)noteClicked,
  88.     92, 38, 49, 13, (UBYTE *)"_Front", NULL, GD_tostart, PLACETEXT_IN, NULL, (APTR)tostartClicked,
  89.     145, 38, 49, 13, (UBYTE *)"_<", NULL, GD_prev, PLACETEXT_IN, NULL, (APTR)prevClicked,
  90.     198, 38, 49, 13, (UBYTE *)"_>", NULL, GD_next, PLACETEXT_IN, NULL, (APTR)nextClicked,
  91.     251, 38, 49, 13, (UBYTE *)"_Back", NULL, GD_toend, PLACETEXT_IN, NULL, (APTR)toendClicked,
  92.     304, 38, 49, 13, (UBYTE *)"_Add", NULL, GD_add, PLACETEXT_IN, NULL, (APTR)addClicked,
  93.     55, 39, 26, 11, (UBYTE *)"_Show", NULL, GD_show, PLACETEXT_LEFT, NULL, (APTR)showClicked,
  94.     381, 4, 52, 13, (UBYTE *)"No. notes", NULL, GD_notetotal, PLACETEXT_LEFT, NULL, NULL,
  95.     357, 38, 76, 13, (UBYTE *)"Notes...", NULL, GD_notes, PLACETEXT_IN, NULL, (APTR)notesClicked
  96. };
  97.  
  98. ULONG editGTags[] = {
  99.     (GTST_MaxChars), 29, (GT_Underscore), '_', (TAG_DONE),
  100.     (GTST_MaxChars), 255, (GT_Underscore), '_', (TAG_DONE),
  101.     (GT_Underscore), '_', (TAG_DONE),
  102.     (GT_Underscore), '_', (TAG_DONE),
  103.     (GT_Underscore), '_', (TAG_DONE),
  104.     (GT_Underscore), '_', (TAG_DONE),
  105.     (GT_Underscore), '_', (TAG_DONE),
  106.     (GT_Underscore), '_', (TAG_DONE),
  107.     (GTNM_Border), TRUE, (TAG_DONE),
  108.     (TAG_DONE)
  109. };
  110.  
  111. static UWORD ComputeX( UWORD value )
  112. {
  113.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  114. }
  115.  
  116. static UWORD ComputeY( UWORD value )
  117. {
  118.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  119. }
  120.  
  121. static void ComputeFont( UWORD width, UWORD height )
  122. {
  123.     Font = &Attr;
  124.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  125.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  126.     FontX = Scr->RastPort.Font->tf_XSize;
  127.  
  128.     OffX = Scr->WBorLeft;
  129.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  130.  
  131.     if ( width && height ) {
  132.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  133.             goto UseTopaz;
  134.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  135.             goto UseTopaz;
  136.     }
  137.     return;
  138.  
  139. UseTopaz:
  140.     Font->ta_Name = (STRPTR)"topaz.font";
  141.     FontX = FontY = Font->ta_YSize = 8;
  142. }
  143.  
  144. int SetupScreen( void )
  145. {
  146.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  147.         return( 1L );
  148.  
  149.     ComputeFont( 0, 0 );
  150.  
  151.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  152.         return( 2L );
  153.  
  154.     return( 0L );
  155. }
  156.  
  157. void CloseDownScreen( void )
  158. {
  159.     if ( VisualInfo ) {
  160.         FreeVisualInfo( VisualInfo );
  161.         VisualInfo = NULL;
  162.     }
  163.  
  164.     if ( Scr        ) {
  165.         UnlockPubScreen( NULL, Scr );
  166.         Scr = NULL;
  167.     }
  168. }
  169.  
  170. int HandleeditIDCMP( void )
  171. {
  172.     struct IntuiMessage    *m;
  173.     struct MenuItem        *n;
  174.     int            (*func)();
  175.     BOOL            running = TRUE;
  176.  
  177.     while( m = GT_GetIMsg( editWnd->UserPort )) {
  178.  
  179.         CopyMem(( char * )m, ( char * )&editMsg, (long)sizeof( struct IntuiMessage ));
  180.  
  181.         GT_ReplyIMsg( m );
  182.  
  183.         switch ( editMsg.Class ) {
  184.  
  185.             case    IDCMP_REFRESHWINDOW:
  186.                 GT_BeginRefresh( editWnd );
  187.                 GT_EndRefresh( editWnd, TRUE );
  188.                 break;
  189.  
  190.             case    IDCMP_CLOSEWINDOW:
  191.                 running = editCloseWindow();
  192.                 break;
  193.  
  194.             case    IDCMP_VANILLAKEY:
  195.                 running = editVanillaKey();
  196.                 break;
  197.  
  198.             case    IDCMP_CHANGEWINDOW:
  199.                 running = editChangeWindow();
  200.                 break;
  201.  
  202.             case    IDCMP_GADGETUP:
  203.             case    IDCMP_GADGETDOWN:
  204.                 func = ( void * )(( struct Gadget * )editMsg.IAddress )->UserData;
  205.                 running = func();
  206.                 break;
  207.  
  208.             case    IDCMP_MENUPICK:
  209.                 while( editMsg.Code != MENUNULL ) {
  210.                     n = ItemAddress( editMenus, editMsg.Code );
  211.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  212.                     running = func();
  213.                     editMsg.Code = n->NextSelect;
  214.                 }
  215.                 break;
  216.         }
  217.     }
  218.     return( running );
  219. }
  220.  
  221. int OpeneditWindow( void )
  222. {
  223.     struct NewGadget    ng;
  224.     struct Gadget    *g;
  225.     UWORD        lc, tc;
  226.     UWORD        wleft = editLeft, wtop = editTop, ww, wh;
  227.  
  228.     ComputeFont( editWidth, editHeight );
  229.  
  230.     ww = ComputeX( editWidth );
  231.     wh = ComputeY( editHeight );
  232.  
  233.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  234.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  235.  
  236.     if ( ! ( g = CreateContext( &editGList )))
  237.         return( 1L );
  238.  
  239.     for( lc = 0, tc = 0; lc < edit_CNT; lc++ ) {
  240.  
  241.         CopyMem((char * )&editNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  242.  
  243.         ng.ng_VisualInfo = VisualInfo;
  244.         ng.ng_TextAttr   = Font;
  245.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  246.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  247.         ng.ng_Width      = ComputeX( ng.ng_Width );
  248.         ng.ng_Height     = ComputeY( ng.ng_Height);
  249.  
  250.         editGadgets[ lc ] = g = CreateGadgetA((ULONG)editGTypes[ lc ], g, &ng, ( struct TagItem * )&editGTags[ tc ] );
  251.  
  252.         while( editGTags[ tc ] ) tc += 2;
  253.         tc++;
  254.  
  255.         if ( NOT g )
  256.             return( 2L );
  257.     }
  258.  
  259.     if ( ! ( editMenus = CreateMenus( editNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  260.         return( 3L );
  261.  
  262.     LayoutMenus( editMenus, VisualInfo, TAG_DONE );
  263.  
  264.     if ( ! ( editWnd = OpenWindowTags( NULL,
  265.                 WA_Left,    wleft,
  266.                 WA_Top,        wtop,
  267.                 WA_Width,    ww + OffX + Scr->WBorRight,
  268.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  269.                 WA_IDCMP,    STRINGIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|NUMBERIDCMP|IDCMP_GADGETDOWN|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_CHANGEWINDOW|IDCMP_REFRESHWINDOW,
  270.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_SIMPLE_REFRESH|WFLG_ACTIVATE,
  271.                 WA_Gadgets,    editGList,
  272.                 WA_Title,    editWdt,
  273.                 WA_ScreenTitle,    "StickIt V1.02 2nd August '93 ©1993 Andy Dean",
  274.                 WA_AutoAdjust,    TRUE,
  275.                 TAG_DONE )))
  276.     return( 4L );
  277.  
  278.     SetMenuStrip( editWnd, editMenus );
  279.     GT_RefreshWindow( editWnd, NULL );
  280.  
  281.     return( 0L );
  282. }
  283.  
  284. void CloseeditWindow( void )
  285. {
  286.     if ( editMenus      ) {
  287.         ClearMenuStrip( editWnd );
  288.         FreeMenus( editMenus );
  289.         editMenus = NULL;    }
  290.  
  291.     if ( editWnd        ) {
  292.         CloseWindow( editWnd );
  293.         editWnd = NULL;
  294.     }
  295.  
  296.     if ( editGList      ) {
  297.         FreeGadgets( editGList );
  298.         editGList = NULL;
  299.     }
  300. }
  301.  
  302. int HandleaboutIDCMP( void )
  303. {
  304.     struct IntuiMessage    *m;
  305.     int            (*func)();
  306.     BOOL            running = TRUE;
  307.  
  308.     while( m = GT_GetIMsg( aboutWnd->UserPort )) {
  309.  
  310.         CopyMem(( char * )m, ( char * )&aboutMsg, (long)sizeof( struct IntuiMessage ));
  311.  
  312.         GT_ReplyIMsg( m );
  313.  
  314.         switch ( aboutMsg.Class ) {
  315.  
  316.             case    IDCMP_REFRESHWINDOW:
  317.                 GT_BeginRefresh( aboutWnd );
  318.                 GT_EndRefresh( aboutWnd, TRUE );
  319.                 break;
  320.  
  321.             case    IDCMP_MOUSEBUTTONS:
  322.                 running = aboutMouseButtons();
  323.                 break;
  324.  
  325.                 break;
  326.         }
  327.     }
  328.     return( running );
  329. }
  330.  
  331. int OpenaboutWindow( void )
  332. {
  333.     struct NewGadget    ng;
  334.     struct Gadget    *g;
  335.     UWORD        lc, tc;
  336.     UWORD        wleft = aboutLeft, wtop = aboutTop, ww, wh;
  337.  
  338.     ComputeFont( aboutWidth, aboutHeight );
  339.  
  340.     ww = ComputeX( aboutWidth );
  341.     wh = ComputeY( aboutHeight );
  342.  
  343.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  344.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  345.  
  346.     if ( ! ( aboutWnd = OpenWindowTags( NULL,
  347.                 WA_Left,    wleft,
  348.                 WA_Top,        wtop,
  349.                 WA_Width,    ww + OffX + Scr->WBorRight,
  350.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  351.                 WA_IDCMP,    IDCMP_MOUSEBUTTONS|IDCMP_REFRESHWINDOW,
  352.                 WA_Flags,    WFLG_SMART_REFRESH,
  353.                 WA_Title,    aboutWdt,
  354.                 WA_ScreenTitle,    "StickIt V1.02 2nd August '93 ©1993 Andy Dean",
  355.                 TAG_DONE )))
  356.     return( 4L );
  357.  
  358.     GT_RefreshWindow( aboutWnd, NULL );
  359.  
  360.     return( 0L );
  361. }
  362.  
  363. void CloseaboutWindow( void )
  364. {
  365.     if ( aboutWnd        ) {
  366.         CloseWindow( aboutWnd );
  367.         aboutWnd = NULL;
  368.     }
  369. }
  370.  
  371. int HandledummynoteIDCMP( void )
  372. {
  373.     struct IntuiMessage    *m;
  374.     int            (*func)();
  375.     BOOL            running = TRUE;
  376.  
  377.     while( m = GT_GetIMsg( dummynoteWnd->UserPort )) {
  378.  
  379.         CopyMem(( char * )m, ( char * )&dummynoteMsg, (long)sizeof( struct IntuiMessage ));
  380.  
  381.         GT_ReplyIMsg( m );
  382.  
  383.         switch ( dummynoteMsg.Class ) {
  384.  
  385.             case    IDCMP_REFRESHWINDOW:
  386.                 GT_BeginRefresh( dummynoteWnd );
  387.                 GT_EndRefresh( dummynoteWnd, TRUE );
  388.                 break;
  389.  
  390.             case    IDCMP_CHANGEWINDOW:
  391.                 running = dummynoteChangeWindow();
  392.                 break;
  393.  
  394.             case    IDCMP_MOUSEBUTTONS:
  395.                 running = dummynoteMouseButtons();
  396.                 break;
  397.  
  398.                 break;
  399.         }
  400.     }
  401.     return( running );
  402. }
  403.  
  404. int OpendummynoteWindow( void )
  405. {
  406.     struct NewGadget    ng;
  407.     struct Gadget    *g;
  408.     UWORD        lc, tc;
  409.     UWORD        wleft = dummynoteLeft, wtop = dummynoteTop, ww, wh;
  410.  
  411.     ComputeFont( dummynoteWidth, dummynoteHeight );
  412.  
  413.     ww = ComputeX( dummynoteWidth );
  414.     wh = ComputeY( dummynoteHeight );
  415.  
  416.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  417.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  418.  
  419.     if ( ! ( dummynoteWnd = OpenWindowTags( NULL,
  420.                 WA_Left,    wleft,
  421.                 WA_Top,        wtop,
  422.                 WA_Width,    ww + OffX + Scr->WBorRight,
  423.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  424.                 WA_IDCMP,    IDCMP_MOUSEBUTTONS|IDCMP_CHANGEWINDOW|IDCMP_REFRESHWINDOW,
  425.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_SIMPLE_REFRESH|WFLG_RMBTRAP,
  426.                 WA_Title,    dummynoteWdt,
  427.                 WA_ScreenTitle,    "StickIt V0.00 ©1993 Andy Dean",
  428.                 TAG_DONE )))
  429.     return( 4L );
  430.  
  431.     GT_RefreshWindow( dummynoteWnd, NULL );
  432.  
  433.     return( 0L );
  434. }
  435.  
  436. void ClosedummynoteWindow( void )
  437. {
  438.     if ( dummynoteWnd        ) {
  439.         CloseWindow( dummynoteWnd );
  440.         dummynoteWnd = NULL;
  441.     }
  442. }
  443.  
  444.