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` из крестов. То есть для наследование возможно, а вызов нет? |
Автор: | arisu [ Среда, 31 Май, 2023 23:21 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Тогда придется экспортировать stdViewHook, чтобы его мог устанавливать StdTiles ? `stdViewHook` тоже не нужен. надо сделать в StdTiles простую агрегацию: в хуке из тайлера сохранять предыдущий, и вызывать его методы для всего, кроме `Open`. ну, как я в LC как раз сделал. и тогда из StdDialog больше публиковать ViewHook тоже не надо.
Тогда люди его смогут вызывать напрямую. Тут как раз такая защита без protected. |
Автор: | 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 ? `stdViewHook` тоже не нужен. надо сделать в StdTiles простую агрегацию: в хуке из тайлера сохранять предыдущий, и вызывать его методы для всего, кроме `Open`. ну, как я в LC как раз сделал. и тогда из StdDialog больше публиковать ViewHook тоже не надо.Тогда люди его смогут вызывать напрямую. Тут как раз такая защита без protected. Тайлер опциональный модуль - программа может состоять только из одной формочки. Зачем ей тайлер тогда? |
Автор: | 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, то в норму вернулось. Сейчас всё перепроверю, и отправлю коммит. Почему-то теперь перестали откреплённые окна сохнаряться опять. Уф. Что-то опять сломал. Ищу. |
Автор: | 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.
|
Автор: | Иван Денисов [ Четверг, 01 Июнь, 2023 18:36 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Исправил ещё недочёт, который возник после изменений, что у окон при создании дочерних окон менялись заголовки. Проблему, как отделить Tool окна при просмотре форм пока не придумал как решить. И ещё обнаружил такой новый недочёт, что у откреплённых окон дочерние окна начали встраиваться в плитки. Должны отдельно быть также. |
Автор: | Иван Денисов [ Четверг, 01 Июнь, 2023 20:01 ] | ||
Заголовок сообщения: | Re: BlackBox 2.0 | ||
Исправил ещё баг, который Борис обнаружил для растров — отображение не превращалось в инопланетное, если не была найдена фабрика. Это теперь работает корректно. Теперь такая беда — если открыть окно и нажать F2, то дочернее окно встраивается в плитки. Причём иногда, даже вот так странно.
|
Автор: | 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/ |