PHP-GTK2 Newsletter

PHP-GTK2 Tips & Techniques
FREE Newsletter
by kksou



Sample Code 92: How to display a popup menu for GtkNotebook tab - Part 2?
Written by kksou   
Monday, 13 November 2006
Problem

You have displayed a popup menu when user right-click on the tab of GtkNotebook in Part 1.

However, you want to know which tab the user has selected from the popup menu as shown below:

How to display a popup menu for GtkNotebook tab - Part 2?


Solution

Note: By right, the signal 'select-page' should allow us to know the new tab the uesr has selected. However, I tried it and it didn't work as expected. Guess it's not implemented yet. Anyway, just like many other things in php-gtk2, there are more than one way to achieve the same thing. In this case, we can use the signal 'event' of GtkWidget to know which tab the user has selected.


Sample Code
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   
<?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->popup_enable();
$notebook->connect('switch-page', 'on_switch'); // note 1
$vbox->pack_start($notebook);

// add two tabs of GtkLabel
add_new_tab($notebook, new GtkLabel("Notebook 1\n\n
    Display popup menu and know which tab the user has selected."), 'Label #1');
add_new_tab($notebook, new GtkLabel('Notebook 2'), 'Label #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, 'Tab 3 - TextView');

$window->show_all();
Gtk::main();

// add new tab
function add_new_tab($notebook, $widget, $tab_label) {
    $eventbox = new GtkEventBox();
    $label = new GtkLabel($tab_label);
    $eventbox->add($label);
    $label->show();
    $eventbox->connect('button-press-event', 'on_tab', $tab_label);
    $notebook->append_page($widget, $eventbox);

    $menu_label = new GtkLabel($tab_label);
    $menu_label->set_alignment(0,0);
    $notebook->set_menu_label($widget, $menu_label);

    $widget->connect('event', 'on_event', $notebook); // note 2

    global $tab_widget;
    static $page=0;
    $tab_widget[$page] = $widget; // note 3
    ++$page;
}

// function that is called when user click on tab
  • Note that this is only 70% of the sample code. You have to be a registered member to see the entire sample code. Please login or register.
  • Registration is free and immediate.
  • Have some doubt about the registration? Please read this forum article.
Explanation

We make use of the code in How to display a popup menu for GtkNotebook tab - Part 1? to setup a tabbed GtkNotebook with popup menu.

What's new here:

  1. The signal 'switch-page' allow us to know the "old" tab (the page that is being switched from).
  2. the signal 'event' allow us to know the new tab that the user has selected.
  3. Save a copy of the tab label widget.
  4. Get the current page. Note that this is an integer indicating the page number.
  5. Get the widget of the tab label. Note that this is a GtkEventBox as we have set up earlier.
  6. From the eventbox, we get the label with $tab_label->child->get_text().

Related Links

User reviews

There are no user reviews yet.

Note: You have to be a registered member to leave a comment. Free registration here.

 
< Prev   Next >

Copyright © 2006-2008. kksou.com. All Rights Reserved