OberonCore https://forum.oberoncore.ru/ |
|
BlackBox 2.0 https://forum.oberoncore.ru/viewtopic.php?f=134&t=6819 |
Страница 15 из 22 |
Автор: | Иван Денисов [ Понедельник, 13 Март, 2023 03:52 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Перенес большую часть наработок arisu по элементам управления. Ещё дизайн не везде адаптировал, но в целом уже списками и комбо отлично можно пользоваться. |
Автор: | arisu [ Вторник, 14 Март, 2023 11:15 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
такой вопрос: есть ли какой-то штатный способ получить главное окно BBCB? ну, то, в котором меню живёт и всё остальное? предполагаем, что оно у нас точно есть. я пока что извернулся путём перебора всех окон и проверки, не сидит ли в окне главным view документа StdGrid. но это хаковый хак, конечно. ну, или можно иначе: мне надо пнуть на главное окно `Views.Update(…, rebuildFrames)`, ради чего всё и затевается. пнуть это надо из обычной команды, которая вызывается коммандером или меню. не, можно просто каждому окну это послать и не париться, тоже будет работать. но хочется кросивое же. не уверен, что это стоит в отдельную тему: у нас 2.0-то ещё и нет толком (не релизнулось), всё может ещё поменяться, а люди отдельную тему найдут, попробуют — и работать не будет. плохое впечатление. p.s.: зачем мне понадобилось всё перерисовывать? я сменил положение крестика-закрывашки на табах грида, теперь табы надо перерисовать (с пересозданием фрэймов, потому что крестик до этого мог быть и невидимый, поэтому размеры табов поменяются). проще всего это сделать просто пнув главное окно, которое уже сделает всё остальное. |
Автор: | Иван Денисов [ Вторник, 14 Март, 2023 19:06 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): такой вопрос: есть ли какой-то штатный способ получить главное окно BBCB? ну, то, в котором меню живёт и всё остальное? предполагаем, что оно у нас точно есть. Окно приложения с меню и статусной стракой создаётся в StdConfig, если вам для какой-то задачи важно иметь к нему доступ, то можете экспортировать, разместив где-то. А так по смыслу все окна задуманы равнозначными. |
Автор: | arisu [ Вторник, 14 Март, 2023 20:10 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
задуманы-то они задуманы, но штатного способа создать «главное» окно минуя StdConfig нет, а поэтому оно особенное. мне кажется, надо или экспортировать процедуру создания главного окна (и чтобы она его возвращала), или автоматически его регистрировать где-нибудь, чтобы можно было получить стандартными средствами. кстати, ещё было бы неплохо иметь штатное средство определить статус «detached» у окна, чтобы не импортировать повсюду патченый тайлер. мало ли, вдруг другой тайлер будет, с другим докингом? тогда можно будет просто перебрать все окна и пнуть перерисовываться только те, что detached. |
Автор: | arisu [ Четверг, 16 Март, 2023 06:40 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
ужасно, кстати, неудобно, что в неактивных окнах выделение текста просто прямоугольничком. не знаю как вы, а я при поиске и замене иногда этот прямоугольничек тупо не вижу, приходится переключаться на окно с текстом и обратно. по какому поводу предлагаю завести специальный код для `MarkRect()`, и в неактивных окнах тоже делать полную инверсию, но цветом Ports.grey75. будет такое грустно-серенькое, но заметное. я себе так сделал, и получилось намного, намного лучше. я, в принципе, себе опцию приделал, чтобы можно было вернуть старый вариант, если кому охота. p.s.: и, кстати, вынести `focusSel` в Ports. всё равно его надо реализовывать, потому что ним механизмы пользуются — ну так пусть уже будет всем доступно тогда. |
Автор: | Иван Денисов [ Четверг, 16 Март, 2023 07:07 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): задуманы-то они задуманы, но штатного способа создать «главное» окно минуя StdConfig нет, а поэтому оно особенное. мне кажется, надо или экспортировать процедуру создания главного окна (и чтобы она его возвращала), или автоматически его регистрировать где-нибудь, чтобы можно было получить стандартными средствами. кстати, ещё было бы неплохо иметь штатное средство определить статус «detached» у окна, чтобы не импортировать повсюду патченый тайлер. мало ли, вдруг другой тайлер будет, с другим докингом? тогда можно будет просто перебрать все окна и пнуть перерисовываться только те, что detached. Так может в StdConfig и вынести в глобальную переменную это окно? |
Автор: | Иван Денисов [ Четверг, 16 Март, 2023 07:08 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): ужасно, кстати, неудобно, что в неактивных окнах выделение текста просто прямоугольничком. не знаю как вы, а я при поиске и замене иногда этот прямоугольничек тупо не вижу, приходится переключаться на окно с текстом и обратно. по какому поводу предлагаю завести специальный код для `MarkRect()`, и в неактивных окнах тоже делать полную инверсию, но цветом Ports.grey75. будет такое грустно-серенькое, но заметное. я себе так сделал, и получилось намного, намного лучше. я, в принципе, себе опцию приделал, чтобы можно было вернуть старый вариант, если кому охота. p.s.: и, кстати, вынести `focusSel` в Ports. всё равно его надо реализовывать, потому что ним механизмы пользуются — ну так пусть уже будет всем доступно тогда. Если что-то визуальное, то классно, когда скрин выкладывается на форум. |
Автор: | arisu [ Четверг, 16 Март, 2023 17:11 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Так может в StdConfig и вынести в глобальную переменную это окно? о, простите, я это пропустил. ну, импортировать напрямую StdConfig в ту же StdGrids (где оно мне надо, например) — так себе идея, мне кажется. ;-) да и держать рут-окно заякореным в глобале тоже как-то… оно ж тогда в памяти навечно, даже если мы его закроем. в смысле, если закроем специально, а какие-то другие оставим — главное будет бесполезно там на якоре сидеть.я сделал так: ввёл в StdWindows.Window булеву переменную `isRoot`. она делает ровно ничего, просто существует. API позволяет назначить какое-то окно главным (у всех остальных окон тогда этот флажок сбрасывается). чисто информационная штука, кроме как посмотреть на неё и установить StdWindows больше с ней ничего не делает, всё остальное — на усмотрение кода приложения. можно использовать флажок, можно не использовать. соответственно, StdConfig для рут-окна этот флажок ставит апи-вызовом, и дальше я могу его проверять. а если кто-то не поставит — ну, не поставит, ничего страшного. надо бы документировать будет его потом, да и всё. впрочем, StdWindows вообще не документированы, увы. (это не претензия, это сожаление. я может постараюсь как-нибудь скелет документации сделать.) |
Автор: | Иван Денисов [ Пятница, 17 Март, 2023 09:46 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): но ведь и не мешает! ![]() Если я правильно понял про троеточие, то речь про поддержку переменного числа аргументов для сишных функций. Конечно это помешает, так как вне традиции стогой типизации, к тому же породит несовместимость кода между версиями. |
Автор: | Иван Денисов [ Пятница, 17 Март, 2023 10:53 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
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. |
Автор: | arisu [ Пятница, 17 Март, 2023 11:17 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
про несколько мониторов: я, признаться, не вижу ни одной причины иметь два «главных» окна в одном процессе. что возможно — это хорошо. но на практике — зачем? про перебор… спасбо, да. я могу, конечно, так заглядывать внутрь. но мне это категорически не нравится: это ведь тоже хак. к тому же никто не мешает всунуть меню и в «подокно». ну да, это вряд ли будет работать как задумывалось, но в теории-то можно! ;-) нужен API `StdWindows.IsDetached()` — я себе его таки сделал. про StdWindows: я вижу, что там ещё оно не очень утряслось. но документация всё равно будет полезна, а то иначе без чтения исходников положительно ничего более-менее нетривиального и связаного с окнами не написать. вообще, мне тоже не нравится, что StdWindows, по сути, занимается дублированием Windows. я тоже не вижу причины иметь разные фабрики — но, возможно, я чего-то не учёл тут. однако скорее всего в LC я рано или поздно займусь чисткой этого всего, и сделаю работу с окнами через Windows: мне так кажется правильней. |
Автор: | arisu [ Пятница, 17 Март, 2023 11:20 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): arisu писал(а): но ведь и не мешает! ;-) Если я правильно понял про троеточие, то речь про поддержку переменного числа аргументов для сишных функций. Конечно это помешает, так как вне традиции стогой типизации, к тому же породит несовместимость кода между версиями. |
Автор: | arisu [ Суббота, 18 Март, 2023 03:40 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
продублирую и здесь: мой компилятор, кстати, можно (и нужно, я считаю) полностью утаскивать в mainline, достаточно поменять `inCP := FALSE;` на `inCP := TRUE;` в `DevCPP.Module`. совместимость почти полная, исключение ровно одно: проверка на отсутствующие RETURN более строгая. утаскивать затем, что у меня точно есть багфиксы к оригиналу, которых в mainline нет (а какие точно — я уже не помню). заодно в майнлайне появится ассемблер для X86, приятная фича. для утаскивания надо будет `UP.` поубирать, просто заменой на пустые строки, а также перевести обратно с моего SubsManager на StdLibrarian. в общем, мелочи. DevAnalyzer тоже, с теми же изменениями (и я там докинул пару опциональных фич — типа не квакать про обращение к «неинициализированым глобалам» — это обычно false alarm). а вот выборочно лучше оттуда ничего не переносить, если брать — то всё вместе. форматы ocf/osf я не менял, так что оно безопасно. а! если соберётесь забирать — то мне надо будет вернуть поддержку COM обратно. лучше, в общем, если согласны — скажите мне, я тогда начну адаптацию к mainline сам. просто если нет, то я не буду париться. |
Автор: | Иван Денисов [ Суббота, 18 Март, 2023 08:04 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
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. Три уровня виртуальной файловой системы Если есть какие-то исключения из этих правил, то это исключения, и количество таких изменений надо уменьшать, может что-то и назад откатить. |
Автор: | arisu [ Суббота, 18 Март, 2023 08:23 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
когда я правил ошибки — я ещё не делал коммитов, так что увы. да и мало коммиты помогут, потому что довольно часто переформатирую код, и иногда даже рефакторю, не особо переживая по поводу красивой коммит-истории. однако иногда я вместо рефактора наоборот: дублирую код, чтобы можно было более-менее формально доказать, что нововведения ничего не сломают и даже не активируются, если мы в режиме CP. впрочем, это тот случай, когда я не только не настаиваю, но даже очень рад, что не надо: мне совершенно не хочется возвращать обратно COM. у себя я его из Kernel тоже выкусил, пришлось бы вести две версии кода: CP2 для LC, и CP2 для mainline. баги, кстати, я в том числе собирал и по форуму центра: в майнлайне — на удивление — не все они были починены. я предложил забирать весь компилятор как раз потому, что я вряд ли смогу сейчас выбрать из моего кода только багфиксы: взять весь компилятор сильно проще. добавление расширений языка в mainline вообще не было целью, это сайд-эффект был бы. ;-) |
Автор: | arisu [ Четверг, 23 Март, 2023 03:55 ] | ||
Заголовок сообщения: | Re: BlackBox 2.0 | ||
пересадил багфиксы компилятора с форума центра, которые нашёл по своему коду, на мастер от тринадцатого марта. там у каждого есть ссылка на тему, откуда взято, так что можно свериться с источником. вроде бы ничего в процессе напортачить не. никаких улучшений, чисто багфиксы, которые просто не попали в форк/1.7, хотя должны были.
|
Автор: | arisu [ Вторник, 28 Март, 2023 06:18 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
эм... ребят, вы клёво прикололись, прямо как классическое сишное `#define TRUE FALSE`, только наоборот. в хидерах gtk (Gtk2GLib): Код: CONST нет, серьёзно? клёвая шутка, я чуть не лопнул хохотаючи.True* = 1; False* = 2; ладно, я понимаю, что опечатка, и не злюсь, конечно. уже почти совсем. по крайней мере могу удержаться от смертоубийств. наверное. |
Автор: | Иван Денисов [ Среда, 29 Март, 2023 00:05 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): эм... ребят, вы клёво прикололись, прямо как классическое сишное `#define TRUE FALSE`, только наоборот. в хидерах gtk (Gtk2GLib): Код: CONST нет, серьёзно? клёвая шутка, я чуть не лопнул хохотаючи.True* = 1; False* = 2; ладно, я понимаю, что опечатка, и не злюсь, конечно. уже почти совсем. по крайней мере могу удержаться от смертоубийств. наверное. Спасибо, что заметили огреху. Поправлю в следующем же коммите. |
Автор: | arisu [ Среда, 29 Март, 2023 06:38 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
на наше счастье оно практически нигде не используется. вы простите, если что, то выше не наезд был, то шутка был. после того как я час рыл свой код и пытался понять, что же в нём не так. пошутил как смог. ;-) так-то я понимаю, как такое получается, сам иногда при трансляции enum-ов и define так косячу. |
Страница 15 из 22 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |