Gtk+ on Rails

Sat Dec 06 07:33:29 UTC 2008 [ Русский ]

Свершилось! Рельсоподобный MVC фреймворк для быстрого создания Gtk+ приложений с помощью Ruby уже здесь.

На данный момент фреймворк содержит 1806 строк кода. Для сравнения база кода Merb уже привысила 53000 строк, Rails еще менее обозрим.

Я бегло осмотрел устройство этого хозяйства и попробую поделиться своим пониманием с вами…

Нам понадобятся несколько инструментов и библиотек:

$ sudo aptitude install glade-3 ruby-gnome2 git-core rubygems
$ git clone git://github.com/intelitiva/rugui.git; cd rugui
$ gem build rugui.gemspec 
$ sudo gem install *.gem

Теперь можно сгенерировать каркас нового приложения:

$ rugui my-test-app

Структура директорий будет очень понятна любому Rails/Merb разработчику и постепенно все более и более понятна всем остальным :)

rugui - структура директорий

Сие отличается от рельсовой структуры наличием директории app/resources с поддиректориями glade и styles. Первая содержит шаблоны glade, вторая – стили gtkrc.

Glade - это формат описания интерфейсов для Gtk+. Точно так-же называется замечательный инструмент для визуального создания интерфейсов.

Glade файлы используются в качестве шаблонов для View. В каждом шаблоне содержится набор виджетов, связанных с ними сигналов, обработчиков этих сигналов и прочей информации. Виджеты Gtk+ могут порождать множестро различных сигналов. Виджет Button, к примеру, поддерживает сигналы activate, clicked, enter, leave, pressed, released и наследует несколько десятков более экзотических сигналов от своих родителей.

Уникальное имя обработчика для каждого сигнала можно установить в дизайнере интерфейсов Glade. Каждое присвоенное имя обработчика будет связано с соответствующим методом в View. Каждый виджет тоже имеет уникальное имя. Каждое такое имя станет свойством view. Например к виджету c названием “go_button” можно будет обратиться внутри view следующим образом.

go_button.label = 'Go! Go! Go!'

Предположим в свойствах кнопки ‘go_button’ мы указали ‘on_go_button_clicked’ в качестве обработчика сигнала ‘clicked’. Попробуем создать обработчик сигнала clicked прямо в View.

def on_go_button_clicked
   button_box.children.each do |child|
     child.label = rand(100).to_s
   end
end

Клик по кнопке ‘go_button’ выберет все вложенные в ‘button_box’ виджеты и и пропишет им в label случайное число.

Продолжаю исследования :) Всех желающих приглашаю поделиться своими экспериментами!

Скачать пример можно здесь.

Ну и? А где профит? Так и ручками все можно делать, без 2х тыщ строк кода.

Профит в разделении на M V и C. Автоприсоедениение сигналов.

Профит для комьюнити в том, что приложения будут написаны в едином стиле и разбираться в каждом новом оригинальном подходе не будет необходимости.

Я с ходу могу поправить любой Rails проект именно потому, что там есть конвенции которых все придерживаются.

Login with OpenID or Gmail to publish comments.