Приветствую всех хабравчан.
Сегодня я хочу вам рассказать о том, что Кутим теперь доступен и для владельцев замечательного мобильного компьютера от нокии.
![](https://habrastorage.org/r/w780q1/storage/599d0db4/155a898e/363fc4c2/e9e2585c.jpg)
С какими проблемами я столкнулся при портировании?
Первое с чем я столкнулся в начале работы это система сборки Кутима. В нем используется не обычный для всех проектов .pro файл, а cmake. То есть для того, чтобы начать сборку недостаточно Nokia Qt SDK. Нужно ставить Scratchbox. Ну и, конечно же, после долгого ожидания сборки кутим не запустился. Проблема была в некоторых плагинах, которые на Маемо не работоспособны. Пришлось их убрать.
После запуска и входа в сеть я понял, что нужно изменить очень многое, чтобы можно было использовать кутим в повседневной жизни.
Вот с чем я столкнулся:
В Кутиме, конечно, все довольно минималистично, но содержимое многих окон всё же не влазит на экран. Для того, чтобы появилась возможность двигать виджеты пальцем нужно обернуть их в QScrollArea. Изначально, это было сделано далеко не для всех нужных виджетов.
![](https://habrastorage.org/r/w1560/storage/aab3eb47/88eb8bf7/0ea95919/471d9005.png)
Небольшая ремарка: Здесь и далее все скриншоты уменьшены с 800×480 до 400×240. Это сделано для того, чтобы не занимать много места на экране.
В Маемо поддерживаются не все виджеты Qt. Некоторые из официально неподдерживаемых вполне работоспособны и их можно использовать. Но часть из них попросту не работает или выглядит так, что пользоваться этим не представляется возможным.
Для примера, QSound в Маемо не работает. В этом случае очень кстати пришлись плагины кутима, реализующие вывод звука через phonon и sdlsound. Как выяснилось позже, sdlsound в простое кушает много процессорного времени, и от него пришлось отказаться. В качестве виджета, который невозможно использовать, можно привести QFontDialog. Его придётся переделывать.
![](https://habrastorage.org/r/w1560/storage/e97b9fb5/b5694979/33e0db12/f5cdf884.png)
Привычное для всех нас в обычном компьютере всплывающее окошко с информацией о новом сообщении неприемлемо на Маемо. Тут тоже очень кстати в Кутиме оказался плагин, посылающий уведомления через dbus. Очень кстати потому, что в Маемо все стандартные программы общаются по этой шине. Позднее к этому плагину я прикрутил поддержку вибрации и светодиода.
Как выяснилось, разработчики и не предполагали, что может быть несколько каналов, по которым можно отправлять уведомления о событиях. Поэтому временно пришлось включить всё в один плагин и без возможности настройки.
![](https://habrastorage.org/r/w1560/storage/9f7c5a07/83ebff82/9a9c3309/7da8736a.png)
У экрана N900 ppi намного больше, чем у обычного монитора, и иконки становятся очень маленькими. В качестве примера, вы можете посмотреть на первую картинку в посте. Значки клиентов в ней — 16×16. Больше попросту не было, так как такие используется везде.
Кроме того, обычно иконки это разного рода кнопки, то есть по ним нужно нажимать пальцами. Для всех кнопок в Маемо минимальный размер иконки 48×48 пикселей. Хорошо, что в Кутиме используются иконки из темы oxygen, так как в ней для всех иконок есть все необходимые размеры, Но, всё же, в некоторых местах возникли проблемы. Например, в контакт листе жестко был запрограммирован размер иконок – 16×16.
Также хочу упомянуть в этом пункте, что впоследствии разработчики перенесли некоторые важные пункты из меню, которое обычно показывается по долгому нажатию на экран (правая клавиша мыши), прямо на элемент, для которого это меню предназначено:
![](https://habrastorage.org/r/w1560/storage/e061c745/97c610ec/8ab36b8f/751afacb.png)
В Кутиме, как и в любой другой программе, большое количество разнообразных окон. А плодить большое количество окон на мобильном устройстве не является хорошим тоном. В Маемо для решения этой проблемы предусмотрена концепция StackedWindow. То есть новое окно смещает старое влево с анимацией. А вместо значка «закрыть» появляется значок «назад», который закрывает текущее окно и открывает предыдущее. Для поддержки такой функции пришлось внести в код многих окон специфичный только для Маемо код.
![](https://habrastorage.org/r/w1560/storage/97f5b4ef/c6e4fa90/0e5f4d5e/3d3a5e28.png)
Изначально все настройки кутима располагаются в одном окне. Но оно не очень-то влезало в экран N900. Для того, чтобы оценить масштаб бедствий предлагаю ознакомится со следующей картинкой:
![](https://habrastorage.org/r/w1560/storage/07fc2bd8/138f20c1/bde944ad/a2c73d87.png)
Чтобы улучшить ситуацию Gorthauer87 предложил воспользоваться примером SlidingStackedWidget (видео) для Symbian от Nokia. То есть сразу после открытия окна настроек сделать так, чтобы пользователь видел только основные пункты. После выбора одного из них происходит открытие подпунктов. После выбора оного открываются конкретные настройки. Это всё сопровождается красивой анимацией.
![](https://habrastorage.org/r/w1560/storage/9e6f941b/967e591f/0adb8079/48b53169.png)
Позднее эта фишка была прикручена к интерфейсу управления закладками конференций и к чату. Об этом далее.
Самыми важными окнами в любом мессенджере является окно контакт листа и окно чата. Если с первым всё в принципе понятно (нужно только учесть, что в ландшафтном режиме действия нужно располагать по другому), то с чатом всё не так просто.
Как и во всех остальных мессенджерах, в Кутиме несколько чатов располагаются в виде табов. Но на мобильном устройстве маленький экран, и много табов просто не поместится туда.
За примером далеко ходить не надо — в пиджине на Маемо используются табы. Места они занимают много, а попасть по нужному табу при их большом количестве проблематично.
А еще же есть конференции! А это значит, что в стандартном окошке появляется еще и список пользователей в конференции, который занимает чуть ли не пол экрана, при этом пользоваться им почти нереально. Вот так это выглядело в Кутиме изначально:
![](https://habrastorage.org/r/w1560/storage/ff09369f/0196e4f1/3949c43c/3f1fafd2.png)
Что мы придумали?
Сделать три отдельных окна: список открытых чатов, текущий чат, участники конференции. Если в протоколе нет поддержки конференций, то количество окон уменьшается до двух. При этом в окне чата всё должно быть предельно просто: собственно чат, кнопка отправки, кнопка со смайлами, и поле ввода нового сообщения.
Но придумать концепцию мало. Нужно сделать так, чтобы это было красиво и этим было удобно пользоваться.
Для решения первого вопроса было решено воспользоваться концепцией, примененной к окну настроек.
А для решения второй проблемы первоначально решили использовать только движения пальцами. То есть если провел по экрану справа налево – то переключаем на предыдущий экран, если слева на право-то следующий. Конечно, если окон всего два, то можно делать любое движение.
Как оказалось, использовать движения пальцами не всегда удобно, потому мы добавили в правой части каждого окна полупрозрачную кнопку, позволяющую переключиться на следующее окно справа.
Позднее, к этой кнопке добавились еще две кнопки: кнопка закрытия чата и кнопка показа контакт листа.
Но, конечно же, возможность переключать окна по движению пальцами никуда не делась.
![](https://habrastorage.org/r/w1560/storage/42f271eb/7d94e15b/7280285d/fac4810c.png)
В Маемо по умолчанию везде используется ландшафтный режим. Поддержка портретного режима реализована лишь в немногих программах. Например, одной из них является телефон.
Но такой важной в повседневной жизни программе, как Интернет мессенджер, важно иметь поддержку портретного режима, так как не всегда есть возможность держать телефон двумя руками.
При внесении изменений в исходный код Кутима, когда поддерживался только ландшафтный режим, я задумывался о том, как это будет выглядеть в портретном. Поэтому не пришлось заново вносить изменения после включения портретного режима. Разве что в контакт листе пришлось переместить меню. Но с чатом всё не так просто.
Тут возникла проблема с тем, что виртуальная клавиатура в Маемо поддерживает только ландшафтную ориентацию. Пришлось немного повелосипедить и написать qwerty клавиатуру для портретного режима.
![](https://habrastorage.org/r/w1560/storage/9306487c/45ecfa0b/74bd0b77/2e5727c4.png)
И еще хотелось бы сказать про QMenu. В Маемо все элементы меню ориентированы под нажатие пальцем и, соответственно, они очень большого размера по высоте.
Они вот такие (реальный размер):
![](https://habrastorage.org/r/w1560/storage/b3691f75/ed6b8ef6/35c3b8bf/0ba7d019.png)
В кутиме же все меню с большим количеством пунктов и подпунктов. Это вызвало большую проблему, так как изменить в коде QMenu на что либо другое очень сложно. Переделка этого потребует значительных затрат времени.
На данный момент эту проблему я решил так: с помощью QStyleSheets я уменьшил высоту элементов меню до такого чтобы всё влазило. Пользователи, вроде бы, не жалуются.
![](https://habrastorage.org/r/w1560/storage/0821babd/df596c5a/1590220a/428a7e46.png)
Еще несколько месяцев назад на Маемо, кроме встроенного клиента, был пиджин. Он всех не устраивал своей неудобностью, тихим звуком и так далее. Теперь же у всех появилась возможность пользоваться удобным клиентом обмена мгновенными сообщениями и выкинуть пиджин. Тем более последние версии Кутима научились подгружать поддержку протоколов из libpurple.
Что планируется в ближайшее время:
Напоследок видео, показывающее работу интерфейса Кутима на Маемо в действии:
Ну и конечно же вам интересно чем занимаются сами разработчики Кутима? За последний месяц в Кутиме добавилась поддержка протокола Mail.ru и вернулся к жизни протокол quetzal, который реализует подгрузку протоколов из пиджина. Кроме этого они пытаются собрать таки Кутим для Symbian. Сборка осложняется тем, что в symbian sdk нет cmake, и приходится самим писать патчи для cmake, чтобы скомпилировать Кутим. Процесс этот идёт небыстро, так как возникает очень много проблем.
«Но как же» — скажете вы – «ведь я уже видел(а) скриншоты кутима, запущенного на symbian смартфоне. И будете правы.
Но дело в том, что в то время не было сильной зависимости от cmakе, и кутим можно было кое как собрать под symbian и без него. Кроме того, изначально идея со SlidingStackedWidget была опробована именно на symbian версии.
Сейчас же cmake стал выполнять много рутинной работы за разработчиков. Поэтому, пока не доделают cmake под symbian, Кутим там, увы, не появится. Если кто то может и хочет помочь, то милости просим.
Сегодня я хочу вам рассказать о том, что Кутим теперь доступен и для владельцев замечательного мобильного компьютера от нокии.
![](https://habrastorage.org/storage/599d0db4/155a898e/363fc4c2/e9e2585c.jpg)
С какими проблемами я столкнулся при портировании?
Первое с чем я столкнулся в начале работы это система сборки Кутима. В нем используется не обычный для всех проектов .pro файл, а cmake. То есть для того, чтобы начать сборку недостаточно Nokia Qt SDK. Нужно ставить Scratchbox. Ну и, конечно же, после долгого ожидания сборки кутим не запустился. Проблема была в некоторых плагинах, которые на Маемо не работоспособны. Пришлось их убрать.
После запуска и входа в сеть я понял, что нужно изменить очень многое, чтобы можно было использовать кутим в повседневной жизни.
Вот с чем я столкнулся:
1. Не весь интерфейс влезает в небольшой экран N900
В Кутиме, конечно, все довольно минималистично, но содержимое многих окон всё же не влазит на экран. Для того, чтобы появилась возможность двигать виджеты пальцем нужно обернуть их в QScrollArea. Изначально, это было сделано далеко не для всех нужных виджетов.
![](https://habrastorage.org/storage/aab3eb47/88eb8bf7/0ea95919/471d9005.png)
Небольшая ремарка: Здесь и далее все скриншоты уменьшены с 800×480 до 400×240. Это сделано для того, чтобы не занимать много места на экране.
2. Ограничения Qt
В Маемо поддерживаются не все виджеты Qt. Некоторые из официально неподдерживаемых вполне работоспособны и их можно использовать. Но часть из них попросту не работает или выглядит так, что пользоваться этим не представляется возможным.
Для примера, QSound в Маемо не работает. В этом случае очень кстати пришлись плагины кутима, реализующие вывод звука через phonon и sdlsound. Как выяснилось позже, sdlsound в простое кушает много процессорного времени, и от него пришлось отказаться. В качестве виджета, который невозможно использовать, можно привести QFontDialog. Его придётся переделывать.
![](https://habrastorage.org/storage/e97b9fb5/b5694979/33e0db12/f5cdf884.png)
3. Уведомления о новых сообщениях
Привычное для всех нас в обычном компьютере всплывающее окошко с информацией о новом сообщении неприемлемо на Маемо. Тут тоже очень кстати в Кутиме оказался плагин, посылающий уведомления через dbus. Очень кстати потому, что в Маемо все стандартные программы общаются по этой шине. Позднее к этому плагину я прикрутил поддержку вибрации и светодиода.
Как выяснилось, разработчики и не предполагали, что может быть несколько каналов, по которым можно отправлять уведомления о событиях. Поэтому временно пришлось включить всё в один плагин и без возможности настройки.
![](https://habrastorage.org/storage/9f7c5a07/83ebff82/9a9c3309/7da8736a.png)
4. Иконки
У экрана N900 ppi намного больше, чем у обычного монитора, и иконки становятся очень маленькими. В качестве примера, вы можете посмотреть на первую картинку в посте. Значки клиентов в ней — 16×16. Больше попросту не было, так как такие используется везде.
Кроме того, обычно иконки это разного рода кнопки, то есть по ним нужно нажимать пальцами. Для всех кнопок в Маемо минимальный размер иконки 48×48 пикселей. Хорошо, что в Кутиме используются иконки из темы oxygen, так как в ней для всех иконок есть все необходимые размеры, Но, всё же, в некоторых местах возникли проблемы. Например, в контакт листе жестко был запрограммирован размер иконок – 16×16.
Также хочу упомянуть в этом пункте, что впоследствии разработчики перенесли некоторые важные пункты из меню, которое обычно показывается по долгому нажатию на экран (правая клавиша мыши), прямо на элемент, для которого это меню предназначено:
![](https://habrastorage.org/storage/e061c745/97c610ec/8ab36b8f/751afacb.png)
5. Окна
В Кутиме, как и в любой другой программе, большое количество разнообразных окон. А плодить большое количество окон на мобильном устройстве не является хорошим тоном. В Маемо для решения этой проблемы предусмотрена концепция StackedWindow. То есть новое окно смещает старое влево с анимацией. А вместо значка «закрыть» появляется значок «назад», который закрывает текущее окно и открывает предыдущее. Для поддержки такой функции пришлось внести в код многих окон специфичный только для Маемо код.
![](https://habrastorage.org/storage/97f5b4ef/c6e4fa90/0e5f4d5e/3d3a5e28.png)
6. Настройки
Изначально все настройки кутима располагаются в одном окне. Но оно не очень-то влезало в экран N900. Для того, чтобы оценить масштаб бедствий предлагаю ознакомится со следующей картинкой:
![](https://habrastorage.org/storage/07fc2bd8/138f20c1/bde944ad/a2c73d87.png)
Чтобы улучшить ситуацию Gorthauer87 предложил воспользоваться примером SlidingStackedWidget (видео) для Symbian от Nokia. То есть сразу после открытия окна настроек сделать так, чтобы пользователь видел только основные пункты. После выбора одного из них происходит открытие подпунктов. После выбора оного открываются конкретные настройки. Это всё сопровождается красивой анимацией.
![](https://habrastorage.org/storage/9e6f941b/967e591f/0adb8079/48b53169.png)
Позднее эта фишка была прикручена к интерфейсу управления закладками конференций и к чату. Об этом далее.
7. Чат
Самыми важными окнами в любом мессенджере является окно контакт листа и окно чата. Если с первым всё в принципе понятно (нужно только учесть, что в ландшафтном режиме действия нужно располагать по другому), то с чатом всё не так просто.
Как и во всех остальных мессенджерах, в Кутиме несколько чатов располагаются в виде табов. Но на мобильном устройстве маленький экран, и много табов просто не поместится туда.
За примером далеко ходить не надо — в пиджине на Маемо используются табы. Места они занимают много, а попасть по нужному табу при их большом количестве проблематично.
А еще же есть конференции! А это значит, что в стандартном окошке появляется еще и список пользователей в конференции, который занимает чуть ли не пол экрана, при этом пользоваться им почти нереально. Вот так это выглядело в Кутиме изначально:
![](https://habrastorage.org/storage/ff09369f/0196e4f1/3949c43c/3f1fafd2.png)
Что мы придумали?
Сделать три отдельных окна: список открытых чатов, текущий чат, участники конференции. Если в протоколе нет поддержки конференций, то количество окон уменьшается до двух. При этом в окне чата всё должно быть предельно просто: собственно чат, кнопка отправки, кнопка со смайлами, и поле ввода нового сообщения.
Но придумать концепцию мало. Нужно сделать так, чтобы это было красиво и этим было удобно пользоваться.
Для решения первого вопроса было решено воспользоваться концепцией, примененной к окну настроек.
А для решения второй проблемы первоначально решили использовать только движения пальцами. То есть если провел по экрану справа налево – то переключаем на предыдущий экран, если слева на право-то следующий. Конечно, если окон всего два, то можно делать любое движение.
Как оказалось, использовать движения пальцами не всегда удобно, потому мы добавили в правой части каждого окна полупрозрачную кнопку, позволяющую переключиться на следующее окно справа.
Позднее, к этой кнопке добавились еще две кнопки: кнопка закрытия чата и кнопка показа контакт листа.
Но, конечно же, возможность переключать окна по движению пальцами никуда не делась.
![](https://habrastorage.org/storage/42f271eb/7d94e15b/7280285d/fac4810c.png)
8. Портретный режим
В Маемо по умолчанию везде используется ландшафтный режим. Поддержка портретного режима реализована лишь в немногих программах. Например, одной из них является телефон.
Но такой важной в повседневной жизни программе, как Интернет мессенджер, важно иметь поддержку портретного режима, так как не всегда есть возможность держать телефон двумя руками.
При внесении изменений в исходный код Кутима, когда поддерживался только ландшафтный режим, я задумывался о том, как это будет выглядеть в портретном. Поэтому не пришлось заново вносить изменения после включения портретного режима. Разве что в контакт листе пришлось переместить меню. Но с чатом всё не так просто.
Тут возникла проблема с тем, что виртуальная клавиатура в Маемо поддерживает только ландшафтную ориентацию. Пришлось немного повелосипедить и написать qwerty клавиатуру для портретного режима.
![](https://habrastorage.org/storage/5bf803a4/ee0c23fa/e4073d5c/83ce16ca.png)
![](https://habrastorage.org/storage/9306487c/45ecfa0b/74bd0b77/2e5727c4.png)
9. Меню
И еще хотелось бы сказать про QMenu. В Маемо все элементы меню ориентированы под нажатие пальцем и, соответственно, они очень большого размера по высоте.
Они вот такие (реальный размер):
![](https://habrastorage.org/storage/b3691f75/ed6b8ef6/35c3b8bf/0ba7d019.png)
В кутиме же все меню с большим количеством пунктов и подпунктов. Это вызвало большую проблему, так как изменить в коде QMenu на что либо другое очень сложно. Переделка этого потребует значительных затрат времени.
На данный момент эту проблему я решил так: с помощью QStyleSheets я уменьшил высоту элементов меню до такого чтобы всё влазило. Пользователи, вроде бы, не жалуются.
![](https://habrastorage.org/storage/0821babd/df596c5a/1590220a/428a7e46.png)
Вывод
Еще несколько месяцев назад на Маемо, кроме встроенного клиента, был пиджин. Он всех не устраивал своей неудобностью, тихим звуком и так далее. Теперь же у всех появилась возможность пользоваться удобным клиентом обмена мгновенными сообщениями и выкинуть пиджин. Тем более последние версии Кутима научились подгружать поддержку протоколов из libpurple.
Что планируется в ближайшее время:
- Переделка уведомлений. Главным образом для того, чтобы их можно было настраивать
- Написание плагина, реализующего поддержку специфичного трея Маемо.
Напоследок видео, показывающее работу интерфейса Кутима на Маемо в действии:
Ну и конечно же вам интересно чем занимаются сами разработчики Кутима? За последний месяц в Кутиме добавилась поддержка протокола Mail.ru и вернулся к жизни протокол quetzal, который реализует подгрузку протоколов из пиджина. Кроме этого они пытаются собрать таки Кутим для Symbian. Сборка осложняется тем, что в symbian sdk нет cmake, и приходится самим писать патчи для cmake, чтобы скомпилировать Кутим. Процесс этот идёт небыстро, так как возникает очень много проблем.
«Но как же» — скажете вы – «ведь я уже видел(а) скриншоты кутима, запущенного на symbian смартфоне. И будете правы.
Но дело в том, что в то время не было сильной зависимости от cmakе, и кутим можно было кое как собрать под symbian и без него. Кроме того, изначально идея со SlidingStackedWidget была опробована именно на symbian версии.
Сейчас же cmake стал выполнять много рутинной работы за разработчиков. Поэтому, пока не доделают cmake под symbian, Кутим там, увы, не появится. Если кто то может и хочет помочь, то милости просим.