home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / gui / precog2_1.lha / Precognition2_1 / src / src.lha / Library / HScroller.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-16  |  7.3 KB  |  222 lines

  1. /* ==========================================================================
  2. **
  3. **                         HScroller.c
  4. **
  5. ** ©1991 WILLISoft
  6. **
  7. ** ==========================================================================
  8. */
  9.  
  10. #include "parms.h"  /* Added for proper prototyping -- EDB */
  11.  
  12. #include <string.h>
  13. #include "HScroller.h"
  14. #include "minmax.h"
  15. #include "HScrollerClass.h"
  16. #include "EmbossedGadgetClass.h"
  17. #ifndef __GNUC__
  18. #include <clib/exec_protos.h>
  19. #endif
  20. #ifdef __GNUC__
  21. #include <proto/exec.h>
  22. #endif
  23. #ifdef __SASC
  24. #include <proto/exec.h>
  25. #endif
  26. #include "amigamem.h"
  27. /* Additions for prototypes -- EDB */
  28. #include "Positioner.h"
  29. #include "PositionerClass.h"
  30.  
  31.  
  32. tPoint HScroller_SetLocation(  HScroller *self,
  33.                                PIXELS     LeftEdge,
  34.                                PIXELS     TopEdge )
  35. {
  36.  
  37.    Point Left_size, Slider_size;
  38.    Point Left_pos,  Right_pos;
  39.  
  40.  
  41.    Left_size   = Size( (GraphicObject *)&self->leftarrow );
  42.    Slider_size = Size( (GraphicObject *)&self->hslider );
  43.  
  44.    SetLocation( (GraphicObject *)&self->hslider, LeftEdge, TopEdge );
  45.  
  46.    Left_pos.x = LeftEdge + Slider_size.x;
  47.    Left_pos.y = TopEdge;
  48.    SetLocation( (GraphicObject *)&self->leftarrow, Left_pos.x, Left_pos.y );
  49.  
  50.    Right_pos.x = Left_pos.x + Left_size.x;
  51.    Right_pos.y = TopEdge;
  52.    SetLocation( (GraphicObject *)&self->rightarrow, Right_pos.x, Right_pos.y );
  53.  
  54.    self->posr.Location.x = LeftEdge;
  55.    self->posr.Location.y = TopEdge;
  56.  
  57.    return Location( (GraphicObject *)self );
  58. }
  59.  
  60.  
  61. tPoint HScroller_private_AskSize(  HScroller *self,
  62.                                    PIXELS     Width,
  63.                                    PIXELS     Height,
  64.                                    Point     *Left_size,
  65.                                    Point     *Right_size,
  66.                                    Point     *Slider_size )
  67. {
  68.    Point size;
  69.  
  70.    *Left_size  = AskSize( (GraphicObject *)&self->leftarrow,  0, 0 );
  71.    *Right_size = AskSize( (GraphicObject *)&self->rightarrow, 0, 0 );
  72.  
  73.    Slider_size->x = Width - (Left_size->x + Right_size->x);
  74.    Slider_size->y = MAX( Left_size->y, Right_size->y );
  75.  
  76.    *Slider_size = AskSize( (GraphicObject *)&self->hslider, Slider_size->x, Slider_size->y );
  77.  
  78.    size.x = Slider_size->x + Left_size->x + Right_size->x;
  79.    size.y = Slider_size->y;
  80.  
  81.    return size;
  82. }
  83.  
  84.  
  85. tPoint HScroller_AskSize(  HScroller *self,
  86.                            PIXELS     Width,
  87.                            PIXELS     Height )
  88. {
  89.    Point Left_size, Right_size, Slider_size, size;
  90.  
  91.    size = HScroller_private_AskSize( self, Width, Height,
  92.             &Left_size, &Right_size, &Slider_size );
  93.  
  94.    return size;
  95. }
  96.  
  97.  
  98. tPoint HScroller_SetSize(  HScroller *self,
  99.                            PIXELS     Width,
  100.                            PIXELS     Height )
  101. {
  102.  
  103.    tPoint Left_size, Right_size, Slider_size, size;
  104.    tPoint pos;
  105.  
  106.    size = HScroller_private_AskSize( self, Width, Height,
  107.             &Left_size, &Right_size, &Slider_size );
  108.  
  109.    SetSize( (GraphicObject *)&self->leftarrow,   Left_size.x,   Left_size.y );
  110.    SetSize( (GraphicObject *)&self->rightarrow, Right_size.x, Right_size.y );
  111.    SetSize( (GraphicObject *)&self->hslider,   Slider_size.x, Slider_size.y );
  112.  
  113.    /* Now must fix the positions of leftarrow, down arrow. */
  114.  
  115.    pos = Location( (GraphicObject *)self );
  116.    SetLocation( (GraphicObject *)self, pos.x, pos.y );
  117.    self->posr.Size = size;
  118.  
  119.    return size;
  120. }
  121.  
  122.  
  123.  
  124.  
  125. BOOL HScroller_elaborated = FALSE;
  126.  
  127. struct PositionerClass HScroller_Class;
  128.  
  129. #include "VScrollerClass.h"
  130.  
  131. void HScrollerClass_Init( struct PositionerClass *class )
  132. {
  133.    PositionerClass_Init( class );
  134.    class->isa                 = PositionerClass();
  135.    class->ClassName           = "HScroller";
  136.    class->CleanUp             = (void(*)(PObject *))VScroller_CleanUp;
  137.    class->SetLocation         = (Point(*)(GraphicObject *, PIXELS, PIXELS))HScroller_SetLocation;
  138.    class->AskSize             = (Point(*)(GraphicObject *, PIXELS, PIXELS))HScroller_AskSize;
  139.    class->SetSize             = (Point(*)(GraphicObject *, PIXELS, PIXELS))HScroller_SetSize;
  140.    class->SizeFlags           = GraphicObject_SizeFlagsX;
  141.    class->Render              = (void(*)(GraphicObject *, RastPort *))VScroller_Render;
  142.    class->SetInteractorWindow  = (void(*)(Interactor *, struct pcgWindow *))VScroller_SetInteractorWindow;
  143.    class->FirstGadget         = (Gadget*(*)(Interactor *))VScroller_FirstGadget;
  144.    class->nGadgets            = (USHORT(*)(Interactor *))VScroller_nGadgets;
  145.    class->IDCMPFlags          = (ULONG(*)(Interactor *))VScroller_IDCMPFlags;
  146.    class->ClaimEvent          = (USHORT(*)(Interactor *, IntuiMessage *))VScroller_ClaimEvent;
  147.    class->Respond             = (USHORT(*)(Interactor *, IntuiMessage *))VScroller_Respond;
  148.    class->Refresh             = (void(*)(Interactor *))VScroller_Refresh;
  149.    class->EnableIactor        = (BOOL(*)(Interactor *, BOOL))VScroller_EnableIactor;
  150.    class->isEnabled           = (BOOL(*)(Interactor *))EmbossedGadget_isEnabled;
  151.    class->Activate            = NULL;
  152.    class->isActive            = NULL;
  153.    class->SetKnobSize         = (USHORT(*)(Positioner *, USHORT))VScroller_SetKnobSize;
  154.    class->SetValue            = (LONG(*)(Valuator *, LONG))VScroller_SetValue;
  155.    class->KnobSize            = (USHORT(*)(Positioner *))VScroller_KnobSize;
  156.    class->Value               = (LONG(*)(Valuator *))VScroller_Value;
  157.    class->Title               = (char*(*)(GraphicObject *))VScroller_Title;
  158.    class->DefaultFont         = (TextAttr*(*)(GraphicObject *))VScroller_DefaultFont;
  159.    class->SetDefaultFont      = (BOOL(*)(GraphicObject *, TextAttr *))VScroller_SetDefaultFont;
  160.    class->TextAlignment       = (AlignInfo*(*)(GraphicObject *))VScroller_TextAlignment;
  161.    class->SetTitle            = (BOOL(*)(GraphicObject *, char * ))VScroller_SetTitle;
  162.    class->SetTextAlignment    = (BOOL(*)(GraphicObject *, UBYTE, BYTE, BYTE))VScroller_SetTextAlignment;
  163.  
  164. }
  165.  
  166.  
  167. struct PositionerClass *HScrollerClass( void )
  168. {
  169.    if( ! HScroller_elaborated )
  170.    {
  171.       HScrollerClass_Init( &HScroller_Class );
  172.       HScroller_elaborated = TRUE;
  173.    }
  174.  
  175.    return &HScroller_Class;
  176. }
  177.  
  178.  
  179.  
  180.  
  181. void HScroller_Init( HScroller  *self,
  182.                      PIXELS      LeftEdge,
  183.                      PIXELS      TopEdge,
  184.                      PIXELS      Width,
  185.                      pcg_3DPens  Pens,
  186.                      char       *label )
  187. {
  188.    Gadget *g;
  189.  
  190.    Positioner_Init( (Positioner *)self );
  191.  
  192.    self->posr.isa           = HScrollerClass();
  193.    self->posr.Location.x    = LeftEdge;
  194.    self->posr.Location.y    = TopEdge;
  195.    self->Pens               = Pens;
  196.  
  197.    /*
  198.    ** Initialize objects with dumb values, just so that they are now
  199.    ** proper objects.
  200.    */
  201.  
  202.    ArrowGadget_Init( &self->leftarrow,   LeftEdge, TopEdge,
  203.       LeftArrow, Pens );
  204.    ArrowGadget_Init( &self->rightarrow, LeftEdge, TopEdge,
  205.       RightArrow, Pens );
  206.    HSlider_Init( &self->hslider,       LeftEdge, TopEdge, 0, 0, Pens, NULL );
  207.    self->hslider.eg.Next = &self->leftarrow;
  208.    self->leftarrow.Next    = &self->rightarrow;
  209.  
  210.    SetSize( (GraphicObject *)self, Width, 0 );
  211.  
  212.    /* Chain the gadgets together. */
  213.    g = FirstGadget( (Interactor *)self );
  214.    ChainGadgets( g,  FirstGadget( (Interactor *)&self->leftarrow ) );
  215.    ChainGadgets( g,  FirstGadget( (Interactor *)&self->rightarrow ) );
  216.  
  217.    SetTitle( (GraphicObject *)self, label );
  218.    SetTextAlignment( (GraphicObject *)self, tx_OUTSIDE | tx_LEFT | tx_YCENTER,
  219.       STD_XPAD, STD_YPAD );
  220.  
  221. }
  222.