OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:38

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




Начать новую тему Ответить на тему  [ Сообщений: 387 ]  На страницу Пред.  1 ... 14, 15, 16, 17, 18, 19, 20  След.
Автор Сообщение
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 05:31 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
короче. `StdDocuments.DuplicateAs()` должна выглядеть вот так:
Код:
   (* utility procedure to create duplicated document; will not record the changes in undo buffer *)
   PROCEDURE DuplicateAs* (src: Documents.Document; dir: Documents.Directory): Documents.Document;
   VAR
      l, t, r, b: INTEGER;
      res: Documents.Document;
      seq: Sequencers.Sequencer;
      s: ANYPTR;
   BEGIN ASSERT(src # NIL, 20);
      IF dir = NIL THEN dir := Documents.dir END;
      (* do not record document changes; uses undocumented flag *)
      IF src.Domain() # NIL THEN
         s := src.Domain().GetSequencer();
         IF s # NIL THEN WITH s: Sequencers.Sequencer DO seq := s END WITH ELSE seq := NIL END;
         IF seq # NIL THEN seq.BeginModification(3(*notRecorded*), NIL) END
      ELSE seq := NIL
      END;
      src.PollRect(l, t, r, b);
      res := dir.New(Views.CopyOf(src.ThisView(), Views.shallow), r - l, b - t);
      res.SetRect(l, t, r, b);
      res.ThisController().SetOpts(src.ThisController().opts);
      IF seq # NIL THEN seq.EndModification(3(*notRecorded*), NIL) END;
      RETURN res
   END DuplicateAs;

и тогда хак в `StdCmds.SaveWindow()` можно смело аннигилировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 06:01 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
И ещё сделать, чтобы форма при вызове команды "открыть как инструментальный диалог", открывалась в отдельном окне.
лично я привинтил новый флаг `Views.alwaysDetached`, и передаю его в `StdApi.OpenAuxDialog()`. флаг в любом случае полезный, потом пригодится.

p.s.: если что — я это всё только что сделал, когда ваши сообщения прочитал. так что я не зажал багфиксы, а только что написал и сразу поделился. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 06:04 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
p.s.: `DuplicateAs()` НАДО поменять как я написал. потому что иначе любой экспорт документа будет гадить в undo, а это неправильно, и версия 1 среды так не делает. а если поменять — то всё магически станет как раньше. и в `StdWindows` перестать таскать копипасту, а взять опубликованый `StdDocuments.DuplicateAs()` — всё равно там StdDocuments импортируется, нет смысла делать копипасту, к тому же ещё и неправильную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 06:17 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
и да, я вообще унёс `DuplicateAs()` в `Documents`. вещь полезная, много где пригождается, и ничего специфического из `StdDocuments` не использует. зато если её сделать стандартным API — то мы больше не облажаемся так с пересозданием документов, а будем просто использовать уже имеющийся и стандартный механизм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 14:01 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Есть проблемы в новой сборке с переходом к позициям опять. Сегодня обнаружил, что некоторые вещи неправильно сделал. Там ещё с этими флагами путаница. В общем, буду чинить и попробую применить ваш новый DuplicateAs.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 18:04 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
вообще, я себе добавил вот такое в StdApi:
Код:
   PROCEDURE OpenWithFlags* (v: Views.View; title: ARRAY OF CHAR; loc: Files.Locator;
                                          name: Files.Name; conv: Converters.Converter; flags: SET);
   BEGIN viewHook.Open(v, title, loc, name, conv, flags)
   END OpenWithFlags;

потому что бесконечные булы в Open… `StdApi.Open()` — это откровенно плохой апи. вот прямо пример того, как не надо делать. как будто кто-то его под веществами туда засунул.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 18:14 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
(задумался) кстати, внезапно не хватает ещё одного вида экспорта методов: «минус дополнительный». который как минус, но только ещё и любой наследник базового объекта может эти методы звать.

ну вот у нас есть какой-то хук. мы его публикуем как `VAR hook-: SomeHook`, и всё как полагается. методы хука экспортируем как `PROCEDURE DoIt-;` — чтобы помимо нашего модуля никто хук не звал. всё вроде бы отлично… ровно до тех пор, пока мы не захотим сделать цепочку хуков. то есть поставить ещё один, который частично делает DoIt сам, а иногда зовёт старый. и тут мы приехали, потому что `DoIt` — module restricted. надо, чтобы DoIt оставался module restricted, но и чтобы любой наследник `SomeHook` мог его позвать. что-то типа `PROCEDURE DoIt+`.

конечно, можно просто грозить пальчиком и экспортировать `DoIt*`. но с ещё одной формой экспорта как-то надёжней будет: программеры ленивые, если им для вызова хука напрямую придётся городить наследника — то есть шанс, что поищут официальный апи вместо хака. а если `Module.hook.DoIt` Просто Работает… ну, нехорошо.

по-моему, я очень умный и здорово придумал. как вам кажется, коллеги?

p.s.: блин, дошло: я же придумал `protected` из крестов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 20:56 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
и тогда хак в `StdCmds.SaveWindow()` можно смело аннигилировать.

Он ещё имеет смысл для MDI сборки, там ведь нет StdDocuments, поэтому пусть будет, пожалуй.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 21:21 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
arisu писал(а):
и тогда хак в `StdCmds.SaveWindow()` можно смело аннигилировать.

Он ещё имеет смысл для MDI сборки, там ведь нет StdDocuments, поэтому пусть будет, пожалуй.

так он появляется ровно от того, что `StdDocuments` неправильно делает дубликат. в MDI лишних undo и не было никогда, там дубликаты никто не делает. я сейчас перепроверил на LC это.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 21:34 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
arisu писал(а):
и тогда хак в `StdCmds.SaveWindow()` можно смело аннигилировать.

Он ещё имеет смысл для MDI сборки, там ведь нет StdDocuments, поэтому пусть будет, пожалуй.

так он появляется ровно от того, что `StdDocuments` неправильно делает дубликат. в MDI лишних undo и не было никогда, там дубликаты никто не делает. я сейчас перепроверил на LC это.

А, понял спасибо!


Вот ещё такой момент подправьте у себя, правильно брать noVScroll noHScroll из флагов окна, Антон это позднее исправил, а я не перенёс. А у StdDocuments эти константы убрались.
Код:
PROCEDURE (m: StdModel) UpdateScrollbars (f: Views.Frame; opts: SET);
      VAR recalc, updV, updH, showV, showH: BOOLEAN; flags: SET;
   BEGIN
      WITH f: Views.RootFrame DO flags := f.flags ELSE flags := {} END;
      showV := ~(Windows.noVScroll IN flags); showH := ~(Windows.noHScroll IN flags);
      IF showV THEN


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:17 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Вот ещё такой момент подправьте у себя, правильно брать noVScroll noHScroll из флагов окна, Антон это позднее исправил, а я не перенёс. А у StdDocuments эти константы убрались.
ага, спасибо! вообще, надо бы пройтись по всему коду и минимизировать копипасту где возможно. то есть, где уже импорты нужные есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:23 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ох, блин, я сейчас нехило испугался. сделал по вашему предложению OpenAuxDialog в отцепленых окнах же, и нажал F1. ой. ;-) даже не знаю, оставлять так, или нет… ;-) (в смысле, открывать помощь диалогом, или просто как aux.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:27 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
ох, блин, я сейчас нехило испугался. сделал по вашему предложению OpenAuxDialog в отцепленых окнах же, и нажал F1. ой. ;-) даже не знаю, оставлять так, или нет… ;-) (в смысле, открывать помощь диалогом, или просто как aux.)

