/* file: helppan.c G. Moody 1 May 1990 Last revised: 24 June 2002 Help panel functions for WAVE ------------------------------------------------------------------------------- WAVE: Waveform analyzer, viewer, and editor Copyright (C) 1990-2010 George B. Moody This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . You may contact the author by e-mail (wfdb@physionet.org) or postal mail (MIT Room E25-505A, Cambridge, MA 02139 USA). For updates to this software, please visit PhysioNet (http://www.physionet.org/). _______________________________________________________________________________ */ #include "wave.h" #include "xvwave.h" #include /* getcwd */ #include #include /* On-line help files for WAVE are located in *(helpdir)/wave. Their names are of the form *(helpdir)/wave/TOPIC.hlp, where TOPIC is one of the topics given in the help popup menu (possibly abbreviated). The master help file is *(helpdir)/wave/HELPFILE. */ #define HELPFILE "wave.hlp" void find_user_guide() { FILE *ifile; sprintf(url, "%s/html/wug/wug.htm", helpdir); if (ifile = fopen(url, "r")) fclose(ifile); else if (ifile = fopen("wug.htm", "r")) { fclose(ifile); sprintf(url, "%s/wug.htm", getcwd(NULL, 256)); } else strcpy(url, "http://www.physionet.org/physiotools/wug/"); } void find_faq() { FILE *ifile; sprintf(url, "%s/html/wug/wave-faq.htm", helpdir); if (ifile = fopen(url, "r")) fclose(ifile); else if (ifile = fopen("wave-faq.htm", "r")) { fclose(ifile); sprintf(url, "%s/wave-faq.htm", getcwd(NULL, 256)); } else strcpy(url, "http://www.physionet.org/physiotools/wug/wave-faq.htm"); } void help() { find_user_guide(); fprintf(stderr, "WAVE version %s (%s)\n %s", WAVEVERSION, __DATE__, wfdberror()); fprintf(stderr, "usage: %s -r RECORD[+RECORD] [ options ]\n", pname); fprintf(stderr, "\nOptions are:\n"); fprintf(stderr, " -a annotator-name Open an annotation file\n"); fprintf(stderr," -dpi XX[xYY] Calibrate for XX [by YY] dots/inch\n"); fprintf(stderr, " -f TIME Open the record beginning at TIME\n"); fprintf(stderr, " -g Use shades of grey only\n"); fprintf(stderr, " -H Use high-resolution mode\n"); fprintf(stderr, " -m Use black and white only\n"); fprintf(stderr, " -O Use overlay graphics\n"); fprintf(stderr, " -p PATH Search for input files in PATH\n"); fprintf(stderr, " (if not found in $WFDB)\n"); fprintf(stderr, " -s SIGNAL [SIGNAL ...] Initialize the signal list\n"); fprintf(stderr, " -S Use a shared colormap\n"); fprintf(stderr, " -Vx Set initial display option x\n"); if (getenv("DISPLAY") == NULL) { fprintf(stderr, "\n%s is an X11 client. ", pname); fprintf(stderr, "You must specify the X server\n"); fprintf(stderr, "connection for it in the DISPLAY environment "); fprintf(stderr, "variable.\n"); } if (getenv("WFDB") == NULL) { fprintf(stderr, "\nBe sure to set the WFDB environment variable to\n"); fprintf(stderr, "indicate a list of locations that contain\n"); fprintf(stderr, "input files for %s.\n", pname); } fprintf(stderr, "\nFor more information, type `more %s/wave/%s',\n", helpdir, HELPFILE); fprintf(stderr, "or open `%s' using\nyour web browser.\n", url); exit(1); } Frame help_frame; Panel help_panel; char *topic; static void help_print() { char *print_command; if (topic && (print_command = malloc(strlen(textprint) + strlen(helpdir) + strlen(topic) + 14))) { sprintf(print_command, "%s %s/wave/%s.hlp\n", textprint, helpdir, topic); do_command(print_command); free(print_command); } } /* Open the WAVE User's Guide in a web browser. */ static void help_user_guide(item, event) Panel_item item; Event *event; { find_user_guide(); open_url(); } /* Open the WAVE FAQ in a web browser. */ static void help_faq(item, event) Panel_item item; Event *event; { find_faq(); open_url(); } /* Create a text subwindow and display help on selected topic. */ static void help_select(item, event) Panel_item item; Event *event; { char *filename; Frame help_subframe; Panel help_subpanel; Textsw textsw; Textsw_status status; switch ((int)xv_get(item, PANEL_CLIENT_DATA)) { case 'a': topic = "analysis"; break; case 'b': topic = "buttons"; break; case 'e': topic = "editing"; break; case 'f': topic = "faq"; break; case 'l': topic = "log"; break; case 'n': topic = "news"; break; case 'p': topic = "printing"; break; case 'r': topic = "resource"; break; default: case 'i': topic = "intro"; break; } if (filename = malloc(strlen(helpdir) + strlen(topic) + 11)) { /* strlen("/wave/") + strlen(."hlp") + 1 for the trailing null = 11 */ Icon icon; icon = xv_create(XV_NULL, ICON, ICON_IMAGE, icon_image, ICON_LABEL, topic, NULL); help_subframe = xv_find(help_frame, FRAME, XV_LABEL, topic, WIN_COLUMNS, 100, FRAME_ICON, icon, 0); help_subpanel = xv_find(help_subframe, PANEL, WIN_ROWS, 1, 0); xv_find(help_subpanel, PANEL_BUTTON, PANEL_LABEL_STRING, "Print", XV_HELP_DATA, "wave:help.print", PANEL_NOTIFY_PROC, help_print, 0); textsw = (Textsw)xv_find(help_subframe, TEXTSW, WIN_BELOW, help_subpanel, WIN_X, 0, NULL); sprintf(filename, "%s/wave/%s.hlp", helpdir, topic); xv_set(textsw, TEXTSW_STATUS, &status, TEXTSW_FILE, filename, TEXTSW_FIRST, 0, TEXTSW_READ_ONLY, TRUE, NULL); if (status != TEXTSW_STATUS_OKAY) { #ifdef NOTICE Xv_notice notice = xv_create((Frame)frame, NOTICE, XV_SHOW, TRUE, #else (void)notice_prompt((Frame)frame, (Event *)NULL, #endif NOTICE_MESSAGE_STRINGS, "Sorry, help is not available for this topic.", 0, NOTICE_BUTTON_YES, "Continue", 0); #ifdef NOTICE xv_destroy_safe(notice); #endif xv_destroy_safe(help_subframe); } else { wmgr_top(help_subframe); xv_set(help_subframe, WIN_MAP, TRUE, 0); } free(filename); } } /* Set up popup window for help. */ void create_help_popup() { Icon icon; icon = xv_create(XV_NULL, ICON, ICON_IMAGE, icon_image, ICON_LABEL, "Help", NULL); help_frame = xv_create(frame, FRAME, XV_LABEL, "Help Topics", FRAME_ICON, icon, 0); help_panel = xv_create(help_frame, PANEL, 0); xv_create(help_panel, PANEL_MESSAGE, PANEL_NEXT_ROW, -1, PANEL_LABEL_STRING, "WAVE", PANEL_LABEL_BOLD, TRUE, 0); xv_create(help_panel, PANEL_MESSAGE, PANEL_LABEL_STRING, WAVEVERSION, PANEL_LABEL_BOLD, TRUE, 0); xv_create(help_panel, PANEL_MESSAGE, PANEL_LABEL_STRING, "Copyright \251 1990-2010 George B. Moody.", 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Introduction", XV_HELP_DATA, "wave:help.intro", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'i', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Buttons", XV_HELP_DATA, "wave:help.buttons", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'b', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Annotation Editing", XV_HELP_DATA, "wave:help.editing", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'e', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "WAVE Logs", XV_HELP_DATA, "wave:help.logs", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'l', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Printing", XV_HELP_DATA, "wave:help.printing", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'p', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Analysis", XV_HELP_DATA, "wave:help.analysis", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'a', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Resources", XV_HELP_DATA, "wave:help.resources", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'r', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "What's new", XV_HELP_DATA, "wave:help.news", PANEL_NOTIFY_PROC, help_select, PANEL_CLIENT_DATA, (caddr_t) 'n', 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Frequently asked questions", XV_HELP_DATA, "wave:help.faq", PANEL_NOTIFY_PROC, help_faq, 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "User's Guide", XV_HELP_DATA, "wave:help.ug", PANEL_NOTIFY_PROC, help_user_guide, 0); xv_create(help_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Quit from Help", XV_HELP_DATA, "wave:help.quit", PANEL_NOTIFY_PROC, dismiss_help, 0); window_fit(help_panel); window_fit(help_frame); } int help_popup_active = -1; /* Make the help popup window appear. */ void show_help() { if (help_popup_active < 0) create_help_popup(); wmgr_top(help_frame); xv_set(help_frame, WIN_MAP, TRUE, 0); help_popup_active = 1; } /* Make the help popup window disappear. */ void dismiss_help() { if (help_popup_active > 0) { xv_set(help_frame, WIN_MAP, FALSE, 0); help_popup_active = 0; } }