home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / XAP / XFM / XFM-1.3 / XFM-1 / xfm-1.3 / xfm / FmConfirm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-02  |  4.6 KB  |  162 lines

  1. /*-----------------------------------------------------------------------------
  2.   Module FmConfirm
  3.  
  4.   (c) Simon Marlow 1990-1993
  5.  
  6.   Module for creating and implementing the confirmation window
  7. -----------------------------------------------------------------------------*/
  8.  
  9. #include <X11/Intrinsic.h>
  10. #include <X11/StringDefs.h>
  11. #include <X11/Shell.h>
  12. #include <X11/Xaw/Form.h>
  13. #include <X11/Xaw/Label.h>
  14. #include <X11/Xaw/Box.h>
  15.  
  16. #include "Am.h"
  17. #include "Fm.h"
  18.  
  19. #define LABEL_WIDTH 400
  20.  
  21. /*-----------------------------------------------------------------------------
  22.   STATIC DATA
  23. -----------------------------------------------------------------------------*/
  24.  
  25. static Widget shell, label1, label2, label3;
  26. static enum { DontKnow, Ok, Cancel, Abort } confirm_flag;
  27. Boolean aborted;
  28.  
  29. /*-----------------------------------------------------------------------------
  30.   Widget Argument Lists
  31. -----------------------------------------------------------------------------*/
  32.  
  33. static Arg shell_args[] = {
  34.   { XtNtitle, (XtArgVal) "Confirm" }
  35. };
  36.  
  37. static Arg *form_args = NULL;
  38.  
  39. static Arg label_args[] = {
  40.   { XtNfromHoriz, (XtArgVal) NULL },
  41.   { XtNfromVert, (XtArgVal) NULL },
  42.   { XtNlabel, (XtArgVal) NULL },
  43.   { XtNwidth, (XtArgVal) LABEL_WIDTH },
  44.   { XtNfont, (XtArgVal) NULL },
  45.   { XtNresize, (XtArgVal) False },
  46.   { XtNtop, XtChainTop },
  47.   { XtNbottom, XtChainTop },
  48.   { XtNleft, XtChainLeft },
  49.   { XtNright, XtChainRight }
  50. };
  51.  
  52. static Arg button_box_args[] = {
  53.   { XtNfromHoriz, (XtArgVal) NULL },
  54.   { XtNfromVert, (XtArgVal) NULL },
  55.   { XtNtop, XtChainTop },
  56.   { XtNbottom, XtChainTop },
  57.   { XtNleft, XtChainLeft },
  58.   { XtNright, XtChainLeft }
  59. };
  60.  
  61. /*-----------------------------------------------------------------------------
  62.   PRIVATE FUNCTIONS
  63. -----------------------------------------------------------------------------*/
  64.  
  65. static void confirmOkCb(Widget w, XtPointer client_data, XtPointer call_data)
  66. {
  67.   XtPopdown(shell);
  68.   confirm_flag = Ok;
  69. }
  70.  
  71. /*---------------------------------------------------------------------------*/
  72.  
  73. static void confirmCancelCb(Widget w, XtPointer client_data, 
  74.                 XtPointer call_data)
  75. {
  76.   XtPopdown(shell);
  77.   confirm_flag = Cancel;
  78. }
  79.  
  80. /*---------------------------------------------------------------------------*/
  81.  
  82. static void confirmAbortCb(Widget w, XtPointer client_data, 
  83.                XtPointer call_data)
  84. {
  85.   XtPopdown(shell);
  86.   confirm_flag = Abort;
  87. }
  88.  
  89. /*-----------------------------------------------------------------------------
  90.   Button Data
  91. -----------------------------------------------------------------------------*/
  92.  
  93. static ButtonRec confirm_buttons[] = {
  94.   { "ok", "Continue", (FmCallbackProc *) confirmOkCb },
  95.   { "cancel", "Cancel", (FmCallbackProc *) confirmCancelCb },
  96.   { "abort", "Abort", (FmCallbackProc *) confirmAbortCb },
  97. };
  98.  
  99.  
  100. /*-----------------------------------------------------------------------------
  101.   PUBLIC FUNCTIONS
  102. -----------------------------------------------------------------------------*/
  103.  
  104. void createConfirmPopup()
  105. {
  106.   Widget form, button_box;
  107.  
  108.   /* create shell */
  109.   shell = XtCreatePopupShell("confirm", transientShellWidgetClass,
  110.                  aw.shell, shell_args, XtNumber(shell_args));
  111.  
  112.   /* create outer form */
  113.   form = XtCreateManagedWidget("form", formWidgetClass, shell,
  114.                       form_args, XtNumber(form_args) );
  115.  
  116.   /* create label 1 */
  117.   label_args[4].value = (XtArgVal) resources.label_font;
  118.   label1 = XtCreateManagedWidget("label1",labelWidgetClass, form,
  119.                  label_args, XtNumber(label_args) );
  120.  
  121.   /* create label 2 */
  122.   label_args[1].value = (XtArgVal) label1;
  123.   label2 = XtCreateManagedWidget("label2",labelWidgetClass, form,
  124.                  label_args, XtNumber(label_args) );
  125.  
  126.   /* create label 3 */
  127.   label_args[1].value = (XtArgVal) label2;
  128.   label3 = XtCreateManagedWidget("label3",labelWidgetClass, form,
  129.                  label_args, XtNumber(label_args) );
  130.  
  131.   /* create button box */
  132.   button_box_args[1].value = (XtArgVal) label3;
  133.   button_box = XtCreateManagedWidget("button box", boxWidgetClass, form,
  134.                      button_box_args, 
  135.                      XtNumber(button_box_args) );
  136.   createButtons(confirm_buttons, XtNumber(confirm_buttons), button_box,
  137.         NULL);
  138.   XtRealizeWidget(shell);
  139. }
  140.  
  141. /*---------------------------------------------------------------------------*/
  142.  
  143. int confirm(String s1, String s2, String s3)
  144. {
  145.   XEvent e;
  146.  
  147.   XtVaSetValues(label1, XtNlabel, s1, NULL);
  148.   XtVaSetValues(label2, XtNlabel, s2, NULL);
  149.   XtVaSetValues(label3, XtNlabel, s3, NULL);
  150.   popupByCursor(shell, XtGrabExclusive);
  151.  
  152.   confirm_flag = DontKnow;
  153.  
  154.   do {
  155.     XtAppNextEvent(app_context, &e);
  156.     XtDispatchEvent(&e);
  157.   } while (confirm_flag == DontKnow);
  158.  
  159.   aborted = (confirm_flag == Abort);
  160.   return (confirm_flag == Ok);
  161. }
  162.