Показаны различия между двумя версиями страницы.
blackbox:domains [2018/08/17 19:51] иван_денисов |
blackbox:domains [2020/10/29 07:08] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Домены хранилищ в среде Блэкбокс ====== | ||
- | Идея заметки возникла в ходе обсуждения вопроса «возможно ли скопировать отображение из документа в документ, | ||
- | |||
- | Скопировать отображение без модели возможно только в одном документе, | ||
- | |||
- | При открытии нового документа, | ||
- | |||
- | Внутри документа копировать можно такими двумя процедурами: | ||
- | |||
- | < | ||
- | MODULE MyCopy; | ||
- | |||
- | IMPORT Containers, Views, TextControllers, | ||
- | |||
- | VAR | ||
- | view: Views.View; | ||
- | w, h: INTEGER; | ||
- | |||
- | PROCEDURE ShallowCopy*; | ||
- | VAR v: Views.View; | ||
- | BEGIN | ||
- | v := Containers.FocusSingleton(); | ||
- | IF v # NIL THEN | ||
- | view := v; | ||
- | view.context.GetSize(w, | ||
- | END | ||
- | END ShallowCopy; | ||
- | |||
- | PROCEDURE ShallowPaste*; | ||
- | VAR c: TextControllers.Controller; | ||
- | beg, end: INTEGER; | ||
- | BEGIN | ||
- | c := TextControllers.Focus(); | ||
- | IF (c # NIL) & (view # NIL) THEN | ||
- | (* Stores.Join(c.view, | ||
- | writer := c.text.NewWriter(NIL); | ||
- | c.GetSelection(beg, | ||
- | IF end > 0 THEN | ||
- | writer.SetPos(end) | ||
- | ELSE | ||
- | writer.SetPos(c.CaretPos()) | ||
- | END; | ||
- | writer.WriteView( | ||
- | Views.CopyOf(view, | ||
- | END | ||
- | END ShallowPaste; | ||
- | |||
- | END MyCopy. | ||
- | </ | ||
- | |||
- | При этом никто не мешает создавать много окон для отображений связанных с одной моделью, | ||
- | |||
- | < | ||
- | VAR | ||
- | m: Model; | ||
- | |||
- | ... | ||
- | |||
- | PROCEDURE NewModel*; | ||
- | BEGIN | ||
- | NEW(m); | ||
- | END NewModel; | ||
- | |||
- | PROCEDURE Open*; | ||
- | VAR v: View; | ||
- | BEGIN | ||
- | NEW(v); v.model := m; Stores.Join(v, | ||
- | Views.OpenView(v) | ||
- | END Open; | ||
- | |||
- | </ | ||
- | |||
- | Что это дает? | ||
- | |||
- | 1. При сохранении любого из документов на диск, в него запишется модель и отображение. | ||
- | |||
- | 2. При закрытии одного из документов, | ||
- | |||
- | т.е. отображения одного домена ведут себя как целое. | ||
- | |||
- | Используем для изучения вопроса пример ObxLines. Сначала скопируем отображение в отдельное окно через Ctrl+Space, уменьшим. Дальше смотрите видео. | ||
- | |||
- | {{ : | ||
- | |||
- | Модель одна, а отображения разные. При этом цвет - является параметром отображения, | ||
- | |||
- | |||
- | При попытке вставить это отображение в другой документ " | ||
- | |||
- | |||
- | {{ : | ||
- | |||
- | ---- | ||
- | |||
- | Авторы заметки: |