OberonCore
https://forum.oberoncore.ru/

BlackBox 2.0
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6819
Страница 18 из 20

Автор:  arisu [ Среда, 31 Май, 2023 23:20 ]
Заголовок сообщения:  Re: BlackBox 2.0

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

То есть для наследование возможно, а вызов нет?
наследники могут вызывать «плюсовые» методы, а больше никто не может. это такой `PROCEDURE (o: MyObj) Mt-`, только с той разницей, что любой наследник `MyObj` в любом модуле может вызвать `o.Mt`. а больше из других модулей никто не может. классический `protected`.

Автор:  arisu [ Среда, 31 Май, 2023 23:21 ]
Заголовок сообщения:  Re: BlackBox 2.0

Иван Денисов писал(а):
Тогда придется экспортировать stdViewHook, чтобы его мог устанавливать StdTiles ?
Тогда люди его смогут вызывать напрямую. Тут как раз такая защита без protected.
`stdViewHook` тоже не нужен. надо сделать в StdTiles простую агрегацию: в хуке из тайлера сохранять предыдущий, и вызывать его методы для всего, кроме `Open`. ну, как я в LC как раз сделал. и тогда из StdDialog больше публиковать ViewHook тоже не надо.

Автор:  arisu [ Среда, 31 Май, 2023 23:25 ]
Заголовок сообщения:  Re: BlackBox 2.0

про protected: это как раз инструмент защиты hook chains: когда мы сохраняем старый хук, ставим новый, и вызываем некоторые методы из старого. паттерн агрегации. сейчас это можно сделать только если все методы хука будут публичные — `*`. и тогда методы хука может вызывать кто угодно, просто взяв глобал этого хука. ну, `Views.viewHook.Open(…)`, например.

я считаю, что это плохо, и никто не имеет права так делать. но прятать глобал `viewHook` тоже нельзя, он нужен для chaining. поэтому нужен новый уровень защиты — как раз `protected`. чтобы наследники `ViewHook` могли вызывать любые методы `ViewHook`, но только они, а больше никто. тогда напрямую дёргать хук не выйдет, но делать цепочки — вполне.

Автор:  Иван Денисов [ Среда, 31 Май, 2023 23:31 ]
Заголовок сообщения:  Re: BlackBox 2.0

arisu писал(а):
Иван Денисов писал(а):
Тогда придется экспортировать stdViewHook, чтобы его мог устанавливать StdTiles ?
Тогда люди его смогут вызывать напрямую. Тут как раз такая защита без protected.
`stdViewHook` тоже не нужен. надо сделать в StdTiles простую агрегацию: в хуке из тайлера сохранять предыдущий, и вызывать его методы для всего, кроме `Open`. ну, как я в LC как раз сделал. и тогда из StdDialog больше публиковать ViewHook тоже не надо.

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

Автор:  arisu [ Среда, 31 Май, 2023 23:39 ]
Заголовок сообщения:  Re: BlackBox 2.0

Иван Денисов писал(а):
Тайлер опциональный модуль - программа может состоять только из одной формочки. Зачем ей тайлер тогда?
ну так правильно. есть тайлер — он делает chain и ставит свой хук. нету — остаётся хук из StdDialog. а дублирующий глобал в StdDialog не нужен, это довольно странная попытка прыгать вокруг отсутствующего `protected`, которая и выглядит стрёмно, и код запутывает. теперь у нас два места, где сидят указатели на ViewHook, и оба надо не забывать синкать. совершенно лишнее же.

Автор:  arisu [ Среда, 31 Май, 2023 23:43 ]
Заголовок сообщения:  Re: BlackBox 2.0

вот так в тайлере надо делать:
Код:
   TYPE
      ViewHook = POINTER TO RECORD (Views.ViewHook)
         prev: Views.ViewHook;
         tiled: BOOLEAN   (* whether tiling is on or off *)
      END;

   PROCEDURE (h: ViewHook) OldView+ (loc: Files.Locator; VAR name: Files.Name;
                                                   VAR conv: Converters.Converter): Views.View;
   BEGIN RETURN h.prev.OldView(loc, @name, @conv)
   END OldView;

   PROCEDURE (h: ViewHook) RegisterView+ (s: Views.View; loc: Files.Locator; name: Files.Name;
                                                         conv: Converters.Converter);
   BEGIN h.prev.RegisterView(s, loc, name, conv)
   END RegisterView;

   PROCEDURE (h: ViewHook) Open+ (v: Views.View; title: ARRAY OF CHAR; loc: Files.Locator;
                                                name: Files.Name; conv: Converters.Converter; openflags: SET);
   VAR
      flags: SET;
      proxy: Proxy;
      done: BOOLEAN;
      len: INTEGER;
      viewsTitle: Views.Title;
      w_: StdWindows.Window;
   BEGIN
      IF conv = NIL THEN conv := Converters.list END;   (* use document converter *)
