Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 15:34

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 108 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вт сен 10, 2013 17:33 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Разбирался недавно со связкой Forth + GTK. В принципе, все просто, никакой мороки с объектами, как в Qt.
1. Понадобится GLADE - построитель интерфейса
2. В проекте подключаете GTK:
Код:
USE libgtk-3.so.0

3. Инициализируете билдер
Код:
   (()) gtk_builder_new TO builder
    (( builder z" glade-test.glade" 0  )) gtk_builder_add_from_file DROP

4. Берете главное окно
Код:
(( builder z" demoWindow"     )) gtk_builder_get_object TO window

5. Запускаете все
Код:
    (( window )) gtk_widget_show DROP
    (()) gtk_main DROP

6. Подключение сигналов
- сначала опишем CALLBACK:
Код:
:NONAME ( user_data widget -- n1 n2 n3 )
    2DUP \ must leave parameters on stack
    CR ." Close callback! Caller: "
    1 <( )) gtk_buildable_get_name ZTYPE CR
    (()) gtk_main_quit DROP
    DROP 0 \ return value (even for void!)
; 2 CELLS CALLBACK: closeEvent

Напомню, процедура должна оставить все параметры на стеке и еще положить один - возвращаемый (даже если возвращает void)
- подключаем сигнал:
Код:
window z" destroy"  ['] closeEvent 0 g_signal_connect DROP

7. Подводные камни, которые я обнаружил:
- С-функция, которая возвращает число с плавающей точкой (gdouble), ложит его на стек сопроцессора
- Но передавать такое число из форта нужно со стека данных:
Код:
FLOAT>DATA

8. Написал небольшую прослойку для интернационализации приложений на основе GNU gettext.
- строки для перевода отмечаются словами gettext(" и ngettext(", файлы .glade распознаются автоматически
- исходники обрабаытваются скриптом i18n (см.файлы проекта)
- .po-файлы можно переводить
- запускается скрипт еще раз, после этого приложение будет уже переведено
- не забываем в начале
Код:
    (( z" glade-test" z" ./po/translations" )) bindtextdomain DROP
    (( z" glade-test" )) textdomain DROP
    (( LC_ALL z" " )) setlocale DROP


Немного сумбурно изложил, на вопросы отвечу.
Проект


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вт сен 10, 2013 18:36 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Интересно! Насчет сигналов немного не понятно. Параметры в CALLBACK как передаются? В описании самого сигнала, перечисление параметров ни как не участвует, правильно? Фактически фигурирует только символьное имя сигнала, а передача параметров на совести передающей и принимающей функции, так?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вт сен 10, 2013 19:36 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
В проекте FFL (Forth Foundation Library) есть вывод графики (мандельброт) средствами GTK
http://ffl.googlecode.com/svn/wiki/mandelbrot.png


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Вт сен 10, 2013 19:53 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
mgw писал(а):
Интересно! Насчет сигналов немного не понятно. Параметры в CALLBACK как передаются? В описании самого сигнала, перечисление параметров ни как не участвует, правильно? Фактически фигурирует только символьное имя сигнала, а передача параметров на совести передающей и принимающей функции, так?

Все описано здесь.
Подключение сигнала:
Код:
gulong g_signal_connect( gpointer      *object,
                         const gchar   *name,
                         GCallback     func,
                         gpointer      func_data );

object - наш виджет
name - имя сигнала
func - функция, которая обрабатывает сигнал
func_data - данные, которые пойдут в эту функцию

Обработчик сигнала:
Код:
void callback_func( GtkWidget *widget,
                    ... /* другие аргументы - нужно смотреть документацию по конкретному сигналу */
                    gpointer   callback_data );

widget - наш виджет
callback_data - указатель на данные, который мы передали при привязке сигнала (func_data)

Для разных сигналов разный набор параметров, поэтому нужно смотреть документацию


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Ср сен 11, 2013 01:29 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
KPG писал(а):
В проекте FFL (Forth Foundation Library) есть вывод графики (мандельброт) средствами GTK
http://ffl.googlecode.com/svn/wiki/mandelbrot.png

Они используют GTK-server, что есть костыль.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Ср сен 11, 2013 15:51 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Под Ubuntu/32
Переписал содержимое spf-gtk.tar.gz в ~/work/spf-4.20
запустил
Код:
mihail@mihail-desktop:~/work/spf-4.20$ ./spf4 glade-test.spf
F. isn't unique (glade-test.spf)
>FNUM isn't unique (glade-test.spf)

(spf4:6557): Gtk-WARNING **: Unknown property: GtkVolumeButton.always-show-image

(spf4:6557): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed

(spf4:6557): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed

(spf4:6557): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed

(spf4:6557): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed
EXCEPTION!  CODE:00000008  ADDRESS:B76F3209  WORD:<?not found>
USER DATA: 091DB618 THREAD ID: B751D6C0 HANDLER: 40690000
[Floating point exception] Code:Segmentation fault (core dumped)


Чего я не сделал? Или не так сделал?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Ср сен 11, 2013 23:04 
Не в сети

Зарегистрирован: Чт ноя 23, 2006 00:44
Сообщения: 494
Откуда: СПб
Благодарил (а): 19 раз.
Поблагодарили: 8 раз.
А у меня вроде работает, но окно "Тест Adjusmenтов" глючноватое! После его закрытия и попытки вызвать любой другой пункт меню валит основное окно: "Ошибка сегментирования (core dumped)".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 01:56 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Mihail писал(а):
Под Ubuntu/32
Переписал содержимое spf-gtk.tar.gz в ~/work/spf-4.20
запустил
...
[Floating point exception] Code:Segmentation fault (core dumped)
...
Чего я не сделал? Или не так сделал?

Что-то с плавающей точкой...
СПФ стандартный?
Какая версия GTK?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 01:57 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Ilya писал(а):
А у меня вроде работает, но окно "Тест Adjusmenтов" глючноватое! После его закрытия и попытки вызвать любой другой пункт меню валит основное окно: "Ошибка сегментирования (core dumped)".

Это кнопка Gtk Volume Button глючная, если ее не трогать, должно быть все ОК


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 10:46 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
oco писал(а):
СПФ стандартный?

Свежескаченный http://downloads.sourceforge.net/spf/spf-4.20.tar.gz

oco писал(а):
Какая версия GTK?

Думаю, при не той версии, аборт возник-бы на строчке
USE libgtk-3.so.0


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 11:42 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Mihail писал(а):
oco писал(а):
СПФ стандартный?

Свежескаченный http://downloads.sourceforge.net/spf/spf-4.20.tar.gz

Скачал и попробовал, у меня ОК

Mihail писал(а):
oco писал(а):
Какая версия GTK?

Думаю, при не той версии, аборт возник-бы на строчке
USE libgtk-3.so.0


Код:
dpkg-query -l libgtk-3\*

Что выдает?
У меня 3.6.4-0ubuntu8


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 13:19 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
У меня работает. Fedora-18 (32) Сама программа работает устойчиво. Завершается правильно.
При запуске есть ошибки:
Код:
(spf4:2469): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed
(spf4:2469): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed
(spf4:2469): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed
(spf4:2469): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed
GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.
5 файлов скопировано

(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed
(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed
(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed
(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed
(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed
(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed

Думаю, это разница в версиях gtk
У меня 3.6.2-1

:) Отлично! Форту нужен графический интерфейс, а ещё лучше IDE

P.S. Посмотрел сайт http://oco.org.ua Приятное впечатление и мысли ценные!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 13:25 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Обновил gtk3 до версии 3.6.4-2
Ошибки всё равно есть.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 14:10 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Кстати, GTK используется и в VFX-форте - возможно, имеет смысл присмотреться к нему.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth++
СообщениеДобавлено: Чт сен 12, 2013 17:40 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Код:
(spf4:2469): Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion `gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed

Насколько я знаю, это баг GTK, у меня тоже такая ошибка
Код:
GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.
(spf4:2469): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion `GTK_IS_WIDGET (widget)' failed

Тут ничего не могу сказать :(
assertion `GTK_IS_WIDGET (widget)' failed значит, что в какую-то функцию, которая хочет виджет, передается не виджет
mgw писал(а):
:) Отлично! Форту нужен графический интерфейс, а ещё лучше IDE

Я использую Geany, недавно дорабатывал в нем подсветку синтаксиса
mgw писал(а):
P.S. Посмотрел сайт http://oco.org.ua Приятное впечатление и мысли ценные!

Спасибо!


Последний раз редактировалось oco Чт сен 12, 2013 18:03, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 108 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB