LINUX.ORG.RU

Как организовать на уровне API сортировку менюшек?

 


0

1

В общем, делаю я к своему парсеру IDE потому что пытаться победить qговнокреатор я прекратил. Там такой кромешный звездец внутри, что буквально каждый шаг сравним с выгребанием таксофона в который насрал легион особо говнистых туристов.

Так вот, я там делаю интерфейс для плагинов чтоб уширять потом этот IDE и встал вопрос: само API ПРОСТО_ДОБАВЛЕНИЯ оно выражаясь на английски straightforward. Есть набор действий, которые должны стать активны или видимы только когда активна определенная вьюшка. То есть мы даем инфу по какому критерию их врубать, в какое меню их напихать и как их в меню сортировать.

/*
 * add menuitems which are specific only to this view
 */
void addActions(IView * owner, QList<QAction*> actions,
                const QString& menuname,
                int menu_priority);
/*
 * add menuitems which are specific to a feature
 */
void addActions(const QString& feature_name,
                QList<QAction*> actions,
                const QString& menuname,
                int menu_priority);

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

Например плагин foo создает меню «build» и «debug» а плагин bla - «analyze» и «debug» и в зависимости от порядка их старта будет либо analyze-debug-build или build-debug-analyze.

menu_priority это пока костыль страшный, хотелось бы что-то покрасивее.

Пока есть идея ввести категории менюшек. В креаторе это реализуется примерно так: помимо имени назначается строка -название категории вида «10.что-то-важное» «20.что-по-посередине» «50.бугага» «90.всамуюдальзасунуть»

Но возможно есть идея покрасивее. киньте совет.

Добавить сортировку по: порядку добавления, приоритету, лексикографически и/или случайно, по нескольким (ранее приведённым) параметрам.

anonymous
()

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

Ещё должен быть «menuController», который будет рулить структуризацией и отображением GUI.

В общем тут важна тщательная проработка архитектуры.

Dr64h ★★★★
()