OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 387 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 20  След.
Автор Сообщение
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Среда, 18 Январь, 2023 13:13 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Тяжеловато уже понять, что вы делаете.
я скоро кину technical preview, можно будет натурно пощупать.

Иван Денисов писал(а):
Поменьше меняйте модули старого ББ
вообще не трогаю (за исключением сигнатуры KeyDown и одного пустого метода). ;-)

Иван Денисов писал(а):
не надо туда скины помещать. Пусть у каждой реализации будет свой скин, это нормально.
куча контролов имеет массу одинаковых частей: редактор строки, рисовалку списков, попапы. это то, что в оригинале реализовано через WinAPI нативными окнами. я сделал нечто похожее, только без окон и винапи. ;-) то есть, вынес код, который заведует рисованием и обработкой событий для этих частей в отдельные объекты, и просто использую эти объекты. таким образом и избегаем копипасты, и поведение одинаково выглядящих частей тоже унифицировано. вот эти повторно используемые части — их естественно повторно использовать и в других looks, обеспечивая унифицированый feel (потому что по сути всё реальное отличие — в рамочках да отступах, если грубо). я предлагаю эти части вынести в отдельный модуль, чтобы не импортировать в каждый скин весь StdStdCFrames, а обходиться только StdCFramesGuts. они подвязаны на StdCFrames, но и только. а конкретная реализация конкретного скина просто будет их использовать как строительные блоки, и добавлять оформление по своему вкусу.


Последний раз редактировалось arisu Среда, 18 Январь, 2023 13:21, всего редактировалось 1 раз.

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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Такие обещания двигают развитие Блэкбокса, так что я всё же починю, когда доделаю по работе две важные задачи.
да я ж не против. это я просто шучу, а смысл поста в том, что если вдруг вы ощущали некое временно́е давление от моей просьбы сделать побыстрее — то можно чуть расслабиться и делать не быстро, а правильно ;-), оно уже терпит.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
собственно, вот. это WIP, ни в коем случае не финальный вариант. System/Mod/Controls починен в соответствии с изменённой сигнатурой. в починке также нуждается вин-код и obx, это я у себя тоже сделал, но пока не кидаю. там тривиальщина, аргумент везде добавить.

вот я предлагаю EditorGuts и ListGuts выделить в отдельный модуль, потому что они и задумывались как реюзабельные (интерфейс я ещё рихтую, это, повторюсь, далеко от финала, пока что сделано в черновом варианте).


Вложения:
Комментарий к файлу: новые Controls и CFrames
new_cframes.txt [143.57 КБ]
Скачиваний: 37
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 19 Январь, 2023 03:56 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
кстати, ещё предложение: в LinBackends не проверять шорткаты меню, если текущее окно в режиме «mask» (то есть, активная форма). в подавляющем большинстве случаев меню просто съедает шорткаты формы безо всякого толка. я себе так сделал — и жить стало значительно удобней.

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

p.p.s.: по зрелом размышлении — эту проверку надо унести в `FirstMatch()` вообще, нечего ей в бэкэндах делать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Четверг, 19 Январь, 2023 04:34 

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Посмотрел, в целом супер! Многое стало намного лучше.

Пока очевидный минус в том, что вы убрали Storage структуры, а они ведь были сделаны неспроста. Я сначала также в кадре хранил, но Антон меня поправил. Важная и документированную особенность каркаса, что кадры могут произвольно фремворком пересоздаваться. Их жизнь не гарантируется на протяжении существования самого инструмента. Таким образом, если открыть скажем ObxDialog, сдвинуть список скролом, и потом перетащить в другую вкрадку, то в реализации со Storage позиция скрола сохраниться, а в вашей новой реализации, будет создан новый кадр и положение сбросится. Также как и выделение текста в поле не сохраниться и т.п. Все свойства, которые в кадре храните. Поэтому предлагаю вернуть Storage структуры. Я подозреваю, что из-за них в старой реализации могли быть утечки памяти, так как я список этих Storage не чистил. Но это, пожалуй, как-то можно доработать.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
кстати, ещё предложение: в LinBackends не проверять шорткаты меню, если текущее окно в режиме «mask» (то есть, активная форма). в подавляющем большинстве случаев меню просто съедает шорткаты формы безо всякого толка. я себе так сделал — и жить стало значительно удобней.

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

