×
Namespaces

Variants
Actions

Пример работы с Hierarchical Lists API (SingleColumnStyleTreeList) - S60 Touch UI

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Пример кода
Исходный файл: Media:SingleColumnStyleTreeList.zip

Совместимость
Платформа(ы):
S60 5th Edition

Статья
Автор: A.A.M. (28 Jan 2009)
Последнее редактирование: hamishwillee (20 Oct 2011)
Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.

Contents

Обзор

Hierarchical Lists API позволяет представить данные в виде иерархического списка, текста и графики. Это новый компонент пользовательского интерфейса, доступный начиная с S60 5-го издания. В данной статье мы рассмотрим пример работы с этим API.

Hierarchical Lists API

  • Иерархические списки используются для представления структур данных в виде дерева списка
  • Для обработки событий от иерархического списка необходимо реализовать интерфейс класса MAknTreeListObserver

Single Column Style Tree List

Реализация иерархического списка SingleColumnStyleTreeList

SingleColumnStyleTreeListAppView.h

  • Унаследуем класс от MAknTreeListObserver и реализуем его виртуальную функцию HandleTreeListEvent для получения и обработки событий от SingleColumnStyleTreeList.
  • Объявляем объект CAknSingleColumnStyleTreeList членом класса и используем его для того, чтобы назначить наблюдателя (observer), который будет обрабатывать события.
...
...
#include <aknSingleColumnStyleTreeList.h>
#include <akntreelist.h>
 
// CLASS DECLARATION
class CSingleColumnStyleTreeListAppView : public CCoeControl, public MAknTreeListObserver
{
.....
.....
//From MAknTreeListObserver
virtual void HandleTreeListEvent( CAknTreeList& aList, TAknTreeItemID aItem, TEvent aEvent );
 
//For SingleColumnStyleTreeList
void CreateHierarchicalSingleColumnStyleListL();
void AddSubTitleL();
void AddCoreDataRowL();
void DeleteSubTitleL();
void DeleteCoreDataRowL();
void DeleteTreeL();
 
//From CCoeControl
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
.....
private:
CAknSingleColumnStyleTreeList* iSingleColumnStyleTreeList;
....
};

SingleColumnStyleTreeListAppView.cpp

  • Вызываем функцию создания Single Column Style Tree List в ConstructL()
// -----------------------------------------------------------------------------
// CSingleColumnStyleTreeListAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSingleColumnStyleTreeListAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
 
CreateHierarchicalSingleColumnStyleListL();
....
....
 
// Устанавливаем размеры окна
SetRect(aRect);
 
// Активизируем окно
ActivateL();
}
  • Создаем Single Column Style Tree List и заполняем его данными.
  • Устанавливаем класс CSingleColumnStyleTreeListAppView в качестве наблюдателя и обработчика событий от SingleStyleTreeList, реализуем функцию HandleTreeListEvent()
void CSingleColumnStyleTreeListAppView::CreateHierarchicalSingleColumnStyleListL()
{
iSingleColumnStyleTreeList = CAknSingleColumnStyleTreeList::NewL();
iSingleColumnStyleTreeList->SetContainerWindowL(*this);
iSingleColumnStyleTreeList->SetRect(Rect());
iSingleColumnStyleTreeList->MakeVisible(ETrue);
iSingleColumnStyleTreeList->ActivateL();
 
// Устанавливаем класс CHierarchicalListsAppView в качестве наблюдателя и обработчика событий от SingleColumnStyleTreeList
iSingleColumnStyleTreeList->AddObserverL(this);
 
// Добавляем простую строку данных (simple data row) на самом верхнем уровне (корневом уровне дерева)
_LIT( KDataRowText, "Simple Data" );
TAknTreeItemID simpleDataRow = iSingleColumnStyleTreeList->AddSimpleDataRowL( KAknTreeIIDRoot, KDataRowText, KColumnStylePersistent, ETrue );
 
// Добавляем первую subtitle row на самом верхнем уровне (корневом уровне дерева)
_LIT( KSubtitleRowTextA, "First Subtitle" );
TAknTreeItemID subtitleRowA = iSingleColumnStyleTreeList->AddSubtitleRowL( KAknTreeIIDRoot, KSubtitleRowTextA, NULL, ETrue );
 
// Добавляем основную строку данных (сore data row) как потомка subtitleRowA
_LIT( KColumnText1, "Column1a" );
_LIT( KColumnText2, "Column2a" );
TAknTreeItemID coreDataRowA = iSingleColumnStyleTreeList->AddCoreDataRowL(subtitleRowA, KColumnText1, KColumnText2, KColumnStylePersistent, ETrue );
 
// Добавляем вторую subtitle row на самом верхнем уровне (корневом уровне дерева)
_LIT( KSubtitleRowTextB, "Second Subtitle" );
TAknTreeItemID subtitleRowB = iSingleColumnStyleTreeList->AddSubtitleRowL( KAknTreeIIDRoot, KSubtitleRowTextB, NULL, ETrue );
 
// Добавляем основную строку данных (сore data row) как потомка subtitleRowB
_LIT( KColumnText3, "Column3b" );
_LIT( KColumnText4, "Column4b" );
TAknTreeItemID coreDataRowB = iSingleColumnStyleTreeList->AddCoreDataRowL( subtitleRowB, KColumnText3, KColumnText4, KColumnStylePersistent, ETrue );
 
// Добавляем третью subtitle row на самом верхнем уровне (корневом уровне дерева)
_LIT( KSubtitleRowTextC, "Third Subtitle" );
TAknTreeItemID subtitleRowC = iSingleColumnStyleTreeList->AddSubtitleRowL( KAknTreeIIDRoot, KSubtitleRowTextC, NULL, ETrue );
 
// Добавляем основную строку данных (сore data row) как потомка subtitleRowC
_LIT( KColumnText5, "Column5c" );
_LIT( KColumnText6, "Column6c" );
TAknTreeItemID coreDataRowC = iSingleColumnStyleTreeList->AddCoreDataRowL( subtitleRowC, KColumnText5, KColumnText6, KColumnStylePersistent, ETrue );
}
  • Для обработки событий от Single Column Style Tree List'a необходимо реализовать функцию HandleTreeListEvent
