OberonCore https://forum.oberoncore.ru/ |
|
Abf - Advanced BlackBox Framework https://forum.oberoncore.ru/viewtopic.php?f=90&t=269 |
Страница 2 из 2 |
Автор: | Борис Рюмшин [ Суббота, 06 Декабрь, 2008 15:23 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Илья Ермаков писал(а): Надо посмотреть и разобраться. На выходных гляну. Напоминаю, что текущая версия в открытом репозитории. |
Автор: | Илья Ермаков [ Суббота, 06 Декабрь, 2008 21:26 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Ну, значит, вот что. Stores.Writer.writtenStore устанавливается только в конце процедуры WriteStore. В случае с формами в процедуру SaveList приходит вызов через несколько ещё незавершённых WriteStore. В текстах же какой-то WriteStore даже при пустом документе полностью отрабатывает уже. Таким образом, это поле оказывается равным NIL. Увы, домен Writer-а узнать нельзя никак, кроме как через writtenStore. Добираться до поля wr.domain, которое скрыто, через метасредства Kernel - не хочется, т.к. AbfProperties - модуль чисто высокоуровневый. Варианта два: либо добавлять в SaveList ещё один параметр. При этом это должен быть некий Store, т.к. если передадим чисто домен, то нет способа к нему подсоединить что-то. Либо дописать в документации на SaveList предусловие "writtenStore # NIL", а сохраняющаяся вьюшка перед выгрузкой свойств пишет во Writer некий Store-пустышку. Можно добавить отдельную процедуру AbfProperies.PrepareWriter (wr, store), которая создаёт эту пустышку, подсоединяет к store и записывает. Но потом ещё и считывать её тоже надо... Короче, второй вариант из-за изб. сложности отсеивается сразу. Поскольку не думаю, что изменение сигнатуры процедуры доставит кому-то хлопоты. Второй вариант привёл для полноты, дабы какие-нибудь наши "доброжелатели" не подняли опять хай о том, что "накрылась медным тазом ваша компонентность и развитие без перекомпиляций". |
Автор: | Пётр Кушнир [ Воскресенье, 07 Декабрь, 2008 00:16 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Илья Ермаков писал(а): Stores.Writer.writtenStore устанавливается только в конце процедуры WriteStore. В случае с формами в процедуру SaveList приходит вызов через несколько ещё незавершённых WriteStore. В текстах же какой-то WriteStore даже при пустом документе полностью отрабатывает уже. Таким образом, это поле оказывается равным NIL. А вот почему, в аналогичных условиях, "одинокая" кнопка на форме записываться корректно(чисто академический интерес)? |
Автор: | Илья Ермаков [ Воскресенье, 07 Декабрь, 2008 12:57 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Потому что в большинстве случаев записывается иерархия Stores, где каждый агрегат знает явно свои компоненты (под-сторы) и выполняет для них Join к себе самому. И writtenStore не используется вообще. А тут эти под-сторы AbfMedia.View-у неизвестны, они генерируются скрыто модулем AbfProperties, который их joinил к этому writtenStore. |
Автор: | paulcurl [ Среда, 18 Февраль, 2009 02:39 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
а не могли бы вы меня проконсультировать по вопросу устройства Abf и AbHost?? в юзер-ман написано: Цитата: Abhost - модули стандартной реализации каркаса. Платформенно-зависимы и не должны импортироваться клиентскими модулями. Abf не импортирует Abhost. Abhost инсталлирует конкретные фабрики в Abf. вот меня интересует механизм инсталляции конкретных фабрик Abhost`а в Abf. я не смог локализировать это место в коде. так что если мне кто нибудь укажет на то где и как это делается - я буду оч признателен. (если еще и пояснения дадут - то вообще буду прыгать от счастья) |
Автор: | Илья Ермаков [ Среда, 18 Февраль, 2009 18:49 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Это было в документации "вообще" сказано, как бы пояснение, каким образом отделяется реализация. На данный момент Abhost содержит только драйвер граф. форматов. И этот драйвер не инсталлирует фабрик. Он имеет единственную процедуру Converter с фиксированным интерфейсом. Далее регистрируется в настройках подсистемы Abf (регистрацией занимается AbfMediaCmds). И AbfMedia смотрит, что для такого-то формата такой-то конвертер. И вызывает эту процедуру, когда файл надо открыть. |
Автор: | Иван Кузьмицкий [ Воскресенье, 27 Сентябрь, 2009 12:40 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Возвращаясь к конвертированию загруженного изображения. Библиотека FreeImage поддерживает ряд функций-преобразователей цвета, в том числе и нужный мне ConvertToGreyScale. Прежде чем вносить изменения в исходники Abf, хотелось бы получить совет от архитекторов Abf - как лучше поступить с реализацией конвертации. Есть свойство BrowseProp, предназначенное для установки режимов отображения (фильтры сглаживания, прозрачность). Стоит ли его расширять режимами конвертации или же лучше ввести новое свойство, что-то вроде ConvertProp? |
Автор: | Илья Ермаков [ Воскресенье, 27 Сентябрь, 2009 17:49 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Вообще, Properties расширять вроде бы не следует. Следует просто ввести отдельное независимое свойство. Сам механизм свойств и так расширяем (произвольный набор прокачивается к объекту и от него). |
Автор: | Евгений Темиргалеев [ Воскресенье, 04 Апрель, 2010 00:40 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
Сделал ветку 1.6, там более новый FreeImage 3.1.3.1 и AbhostFreeImage поправлен - используются wchar-функции. Под 1.6-rc6 (и даже из вайна с протормозами) вроде работает. Пробовал только на документации AbfMedia... |
Автор: | Alexey Veselovsky [ Суббота, 15 Январь, 2011 03:24 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
И где же нынче добыть оный Advanced BlackBox Framework? |
Автор: | Илья Ермаков [ Суббота, 15 Январь, 2011 13:26 ] |
Заголовок сообщения: | Re: Выпущен Advanced BlackBox Framework |
См. тут: http://oberoncore.ru/svn Лежит в старом хранилище. |
Автор: | Евгений Темиргалеев [ Среда, 06 Июль, 2011 13:03 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
Выложено в коллекцию: http://oberoncore.ru/bbcc/subs/abf/ |
Автор: | Евгений Темиргалеев [ Вторник, 31 Январь, 2012 11:01 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
AbfBus: внесены исправления из omcBus, не касающиеся интерфейса модуля. (подробности --- см. журнал в исходнике) |
Автор: | Евгений Темиргалеев [ Вторник, 22 Май, 2012 15:53 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
AbfTools: внесены поправки от 15.05.2012 Ивана Кузьмицкого (в режиме разметки невидимый контрол показывает "рамку") |
Автор: | Иван Денисов [ Вторник, 29 Июль, 2014 15:21 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
Добрался до вашей замечательной подсистемы Abf. Вот какой возник вопрос. Хочу программно вставить картинку, но когда я применяю фильтр, то изменение размера происходит непропорционально. Картинка тогда подстраивается под тот размер отображения, который указан жестко в Controllers.PasteView. Если код установки фильтра закомментировать, то поведение более приятное — изображение встраивается в заданный размер отображения, сохраняя исходные пропорции. Что я делаю не так? Код: MODULE CellUtils;
IMPORT AbfMedia, HostFiles, Controllers, Models, Stores, Views, Ports, Files, Dialog, TextCmds, TextControllers, TextViews, TextRulers, TextModels, TextMappers, TextSetters, Properties, Log, Services, AbfMediaCmds; PROCEDURE ForceToNewLine (c: TextControllers.Controller); VAR st: TextSetters.Setter; pos, start: INTEGER; msg: Controllers.EditMsg; BEGIN IF c.HasCaret() THEN pos := c.CaretPos(); st := c.view.ThisSetter(); start := st.ThisLine(pos); IF pos # start THEN msg.op := Controllers.pasteChar; msg.char := TextModels.line; Controllers.Forward(msg) END END END ForceToNewLine; (* Вставить изображение по центру страницы *) PROCEDURE InsertPicture*; VAR ops: Controllers.PollOpsMsg; c: TextControllers.Controller; script: Stores.Operation; s: TextMappers.Scanner; f: TextMappers.Formatter; r1, r2: TextRulers.Ruler; p, prop: Properties.Property; v : AbfMedia.View; loc: Files.Locator; name: Files.Name; BEGIN c := TextControllers.Focus(); Controllers.PollOps(ops); IF ~ c.HasSelection() & (Controllers.paste IN ops.valid) THEN Dialog.GetIntSpec("*", loc, name); IF loc # NIL THEN Models.BeginScript(c.text, "#CellUtils:InsertPicture", script); f.ConnectTo(c.text); s.ConnectTo(c.text); s.Scan; IF s.rider.attr # NIL THEN f.rider.SetAttr(s.rider.attr) END; ForceToNewLine(c); r1 := TextViews.ThisRuler(c.view, c.CaretPos()); r1 := TextRulers.CopyOf(r1, Views.deep); r2 := TextRulers.CopyOf(r1, Views.deep); TextRulers.SetCentered(r1); TextRulers.SetNoBreakInside(r1); Controllers.PasteView(r1, Views.undefined, Views.undefined, FALSE); TextCmds.InsertParagraph; v := AbfMedia.dir.New(); v.SetEmbLink(loc(HostFiles.Locator).path$ + "/" + name$); Controllers.PasteView(v, 400 * Ports.point, 400 * Ports.point, FALSE); v.AllowResize(1); TextCmds.InsertParagraph; f.SetPos(c.CaretPos()); f.WriteString("Рис. #. Подпись к рисунку"); f.WriteLn; TextCmds.InsertParagraph; Controllers.PasteView(r2, Views.undefined, Views.undefined, FALSE); (* Устанавливаем фильтр *) prop := AbfMedia.NewBrowseProp(); prop(AbfMedia.BrowseProp).filter := 6; prop.valid :={0}; prop.known :={0}; c.SetSingleton(v); Properties.CollectProp(p); Properties.Merge(prop, p); Properties.EmitProp(p, prop); Models.EndScript(c.text, script) END; END END InsertPicture; BEGIN END CellUtils. |
Автор: | Иван Денисов [ Вторник, 29 Июль, 2014 15:25 ] | ||
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework | ||
Второй вопрос-предложение, адаптировал Abfhost под интеграцию с последней версией FreeImage. Предлагаю такой вариант, он интересен тем, что не устареет в плане версии библиотеки, а также тем, что в распоряжении оказывается полное число функций библиотеки для других компонентов.
|
Автор: | Илья Ермаков [ Среда, 30 Июль, 2014 13:41 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
Иван, добрый день. Не занимался Abf-ом с 2006-го года. Если что-то предлагаете менять - на Ваше усмотрение, ну а публикация в коллекции OberonCore - по согласованию с администрацией OberonCore. |
Автор: | Иван Денисов [ Четверг, 31 Июль, 2014 08:47 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
Решил свою проблему с размерами картинки использованием отложенных действий Services и опыта Ивана К.. Получается, что вначале дается возможность изображению вставиться и принять нужный размер, а затем сразу применяется фильтр. Код: MODULE CellUtils;
IMPORT AbfMedia, HostFiles, Controllers, Models, Stores, Views, Ports, Files, Dialog, TextCmds, TextControllers, TextViews, TextRulers, TextModels, TextMappers, TextSetters, Properties, Services; TYPE ApplyFilter = POINTER TO RECORD (Services.Action) v: AbfMedia.View END; PROCEDURE ForceToNewLine (c: TextControllers.Controller); VAR st: TextSetters.Setter; pos, start: INTEGER; msg: Controllers.EditMsg; BEGIN IF c.HasCaret() THEN pos := c.CaretPos(); st := c.view.ThisSetter(); start := st.ThisLine(pos); IF pos # start THEN msg.op := Controllers.pasteChar; msg.char := TextModels.line; Controllers.Forward(msg) END END END ForceToNewLine; PROCEDURE EnableFilter(v: Views.View; filter: INTEGER); VAR setmsg: Properties.SetMsg; prop: AbfMedia.BrowseProp; BEGIN prop := AbfMedia.NewBrowseProp()(AbfMedia.BrowseProp); prop.filter := filter; prop.valid := {AbfMedia.optFilter}; prop.known := prop.valid; setmsg.prop := prop; Views.HandlePropMsg(v, setmsg); END EnableFilter; PROCEDURE (a: ApplyFilter) Do; BEGIN EnableFilter(a.v, 6) END Do; (* Вставить изображение по центру страницы *) PROCEDURE InsertPicture*; VAR ops: Controllers.PollOpsMsg; c: TextControllers.Controller; script: Stores.Operation; s: TextMappers.Scanner; f: TextMappers.Formatter; r1, r2: TextRulers.Ruler; v : AbfMedia.View; loc: Files.Locator; name: Files.Name; a: ApplyFilter; BEGIN c := TextControllers.Focus(); Controllers.PollOps(ops); IF ~ c.HasSelection() & (Controllers.paste IN ops.valid) THEN Dialog.GetIntSpec("*", loc, name); IF loc # NIL THEN Models.BeginScript(c.text, "#CellUtils:InsertPicture", script); f.ConnectTo(c.text); s.ConnectTo(c.text); s.Scan; IF s.rider.attr # NIL THEN f.rider.SetAttr(s.rider.attr) END; ForceToNewLine(c); r1 := TextViews.ThisRuler(c.view, c.CaretPos()); r1 := TextRulers.CopyOf(r1, Views.deep); r2 := TextRulers.CopyOf(r1, Views.deep); TextRulers.SetCentered(r1); TextRulers.SetNoBreakInside(r1); Controllers.PasteView(r1, Views.undefined, Views.undefined, FALSE); TextCmds.InsertParagraph; v := AbfMedia.dir.New(); v.SetEmbLink(loc(HostFiles.Locator).path$ + "/" + name$); Controllers.PasteView(v, 400 * Ports.point, 400 * Ports.point, FALSE); v.AllowResize(1); TextCmds.InsertParagraph; f.SetPos(c.CaretPos()); f.WriteString("Рис. #. Подпись к рисунку"); f.WriteLn; TextCmds.InsertParagraph; Controllers.PasteView(r2, Views.undefined, Views.undefined, FALSE); (* Устанавливаем фильтр *) NEW(a); a.v := v; Services.DoLater(a, Services.now); Models.EndScript(c.text, script) END; END END InsertPicture; END CellUtils. |
Автор: | Иван Денисов [ Четверг, 31 Июль, 2014 08:50 ] |
Заголовок сообщения: | Re: Abf - Advanced BlackBox Framework |
Илья Ермаков писал(а): Иван, добрый день. Не занимался Abf-ом с 2006-го года. Если что-то предлагаете менять - на Ваше усмотрение, ну а публикация в коллекции OberonCore - по согласованию с администрацией OberonCore. Понял, ну посмотрим на отзывы других пользователей Abf. Интересно, Иван и Пётр, вы еще используете Abf? |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |