Quebra de linha automatica no GtkTextView
Opa pessoal!
Segue mais uma diquinha interessante que eu demorei "um cadinho" pra descobrir.
Algumas vezes não queremos colocar scroll horizontal em nossos TextViews. Então colocamos uma ScrolledWindow, o nosso GtkTextView dentro dele, e configuramos o container para ter scroll somente na vertical. Correto?
Porem o texto ainda continua correndo na horizontal. Isso por que existe um método do GtkTextView, chamado set_wrap_mode(). Com ele você pode fazer ele quebrar linha por palavra, por caractere, ou por caractere e quando der por palavra, ou inda não quebrar linha nenhuma, que é o valor padrão.
Os modos podem ser encontrados em http://gtk.php.net/manual/en/gtk.enum.wrapmode.php
Segue o código exemplo para me entenderem.
// —————————————————————————————————————–
// Classe de testes
// @since rev 1
class Teste
{
// ————————————————————————————————————-
// Vetor que armazena todos os widgets da interface
// @since rev 1
public $widgets = array();
// ————————————————————————————————————-
// Construtor da classe
// @since rev 1
public function __construct()
{
// ———————————————————————————————————
// Cria o container
// @since rev 1
$fixed = new GtkFixed();
// ———————————————————————————————————
// Cria o ScrolledWindow
// @since rev 1
$scrolled = new GtkScrolledWindow();
$scrolled->set_size_request(284, 284);
$scrolled->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_ALWAYS); // Horizontal Never
$fixed->put($scrolled, 8, 8);
// ———————————————————————————————————
// Cria o textview
// @since rev 1
$this->widgets['txtObservacoes'] = new GtkTextView();
$this->widgets['txtObservacoes']->set_wrap_mode(Gtk::WRAP_WORD_CHAR); // Quebra de linha por palavra ou Char
$scrolled->add($this->widgets['txtObservacoes']);
// ———————————————————————————————————
// Cria a janela
// @since rev 1
$this->widgets['frmTeste'] = new GtkWindow();
$this->widgets['frmTeste']->set_size_request(300, 300);
$this->widgets['frmTeste']->set_resizable(FALSE);
$this->widgets['frmTeste']->set_title("Teste");
$this->widgets['frmTeste']->add($fixed);
$this->widgets['frmTeste']->set_position(GTK::WIN_POS_CENTER);
$this->widgets['frmTeste']->show_all();
// ———————————————————————————————————
// Conecta o destroy
// @since rev 1
$this->widgets['frmTeste']->connect_simple("destroy", array("Gtk", "main_quit"));
}
}
// —————————————————————————————————————–
// Inicia a aplicação
// @since rev 1
$teste = new Teste();
gtk::main();
Valeu! =)