Location: PHPKode > projects > ZZ/OSS Installer > zic-1.1.0dev1/installer/lib/HTML/Progress/UI.php
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/3_0.txt.                                  |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | hide@address.com so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Author: Laurent Laville <hide@address.com>                   |
// +----------------------------------------------------------------------+
//
// $Id: UI.php,v 1.6 2003/11/15 13:30:26 Farell Exp $

/**
 * The HTML_Progress_UI class provides a basic look and feel 
 * implementation of a progress bar.
 *
 * @version    1.0
 * @author     Laurent Laville <hide@address.com>
 * @access     public
 * @category   HTML
 * @package    HTML_Progress
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
 * @todo       better aligment renders when auto-size progress is false
 */

require_once ('HTML/Common.php');

class HTML_Progress_UI extends HTML_Common
{
    /**
     * Whether the progress bar is horizontal or vertical.
     * The default is horizontal.
     *
     * @var        integer
     * @since      1.0
     * @access     private
     * @see        getOrientation(), setOrientation()
     */
    var $_orientation;

    /**
     * Whether the progress bar is filled in 'natural' or 'reverse' way.
     * The default fill way is 'natural'.
     *
     * <ul>
     * <li>since 0.5 : 'way'  =  bar fill way 
     *   <ul>
     *     <li>with Progress Bar Horizontal, 
     *              natural way is : left to right
     *        <br />reverse way is : right to left
     *     <li>with Progress Bar Vertical, 
     *              natural way is : down to up
     *        <br />reverse way is : up to down
     *   </ul>
     * </ul>
     *
     * @var        string
     * @since      1.0
     * @access     private
     * @see        getFillWay(), setFillWay()
     */
    var $_fillWay;

    /**
     * The cell count of the progress bar. The default is 10.
     *
     * @var        integer
     * @since      1.0
     * @access     private
     * @see        getCellCount(), setCellCount()
     */
    var $_cellCount;

    /**
     * The progress bar's structure 
     *
     * <ul>
     * <li>['cell']
     *     <ul>
     *     <li>since 1.0 : 'id'             =  cell identifier mask
     *     <li>since 1.0 : 'class'          =  css class selector
     *     <li>since 0.1 : 'width'          =  cell width
     *     <li>since 0.1 : 'height'         =  cell height
     *     <li>since 0.1 : 'active-color'   =  active color
     *     <li>since 0.1 : 'inactive-color' =  inactive color
     *     <li>since 0.1 : 'spacing'        =  cell spacing
     *     <li>since 0.6 : 'color'          =  foreground color
     *     <li>since 0.6 : 'font-size'      =  font size
     *     <li>since 0.6 : 'font-family'    =  font family
     *     </ul>
     * <li>['border']
     *     <ul>
     *     <li>since 1.0 : 'class'  =  css class selector
     *     <li>since 0.1 : 'width'  =  border width
     *     <li>since 0.1 : 'style'  =  border style
     *     <li>since 0.1 : 'color'  =  border color
     *     </ul>
     * <li>['string']
     *     <ul>
     *     <li>sicne 1.0 : 'id'                =  string identifier
     *     <li>since 0.6 : 'width'             =  with of progress string
     *     <li>since 0.6 : 'height'            =  height of progress string
     *     <li>since 0.1 : 'font-family'       =  font family
     *     <li>since 0.1 : 'font-size'         =  font size
     *     <li>since 0.1 : 'color'             =  font color
     *     <li>since 0.6 : 'background-color'  =  background color
     *     <li>since 0.6 : 'align'             =  horizontal align  (left, center, right, justify)
     *     <li>since 0.6 : 'valign'            =  vertical align  (top, bottom, left, right)
     *     </ul>
     * <li>['progress']
     *     <ul>
     *     <li>since 1.0 : 'class'             =  css class selector
     *     <li>since 0.1 : 'background-color'  =  bar background color
     *     <li>since 1.0 : 'auto-size'         = compute best progress size
     *     <li>since 0.1 : 'width'             =  bar width
     *     <li>since 0.1 : 'height'            =  bar height
     *     </ul>
     * </ul>
     *
     * @var        array
     * @since      1.0
     * @access     private
     * @see        HTML_Progress::toArray()
     */
    var $_progress = array();

