OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 01 Июнь, 2023 15:24

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




Начать новую тему Ответить на тему  [ Сообщений: 355 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16, 17, 18  След.
Автор Сообщение
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 13 Март, 2023 03:52 
Аватара пользователя

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


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
такой вопрос: есть ли какой-то штатный способ получить главное окно BBCB? ну, то, в котором меню живёт и всё остальное? предполагаем, что оно у нас точно есть.

я пока что извернулся путём перебора всех окон и проверки, не сидит ли в окне главным view документа StdGrid. но это хаковый хак, конечно.

ну, или можно иначе: мне надо пнуть на главное окно `Views.Update(…, rebuildFrames)`, ради чего всё и затевается. пнуть это надо из обычной команды, которая вызывается коммандером или меню. не, можно просто каждому окну это послать и не париться, тоже будет работать. но хочется кросивое же.

не уверен, что это стоит в отдельную тему: у нас 2.0-то ещё и нет толком (не релизнулось), всё может ещё поменяться, а люди отдельную тему найдут, попробуют — и работать не будет. плохое впечатление.

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
такой вопрос: есть ли какой-то штатный способ получить главное окно BBCB? ну, то, в котором меню живёт и всё остальное? предполагаем, что оно у нас точно есть.

Окно приложения с меню и статусной стракой создаётся в StdConfig, если вам для какой-то задачи важно иметь к нему доступ, то можете экспортировать, разместив где-то. А так по смыслу все окна задуманы равнозначными.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
задуманы-то они задуманы, но штатного способа создать «главное» окно минуя StdConfig нет, а поэтому оно особенное. мне кажется, надо или экспортировать процедуру создания главного окна (и чтобы она его возвращала), или автоматически его регистрировать где-нибудь, чтобы можно было получить стандартными средствами.

кстати, ещё было бы неплохо иметь штатное средство определить статус «detached» у окна, чтобы не импортировать повсюду патченый тайлер. мало ли, вдруг другой тайлер будет, с другим докингом? тогда можно будет просто перебрать все окна и пнуть перерисовываться только те, что detached.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
ужасно, кстати, неудобно, что в неактивных окнах выделение текста просто прямоугольничком. не знаю как вы, а я при поиске и замене иногда этот прямоугольничек тупо не вижу, приходится переключаться на окно с текстом и обратно. по какому поводу предлагаю завести специальный код для `MarkRect()`, и в неактивных окнах тоже делать полную инверсию, но цветом Ports.grey75. будет такое грустно-серенькое, но заметное. я себе так сделал, и получилось намного, намного лучше. я, в принципе, себе опцию приделал, чтобы можно было вернуть старый вариант, если кому охота.

p.s.: и, кстати, вынести `focusSel` в Ports. всё равно его надо реализовывать, потому что ним механизмы пользуются — ну так пусть уже будет всем доступно тогда.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
задуманы-то они задуманы, но штатного способа создать «главное» окно минуя StdConfig нет, а поэтому оно особенное. мне кажется, надо или экспортировать процедуру создания главного окна (и чтобы она его возвращала), или автоматически его регистрировать где-нибудь, чтобы можно было получить стандартными средствами.

кстати, ещё было бы неплохо иметь штатное средство определить статус «detached» у окна, чтобы не импортировать повсюду патченый тайлер. мало ли, вдруг другой тайлер будет, с другим докингом? тогда можно будет просто перебрать все окна и пнуть перерисовываться только те, что detached.

Так может в StdConfig и вынести в глобальную переменную это окно?


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
ужасно, кстати, неудобно, что в неактивных окнах выделение текста просто прямоугольничком. не знаю как вы, а я при поиске и замене иногда этот прямоугольничек тупо не вижу, приходится переключаться на окно с текстом и обратно. по какому поводу предлагаю завести специальный код для `MarkRect()`, и в неактивных окнах тоже делать полную инверсию, но цветом Ports.grey75. будет такое грустно-серенькое, но заметное. я себе так сделал, и получилось намного, намного лучше. я, в принципе, себе опцию приделал, чтобы можно было вернуть старый вариант, если кому охота.

p.s.: и, кстати, вынести `focusSel` в Ports. всё равно его надо реализовывать, потому что ним механизмы пользуются — ну так пусть уже будет всем доступно тогда.

Если что-то визуальное, то классно, когда скрин выкладывается на форум.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 16 Март, 2023 08:05 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
да та же инверсия, только более блеклая, чего там особого выкладывать, в принципе… ну, вот как-то так. в первом варианте лично мне ни шиша не видно этот прямоугольничек. а во втором — красота, лепота!


Вложения:
Комментарий к файлу: старый режим
2023_03_16_07_04_01_633x282.png
2023_03_16_07_04_01_633x282.png [ 14.35 КБ | Просмотров: 1827 ]
Комментарий к файлу: новый режим
2023_03_16_07_03_38_648x299.png
2023_03_16_07_03_38_648x299.png [ 15.1 КБ | Просмотров: 1827 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 16 Март, 2023 17:11 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
Иван Денисов писал(а):
Так может в StdConfig и вынести в глобальную переменную это окно?
о, простите, я это пропустил. ну, импортировать напрямую StdConfig в ту же StdGrids (где оно мне надо, например) — так себе идея, мне кажется. ;-) да и держать рут-окно заякореным в глобале тоже как-то… оно ж тогда в памяти навечно, даже если мы его закроем. в смысле, если закроем специально, а какие-то другие оставим — главное будет бесполезно там на якоре сидеть.

я сделал так: ввёл в StdWindows.Window булеву переменную `isRoot`. она делает ровно ничего, просто существует. API позволяет назначить какое-то окно главным (у всех остальных окон тогда этот флажок сбрасывается). чисто информационная штука, кроме как посмотреть на неё и установить StdWindows больше с ней ничего не делает, всё остальное — на усмотрение кода приложения. можно использовать флажок, можно не использовать. соответственно, StdConfig для рут-окна этот флажок ставит апи-вызовом, и дальше я могу его проверять. а если кто-то не поставит — ну, не поставит, ничего страшного. надо бы документировать будет его потом, да и всё. впрочем, StdWindows вообще не документированы, увы. (это не претензия, это сожаление. я может постараюсь как-нибудь скелет документации сделать.)


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
но ведь и не мешает! ;-)

Если я правильно понял про троеточие, то речь про поддержку переменного числа аргументов для сишных функций. Конечно это помешает, так как вне традиции стогой типизации, к тому же породит несовместимость кода между версиями.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
я сделал так: ввёл в StdWindows.Window булеву переменную `isRoot`. она делает ровно ничего, просто существует. API позволяет назначить какое-то окно главным (у всех остальных окон тогда этот флажок сбрасывается). чисто информационная штука, кроме как посмотреть на неё и установить StdWindows больше с ней ничего не делает, всё остальное — на усмотрение кода приложения. можно использовать флажок, можно не использовать. соответственно, StdConfig для рут-окна этот флажок ставит апи-вызовом, и дальше я могу его проверять. а если кто-то не поставит — ну, не поставит, ничего страшного. надо бы документировать будет его потом, да и всё. впрочем, StdWindows вообще не документированы, увы. (это не претензия, это сожаление. я может постараюсь как-нибудь скелет документации сделать.)

Может существовать два она с меню, если у вас два монитора, то там здорово предусмотрена такая возможность.

Про документацию. Со StdWindows история незаконченная, так как у нас с Антоном в процессе работы разошлись мнения. Он тяготеет к тому, чтобы снизить использование Windows, заменяя это на вызовы StdWindows, а я же вижу StdWindows как реализацию интерфейса, а вызовы надо делать также через Windows. Его аргументы заключались в том, что может существовать единовременно несколько фабрик, и поэтому обращение через одну фабрику не сделает обход всех окон всех фабрик. Однако в 2.0 такой ситуации не возникает, так как предполагается существование только одной фабрики после загрузки системы. Так оно как-то всегда было и сейчас остаётся. Так что и документация пока может быть с пометкой, что сам модуль ещё не зафиксирован в своём виде, так как не был подвержен какой-то ревизии сообществом.


Вот пример, как можно понять, что в окне прикреплено меню сверху. Тогда вы все окна в которых есть меню, сможете обновить.
Код:
MODULE CheckMainWindow;

IMPORT Windows, StdDocuments, StdMenus, Views, Models, Services, Log;

