<?php
/**
 * Copyright 2005-2017 de Solis Soluções Livres Ltda.
 *
 * Este arquivo é parte do programa Gnuteca.
 *
 * O Gnuteca é um software de propriedade da SOLIS, sendo desenvolvido
 * e mantido exclusivamente por esta empresa.
 *
 * A licença de uso está disponível mediante aquisição exclusiva junto à
 * SOLIS. A licença é concedida sem caráter de exclusividade ao licenciado.
 * Os direitos de uso são perpétuos.
 *
 * Embora os códigos fontes sejam fornecidos, o software é de propriedade
 * da SOLIS, não sendo permitido ao adquirente da licença a sua revenda,
 * empréstimo ou cessão (onerosa ou não) à terceiros. Também não é permitido,
 * a qualquer título e tempo, promover no software qualquer tipo de alienação,
 * reprodução, distribuição, divulgação, registro, licenciamento, transferência
 * ou qualquer outro ato que prejudique ou comprometa os direitos de propriedade
 * de software, o nome e a imagem da sua proprietária e do próprio software,
 * além de configurar concorrência à SOLIS.
 *
 * O licenciado, com o acesso ao código fonte do software, terá o direito de
 * promover mudanças no respectivo código. No entanto, nas situações em que ele
 * contar com o suporte oficial prestado pela SOLIS, não poderá promover mudanças
 * no código fonte, sob pena de perda do referido suporte.
 *
 * Para conhecer em detalhes o Termo de Licenciamento do Software Gnuteca
 * leia o arquivo “LICENCA.txt” disponível junto ao código deste software.
 *
 *
 * Class
 *
 *
 *
 *
 *
 **/

class GTree extends MDiv
{
	public $data;
    protected $closed = false;

    public function __construct($name, $data)
    {
    	parent::__construct( $name, '' );

    	if ($data)
    	{
    	   $this->setData($data);
    	}

        //valor padrão
        $this->closed = MUtil::getBooleanValue( SIMPLE_SEARCH_HIDE_EXEMPLAR );
    }

    public function setClosed( $closed )
    {
        $this->closed = $closed;
    }

    public function getClosed()
    {
        return $this->closed;
    }

    public function setData($data)
    {
    	$this->data = $data;
    }

    public function foreachData($data)
    {
        $MIOLO              = MIOLO::getInstance();
        $module             = MIOLO::getCurrentModule();

    	$imagePlus          = GUtil::getImageTheme('plus-8x8.png');
        $imagePlusObj       = new MImage('imagePlus', _M('Mais', $module) , $imagePlus);
        $imagePlusObj->addStyle('padding-right', '4px');

        $imageMinus         = GUtil::getImageTheme('minus-8x8.png');
        $imageMinusObj      = new MImage('imagePlus', _M('menos', $module) , $imageMinus);
        $imageMinusObj->addStyle('padding-right', '4px');

        //gera a imagem de acordo com estar fechada ou aberta
        if ( $this->closed  )
        {
            $imageGenerate = $imagePlusObj->generate();
        }
        else
        {
            $imageGenerate = $imageMinusObj->generate();
        }

    	if (is_array( $data ))
    	{
    		foreach ( $data as $line => $info)
    		{
    			$subFields = null;

    			if ( $info->content)
    			{
    				if ( is_array( $info->content))
    				{
    					$content = $this->foreachData( $info->content );
    				}
    				else
    				{
    					$content = $info->content;
    				}
    			}

    			if ( $content )
    			{
                    $signal = $imageGenerate;
    			}
    			else
    			{
    				$signal = '';
    			}

    			$divTitleName   = $this->name.'_title_'.$line .rand();
    			$divContenName  = $this->name.'_content_'.$line .rand();
    			$title          = new Span(null, $info->title, 'gTreeTitle');
    			$subFields[0]   = new MDiv( $divTitleName , $signal . $title->generate() );

    			if ($content)
    			{
                    $subFields[0]->addStyle('cursor','pointer');
                    $subFields[0]->addAttribute('onclick',"gnuteca.changeDisplay('$divContenName', '$divTitleName')" );
    			}

    			$subFields[1] = new MDiv( $divContenName , $content );

                //esconde se é para esconder por padrão
                if ( $this->closed )
                {
                    $subFields[1]->addStyle('display', 'none');
                }

                $divBody = new MDiv($this->name.'_body_'.$line.rand(), $subFields );
                $divBody->addStyle('padding','2px');

    			$fields[] = $divBody;
    		}
    	}
    	return $fields;
    }

    public function generate()
    {
    	$MIOLO              = MIOLO::getInstance();
    	$module             = MIOLO::getCurrentModule();

    	$imagePlus          = GUtil::getImageTheme('plus-8x8.png');
        $imagePlusObj       = new MImage('imagePlus', _M('Mais', $module) , $imagePlus);
        $imagePlusObj->addStyle('padding-right', '4px');

        $imageMinus         = GUtil::getImageTheme('minus-8x8.png');
        $imageMinusObj      = new MImage('imagePlus', _M('menos', $module) , $imageMinus);
        $imageMinusObj->addStyle('padding-right', '4px');

        $this->page->addJsCode("imagePlus = '$imagePlus'; imageMinus = '$imageMinus'; ");

    	$fields = $this->foreachData( $this->data );
    	$this->setInner( $fields );
    	$this->addStyle('padding', '2px');
    	return parent::generate();
    }
}
?>