    /**
     * External Javascript file to override internal default code
     *
     * @var        string
     * @since      1.0
     * @access     private
     * @see        getScript(), setScript()
     */
    var $_script;

    /**
     * Package name used by Error_Raise functions
     *
     * @var        string
     * @since      1.0
     * @access     private
     */
    var $_package;


    /**
     * The progress bar's UI model class constructor
     *
     * Constructor Summary
     *
     * o Creates a natural horizontal progress bar that displays ten cells/units.
     *   <code>
     *   $html = new HTML_Progress_UI();
     *   </code>
     *
     * o Creates a natural horizontal progress bar with the specified cell count, 
     *   which cannot be less than 1 (minimum), but has no maximum limit.
     *   <code>
     *   $html = new HTML_Progress_UI($cell);
     *   </code>
     *
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     */
    function HTML_Progress_UI()
    {
        $this->_package = 'HTML_Progress_UI';
        Error_Raise::initialize($this->_package, array('HTML_Progress', '_getErrorMessage'));

        $args = func_get_args();

        switch (count($args)) {
         case 1:
            /*   int cell  */
            if (!is_int($args[0])) {
                return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'exception',
                    array('var' => '$cell',
                          'was' => $args[0],
                          'expected' => 'integer',
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);

            } elseif ($args[0] < 1) {
                return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                    array('var' => '$cell',
                          'was' => $args[0],
                          'expected' => 'greater or equal 1',
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);
            }
            $this->_cellCount = $args[0];
            break;
         default:
            $this->_cellCount = 10;
            break;
        }
        $this->_orientation = HTML_PROGRESS_BAR_HORIZONTAL;
        $this->_fillWay = 'natural';
        $this->_script = null;              // uses internal javascript code

        $this->_progress = array(
            'cell' => 
                array(
                    'id' => "progressCell%01s",
                    'class' => "cell",
                    'active-color' => "#006600",
                    'inactive-color' => "#CCCCCC",
                    'font-family' => "Courier, Verdana",
                    'font-size' => 8,
                    'color' => "#000000",
                    'width' => 15,
                    'height' => 20,
                    'spacing' => 2
                ),
            'border' => 
                array(
                    'class' => "progressBarBorder",
                    'width' => 0,
                    'style' => "solid",
                    'color' => "#000000"
                ),
            'string' => 
                array(
                    'id' => "installationProgress",
                    'width' => 50,
                    'font-family' => "Verdana, Arial, Helvetica, sans-serif",
                    'font-size' => 12,
                    'color' => "#000000",
                    'background-color' => "#FFFFFF",
                    'align' => "right",
                    'valign' => "right"
                ),
            'progress' => 
                array(
                    'class' => "progressBar",
                    'background-color' => "#FFFFFF",
                    'auto-size' => true
                )
        );
        $this->_updateProgressSize();   // updates the new size of progress bar
    }

    /**
     * Returns HTML_PROGRESS_BAR_HORIZONTAL or HTML_PROGRESS_BAR_VERTICAL,
     * depending on the orientation of the progress bar.
     * The default orientation is HTML_PROGRESS_BAR_HORIZONTAL.
     *
     * @return     integer
     * @since      1.0
     * @access     public
     * @see        setOrientation()
     */
    function getOrientation()
    {
        return $this->_orientation;
    }

