From 2c5092ad447410654d8fd9cbd4bc241a0d4fdbec Mon Sep 17 00:00:00 2001 From: Linas Vepstas Date: Sun, 30 Nov 1997 09:39:51 +0000 Subject: [PATCH] changes to allow use of XmHTML widget git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@205 57a11ea4-9604-0410-9ed3-97b8803252fd --- Makefile | 12 +++- src/HelpWindow.c | 165 ++++++++++++++++++++++++++++++++++++++++------- src/Makefile | 11 +++- 3 files changed, 158 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 63b614a5c8..2151b707de 100644 --- a/Makefile +++ b/Makefile @@ -39,14 +39,19 @@ RANLIB = ranlib # DEBUGMEMORY - does some accounting whenever malloc/free # is called. # USEDEBUG - causes debugging info to be displayed -CFLAGS = $(LFLAGS) -I../include -I../lib/libhtmlw -I../lib/Xbae-4.6.2-linas \ +# CFLAGS = $(LFLAGS) -I../include -I../lib/libhtmlw -I../lib/Xbae-4.6.2-linas \ +# -I ../lib/ComboBox-1.33 -I/usr/local/include -DMOTIF1_2 \ +# -DUSEQUICKFILL + +CFLAGS = $(LFLAGS) -I../include -I../lib/XmHTML-1.1.0/src \ + -I../lib/Xbae-4.6.2-linas \ -I ../lib/ComboBox-1.33 -I/usr/local/include -DMOTIF1_2 \ -DUSEQUICKFILL # -DDEBUGMEMORY -DUSEDEBUG # -DUSEQUICKFILL # -DUSE_NO_COLOR -DDEBUGMEMORY -DUSEDEBUG -LFLAGS = -g -L/usr/local/lib -L/usr/X11/lib -L../lib +LFLAGS = -g -L/usr/lib -L/usr/local/lib -L/usr/X11/lib -L../lib LIBS = -lXm -lXmu -lXt -lXpm -lXext -lSM -lICE -lX11 # LIBS = -lXm -lXmu -lXt -lXpm -lXext -lSM -lICE -lX11 -lefence @@ -63,14 +68,15 @@ default : @cd lib/ComboBox-1.33 ; $(MAKE) @cd lib/Xbae-4.6.2-linas ; $(MAKE) @cd lib/libhtmlw ; $(MAKE) $(OPTIONS) + @cd lib/XmHTML-1.1.0; $(MAKE) @cd src ; $(MAKE) $(OPTIONS) clean : rm -f core junk tmp *~ *.bak @cd include ; rm -f *~ @cd help ; rm -f *~ - @cd lib/libhtmlw ; $(MAKE) clean @cd src ; $(MAKE) clean + @cd lib/libhtmlw ; $(MAKE) clean @cd lib/ComboBox-1.33 ; $(MAKE) clean @cd lib/Xbae-4.6.2-linas ; $(MAKE) clean diff --git a/src/HelpWindow.c b/src/HelpWindow.c index 2c7ac4de3a..f47d7f90b0 100644 --- a/src/HelpWindow.c +++ b/src/HelpWindow.c @@ -42,15 +42,25 @@ #include "main.h" #include "util.h" + +#define HAVE_XMHTML 1 + +#if HAVE_HTMLW #include "HTML.h" +#endif + +#if HAVE_XMHTML +#include "XmHTML.h" +#endif + /********************************************************************\ * HTML History functions * \********************************************************************/ typedef struct _HTMLHistory { - char *htmlfile; - struct _HTMLHistory *last; struct _HTMLHistory *next; + struct _HTMLHistory *last; + char *htmlfile; } HTMLHistory; /* insert an htmlfile into history. Return TRUE if this @@ -64,21 +74,23 @@ historyInsert( HTMLHistory **history, char *htmlfile ) HTMLHistory *temp; /* delete all next pages: */ - while( (*history)->next != NULL ) + temp = (*history)->next; + while( temp ) { - temp = (*history)->next; - (*history)->next = temp->next; _free(temp->htmlfile); _free(temp); + + temp = (*history)->next; } /* Add new node to history: */ temp = (HTMLHistory *)_malloc(sizeof(HTMLHistory)); temp->htmlfile = (char *)_malloc((strlen(htmlfile)+1)*sizeof(char)); - sprintf(temp->htmlfile,"%s",htmlfile); + strcpy (temp->htmlfile,htmlfile); temp->next = NULL; temp->last = (*history); + (*history)->next = temp; (*history) = temp; return FALSE; @@ -88,7 +100,7 @@ historyInsert( HTMLHistory **history, char *htmlfile ) /* This must be the first node in the history... */ (*history) = (HTMLHistory *)_malloc(sizeof(HTMLHistory)); (*history)->htmlfile = (char *)_malloc((strlen(htmlfile)+1)*sizeof(char)); - sprintf((*history)->htmlfile,"%s",htmlfile); + strcpy ((*history)->htmlfile,htmlfile); (*history)->last = NULL; (*history)->next = NULL; @@ -101,10 +113,10 @@ historyInsert( HTMLHistory **history, char *htmlfile ) char * historyFwd( HTMLHistory **history ) { - if( (*history) != NULL ) - { - if( (*history)->next != NULL ) - (*history) = (*history)->next; + if( (*history) != NULL ) { + if( (*history)->next != NULL ) { + (*history) = (*history)->next; + } return (*history)->htmlfile; } else @@ -115,10 +127,10 @@ historyFwd( HTMLHistory **history ) char * historyBack( HTMLHistory **history ) { - if( (*history) != NULL ) - { - if( (*history)->last != NULL ) + if( (*history) != NULL ) { + if( (*history)->last != NULL ) { (*history) = (*history)->last; + } return (*history)->htmlfile; } else @@ -176,6 +188,10 @@ static void helpAnchorCB( Widget mw, XtPointer cd, XtPointer cb ); char *htmlRead( char *file ); +#if HAVE_XMHTML +void xaccJumpToLabel (Widget mw, char *jumpfile); +#endif + #if HAVE_XPM ImageInfo *htmlResolveImage( Widget wm, char *file, int nl ); #endif @@ -241,11 +257,18 @@ helpWindow( Widget parent, char *title, char *htmlfile ) helpwidget = XtVaCreateManagedWidget( "help", +#if HAVE_HTMLW htmlWidgetClass, controlform, #if HAVE_XPM WbNresolveImageFunction, htmlResolveImage, #endif WbNdelayImageLoads, False, +#endif + +#if HAVE_XMHTML + xmHTMLWidgetClass, controlform, + XmNanchorButtons, False, +#endif XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, @@ -254,7 +277,12 @@ helpWindow( Widget parent, char *title, char *htmlfile ) XmNheight, 400, NULL ); +#if HAVE_HTMLW XtAddCallback( helpwidget, WbNanchorCallback, helpAnchorCB, NULL ); +#endif +#if HAVE_XMHTML + XtAddCallback( helpwidget, XmNactivateCallback, helpAnchorCB, NULL ); +#endif /** ACTIONFORM ******************************************** @@ -313,7 +341,12 @@ helpWindow( Widget parent, char *title, char *htmlfile ) /* we have to load the page after the widget is realized, so * the pictures can be drawn ?? but its not realized yet! */ +#if HAVE_HTMLW XtVaSetValues( helpwidget, WbNtext, htmlRead(htmlfile), NULL ); +#endif +#ifdef HAVE_XMHTML + xaccJumpToLabel( helpwidget, htmlfile ); +#endif /* Fix action area of the pane to its current size, and not let it * resize. */ @@ -330,8 +363,14 @@ helpWindow( Widget parent, char *title, char *htmlfile ) XtPopup( dialog, XtGrabNone ); } /* if help window is already open, just load new page */ - else + else { +#if HAVE_HTMLW XtVaSetValues( helpwidget, WbNtext, htmlRead(htmlfile), NULL ); +#endif +#ifdef HAVE_XMHTML + xaccJumpToLabel( helpwidget, htmlfile ); +#endif + } unsetBusyCursor( parent ); } @@ -339,7 +378,6 @@ helpWindow( Widget parent, char *title, char *htmlfile ) /********************************************************************\ * callback functions... * \********************************************************************/ - /********************************************************************\ * helpBackCB - called when user clicks "Back" button... shows last * * help page in history * @@ -355,9 +393,12 @@ helpBackCB( Widget mw, XtPointer cd, XtPointer cb ) char *file = historyBack(&helpHistory); if( file != NULL ) { - XtVaSetValues( helpwidget, - WbNtext, htmlRead(file), - NULL ); +#if HAVE_HTMLW + XtVaSetValues( helpwidget, WbNtext, htmlRead(file), NULL ); +#endif +#ifdef HAVE_XMHTML + xaccJumpToLabel( helpwidget, file ); +#endif } } @@ -376,9 +417,12 @@ helpFwdCB( Widget mw, XtPointer cd, XtPointer cb ) char *file = historyFwd(&helpHistory); if( file != NULL ) { - XtVaSetValues( helpwidget, - WbNtext, htmlRead(file), - NULL ); +#if HAVE_HTMLW + XtVaSetValues( helpwidget, WbNtext, htmlRead(file), NULL ); +#endif +#ifdef HAVE_XMHTML + xaccJumpToLabel( helpwidget, file ); +#endif } } @@ -408,16 +452,88 @@ closeHelpWin( Widget mw, XtPointer cd, XtPointer cb ) static void helpAnchorCB( Widget mw, XtPointer cd, XtPointer cb ) { +#if HAVE_HTMLW WbAnchorCallbackData *acbs = (WbAnchorCallbackData *)cb; - fprintf(stderr,"%d %s\n",acbs->element_id, acbs->text); + if( historyInsert(&helpHistory,acbs->href) ) {ERROR();} /* CB shouldn't be called if there is not history!!! */ - else + else { XtVaSetValues( mw, WbNtext, htmlRead(acbs->href), NULL ); + } +#endif + +#ifdef HAVE_XMHTML + XmHTMLAnchorCallbackStruct *acbs = (XmHTMLAnchorCallbackStruct *) cb; + + if(acbs->reason != XmCR_ACTIVATE) return; + + switch(acbs->url_type) { + + /* a named anchor on a page that is already displayed */ + case ANCHOR_JUMP: { + XmHTMLAnchorScrollToName(mw, acbs->href); + } + break; + + /* a local file with a possible jump to label */ + case ANCHOR_FILE_LOCAL: { + historyInsert(&helpHistory, acbs->href); + xaccJumpToLabel (mw, acbs->href); + } + break; + + /* other types are unsupported, but it would be fun if they were ... */ + case ANCHOR_FTP: + fprintf(stderr, "Error: this help window doesn't support ftp: %s\n", acbs->href); + break; + case ANCHOR_HTTP: + fprintf(stderr, "Error: this help window doesn't support http: %s\n", acbs->href); + break; + case ANCHOR_MAILTO: + fprintf(stderr, "Error: this help window doesn't support email: %s\n", acbs->href); + break; + case ANCHOR_UNKNOWN: + default: + fprintf(stderr, "Error: don't know this type of url: %s\n", acbs->href); + break; + } + +#endif } +/********************************************************************\ + * utility functions... * +\********************************************************************/ + +#if HAVE_XMHTML +void +xaccJumpToLabel (Widget mw, char *jumpfile) +{ + char *label, *file, *text; + + file = strdup (jumpfile); + + /* see if this anchor contains a jump */ + label = strchr (jumpfile, '#'); + if (label) { + file [label - jumpfile] = 0x0; /* truncate # from name */ + label = strdup (label); + } + + text = htmlRead (file); + XmHTMLTextSetString(mw, text); + if (label) { + XmHTMLAnchorScrollToName(mw, label); + } else { + XmHTMLTextScrollToLine(mw, 0); + } + free (file); + if (label) free (label); +} +#endif + /********************************************************************\ * HTML functions... * \********************************************************************/ @@ -443,6 +559,7 @@ htmlRead( char *file ) if( fd == -1 ) { ERROR(); + fprintf (stderr, "file was %s \n", file); return NULL; } diff --git a/src/Makefile b/src/Makefile index d6bb54e61f..c56ef6bed0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -38,10 +38,15 @@ TARGET = ../xacc default: $(TARGET) -$(TARGET): $(OBJS) ../lib/libhtmlw.a ../lib/libComboBox.a ../lib/Xbae-4.6.2-linas/src/libXbae.a +# $(TARGET): $(OBJS) ../lib/libhtmlw.a ../lib/libComboBox.a ../lib/Xbae-4.6.2-linas/src/libXbae.a +# @echo "++++++" +# $(CC) $(OBJS) $(LFLAGS) -lhtmlw -lComboBox \ +# ../lib/Xbae-4.6.2-linas/src/libXbae.a $(LIBS) -o $@ + +$(TARGET): $(OBJS) ../lib/libXmHTML.a ../lib/libComboBox.a ../lib/Xbae-4.6.2-linas/src/libXbae.a @echo "++++++" - $(CC) $(OBJS) $(LFLAGS) -lhtmlw -lComboBox \ - ../lib/Xbae-4.6.2-linas/src/libXbae.a $(LIBS) -o $@ + $(CC) $(OBJS) $(LFLAGS) -lXmHTML -lComboBox \ + ../lib/Xbae-4.6.2-linas/src/libXbae.a -ljpeg $(LIBS) -lpng -lz -lm -o $@ .c.o: Makefile @echo "+++"