Пример работы с ChoiceList API - S60 Touch UI
Метаданные
Пример кода
Исходный файл: Media:ChoiceList.zip
Статья
Автор:
A.A.M.
(28 Jan 2009)
Последнее редактирование: hamishwillee
(23 Nov 2011)
Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.
Contents |
Обзор
ChoiceList API - это новый UI компонент для выбора элементов из вертикального списка. В данной статье мы рассмотрим пример работы с этим API.
ChoiceList API
- ChoiceList API это новый компонен пользовательского интерфейса, доступен начиная с S60 5-го издания
- При создании ChoiceList'a можно указать его тип: "с выделенным по-умолчанию значением" или "без возможности выделения"
- В качестве элементов ChoiceList'a могут использоваться кнопки
- Присутствует возможность заполнения ChoiceList'a элементами массива
- ChoiceList API предоставляет различные функции для манипулирования элементами, расположенными в ChoiceList'е
Реализация компонента ChoiceList
ChoiceListAppView.h
- Унаследуем класс от MCoeControlObserver и реализуем его виртуальную функцию HandleControlEventL() для получения и обработки событий от ChoiceList'a.
- Объявляем объект CAknChoiceList членом класса и используем его для того, чтобы назначить наблюдателя (observer), который будет обрабатывать события от ChoiceList'a.
...
...
#include <aknchoicelist.h>
// CLASS DECLARATION
class CChoiceListAppView : public CCoeControl, public MCoeControlObserver
{
.....
.....
//From MCoeControlObserver
void HandleControlEventL(CCoeControl *aControl,TCoeEvent aEventType);
//Вспомогательные функции приложения
void CreateChoiceListL();
//From CCoeControl
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
.....
private:
CAknChoiceList* iChoiceList;
....
};
ChoiceListAppView.cpp
- Вызываем функцию создания ChoiceList'a в ConstructL()
// -----------------------------------------------------------------------------
// CChoiceListAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CChoiceListAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
CreateChoiceListL();
....
....
// Устанавливаем размеры окна
SetRect(aRect);
// Активизируем окно
ActivateL();
}
- Заполняем список элементами массива
- Устанавливаем класс CChoiceListAppView в качестве наблюдателя и обработчика событий от ChoiceList'a , реализуем функцию HandleControlEventL()
void CChoiceListAppView::CreateChoiceListL()
{
CDesCArray* itemArray = new (ELeave) CDesCArrayFlat(5);
CleanupStack::PushL(itemArray);
itemArray->AppendL(_L("First"));
itemArray->AppendL(_L("Second"));
itemArray->AppendL(_L("Third"));
iChoiceList = CAknChoiceList::NewL(this, itemArray);
CleanupStack::Pop(itemArray);
iChoiceList->SetContainerWindowL(*this);
iChoiceList->SetObserver(this);
iChoiceList->SetRect(TRect ( TPoint(100,200), TSize(120,10) ) );
}
- Реализуем функцию HandleControlEventL для обработки событий от ChoiceList'a
void CChoiceListAppView::HandleControlEventL(CCoeControl *aControl,TCoeEvent aEventType)
{
if(iChoiceList == aControl)
{
switch(aEventType)
{
case EEventStateChanged:
{
TInt index = iChoiceList->SelectedIndex();
_LIT(KMenuItem,"%d is selected");
TBuf<20> buf;
buf.Format(KMenuItem(), index+1);
CAknInformationNote* info = new (ELeave) CAknInformationNote;
info->ExecuteLD(buf);
}
break;
}
}
}
- Возвращаем число компонентов, содержащихся в контейнере, у нас он один - iChoiceList
TInt CChoiceListAppView::CountComponentControls() const
{
return 1; // возвращаем число компонентов в контейнере
}
CCoeControl* CChoiceListAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iChoiceList;
default:
return NULL;
}
}
- Не забудьте удалить iChoiceList в деструкторе класса.
// -----------------------------------------------------------------------------
// CChoiceListAppView::~CChoiceListAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CChoiceListAppView::~CChoiceListAppView()
{
....
....
if(iChoiceList)
{
delete iChoiceList;
iChoiceList = NULL;
}
}
Полезные функции
CAknChoiceList
- SelectedIndex()
- AddItemL()
- RemoveItem()
- HideChoiceList()
- InsertItemL()
MCoeControlObserver
- HandleControlEventL()
Ключевые моменты
Заголовочные файлы
- #include <aknchoicelist.h>
Классы
- CAknChoiceList
- MCoeControlObserver
Libraries
- eikcoctl.lib
Демонстрационное приложение
Связанные ссылки
- Примеры работы с S60 Touch UI
- Пример работы с Toolbar API - S60 Touch UI
- Пример работы с LongTapDetector API - S60 Touch UI
- Пример работы с Stylus Pop-up Menu API - S60 Touch UI
- Пример работы с Tactile Feedback Client API - S60 Touch UI
- Пример работы с Adaptive Search - S60 Touch UI
- Пример работы с Generic Button API - S60 Touch UI
- Пример работы с Hierarchical Lists API (SingleStyleTreeList) - S60 Touch UI
- Пример работы с Hierarchical Lists API (SingleColumnStyleTreeList) - S60 Touch UI
При подготовке статьи использованы следующие материалы:
Источники дополнительной информации
- S60 5th edition SDK help
- S60 5th Edition C++ Developer's Library v1.0



(no comments yet)