    /**
     * Sets the progress bar's orientation, which must be HTML_PROGRESS_BAR_HORIZONTAL
     * or HTML_PROGRESS_BAR_VERTICAL.
     * The default orientation is HTML_PROGRESS_BAR_HORIZONTAL.
     *
     * @param      integer   $orient        Orientation (horizontal or vertical)
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        getOrientation()
     */
    function setOrientation($orient)
    {
        if (!is_int($orient)) {
            return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'exception',
                array('var' => '$orient',
                      'was' => gettype($orient),
                      'expected' => 'integer',
                      'paramnum' => 1), PEAR_ERROR_TRIGGER);

        } elseif (($orient != HTML_PROGRESS_BAR_HORIZONTAL) && 
                  ($orient != HTML_PROGRESS_BAR_VERTICAL)) {
            return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                array('var' => '$orient',
                      'was' => $orient,
                      'expected' => HTML_PROGRESS_BAR_HORIZONTAL.' | '.
                                    HTML_PROGRESS_BAR_VERTICAL,
                      'paramnum' => 1), PEAR_ERROR_TRIGGER);
        }

        $previous = $this->_orientation;    // gets previous orientation
        $this->_orientation = $orient;      // sets the new orientation

        if ($previous != $orient) {
            // if orientation has changed, we need to swap cell width and height
            $w = $this->_progress['cell']['width'];
            $h = $this->_progress['cell']['height'];

            $this->_progress['cell']['width']  = $h;
            $this->_progress['cell']['height'] = $w;
                                            
            $this->_updateProgressSize();   // updates the new size of progress bar
        }
    }

    /**
     * Returns 'natural' or 'reverse', depending of the fill way of progress bar.
     * For horizontal progress bar, natural way is from left to right, and reverse 
     * way is from right to left.
     * For vertical progress bar, natural way is from down to up, and reverse 
     * way is from up to down.
     * The default fill way is 'natural'.
     *
     * @return     string
     * @since      1.0
     * @access     public
     * @see        setFillWay()
     */
    function getFillWay()
    {
        return $this->_fillWay;
    }

    /**
     * Sets the progress bar's fill way, which must be 'natural' or 'reverse'.
     * The default fill way is 'natural'.
     *
     * @param      string    $way           fill direction (natural or reverse)
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        getFillWay()
     */
    function setFillWay($way)
    {
        if (!is_string($way)) {
            return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'exception',
                array('var' => '$way',
                      'was' => gettype($way),
                      'expected' => 'string',
                      'paramnum' => 1), PEAR_ERROR_TRIGGER);

        } elseif ((strtolower($way) != 'natural') && (strtolower($way) != 'reverse')) {
            return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                array('var' => '$way',
                      'was' => $way,
                      'expected' => 'natural | reverse',
                      'paramnum' => 1), PEAR_ERROR_TRIGGER);
        }
        $this->_fillWay = strtolower($way);
    }

    /**
     * Returns the number of cell in the progress bar. The default value is 10.
     *
     * @return     integer
     * @since      1.0
     * @access     public
     * @see        setCellCount()
     */
    function getCellCount()
    {
        return $this->_cellCount;
    }

    /**
     * Sets the number of cell in the progress bar
     *
     * @param      integer   $cells         Cell count on progress bar
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        getCellCount()
     * @tutorial   beginner.pkg#look-and-feel.cell-style
     */
    function setCellCount($cells)
    {
        if (!is_int($cells)) {
            return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'exception',
                array('var' => '$cells',
                      'was' => gettype($cells),
                      'expected' => 'integer',
                      'paramnum' => 1), PEAR_ERROR_TRIGGER);

        } elseif ($cells < 1) {
            return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                array('var' => '$cells',
                      'was' => $cells,
                      'expected' => 'greater or equal 1',
                      'paramnum' => 1), PEAR_ERROR_TRIGGER);
        }
        $this->_cellCount = $cells;

        $this->_updateProgressSize();   // updates the new size of progress bar
    }

    /**
     * Returns the common and private cell attributes. Assoc array (defaut) or string
     *
     * @param      bool      $asString      (optional) whether to return the attributes as string 
     *
     * @return     mixed
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        setCellAttributes()
     */
    function getCellAttributes($asString = false)
    {
        if (!is_bool($asString)) {
            return Error_Raise::exception($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT,
                array('var' => '$asString',
                      'was' => gettype($asString),
                      'expected' => 'boolean',
                      'paramnum' => 1));
        }

        $attr = $this->_progress['cell'];

        if ($asString) {
            return $this->_getAttrString($attr);
        } else {
            return $attr;
        }
    }

    /**
     * Sets the cell attributes for an existing cell.
     *
     * Defaults are:
     * <ul>
     * <li>Common :
     *     <ul>
     *     <li>id             = progressCell%01s
     *     <li>class          = cell
     *     <li>spacing        = 2
     *     <li>active-color   = #006600
     *     <li>inactive-color = #CCCCCC
     *     <li>font-family    = Courier, Verdana
     *     <li>font-size      = lowest value from cell width, cell height, and font size
     *     <li>color          = #000000
     *     <li>Horizontal Bar :
     *         <ul>
     *         <li>width      = 15
     *         <li>height     = 20
     *         </ul>
     *     <li>Vertical Bar :
     *         <ul>
     *         <li>width      = 20
     *         <li>height     = 15
     *         </ul>
     *     </ul>
     * </ul>
     *
     * @param      mixed     $attributes    Associative array or string of HTML tag attributes
     * @param      int       $cell          (optional) Cell index
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        getCellAttributes()
     * @tutorial   beginner.pkg#look-and-feel.cell-style
     */
    function setCellAttributes($attributes, $cell = null)
    {
        if (!is_null($cell)) {
            if (!is_int($cell)) {
                return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'exception',
                    array('var' => '$cell',
                          'was' => gettype($cell),
                          'expected' => 'integer',
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);

            } elseif ($cell < 0) {
                return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                    array('var' => '$cell',
                          'was' => $cell,
                          'expected' => 'positive',
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);

            } elseif ($cell >= $this->getCellCount()) {
                return Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                    array('var' => '$cell',
                          'was' => $cell,
                          'expected' => 'less than '.$this->getCellCount(),
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);
            }

            $this->_updateAttrArray($this->_progress['cell'][$cell], $this->_parseAttributes($attributes));
        } else {
            $this->_updateAttrArray($this->_progress['cell'], $this->_parseAttributes($attributes));
        }
        
        $font_size   = $this->_progress['cell']['font-size'];
        $cell_width  = $this->_progress['cell']['width'];
        $cell_height = $this->_progress['cell']['height'];
        $margin = ($this->getOrientation() == HTML_PROGRESS_BAR_HORIZONTAL) ? 0 : 3;

        $font_size = min(min($cell_width, $cell_height) - $margin, $font_size);
        $this->_progress['cell']['font-size'] = $font_size;

        $this->_updateProgressSize();   // updates the new size of progress bar
    }

    /**
     * Returns the progress bar's border attributes. Assoc array (defaut) or string.
     *
     * @param      bool      $asString      (optional) whether to return the attributes as string 
     *
     * @return     mixed
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        setBorderAttributes()
     */
    function getBorderAttributes($asString = false)
    {
        if (!is_bool($asString)) {
            return Error_Raise::exception($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT,
                array('var' => '$asString',
                      'was' => gettype($asString),
                      'expected' => 'boolean',
                      'paramnum' => 1));
        }

        $attr = $this->_progress['border'];

        if ($asString) {
            return $this->_getAttrString($attr);
        } else {
            return $attr;
        }
    }

    /**
     * Sets the progress bar's border attributes.
     *
     * Defaults are:
     * <ul>
     * <li>class   = progressBarBorder
     * <li>width   = 0
     * <li>style   = solid
     * <li>color   = #000000
     * </ul>
     *
     * @param      mixed     $attributes    Associative array or string of HTML tag attributes
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @see        getBorderAttributes()
     * @tutorial   beginner.pkg#look-and-feel.border-style
     * @example    bluesand.php             A thin solid border to a horizontal progress bar
     */
    function setBorderAttributes($attributes)
    {
        $this->_updateAttrArray($this->_progress['border'], $this->_parseAttributes($attributes));

        $this->_updateProgressSize();   // updates the new size of progress bar
    }

    /**
     * Returns the string attributes. Assoc array (defaut) or string.
     *
     * @param      bool      $asString      (optional) whether to return the attributes as string 
     *
     * @return     mixed
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        setStringAttributes()
     */
    function getStringAttributes($asString = false)
    {
        if (!is_bool($asString)) {
            return Error_Raise::exception($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT,
                array('var' => '$asString',
                      'was' => gettype($asString),
                      'expected' => 'boolean',
                      'paramnum' => 1));
        }

        $attr = $this->_progress['string'];

        if ($asString) {
            return $this->_getAttrString($attr);
        } else {
            return $attr;
        }
    }

    /**
     * Sets the string attributes.
     *
     * Defaults are:
     * <ul>
     * <li>id                = installationProgress
     * <li>width             = 50
     * <li>font-family       = Verdana, Arial, Helvetica, sans-serif
     * <li>font-size         = 12
     * <li>color             = #000000
     * <li>background-color  = #FFFFFF
     * <li>align             = right
     * <li>Horizontal Bar :
     *     <ul>
     *     <li>valign        = right
     *     </ul>
     * <li>Vertical Bar :
     *     <ul>
     *     <li>valign        = bottom
     *     </ul>
     * </ul>
     *
     * @param      mixed     $attributes    Associative array or string of HTML tag attributes
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @see        getStringAttributes()
     * @tutorial   beginner.pkg#look-and-feel.string-style
     */
    function setStringAttributes($attributes)
    {
        $this->_updateAttrArray($this->_progress['string'], $this->_parseAttributes($attributes));
    }

    /**
     * Returns the progress attributes. Assoc array (defaut) or string.
     *
     * @param      bool      $asString      (optional) whether to return the attributes as string 
     *
     * @return     mixed
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        setProgressAttributes()
     */
    function getProgressAttributes($asString = false)
    {
        if (!is_bool($asString)) {
            return Error_Raise::exception($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT,
                array('var' => '$asString',
                      'was' => gettype($asString),
                      'expected' => 'boolean',
                      'paramnum' => 1));
        }

        $attr = $this->_progress['progress'];

        if ($asString) {
            return $this->_getAttrString($attr);
        } else {
            return $attr;
        }
    }

    /**
     * Sets the common progress bar attributes.
     *
     * Defaults are:
     * <ul>
     * <li>class             = progressBar
     * <li>background-color  = #FFFFFF
     * <li>auto-size         = true
     * <li>Horizontal Bar :
     *     <ul>
     *     <li>width         = (cell_count * (cell_width + cell_spacing)) + cell_spacing
     *     <li>height        = cell_height + (2 * cell_spacing)
     *     </ul>
     * <li>Vertical Bar :
     *     <ul>
     *     <li>width         = cell_width + (2 * cell_spacing)
     *     <li>height        = (cell_count * (cell_height + cell_spacing)) + cell_spacing
     *     </ul>
     * </ul>
     *
     * @param      mixed     $attributes    Associative array or string of HTML tag attributes
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @see        getProgressAttributes()
     * @tutorial   beginner.pkg#look-and-feel.progress-style
     */
    function setProgressAttributes($attributes)
    {
        $this->_updateAttrArray($this->_progress['progress'], $this->_parseAttributes($attributes));
    }

    /**
     * Get the javascript code to manage progress bar.
     *
     * @return     string                   JavaScript URL or inline code to manage progress bar
     * @since      0.5
     * @access     public
     * @see        setScript()
     * @author     Stefan Neufeind <hide@address.com> Contributor.
     *             See details on thanks section of README file.
     * @author     Christian Wenz <hide@address.com> Helper.
     *             See details on thanks section of README file.
     */
    function getScript()
    {
        if (!is_null($this->_script)) {
            return $this->_script;   // URL to the linked Progress JavaScript
        }

        $js = <<< JS
var isDom = document.getElementById?true:false;
var isIE  = document.all?true:false;
var isNS4 = document.layers?true:false;
var cellCount = %cellCount%;

function setprogress(pIdent, pValue, pString, pDeterminate)
{
        if (isDom)
            prog = document.getElementById(pIdent+'%installationProgress%');
        if (isIE)
            prog = document.all[pIdent+'%installationProgress%'];
        if (isNS4)
            prog = document.layers[pIdent+'%installationProgress%'];
	if (prog != null) 
	    prog.innerHTML = pString;

        if (pValue == pDeterminate) {
	    for (i=0; i < cellCount; i++) {
                showCell(i, pIdent, "hidden");	
            }
        }
        if ((pDeterminate > 0) && (pValue > 0)) {
            i = (pValue-1) % cellCount;
            showCell(i, pIdent, "visible");	
        } else {
            for (i=pValue-1; i >=0; i--) {
                showCell(i, pIdent, "visible");	
            }
	}
}

function showCell(pCell, pIdent, pVisibility)
{
	if (isDom)
	    document.getElementById(pIdent+'%progressCell%'+pCell+'A').style.visibility = pVisibility;
	if (isIE)
	    document.all[pIdent+'%progressCell%'+pCell+'A'].style.visibility = pVisibility;
	if (isNS4)
	    document.layers[pIdent+'%progressCell%'+pCell+'A'].style.visibility = pVisibility;

}

JS;
        $cellAttr = $this->getCellAttributes();
        $attr = trim(sprintf($cellAttr['id'], '   '));
        $stringAttr = $this->getStringAttributes();
        $js = str_replace("%cellCount%", $this->getCellCount(), $js);
        $js = str_replace("%installationProgress%", $stringAttr['id'], $js);
        $js = str_replace("%progressCell%", $attr, $js);
         
        return $js;
    }

    /**
     * Set the external JavaScript code (file) to manage progress element.
     *
     * @param      string    $url           URL to the linked Progress JavaScript
     *
     * @return     void
     * @since      1.0
     * @access     public
     * @throws     HTML_PROGRESS_ERROR_INVALID_INPUT
     * @see        getScript()
     */
    function setScript($url)
    {
        if (!is_null($url)) {
            if (!is_string($url)) {
                Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'exception',
                    array('var' => '$url',
                          'was' => gettype($url),
                          'expected' => 'string',
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);

            } elseif (!is_file($url) || $url == '.' || $url == '..') {
                Error_Raise::raise($this->_package, HTML_PROGRESS_ERROR_INVALID_INPUT, 'error',
                    array('var' => '$url',
                          'was' => $url.' file does not exists',
                          'expected' => 'javascript file exists',
                          'paramnum' => 1), PEAR_ERROR_TRIGGER);
            }
        }

        /*
         - since version 0.5.0,
         - default javascript code comes from getScript() method
         - but may be overrided by external file. 
        */
        $this->_script = $url;
    }

    /**
     * Get the cascading style sheet to put inline on HTML document
     *
     * @return     object                   HTML_CSS instance
     * @since      0.2
     * @access     public
     * @author     Stefan Neufeind <hide@address.com> Contributor.
     *             See details on thanks section of README file.
     */
    function &getStyle()
    {
        include_once ('HTML/CSS.php');
        
        $progressAttr = $this->getProgressAttributes();
        $borderAttr = $this->getBorderAttributes();
        $stringAttr = $this->getStringAttributes();
        $cellAttr = $this->getCellAttributes();
        $orient = $this->getOrientation();
        
        $css = new HTML_CSS();

        $css->setStyle('.'.$progressAttr['class'], 'background-color', $progressAttr['background-color']);
        $css->setStyle('.'.$progressAttr['class'], 'width', $progressAttr['width'].'px');
        $css->setStyle('.'.$progressAttr['class'], 'height', $progressAttr['height'].'px');
        $css->setStyle('.'.$progressAttr['class'], 'position', 'relative');
        $css->setStyle('.'.$progressAttr['class'], 'left', '0px');
        $css->setStyle('.'.$progressAttr['class'], 'top', '0px');

        $css->setSameStyle('.'.$borderAttr['class'], '.'.$progressAttr['class']);
        $css->setStyle('.'.$borderAttr['class'], 'border-width', $borderAttr['width'].'px');
        $css->setStyle('.'.$borderAttr['class'], 'border-style', $borderAttr['style']);
        $css->setStyle('.'.$borderAttr['class'], 'border-color', $borderAttr['color']);

        $css->setStyle('.'.$stringAttr['id'], 'width', $stringAttr['width'].'px');
        if (isset($stringAttr['height'])) {
            $css->setStyle('.'.$stringAttr['id'], 'height', $stringAttr['height'].'px');
        }
        $css->setStyle('.'.$stringAttr['id'], 'text-align', $stringAttr['align']);
        $css->setStyle('.'.$stringAttr['id'], 'font-family', $stringAttr['font-family']);
        $css->setStyle('.'.$stringAttr['id'], 'font-size', $stringAttr['font-size'].'px');
        $css->setStyle('.'.$stringAttr['id'], 'color', $stringAttr['color']);
        $css->setStyle('.'.$stringAttr['id'], 'background-color', $stringAttr['background-color']);

        $css->setStyle('.'.$cellAttr['class'].'I', 'width', $cellAttr['width'].'px');
        $css->setStyle('.'.$cellAttr['class'].'I', 'height', $cellAttr['height'].'px');
        $css->setStyle('.'.$cellAttr['class'].'I', 'font-family', $cellAttr['font-family']);
        $css->setStyle('.'.$cellAttr['class'].'I', 'font-size', $cellAttr['font-size'].'px');

        if ($orient == HTML_PROGRESS_BAR_HORIZONTAL) {
            $css->setStyle('.'.$cellAttr['class'].'I', 'float', 'left'); 
        }
        if ($orient == HTML_PROGRESS_BAR_VERTICAL) {
            $css->setStyle('.'.$cellAttr['class'].'I', 'float', 'none'); 
        }
        $css->setSameStyle('.'.$cellAttr['class'].'A', '.'.$cellAttr['class'].'I');

        $css->setStyle('.'.$cellAttr['class'].'I', 'background-color', $cellAttr['inactive-color']);
        $css->setStyle('.'.$cellAttr['class'].'A', 'background-color', $cellAttr['active-color']);
        $css->setStyle('.'.$cellAttr['class'].'A', 'visibility', 'hidden');

        if (isset($cellAttr['background-image'])) {
            $css->setStyle('.'.$cellAttr['class'].'A', 'background-image', 'url("'.$cellAttr['background-image'].'")');
            $css->setStyle('.'.$cellAttr['class'].'A', 'background-repeat', 'no-repeat');
        }
        
        return $css;
    }

    /**
     * Updates the new size of progress bar, depending of cell size, cell count
     * and border width.
     *
     * @since      1.0
     * @access     private
     * @see        setOrientation(), setCellCount(), setCellAttributes(),
     *             setBorderAttributes()
     */
    function _updateProgressSize()
    {
        if (!$this->_progress['progress']['auto-size']) {
            return;
        }

        $cell_width   = $this->_progress['cell']['width'];
        $cell_height  = $this->_progress['cell']['height'];
        $cell_spacing = $this->_progress['cell']['spacing'];

        $border_width = $this->_progress['border']['width'];

        $cell_count = $this->_cellCount;

        if ($this->getOrientation() == HTML_PROGRESS_BAR_HORIZONTAL) {
            $w = ($cell_count * ($cell_width + $cell_spacing)) + $cell_spacing;
            $h = $cell_height + (2 * $cell_spacing);
        }
        if ($this->getOrientation() == HTML_PROGRESS_BAR_VERTICAL) {
            $w  = $cell_width + (2 * $cell_spacing);
            $h  = ($cell_count * ($cell_height + $cell_spacing)) + $cell_spacing;
        } 

        $attr = array ('width' => $w, 'height' => $h);

        $this->_updateAttrArray($this->_progress['progress'], $attr);
    }
}

?>
Return current item: ZZ/OSS Installer