… и так далее
[code]
и:
[code]
   PROCEDURE InstallViewHook*;
   BEGIN ASSERT(viewHook.prev = NIL, 20);
      viewHook.prev := Views.viewHook;
      Views.SetViewHook(viewHook);
   END InstallViewHook;

   PROCEDURE UninstallViewHook*;
   BEGIN IF viewHook.prev # NIL THEN Views.SetViewHook(viewHook.prev); viewHook.prev := NIL END
   END UninstallViewHook;
[/code]
и:
[code]
BEGIN Init
CLOSE
   StdWindows.SetAttachedCheckHook(NIL);
   UninstallViewHook
END StdTiles.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 00:16 ]
Заголовок сообщения:  Re: BlackBox 2.0

Так вы у себя Views.viewHook экспортировали! Все крюки вообще в Блэкбоксе закрыты, и не спроста. Чтобы нельзя было к ним обращаться. Это мы в StdClipboard от бедности один крюк открыли. Если ещё где такая же оплошность — надо устранять.

Автор:  arisu [ Четверг, 01 Июнь, 2023 00:22 ]
Заголовок сообщения:  Re: BlackBox 2.0

ну да, они закрыты потому что protected нет. соответственно, нельзя делать нормальные hook chains, и приходится творить вот тот ужас, что в StdDialog. а я довольно активно цепочки использую, поэтому проходя мимо очередного хука — экспортирую его, да.

но тут извиняюсь: забыл, что в оригинале они все скрытые.

вы таки подумайте насчёт добавления `+`-экспорта. он как раз эту проблему и решает. и изменений там всего несколько строчек в CPP, и новое значение в sym-файлах в CPT (старые sym-файлы всё ещё читаются, конечно).

p.s.: у вас сейчас тайлер жестоко заточен не просто на StdDialog, а на конкретную специфику реализации в StdDialog. и без protected это не решить.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 01:55 ]
Заголовок сообщения:  Re: BlackBox 2.0

Что-то одно лечим - другое калечим. У меня теперь постоянно новый журнал открывается. Где-то neverDirty похоже не тот эффект производит в новых алгоритмах.

Автор:  arisu [ Четверг, 01 Июнь, 2023 03:01 ]
Заголовок сообщения:  Re: BlackBox 2.0

в смысле? у меня никаких побочных эффектов нет. как точно проявляется, а то я не очень понял.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 03:22 ]
Заголовок сообщения:  Re: BlackBox 2.0

arisu писал(а):
в смысле? у меня никаких побочных эффектов нет. как точно проявляется, а то я не очень понял.

Это у меня из-за перехода на Windows.dir видимо, если возвращать initial заголовок окна в GetTitle, то в норму вернулось.
Сейчас всё перепроверю, и отправлю коммит. Почему-то теперь перестали откреплённые окна сохнаряться опять. Уф. Что-то опять сломал. Ищу.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 03:43 ]
Заголовок сообщения:  Re: BlackBox 2.0

Выложил сборку 171 в которой по результатам тестирования работает нормально все последние исправления.
Однако что-то ещё надо будет доделывать с заголовками окон, так как не возвращает заголовок untitled корректно. Что-то я возможно не учёл ещё. Буду смотреть завтра. Слева 1.6, справа 2.0.

Наблюдение. Раньше файлы начинались с 1, а теперь с 0...

Вложения:
Снимок экрана от 2023-06-01 07-41-00.png
Снимок экрана от 2023-06-01 07-41-00.png [ 139.94 КБ | Просмотров: 7671 ]

Автор:  arisu [ Четверг, 01 Июнь, 2023 05:39 ]
Заголовок сообщения:  Re: BlackBox 2.0

на всякий случай: вы там не пропустите разные места: StdWindows.Window имеет два заголовка. `.initialTitle` — это без трансляции, типа "#System:Log" и подобное. а `.title` — это «визуальный», то, что пользователь видит.