void CSingleColumnStyleTreeListAppView::HandleTreeListEvent( CAknTreeList& aList, TAknTreeItemID aItem, TEvent aEvent )
{
//Код обработки событий
}
  • Возвращаем число компонентов, содержащихся в контейнере, у нас он один - iSingleColumnStyleTreeList
TInt CSingleColumnStyleTreeListAppView::CountComponentControls() const
{
return 1; // возвращаем число компонентов в контейнере
}
 
CCoeControl* CSingleColumnStyleTreeListAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iSingleColumnStyleTreeList;
default:
return NULL;
}
}
  • Не забудьте удалить iSingleColumnStyleTreeList в деструкторе класса.
// -----------------------------------------------------------------------------
// CSingleColumnStyleTreeListAppView::~CSingleColumnStyleTreeListAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CSingleColumnStyleTreeListAppView::~CSingleColumnStyleTreeListAppView()
{
....
....
if(iSingleColumnStyleTreeList)
{
delete iSingleColumnStyleTreeList;
iSingleColumnStyleTreeList = NULL;
}
}

Как добавить Subtitle row в список

void CSingleColumnStyleTreeListAppView::AddSubTitleL()
{
// Adding third subtitle row for the parent data row
_LIT( KNewSubtitleRow, "New Subtitle" );
TAknTreeItemID newSubtitleRow = iSingleColumnStyleTreeList->AddSubtitleRowL( KAknTreeIIDRoot, KNewSubtitleRow, NULL, ETrue );
}

Как удалить Subtitle row, находящуюся в фокусе, из списка

void CSingleColumnStyleTreeListAppView::DeleteSubTitleL()
{
TAknTreeItemID focusedItem = iSingleColumnStyleTreeList->FocusedItem();
if(iSingleColumnStyleTreeList->IsNode(focusedItem))
{
iSingleColumnStyleTreeList->RemoveItem(focusedItem,ETrue);
}
}

Как добавить сore data row в узел, находящийся в фокусе

void CSingleColumnStyleTreeListAppView::AddCoreDataRowL()
{
TAknTreeItemID focusedItem = iSingleColumnStyleTreeList->FocusedItem();
if(iSingleColumnStyleTreeList->IsNode(focusedItem))
{
// Add row values for third subtitle row
_LIT( KNewColumnText1, "NewColumn1" );
_LIT( KNewColumnText2, "NewColumn2" );
TAknTreeItemID newCoreDataRow = iSingleColumnStyleTreeList->AddCoreDataRowL( focusedItem, KNewColumnText1, KNewColumnText2, KColumnStylePersistent, ETrue );
}
}

Как добавить сore data row из узела, находящегося в фокусе

void CSingleColumnStyleTreeListAppView::DeleteCoreDataRowL()
{
TAknTreeItemID focusedItem = iSingleColumnStyleTreeList->FocusedItem();
if(iSingleColumnStyleTreeList->IsLeaf(focusedItem))
{
iSingleColumnStyleTreeList->RemoveItem(focusedItem,ETrue);
}
}

Как целиком удалить дерево списка

void CSingleColumnStyleTreeListAppView::DeleteTreeL()
{
if(! iSingleColumnStyleTreeList->IsEmpty(KAknTreeIIDRoot))
{
iSingleColumnStyleTreeList->RemoveItem(KAknTreeIIDRoot,ETrue);
}
}

Полезные функции

CAknSingleColumnStyleTreeList

  • AddSubtitleRowL()
  • AddCoreDataRowL()
  • EnableThirdColumn()
  • IsThirdColumnEnabled()
  • SetTextL()
  • SetIcon()

CAknTreeList

  • RemoveItem()
  • ExpandNode()
  • CollapseNode()
  • FocusedItem()
  • AddIconL()

MAknTreeListObserver

  • HandleTreeListEvent()

Ключевые моменты

Заголовочные файлы

  • #include <aknSingleColumnStyleTreeList.h>
  • #include <akntreelist.h>

Классы

  • CAknSingleColumnStyleTreeList
  • CAknTreeList
  • MAknTreeListObserver

Библиотеки

  • aknhlist.lib

Демонстрационное приложение

Связанные ссылки



При подготовке статьи использованы следующие материалы:

Источники дополнительной информации

This page was last modified on 20 October 2011, at 04:16.
64 page views in the last 30 days.
×