sw_parent = nil; sw_float_parent = nil; sw_destroyed_handler = 0; function scrolled_windows_delete_cb (scrollwin) { scrollwin.reparent(sw_parent); gtk_signal_disconnect(sw_parent, sw_destroyed_handler); sw_float_parent = nil; sw_parent = nil; sw_destroyed_handler = 0; FALSE; } function scrolled_windows_destroy_cb (scrollwin) { sw_float_parent.destroy(); sw_float_parent = nil; sw_parent = nil; sw_destroyed_handler = 0; } function scrolled_windows_remove (scrollwin) { if (sw_parent) { scrollwin.reparent(sw_parent); sw_float_parent.destroy(); gtk_signal_disconnect (sw_parent, sw_destroyed_handler); sw_float_parent = nil; sw_parent = nil; sw_destroyed_handler = 0; } else { sw_parent = scrollwin.parent; sw_float_parent = new(GtkWindow); sw_float_parent.type = GTK_WINDOW_TOPLEVEL; sw_float_parent.set_default_size(200, 200); scrollwin.reparent(sw_float_parent); sw_float_parent.show(); sw_destroyed_handler = sw_parent.signal("destroy", `scrolled_windows_destroy_cb(@scrollwin)); sw_float_parent.signal("delete_event", `scrolled_windows_delete_cb(@scrollwin)); } } function create_scrolled_windows () { local scrolled_window, table, button, i, j; win_scrolled_windows = new (GtkDialog); win_scrolled_windows.signal ("destroy", #win_scrolled_windows = nil); win_scrolled_windows.title = "dialog"; win_scrolled_windows.border_width = 0; vbox = car(win_scrolled_windows.children()); separator = car(vbox.children()); action_area = cadr(vbox.children()); scrolled_window = new(GtkScrolledWindow); scrolled_window.border_width = 10; scrolled_window.set_policy(GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); vbox.pack_start(scrolled_window, TRUE, TRUE, 0); scrolled_window.show(); table = new(GtkTable); table.n_rows = 20; table.n_columns = 20; table.set_row_spacings(10); table.set_col_spacings(10); scrolled_window.add_with_viewport(table); table.set_focus_hadjustment(scrolled_window.get_hadjustment()); table.set_focus_vadjustment(scrolled_window.get_vadjustment()); for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) { labelstring = string("button \(", i, ",", j, "\)\n"); button = new(GtkButton); button.label = labelstring; table.attach_defaults(button, i, i+1, j, j+1); button.show(); } button = new (GtkButton); button.label = "Close"; button.signal ("clicked", `(@win_scrolled_windows).destroy()); action_area.pack_start (button, TRUE, TRUE, 0); button.can_default = TRUE; button.grab_default(); button.show(); button = new (GtkButton); button.label = "Reparent Out"; button.signal ("clicked", `scrolled_windows_remove(@scrolled_window)); action_area.pack_start (button, TRUE, TRUE, 0); button.can_default = TRUE; button.grab_default(); button.show(); win_scrolled_windows.set_default_size(300, 300); win_scrolled_windows.show_all(); win_scrolled_windows; } function main () { local window, win_scrolled_windows; TRUE=1; FALSE=0; window = create_scrolled_windows (); window.signal ("destroy", #exit_program(0)); init_ipc("scrolled_wins", "scrolled_winsq"); gtk_main (); }
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.