OberonCore
https://forum.oberoncore.ru/

Как правильно копировать?
https://forum.oberoncore.ru/viewtopic.php?f=23&t=1669
Страница 1 из 1

Автор:  Иван Горячев [ Среда, 24 Июнь, 2009 07:20 ]
Заголовок сообщения:  Как правильно копировать?

Коллеги, вопрос.

Имеется (текстовый) документ, в котором лежит несколько групп разных view с одной моделью для каждой группы. Требуется скопировать часть из этих отображений в новый документ, причём в результате должны получиться группы со своими моделями. Копирование идёт через буфер обмена стандартными средствами ББ.

Как?

Каркас ББ при копировании использует на модели Stores.CopyOf(..., deep), в результате группы отображений распадаются на одиночек с "персональными" моделями.

Автор:  Info21 [ Среда, 24 Июнь, 2009 08:30 ]
Заголовок сообщения:  Re: Как правильно копировать?

Иван Горячев писал(а):
Каркас ББ при копировании использует на модели Stores.CopyOf(..., deep) ...
На вопрос ответить не могу -- скорее всего, придется извращаться.

Но скажу, что тут некая общая проблема в каркасе ББ:
Не прояснена работа с доменами и вообще модуль Stores -- который по идее независимый и довольно фундаментальный по сути.

Начиная с того, что в нем нет, например, средства рассылки сообщений по Store'ам домена (независимо от существования вьюшек как идеи). Или перечисления Store'ов домена.
Плюс, само понятие домена как-то привязано к вьюшкам. Ясно, откуда они (домены) пошли, но они не абстрагированы хорошенько. А надо. Связка Store+Domain -- фундаментальна.

Если прояснить Stores в этом отношении, то это даст основу для прояснения механизмов рассылки сообщений и для вьюшек -- ну и ответов на вопросы типа заданного.

Автор:  Иван Горячев [ Среда, 24 Июнь, 2009 08:37 ]
Заголовок сообщения:  Re: Как правильно копировать?

К сожалению что-либо сделать со Stores невозможно - там всё прибито гвоздями, прикручено болтами и заварено.
А насчёт извращаться - всю голову сломал :(

Автор:  Info21 [ Среда, 24 Июнь, 2009 10:57 ]
Заголовок сообщения:  Re: Как правильно копировать?

Иван Горячев писал(а):
К сожалению что-либо сделать со Stores невозможно ...
Да ла-а-адно, спилим болты, если что :)

Автор:  Иван Кузьмицкий [ Среда, 24 Июнь, 2009 11:26 ]
Заголовок сообщения:  Re: Как правильно копировать?

Наверное, такая стратегия копирования неслучайна и выбрана, скорее всего, для простоты. Ведь при копировании вьюшек и их моделей в другой домен, нужно либо распатронивать связки на отдельные модели, либо восстанавливать граф "модель - вьюшки". Восстановление графа, мне кажется, является более частным случаем, т.к. вариантов восстановления масса. Поэтому и сделали как проще.

Выходом из ситуации мне видится ручное восстановление после копирования, по каким-нибудь идентификаторам, заложенным в модель и вьюхи перед копированием.

Автор:  Иван Горячев [ Четверг, 25 Июнь, 2009 03:26 ]
Заголовок сообщения:  Re: Как правильно копировать?

Голову я таки сломал. Итак:

Выяснилось, что Views.CopyOf вызывает метод CopyFromModelView только если он переопределён. Иначе - CopyFromSimpleView, причём независимо от наличия у отображения модели. Так что эту часть обмануть легко. А для "одноразового" копирования пришлось соорудить простенький модуль (прилагается). Единственная проблема осталась во внедрении его в среду. С меню всё просто:
Код:
   "#System:Menu.Edit.Copy"   "C"   "BbtCopy.Begin;HostCmds.Copy;BbtCopy.End"   "HostCmds.CopyGuard"

А вот реагирование на Ctrl+Shift и прочее жёстко зашито в HostMenus. Обидно - это мои любимые сочетания клавиш :(

Вложения:
Lists.odc [3.08 КБ]
Скачиваний: 718
Copy.odc [2.51 КБ]
Скачиваний: 716

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