p.p.s.: по зрелом размышлении — эту проверку надо унести в `FirstMatch()` вообще, нечего ей в бэкэндах делать.

А вот тут я не уверен, что меню должно отключаться. Весьма сомнительное предложение. Так ведь должны и операции копирования вставки работать над полями форм. За эталон лучше брать виндовую версию 1.7.2, чтобы людям было менее травматично переходить на 2.0.
Скажем нажатие Ctrl+W должно закрыть активную форму. А нажатие F1 также вызвать справку. Многие команды и шоткаты заблокированы охранами, когда форма активна. А те, что не заблокированы должны быть активны.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Посмотрел, в целом супер! Многое стало намного лучше.
спасибо! но я ещё не закончил, да, будет ещё чуть-чуть лучше (но уже в основном по мелочи, косметически).

Иван Денисов писал(а):
Пока очевидный минус в том, что вы убрали Storage структуры
я их убрал потому что точно то же самое сделано в WinCFrames. абсолютно так же, как я лениво создаю свои Guts — оригинальный WinCFrames лениво создаёт и уничтожает нативные контролы. я посчитал, что если в виндоверсии это всех устраивало, то нет никакого смысла городить дополнительные сложности в этой версии для фичи, которую никто и не заметит.

Иван Денисов писал(а):
Я подозреваю, что из-за них в старой реализации могли быть утечки памяти, так как я список этих Storage не чистил. Но это, пожалуй, как-то можно доработать.
были. и доработать это, увы, в рамках существующих CFrames можно только одним методом: уничтожать Storage в методе `Close()` — что будет абсолютно равносильно хранению данных прямо в контроле. поэтому я их и убрал: CFrames просто не были сдизайнены для подобных трюков, и я не вижу смысла пытаться их приспособить к тому, для чего их явно не предусматривали. я понял, зачем были введены Storage, но оно просто в таком виде нормально работать без кучи хаков не может, увы.

summary: попытки сделать полноценное разделяемое состояние на основе механик CFrames требуют или полной переделки CFrames под это, или каких-то неочевидных хаков с прямой манипуляцией кишками других компонентов/модулей, и всё это ради довольно незначительного удобства, на которое плюнули даже сами омики в своё время. я не думаю, что имеет смысл уродовать стройную систему такими хаками. если, например, Антон Александрович сделает новую реализацию контролов на полноценном каркасе моделей, а не CFrames — то там оно будет «из коробки». а в CFrames оно не лезет ну никак. если я потом придумаю метод сделать это без уродливых хаков — я сделаю. а пока считаю, что не надо.

p.s. Guts я всё-таки вынес в StdCFramesGuts.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
А вот тут я не уверен, что меню должно отключаться.
поэтому я отменил свою идею делать это в бэкэнде, и перенёс проверки в `StdMenus.FirstMatch`. в том виде, в каком я кинул код — при активной форме ей отдаются только шорткаты типа Alt+кнопка, и шорткаты неактивных в данный момент пунктов меню (это дополнительно проверяется стражами, но в принципе — оно не нужно; оно там затем, что я у себя добавил возможность официально делать шорткаты Alt+что-то в меню, и у меня реальный код чуть сложнее и грязнее). все остальные не съедаются. так что Ctrl+W спокойно закрывает тот же диалог Ctrl+F, например, никаких проблем. зато в диалоге Ctrl+F я могу нажать Alt+F для "Find &First", и оно работает как и предполагает пользователь, а не активирует зачем-то меню «File».

