1 2 3 4 5 6 7 8 10 17 18 19 20 21 22 23 24 25 26 27 28 29 31 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 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 92 93 94 95 97 100 102 103 104 105 106 108 109 110 111 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 139 140 141 142 144 145 146 148 149 153 154 155 156 157 158 159 160 161 163 164 166 167 168 169 170 171 172 173 174 175 176 180 181 182 183 185 186 187 188 189 190 192 193 194 195 196 197 198 200 201 202 203 204 205 206 207 208 209 210 211 212 213
| <?php $window = new GtkWindow(); $window->set_size_request(400, 240); $window->connect_simple('destroy', array('Gtk','main_quit')); $window->add($vbox = new GtkVBox());
// setup notebook
$notebook = new GtkNotebook(); $notebook->connect('switch-page', 'on_switch'); $vbox->pack_start($notebook);
// stores the names of the tab labels
$tab_labels = array('Label #1', 'Label #2', 'Tab 3 - TextView');
// add two tabs of GtkLabel
add_new_tab($notebook, new GtkLabel("Notebook 1")); add_new_tab($notebook, new GtkLabel("Notebook 2"));
// add a third tab of GtkTextView
$buffer = new GtkTextBuffer(); $view = new GtkTextView(); $view->set_buffer($buffer); $view->set_wrap_mode(Gtk::WRAP_WORD); add_new_tab($notebook, $view);
$window->show_all(); Gtk::main();
// add new tab
function add_new_tab($notebook, $widget) { global $tab_labels; static $page_num=0; $tab_label = $tab_labels[$page_num];
$eventbox = new GtkEventBox(); $label = new GtkLabel($tab_label); $eventbox->add($label); $label->show(); $eventbox->connect('button-press-event', 'on_tab', $page_num); $notebook->append_page($widget, $eventbox);
$menu_label = new GtkLabel($tab_label); $menu_label->set_alignment(0,0); $notebook->set_menu_label($widget, $menu_label);
global $tab_widget; static $page=0; $tab_widget[$page] = $widget; ++$page; ++$page_num; }
// function that is called when user click on tab
function on_tab($widget, $event, $page_num) { global $tab_labels; $tab_label = $tab_labels[$page_num]; if ($event->button==1) { echo "tab clicked = $tab_label (page $page_num)\n"; return false; }
if ($event->button==3) { popup_menu($page_num); return true; }
return false; }
function on_switch($notebook) { $switched_from = $notebook->get_current_page(); if ($switched_from==-1) return; global $tab_widget; $tab_label = $notebook->get_tab_label($tab_widget[$switched_from]); $tab_label_text = $tab_label->child->get_text(); echo "You have switched from: $tab_label_text (page $switched_from)\n"; }
function popup_menu($page_num) { global $menu, $notebook; //define the popup menu
$num_pages = $notebook->get_n_pages(); $menu_definition = array(); for ($i=0; $i<$num_pages; ++$i) { $widget = $notebook->get_nth_page($i); $tab_label = $notebook->get_tab_label($widget); $tab_label_text = $tab_label->child->get_text(); $menu_definition[] = $tab_label_text; }
$menu_definition = array_merge($menu_definition, array('<hr>', 'rename')); // note 1
$menu = show_popup_menu($menu_definition, $page_num); // show the popup menu
}
// show popup menu
function show_popup_menu($menu_definition, $page_num) { $menu = new GtkMenu(); $menu_id = 0; foreach($menu_definition as $menuitem_definition) { if ($menuitem_definition=='<hr>') { $menu->append(new GtkSeparatorMenuItem()); } else { $menu_item = new GtkMenuItem($menuitem_definition); $menu->append($menu_item); $menu_item->connect('activate', 'on_popup_menu_select', $menu_id, $page_num); ++$menu_id; } } $menu->show_all(); $menu->popup(); }
// process popup menu item selection
function on_popup_menu_select($menu_item, $menu_id, $page_num) { global $notebook; global $tab_labels;
$item = $menu_item->child->get_label(); echo "popup menu selected: $item ($menu_id / $page_num)\n"; if ($menu_id<3) { // user wants to change tab
$notebook->set_current_page($menu_id); // change tab
echo "New tab selected: $item (page $menu_id)\n"; } elseif ($menu_id==3) { // user chooses rename
$tab_label = $tab_labels[$page_num]; $new_name = prompt("Please enter new name for tab:", $tab_label); // note 2
global $tab_widget; $tab_label = $notebook->get_tab_label($tab_widget[$page_num]); $tab_label->child->set_text($new_name); // note 3
$tab_labels[$page_num] = $new_name; // note 4
} }
//function to prompt for user data
function prompt($label, $org_str) { $prompt = new Prompt($label, $org_str); // creates a new prompt
$input = $prompt->entry->get_text(); // get the user input
return $input; // and returns the user input
}
class Prompt{
var $entry; // the user input
function Prompt($label, $org_str) { $dialog = new GtkDialog('Prompt', null, Gtk::DIALOG_MODAL); $dialog->set_position(Gtk::WIN_POS_CENTER_ALWAYS); $top_area = $dialog->vbox; $top_area->pack_start($hbox = new GtkHBox()); $stock = GtkImage::new_from_stock(Gtk::STOCK_DIALOG_QUESTION, Gtk::ICON_SIZE_DIALOG); $hbox->pack_start($stock, 0, 0); $hbox->pack_start(new GtkLabel($label)); $this->entry = new GtkEntry(); $this->entry->set_text($org_str); $hbox->pack_start($this->entry, 0, 0); $hbox->pack_start(new GtkLabel(' '), 0, 0);
$dialog->add_button(Gtk::STOCK_OK, Gtk::RESPONSE_OK);
$buttons = $dialog->action_area->get_children(); $button_ok = $buttons[0]; // get the ID of the OK button
// simulate button click when user press enter
$this->entry->connect('activate', array(&$this, 'on_enter'), $button_ok);
$dialog->set_has_separator(false); $dialog->show_all(); $dialog->run(); $dialog->destroy(); }
// simulate button click when user press enter
function on_enter($entry, $button) { $button->clicked(); }
}
?> |