Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

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

From 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 01:16.
251 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×