12 июля 2009 г.

Текстовый редактор. Часть 1

Сегодня предлагаю начать разработку текстового редактора. Т.к. это первая статья из серии, то в ней будет создан только каркас, выводящий на экран окно с многострочным текстовым полем ввода.

Непосредственно сам редактор у нас займёт только четыре строчки:
$buffer = new GtkTextBuffer();
$buffer->set_text("Привет, мир!\nЯ - текстовый редактор на PHP-GTK2 :)");
$text = new GtkTextView();
$text->set_buffer($buffer);

Сначала создаём буфер, содержащий текст, затем текстовое поле и добавляем в это поле текст из буфера.

Для того, чтобы обрабатывать длинные тексты поместим GtkTextView в контейнер с полосами прокрутки.
$scroll = new GtkScrolledWindow();
$scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
$scroll->add($text);

Каркас готов. В следующих статьях мы приведём его в более пристойный вид. Полный код программы:
<?php
 
$window = new GtkWindow();
$window->set_size_request(300, 150);
$window->set_position(Gtk::WIN_POS_CENTER);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
 
$buffer = new GtkTextBuffer();
$buffer->set_text("Привет, мир!\nЯ - текстовый редактор на PHP-GTK2 :)");
$text = new GtkTextView();
$text->set_buffer($buffer);
 
$scroll = new GtkScrolledWindow();
$scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
$scroll->add($text);
 
$window->add($scroll);
$window->show_all();
Gtk::main();
 
?>

2 комментария:

Анонимный комментирует...

А зачем сначала помещать текст в буфер? Почему нельзя текст поместить сразу же в текстовое поле?

Shecspi комментирует...

Потому что GtkTextView предназначен для отображения GtkTextBuffer, как некий контейнер, но напрямую (без буфера) текст ему передать нельзя.