OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 27 Сентябрь, 2022 03:58

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




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 27 Июль, 2022 20:39 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
Здравствуйте.

В документации ББ написано, что одну модель можно показывать в разных вьюшках. В принципе, получается: вот такой простой код открывает два окна с одной и той же некстовой моделью:

Код:
PROCEDURE Do1 * ();
  VAR
    m:TextModels.Model;
    v1,v2:TextViews.View;
  BEGIN
    m:=TextModels.dir.New();
    m.NewWriter(NIL).WriteChar('0');
    v1:=TextViews.dir.New(m);
    v2:=TextViews.dir.New(m);
    Views.OpenView( v1 );
    Views.OpenView( v2 );
  END Do1;


Но при этом эти окошки не являются независимыми документами: если закрыть первый документ, то закрывается и второй; если второй документ помечен как несохранённый (dirty), то при его закрывании не выдаётся запрос на сохранение.

Вопрос: как открыть модель в разных документах, чтобы они по настоящему были независимыми?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Июль, 2022 20:41 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
BB 1.8-b1 build number 166


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 28 Июль, 2022 07:33 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1420
GameHunter писал(а):
Вопрос: как открыть модель в разных документах, чтобы они по настоящему были независимыми?

Модель это и есть документ. Если хотите разные документы, создавайте разные модели.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 28 Июль, 2022 17:34 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
Цитата:
Модель это и есть документ...

Да вроде бы нет... Вроди бы контейнеры могут содержать самые разнообразные вьюшки со своими моделями...

Я описание своего вопроса предельно упростил, чтобы не отвлекаться на несущественные детали. Вообще-то я хочу к некоторым документаам присоединить внизу текст, который отражает состояние моей подсистемы - вот и получается, что текст надо отображать в разных документах...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Июль, 2022 17:09 
Модератор
Аватара пользователя

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

Вопрос, что вы понимаете под "независимые". Модель-то одна - уже зависимость.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Июль, 2022 16:19 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
Хочу к некоторым документам приделать снизу что-то вроде продвинутого статусбара - это будет вьюшка, отображающая текстовую модель. Этот "статусбар" и будет себя вести как статусбар - т.е. он не будет сохраняться в документ. Проблема в том, что если в разные документы внедрить общую модель (при этом получается, что оба документа принадлежат одному domain'у), то появляются описанные выше побочные эффекты.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 01 Август, 2022 23:28 
Модератор
Аватара пользователя

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

Тогда стоит сделать отдельную вьюшку-контейнер, которая понимает, откуда брать состояние, кладёт его в вложенный в себя текст.

И вставлять во все документы независимо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Август, 2022 03:51 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
То есть надо копировать текст, отражающий глобальное состояние, в каждый документ, правильно я понял?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 03 Август, 2022 20:11 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3253
То, что вы хотите сделать, называется обертка "wrapper".
Посмотрите пример ObxWrappers.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Август, 2022 00:53 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
Обёртки я уже освоил. Дело не в этом. Проблема, кажется, в том, что если открывать модель в разных вьюшках, а эти вьюшки открывають в разных документах, то получается, что разные документы принадлежат к одному Domain'у, и тогда имеют место описанные выше побочные эффекты. Запустите процедурку, которую я привёл в самом начале, - и сразу увидите проблему.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Август, 2022 09:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3253
GameHunter писал(а):
Обёртки я уже освоил. Дело не в этом. Проблема, кажется, в том, что если открывать модель в разных вьюшках, а эти вьюшки открывають в разных документах, то получается, что разные документы принадлежат к одному Domain'у, и тогда имеют место описанные выше побочные эффекты. Запустите процедурку, которую я привёл в самом начале, - и сразу увидите проблему.

Так это не проблема - а заложенное поведение. Он вам не даёт создать второй документ, не связанный с первым. Иначе бы посыпалась внутренняя логика работы фреймворка. Поэтому реально создаётся только один документ для одной модели. А потом открываются только визуальные копии одного документа с разными видами.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Август, 2022 09:07 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3253
Ещё, когда хотите, чтобы народ ваш тест запустил, лучше приводите весь код вот так примерно. А то приходится дописывать.

Код:
MODULE TestTest;

   IMPORT TextModels, TextViews, Views;
   
   PROCEDURE Do1* ();
  VAR
    m:TextModels.Model;
    v1,v2:TextViews.View;
  BEGIN
    m:=TextModels.dir.New();
    m.NewWriter(NIL).WriteChar('0');
    v1:=TextViews.dir.New(m);
    v2:=TextViews.dir.New(m);
    Views.OpenView( v1 );
    Views.OpenView( v2 );
  END Do1;

END TestTest.Do1


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Август, 2022 20:05 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 216
Откуда: Питер
Спасибо. Ясно.

Ворчание: у меня, как у пользователя (а не разработчика) системы, создаётся впечатление, что от этих domain'ов только вред, т.к. пользы от них никакой, а при взаимодействии разных документов то и дело приходится обходить ограничения этих domain'ов: делать копии моделей и вьюшек без видимой необходимости.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Август, 2022 21:48 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3253
От доменов большая польза, когда у вас составные документы появляются в проектах. И вам не приходится писать сложные интеграционные механизмы, чтобы они восстанавливались потом после загрузки с диска. А также домены делают Блэкбокс таким быстрым. Сообщения от модели видим идут только внутри доменов, а не как попало. И это экономит кучу ресурсов. Поэтому сообщения в Блэкбоксе недорогие вычислительно. Используйте чаще сообщения.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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


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

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


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

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