home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / sun / volume1 / contool2.2 / part02 / entry.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-26  |  9.4 KB  |  274 lines

  1. /************************************************************************/
  2. /*    Copyright 1988, 1989 by Chuck Musciano and Harris Corporation    */
  3. /*                                    */
  4. /*    Permission to use, copy, modify, and distribute this software    */
  5. /*    and its documentation for any purpose and without fee is    */
  6. /*    hereby granted, provided that the above copyright notice    */
  7. /*    appear in all copies and that both that copyright notice and    */
  8. /*    this permission notice appear in supporting documentation, and    */
  9. /*    that the name of Chuck Musciano and Harris Corporation not be    */
  10. /*    used in advertising or publicity pertaining to distribution    */
  11. /*    of the software without specific, written prior permission.    */
  12. /*    Chuck Musciano and Harris Corporation make no representations    */
  13. /*    about the suitability of this software for any purpose.  It is    */
  14. /*    provided "as is" without express or implied warranty.  This     */
  15. /*    software may not be sold without the prior explicit permission    */
  16. /*    of Harris Corporation.                        */
  17. /************************************************************************/
  18.  
  19. #include    <stdio.h>
  20.  
  21. #include    <suntool/sunview.h>
  22. #include    <suntool/panel.h>
  23.  
  24. #include    "contool.h"
  25. #include    "entry.h"
  26.  
  27. PUBLIC    Pixrect    *better_button_image();
  28.  
  29. EXPORT    e_rec    entry[MAX_ENTRIES];
  30. EXPORT    int    entries = 0;
  31.  
  32. /************************************************************************/
  33. /*    Routines handling dialog element interaction            */
  34. /************************************************************************/
  35.  
  36. /************************************************************************/
  37. PRIVATE    save_toggle_proc(item, value, event)
  38.  
  39. Panel_item    item;
  40. int        value;
  41. Event        *event;
  42.  
  43. {    e_ptr    e;
  44.  
  45.     e = (e_ptr) panel_get(item, PANEL_CLIENT_DATA);
  46.     panel_set(e->beep,  PANEL_SHOW_ITEM, value, 0);
  47.     panel_set(e->open,  PANEL_SHOW_ITEM, value, 0);
  48.     panel_set(e->flash, PANEL_SHOW_ITEM, value, 0);
  49.     panel_set(e->stamp, PANEL_SHOW_ITEM, value, 0);
  50. }
  51.  
  52. /************************************************************************/
  53. PRIVATE    lines_toggle_proc(item, value, event)
  54.  
  55. Panel_item    item;
  56. int        value;
  57. Event        *event;
  58.  
  59. {    e_ptr    e;
  60.  
  61.     e = (e_ptr) panel_get(item, PANEL_CLIENT_DATA);
  62.     if (value) { /* go to multi-line filter */
  63.        panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH, 0);
  64.        panel_set(e->end, PANEL_SHOW_ITEM, TRUE, 0);
  65.        panel_set(panel_get(item, PANEL_PARENT_PANEL), PANEL_CARET_ITEM, e->end, 0);
  66.        }
  67.     else {
  68.        panel_set(e->end, PANEL_SHOW_ITEM, FALSE, 0);
  69.        panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, LONG_TEXT_LENGTH, 0);
  70.        panel_set(panel_get(item, PANEL_PARENT_PANEL), PANEL_CARET_ITEM, e->start, 0);
  71.        }
  72. }
  73.  
  74. /************************************************************************/
  75. PRIVATE    handle_toggle_proc(item, event)
  76.  
  77. Panel_item    item;
  78. Event        *event;
  79.  
  80. {    e_ptr    e;
  81.     int    i;
  82.  
  83.     if (event_is_down(event))
  84.        if (event_id(event) == MS_LEFT)
  85.           if (panel_get(item, PANEL_VALUE) == 0) {
  86.              for (i = 0; i < entries; i++)
  87.                 panel_set(entry[i].handle, PANEL_VALUE, 0, 0);
  88.              panel_set(item, PANEL_VALUE, 1 - (int) panel_get(item, PANEL_VALUE), 0);
  89.              }
  90.           else {
  91.              for (i = 0; i < entries; i++)
  92.                 if (entry[i].handle != item && panel_get(entry[i].handle, PANEL_VALUE))
  93.                    break;
  94.              if (i == entries)
  95.                 panel_set(item, PANEL_VALUE, 0, 0);
  96.              else {
  97.                 for (i = 0; i < entries; i++)
  98.                    panel_set(entry[i].handle, PANEL_VALUE, 0, 0);
  99.                 panel_set(item, PANEL_VALUE, 1, 0);
  100.                 }
  101.              }
  102.        else if (event_id(event) == MS_MIDDLE)
  103.           panel_set(item, PANEL_VALUE, 1 - (int) panel_get(item, PANEL_VALUE), 0);
  104. }
  105.  
  106. /************************************************************************/
  107. EXPORT    create_entry(panel, base, row)
  108.  
  109. register    Panel    panel;
  110.         e_ptr    base;
  111. register    int    row;
  112.  
  113. {    register    e_ptr    e;
  114.  
  115.     e = base + row;
  116.     if (e->created)
  117.        return;
  118.     row = row * (ROW_HEIGHT + ROW_MARGIN) + ROW_MARGIN;
  119.     e->created = TRUE;
  120.     e->handle = panel_create_item(panel, PANEL_CHOICE,
  121.                            PANEL_ITEM_X, 4,
  122.                            PANEL_ITEM_Y, row,
  123.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  124.                            PANEL_CHOICE_IMAGES, &nohandle_pix, &handle_pix, 0,
  125.                            PANEL_EVENT_PROC, handle_toggle_proc,
  126.                            PANEL_CLIENT_DATA, e,
  127.                             0);
  128.     e->save   = panel_create_item(panel, PANEL_CHOICE,
  129.                            PANEL_ITEM_X, 16,
  130.                            PANEL_ITEM_Y, row,
  131.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  132.                            PANEL_CHOICE_IMAGES, &nosave_pix, &save_pix, 0,
  133.                            PANEL_NOTIFY_PROC, save_toggle_proc,
  134.                            PANEL_CLIENT_DATA, e,
  135.                             0);
  136.     e->stamp  = panel_create_item(panel, PANEL_CHOICE,
  137.                            PANEL_ITEM_X, 36,
  138.                            PANEL_ITEM_Y, row,
  139.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  140.                            PANEL_CHOICE_IMAGES, &nostamp_pix, &stamp_pix, 0,
  141.                            PANEL_CLIENT_DATA, e,
  142.                             0);
  143.     e->open   = panel_create_item(panel, PANEL_CHOICE,
  144.                            PANEL_ITEM_X, 56,
  145.                            PANEL_ITEM_Y, row,
  146.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  147.                            PANEL_CHOICE_IMAGES, &close_pix, &open_pix, 0,
  148.                            PANEL_CLIENT_DATA, e,
  149.                             0);
  150.     e->flash  = panel_create_item(panel, PANEL_CHOICE,
  151.                       PANEL_ITEM_X, 76,
  152.                            PANEL_ITEM_Y, row,
  153.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  154.                            PANEL_CHOICE_IMAGES, &noflash_pix, &flash_pix, 0,
  155.                            PANEL_CLIENT_DATA, e,
  156.                             0);
  157.     e->beep   = panel_create_item(panel, PANEL_CHOICE,
  158.                            PANEL_ITEM_X, 96,
  159.                            PANEL_ITEM_Y, row,
  160.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  161.                            PANEL_CHOICE_IMAGES, &beep_0_pix, &beep_1_pix, &beep_2_pix, &beep_3_pix, &beep_4_pix, 0,
  162.                            PANEL_CLIENT_DATA, e,
  163.                             0);
  164.     e->lines  = panel_create_item(panel, PANEL_CHOICE,
  165.                            PANEL_ITEM_X, 170,
  166.                            PANEL_ITEM_Y, row,
  167.                            PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
  168.                            PANEL_CHOICE_IMAGES, &single_pix, &range_pix, 0,
  169.                            PANEL_NOTIFY_PROC, lines_toggle_proc,
  170.                            PANEL_CLIENT_DATA, e,
  171.                             0);
  172.     e->start  = panel_create_item(panel, PANEL_TEXT,
  173.                            PANEL_ITEM_X, 190,
  174.                            PANEL_ITEM_Y, row,
  175.                            PANEL_VALUE_STORED_LENGTH, 256,
  176.                            PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH,
  177.                            PANEL_VALUE_FONT, regular,
  178.                            PANEL_CLIENT_DATA, e,
  179.                             0);
  180.     e->end    = panel_create_item(panel, PANEL_TEXT,
  181.                            PANEL_ITEM_X, 398,
  182.                            PANEL_ITEM_Y, row,
  183.                            PANEL_VALUE_STORED_LENGTH, 256,
  184.                            PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH,
  185.                            PANEL_VALUE_FONT, regular,
  186.                            PANEL_LABEL_STRING, "to",
  187.                            PANEL_LABEL_FONT, bold,
  188.                            PANEL_CLIENT_DATA, e,
  189.                             0);
  190. }
  191.  
  192. /************************************************************************/
  193. EXPORT    update_entry(panel, base, row, f)
  194.  
  195. Panel    panel;
  196. e_ptr    base;
  197. int    row;
  198. register    f_ptr    f;
  199.  
  200. {    f_rec    temp;
  201.     register    e_ptr    e;
  202.  
  203.     create_entry(panel, base, row);
  204.     if (f == NULL) {
  205.        bzero(&temp, sizeof(temp));
  206.        temp.start = "";
  207.        f = &temp;
  208.        }
  209.     e = base + row;
  210.     panel_set(e->handle, PANEL_VALUE, 0,        PANEL_SHOW_ITEM, TRUE,    0);
  211.     panel_set(e->save,   PANEL_VALUE, f->save,  PANEL_SHOW_ITEM, TRUE,    0);
  212.     panel_set(e->beep,   PANEL_VALUE, f->beep,  PANEL_SHOW_ITEM, f->save, 0);
  213.     panel_set(e->open,   PANEL_VALUE, f->open,  PANEL_SHOW_ITEM, f->save, 0);
  214.     panel_set(e->flash,  PANEL_VALUE, f->flash, PANEL_SHOW_ITEM, f->save, 0);
  215.     panel_set(e->stamp,  PANEL_VALUE, f->stamp, PANEL_SHOW_ITEM, f->save, 0);
  216.     panel_set(e->start,  PANEL_VALUE, f->start, PANEL_SHOW_ITEM, TRUE,    0);
  217.     if (f->end) {
  218.        panel_set(e->lines, PANEL_VALUE, 1, PANEL_SHOW_ITEM, TRUE, 0);
  219.        panel_set(e->end, PANEL_VALUE, f->end, PANEL_SHOW_ITEM, TRUE, 0);
  220.        panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH, 0);
  221.        }
  222.     else {
  223.        panel_set(e->lines, PANEL_VALUE, 0, PANEL_SHOW_ITEM, TRUE, 0);
  224.        panel_set(e->end, PANEL_SHOW_ITEM, FALSE, 0);
  225.        panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, LONG_TEXT_LENGTH, 0);
  226.        }
  227. }
  228.  
  229. /************************************************************************/
  230. EXPORT    move_entry(base, old_row, new_row)
  231.  
  232. e_ptr    base;
  233. int    old_row;
  234. int    new_row;
  235.  
  236. {    register    e_ptr    new_entry, old_entry;
  237.     register    int    row;
  238.  
  239.     new_entry = base + new_row;
  240.     old_entry = base + old_row;
  241.     row = new_row * (ROW_HEIGHT + ROW_MARGIN) + ROW_MARGIN;
  242.     panel_set(old_entry->handle, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  243.     panel_set(old_entry->beep,   PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  244.     panel_set(old_entry->open,   PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  245.     panel_set(old_entry->flash,  PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  246.     panel_set(old_entry->save,   PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  247.     panel_set(old_entry->stamp,  PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  248.     panel_set(old_entry->lines,  PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  249.     panel_set(old_entry->end,    PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  250.     panel_set(old_entry->start,  PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
  251.     *new_entry = *old_entry;
  252.     old_entry->created = FALSE;
  253. }
  254.  
  255. /************************************************************************/
  256. EXPORT    delete_entry(e)
  257.  
  258. register    e_ptr    e;
  259.  
  260. {
  261.     if (e->created) {
  262.        eliminate(e->handle);
  263.        eliminate(e->beep);
  264.        eliminate(e->open);
  265.        eliminate(e->flash);
  266.        eliminate(e->save);
  267.        eliminate(e->stamp);
  268.        eliminate(e->lines);
  269.        eliminate(e->start);
  270.        eliminate(e->end);
  271.        e->created = FALSE;
  272.        }
  273. }
  274.