OberonCore
https://forum.oberoncore.ru/

GUID у View?
https://forum.oberoncore.ru/viewtopic.php?f=24&t=2622
Страница 1 из 1

Автор:  Иван Кузьмицкий [ Вторник, 04 Май, 2010 14:17 ]
Заголовок сообщения:  GUID у View?

Делаю "ресайзер" для формы. Для каждого внедрённого отображения надо сохранять стратегию изменения размера и позиции при смене размеров формы.

Вариант с обёрткой для каждого отображения не очень-то подходит, т.к. обёртка экранирует особенности отображения, например, элементов управления Controls.

Лучше всего было бы привязывать настройки стратегии к уникальному идентификатору (типа GUID) каждого внедрённого отображения.

Но у отображений нет GUID. А почему бы и не заиметь, собственно?

Автор:  Евгений Темиргалеев [ Вторник, 04 Май, 2010 16:51 ]
Заголовок сообщения:  Re: GUID у View?

Иван Кузьмицкий писал(а):
Для каждого внедрённого отображения надо сохранять стратегию изменения размера и позиции при смене размеров формы.
а зачем сохранять именно в отображении?

Если мне память не изменяет, в QT, для каждого "контейнера" задаётся отдельный механизм Layout, который размещает контролы внутри области, занимаемой контейнером. И этот Layout с внедрёнными контролами никак не пересекается.

Эта схема мне при использовании показалось более удобной, нежели хранение в контроле, как, например, в Делфи. И реализация раздельная...

За основу взять копию Forms и...

Автор:  Axcel [ Вторник, 04 Май, 2010 16:55 ]
Заголовок сообщения:  Re: GUID у View?

Т.е. хранить в отдельном специальном списке с уникальным номером элемента? Что-то вроде дельфовой коллекции? Item произвольный, но унаследованный от базового типа?
Это мне было бы понятно, но в КП - ББ вроде бы другая стратегия: шина сообщений, которые распознаются по типу, соответственно зачем тогда GUID?

Автор:  Иван Кузьмицкий [ Вторник, 04 Май, 2010 17:27 ]
Заголовок сообщения:  Re: GUID у View?

Евгений Темиргалеев писал(а):
Иван Кузьмицкий писал(а):
Для каждого внедрённого отображения надо сохранять стратегию изменения размера и позиции при смене размеров формы.
а зачем сохранять именно в отображении?
Конечно, необязательно. Настройки стратегии ресайзинга надо вообще где-то хранить. Только привязывать их необходимо к тому отображению, которому задаётся эта самая стратегия. Проблемы бы не было, если бы каждое отображение имело свой уникальный, глобальный идентификатор (который, к тому же, ещё и сохраняется вместе с отображением)

Евгений Темиргалеев писал(а):
в QT, для каждого "контейнера" задаётся отдельный механизм Layout, который размещает контролы внутри области, занимаемой контейнером. И этот Layout с внедрёнными контролами никак не пересекается.
То есть, параметры размещения (ну и ресайзинг, стало быть) контролируются этим Layout?

Евгений Темиргалеев писал(а):
За основу взять копию Forms и...
Всё равно, нужна возможность отличать экземпляры отображений друг от друга.

Axcel писал(а):
шина сообщений, которые распознаются по типу, соответственно зачем тогда GUID?
Затем, что два отображения одинакового типа могут иметь разные стратегии ресайза. Например, одна таблица изменяет размер, а другая только перемещается по форме.

Автор:  Илья Ермаков [ Вторник, 04 Май, 2010 17:30 ]
Заголовок сообщения:  Re: GUID у View?

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

Единственное, он должен периодически проверять все свои вьюшки на предмет того, что они ещё лежат в тексте, если нет - то "отпускать" на сборку мусора.

Автор:  Иван Кузьмицкий [ Вторник, 04 Май, 2010 17:33 ]
Заголовок сообщения:  Re: GUID у View?

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

Автор:  Илья Ермаков [ Вторник, 04 Май, 2010 17:51 ]
Заголовок сообщения:  Re: GUID у View?

Так зачем Вам тот же самый? Важно, что после ReadStore будет установлена связь с той же вьюшкой, на которую была ссылка при WriteStore. А внутри Вашего layout-а уже нумеруйте эти ссылки, как хотите (массив их имейте, и т.п.).
Да просто список, где каждый пункт хранит ссылку на вьюшку - и все параметры к ней.

Автор:  Иван Кузьмицкий [ Вторник, 04 Май, 2010 17:58 ]
Заголовок сообщения:  Re: GUID у View?

Хм-м, использовать это свойство хранилища я как-то не додумался...

Стало быть, мой layout сохраняет список всех вьюх, обнаруженных им на форме. Записал вьюшку - тут же записал её стратегию. Ведь неважно, сколько было попыток WriteStore для конкретной вьюшки - она сохранится только один раз!
При загрузке из файла, читаем в обратном порядке.

Да, изящненько выходит... Надо попробовать!

Автор:  Info21 [ Вторник, 04 Май, 2010 18:51 ]
Заголовок сообщения:  Re: GUID у View?

Иван Кузьмицкий писал(а):
Хм-м, использовать это свойство хранилища я как-то не додумался... Да, изящненько выходит... Надо попробовать!
Стараюсь повторять при каждой возможности, что Store'ы надо особо прочувствовать в силу краеугольности этого механизма для динамических структур данных.

Автор:  Иван Кузьмицкий [ Воскресенье, 16 Май, 2010 14:15 ]
Заголовок сообщения:  Re: GUID у View?

Всё прекрасно работает! Ссылки на вьюшки спокойно кладутся в хранилище, рядом с ними сохраняются настройки для каждой, и в обратном порядке считываются из хранилища.

Stores - сила.

Автор:  Иван Кузьмицкий [ Среда, 19 Май, 2010 21:27 ]
Заголовок сообщения:  Re: GUID у View?

С этим TabView морока...

Не работает, короче, с ним схема с размещением вьюшек. Дело в том, что при интернализации, TabView всегда создаёт копию вьюшки. Получается так, что мой ресайзер сохраняет одну вьюшку, а после открытия документа, TabView создаёт другую...

Автор:  Иван Кузьмицкий [ Пятница, 21 Май, 2010 22:13 ]
Заголовок сообщения:  Re: GUID у View?

Победил я, дорогие товарищи.

Для StdTabViews ввёл дополнительную процедуру сверки внедрённых отображений. Они сверяются с теми, что накоплены в разметке (layout), учитывая координаты ограничивающего прямоугольника l, t, r, b.

Другими словами, если зарегистрирована стратегия для некоей области l, t, r,b на форме, то отображение в этой области и будет ресайзится.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/