OberonCore

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

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




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

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

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


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

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


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

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

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


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

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

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


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

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


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
вот так в тайлере надо делать:
Код:
   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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 00:16 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 00:22 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ну да, они закрыты потому что protected нет. соответственно, нельзя делать нормальные hook chains, и приходится творить вот тот ужас, что в StdDialog. а я довольно активно цепочки использую, поэтому проходя мимо очередного хука — экспортирую его, да.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 01:55 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Что-то одно лечим - другое калечим. У меня теперь постоянно новый журнал открывается. Где-то neverDirty похоже не тот эффект производит в новых алгоритмах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 03:01 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
в смысле? у меня никаких побочных эффектов нет. как точно проявляется, а то я не очень понял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 03:22 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
в смысле? у меня никаких побочных эффектов нет. как точно проявляется, а то я не очень понял.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 03:43 
Аватара пользователя

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

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


Вложения:
Снимок экрана от 2023-06-01 07-41-00.png
Снимок экрана от 2023-06-01 07-41-00.png [ 139.94 КБ | Просмотров: 7013 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 05:39 

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

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

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


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

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

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

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

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Сборка 172 проходит тест на сравнение названия окон, и вернул нумерацию с 1.


Вложения:
CheckWindowsTitles.png
CheckWindowsTitles.png [ 209.64 КБ | Просмотров: 6985 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 18:36 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Исправил ещё недочёт, который возник после изменений, что у окон при создании дочерних окон менялись заголовки.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 20:01 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Исправил ещё баг, который Борис обнаружил для растров — отображение не превращалось в инопланетное, если не была найдена фабрика. Это теперь работает корректно.

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


Вложения:
newTrouble.png
newTrouble.png [ 179.44 КБ | Просмотров: 6961 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 20:13 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 20:15 
Аватара пользователя

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 01 Июнь, 2023 20:18 

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

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


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

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


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

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


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

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