PROCEDURE Do*;
VAR
   w: Windows.Window; t: Views.Title;
   m: Models.Model; c: StdDocuments.Context;
   find: BOOLEAN;
   type: ARRAY 64 OF CHAR;
BEGIN
   w := Windows.dir.First();
   WHILE w # NIL DO
      w.GetTitle(t);
      IF w.doc IS StdDocuments.Document THEN
         m := w.doc.ThisView().context.ThisModel();
         IF m IS StdDocuments.Model THEN
            c := m(StdDocuments.Model).First();
            find := FALSE;
            WHILE (c # NIL) & ~find DO
               Services.GetTypeName(c.view, type);
               IF type = "StdMenus.LineView" THEN
                  find := TRUE
               END;
               c := m(StdDocuments.Model).Next(c)
            END;
            IF find THEN
               Log.String(t); Log.Ln;
            END;
         END;
      END;
      
      w := Windows.dir.Next(w)
   END;
   
END Do;

END CheckMainWindow.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
про несколько мониторов: я, признаться, не вижу ни одной причины иметь два «главных» окна в одном процессе. что возможно — это хорошо. но на практике — зачем?

про перебор… спасбо, да. я могу, конечно, так заглядывать внутрь. но мне это категорически не нравится: это ведь тоже хак. к тому же никто не мешает всунуть меню и в «подокно». ну да, это вряд ли будет работать как задумывалось, но в теории-то можно! ;-) нужен API `StdWindows.IsDetached()` — я себе его таки сделал.

про StdWindows: я вижу, что там ещё оно не очень утряслось. но документация всё равно будет полезна, а то иначе без чтения исходников положительно ничего более-менее нетривиального и связаного с окнами не написать.

вообще, мне тоже не нравится, что StdWindows, по сути, занимается дублированием Windows. я тоже не вижу причины иметь разные фабрики — но, возможно, я чего-то не учёл тут. однако скорее всего в LC я рано или поздно займусь чисткой этого всего, и сделаю работу с окнами через Windows: мне так кажется правильней.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
Иван Денисов писал(а):
arisu писал(а):
но ведь и не мешает! ;-)

Если я правильно понял про троеточие, то речь про поддержку переменного числа аргументов для сишных функций. Конечно это помешает, так как вне традиции стогой типизации, к тому же породит несовместимость кода между версиями.
когда мы ходим во внешние библиотеки с подобными функциями, то про строгую типизацию можно смело забыть всё равно. если бы в интерфейсных модулях можно было иметь код и не высовывать наружу variadics — то да: можно было бы наделать скрытых импортов, и высунуть типизированое. но так нельзя, и проще добавить "…". а совместимость вниз с 1.7 всё равно уже поломана, чего тут переживать-то… как вариант — разрешить "…" только в интерфейсных модулях.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
продублирую и здесь:

мой компилятор, кстати, можно (и нужно, я считаю) полностью утаскивать в mainline, достаточно поменять `inCP := FALSE;` на `inCP := TRUE;` в `DevCPP.Module`. совместимость почти полная, исключение ровно одно: проверка на отсутствующие RETURN более строгая. утаскивать затем, что у меня точно есть багфиксы к оригиналу, которых в mainline нет (а какие точно — я уже не помню). заодно в майнлайне появится ассемблер для X86, приятная фича.

для утаскивания надо будет `UP.` поубирать, просто заменой на пустые строки, а также перевести обратно с моего SubsManager на StdLibrarian. в общем, мелочи.

DevAnalyzer тоже, с теми же изменениями (и я там докинул пару опциональных фич — типа не квакать про обращение к «неинициализированым глобалам» — это обычно false alarm).

а вот выборочно лучше оттуда ничего не переносить, если брать — то всё вместе. форматы ocf/osf я не менял, так что оно безопасно.

а! если соберётесь забирать — то мне надо будет вернуть поддержку COM обратно. лучше, в общем, если согласны — скажите мне, я тогда начну адаптацию к mainline сам. просто если нет, то я не буду париться.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
продублирую и здесь:

