",value);
XmTextInsert(he->textarea,left,str);
if(lsel==0)
XmTextSetInsertionPosition(he->textarea,left+len+ 11);
else
XmTextSetInsertionPosition(he->textarea,left +lsel+len+ 15);
}
}
XtFree(sel);
XmProcessTraversal(he->textarea,XmTRAVERSE_CURRENT);
XtFree(str);
}
/*
NAME : create_figure
PARAMETERS : Widget w
From what widget this function is called.
RETURN : void
DESCRIPTION : This function creates the dialog widget image
to enter the name of the URL of the image file.
It has a toggle button to select top or bottom
aligning with the text.
*/
void
create_figure(Widget w,HTMLED *he)
{
Widget dialog,name_box,option_align,togglebutton;
XmString t = XmStringCreateLtoR("Image Name: \n",XmSTRING_DEFAULT_CHARSET);
XmString clear =XmStringCreateSimple("Clear");
XmString bottomal =XmStringCreateSimple("Bottom");
XmString topal =XmStringCreateSimple("Top");
XmString middleal =XmStringCreateSimple("Middle");
XmString align_label = XmStringCreateSimple("Alignment :");
XmString ismapstr =XmStringCreateLtoR("ISMAP\n",XmSTRING_DEFAULT_CHARSET);
ismap = 0; align = TOP_AL;
dialog = XmCreatePromptDialog(he->textarea,"Image",NULL,0);
XtVaSetValues(dialog,
XmNselectionLabelString,t,
XmNapplyLabelString,clear,NULL);
XmStringFree(clear); XmStringFree(t);
name_box = XmCreateForm(dialog,"namebox",NULL,0);
option_align = XmVaCreateSimpleOptionMenu(name_box,"option_align",
align_label,'\0',0 /* initial menu selection */,align_cb,
XmVaPUSHBUTTON,topal,'\0',NULL,NULL,
XmVaPUSHBUTTON,middleal,'\0',NULL,NULL,
XmVaPUSHBUTTON,bottomal,'\0',NULL,NULL,
XmNuserData,he,
NULL);
XmStringFree(align_label); XmStringFree(topal);
XmStringFree(bottomal);XmStringFree(middleal);
XtManageChild(option_align);
togglebutton = XmCreateToggleButton(name_box,"toggletop",NULL,0);
XtManageChild(togglebutton);
XtVaSetValues(togglebutton,
XmNlabelString,ismapstr,NULL);
XtAddCallback(togglebutton,XmNvalueChangedCallback,(XtCallbackProc)ismap_check,NULL);
XmStringFree(ismapstr);
XtVaSetValues(option_align, XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget,togglebutton,
XmNleftAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(togglebutton, XmNtopAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
NULL);
/* When the user types the Reference name, call linker_name()... */
XtAddCallback(dialog,XmNokCallback,(XtCallbackProc)image_name,(XtPointer)he);
/* If the user selects cancel, just detroy the dialog */
XtAddCallback(dialog,XmNcancelCallback,(XtCallbackProc)XtDestroyWidget,NULL);
/* Clear button is available */
XtAddCallback(dialog,XmNapplyCallback,(XtCallbackProc)clear_title,NULL);
XtManageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_APPLY_BUTTON));
/* No help is available */
XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));
XtManageChild(name_box);
XtManageChild(dialog);
XWarpPointer(XtDisplay(he->textarea),XtWindow(he->textarea),
XtWindow(XmSelectionBoxGetChild(dialog,XmDIALOG_TEXT)),
0,0,800,800,0,0);
}
void
ismap_check(Widget w,
XtPointer client_data, XtPointer call_data)
{
if(ismap == 0)
ismap = 1;
else
ismap = 0;
}
void
align_cb(Widget w,
XtPointer client_data, XtPointer call_data)
{
int item_no = (int)client_data;
align = item_no;
}
/*
NAME : image_name
PARAMETERS : XmSelectionBoxCallbackStruct *cbs
It has the URL image name
RETURN : void
DESCRIPTION : This function insert the image tag to the
current position of the cursor
*/
void
image_name(Widget w,
XtPointer client_data,
XmSelectionBoxCallbackStruct *cbs)
{
HTMLED *he = (HTMLED *)client_data;
char *imagefile=NULL;
char *imagename=NULL;
int len=0;
XmTextPosition left;
if(cbs->value!=NULL)
{
XmStringGetLtoR(cbs->value,XmSTRING_DEFAULT_CHARSET,&imagefile);
len = strlen(imagefile);
imagename = XtMalloc(len+50);
}
else
imagename = XtMalloc(50);
if(imagefile!=NULL)
{
if(align==TOP_AL)
sprintf(imagename,"
");
len = strlen(imagename);
left = XmTextGetInsertionPosition(he->textarea);
XmTextInsert(he->textarea,left,imagename);
XmTextSetInsertionPosition(he->textarea,left+len);
XtFree(imagename);
XtFree(imagefile);
ismap = 0; align = TOP_AL;
XmProcessTraversal(he->textarea,XmTRAVERSE_CURRENT);
}
/*
NAME : create_pre
PARAMETERS : Widget w
From what widget this function is called.
RETURN : void
DESCRIPTION : This function creates a message dialog widget
to show the selected text to be in preformatted way
*/
void
create_pre(Widget w,HTMLED *he)
{
Widget dialog;
XmString mstring,u,t,t2;
char *mstr;
mstr = XmTextGetSelection(he->textarea);
if(strcmp(XtName(w),"button_6"))
he->user_data = (XtPointer)PRE;
else
he->user_data = (XtPointer)COMMENT;
if(mstr)
{
t = XmStringCreateLtoR("Preformatted text is : \n",
XmSTRING_DEFAULT_CHARSET);
t2 = XmStringCreateLtoR("Commentary text is : \n",
XmSTRING_DEFAULT_CHARSET);
dialog = XmCreatePromptDialog(he->textarea,"notice_header",NULL,0);
mstring = XmStringCreateLtoR(mstr,XmSTRING_DEFAULT_CHARSET);
if(he->user_data == (XtPointer)PRE)
u = XmStringConcat(t,mstring);
else
u = XmStringConcat(t2,mstring);
XmStringFree(mstring);XmStringFree(t);XmStringFree(t2);
XtVaSetValues(dialog,
XmNselectionLabelString,u,NULL);
XmStringFree(u);
/* When the user choose a size of the header, call set_header */
XtAddCallback(dialog, XmNokCallback,(XtCallbackProc)set_pre,(XtPointer)he);
/* If the user selects cancel, just destroy the header dialog */
XtAddCallback(dialog, XmNcancelCallback,(XtCallbackProc)XtDestroyWidget,NULL);
/* Nor help neither text is available.... */
XtUnmanageChild(XmSelectionBoxGetChild(dialog,XmDIALOG_HELP_BUTTON));
XtUnmanageChild(XmSelectionBoxGetChild(dialog,XmDIALOG_TEXT));
XtManageChild(dialog);
XWarpPointer(XtDisplay(he->textarea),XtWindow(he->textarea),
XtWindow(dialog),
0,0,800,800,20,20);
}
else
set_pre(w,he);
XtFree(mstr);
}
/*
NAME : set_pre
PARAMETERS : Widget w
From what widget this function is called.
RETURN : void
DESCRIPTION : This function sets the preformatted tags
to the selected text
*/
void
set_pre(Widget w,HTMLED *he)
{
XmTextPosition left=0,right=0;
int len;
enum commands flag = (enum commands)he->user_data;
if(flag==PRE)
he->last_command = PRE;
else
he->last_command = COMMENT;
if(XmTextGetSelectionPosition(he->textarea,&left,&right))
{
if(right<=left)
left = right = XmTextGetInsertionPosition(he->textarea);
}
else
left = right = XmTextGetInsertionPosition(he->textarea);
len = right -left;
if(flag==PRE)
{
XmTextInsert(he->textarea,right,"\n\n");
XmTextInsert(he->textarea,left,"\n\n");
}
else
{
XmTextInsert(he->textarea,right," -->");
XmTextInsert(he->textarea,left,"