home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Open Prolog 1.0.3d23 / Dialogs / Sample Dialog Code < prev    next >
Encoding:
Text File  |  1995-06-26  |  2.9 KB  |  72 lines  |  [TEXT/PRLG]

  1. simple_modal_dialog :-
  2.         purge_events(dialog),
  3.         new_dialog('Dialog Samples',128,Reference),
  4.         wait_for_event(dialog,[Reference,Item]),(Item==1;Item==2),
  5.         (Item==1 /* 1 is the OK button */ -> beep;true).
  6.  
  7. smarter_modal_dialog :-
  8.         purge_events(dialog),
  9.         new_dialog('Dialog Samples','Smart Dialog',Reference),
  10.         wait_for_event(dialog,[Reference,Item]),
  11.         process_smarter_dialog_hits(Item,Reference),
  12.         close_dialog(Reference).
  13.  
  14. process_smarter_dialog_hits(1,Reference) :- %1 is the Beep button
  15.         %disable controls while beeping…
  16.         set_dialog_property([Reference,1],active(false)),
  17.         set_dialog_property([Reference,2],active(false)),
  18.         set_dialog_property([Reference,4],active(false)),
  19.         beep, %give one beep anyway
  20.         current_dialog_property([Reference,4],value(X)), %4 is the check box
  21.         (X==1->beep;true),
  22.         %re-enable the controls…
  23.         set_dialog_property([Reference,1],active(true)),
  24.         set_dialog_property([Reference,2],active(true)),
  25.         set_dialog_property([Reference,4],active(true)),
  26.         wait_for_event(dialog,[Reference,Item]),!,
  27.         process_smarter_dialog_hits(Item,Reference).
  28. process_smarter_dialog_hits(2,Reference). %2 is the Cancel button
  29. process_smarter_dialog_hits(4,Reference) :- %4 is the Check Box button
  30.         toggle([Reference,4]),
  31.         wait_for_event(dialog,[Reference,Item]),!,
  32.         process_smarter_dialog_hits(Item,Reference).
  33.  
  34. toggle(Ref) :-
  35.         current_dialog_property(Ref,value(V)),
  36.         toggle_value(V,I),
  37.         set_dialog_property(Ref,value(I)).
  38.  
  39. toggle_value(0,1).
  40. toggle_value(1,0).
  41.  
  42. modeless_dialogs :-
  43.         purge_events(dialog),
  44.         new_dialog('Dialog Samples','Plus',PlusRef),
  45.         new_dialog('Dialog Samples','Minus',MinusRef),
  46.         wait_for_event(dialog,[Reference,Item]),
  47.         process_modeless_dialog_hits(Item,Reference,PlusRef,MinusRef),
  48.         close_dialog(MinusRef),
  49.         close_dialog(PlusRef).
  50.  
  51. process_modeless_dialog_hits(1,_,_,_) :- !. % Item 1 - the ‘Close’ button
  52. process_modeless_dialog_hits(1000,_,_,_) :- !. % Close Box or Close Menu
  53. process_modeless_dialog_hits(_,Ref,PlusRef,MinusRef) :- %all other items
  54.         current_dialog_property([Ref,2],value(N1)),
  55.         current_dialog_property([Ref,4],value(N2)),
  56.         (number(N1),number(N2)->
  57.         (Ref==PlusRef->V is N1+N2;Ref==MinusRef->V is N1-N2);
  58.         V = 'value!'),
  59.         set_dialog_property([Ref,6],value(V)),
  60.         wait_for_event(dialog,[Reference,Item]),
  61.         process_modeless_dialog_hits(Item,Reference,PlusRef,MinusRef).
  62.  
  63. modeless_beep_dialog :-
  64.         new_dialog('Dialog Samples','Modeless Beep',_).
  65.  
  66. handle_dialog_interrupt([D|Spec]) :-
  67.         current_dialog_property([D],name('Beeper')),
  68.         process_modeless_beep_dialog([D|Spec]).
  69.  
  70. process_modeless_beep_dialog([_,1]) :- beep.
  71. process_modeless_beep_dialog([D,1000]) :- close_dialog(D).
  72.