Как правильно построить длинный список прокрутки виджетов кнопок в Motif? - PullRequest
3 голосов
/ 16 июля 2011

Я имею дело со старым приложением Motif, которое должно загружать и отображать длинный список записей (около 1500). Он создает и управляет экземпляром xmFormWidgetClass через XtVaCreateManagedWidget(), а затем заполняет его набором линейных иерархий xmFrameWidgetClass->xmFormWidgetClass->xmFormWidgetClass->xmPushButtonWidgetClass. Каждый PushButton содержит многострочную метку. Когда эта штука заполняется, она требует много ресурсов ЦП, которые тратит на вычисления геометрии внутри библиотек X / Motif. Скорость, с которой добавляются новые кнопки, очень быстро ухудшается. Похоже, что внутри XtVaCreateManagedWidget().

используется алгоритм O (N)

Все станет намного лучше, если я сделаю XtUnrealizeWidget() на оригинальном экземпляре xmFormWidgetClass. Записи добавляются практически с постоянной скоростью, но тогда я не могу найти способ отобразить все, что я построил. XtRealizeWidget() для исходного экземпляра xmFormWidgetClass не отображает его в окне.

Что я делаю не так? Есть ли способ заполнить иерархию, а затем вычислить геометрию и сразу отобразить ее на экране?

Редакция приложения - это опция, но это последний тип опции для опции.

Любой совет, который держит меня в библиотеках Motif, будет высоко оценен!

С уважением, / Сергей

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Попробуйте создать все неуправляемые виджеты и поместить их в WidgetList, а затем вызвать XtManageChildren ().См. Следующую ссылку

http://www.s -and-b.su / syshlp / motif_guide / MotifProgGuide / Making_Widgets_Visible.html

Каждый раз, когда управление отдельным виджетомВызывается родительская процедура change_managed.XtManageChildren вызывает процедуру updated_manage только один раз.Это может помочь.

1 голос
/ 19 июля 2011

Попробуйте позвонить XtManageChild после XtRealizeWidget.

...