OberonCore
https://forum.oberoncore.ru/

Перевод BlackBox под Linux
https://forum.oberoncore.ru/viewtopic.php?f=34&t=1280
Страница 8 из 15

Автор:  Alexey Veselovsky [ Среда, 25 Март, 2009 11:29 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Димыч писал(а):
С точки зрения ГУИ нарисовалась проблема - в GTK нет (штатной) возможности создать MDI приложение. Или я плохо искал.

Но как это сделать, я не знаю.
Так что придется делать интерфейс с закладками (как в gedit).


Ни за что не поверю что в gtk одно окно не может иметь несколько дочерних ;-)
Руками нужно приделать только заголовок для них (чтобы тягать мышкой можно было) и скроллбары. Вот и MDI в полной красе.

Автор:  Valery Solovey [ Среда, 25 Март, 2009 11:57 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Закладки - это просто ужас.

А зачем MDI вообще нужен? На нём что-то завязано? Если нет, то пусть будут обычные окна.

Автор:  Alexey Veselovsky [ Среда, 25 Март, 2009 12:00 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Valery Solovey писал(а):
Закладки - это просто ужас.

А зачем MDI вообще нужен? На нём что-то завязано? Если нет, то пусть будут обычные окна.


В BB на MDI завязано всё. Весь интерфейс там MDI. Без MDI либо докинга, с обычными свободно болтающимися окнами будет полный баррдак.

Автор:  Valery Solovey [ Среда, 25 Март, 2009 12:15 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Докинг - это прилипание? Тоже не нужно.

Просто без MDI встаёт вопрос о способе работы с самой средой. Если не пытаться придумать что-то новое, то самым подходящим на данный момент кажется плавающая панелька, как в Delphi. Из неё можно и справку вывести, и новый документ создать. А в config можно задавать её показ при запуске.

Достаточно, чтобы она состояла из двух частей:
1. строка заголовка. Стандартный элемент, присутствующий почти у всех окон. За него можно перемещать окно.
2. строка меню. Тоже стандартный элемент. Показывает меню Blackbox.

Но без MDI, наверное, немного усложняется навигация, поскольку меню отделено от своих окон, а также усложняется выполнение некоторых команд (например, сравнение текстов), выполняющих действие над двумя последними выбранными окнами.

Автор:  Борис Рюмшин [ Среда, 25 Март, 2009 12:26 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

MDI в полном смысле в линуксе нет. Эту возможность не поддерживает X-Window.
Некоторая эмуляция на тему, вполне удачная, есть в Qt.
Без МДИ это выглядит примерно так: верхняя панель с меню в виде полоски и отдельные окна документов.

Сам МДИ в ББ... по всей видимости его появлением мы обязаны Макам. Первый ББ создавался под них, а там одно меню вверху экрана на все приложения, которое динамически меняется по конкретику. Поэтому работа в ББ чем-то смахивает на работу с рабочим столом МакОС. Рискну предположить, что использование МДИ было наиболее простым способом переноса среды под Винду.

Однако МДИ стал и отдним из препятствих при переносе на Линух. На его особенности многое завязано.

Далее. В ГТК собственная система обработки событий, достаточно изощерённая. И связать то, что есть в ББ с этими механизмами (корректно связать!) - не есть простая задача.

И ещё одна проблема. Подсистема Хост, в отличии от всего остального, крайне сумбурна. Её по-хорошему следует переписать. В т.ч. и для винды.

Автор:  Alexey Veselovsky [ Среда, 25 Март, 2009 13:06 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Гм. Разве в X-Window нету дочерних окон? Вроде есть.
А больше от него ничего и не требуется.

Автор:  Trurl [ Среда, 25 Март, 2009 16:37 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Alexey Veselovsky писал(а):
Ни за что не поверю что в gtk одно окно не может иметь несколько дочерних ;-)
Руками нужно приделать только заголовок для них (чтобы тягать мышкой можно было) и скроллбары. Вот и MDI в полной красе.

"Чтобы тягать мышкой можно было" тоже нужно руками приделывать.

Автор:  Alexey Veselovsky [ Среда, 25 Март, 2009 16:57 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Trurl писал(а):
Alexey Veselovsky писал(а):
Ни за что не поверю что в gtk одно окно не может иметь несколько дочерних ;-)
Руками нужно приделать только заголовок для них (чтобы тягать мышкой можно было) и скроллбары. Вот и MDI в полной красе.

"Чтобы тягать мышкой можно было" тоже нужно руками приделывать.


Дык, я же ж написал про загловок ;-) За него и тягать. А вот про рамку для этих окон я, кстати, забыл.
Помнится я как раз такую штуковину делал. MDI в не MDI окне. Правда под виндой. Но это не важно, ибо от платформы не зависит.

Там всё довольно просто.

Автор:  Пётр Кушнир [ Среда, 25 Март, 2009 17:04 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Развивая идею, можно превратить одно окно(Gtk, Иксы - не важно) в ББ-контейнер(Container) особого типа, который будет эффективно и платформонезависимо содержать в себе меню, и MDI, и хоть чОрта лысого. Опять же, от системы нужен минимум(сообщения), ну и, может быть, механизм вырывания контролов аля CFrames.

Автор:  Info21 [ Среда, 25 Март, 2009 18:35 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Пётр Кушнир писал(а):
Развивая идею, можно превратить одно окно(Gtk, Иксы - не важно) в ББ-контейнер(Container) особого типа, который будет эффективно и платформонезависимо содержать в себе меню, и MDI, и хоть чОрта лысого.
Поддерживаю. И это, по-моему, не так уж сложно сделать.

Хотя это противоречит исходной "фишке" Блэкбокса: чтобы на каждой платформе сохранялся родной look-and-feel.
Так и черт с ней, с фишкой. Какой там look-and-feel на линуксе, вот и будет ... нормальный!

Автор:  Пётр Кушнир [ Среда, 25 Март, 2009 18:46 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Ну вот для Look&Feel есть CFrames(для тех, кто не в курсе - это такой механизм обёртывания системных контроллов во фрейм ББ, вон, в win-версии так оно и работает(правда, почему-то, не привинтили режим реагирования на "наезд" мыши, т.н. hover, но это дело наживное)).

Автор:  Борис Рюмшин [ Среда, 25 Март, 2009 22:37 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Alexey Veselovsky писал(а):
Гм. Разве в X-Window нету дочерних окон? Вроде есть.
А больше от него ничего и не требуется.

К сожалению, MDI это далеко не только дочерние окна.

Автор:  Alexey Veselovsky [ Четверг, 26 Март, 2009 01:03 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Борис Рюмшин писал(а):
Alexey Veselovsky писал(а):
Гм. Разве в X-Window нету дочерних окон? Вроде есть.
А больше от него ничего и не требуется.

К сожалению, MDI это далеко не только дочерние окна.


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

Автор:  Димыч [ Четверг, 26 Март, 2009 04:49 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Alexey Veselovsky писал(а):
Гм. Разве в X-Window нету дочерних окон? Вроде есть.
А больше от него ничего и не требуется.

Тут есть терминологическая путаница.
В Windows есть понятие "child window". Это окно, которое насильно затолкано внутрь родительского окна. Но это - окно, причем самостоятельное.
В X Window System правильнее говорить о child widget, т.е. о widget'ах, которые встреных в окно. Заниматься самостоятельной отрисовкой кучи widget'ов - муторное занятие имхо.

Автор:  igor [ Четверг, 26 Март, 2009 11:11 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Борис Рюмшин писал(а):
И ещё одна проблема. Подсистема Хост, в отличии от всего остального, крайне сумбурна. Её по-хорошему следует переписать. В т.ч. и для винды.
Я бы отметил ещё одну проблему. Блэкбокс насквозь заражён "вирусом" COM. Чтобы прочувствовать это предлагаю провести такой опыт (разумеется, приняв меры предосторожности):

1. В модуле Kernel переименуйте процедуру Release.
2. Исправьте все модули-клиенты, вызывающие эту прцедуру (OleServer).
3. Откомпилируйте исправленные модули.
4. Пересобирите Блэкбокс стандартной командой с динамически загружаемыми модулями.
5. Запустите на исполнение вновь собранный Блэкбокс.

И вот тут начнутся чудеса. Error 03. Kernel.Release not found (imported from OleData).

6. Открываем модуль OleData и видим в секции IMPORT, что он вообще не импортирует модуль Kernel.

Что тут можно сказать? Это не просто "недокументированная возможность", а грубое нарушение спецификации языка.
Интересно, как эти "особенности" учитываются при портировании Блэкбокс под Linux?

Автор:  Trurl [ Четверг, 26 Март, 2009 11:42 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Alexey Veselovsky писал(а):
Дык, я же ж написал про загловок ;-) За него и тягать.

Тягать можно за что угодно. Но это же надо собственный менеджер окон встраивать.

Автор:  Илья Ермаков [ Четверг, 26 Март, 2009 18:24 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Игорь Лоскутов писал(а):
Что тут можно сказать? Это не просто "недокументированная возможность", а грубое нарушение спецификации языка.
Интересно, как эти "особенности" учитываются при портировании Блэкбокс под Linux?

Процедура Release относится, как и неск. других процедур Kernel, к обеспечивающим во время выполнения. Пример: Kernel.New, которая динамически связывается с теми местами кода, где вызывается NEW. Release вызывается для объектов COM. А эти объекты описываются в модулях с IMPORT COM (псевдомодуль). Всё локализовано. И любой псевдомодуль компилятора по определению расширяет язык.

Автор:  igor [ Пятница, 27 Март, 2009 09:36 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Командира! Компилятора -- шайтан, однако :)

Автор:  igor [ Пятница, 27 Март, 2009 10:02 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Назначение процедуры Release мне понятно. Непонятно мне другое, зачем надо было так сильно привязывать реализацию Блэкбокс к технологии COM. На уровне компилятора. Котлеты, мухи -- всё в перемешку! Как это разгребать при портировании системы? Кроссплатформенность страдает. "Пополамный полумух", например, использует объектную модель SOM, которая лучше, чем COM.
Интересно, в Линукс COM как-нибудь представлена? Ответьте, кто юзает. Если нет, то:
Игорь Лоскутов писал(а):
Интересно, как эти "особенности" учитываются при портировании Блэкбокс под Linux?

Автор:  Илья Ермаков [ Пятница, 27 Март, 2009 12:08 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

В неграфическом плане вообще не мешает... Из ядра выкидывается эта часть. Компилятор вообще можно не трогать.
В графике кое-где вплетено, но тоже отслаивается. Графику вообще переписывать надо, подсистему Host.

Страница 8 из 15 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/