#include "ml.h"
Menu log_menu[] = {
{ NULL, "dismiss", NUL_TERM,
lwin_dismiss, NULL, 0, NULL, NULL, BTN_ON },
{ NULL, "clear", NUL_TERM,
lwin_clear, NULL, 0, NULL, NULL, BTN_ON },
};
#ifdef __STDC__
void create_log_window(LogWindow *lwin)
#else
void create_log_window(lwin)
LogWindow *lwin;
#endif
{
Arg args[ARGLISTSIZE];
int n = 0;
Widget form, menubar;
XtTranslations translations;
lwin->destroyed = FALSE;
XtSetArg (args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
lwin->shell = XtCreatePopupShell("log",
topLevelShellWidgetClass,
session->shell,
args,n);
n = 0;
AddDestroyCallback (lwin->shell);
setup_editres(lwin->shell);
if(note_icon != (Pixmap) None)
XtVaSetValues(lwin->shell,
XmNiconPixmap,
note_icon,
NULL);
form = XmCreateForm(lwin->shell, "form", args, n); n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++;
menubar = XmCreateMenuBar(form,"menubar", args, n); n = 0;
XtManageChild(menubar);
create_buttons(NULL, menubar, log_menu, XtNumber(log_menu),
BTN_ON, (XtPointer) lwin, ROOTMENULEVEL);
XtSetArg(args[n], XmNeditable, FALSE); n ++;
XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n ++;
XtSetArg(args[n], XmNscrollVertical, TRUE); n ++;
XtSetArg(args[n], XmNscrollHorizontal, TRUE ); n ++;
lwin->text =
XmCreateScrolledText(form, "text", args, n); n = 0;
translations = XtParseTranslationTable(GLOBAL_text_translations);
XtOverrideTranslations(lwin->text, translations);
translations = XtParseTranslationTable(GLOBAL_messages_pop_translations);
XtOverrideTranslations(lwin->text, translations);
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n ++;
XtSetArg(args[n], XmNtopWidget, menubar); n ++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++;
XtSetValues(XtParent(lwin->text), args, n); n = 0;
XtManageChild(lwin->text);
XtAddCallback(lwin->shell, XmNdestroyCallback,
(XtCallbackProc) lwin_destroy, lwin);
XtAddCallback(lwin->shell, XmNpopdownCallback,
(XtCallbackProc) lwin_popdown, lwin);
XtManageChild(form);
XtManageChild(lwin->shell);
XtPopup(lwin->shell, XtGrabNone);
lwin->is_realized = TRUE;
return;
}
#ifdef __STDC__
void lwin_popdown(Widget w, LogWindow *lwin, XtPointer xp)
#else
void lwin_popdown(w, lwin, xp)
Widget w;
LogWindow *lwin;
XtPointer xp;
#endif
{
lwin->is_realized = FALSE;
return;
}
#ifdef __STDC__
void lwin_dismiss(Widget w, LogWindow *lwin, XtPointer xp)
#else
void lwin_dismiss(w, lwin, xp)
Widget w;
LogWindow *lwin;
XtPointer xp;
#endif
{
XtPopdown(lwin->shell);
lwin->is_realized = FALSE;
return;
}
#ifdef __STDC__
void messages_pop(Widget w, LogWindow *lwin, XtPointer xp)
#else
void messages_pop(w, lwin, xp)
Widget w;
LogWindow *lwin;
XtPointer xp;
#endif
{
lwin_dismiss(w,session->lwin,NULL);
return;
}
#ifdef __STDC__
void lwin_destroy(Widget w, LogWindow *lwin, XtPointer xp)
#else
void lwin_destroy(w, lwin, xp)
Widget w;
LogWindow *lwin;
XtPointer xp;
#endif
{
lwin->is_realized = FALSE;
lwin->destroyed = TRUE;
return;
}
#ifdef __STDC__
void lwin_popup(Widget w, LogWindow *lwin, XtPointer xp)
#else
void lwin_popup(w, lwin, xp)
Widget w;
LogWindow *lwin;
XtPointer xp;
#endif
{
if(lwin->is_realized == TRUE)
de_iconify(lwin->shell);
else {
if(lwin->destroyed == TRUE)
create_log_window(lwin);
else {
XtPopup(lwin->shell, XtGrabNone);
lwin->is_realized = TRUE;
}
}
return;
}
#ifdef __STDC__
void lwin_clear(Widget w, LogWindow *lwin, XtPointer xp)
#else
void lwin_clear(w, lwin, xp)
Widget w;
LogWindow *lwin;
XtPointer xp;
#endif
{
XmTextSetString(lwin->text, EMPTYSTR);
}
#ifdef __STDC__
void log_error(char *message, long warn)
#else
void log_error(message,warn)
char *message;
long warn;
#endif
{
switch(warn) {
case NIL:
case BYE:
case PARSE:
break;
default:
XBell(display, 1000);
lwin_popup(session->shell, session->lwin, NULL);
XmUpdateDisplay(session->lwin->shell);
break;
}
if(session->lwin->destroyed == TRUE)
return;
AppendText(session->lwin->text,message);
XmUpdateDisplay(session->lwin->shell);
return;
}
syntax highlighted by Code2HTML, v. 0.9.1