мой компилятор, кстати, можно (и нужно, я считаю) полностью утаскивать в mainline, достаточно поменять `inCP := FALSE;` на `inCP := TRUE;` в `DevCPP.Module`. совместимость почти полная, исключение ровно одно: проверка на отсутствующие RETURN более строгая. утаскивать затем, что у меня точно есть багфиксы к оригиналу, которых в mainline нет (а какие точно — я уже не помню). заодно в майнлайне появится ассемблер для X86, приятная фича.

для утаскивания надо будет `UP.` поубирать, просто заменой на пустые строки, а также перевести обратно с моего SubsManager на StdLibrarian. в общем, мелочи.

DevAnalyzer тоже, с теми же изменениями (и я там докинул пару опциональных фич — типа не квакать про обращение к «неинициализированым глобалам» — это обычно false alarm).

а вот выборочно лучше оттуда ничего не переносить, если брать — то всё вместе. форматы ocf/osf я не менял, так что оно безопасно.

а! если соберётесь забирать — то мне надо будет вернуть поддержку COM обратно. лучше, в общем, если согласны — скажите мне, я тогда начну адаптацию к mainline сам. просто если нет, то я не буду париться.

Так не делается, надо точно знать какие изменения для чего, чтобы в описании к коммитам было понятно. Также изменения любые могут привести к багам так что надо внимательно проверять, особенно в компиляторе. Опциональные фичи усложняют компилятор, поэтому также не ясно зачем ваши эксперименты переносить.

Чтобы было понятно больше про политику подготовки 2.0 - там приоритет на минимальном количестве изменений от 1.7.2. Чтобы сообщество приняло новую версию все изменения должны быть описаны, поэтому их должно быть минимальное количество. Все изменения либо решают какую-то проблему (падения сбои, нестабильность), либо связаны с поддержкой ранее выбранных существенных нововведений:
1. Плиточный интерфейс
2. Поддержка кросс-платформенной компиляции и сборки
3. Поддержка растров
4. Библиотекарь
5. Три уровня виртуальной файловой системы
Если есть какие-то исключения из этих правил, то это исключения, и количество таких изменений надо уменьшать, может что-то и назад откатить.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
когда я правил ошибки — я ещё не делал коммитов, так что увы. да и мало коммиты помогут, потому что довольно часто переформатирую код, и иногда даже рефакторю, не особо переживая по поводу красивой коммит-истории. однако иногда я вместо рефактора наоборот: дублирую код, чтобы можно было более-менее формально доказать, что нововведения ничего не сломают и даже не активируются, если мы в режиме CP.

впрочем, это тот случай, когда я не только не настаиваю, но даже очень рад, что не надо: мне совершенно не хочется возвращать обратно COM. у себя я его из Kernel тоже выкусил, пришлось бы вести две версии кода: CP2 для LC, и CP2 для mainline.

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


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
пересадил багфиксы компилятора с форума центра, которые нашёл по своему коду, на мастер от тринадцатого марта. там у каждого есть ссылка на тему, откуда взято, так что можно свериться с источником. вроде бы ничего в процессе напортачить не. никаких улучшений, чисто багфиксы, которые просто не попали в форк/1.7, хотя должны были.


Вложения:
devpatches.7z [39.29 КБ]
Скачиваний: 16
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Вторник, 28 Март, 2023 06:18 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
эм... ребят, вы клёво прикололись, прямо как классическое сишное `#define TRUE FALSE`, только наоборот. в хидерах gtk (Gtk2GLib):
Код:
CONST
   True* = 1;
   False* = 2;
нет, серьёзно? клёвая шутка, я чуть не лопнул хохотаючи.

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3692
arisu писал(а):
эм... ребят, вы клёво прикололись, прямо как классическое сишное `#define TRUE FALSE`, только наоборот. в хидерах gtk (Gtk2GLib):
Код:
CONST
   True* = 1;
   False* = 2;
нет, серьёзно? клёвая шутка, я чуть не лопнул хохотаючи.

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

Спасибо, что заметили огреху. Поправлю в следующем же коммите.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 833
на наше счастье оно практически нигде не используется. вы простите, если что, то выше не наезд был, то шутка был. после того как я час рыл свой код и пытался понять, что же в нём не так. пошутил как смог. ;-) так-то я понимаю, как такое получается, сам иногда при трансляции enum-ов и define так косячу.


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

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


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

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


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

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