я у себя добавил апи `w.GetVisualTitle()` для получения визуального, а `w.GetTitle()` возвращает оригинальный.

там если с этим попутать — то могут разные косяки полезть. ненахождение окон по имени, и ты пы.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 14:16 ]
Заголовок сообщения:  Re: BlackBox 2.0

arisu писал(а):
на всякий случай: вы там не пропустите разные места: StdWindows.Window имеет два заголовка. `.initialTitle` — это без трансляции, типа "#System:Log" и подобное. а `.title` — это «визуальный», то, что пользователь видит.

я у себя добавил апи `w.GetVisualTitle()` для получения визуального, а `w.GetTitle()` возвращает оригинальный.

там если с этим попутать — то могут разные косяки полезть. ненахождение окон по имени, и ты пы.

Пока нет настроя менять интерфейсы Windows, сейчас в приоритете максимальная совместимость.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 14:18 ]
Заголовок сообщения:  Re: BlackBox 2.0

Сборка 172 проходит тест на сравнение названия окон, и вернул нумерацию с 1.

Вложения:
CheckWindowsTitles.png
CheckWindowsTitles.png [ 209.64 КБ | Просмотров: 7643 ]

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 18:36 ]
Заголовок сообщения:  Re: BlackBox 2.0

Исправил ещё недочёт, который возник после изменений, что у окон при создании дочерних окон менялись заголовки.

Проблему, как отделить Tool окна при просмотре форм пока не придумал как решить.

И ещё обнаружил такой новый недочёт, что у откреплённых окон дочерние окна начали встраиваться в плитки. Должны отдельно быть также.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 20:01 ]
Заголовок сообщения:  Re: BlackBox 2.0

Исправил ещё баг, который Борис обнаружил для растров — отображение не превращалось в инопланетное, если не была найдена фабрика. Это теперь работает корректно.

Теперь такая беда — если открыть окно и нажать F2, то дочернее окно встраивается в плитки. Причём иногда, даже вот так странно.

Вложения:
newTrouble.png
newTrouble.png [ 179.44 КБ | Просмотров: 7619 ]

Автор:  arisu [ Четверг, 01 Июнь, 2023 20:13 ]
Заголовок сообщения:  Re: BlackBox 2.0

Иван Денисов писал(а):
И ещё обнаружил такой новый недочёт, что у откреплённых окон дочерние окна начали встраиваться в плитки. Должны отдельно быть также.
дискусионный вопрос. F1, например, открывается в отдельном окне (если научить OpenAuxDialog открывать как detached). но клац по ссылке… ну, меня устраивает, например, что оно открывается в тайлере.

опять же: диалог свойств контрола. он detached, но волшебная кнопка «>>» вполне правильно в тайлер кидает новое окно.

не всё так просто тут.

Автор:  Иван Денисов [ Четверг, 01 Июнь, 2023 20:15 ]
Заголовок сообщения:  Re: BlackBox 2.0

arisu писал(а):
Иван Денисов писал(а):
И ещё обнаружил такой новый недочёт, что у откреплённых окон дочерние окна начали встраиваться в плитки. Должны отдельно быть также.
дискусионный вопрос. F1, например, открывается в отдельном окне (если научить OpenAuxDialog открывать как detached). но клац по ссылке… ну, меня устраивает, например, что оно открывается в тайлере.

опять же: диалог свойств контрола. он detached, но волшебная кнопка «>>» вполне правильно в тайлер кидает новое окно.

не всё так просто тут.

А у вас есть гипотезы, почему так происходит? Раньше не было такой истории. У откреплённых окон были откреплённые дочерние окна.

Автор:  arisu [ Четверг, 01 Июнь, 2023 20:18 ]
Заголовок сообщения:  Re: BlackBox 2.0

Иван Денисов писал(а):
Теперь такая беда — если открыть окно и нажать F2, то дочернее окно встраивается в плитки. Причём иногда, даже вот так странно.
да не то чтобы странно: `StdTiles.ToggleSub` вполне целенаправленно дубликаты кидает в правый трек.

если хотите не так — то там и править. если хотите, чтобы копии тоже были detached — надо делать такой же хак, как с targetTrack: добавлять глобал типа `targetDetached`, и при дубликации проверять, отцеплен ли оригинал.

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