причём вся эта механика работает только если активное окно находится в режиме «mask», во всех остальных режимах ничего не съедается вообще.

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


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

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


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

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
А вот тут я не уверен, что меню должно отключаться.
поэтому я отменил свою идею делать это в бэкэнде, и перенёс проверки в `StdMenus.FirstMatch`. в том виде, в каком я кинул код — при активной форме ей отдаются только шорткаты типа Alt+кнопка, и шорткаты неактивных в данный момент пунктов меню (это дополнительно проверяется стражами, но в принципе — оно не нужно; оно там затем, что я у себя добавил возможность официально делать шорткаты Alt+что-то в меню, и у меня реальный код чуть сложнее и грязнее). все остальные не съедаются. так что Ctrl+W спокойно закрывает тот же диалог Ctrl+F, например, никаких проблем. зато в диалоге Ctrl+F я могу нажать Alt+F для "Find &First", и оно работает как и предполагает пользователь, а не активирует зачем-то меню «File».

причём вся эта механика работает только если активное окно находится в режиме «mask», во всех остальных режимах ничего не съедается вообще.

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

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
p.s. Guts я всё-таки вынес в StdCFramesGuts.

В 2.0 так лучше не буду делать. Там не такой уж большой модуль. Не надо плодить модули без необходимости.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Не надо плодить модули без необходимости.
я тут вижу необходимость: как минимум две разных реализации контролов используют одни и те же Guts: NextSTEP и «старый оригинальный» (который я не кидал, но он будет по вашей просьбе). по-моему, совершенно неправильно оставлять разделяюмую (и независимую от NS) часть в модуле с NS: это идёт вразрез с любой идеей модульности, i believe.

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
1. Наличие нескольких модулей для одного расширения усложняет понимание системы. Скажем кому-то не надо вообще StdStdCFrames, ему нужен только WinCFrames, мы ведь поддерживаем еще и старую сборку MDI, где эти кросс-платформенные инструменты являются опциональными.

2. Наличие большого числа файлов в дистрибутиве усложняет его упаковку, распаковку, копирование. Особенно на Windows. С недавних пор еще и Cinammon начал жутко тупить, если на рабочем столе ему положить папку в которой много файлов. Так что много файлов в дистрибутиве это плохо.

3. Компонентный подход в разработке поощряет копирование кода. В данном случае копирование не требуется как таковое, но получается, что это никогда в Блэкбоксе не выглядит как-то инородно.

4. Это может существовать у вас в системе в такой трехмодульной конфигурации. А в дистрибутив вполне достаточно одного модуля. Раньше у меня вообще были эти инструменты в первых версиях прямо в StdCFrames, как стандартная реализация. Но потом не помню по чьей просьбе мы их вынесли в отдельный модуль.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
1. Наличие нескольких модулей для одного расширения усложняет понимание системы. Скажем кому-то не надо вообще StdStdCFrames, ему нужен только WinCFrames, мы ведь поддерживаем еще и старую сборку MDI, где эти кросс-платформенные инструменты являются опциональными.
ну так в этом случае оно лежит себе и никому не мешает. дабы облегчить понимание, в Docu просто кладётся документ, где кратко описывается, что это за Guts, и зачем он нужен. (я всё равно буду делать нечто отдалённо похожее на документацию к нему.)

Иван Денисов писал(а):
2. Наличие большого числа файлов в дистрибутиве усложняет его упаковку, распаковку, копирование. Особенно на Windows. С недавних пор еще и Cinammon начал жутко тупить, если на рабочем столе ему положить папку в которой много файлов. Так что много файлов в дистрибутиве это плохо.
ой, ну право. XXI-й век, 2023-й год. хранилища на кучи терабайт. техника не справляется с сотней файлов. где мы свернули не туда? ;-)

Иван Денисов писал(а):
3. Компонентный подход в разработке поощряет копирование кода.
а вот этот интересный тезис я слышу в первый раз, честно признаться. я всегда считал, что компонентный подход — это про создание хороших интерфейсов (ABSTRACT RECORDS), и реализацию их независимыми друг от друга компонентами. которые вовсе не обязаны состоять из одного модуля, и тем более из копипасты. ну, одна из бед BBCB — фактически одноуровневая система каталогов, из-за которой в подсистемах иногда получается бардак. но это, по моему мнению, просто недоработка BBCB, а не нечто имманентно присущее компонентному программированию. но и тут, мне кажется, StdStdCFrames — это не очень удачное для них место: этой реализации давно пора уехать в свою личную подсистему.

Иван Денисов писал(а):
4. Это может существовать у вас в системе в такой трехмодульной конфигурации. А в дистрибутив вполне достаточно одного модуля.
вы меня всё ещё не убедили, но если вы хотите в дистрибутиве их объединять — то, конечно, пожалуйста. я просто не вижу смысла тратить время на лишнюю работу по копипасте кода и замене идентификаторов лишь для того, чтобы свалить в одну кучу вещи, довольно чётко зависящие друг от друга только в одном направлении. но, повторюсь, если вы хотите именно так — то я не буду иметь ничего против того, чтобы вы модифицировали мой код как считаете правильным. в принципе, можете даже потом (когда я допилю) просто не включать мой NS-like вид, и оставить только тот, что был (потому что иначе надо будет везде долго и нудно править идентификаторы, чтобы слить всё в один модуль).


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Главное вы сейчас делайте, как считаете правильным для себя. В отдельный модуль так в отдельный. А адаптировать для 2.0 - уже моя задача. Там есть свои особенности. Вы ведь совершенно не думаете про старую MDI сборку, а у меня на ней несколько проектов, один из которых еще и по важной для меня работе. Не заставлять же вас об этом думать :)


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
1. Наличие нескольких модулей для одного расширения усложняет понимание системы. Скажем кому-то не надо вообще StdStdCFrames, ему нужен только WinCFrames, мы ведь поддерживаем еще и старую сборку MDI, где эти кросс-платформенные инструменты являются опциональными.
ну так в этом случае оно лежит себе и никому не мешает. дабы облегчить понимание, в Docu просто кладётся документ, где кратко описывается, что это за Guts, и зачем он нужен. (я всё равно буду делать нечто отдалённо похожее на документацию к нему.)

Не разделяю такое вольное отношение включению разного рода вещей в сборку, это может вызвать повторное использование, и последующее отягощающую необходимость поддерживать совместимость с этим модулем. Есть определённая концепция минималистичности. Давайте её уважать. Вероятно не всегда должны кишки торчать наружу.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
3. Компонентный подход в разработке поощряет копирование кода.
а вот этот интересный тезис я слышу в первый раз, честно признаться. я всегда считал, что компонентный подход — это про создание хороших интерфейсов (ABSTRACT RECORDS), и реализацию их независимыми друг от друга компонентами. которые вовсе не обязаны состоять из одного модуля, и тем более из копипасты. ну, одна из бед BBCB — фактически одноуровневая система каталогов, из-за которой в подсистемах иногда получается бардак. но это, по моему мнению, просто недоработка BBCB, а не нечто имманентно присущее компонентному программированию. но и тут, мне кажется, StdStdCFrames — это не очень удачное для них место: этой реализации давно пора уехать в свою личную подсистему

да, запрет на наследование в компонентном софте приводит к копиям кода, это особенность для решения проблемы хрупких базовых классов. Не надо новых подсистем. Эти GUI элементы — это стандартная реализация каркаса, и живет в подсистеме Std.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
2. Наличие большого числа файлов в дистрибутиве усложняет его упаковку, распаковку, копирование. Особенно на Windows. С недавних пор еще и Cinammon начал жутко тупить, если на рабочем столе ему положить папку в которой много файлов. Так что много файлов в дистрибутиве это плохо.
ой, ну право. XXI-й век, 2023-й год. хранилища на кучи терабайт. техника не справляется с сотней файлов. где мы свернули не туда? ;-)
Я не знаю, это какой-то мрак. Надо делать свои правильные операционные системы. Вот Блэкбокс хоть отчасти выручает, как операционная система второго уровня.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 387 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 20  След.

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


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

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


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

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