All pastes #366006 Raw Edit

Miscellany

public text v1 · immutable
#366006 ·published 2007-02-21 12:39 UTC
rendered paste body
<?php

// readminder :
//  GtkVPaned
//   add1 : top
//   add2 : bottom
//  GtkHPaned
//   add1 : left
//   add2 : right

$window = new GtkWindow();
$window->set_title("Interface Prototype");
$window->connect_simple('destroy', array('gtk', 'main_quit'));

$bottomlabele = new GtkLabel("show/hide bottom pane");
$bottomlabel = new gtkeventbox();
$bottomlabel->add($bottomlabele);

$notebook = new GtkFrame();
$notebook->set_shadow_type(Gtk::SHADOW_IN);
$vbox = new GtkVbox();
$vbox->pack_end($bottomlabel,false,false);
$hbox = new GtkHbox();

$leftlabele = new gtklabel("show/hide left pane");
$rightlabele = new gtklabel("show/hide right pane");
$leftlabele->set_angle(270);
$rightlabele->set_angle(90);
$leftlabel = new gtkeventbox();
$leftlabel->add($leftlabele);
$rightlabel = new gtkeventbox();
$rightlabel->add($rightlabele);

$bottompane = new GtkVPaned();
$leftpane = new GtkHPaned();
$rightpane =  new GtkHPaned();

$vbox->pack_start($leftpane);
$leftpane->add2($rightpane);
$rightpane->add1($hbox);

$hbox->pack_start($leftlabel,false,false);
$hbox->pack_start($notebook);
$hbox->pack_start($rightlabel,false,false);

$bottompane->add1($vbox);

// add items to bottom right and left frames
$bottom = new GtkFrame();
$bottom->set_shadow_type(Gtk::SHADOW_IN);
$left = new GtkFrame();
$left->set_shadow_type(Gtk::SHADOW_IN);
$right = new GtkFrame();
$right->set_shadow_type(Gtk::SHADOW_IN);
$bottompane->add2($bottom);
$leftpane->add1($left);
$rightpane->add2($right);

$basebox = new gtkvbox();

// --start--
// define menu definition
$menu_definition = array( // note 1
    '_File' => array('_New', '_Open', '_Close', '_Quit'),
    '_Test' => array('Test1', 'Test2', 'Test3', '<hr>',
                array('Selection 1', 'Selection 2', 'Selection 3'), // note 2
                '<hr>', 'Test4')
);

// define menu definition
$toolbar_definition = array('New', 'Open', 'Save', '<hr>', // note 1
    'Cut', 'Copy', 'Paste', '<hr>', 
    'Undo','Redo'); 

setup_menu($basebox, $menu_definition); // note 1
setup_toolbar($basebox, $toolbar_definition);

// setup menu
function setup_menu($vbox, $menus) { // note 1
    $menubar = new GtkMenuBar();
    $vbox->pack_start($menubar, 0, 0);
    foreach($menus as $toplevel => $sublevels) {
        $menubar->append($top_menu = new GtkMenuItem($toplevel));
        $menu = new GtkMenu();
        $top_menu->set_submenu($menu);
        foreach($sublevels as $submenu) {
            if (is_array($submenu)) { // set up radio menus
                $i=0;
                $radio[0] = null;
                foreach($submenu as $radio_item) {// note 3
                    $radio[$i] = new GtkRadioMenuItem($radio[0], $radio_item);
                    $menu->append($radio[$i]);
                    ++$i;
                }
                $radio[0]->set_active(1); // select the first item
            } else {
                if ($submenu=='<hr>') {
                    $menu->append(new GtkSeparatorMenuItem());
                } else {
                    $menu->append($menu_item = new GtkMenuItem($submenu));
                }
            }
        }
    }
}

// setup toolbar
function setup_toolbar($vbox, $toolbar_definition) { // note 1
    $toolbar = new GtkToolBar(); // note 2
    $vbox->pack_start($toolbar, 0, 0);
    foreach($toolbar_definition as $item) {
        if ($item=='<hr>') {
            $toolbar->insert(new GtkSeparatorToolItem(), -1);
        } else {
            $stock_image_name = 'Gtk::STOCK_'.strtoupper($item); // note 3
            if (defined($stock_image_name)) {
                $toolbar_item = GtkToolButton::new_from_stock(constant

($stock_image_name)); // note 4
                $toolbar->insert($toolbar_item, -1); // note 5
            }
        }
    }
}
// -- end --

$basebox->pack_end(new gtkstatusbar(),false,false);
$basebox->pack_start($bottompane);

$window->add($basebox);
$window->set_size_request(400,350);

$window->show_all();

$bottom->hide();
$left->hide();
$right->hide();

$leftlabel->connect_simple('button-press-event','hide_show',$left);
$rightlabel->connect_simple('button-press-event','hide_show',$right);
$bottomlabel->connect_simple('button-press-event','hide_show',$bottom);

Gtk::main();

function hide_show($pane){
    switch($pane->is_visible()){
        case true: $pane->hide_all(); break;
        case false: $pane->show_all(); break;
    }
}

?>