home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / printer / graphpaper / src / src.lha / gads.c < prev    next >
C/C++ Source or Header  |  1993-04-06  |  1KB  |  61 lines

  1. #include "graph.h"
  2.  
  3. #define KEEPORDER 1
  4.  
  5. /* Remove gads from, or add to, the window's list in hopes of speeding */
  6. /* things up by not refreshing the world just to refresh one.          */
  7.  
  8. static struct Gadget *head = NULL;
  9.  
  10.  
  11. void Snip(struct Gadget *gad)
  12. {
  13.     /* Use ID field to rember old position, in case we want it later. */
  14.     /* The UserData field is already being used for other things.     */
  15.  
  16.     gad->GadgetID = RemoveGadget(wG, gad);
  17.  
  18.     /* remember it */
  19.     gad->NextGadget = head;
  20.     head = gad;
  21. }
  22.  
  23. /* cut out all but 1 gadget */
  24. void SnipAllBut(struct Gadget *keeper)
  25. {
  26.     struct Gadget *walker;
  27.  
  28.     walker = wG->FirstGadget;
  29.     while (walker) {
  30.         if (walker == keeper) {
  31.             walker = walker->NextGadget;
  32.         } else {
  33.             Snip(walker);
  34.             walker = wG->FirstGadget; /* resync */
  35.         }
  36.     }
  37. }
  38.  
  39. void RestoreGads(void)
  40. {
  41.     struct Gadget *gad;
  42.     int position = 0;
  43.  
  44.     while (head) {
  45.         gad  = head;
  46.         head = gad->NextGadget;
  47.         gad->NextGadget = NULL;
  48. #if KEEPORDER
  49.         position = gad->GadgetID;
  50. #endif
  51.         AddGadget(wG, gad, position);
  52.     }
  53. }
  54.  
  55. void RefreshOneGad(struct Gadget *gad)
  56. {
  57.     SnipAllBut(gad);
  58.     RefreshGadgets(gad, wG, NULL);
  59.     RestoreGads();
  60. }
  61.