OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 14 Декабрь, 2019 16:07

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Суббота, 06 Декабрь, 2008 15:23 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4366
Откуда: Россия, Орёл
Илья Ермаков писал(а):
Надо посмотреть и разобраться. На выходных гляну.

Напоминаю, что текущая версия в открытом репозитории.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Суббота, 06 Декабрь, 2008 21:26 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Ну, значит, вот что.
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 и записывает. Но потом ещё и считывать её тоже надо...

Короче, второй вариант из-за изб. сложности отсеивается сразу. Поскольку не думаю, что изменение сигнатуры процедуры доставит кому-то хлопоты. Второй вариант привёл для полноты, дабы какие-нибудь наши "доброжелатели" не подняли опять хай о том, что "накрылась медным тазом ваша компонентность и развитие без перекомпиляций".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Воскресенье, 07 Декабрь, 2008 00:16 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2640
Откуда: Россия, Ярославль
Илья Ермаков писал(а):
Stores.Writer.writtenStore устанавливается только в конце процедуры WriteStore. В случае с формами в процедуру SaveList приходит вызов через несколько ещё незавершённых WriteStore. В текстах же какой-то WriteStore даже при пустом документе полностью отрабатывает уже. Таким образом, это поле оказывается равным NIL.

А вот почему, в аналогичных условиях, "одинокая" кнопка на форме записываться корректно(чисто академический интерес)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Воскресенье, 07 Декабрь, 2008 12:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Потому что в большинстве случаев записывается иерархия Stores, где каждый агрегат знает явно свои компоненты (под-сторы) и выполняет для них Join к себе самому. И writtenStore не используется вообще. А тут эти под-сторы AbfMedia.View-у неизвестны, они генерируются скрыто модулем AbfProperties, который их joinил к этому writtenStore.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Среда, 18 Февраль, 2009 02:39 

Зарегистрирован: Суббота, 27 Декабрь, 2008 16:10
Сообщения: 3
а не могли бы вы меня проконсультировать по вопросу устройства Abf и AbHost??

в юзер-ман написано:
Цитата:
Abhost - модули стандартной реализации каркаса. Платформенно-зависимы и не должны импортироваться клиентскими модулями. Abf не импортирует Abhost. Abhost инсталлирует конкретные фабрики в Abf.


вот меня интересует механизм инсталляции конкретных фабрик Abhost`а в Abf.
я не смог локализировать это место в коде. так что если мне кто нибудь укажет на то где и как это делается - я буду оч признателен.
(если еще и пояснения дадут - то вообще буду прыгать от счастья)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Среда, 18 Февраль, 2009 18:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Это было в документации "вообще" сказано, как бы пояснение, каким образом отделяется реализация.

На данный момент Abhost содержит только драйвер граф. форматов. И этот драйвер не инсталлирует фабрик.
Он имеет единственную процедуру Converter с фиксированным интерфейсом. Далее регистрируется в настройках подсистемы Abf (регистрацией занимается AbfMediaCmds). И AbfMedia смотрит, что для такого-то формата такой-то конвертер. И вызывает эту процедуру, когда файл надо открыть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Воскресенье, 27 Сентябрь, 2009 12:40 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Возвращаясь к конвертированию загруженного изображения.

Библиотека FreeImage поддерживает ряд функций-преобразователей цвета, в том числе и нужный мне ConvertToGreyScale.

Прежде чем вносить изменения в исходники Abf, хотелось бы получить совет от архитекторов Abf - как лучше поступить с реализацией конвертации.
Есть свойство BrowseProp, предназначенное для установки режимов отображения (фильтры сглаживания, прозрачность). Стоит ли его расширять режимами конвертации или же лучше ввести новое свойство, что-то вроде ConvertProp?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Воскресенье, 27 Сентябрь, 2009 17:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Вообще, Properties расширять вроде бы не следует.

Следует просто ввести отдельное независимое свойство.

Сам механизм свойств и так расширяем (произвольный набор прокачивается к объекту и от него).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Воскресенье, 04 Апрель, 2010 00:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Сделал ветку 1.6, там более новый FreeImage 3.1.3.1 и AbhostFreeImage поправлен - используются wchar-функции.

Под 1.6-rc6 (и даже из вайна с протормозами) вроде работает. Пробовал только на документации AbfMedia...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Суббота, 15 Январь, 2011 03:24 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
И где же нынче добыть оный Advanced BlackBox Framework?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выпущен Advanced BlackBox Framework
СообщениеДобавлено: Суббота, 15 Январь, 2011 13:26 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
См. тут: http://oberoncore.ru/svn
Лежит в старом хранилище.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Среда, 06 Июль, 2011 13:03 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Выложено в коллекцию: http://oberoncore.ru/bbcc/subs/abf/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Вторник, 31 Январь, 2012 11:01 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
AbfBus: внесены исправления из omcBus, не касающиеся интерфейса модуля. (подробности --- см. журнал в исходнике)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Вторник, 22 Май, 2012 15:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
AbfTools: внесены поправки от 15.05.2012 Ивана Кузьмицкого (в режиме разметки невидимый контрол показывает "рамку")


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Суббота, 06 Июль, 2013 20:10 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Не критично. Проблема скорее всего идёт с низов. Просто обратить внимание и сопоставить "> Views.undefined" и "# 0"...


Вложения:
Снимок.png
Снимок.png [ 34.13 КБ | Просмотров: 5416 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Вторник, 29 Июль, 2014 15:21 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2484
Добрался до вашей замечательной подсистемы 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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Вторник, 29 Июль, 2014 15:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2484
Второй вопрос-предложение, адаптировал Abfhost под интеграцию с последней версией FreeImage. Предлагаю такой вариант, он интересен тем, что не устареет в плане версии библиотеки, а также тем, что в распоряжении оказывается полное число функций библиотеки для других компонентов.


Вложения:
FreeImage.odc [26.79 КБ]
Скачиваний: 365
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Среда, 30 Июль, 2014 13:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Иван, добрый день.

Не занимался Abf-ом с 2006-го года.

Если что-то предлагаете менять - на Ваше усмотрение, ну а публикация в коллекции OberonCore - по согласованию с администрацией OberonCore.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Четверг, 31 Июль, 2014 08:47 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2484
Решил свою проблему с размерами картинки использованием отложенных действий 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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Abf - Advanced BlackBox Framework
СообщениеДобавлено: Четверг, 31 Июль, 2014 08:50 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2484
Илья Ермаков писал(а):
Иван, добрый день.

Не занимался Abf-ом с 2006-го года.

Если что-то предлагаете менять - на Ваше усмотрение, ну а публикация в коллекции OberonCore - по согласованию с администрацией OberonCore.


Понял, ну посмотрим на отзывы других пользователей Abf. Интересно, Иван и Пётр, вы еще используете Abf?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB