Current File : //home/strato/chroot/opt/RZphp72/includes/Gtk2/VarDump.php
<?php
require_once 'Gtk2/VarDump/Pane.php';

/**
*   Simple class for viewing PHP variables a var_dump() way
*    in PHP-Gtk - reloaded for PHP-Gtk2.
*
*   It displays arrays and objects in a tree with all their
*    children and subchildren and subsubchildren and ...
*
*   The class is memory-saving as it loads only the children
*    which are currently visible. If the user expands a row,
*    the next children will be loaded.
*
*   The tree has a small convenience feature: Left-click a row,
*    and it will be expanded. Right-click it, and it collapses.
*   Double-click or middle-click it, and all rows below the
*    current one will be expanded. They will be expanded "all" only
*    if they have been expanded before, as loading them recursively
*    is very dangerous (if there are loops).
*
*   Note that Gtk2_VarDump::display() opens its own Gtk::main()-Loop,
*    so your own program will stop executing until the VarDump window
*    is closed.
*
*   Usage:
*   require_once('Gtk2/VarDump.php');
*   $ar = new array(1, 2, 3, 4, 'key' => array('this','is','cool');
*   Gtk2_VarDump::display($ar);
*
*   Layout:
*   +--[Window title]------------------------------------------------+
*   |+--------------------------+/+---------------------------------+|
*   || Node      | Type         ^\| Key    | Type      | Value      ^|
*   ||                          |/|                                 ||
*   || Left tree with objects   |\|  Right list with simple values  ||
*   ||   and arrays             |/|     (int,float,string,...)      ||
*   ||                          v\|                                 v|
*   |+--------------------------+/+---------------------------------+|
*   |                             [OK]                               |
*   +----------------------------------------------------------------+
*
*   @author Christian Weiske <cweiske@php.net>
*/
class Gtk2_VarDump extends GtkWindow
{
    /**
    *   The tree on the left side of the window.
    *   @var GtkTreeView
    */
    protected $trTree    = null;

    /**
    *   List on the right side of the window.
    *   @var GtkTreeView
    */
    protected $trValues  = null;

    /**
    *   Model (data store) for the tree on the left.
    *   @var GtkTreeStore
    */
    protected $modTree   = null;

    /**
    *   Model (data store) for the list on the right.
    *   @var GtkListStore
    */
    protected $modValues = null;



    /**
    *   Create a new Gtk2_VarDump window.
    *   When the window is closed, a main loop is stopped.
    *
    *   @param mixed    $variable   The variable to inspect
    *   @param string   $title      The title for the window and the variable
    */
    public function __construct($variable, $title = 'Gtk2_VarDump')
    {
        parent::__construct();
        $this->buildDialog($title);
        $this->hpane->setVariable($variable, $title);
    }//public function __construct($variable, $title = 'Gtk2_VarDump')



    /**
    *   Create a new Gtk2_VarDump window and keep it displayed
    *   in its own Gtk::main()-loop.
    *   This main loop is stopped as soon the window is closed
    *
    *   @param mixed    $variable   The variable to inspect
    *   @param string   $title      The title for the window and the variable
    */
    public static function display($variable, $title = 'Gtk2_VarDump')
    {
        $vd = new Gtk2_VarDump($variable, $title);
        $vd->show_all();
        Gtk::main();
    }//public static function display($variable, $title = 'Gtk2_VarDump')



    /**
    *   Creates the dialog content, loads the tree models and so
    *
    *   @param  string  $title  The title for the window
    */
    protected function buildDialog($title)
    {
        $this->set_title($title);
        $this ->connect_simple('destroy', array($this, 'close'));

        $btnOk = GtkButton::new_from_stock(Gtk::STOCK_OK);
        $btnOk->connect_simple('clicked', array($this, 'close'));

        $vboxMain    = new GtkVBox();
        $this->hpane = new Gtk2_VarDump_Pane();

        $vboxMain->pack_start($this->hpane, true , true , 0);
        $vboxMain->pack_end(  $btnOk      , false, false, 0);

        $this->add($vboxMain);

        $btnOk->set_flags($btnOk->flags() + Gtk::CAN_DEFAULT);
        $this->set_default($btnOk);
        $this->set_default_size(600, 400);
    }//protected function buildDialog($title)



    /**
    *   Called when the user clicks "OK" or tries to close the window.
    *   This function quits the main loop opened in the constructor.
    */
    public function close()
    {
        //quit our own main loop
        $this->destroy();
        Gtk::main_quit();
    }//public function close()

}//class Gtk2_VarDump extends GtkWindow
?>