Proposta de desenvolvimento Fabula 2

Com a evolução do PHP, senti necessidade da criação de um novo framework. Sempre senti a necessidade de utilizar namespaces, para utilizar widgets personalizados de forma transparente, pois por exemplo, no atual, os widgets possuem nome FFWWindow, e a abstração é feita por métodos estaticos, o que dificultou muito a documentação.

A criação de um novo framework irá possibilitar o uso de métodos que eram para ser desenvolvidos desde o inicio, porem sem sucesso, principalmente na hora de sobreescrever classes nativas.

O esboço do framework ja conta com uma criação de tela, baseada em GtkBuilder, que será a base para a extensão de outras interfaces, como glade e o próprio builder

O proposito do framework também muda um pouco. Atualmente ele somente provê funcionalidades para facilitar o uso do widget. Neste novo, o proposito será a utilização de um melhor MVC, melhorando também a performance e a facilidade de desenvolvimento de todo o projeto, e não só mais do uso do widget

Estou fazendo este post, para que possamos cria-lo juntos, e termos ideias juntos. Gostaria de mais da participação de vocês

No final das contas, veja como ficou o desenvolvimento, de um pequeno exemplo, no esboço atual

Imagem

Exemplo utilizando Fabula Framework 2

Exemplo

interface.php

return array(
	'GtkWindow' => array(
		'properties' => array(
			'name' => "frmMain",
			'default-width' => 300,
			'default-height' => 100,
			'title' => "Janela Teste"
		),
		'signals' => array(
			'destroy' => array($this, "frmMain_unload"),
		),
		'children' => array(
			'GtkVBox' => array(
				'properties' => array(
					'name' => "vbox1",
				),
				'signals' => array(),
				'children' => array(
					'GtkLabel' => array(
						'properties' => array(
							'name' => "label1",
							'label' => "Caminho",
						),
						'packing' => array(
							'expand' => FALSE,
							'fill' => FALSE,
						),
					),
					'GtkEntry' => array(
						'properties' => array(
							'name' => "txtText",
						),
						'packing' => array(
							'expand' => FALSE,
							'fill' => FALSE,
						),
					),
					'GtkButton' => array(
						'properties' => array(
							'name' => "btnConfirmar",
							'label' => "Confirmar",
						),
						'signals' => array(
							'clicked' => array($this, "btnConfirmar_clicked"),
						),
						'packing' => array(
							'fill' => TRUE,
							'expand' => TRUE,
						),
					),
				)
			)
		),
	),
);

mainclass.php

// Namespace da aplicação
namespace Sample;

// Inclusão do Fabula Framework
require_once "../../Fabula.php";

// Adiciona os includes
use Fabula\Application;
use Fabula\Gtk\Gtk;
use Fabula\Interfaces\Bootstrap;
use Fabula\Ui\Builder;

/**
 * 
 */
class Sample implements Bootstrap
{
	/**
	 * 
	 */
	public $ui = array();
	
	/**
	 * 
	 */
	public function run()
	{
		$ar = include "interface.php";
		
		$this->ui = new Builder();
		$this->ui->fromArray($ar);

		$this->ui->getByName("frmMain")->show_all();
		Gtk::main();
	}
	
	/**
	 * 
	 */
	public function frmMain_unload() 
	{
		Gtk::main_quit();
		exit(0);
	}
	
	/**
	 * 
	 */
	public function btnConfirmar_clicked() {
		$text = $this->ui->getByName("txtText")->get_text();
		echo "Digitado: " . $text . "\n";
	}
}

// Inicia a aplicação
Application::getInstance()
	->run("\\Sample\\Sample");