OberonCore https://forum.oberoncore.ru/ |
|
BlackBox 2.0 https://forum.oberoncore.ru/viewtopic.php?f=134&t=6819 |
Страница 9 из 20 |
Автор: | arisu [ Среда, 18 Январь, 2023 13:13 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Тяжеловато уже понять, что вы делаете. я скоро кину technical preview, можно будет натурно пощупать.Иван Денисов писал(а): Поменьше меняйте модули старого ББ вообще не трогаю (за исключением сигнатуры KeyDown и одного пустого метода). ;-)Иван Денисов писал(а): не надо туда скины помещать. Пусть у каждой реализации будет свой скин, это нормально. куча контролов имеет массу одинаковых частей: редактор строки, рисовалку списков, попапы. это то, что в оригинале реализовано через WinAPI нативными окнами. я сделал нечто похожее, только без окон и винапи. ;-) то есть, вынес код, который заведует рисованием и обработкой событий для этих частей в отдельные объекты, и просто использую эти объекты. таким образом и избегаем копипасты, и поведение одинаково выглядящих частей тоже унифицировано. вот эти повторно используемые части — их естественно повторно использовать и в других looks, обеспечивая унифицированый feel (потому что по сути всё реальное отличие — в рамочках да отступах, если грубо). я предлагаю эти части вынести в отдельный модуль, чтобы не импортировать в каждый скин весь StdStdCFrames, а обходиться только StdCFramesGuts. они подвязаны на StdCFrames, но и только. а конкретная реализация конкретного скина просто будет их использовать как строительные блоки, и добавлять оформление по своему вкусу.
|
Автор: | arisu [ Среда, 18 Январь, 2023 13:15 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Такие обещания двигают развитие Блэкбокса, так что я всё же починю, когда доделаю по работе две важные задачи. да я ж не против. это я просто шучу, а смысл поста в том, что если вдруг вы ощущали некое временно́е давление от моей просьбы сделать побыстрее — то можно чуть расслабиться и делать не быстро, а правильно ;-), оно уже терпит.
|
Автор: | arisu [ Четверг, 19 Январь, 2023 01:45 ] | ||
Заголовок сообщения: | Re: BlackBox 2.0 | ||
собственно, вот. это WIP, ни в коем случае не финальный вариант. System/Mod/Controls починен в соответствии с изменённой сигнатурой. в починке также нуждается вин-код и obx, это я у себя тоже сделал, но пока не кидаю. там тривиальщина, аргумент везде добавить. вот я предлагаю EditorGuts и ListGuts выделить в отдельный модуль, потому что они и задумывались как реюзабельные (интерфейс я ещё рихтую, это, повторюсь, далеко от финала, пока что сделано в черновом варианте).
|
Автор: | arisu [ Четверг, 19 Январь, 2023 03:56 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
кстати, ещё предложение: в LinBackends не проверять шорткаты меню, если текущее окно в режиме «mask» (то есть, активная форма). в подавляющем большинстве случаев меню просто съедает шорткаты формы безо всякого толка. я себе так сделал — и жить стало значительно удобней. p.s.: в идеале надо в таком случае проверять сначала форму, а потом меню, но, кажется, это задача менее тривиальная, потому что неясно, слопало окно клавиатурное событие или нет. (это вообще невозможно же определить, мне кажется, да?) p.p.s.: по зрелом размышлении — эту проверку надо унести в `FirstMatch()` вообще, нечего ей в бэкэндах делать. |
Автор: | arisu [ Четверг, 19 Январь, 2023 04:34 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
как-то, собственно, вот так `StdMenus.FirstMatch()` поправить: Код: PROCEDURE IsMaskMode (mode: SET): BOOLEAN;
CONST modemask = {Containers.noSelection, Containers.noFocus, Containers.noCaret}; BEGIN RETURN mode * modemask = {Containers.noSelection, Containers.noCaret} END IsMaskMode; PROCEDURE GetWindowMode (): SET; VAR c: Containers.Controller; gm: Containers.GetOpts; w: Windows.Window; BEGIN c := Containers.Focus(); gm.valid := {}; IF (c # NIL) & (c.Singleton() # NIL) THEN Views.HandlePropMsg(c.Singleton(), gm); END; IF gm.valid = {} THEN w := Windows.dir.Focus(Controllers.path); IF (w # NIL) & (w.doc.ThisView() IS Containers.View) THEN Views.HandlePropMsg(w.doc.ThisView(), gm); END END; IF gm.valid = {} THEN gm.opts := {} END; RETURN gm.opts END GetWindowMode; PROCEDURE NeedCheckAlt (): BOOLEAN; VAR mode: SET; res: BOOLEAN; BEGIN res := TRUE; mode := GetWindowMode(); IF mode # {} THEN res := ~IsMaskMode(mode) END; RETURN res END NeedCheckAlt; PROCEDURE IsGoodMod (doalt: BOOLEAN; mod: SET): BOOLEAN; VAR res: BOOLEAN; BEGIN IF doalt THEN res := TRUE ELSE res := (mod * {0..7} # {Controllers.pick}) END; RETURN res END IsGoodMod; (* k8: do not check "M-key" shortcuts if the active window is in "mask" mode *) PROCEDURE (h: Directory) FirstMatch* (VAR m: StdMenuTool.ShortcutMatcher): StdDialog.Item; VAR n: Model; it: Item; i: INTEGER; ch, nch: CHAR; doalt: BOOLEAN; done: BOOLEAN; failed, ok: BOOLEAN; BEGIN done := FALSE; doalt := NeedCheckAlt(); (* match hotkeys *) n := NextShownModel(main); it := n.first; WHILE (it # NIL) & ~done DO IF IsGoodMod(doalt, it.mod) & m.Match(it, it.code, it.mod) THEN done := TRUE; (* k8: check filter here for mask mode, to allow more pass-through shortcuts *) IF ~doalt THEN ok := FALSE; StdDialog.CheckFilter(it, failed, ok, it.par); IF ~ok OR failed OR it.par.disabled THEN done := FALSE END END END; IF ~done THEN IF it.next # NIL THEN it := it.next(Item) ELSIF n # NIL THEN n := NextShownModel(n.link); IF n # NIL THEN it := n.first ELSE it := NIL END ELSE it := NIL END END END; (* match main menu shortcuts *) IF (it = NIL) & doalt THEN n := NextShownModel(main); REPEAT i := -1; nch := 0X; REPEAT INC(i); ch := n.label[i]; IF ch = '&' THEN nch := n.label[i + 1]; IF nch = '&' THEN nch := 0X; INC(i) END END UNTIL (nch # 0X) OR (ch = 0X); IF (nch # 0X) & m.Match(NIL, ORD(XCap(nch)), { Controllers.pick }) THEN it := dropReq.item; dropReq.menu := n END; n := NextShownModel(n.link) UNTIL (it # NIL) OR (n = NIL) END; RETURN it END FirstMatch; |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 00:04 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Посмотрел, в целом супер! Многое стало намного лучше. Пока очевидный минус в том, что вы убрали Storage структуры, а они ведь были сделаны неспроста. Я сначала также в кадре хранил, но Антон меня поправил. Важная и документированную особенность каркаса, что кадры могут произвольно фремворком пересоздаваться. Их жизнь не гарантируется на протяжении существования самого инструмента. Таким образом, если открыть скажем ObxDialog, сдвинуть список скролом, и потом перетащить в другую вкрадку, то в реализации со Storage позиция скрола сохраниться, а в вашей новой реализации, будет создан новый кадр и положение сбросится. Также как и выделение текста в поле не сохраниться и т.п. Все свойства, которые в кадре храните. Поэтому предлагаю вернуть Storage структуры. Я подозреваю, что из-за них в старой реализации могли быть утечки памяти, так как я список этих Storage не чистил. Но это, пожалуй, как-то можно доработать. |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 00:34 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): кстати, ещё предложение: в LinBackends не проверять шорткаты меню, если текущее окно в режиме «mask» (то есть, активная форма). в подавляющем большинстве случаев меню просто съедает шорткаты формы безо всякого толка. я себе так сделал — и жить стало значительно удобней. p.s.: в идеале надо в таком случае проверять сначала форму, а потом меню, но, кажется, это задача менее тривиальная, потому что неясно, слопало окно клавиатурное событие или нет. (это вообще невозможно же определить, мне кажется, да?) p.p.s.: по зрелом размышлении — эту проверку надо унести в `FirstMatch()` вообще, нечего ей в бэкэндах делать. А вот тут я не уверен, что меню должно отключаться. Весьма сомнительное предложение. Так ведь должны и операции копирования вставки работать над полями форм. За эталон лучше брать виндовую версию 1.7.2, чтобы людям было менее травматично переходить на 2.0. Скажем нажатие Ctrl+W должно закрыть активную форму. А нажатие F1 также вызвать справку. Многие команды и шоткаты заблокированы охранами, когда форма активна. А те, что не заблокированы должны быть активны. |
Автор: | arisu [ Пятница, 20 Январь, 2023 02:03 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Посмотрел, в целом супер! Многое стало намного лучше. спасибо! но я ещё не закончил, да, будет ещё чуть-чуть лучше (но уже в основном по мелочи, косметически).Иван Денисов писал(а): Пока очевидный минус в том, что вы убрали Storage структуры я их убрал потому что точно то же самое сделано в WinCFrames. абсолютно так же, как я лениво создаю свои Guts — оригинальный WinCFrames лениво создаёт и уничтожает нативные контролы. я посчитал, что если в виндоверсии это всех устраивало, то нет никакого смысла городить дополнительные сложности в этой версии для фичи, которую никто и не заметит.Иван Денисов писал(а): Я подозреваю, что из-за них в старой реализации могли быть утечки памяти, так как я список этих Storage не чистил. Но это, пожалуй, как-то можно доработать. были. и доработать это, увы, в рамках существующих CFrames можно только одним методом: уничтожать Storage в методе `Close()` — что будет абсолютно равносильно хранению данных прямо в контроле. поэтому я их и убрал: CFrames просто не были сдизайнены для подобных трюков, и я не вижу смысла пытаться их приспособить к тому, для чего их явно не предусматривали. я понял, зачем были введены Storage, но оно просто в таком виде нормально работать без кучи хаков не может, увы.summary: попытки сделать полноценное разделяемое состояние на основе механик CFrames требуют или полной переделки CFrames под это, или каких-то неочевидных хаков с прямой манипуляцией кишками других компонентов/модулей, и всё это ради довольно незначительного удобства, на которое плюнули даже сами омики в своё время. я не думаю, что имеет смысл уродовать стройную систему такими хаками. если, например, Антон Александрович сделает новую реализацию контролов на полноценном каркасе моделей, а не CFrames — то там оно будет «из коробки». а в CFrames оно не лезет ну никак. если я потом придумаю метод сделать это без уродливых хаков — я сделаю. а пока считаю, что не надо. p.s. Guts я всё-таки вынес в StdCFramesGuts. |
Автор: | arisu [ Пятница, 20 Январь, 2023 02:08 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): А вот тут я не уверен, что меню должно отключаться. поэтому я отменил свою идею делать это в бэкэнде, и перенёс проверки в `StdMenus.FirstMatch`. в том виде, в каком я кинул код — при активной форме ей отдаются только шорткаты типа Alt+кнопка, и шорткаты неактивных в данный момент пунктов меню (это дополнительно проверяется стражами, но в принципе — оно не нужно; оно там затем, что я у себя добавил возможность официально делать шорткаты Alt+что-то в меню, и у меня реальный код чуть сложнее и грязнее). все остальные не съедаются. так что Ctrl+W спокойно закрывает тот же диалог Ctrl+F, например, никаких проблем. зато в диалоге Ctrl+F я могу нажать Alt+F для "Find &First", и оно работает как и предполагает пользователь, а не активирует зачем-то меню «File».причём вся эта механика работает только если активное окно находится в режиме «mask», во всех остальных режимах ничего не съедается вообще. вы попробуйте изменение (ну, там чуть-чуть надо ещё рихтануть, XCap, например, не нужен вообще), и я вам гарантирую: вы заметите разницу только в том, что начали нормально работать шорткаты для контролов в формах, а не в том, что что-то вдруг внезапно отвалилось. ;-) |
Автор: | arisu [ Пятница, 20 Январь, 2023 04:20 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
собственно, вот, чуть-чуть улучшеный код для `StdMenus.FirstMatch()`: Код: PROCEDURE IsMaskMode (mode: SET): BOOLEAN;
CONST modemask = {Containers.noSelection, Containers.noFocus, Containers.noCaret}; BEGIN RETURN mode * modemask = {Containers.noSelection, Containers.noCaret} END IsMaskMode; PROCEDURE GetWindowMode (): SET; VAR c: Containers.Controller; gm: Containers.GetOpts; w: Windows.Window; BEGIN c := Containers.Focus(); gm.valid := {}; IF (c # NIL) & (c.Singleton() # NIL) THEN Views.HandlePropMsg(c.Singleton(), gm); END; IF gm.valid = {} THEN w := Windows.dir.Focus(Controllers.path); IF (w # NIL) & (w.doc.ThisView() IS Containers.View) THEN Views.HandlePropMsg(w.doc.ThisView(), gm); END END; IF gm.valid = {} THEN gm.opts := {} END; RETURN gm.opts END GetWindowMode; PROCEDURE IsSomeFormActive (): BOOLEAN; VAR mode: SET; res: BOOLEAN; BEGIN res := FALSE; mode := GetWindowMode(); IF mode # {} THEN res := IsMaskMode(mode) END; RETURN res END IsSomeFormActive; PROCEDURE IsGoodMod (formIsActive: BOOLEAN; mod: SET): BOOLEAN; VAR res: BOOLEAN; BEGIN IF formIsActive THEN res := (mod * {0..7} # {Controllers.pick}) ELSE res := TRUE END; RETURN res END IsGoodMod; PROCEDURE IsEmptyFilter (IN s: ARRAY OF CHAR): BOOLEAN; VAR res: BOOLEAN; pos: INTEGER; BEGIN res := TRUE; IF LEN(s) > 0 THEN pos := 0; WHILE (s[pos] # 0X) & (s[pos] <= 20X) DO INC(pos) END; res := (s[pos] = 0X) END; RETURN res END IsEmptyFilter; PROCEDURE IsItemEnabled (it: Item): BOOLEAN; VAR res: BOOLEAN; failed, ok: BOOLEAN; BEGIN IF it # NIL THEN IF ~IsEmptyFilter(it.filter) THEN ok := FALSE; StdDialog.CheckFilter(it, failed, ok, it.par); res := (ok & ~failed & ~it.par.disabled) ELSE res := TRUE END ELSE res := FALSE END; RETURN res END IsItemEnabled; (* k8: do not check "M-key" shortcuts if the active window is in "mask" mode *) PROCEDURE (h: Directory) FirstMatch* (VAR m: StdMenuTool.ShortcutMatcher): StdDialog.Item; VAR n: Model; it, curr, disit: Item; i: INTEGER; ch, nch: CHAR; formIsActive: BOOLEAN; BEGIN it := NIL; disit := NIL; formIsActive := IsSomeFormActive(); (* check submenu hotkeys *) n := NextShownModel(main); curr := n.first; WHILE (curr # NIL) & (it = NIL) DO IF IsGoodMod(formIsActive, curr.mod) & m.Match(curr, curr.code, curr.mod) THEN (* k8: this allows to have several mutual exclusive actions to be assigned to the same shortcut *) IF IsItemEnabled(curr) THEN it := curr ELSIF disit = NIL THEN disit := curr END END; IF curr.next # NIL THEN curr := curr.next(Item) ELSIF n # NIL THEN n := NextShownModel(n.link); IF n # NIL THEN curr := n.first ELSE curr := NIL END ELSE curr := NIL END END; (* check main menu shortcuts *) IF ~formIsActive & (it = NIL) THEN n := NextShownModel(main); REPEAT (* find shortcut key, if there is any *) i := -1; nch := 0X; REPEAT INC(i); ch := n.label[i]; IF ch = '&' THEN nch := n.label[i + 1]; (* ignore "&&" *) IF nch = '&' THEN nch := 0X; INC(i) END END UNTIL (nch # 0X) OR (ch = 0X); IF (nch # 0X) & m.Match(NIL, ORD(nch), { Controllers.pick }) THEN it := dropReq.item; dropReq.menu := n ELSE n := NextShownModel(n.link) END UNTIL (it # NIL) OR (n = NIL) END; (* k8: eat shortcut for disabled item for non-forms *) IF ~formIsActive & (it = NIL) THEN it := disit END; RETURN it END FirstMatch; |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 09:55 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Немножко не так. WinCFrames устраивал потому что там была MDI оконная система, и она не уничтожала кадры так часто, как это теперь делает плиточный интерфейс. Поэтому если даже код чуть чуть сложнее из-за этих хранилищ, то их наличие оправдано в текущем плиточном варианте. Очищать список хранилищ возможно и другим путём, Close может ставить лишь флаг на очистку, а потом если уже не было сразу в новом кадре переиспользовано хранилище, то элемент будет удалён через пару секунд. |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 09:56 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): Иван Денисов писал(а): А вот тут я не уверен, что меню должно отключаться. поэтому я отменил свою идею делать это в бэкэнде, и перенёс проверки в `StdMenus.FirstMatch`. в том виде, в каком я кинул код — при активной форме ей отдаются только шорткаты типа Alt+кнопка, и шорткаты неактивных в данный момент пунктов меню (это дополнительно проверяется стражами, но в принципе — оно не нужно; оно там затем, что я у себя добавил возможность официально делать шорткаты Alt+что-то в меню, и у меня реальный код чуть сложнее и грязнее). все остальные не съедаются. так что Ctrl+W спокойно закрывает тот же диалог Ctrl+F, например, никаких проблем. зато в диалоге Ctrl+F я могу нажать Alt+F для "Find &First", и оно работает как и предполагает пользователь, а не активирует зачем-то меню «File».причём вся эта механика работает только если активное окно находится в режиме «mask», во всех остальных режимах ничего не съедается вообще. вы попробуйте изменение (ну, там чуть-чуть надо ещё рихтануть, XCap, например, не нужен вообще), и я вам гарантирую: вы заметите разницу только в том, что начали нормально работать шорткаты для контролов в формах, а не в том, что что-то вдруг внезапно отвалилось. А я понял, команды меню игнорируются только если они были перехвачены формой. Попробую, спасибо за пояснение. |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 10:00 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): p.s. Guts я всё-таки вынес в StdCFramesGuts. В 2.0 так лучше не буду делать. Там не такой уж большой модуль. Не надо плодить модули без необходимости. |
Автор: | arisu [ Пятница, 20 Январь, 2023 12:02 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Не надо плодить модули без необходимости. я тут вижу необходимость: как минимум две разных реализации контролов используют одни и те же Guts: NextSTEP и «старый оригинальный» (который я не кидал, но он будет по вашей просьбе). по-моему, совершенно неправильно оставлять разделяюмую (и независимую от NS) часть в модуле с NS: это идёт вразрез с любой идеей модульности, i believe.честно говоря, совершенно не понимаю этого нежелания добавлять модули, когда они просто напрашиваются: как будто у нас количество файлов в каталоге ограничено. как по мне, то как раз смешивать разные сущности в пределах одного модуля — «грязный» дизайн, сложный для чтения и понимания. а вот если модуль сразу не сделать — то потом обязательно начнутся разговоры про то, что уже поздно, что для совместимости надо оставлять как было, а то вдруг какой-то код сломается. ну давайте сразу делать нормально, ну пожалуйста! |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 13:17 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
1. Наличие нескольких модулей для одного расширения усложняет понимание системы. Скажем кому-то не надо вообще StdStdCFrames, ему нужен только WinCFrames, мы ведь поддерживаем еще и старую сборку MDI, где эти кросс-платформенные инструменты являются опциональными. 2. Наличие большого числа файлов в дистрибутиве усложняет его упаковку, распаковку, копирование. Особенно на Windows. С недавних пор еще и Cinammon начал жутко тупить, если на рабочем столе ему положить папку в которой много файлов. Так что много файлов в дистрибутиве это плохо. 3. Компонентный подход в разработке поощряет копирование кода. В данном случае копирование не требуется как таковое, но получается, что это никогда в Блэкбоксе не выглядит как-то инородно. 4. Это может существовать у вас в системе в такой трехмодульной конфигурации. А в дистрибутив вполне достаточно одного модуля. Раньше у меня вообще были эти инструменты в первых версиях прямо в StdCFrames, как стандартная реализация. Но потом не помню по чьей просьбе мы их вынесли в отдельный модуль. |
Автор: | arisu [ Пятница, 20 Январь, 2023 15:21 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): 1. Наличие нескольких модулей для одного расширения усложняет понимание системы. Скажем кому-то не надо вообще StdStdCFrames, ему нужен только WinCFrames, мы ведь поддерживаем еще и старую сборку MDI, где эти кросс-платформенные инструменты являются опциональными. ну так в этом случае оно лежит себе и никому не мешает. дабы облегчить понимание, в Docu просто кладётся документ, где кратко описывается, что это за Guts, и зачем он нужен. (я всё равно буду делать нечто отдалённо похожее на документацию к нему.)Иван Денисов писал(а): 2. Наличие большого числа файлов в дистрибутиве усложняет его упаковку, распаковку, копирование. Особенно на Windows. С недавних пор еще и Cinammon начал жутко тупить, если на рабочем столе ему положить папку в которой много файлов. Так что много файлов в дистрибутиве это плохо. ой, ну право. XXI-й век, 2023-й год. хранилища на кучи терабайт. техника не справляется с сотней файлов. где мы свернули не туда? ;-)Иван Денисов писал(а): 3. Компонентный подход в разработке поощряет копирование кода. а вот этот интересный тезис я слышу в первый раз, честно признаться. я всегда считал, что компонентный подход — это про создание хороших интерфейсов (ABSTRACT RECORDS), и реализацию их независимыми друг от друга компонентами. которые вовсе не обязаны состоять из одного модуля, и тем более из копипасты. ну, одна из бед BBCB — фактически одноуровневая система каталогов, из-за которой в подсистемах иногда получается бардак. но это, по моему мнению, просто недоработка BBCB, а не нечто имманентно присущее компонентному программированию. но и тут, мне кажется, StdStdCFrames — это не очень удачное для них место: этой реализации давно пора уехать в свою личную подсистему.Иван Денисов писал(а): 4. Это может существовать у вас в системе в такой трехмодульной конфигурации. А в дистрибутив вполне достаточно одного модуля. вы меня всё ещё не убедили, но если вы хотите в дистрибутиве их объединять — то, конечно, пожалуйста. я просто не вижу смысла тратить время на лишнюю работу по копипасте кода и замене идентификаторов лишь для того, чтобы свалить в одну кучу вещи, довольно чётко зависящие друг от друга только в одном направлении. но, повторюсь, если вы хотите именно так — то я не буду иметь ничего против того, чтобы вы модифицировали мой код как считаете правильным. в принципе, можете даже потом (когда я допилю) просто не включать мой NS-like вид, и оставить только тот, что был (потому что иначе надо будет везде долго и нудно править идентификаторы, чтобы слить всё в один модуль).
|
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 15:40 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Главное вы сейчас делайте, как считаете правильным для себя. В отдельный модуль так в отдельный. А адаптировать для 2.0 - уже моя задача. Там есть свои особенности. Вы ведь совершенно не думаете про старую MDI сборку, а у меня на ней несколько проектов, один из которых еще и по важной для меня работе. Не заставлять же вас об этом думать |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 15:44 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): Иван Денисов писал(а): 1. Наличие нескольких модулей для одного расширения усложняет понимание системы. Скажем кому-то не надо вообще StdStdCFrames, ему нужен только WinCFrames, мы ведь поддерживаем еще и старую сборку MDI, где эти кросс-платформенные инструменты являются опциональными. ну так в этом случае оно лежит себе и никому не мешает. дабы облегчить понимание, в Docu просто кладётся документ, где кратко описывается, что это за Guts, и зачем он нужен. (я всё равно буду делать нечто отдалённо похожее на документацию к нему.)Не разделяю такое вольное отношение включению разного рода вещей в сборку, это может вызвать повторное использование, и последующее отягощающую необходимость поддерживать совместимость с этим модулем. Есть определённая концепция минималистичности. Давайте её уважать. Вероятно не всегда должны кишки торчать наружу. |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 15:45 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): Иван Денисов писал(а): 3. Компонентный подход в разработке поощряет копирование кода. а вот этот интересный тезис я слышу в первый раз, честно признаться. я всегда считал, что компонентный подход — это про создание хороших интерфейсов (ABSTRACT RECORDS), и реализацию их независимыми друг от друга компонентами. которые вовсе не обязаны состоять из одного модуля, и тем более из копипасты. ну, одна из бед BBCB — фактически одноуровневая система каталогов, из-за которой в подсистемах иногда получается бардак. но это, по моему мнению, просто недоработка BBCB, а не нечто имманентно присущее компонентному программированию. но и тут, мне кажется, StdStdCFrames — это не очень удачное для них место: этой реализации давно пора уехать в свою личную подсистемуда, запрет на наследование в компонентном софте приводит к копиям кода, это особенность для решения проблемы хрупких базовых классов. Не надо новых подсистем. Эти GUI элементы — это стандартная реализация каркаса, и живет в подсистеме Std. |
Автор: | Иван Денисов [ Пятница, 20 Январь, 2023 15:51 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): Иван Денисов писал(а): 2. Наличие большого числа файлов в дистрибутиве усложняет его упаковку, распаковку, копирование. Особенно на Windows. С недавних пор еще и Cinammon начал жутко тупить, если на рабочем столе ему положить папку в которой много файлов. Так что много файлов в дистрибутиве это плохо. ой, ну право. XXI-й век, 2023-й год. хранилища на кучи терабайт. техника не справляется с сотней файлов. где мы свернули не туда? |
Страница 9 из 20 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |