-------------------------------------------------------------------------------- --# Notebook with custom tabs -------------------------------------------------------------------------------- -- This is an overly-complex demo which uses custom-designed tabs. -- Don't think you have to do all this just to use a normal notebook widget -------------------------------------------------------------------------------- include GtkEngine.e constant docs = `Notebook with custom tabs Clicking on the tab title changes notebook pages, but clicking on the red stop icon calls your Eu function, which, in this case, removes the page. ` constant win = create(GtkWindow,"border=10,size=300x300,position=1,$destroy=Quit") constant panel = create(GtkBox,"orientation=VERTICAL") add(win,panel) constant notebook = create(GtkNotebook,"background=lightyellow,popup enable=TRUE") add(panel,notebook) constant doclbl = create(GtkLabel,{ {"margin top",30}, {"markup",docs}}) add(panel,doclbl) ------------------------------- -- Build custom notebook tabs; ------------------------------- -- read and size image once for all buttons; constant stop = create(GdkPixbuf,"thumbnails/icon-stop.png",15,15) -- create format for page contents; constant fmt = ` This text is on page %d ` object pg = repeat(0,5), tab = pg, lbl = pg, btn = pg for i = 1 to length(pg) do -- create a page and add it to the notebook; -- notebook pages must be a container or other widget, -- such as an image or the calendar, etc, or the page won't show pg[i] = create(GtkBox,VERTICAL) -- container for page content; lbl[i] = create(GtkLabel) -- label to hold "Page #" text set(lbl[i],"markup",sprintf(fmt,i)) -- "This text is on page ..." set(lbl[i],"justify",GTK_JUSTIFY_CENTER) add(pg[i],lbl[i]) -- add to container -- create a custom tab for the page; tab[i] = create(GtkBox,HORIZONTAL) -- container for tab content; lbl[i] = create(GtkLabel,sprintf("Page %d",i)) -- tab label -- add the stop image to a button so it's clickable; -- btn click is connected to RemovePage function; btn[i] = create(GtkToolButton,create(GtkImage,stop)) set(btn[i],"tooltip text","Click here to remove this tab") connect(btn[i],"clicked","RemovePage",pg[i]) add(tab[i],{lbl[i],btn[i]}) -- add label and button to tab show_all(tab[i]) -- must show contents, won't show custom tabs automatically set(notebook,"append page",pg[i],tab[i]) -- add a page with this tab end for show_all(win) main() ------------------------------------------------ global function RemovePage(atom ctl, object pg) ------------------------------------------------ -- we have to get the CURRENT page number assigned to pg, -- since it changes as pages are removed (or added, reordered, etc) pg = get(notebook,"page num",pg) display("Remove page:[]",pg) -- current # of page, NOT the number shown on the tab! set(notebook,"remove page",pg) -- get rid of it return 1 end function