Не совсем понял о чем вы, вот я сейчас отправил коммит. Почти всем доволен, как всё получается.

Вложение:
help.png
help.png [ 93.74 КБ | Просмотров: 3096 ]


Спасибо за решение с тем, чтобы документ не терял свои истоки на диске!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:30 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
Вот ещё такой момент подправьте у себя, правильно брать noVScroll noHScroll из флагов окна, Антон это позднее исправил, а я не перенёс. А у StdDocuments эти константы убрались.
ага, спасибо! вообще, надо бы пройтись по всему коду и минимизировать копипасту где возможно. то есть, где уже импорты нужные есть.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:31 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
кстати. в StdDialog сидит дубликат `viewHook: Views.ViewHook`. его единственная задача там — эм… быть. и дублировать хук из Views. методы хука в Views всё равно публичные, так что в StdTiles можно сделать обёртку-chain, а в StdDialog дубликат хука убрать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:37 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Windows версия вот такой странный глюк демонстрирует.
В Linux или MDI сборке такого не наблюдается.

Если изменять размеры документа, выделенного через Ctrl+Space (как раз починил, чтобы рамка показывалась), то рамка то обновляется, а само отображение не перерисовывается сразу, а только при следующем изменении.

Если есть у кого-то идеи на этот счёт, поделитесь, пожалуйста.


