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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
unit fileedit;
{$mode objfpc}
{$H+}
Interface
uses gtk,gdk,glib;
Type
PGtkFileEdit = ^TGtkFileEdit;
TGtkFileEdit = Record
Box : TGtkHBox;
Edit : PGtkEntry;
Button : PGtkButton;
Image : PGtkPixmap;
Dialog : PGtkFileSelection;
end;
PGtkFileEditClass = ^TGtkFileEditClass;
TGtkFileEditClass = Record
Parent_Class : TgtkHBoxClass;
DefaultPixmap : PGdkPixmap;
DefaultBitMap : PGdkBitmap;
end;
Function GtkFileEdit_get_type : Guint;cdecl;
Function GtkFileEdit_new : PGtkWidget;cdecl;
Procedure GtkFileEdit_set_filename (Obj : PGtkFileEdit; FileName : String);cdecl;
Function GtkFileEdit_get_filename (Obj : PGtkFileEdit) : String;cdecl;
Implementation
Const
GtkFileEditType : guint = 0;
Procedure GtkFileEditClassInit (CObj : PGtkFileEditClass);cdecl;
begin
With Cobj^ do
DefaultPixMap:=gdk_pixmap_create_from_xpm(Nil,@DefaultBitmap,
Nil,'fileopen.xpm');
end;
procedure GtkFileEditButtonClick (Obj : PGtkObject; Data : PGtkFileEdit);cdecl;forward;
Procedure GtkFileEditInit (Obj : PGtkFileEdit);cdecl;
Var
PClass : PGtkFileEditClass;
begin
PClass:=PGtkFileEditClass(PGtkObject(Obj)^.klass);
With Obj^ do
begin
Edit := PgtkEntry(gtk_entry_new);
Button := PgtkButton(gtk_button_new);
Image := PgtkPixMap(gtk_pixmap_new(PClass^.DefaultPixmap,
PClass^.DefaultBitmap));
gtk_container_add(PGtkContainer(Button),PGtkWidget(Image));
gtk_box_pack_start(PgtkBox(Obj),PGtkWidget(Edit),True,True,0);
gtk_box_pack_start(PgtkBox(Obj),PGtkWidget(Button),False,True,0);
gtk_signal_connect(PgtkObject(Button),'clicked',
TGtkSignalFunc(@GtkFileEditButtonClick),Obj);
end;
gtk_widget_show_all(PGtkWidget(Obj));
end;
Function GtkFileEdit_get_type : Guint;cdecl;
Const
GtkFileEditInfo : TGtkTypeInfo =
(type_name : 'GtkFileEdit';
object_size : SizeOf(TGtkFileEdit);
class_size : SizeOf(TGtkFileEditClass);
class_init_func : TGtkClassInitFunc(@GtkFileEditClassInit);
object_init_func : TGtkObjectInitFunc(@GtkFileEditInit);
reserved_1 : Nil;
reserved_2 : Nil;
base_class_init_func : Nil
);
begin
if (GtkFileEditType=0) then
GtkFileEditType:=gtk_type_unique(gtk_hbox_get_type,@GtkFileEditInfo);
Result:=GtkFileEditType;
end;
Function GtkFileEdit_new : PGtkWidget;cdecl;
begin
Result:=gtk_type_new(GtkFIleEdit_get_type)
end;
Procedure GtkFileEdit_set_filename (Obj : PGtkFileEdit; FileName : String);cdecl;
begin
gtk_entry_set_text(Obj^.Edit,PChar(FileName));
end;
Function GtkFileEdit_get_filename (Obj : PGtkFileEdit) : String;cdecl;
begin
Result:=StrPas(gtk_entry_get_text(Obj^.Edit));
end;
Procedure GtkStoreFileName(Button : PgtkButton;
TheRec : PGtkFileEdit); cdecl;
begin
With TheRec^ do
begin
gtk_entry_set_text(Edit,gtk_file_selection_get_filename(Dialog));
dialog:=Nil;
end;
end;
Procedure GtkFileEditButtonClick (Obj : PGtkObject; Data : PgtkFileEdit);cdecl;
Var
Dialog : PGtkFileSelection;
begin
Dialog := PGtkFileSelection(gtk_file_selection_new('Please select a file'));
Data^.Dialog:=Dialog;
gtk_signal_connect(PGTKObject(Dialog^.ok_button),'clicked',
TGTKSignalFunc(@GtkStoreFileName),data);
gtk_signal_connect_object (PGtkObject((Dialog)^.ok_button),'clicked',
TGTKSIGNALFUNC (@gtk_widget_destroy), PgtkObject(Dialog));
gtk_signal_connect_object (PGtkObject((Dialog)^.cancel_button),'clicked',
TGTKSIGNALFUNC (@gtk_widget_destroy), PgtkObject(Dialog));
gtk_widget_show(PgtkWidget(dialog));
end;
end.
|