Я очень, очень не доволен меню и тулбаром!

October 30th, 2008 Begemot Posted in Использование

Ужасть просто как недоволен 🙂 Про меню я уже писал частично, сейчас будет вторая серия – буду отрыватся по полной, возможна даже нецензурная лексика:)

1. Хреновое выравнивание, посмотрите что происходит с шоткатом F2 в обоих случаях

menu_shortcut

2. Опять же хреновое выравнивае, но уже для чекбоксов. Почему его тянет на лево?

checkbox

3. Стоковые названия\шоткаты для меню – классная задумка. Но посколько, под виндой шоткаты принято обозначать как ctrl+v, а wxWidgets использует ctrlv, то ради унификации интерфейса приходится жертвовать ими и прописывать все название и комбинации жестко.

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

menu_toolbar_disable

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

toolbar_disable

6. wxMenu автоматически обрабатывает все шоткаты в меню и похоже это нельзя отключить, и это проблема:(

7. А это тулбар под вистой

toolbar_vista

Пока все что удалось вспомнить. И как они его там тестируют… ? Страшно представить, что же там будет под юкнисом то. Хотя может это только у меня дар и другие не замечают, может мне в тестеры пойти ?:)

Зато wxWidgets позволяет использовать png для иконок, а вот для дельфей такого нету, сегодня народ жаловался:)

Следует отметить что я использую wxAUI, и тулбар соответвенно, от его. Может с родным было бы лучше, надо проверить.

Да, вы главное не подумайте что я сильно расстроен wxWidgets, так просто пар спускаю:) А вообще ничего, можно пользоватся, творить. Я вот даже до беты дописался. так что не все так плохо! 🙂

Related:

15 Responses to “Я очень, очень не доволен меню и тулбаром!”

  1. Автор wxAUI замутил какой-то супер тулбар. Он его хотел даже включить в ветку 2.8, и ему дали добро, но чего-то я этого самого wxAUIToolBar в 2.8 не вижу. Возможно, плохо искал.

    Постой, ты, случайно, не его используешь?

    Зато в ветку 2.9 его точно включили. По крайней мере Robert Roebling божился, что это так, вот здесь: http://www.roebling.de/WoWoW30.html .

    “Added wxAUIToolBar to the set of wxAUI classes, which is better integrated and more flexible than the standard wxToolBar”

    А вот тут ( http://www.nabble.com/-10034:-wxAuiToolBar::MakeDisabledBitmap()–%3E-public-td19805707.html ) есть свидетельство (хотя и не проверенное) того, что wxAUIToolBar умеет хорошо делать disabled bitmaps:

    “The wxAuiToolBar helper function MakeDisabledBitmap() is producing excellent results. Please make it available for other uses.”

  2. О, так это оказывается я сейчас использую тулбар от wx а не от wxAUI…, чего же он кривой такой, я то надеялся что выкинув wxAUI (в принципе в этой программе оно мне не надо), я избавлюсь от части проблем.

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

  3. wxAuiToolbar есть и в 2.8.9, только он там немного сыроват, но можно попатчить. Вот, на форуме объявился некто, собравший все пачти для AUI и сделал свой вариант. Совместными усилиями поправили еще несколько ошибок и компиляцию под mingw. Это здесь http://wxforum.shadonet.com/viewtopic.php?t=21127, можешь тоже поучаствовать)

  4. спасибо, интересно, посмотрю.
    Поучаствовать, боюсь что только как тестер смогу:)

  5. Да, к сожалению есть такая проблема у wx. При изучении кода пришел к выводу – что лучше использовать либо wxAUI, либо стандартную котролю + иконки давать в PNG (wx с ними хорошо работает) + настрой wxSystemOptions::SetOption(wxT(“msw.remap”), 0);
    – поиграйся с параметрами – даст улучшения – но не идеальное! на win2000 изображение будет отличаться от winXP! Но хоть что то!
    Когда мне все это надоело я за недельку написал свой тулбар + еще неделька и свои менюшки – и теперь мну это не беспокоит, к сожалению поделиться кодом не могу – так как он не идеален и написан немного не удобно (писал на стадии изучения wx) – но как только, так сразу! 🙂

  6. Если уж об этом пошел разговор – то мне больше не нравиться следующее:
    В виртуальном wxListCtrl не приходит событие OnDeselect – и это уже на протяжении нескольких релизов библиотеки – пришлось самому патчить (там всего то три строчки кода для MSW) – все руки не доходят чтобы патч им отправить.

  7. я как раз wxAUI и использую, думал может даже от него отказатся, может из-за него глюки…
    Иконки тоже в PNG. msw.remap вроде ставил, но изменений не заметил, попробую еще раз:)

    О буду знать у кого патч спрашивать если wxListCtrl начну использовать 🙂

  8. хотя судя по хелпу мне msw.remap не поможет, он же по видимому действует на родной виндовый тулбар, а я AUI использую

  9. Да, конечно на wxAUI msw.remap мало чем поможет, хотя проблем с отрисовкой у AUI быть не должно – у них своя имплементация рисования. Хотя я не использовал ни разу тулбар от AUI, сужу только по коду.

    Патченный код wxListCtrl лежит дома – на память он такой:
    Файл: src\msw\listctrl.cpp
    Код:

    if ( nmLV->uChanged & LVIF_STATE && iItem != -1 )
    {
    // temp vars for readability
    const UINT stOld = nmLV->uOldState;
    const UINT stNew = nmLV->uNewState;

    event.m_item.SetId(iItem);
    event.m_item.SetMask(wxLIST_MASK_TEXT |
    wxLIST_MASK_IMAGE |
    wxLIST_MASK_DATA);
    GetItem(event.m_item);

    // has the focus changed?
    if ( !(stOld & LVIS_FOCUSED) && (stNew & LVIS_FOCUSED) )
    {
    eventType = wxEVT_COMMAND_LIST_ITEM_FOCUSED;
    event.m_itemIndex = iItem;
    }

    if ( (stNew & LVIS_SELECTED) != (stOld & LVIS_SELECTED) )
    {
    if ( eventType != wxEVT_NULL )
    {
    // focus and selection have both changed: send the
    // focus event from here and the selection one
    // below
    event.SetEventType(eventType);
    (void)GetEventHandler()->ProcessEvent(event);
    }
    else // no focus event to send
    {
    // then need to set m_itemIndex as it wasn’t done
    // above
    event.m_itemIndex = iItem;
    }

    eventType = stNew & LVIS_SELECTED
    ? wxEVT_COMMAND_LIST_ITEM_SELECTED
    : wxEVT_COMMAND_LIST_ITEM_DESELECTED;
    }
    }
    else if(iItem == -1)
    eventType = wxEVT_COMMAND_LIST_ITEM_DESELECTED;

    if ( eventType == wxEVT_NULL )
    {
    // not an interesting event for us
    return false;
    }

    А так wx реальная сила! Он на много лучше чем MFC (интуитивно понятные ф-ии + портируемый + еще много чего). И практически не уступает QT (которая кусается лицензией). Я уже несколько лет пишу на wx’е и доволен как слон 🙂

  10. Цены на Qt действительно запредельные, но я все равно то и дело посматриваю в сторону Qt. У них уже есть поддержка Symbian платформы S60 (пока что в бете).

    Я планирую разрабатывать приложения для разных мобильных платформ, и поддержка Symbian очень важна.

    Интересно, кто-нибудь работает над этим в wxWidgets?

  11. Кстати, у wxWidgets, насколько я понимаю, намечается поддержка разработки приложений для iPhone, а это тоже круто.

  12. А еще где то я видел компонент под wx который умеет работать с дельфийскими VCL – я еще не смотрел это – но если это то что я думаю – то это просто супер!

    Конечно знать врага (аля QT) нужно в лицо, – но покупать лицензию за 2000 или 5000 баксов – за какую то платформу – пусть даже и Symbian – да ну нафиг! У меня еще есть один аргумент против QT, я ради интереса написал им письмо: мол хочу купить и что я шароварщик, так же спросил про студенческие скидки – эти подонки даже не ответили, здается мне что им такие клиенты одиночки ваще до потолка! Их интересуют крупные деньги и компании. Так что одного желания купить еще маловато! Я думаю попотеть придется и выложить кучу денег тоже :).
    Так что я лично рассматриваю QT только для того чтобы знать его, ну мало ли при устройстве на работу пригодиться?!?!

  13. Абсолютная правда насчет переписки с Trolltech!

    Года 2 назад я им писал аналогичное письмо с просьбой сообщить цены на лицензии, у них тогда были скидки для малого бизнеса, я тоже сообщил, что я независимый разработчик, так они ответили через полгода или около того!

    Недавно им опять написал, хотел узнать, сколько стоит лицензия на Windows CE: и в ответ тишина…

    Меня это приводит в ступор… Они что, моих денег не хотят? Хотя, скорее всего, они знают по опыту, что такие как я ничего у них не покупают. 🙂

    У меня еще теплится слабая надежда, что после приобретения их Нокией они сделают свои библиотеки полностью бесплатными. Вот это был бы кайф. 🙂 Хотя я понимаю, что этого никогда не будет, а очень жаль.

    Насчет VCL.

    Есть такой компонент – wxVCL назвается, может быть, это он? Можно скачать отсюда: http://www.twinforms.com/wxvcl.htm


    wxVCL is a library for wxWidgets that contains functions that mimic VCL for Delphi and C++ Builder. Currently it has some basic VCL classes and approx. 600 VCL functions (functions in SysUtils, DateUtils, System, StrUtils etc.) Unlike VCL, wxVCL can be used in various OS that are supported by wxWidgets.

  14. зачем тащить наследие дельфи в с++?:)

  15. Скорее всего, не надо, но кому-то удобно пользоваться знакомыми по Delphi функциями.

    К тому же это наследие не только Delphi, но и C++Builder, которым я, к примеру, активно пользуюсь (все основные проекты на нем написаны с использованием VCL).