Вложения:
vlcsnap-2023-06-01-02h35m24s668.png
vlcsnap-2023-06-01-02h35m24s668.png [ 40.92 КБ | Просмотров: 3095 ]
vlcsnap-2023-06-01-02h35m19s738.png
vlcsnap-2023-06-01-02h35m19s738.png [ 42.99 КБ | Просмотров: 3095 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:44 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
кстати. в StdDialog сидит дубликат `viewHook: Views.ViewHook`. его единственная задача там — эм… быть. и дублировать хук из Views. методы хука в Views всё равно публичные, так что в StdTiles можно сделать обёртку-chain, а в StdDialog дубликат хука убрать.

Тут для надёжности, чтобы не остался у нас StdDialog без метода Open. Либо он свой использует, либо из тайлера, если StdTiles не загружен, то он будет использовать обычную окнооткрвалку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:55 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Тут для надёжности, чтобы не остался у нас StdDialog без метода Open. Либо он свой использует, либо из тайлера, если StdTiles не загружен, то он будет использовать обычную окнооткрвалку.
так я не про реализацию, я про то, что глобальная переменная, которая хук хранит — она уже есть в Views, а в StdDialog ещё одна. и их усердно синхронизируют, а смысла в этом никакого нет. достаточно вызывать `Views.SetViewHook()`, а дублирующий глобал в StdDialog убрать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 22:59 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
(задумался) кстати, внезапно не хватает ещё одного вида экспорта методов: «минус дополнительный». который как минус, но только ещё и любой наследник базового объекта может эти методы звать.

ну вот у нас есть какой-то хук. мы его публикуем как `VAR hook-: SomeHook`, и всё как полагается. методы хука экспортируем как `PROCEDURE DoIt-;` — чтобы помимо нашего модуля никто хук не звал. всё вроде бы отлично… ровно до тех пор, пока мы не захотим сделать цепочку хуков. то есть поставить ещё один, который частично делает DoIt сам, а иногда зовёт старый. и тут мы приехали, потому что `DoIt` — module restricted. надо, чтобы DoIt оставался module restricted, но и чтобы любой наследник `SomeHook` мог его позвать. что-то типа `PROCEDURE DoIt+`.

конечно, можно просто грозить пальчиком и экспортировать `DoIt*`. но с ещё одной формой экспорта как-то надёжней будет: программеры ленивые, если им для вызова хука напрямую придётся городить наследника — то есть шанс, что поищут официальный апи вместо хака. а если `Module.hook.DoIt` Просто Работает… ну, нехорошо.

по-моему, я очень умный и здорово придумал. как вам кажется, коллеги?

p.s.: блин, дошло: я же придумал `protected` из крестов.


То есть для наследование возможно, а вызов нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 31 Май, 2023 23:01 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
Тут для надёжности, чтобы не остался у нас StdDialog без метода Open. Либо он свой использует, либо из тайлера, если StdTiles не загружен, то он будет использовать обычную окнооткрвалку.
так я не про реализацию, я про то, что глобальная переменная, которая хук хранит — она уже есть в Views, а в StdDialog ещё одна. и их усердно синхронизируют, а смысла в этом никакого нет. достаточно вызывать `Views.SetViewHook()`, а дублирующий глобал в StdDialog убрать.

Тогда придется экспортировать stdViewHook, чтобы его мог устанавливать StdTiles ?
Тогда люди его смогут вызывать напрямую. Тут как раз такая защита без protected.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 387 ]  На страницу Пред.  1 ... 14, 15, 16, 17, 18, 19, 20  След.

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


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

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


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

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