home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************/
- /* Copyright 1988, 1989 by Chuck Musciano and Harris Corporation */
- /* */
- /* Permission to use, copy, modify, and distribute this software */
- /* and its documentation for any purpose and without fee is */
- /* hereby granted, provided that the above copyright notice */
- /* appear in all copies and that both that copyright notice and */
- /* this permission notice appear in supporting documentation, and */
- /* that the name of Chuck Musciano and Harris Corporation not be */
- /* used in advertising or publicity pertaining to distribution */
- /* of the software without specific, written prior permission. */
- /* Chuck Musciano and Harris Corporation make no representations */
- /* about the suitability of this software for any purpose. It is */
- /* provided "as is" without express or implied warranty. This */
- /* software may not be sold without the prior explicit permission */
- /* of Harris Corporation. */
- /************************************************************************/
-
- #include <stdio.h>
-
- #include <suntool/sunview.h>
- #include <suntool/panel.h>
-
- #include "contool.h"
- #include "entry.h"
-
- PUBLIC Pixrect *better_button_image();
-
- EXPORT e_rec entry[MAX_ENTRIES];
- EXPORT int entries = 0;
-
- /************************************************************************/
- /* Routines handling dialog element interaction */
- /************************************************************************/
-
- /************************************************************************/
- PRIVATE save_toggle_proc(item, value, event)
-
- Panel_item item;
- int value;
- Event *event;
-
- { e_ptr e;
-
- e = (e_ptr) panel_get(item, PANEL_CLIENT_DATA);
- panel_set(e->beep, PANEL_SHOW_ITEM, value, 0);
- panel_set(e->open, PANEL_SHOW_ITEM, value, 0);
- panel_set(e->flash, PANEL_SHOW_ITEM, value, 0);
- panel_set(e->stamp, PANEL_SHOW_ITEM, value, 0);
- }
-
- /************************************************************************/
- PRIVATE lines_toggle_proc(item, value, event)
-
- Panel_item item;
- int value;
- Event *event;
-
- { e_ptr e;
-
- e = (e_ptr) panel_get(item, PANEL_CLIENT_DATA);
- if (value) { /* go to multi-line filter */
- panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH, 0);
- panel_set(e->end, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set(panel_get(item, PANEL_PARENT_PANEL), PANEL_CARET_ITEM, e->end, 0);
- }
- else {
- panel_set(e->end, PANEL_SHOW_ITEM, FALSE, 0);
- panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, LONG_TEXT_LENGTH, 0);
- panel_set(panel_get(item, PANEL_PARENT_PANEL), PANEL_CARET_ITEM, e->start, 0);
- }
- }
-
- /************************************************************************/
- PRIVATE handle_toggle_proc(item, event)
-
- Panel_item item;
- Event *event;
-
- { e_ptr e;
- int i;
-
- if (event_is_down(event))
- if (event_id(event) == MS_LEFT)
- if (panel_get(item, PANEL_VALUE) == 0) {
- for (i = 0; i < entries; i++)
- panel_set(entry[i].handle, PANEL_VALUE, 0, 0);
- panel_set(item, PANEL_VALUE, 1 - (int) panel_get(item, PANEL_VALUE), 0);
- }
- else {
- for (i = 0; i < entries; i++)
- if (entry[i].handle != item && panel_get(entry[i].handle, PANEL_VALUE))
- break;
- if (i == entries)
- panel_set(item, PANEL_VALUE, 0, 0);
- else {
- for (i = 0; i < entries; i++)
- panel_set(entry[i].handle, PANEL_VALUE, 0, 0);
- panel_set(item, PANEL_VALUE, 1, 0);
- }
- }
- else if (event_id(event) == MS_MIDDLE)
- panel_set(item, PANEL_VALUE, 1 - (int) panel_get(item, PANEL_VALUE), 0);
- }
-
- /************************************************************************/
- EXPORT create_entry(panel, base, row)
-
- register Panel panel;
- e_ptr base;
- register int row;
-
- { register e_ptr e;
-
- e = base + row;
- if (e->created)
- return;
- row = row * (ROW_HEIGHT + ROW_MARGIN) + ROW_MARGIN;
- e->created = TRUE;
- e->handle = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 4,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &nohandle_pix, &handle_pix, 0,
- PANEL_EVENT_PROC, handle_toggle_proc,
- PANEL_CLIENT_DATA, e,
- 0);
- e->save = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 16,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &nosave_pix, &save_pix, 0,
- PANEL_NOTIFY_PROC, save_toggle_proc,
- PANEL_CLIENT_DATA, e,
- 0);
- e->stamp = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 36,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &nostamp_pix, &stamp_pix, 0,
- PANEL_CLIENT_DATA, e,
- 0);
- e->open = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 56,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &close_pix, &open_pix, 0,
- PANEL_CLIENT_DATA, e,
- 0);
- e->flash = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 76,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &noflash_pix, &flash_pix, 0,
- PANEL_CLIENT_DATA, e,
- 0);
- e->beep = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 96,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &beep_0_pix, &beep_1_pix, &beep_2_pix, &beep_3_pix, &beep_4_pix, 0,
- PANEL_CLIENT_DATA, e,
- 0);
- e->lines = panel_create_item(panel, PANEL_CHOICE,
- PANEL_ITEM_X, 170,
- PANEL_ITEM_Y, row,
- PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
- PANEL_CHOICE_IMAGES, &single_pix, &range_pix, 0,
- PANEL_NOTIFY_PROC, lines_toggle_proc,
- PANEL_CLIENT_DATA, e,
- 0);
- e->start = panel_create_item(panel, PANEL_TEXT,
- PANEL_ITEM_X, 190,
- PANEL_ITEM_Y, row,
- PANEL_VALUE_STORED_LENGTH, 256,
- PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH,
- PANEL_VALUE_FONT, regular,
- PANEL_CLIENT_DATA, e,
- 0);
- e->end = panel_create_item(panel, PANEL_TEXT,
- PANEL_ITEM_X, 398,
- PANEL_ITEM_Y, row,
- PANEL_VALUE_STORED_LENGTH, 256,
- PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH,
- PANEL_VALUE_FONT, regular,
- PANEL_LABEL_STRING, "to",
- PANEL_LABEL_FONT, bold,
- PANEL_CLIENT_DATA, e,
- 0);
- }
-
- /************************************************************************/
- EXPORT update_entry(panel, base, row, f)
-
- Panel panel;
- e_ptr base;
- int row;
- register f_ptr f;
-
- { f_rec temp;
- register e_ptr e;
-
- create_entry(panel, base, row);
- if (f == NULL) {
- bzero(&temp, sizeof(temp));
- temp.start = "";
- f = &temp;
- }
- e = base + row;
- panel_set(e->handle, PANEL_VALUE, 0, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set(e->save, PANEL_VALUE, f->save, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set(e->beep, PANEL_VALUE, f->beep, PANEL_SHOW_ITEM, f->save, 0);
- panel_set(e->open, PANEL_VALUE, f->open, PANEL_SHOW_ITEM, f->save, 0);
- panel_set(e->flash, PANEL_VALUE, f->flash, PANEL_SHOW_ITEM, f->save, 0);
- panel_set(e->stamp, PANEL_VALUE, f->stamp, PANEL_SHOW_ITEM, f->save, 0);
- panel_set(e->start, PANEL_VALUE, f->start, PANEL_SHOW_ITEM, TRUE, 0);
- if (f->end) {
- panel_set(e->lines, PANEL_VALUE, 1, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set(e->end, PANEL_VALUE, f->end, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, SHORT_TEXT_LENGTH, 0);
- }
- else {
- panel_set(e->lines, PANEL_VALUE, 0, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set(e->end, PANEL_SHOW_ITEM, FALSE, 0);
- panel_set(e->start, PANEL_VALUE_DISPLAY_LENGTH, LONG_TEXT_LENGTH, 0);
- }
- }
-
- /************************************************************************/
- EXPORT move_entry(base, old_row, new_row)
-
- e_ptr base;
- int old_row;
- int new_row;
-
- { register e_ptr new_entry, old_entry;
- register int row;
-
- new_entry = base + new_row;
- old_entry = base + old_row;
- row = new_row * (ROW_HEIGHT + ROW_MARGIN) + ROW_MARGIN;
- panel_set(old_entry->handle, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->beep, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->open, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->flash, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->save, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->stamp, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->lines, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->end, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- panel_set(old_entry->start, PANEL_ITEM_Y, row, PANEL_CLIENT_DATA, new_entry, 0);
- *new_entry = *old_entry;
- old_entry->created = FALSE;
- }
-
- /************************************************************************/
- EXPORT delete_entry(e)
-
- register e_ptr e;
-
- {
- if (e->created) {
- eliminate(e->handle);
- eliminate(e->beep);
- eliminate(e->open);
- eliminate(e->flash);
- eliminate(e->save);
- eliminate(e->stamp);
- eliminate(e->lines);
- eliminate(e->start);
- eliminate(e->end);
- e->created = FALSE;
- }
- }
-