home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / Triton / Source / classes / displayobject.c < prev    next >
C/C++ Source or Header  |  1998-05-23  |  6KB  |  210 lines

  1. /*
  2.  *  OpenTriton -- A free release of the triton.library source code
  3.  *  Copyright (C) 1993-1998  Stefan Zeiger
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  */
  20.  
  21.  
  22. /****** triton.library/class_DisplayObject ******
  23. *
  24. *   NAME    
  25. *    class_DisplayObject -- An abstract display object
  26. *
  27. *   SUPERCLASS
  28. *    class_Object
  29. *
  30. *   SYNOPSIS
  31. *    (TROB_DisplayObject)
  32. *
  33. *   ATTRIBUTES
  34. *    <Default>              : <unused>
  35. *    TRAT_ID                : ULONG objectid
  36. *                             [create, get]
  37. *    TRAT_Disabled          : BOOL disabled
  38. *                             [create, set, get]
  39. *    TRDO_QuickHelpString   : STRPTR string
  40. *                             [create, set, get]
  41. *
  42. *   OBJECT MESSAGES
  43. *    TROM_INSTALL           : Install an object at its place in a rastport
  44. *    TROM_REMOVE            : Remove an installed object
  45. *    TROM_SETATTRIBUTE      : Modify an attribute
  46. *    TROM_GETATTRIBUTE      : Query an attribute
  47. *    TROM_HIT               : Find an object from a pair of coordinates
  48. *    (TROM_REFRESH)         : Refresh/redraw an object's on-screen
  49. *                             representation
  50. *    (TROM_EVENT)           : An IDCMP event has arrived
  51. *    (TROM_DISABLED)        : Disable/ghost an object
  52. *    (TROM_ENABLED)         : Enable an object again
  53. *    (TROM_KEYDOWN)         : A key has been pressed down
  54. *    (TROM_REPEATEDKEYDOWN) : A key is still pressed down
  55. *    (TROM_KEYUP)           : A key has been released
  56. *    (TROM_CANCELLED)       : A key press has been cancelled
  57. *    (TROM_CREATECLASS)     : Create class-specific data
  58. *    (TROM_DISPOSECLASS)    : Dispose of class-specific data
  59. *
  60. ******/
  61.  
  62.  
  63. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  64. //////////////////////////////////////////////////////////////////////////////////////// Include our stuff //
  65. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  66.  
  67. #define TR_THIS_IS_TRITON
  68.  
  69. #include <libraries/triton.h>
  70. #include <clib/triton_protos.h>
  71. #include "/internal.h"
  72. #include "displayobject.def"
  73.  
  74.  
  75. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  76. ////////////////////////////////////////////////////////////////////////////////////////////// Object data //
  77. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  78.  
  79. #define OBJECT (&(object->O))
  80. #define DISPLAYOBJECT object
  81.  
  82.  
  83. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  84. ////////////////////////////////////////////////////////////////////////////////////////////////// Methods //
  85. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86.  
  87. TR_METHOD(DisplayObject,NEW,NewData)
  88. {
  89.   struct TROM_SetAttributeData sadata;
  90.  
  91.   TRDP_Object_NEW(object,messageid,data,metaclass->trc_SuperClass);
  92.  
  93.   DISPLAYOBJECT->BackfillType=data->backfilltype;
  94.  
  95.   if(data->parseargs)
  96.   {
  97.     sadata.attribute=0;
  98.     sadata.value=data->itemdata;
  99.     TR_DoMethod(OBJECT,TROM_SETATTRIBUTE,(APTR)(&sadata));
  100.     for(;;)
  101.     {
  102.       switch(data->firstitem->ti_Tag)
  103.       {
  104.         case TRAT_ID:
  105.       DISPLAYOBJECT->ID=data->firstitem->ti_Data;
  106.       break;
  107.     case TRAT_Disabled:
  108.       if(data->firstitem->ti_Data) DISPLAYOBJECT->Flags|=TROB_DISPLAYOBJECT_DISABLED;
  109.       else DISPLAYOBJECT->Flags&=~TROB_DISPLAYOBJECT_DISABLED;
  110.       break;
  111.     default:
  112.       if(data->firstitem->ti_Tag==TRGR_End) goto nomoretags;
  113.       if(TR_GetTagType(data->firstitem->ti_Tag)!=TRTG_OAT) goto nomoretags;
  114.       sadata.attribute=data->firstitem->ti_Tag;
  115.       sadata.value=data->firstitem->ti_Data;
  116.       TR_DoMethod(OBJECT,TROM_SETATTRIBUTE,(APTR)(&sadata));
  117.       break;
  118.       }
  119.       data->firstitem++;
  120.     }
  121.   nomoretags:
  122.     return (ULONG)TR_AddObjectToIDList(OBJECT->Project, object);
  123.   }
  124.  
  125.   return (ULONG)object;
  126. }
  127.  
  128.  
  129. TR_METHOD(DisplayObject,INSTALL,InstallData)
  130. {
  131.   DISPLAYOBJECT->Left=data->left;
  132.   DISPLAYOBJECT->Top=data->top;
  133.   DISPLAYOBJECT->Width=data->width;
  134.   DISPLAYOBJECT->Height=data->height;
  135.   DISPLAYOBJECT->Installed=TRUE;
  136.   return 1;
  137. }
  138.  
  139.  
  140. TR_SIMPLEMETHOD(DisplayObject,REMOVE)
  141. {
  142.   DISPLAYOBJECT->Installed=FALSE;
  143.   return 1;
  144. }
  145.  
  146.  
  147. TR_METHOD(DisplayObject,SETATTRIBUTE,SetAttributeData)
  148. {
  149.   ULONG textLength;
  150.  
  151.   switch(data->attribute)
  152.     {
  153.     case TRAT_Disabled:
  154.       if(TR_DO_DISABLED!=(data->value?TRUE:FALSE))
  155.     {
  156.       if(data->value) DISPLAYOBJECT->Flags|=TROB_DISPLAYOBJECT_DISABLED;
  157.       else DISPLAYOBJECT->Flags&=~TROB_DISPLAYOBJECT_DISABLED;
  158.       if(DISPLAYOBJECT->Installed)
  159.         TR_DoMethod((struct TROD_Object *)object,(data->value)?TROM_DISABLED:TROM_ENABLED,NULL);
  160.     }
  161.       return 1;
  162.  
  163.     case TRDO_QuickHelpString:
  164.       if(DISPLAYOBJECT->QuickHelpString)
  165.     TR_FreePooled(OBJECT->Project->trp_MemPool,
  166.               (APTR)(DISPLAYOBJECT->QuickHelpString),
  167.               TR_FirstOccurance(0,DISPLAYOBJECT->QuickHelpString)+1);
  168.       textLength=TR_FirstOccurance(0,(STRPTR)(data->value))+1;
  169.       if(!(DISPLAYOBJECT->QuickHelpString=
  170.        (STRPTR)TR_AllocPooled(OBJECT->Project->trp_MemPool,textLength)))
  171.     return 0;
  172.       CopyMem((APTR)(data->value),(APTR)(DISPLAYOBJECT->QuickHelpString),textLength);
  173.  
  174.     case 0:
  175.       return 1;
  176.  
  177.     default:
  178.       return 0;
  179.     }
  180. }
  181.  
  182.  
  183. TR_SIMPLEMETHOD(DisplayObject,GETATTRIBUTE)
  184. {
  185.   switch((ULONG)data)
  186.     {
  187.     case TRAT_Disabled:
  188.       return (ULONG)(TR_DO_DISABLED);
  189.  
  190.     case TRAT_ID:
  191.       return (ULONG)(DISPLAYOBJECT->ID);
  192.  
  193.     case TRDO_QuickHelpString:
  194.       return (ULONG)(DISPLAYOBJECT->QuickHelpString);
  195.     }
  196.   return 0;
  197. }
  198.  
  199.  
  200. TR_METHOD(DisplayObject,HIT,HitData)
  201. {
  202.   if(object->ID)
  203.     if((data->x>=object->Left) &&
  204.        (data->x<object->Left+object->Width) &&
  205.        (data->y>=object->Top) &&
  206.        (data->y<object->Top+object->Height))
  207.       data->object=object;
  208.   return 1;
  209. }
  210.