#ifndef lint static char *RCSid = "$Id$"; #endif /* * findnote.c - routines to handle the alarm feature. * * Michael J. Hammel * Contractor * 1150 Inca St. TH 70 * Denver, CO 80204 * mjhammel@csn.net * * $Log$ * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xpostit.h" /* globals */ /* local variables */ Widget find_widget, find_viewport, find_viewform; /* external variables */ extern Widget toplevel; /* external routines */ extern void ErrPopUp(); /* prototypes */ void FindPopDown(); void FindPopUpChild(); /* * CreateFindNotePrompt - create a scrollable window in which * all notes can be listed */ void CreateFindNotePrompt(notes, hidden) PostItNote *notes; Boolean hidden; { Arg args[15]; register int nargs; XtCallbackRec callbacks[2]; Boolean first; Widget entry[DefaultMaxNotes]; Widget find_form, find_cancel; PostItNote *pn; Window root, child; unsigned int buttons; int root_x, root_y, child_x, child_y; int maxwidth, i, last; Dimension width; /* get mouse location */ XQueryPointer(display, XtWindow(toplevel), &root, &child, &root_x, &root_y, &child_x, &child_y, &buttons); /* * Create a popup shell widget */ nargs = 0; if ( hidden ) { SetArg(XtNtitle, PostItNoteList); } else { SetArg(XtNtitle, PostItFindPrompt); } SetArg(XtNx, root_x); SetArg(XtNy, root_y); find_widget = XtCreatePopupShell( "FindShell", transientShellWidgetClass, toplevel, args, nargs); /* the form inside which all other windows will be put */ nargs = 0; SetArg(XtNborderWidth, 0); find_form = XtCreateManagedWidget( "FindForm", formWidgetClass, find_widget, args, nargs); /* the scrollable window */ nargs = 0; SetArg(XtNallowHoriz, TRUE); SetArg(XtNallowVert, TRUE); SetArg(XtNuseBottom, TRUE); find_viewport = XtCreateManagedWidget( "FindViewport", viewportWidgetClass, find_form, args, nargs); /* * create the form inside which all the buttons go */ nargs = 0; SetArg(XtNborderWidth, 0); find_viewform = XtCreateManagedWidget( "FindViewForm", formWidgetClass, find_viewport, args, nargs); /* now create each button */ first = True; maxwidth=0; i=0; for (pn = notes; pn != NULL; pn = pn->pn_next) { if ( hidden ) { if ( pn->pn_hidden ) { nargs = 0; SetArg(XtNborderWidth, 1); SetArg(XtNlabel, pn->pn_name); SetArg(XtNshapeStyle, XmuShapeRectangle); SetArg(XtNhorizDistance, 0); if ( !first ) { SetArg(XtNfromVert, entry[i-1]); SetArg(XtNvertDistance, 0); } entry[i] = XtCreateManagedWidget( "FindButton", commandWidgetClass, find_viewform, args, nargs); XtAddCallback(entry[i], XtNcallback, FindPopUpChild, (XtPointer)pn); nargs = 0; SetArg(XtNwidth, &width); XtGetValues(entry[i], args, nargs); if (width>maxwidth) maxwidth=width; first=False; i++; } } else { nargs = 0; SetArg(XtNborderWidth, 1); SetArg(XtNlabel, pn->pn_name); SetArg(XtNshapeStyle, XmuShapeRectangle); SetArg(XtNhorizDistance, 0); if ( !first ) { SetArg(XtNfromVert, entry[i-1]); SetArg(XtNvertDistance, 0); } entry[i] = XtCreateManagedWidget( "FindButton", commandWidgetClass, find_viewform, args, nargs); XtAddCallback(entry[i], XtNcallback, FindPopUpChild, (XtPointer)pn); nargs = 0; SetArg(XtNwidth, &width); XtGetValues(entry[i], args, nargs); if (width>maxwidth) maxwidth=width; first=False; i++; } } if ( first ) { if ( hidden ) ErrPopUp("There are no hidden notes." ); else ErrPopUp("You have no notes."); FindPopDown(); return; } /* readjust the widths of all buttons */ last=i; for (i=0;i