frmmask.pp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. unit frmmask;
  2. {$mode objfpc}
  3. Interface
  4. uses glib,gdk,gtk;
  5. Type
  6. TMaskCallBack = Procedure (Mask : String; Data : Pointer);
  7. TMaskForm = Record
  8. Window : PGtkDialog;
  9. EMask : PGtkEntry;
  10. LEMAsk : PGtkLabel;
  11. HBox : PGtkBox;
  12. OKButton,
  13. CancelButton : PGtkButton;
  14. Mask : ShortString;
  15. CallBack : TMaskCallBack;
  16. CallBackData : Pointer;
  17. end;
  18. PMaskForm = ^TMaskForm;
  19. Function NewMaskForm : PMaskForm;
  20. Implementation
  21. Const
  22. SEnterMask : PChar = 'Enter new file mask';
  23. SNewMask : PChar = 'New mask';
  24. SOK : PChar = ' OK ';
  25. SCancel : PChar = ' Cancel ';
  26. Procedure ApplyMask(Widget : PGtkWidget; Window : PMaskForm);cdecl;
  27. begin
  28. With Window^ do
  29. begin
  30. Mask:=StrPas(gtk_entry_get_text(EMask));
  31. If (CallBack<>Nil) then
  32. CallBack(Mask,CallBackData);
  33. end;
  34. end;
  35. Procedure DestroyMaskForm(Widget : PGtkWidget; Window : PMaskForm);cdecl;
  36. begin
  37. Dispose(Window);
  38. end;
  39. Function NewMaskForm : PMaskForm;
  40. begin
  41. Result:=New(PMaskForm);
  42. With Result^ do
  43. begin
  44. Window:=PGtkDialog(gtk_dialog_new);
  45. gtk_window_set_title(PgtkWindow(Window),SEnterMask);
  46. gtk_widget_set_usize(PGtkWidget(Window),350,150);
  47. gtk_window_set_policy(PgtkWindow(Window),0,0,0);
  48. gtk_window_set_position(PGtkWindow(Window),GTK_WIN_POS_CENTER);
  49. OKButton:=PGtkButton(gtk_button_new_with_label(SOK));
  50. CancelButton:=PGtkButton(gtk_button_new_with_label(SCancel));
  51. gtk_box_pack_end(PgtkBox(Window^.action_area),PGtkWidget(Okbutton),False,False,5);
  52. gtk_box_pack_end(PgtkBox(Window^.action_area),PGtkWidget(Cancelbutton),False,False,5);
  53. Emask:=PGtkEntry(gtk_entry_new_with_max_length(255));
  54. LEMask:=PGtkLabel(gtk_label_new(SNewMask));
  55. HBox:=PGtkBox(gtk_hbox_new(False,8));
  56. gtk_box_pack_start(PgtkBox(HBox),PGtkWidget(LEMask),True,False,0);
  57. gtk_box_pack_start(PgtkBox(HBox),PGtkWidget(EMask),True,False,0);
  58. gtk_box_pack_start(PGtkBox(Window^.vbox),PGtkWidget(HBox),True,True,10);
  59. gtk_window_set_modal(PGtkWindow(Window),TRUE);
  60. gtk_signal_connect(PgtkObject(OKButton),'clicked',
  61. TGtkSignalFunc(@ApplyMask),Result);
  62. gtk_signal_connect_object(PgtkObject(OKButton),'clicked',
  63. GTK_SIGNAL_FUNC(@gtk_widget_destroy),
  64. PGTKOBJECT(Window));
  65. gtk_signal_connect_object(PgtkObject(CancelButton),'clicked',
  66. GTK_SIGNAL_FUNC(@gtk_widget_destroy),
  67. PGTKOBJECT(Window));
  68. gtk_signal_connect(PgtkObject(Window),'destroy',
  69. TGtkSignalFunc(@DestroyMaskForm),Result);
  70. CallBack:=Nil;
  71. CallBackdata:=Nil;
  72. end;
  73. end;
  74. end.