OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 06 Август, 2020 04:08

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Определение "открытости" View
СообщениеДобавлено: Вторник, 01 Июль, 2008 16:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Можно ли как-нибудь определить, открыт ли данный v: View в качестве корневого view в каком-нибудь окне документа?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Вторник, 01 Июль, 2008 17:59 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2651
Откуда: Россия, Ярославль
перебрать все окна через Windows.dir и сравнить v c Windows.Window.doc.OriginalView()??? Или это не вариант?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Вторник, 01 Июль, 2008 18:20 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2651
Откуда: Россия, Ярославль
Или ещё можно сравнить тип v.context с Documents.Context.
Зная, что при открытии окна из оригинального отображения создаёься отображение-документ Documents.Document, можно предположить, что такой способ поможет. Правда неизвестно, зануляется ли v.context при закрытии окна(чтобы наверняка знать, открыто окно или уже нет), по идее должен...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Понедельник, 30 Апрель, 2012 08:15 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2808
Нашелся ли ответ на вопрос, как вы в итоге сделали проверку?

Я пользовался раньше, вот такой реализацией, где-то нашел в примерах, но как оказалось она глючит, если открыто несколько окон.
Код:
Msg = RECORD (Models.Message)
   consumed: BOOLEAN;
END;

PROCEDURE ShowNN* ();
   VAR msg: Msg;
BEGIN
   msg.consumed := FALSE;
   Views.Omnicast(msg);
   IF ~ msg.consumed THEN
      NEW(v);
      Views.OpenAux(v, "Сеть")
   ELSE
      Views.Update(v, TRUE)
   END
END ShowNN;

PROCEDURE (v: View) HandleModelMsg  (VAR msg: Models.Message);
BEGIN
   WITH msg: Msg DO
      msg.consumed := TRUE
   END
END HandleModelMsg;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Понедельник, 30 Апрель, 2012 09:32 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Иван Денисов писал(а):
Нашелся ли ответ на вопрос, как вы в итоге сделали проверку?

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

1) Где требутеся в одно "глобальное" окно, заводил глобальную переменную в модуле типа v: Views.View.
Код:
   VAR   log: TextModels.Model;
...
   PROCEDURE OpenLog*;
   BEGIN
      IF log = NIL THEN log := TextModels.dir.New() END;
      Views.OpenAux(TextViews.dir.New(log), "Журнал")
   END OpenLog;

2) В WorkWindows используется перебор по Windows.dir и заголовку окна. Пётр про подобный вариант говорил.

А у Вас какая задача?

P.S. Реализация врят ли "глючит". Та рассылка сообщений предназначена только для перерисовки вьюшек (видимых в данный момент). Невидимым сообщения не доходят, т.к. их перерисовывать не надо. Сам несколько раз напарывался на недопонимании/забывании этого момента.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Четверг, 23 Октябрь, 2014 14:09 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Ещё один способ, но с другого направления. Понадобилось найти окно, в котором расположено отображение. Алгоритм такой:

1) Определить домен отображения d := v.Domain(). Поскольку домен ассоциируется с документом, то мы получим как раз домен документа.
2) У домена возьмём его секвенсор seq := d.GetSequencer(). Ведь мы знаем, что при создании окна ему назначается секвенсор домена документа (см. HosWindows.Directory.Open).
3) А дальше, остаётся перебрать все окна, начиная с Windows.dir.First() и определить окно, в котором наш секвенсор, seq = w.seq.

Что касается обсуждаемой темы, то имея окно, можно легко узнать его фрейм и корневое отображение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Четверг, 23 Октябрь, 2014 20:17 
Аватара пользователя

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

А у меня в коде выше была ошибка пропущенного ELSE. С ним не глючит.
Код:
PROCEDURE (v: View) HandleModelMsg  (VAR msg: Models.Message);
BEGIN
   WITH msg: Msg DO
      msg.consumed := TRUE
   ELSE
   END
END HandleModelMsg;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Четверг, 23 Октябрь, 2014 20:29 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Четверг, 23 Октябрь, 2014 20:59 
Модератор
Аватара пользователя

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

А ещё они во многом мерялись с COM-ами всякими, так или иначе (что они явно конкурировать собирались на этом поле, видно из книги Пфистера. И позицинировались, и параллелили концепции с этими делами. Только не учли любимого занятия MS в 90-х - пока конкуренты и потребители осваивают новую игрушку и примеряются, с какого края её, такую страшную, ...., нужно готовить уже новую неведому зверюшку...)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение "открытости" View
СообщениеДобавлено: Четверг, 23 Октябрь, 2014 21:56 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Илья Ермаков писал(а):
Только не учли любимого занятия MS в 90-х - пока конкуренты и потребители осваивают новую игрушку и примеряются, с какого края её, такую страшную, ...., нужно готовить уже новую неведому зверюшку...)
А это же не только MS любимое занятие. Это бизнес-модель современного ИТ-майнстрима, как я считаю. Подмять под себя предметную область, завалить инструментарием, библиотеками, фреймворками и платформами. И всё, пользователи никуда не денутся, ибо готовые и бесплатные вычисления - вот они, а платить останется только за то, что всякие там SAP, MS да ораклы не успели ещё освоить. Надо брать, да поскорее, иначе конкурент не постесняется и увеличит себе норму прибыли.

А швейцарцы положили, что они предоставляют только качественный, расширяемый каркас, а освоение предметной области будет возникать рыночным способом. Другая бизнес-модель, да.


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

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


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

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


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

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