Цитата:
Вопрос: как открыть модель в разных документах, чтобы они по настоящему были независимыми?
В разных документах можно открыть по-настоящему независимые (несцепленные) виды на одну модель:
Код:
PROCEDURE Do* ();
PROCEDURE Do*;
VAR t: TextModels.Model; v1, v2: TextViews.View; doc: Documents.Document;
BEGIN
t := TextModels.dir.NewFromString('Make it as simple as possible, but not simpler');
v1 := TextViews.dir.New(t);
Views.OpenView(v1);
v2 := TextViews.dir.New(t);
doc := Documents.dir.New(v2, Views.undefined, Views.undefined);
Windows.dir.Open(Windows.dir.New(), doc, {}, 'Title', Files.dir.This(''), 'file.name', Converters.list);
END Do;
Т.е. Views.OpenView сцепляет вид с ранее открытыми видами в том же домене. Если это нежелательно - можно использовать другие средства.
Однако, кмк, это не поможет решить поставленную задачу.
Если я правильно понял, вы хотите, чтобы в нижней части произвольных окон появлялись виды, отражающие одну и ту же модель. При этом в самом окне - иной произвольный вид на другой модели. Так?
Разберу ситуацию.
Вид А на модель МА в окне 1; это отдельный (я полагаю) документ/файл => отдельный домен ДА.
Вид Б на модель МБ в окне 2; это отдельный документ/файл => отдельный домен ДБ.
В оба вида А и Б вы вставляете вид В на модель МВ.
Тут не возникнет проблем, но есть нюанс. Модельные и видовые сообщения рассылаются не "повсюду", а в рамках домена; при этом считается, что одно окно = один домен. Выходит, что если вы отправите модельное сообщение для модели МВ, а вид В встроен в окно 1 в домене ДА, то вид В не получит этого сообщения. Так же и в окне 2 в домене ДБ. То же касается и видовых сообщений; а если учесть, что Views.Update работает с помощью видовых сообщений, то визуально будет картинка, что вид В перестал рисоваться и обновляться вообще.
Как же решить задачу?
1) Использовать широковещательную рассылку для всех своих нужд. Но: TextModels.StdModel не будет делать широковещательную - а вы же хотите текст использовать? поэтому на них нельзя будет полагаться, нужно будет дополнительно отправлять ШВсообщение после важных изменений в МВ. Это доп. нагрузка на систему, но м.б. вполне допустимой в вашем приложении.
2) Вставить в ваш текст МВ приборы (контролы). Их обновление уже сделано на ШВ-сообщениях, им все равно, в каком домене они оказались. Ограничение: приборы привязываются к глобально-достижимым переменным; но это может подходить для вашей задачи, т.к. вы пишете "отражать состояние моей подсистемы".
3) Подправить ручками реализацию, чтобы при некоторых условиях виды получали сообщения нужных доменов, независимо от того, в какой домен сами эти виды вставлены. Если интересно - я могу показать, где и как.
И кстати, обратите внимание: в ББ20 можно вставлять в окна произвольные панели в верхнюю и нижнюю часть. Строка состояния в большом окне ББ20 сделана именно так, и это же можно сделать с любым окном. При этом (ВНИМАНИЕ!) не нужно ничего делать с тем видом, который открыт в документе.