/**
  * Class constructor
  * Creates the page and the registration form
  */
 function __construct()
 {
     parent::__construct();
     // creates the form
     $this->form = new TForm('form_pessoa');
     // creates a table
     $table_data = new TTable();
     $table_contato = new TTable();
     $notebook = new TNotebook(500, 250);
     // add the notebook inside the form
     $this->form->add($notebook);
     $notebook->appendPage('Dados Principais', $table_data);
     $notebook->appendPage('Contatos', $table_contato);
     // create the form fields
     $idpessoa = new TEntry('idpessoa');
     $nome = new TEntry('nome');
     $dtcadastro = new TDate('dtcadastro');
     $dtnascimento = new TDate('dtnascimento');
     $natureza = new TRadioGroup('natureza');
     $idramoatividade = new TDBCombo('idramoatividade', 'sobcontrole', 'ramoatividade', 'idramoatividade', 'descricao');
     $obs = new TText('obs');
     // add field validators
     $nome->addValidation('Nome', new TRequiredValidator());
     $dtcadastro->addValidation('Data Cadastro', new TRequiredValidator());
     $dtnascimento->addValidation('Data Nascimento', new TRequiredValidator());
     $idramoatividade->addValidation('Ramo de Atividade', new TRequiredValidator());
     $natureza->addValidation('Natureza', new TRequiredValidator());
     $itemNatureza = array();
     $itemNatureza['F'] = 'Física';
     $itemNatureza['J'] = 'Jurídica';
     // add the combo options
     $natureza->addItems($itemNatureza);
     $natureza->setLayout('horizontal');
     // define some properties for the form fields
     $idpessoa->setEditable(FALSE);
     $idpessoa->setSize(100);
     $nome->setSize(320);
     $obs->setSize(320);
     $dtcadastro->setSize(90);
     $dtnascimento->setSize(90);
     $natureza->setSize(70);
     $idramoatividade->setSize(120);
     // add a row for the field code
     $table_data->addRowSet(new TLabel('ID:'), array($idpessoa, new TLabel('Natureza:'), $natureza));
     $table_data->addRowSet(new TLabel('Nome/Fantasia:'), $nome);
     $table_data->addRowSet(new TLabel('Data Cadastro:'), $dtcadastro);
     $table_data->addRowSet(new TLabel('Data Nascimento/Início:'), $dtnascimento);
     $table_data->addRowSet(new TLabel('Ramo de Atividade:'), $idramoatividade);
     $table_data->addRowSet(new TLabel('Observações:'), $obs);
     $row = $table_contato->addRow();
     // adiciona linha
     $cell = $row->addCell(new TLabel('<b>Contatos</b>'));
     // adiciona celular na linha
     $cell->valign = 'top';
     // define alinhamento
     $listacontatos = new TMultiField('listacontatos');
     // cria multifield
     // com TDBSeekButton
     //$idtipocontato= new TDBSeekButton('idtipocontato', 'sobcontrole', $this->form->getName(), 'tipocontato', 'descricao', 'listacontatos_idtipocontato', 'listacontatos_descricaotipocontato');
     // com  TSeekButton
     /*$idtipocontato= new TSeekButton('idtipocontato');
       $auxidtipocontato = new BuscaTipoContato;
       $auxaction= new TAction(array($auxidtipocontato,'onReload'));
       $idtipocontato->setAction($auxaction);*/
     $idtipocontato = new TDBCombo('idtipocontato', 'sobcontrole', 'tipocontato', 'idtipocontato', 'descricao', 'descricao');
     $descricaotipocontato = new \Adianti\Widget\Form\THidden('tipocontato->descricao');
     //$descricaotipocontato->setEditable(false);
     $valorcontato = new TEntry('valorcontato');
     $listacontatos->setClass('contato');
     // define the returning class
     // colunas do multifield
     // coluna do ID do tipo de contato (1->email, 2->telefone, etc...)
     $listacontatos->addField('idtipocontato', 'ID: ', $idtipocontato, 40);
     // coluna da descricao do tipo de contato
     //                        desta forma o grid OK
     $listacontatos->addField('tipocontato->descricao', '', $descricaotipocontato, 200);
     //                        desta forma o TDBSeekButton fica OK.
     //$listacontatos->addField('descricaotipocontato', 'Descrição Tipo Contato: ', $descricaotipocontato, 200);
     // coluna com o valor do contato, número do telefone, celular, etc.
     $listacontatos->addField('descricao', 'Valor Contato: ', $valorcontato, 200);
     $listacontatos->setHeight(250);
     $row = $table_contato->addRow();
     $row->addCell($listacontatos);
     // create an action button
     $button1 = new TButton('action1');
     $button1->setAction(new TAction(array($this, 'onSave')), 'Salvar');
     $button1->setImage('ico_save.png');
     // create an action button (go to list)
     $button2 = new TButton('list');
     $button2->setAction(new TAction(array('PessoaDataGrid', 'onReload')), 'Listar');
     $button2->setImage('ico_datagrid.gif');
     $button0 = new TButton('new');
     $button0->setAction(new TAction(array($this, 'onClear')), 'Novo');
     $button0->setImage('ico_new.png');
     // define wich are the form fields
     $this->form->setFields(array($idpessoa, $nome, $dtcadastro, $dtnascimento, $natureza, $idramoatividade, $obs, $listacontatos, $button0, $button1, $button2));
     $subtable = new TTable();
     $row = $subtable->addRow();
     $row->addCell($button0);
     $row->addCell($button1);
     $row->addCell($button2);
     // wrap the page content
     $vbox = new TVBox();
     $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
     $vbox->add($this->form);
     $vbox->add($subtable);
     // add the form inside the page
     parent::add($vbox);
 }