summaryrefslogtreecommitdiff
path: root/fpcdocs/gtk4ex/frmmask.pp
blob: 72a98390909b9290c0a83b0a8f779aada224016b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
unit frmmask;

{$mode objfpc}

Interface

uses glib,gdk,gtk;

Type
  TMaskCallBack = Procedure (Mask : String; Data : Pointer);
  TMaskForm = Record
    Window : PGtkDialog;
    EMask : PGtkEntry;
    LEMAsk : PGtkLabel;
    HBox : PGtkBox;
    OKButton,
    CancelButton : PGtkButton;
    Mask : ShortString;
    CallBack : TMaskCallBack;
    CallBackData : Pointer;
  end;
  PMaskForm = ^TMaskForm;

Function NewMaskForm : PMaskForm;

Implementation

Const
  SEnterMask : PChar = 'Enter new file mask';
  SNewMask : PChar = 'New mask';
  SOK : PChar = ' OK ';
  SCancel : PChar = ' Cancel ';

Procedure ApplyMask(Widget : PGtkWidget; Window : PMaskForm);cdecl;

begin
  With Window^ do
    begin
    Mask:=StrPas(gtk_entry_get_text(EMask));
    If (CallBack<>Nil) then
      CallBack(Mask,CallBackData);
    end;
end;

Procedure DestroyMaskForm(Widget : PGtkWidget; Window : PMaskForm);cdecl;

begin
  Dispose(Window);
end;

Function NewMaskForm : PMaskForm;

begin
  Result:=New(PMaskForm);
  With Result^ do
    begin
    Window:=PGtkDialog(gtk_dialog_new);
    gtk_window_set_title(PgtkWindow(Window),SEnterMask);
    gtk_widget_set_usize(PGtkWidget(Window),350,150);
    gtk_window_set_policy(PgtkWindow(Window),0,0,0);
    gtk_window_set_position(PGtkWindow(Window),GTK_WIN_POS_CENTER);
    OKButton:=PGtkButton(gtk_button_new_with_label(SOK));
    CancelButton:=PGtkButton(gtk_button_new_with_label(SCancel));
    gtk_box_pack_end(PgtkBox(Window^.action_area),PGtkWidget(Okbutton),False,False,5);
    gtk_box_pack_end(PgtkBox(Window^.action_area),PGtkWidget(Cancelbutton),False,False,5);
    Emask:=PGtkEntry(gtk_entry_new_with_max_length(255));
    LEMask:=PGtkLabel(gtk_label_new(SNewMask));
    HBox:=PGtkBox(gtk_hbox_new(False,8));
    gtk_box_pack_start(PgtkBox(HBox),PGtkWidget(LEMask),True,False,0);
    gtk_box_pack_start(PgtkBox(HBox),PGtkWidget(EMask),True,False,0);
    gtk_box_pack_start(PGtkBox(Window^.vbox),PGtkWidget(HBox),True,True,10);
    gtk_window_set_modal(PGtkWindow(Window),TRUE);
    gtk_signal_connect(PgtkObject(OKButton),'clicked',
                      TGtkSignalFunc(@ApplyMask),Result);
    gtk_signal_connect_object(PgtkObject(OKButton),'clicked',
                      GTK_SIGNAL_FUNC(@gtk_widget_destroy),
                      PGTKOBJECT(Window));
    gtk_signal_connect_object(PgtkObject(CancelButton),'clicked',
                      GTK_SIGNAL_FUNC(@gtk_widget_destroy),
                      PGTKOBJECT(Window));
    gtk_signal_connect(PgtkObject(Window),'destroy',
                      TGtkSignalFunc(@DestroyMaskForm),Result);
    CallBack:=Nil;
    CallBackdata:=Nil;
    end;
end;

end.