mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-06 19:06:03 +02:00
237 lines
5.4 KiB
ObjectPascal
237 lines
5.4 KiB
ObjectPascal
{ Demo: complete pop-ups.
|
|
* test font/cursor change
|
|
* test attaching pup to menu
|
|
}
|
|
program popup;
|
|
|
|
uses xforms,strings;
|
|
|
|
var
|
|
pup : PFL_FORM;
|
|
done, pret, b1, b2, b3, menu : PFL_OBJECT;
|
|
|
|
var
|
|
aa : TFL_IOPT;
|
|
mask : cardinal;
|
|
|
|
|
|
const
|
|
subm : longint = -1;
|
|
m : longint = -1;
|
|
ssm : longint = 0;
|
|
n1 : longint = -1;
|
|
n2 : longint = -1;
|
|
n : longint = 0;
|
|
|
|
{ post-handler }
|
|
function post(ob : PFL_OBJECT; ev : Longint; mx,y : TFL_Coord; key : longint; xev : pointer) : Longint;
|
|
|
|
begin
|
|
if (n1 = -1) then
|
|
begin
|
|
n1 := fl_defpup(FL_ObjWin(ob),'line1|line2');
|
|
fl_setpup_shadow(n1,0);
|
|
fl_setpup_bw(n1,0);
|
|
fl_setpup_pad(n1,3,0);
|
|
|
|
n2 := fl_defpup(FL_ObjWin(ob),'button1|button2');
|
|
fl_setpup_shadow(n2,0);
|
|
fl_setpup_bw(n2,-1);
|
|
fl_setpup_pad(n2,3,0);
|
|
end;
|
|
|
|
if (ev = FL_ENTER) then
|
|
begin
|
|
if (ob=b3) then
|
|
fl_show_oneliner('button3',ob^.form^.x+ob^.x,
|
|
ob^.form^.y+ob^.y + ob^.h + 5)
|
|
else
|
|
begin
|
|
fl_setpup_position(ob^.form^.x+ob^.x, ob^.form^.y+ob^.y+ob^.h + 5);
|
|
if ob=b1 then
|
|
fl_showpup(n1)
|
|
else
|
|
fl_showpup(n2);
|
|
end
|
|
end
|
|
else if(ev <> FL_MOTION) then
|
|
begin
|
|
if (ob=b3) then
|
|
fl_hide_oneliner
|
|
else
|
|
if ob=b1 then
|
|
fl_hidepup(n1)
|
|
else
|
|
fl_hidepup(n2);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure show_return_val(i : longint);
|
|
|
|
var
|
|
buf : string[128];
|
|
|
|
begin
|
|
str(i,buf);
|
|
buf:= 'Returned '+buf;
|
|
if i>0 then
|
|
buf:=buf+'('++strpas(fl_getpup_text(m,i))+')'#0;
|
|
|
|
fl_set_object_label(pret, @buf[1]);
|
|
end;
|
|
|
|
function ssm_cb(a : longint) : longint;
|
|
begin
|
|
show_return_val(a);
|
|
ssm_cb:=a;
|
|
end;
|
|
|
|
procedure do_pup(ob : PFL_OBJECT; q : longint);
|
|
|
|
begin
|
|
if (subm = -1) then
|
|
begin
|
|
ssm := fl_newpup(FL_ObjWin(ob));
|
|
subm := fl_newpup(FL_ObjWin(ob));
|
|
m := fl_newpup(FL_ObjWin(ob));
|
|
|
|
{ Problem, variable nr. of arguments in c code !!!!}
|
|
{ fl_addtopup(ssm,'SubSubM%F%t',ssm_cb); }
|
|
fl_addtopup(ssm,'SSMItem20%x20%R1');
|
|
fl_addtopup(ssm,'SSMItem21%x21%r1');
|
|
fl_addtopup(ssm,'SSMItem22%x22%r1%l');
|
|
fl_addtopup(ssm,'SSMitem30%x30%R2');
|
|
fl_addtopup(ssm,'SSMItem31%x31%r2');
|
|
fl_addtopup(ssm,'SSMItem32%x32%r2');
|
|
|
|
fl_addtopup(subm,'SubMenu%t');
|
|
fl_addtopup(subm,'SMItemA\tAlt-A%x10%h','#a');
|
|
fl_addtopup(subm,'SMItemB\tAlt-B%x11%h','#b');
|
|
fl_addtopup(subm,'SMItemC\tAlt-C%x12%h','#c');
|
|
fl_addtopup(subm,'SMItemD\tAlt-F5%x13%h%m','#&5',ssm);
|
|
fl_addtopup(subm,'SMItemE\tAlt-E%x14','#E');
|
|
|
|
fl_setpup_mode(subm, 14, FL_PUP_GREY);
|
|
|
|
fl_addtopup(m,'PopUP%t');
|
|
fl_addtopup(m,'MenuItem1%h','1#1');
|
|
|
|
fl_addtopup(m,'MenuItem2%h','2#2');
|
|
fl_setpup_submenu(m, 2, subm);
|
|
fl_addtopup(m,'MenuItem3%h','3#3');
|
|
fl_addtopup(m,'MenuItem4%h','4#4');
|
|
end;
|
|
|
|
|
|
if (fl_get_button_numb(ob) >= FL_SHORTCUT) then
|
|
fl_setpup_position(ob^.form^.x + ob^.x,
|
|
ob^.form^.y + ob^.y + ob^.h);
|
|
|
|
show_return_val(fl_dopup(m));
|
|
|
|
{ test if changing size/style ok }
|
|
n := not(n);
|
|
if n<>0 then
|
|
begin
|
|
fl_setpup_fontsize(14);
|
|
fl_setpup_fontstyle(FL_TIMES_STYLE);
|
|
fl_setpup_cursor(m, XC_hand2);
|
|
end
|
|
else
|
|
begin
|
|
fl_setpup_fontsize(12);
|
|
fl_setpup_fontstyle(FL_BOLDITALIC_STYLE);
|
|
fl_setpup_cursor(m,XC_sb_right_arrow);
|
|
end;
|
|
end;
|
|
|
|
procedure init_menu;
|
|
var
|
|
mm,smm : longint;
|
|
|
|
begin
|
|
mm := fl_newpup(fl_default_win);
|
|
fl_setpup_bw(mm, -2);
|
|
fl_setpup_shadow(mm, 0);
|
|
smm := fl_newpup(0);
|
|
fl_setpup_shadow(smm, 0);
|
|
|
|
fl_addtopup(mm,'MenuItem1|MenuItem2%m|MenuItem3',smm);
|
|
fl_addtopup(smm,'SubItem1%x11|SubItem2%x12|SubItem3%x13');
|
|
|
|
|
|
{ attach pup to menu }
|
|
|
|
fl_set_menu_popup(menu, mm);
|
|
end;
|
|
|
|
|
|
procedure do_menu(ob : PFL_OBJECT; data : longint);
|
|
var
|
|
buf : string[128];
|
|
|
|
begin
|
|
str(fl_get_menu(ob),buf);
|
|
if (fl_get_menu(ob) >= 0) then
|
|
buf:=buf+strpas(fl_get_menu_text(ob));
|
|
buf:=buf+#0;
|
|
|
|
fl_set_object_label(pret, @buf[1]);
|
|
end;
|
|
|
|
procdure done_cb(ob : PFL_OBJECT; data : longint);
|
|
|
|
begin
|
|
halt(0)
|
|
end;
|
|
|
|
procedure create_form_pup;
|
|
|
|
var
|
|
obj : PFL_OBJECT ;
|
|
|
|
begin
|
|
if (pup<>nil) then
|
|
exit;
|
|
pup := fl_bgn_form(FL_UP_BOX,260,210);
|
|
obj := fl_add_button(FL_NORMAL_BUTTON,150,150,90,35,'Done');
|
|
fl_set_object_callback(obj,PFL_CALLBACKPTR(@done_cb), 0);
|
|
done := obj;
|
|
obj := fl_add_button(FL_MENU_BUTTON,30,90,100,30,'PopUp');
|
|
fl_set_button_shortcut(obj,'Pp#p',1);
|
|
fl_set_object_callback(obj, PFL_CALLBACKPTR(@do_pup), 0);
|
|
obj := fl_add_menu(FL_PULLDOWN_MENU,160,95,60,25,'Menu');
|
|
fl_set_object_callback(obj, PFL_CALLBACKPTR(@do_menu), 0);
|
|
menu := obj;
|
|
obj := fl_add_text(FL_NORMAL_TEXT,20,60,220,30,'');
|
|
fl_set_object_lalign(obj,FL_ALIGN_CENTER);
|
|
pret := obj;
|
|
b1 := fl_add_button(FL_NORMAL_BUTTON, 20, 10, 60, 30,'Button1');
|
|
b2 := fl_add_button(FL_NORMAL_BUTTON, 90, 10, 60, 30,'Button2');
|
|
b3 := fl_add_button(FL_NORMAL_BUTTON, 160, 10, 60, 30,'Button3');
|
|
fl_end_form();
|
|
end;
|
|
|
|
|
|
begin
|
|
mask := FL_PDVisual;
|
|
aa.vclass := FL_DefaultVisual;
|
|
fl_set_defaults(mask, @aa);
|
|
|
|
fl_initialize(@argc, argv, 'FormDemo', nil, 0);
|
|
|
|
create_form_pup();
|
|
|
|
{ initialize }
|
|
|
|
fl_set_object_posthandler(b1, @post);
|
|
fl_set_object_posthandler(b2, @post);
|
|
fl_set_object_posthandler(b3, @post);
|
|
|
|
fl_show_form(pup, FL_PLACE_MOUSE, FL_TRANSIENT,'PupDemo');
|
|
init_menu;
|
|
|
|
fl_do_forms;
|
|
end.
|