Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.
Hierarchical Lists API позволяет представить данные в виде иерархического списка, текста и графики. Это новый компонент пользовательского интерфейса, доступный начиная с S60 5-го издания. В данной статье мы рассмотрим пример работы с этим API.
...
...
#include <aknsinglestyletreelist.h>
#include <akntreelist.h>
// CLASS DECLARATION
class CHierarchicalListsAppView : public CCoeControl, public MAknTreeListObserver
{
.....
.....
//From MAknTreeListObserver
virtual void HandleTreeListEvent( CAknTreeList& aList, TAknTreeItemID aItem, TEvent aEvent );
//For SingleStyleTreeList
void CreateHierarchicalSingleStyleListL();
void AddNodeL();
void AddLeafL();
void DeleteNodeL();
void DeleteLeafL();
void DeleteTreeL();
//From CCoeControl
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
.....
private:
CAknSingleStyleTreeList* iSingleStyleTreeList;
....
};
// -----------------------------------------------------------------------------
// CHierarchicalListsAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CHierarchicalListsAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
CreateHierarchicalSingleStyleListL();
....
....
// Устанавливаем размеры окна
SetRect(aRect);
// Активизируем окно
ActivateL();
}
void CHierarchicalListsAppView::CreateHierarchicalSingleStyleListL()
{
iSingleStyleTreeList = CAknSingleStyleTreeList::NewL();
iSingleStyleTreeList->SetContainerWindowL(*this);
iSingleStyleTreeList->SetRect(Rect());
iSingleStyleTreeList->MakeVisible(ETrue);
iSingleStyleTreeList->ActivateL();
// Устанавливаем класс CHierarchicalListsAppView в качестве наблюдателя и обработчика событий от SingleStyleTreeList
iSingleStyleTreeList->AddObserverL(this);
// Объявляем константы, используемые при создании пунктов списка
const TInt KPersistent = CAknSingleStyleTreeList::EPersistent;
const TInt KExpanded = CAknSingleStyleTreeList::EExpanded;
// Создаем первый родительский узел на самом верхнем уровне
_LIT( KNodeText1, "Parent folder" );
TAknTreeItemID parentNode1 = iSingleStyleTreeList->AddNodeL( KAknTreeIIDRoot,KNodeText1, KPersistent | KExpanded, ETrue );
// Добавляем иконку
TInt id1 = iSingleStyleTreeList->AddIconL( KAknsIIDQgnIndiBrowserCursorPhone,
AknIconUtils::AvkonIconFileName(),
EMbmAvkonQgn_prop_nrtyp_video,
EMbmAvkonQgn_prop_nrtyp_video_mask,
EAspectRatioPreserved );
// Создаем потомков (листы) и добавляем их в первый родительский узел
_LIT( KLeafText1, "Leaf with Icon!!!" );
TAknTreeItemID leaf1 = iSingleStyleTreeList->AddLeafL( parentNode1, KLeafText1,KPersistent, ETrue );
_LIT( KLeafText2, "Leaf item2" );
TAknTreeItemID leaf2 = iSingleStyleTreeList->AddLeafL( parentNode1, KLeafText2,KPersistent, ETrue );
_LIT( KLeafText3, "Leaf item3" );
TAknTreeItemID leaf3 = iSingleStyleTreeList->AddLeafL( parentNode1, KLeafText3,KPersistent, ETrue );
// Устанавливаем иконку к первому потомку (листу) на первом родительском узле
iSingleStyleTreeList->SetIcon( leaf1, CAknSingleStyleTreeList::ELeaf, id1, EFalse );
// Создаем второй родительский узел, создаем потомков (листы) и добавляем их в созданный узел
_LIT( KNodeText2, "Parent folder" );
TAknTreeItemID parentNode2 = iSingleStyleTreeList->AddNodeL( KAknTreeIIDRoot,KNodeText2, KPersistent | KExpanded, ETrue );
_LIT( KLeafText4, "Leaf item4" );
TAknTreeItemID leaf4 = iSingleStyleTreeList->AddLeafL( parentNode2, KLeafText4,KPersistent, ETrue );
_LIT( KLeafText5, "Leaf item5" );
TAknTreeItemID leaf5 = iSingleStyleTreeList->AddLeafL( parentNode2, KLeafText5,KPersistent, ETrue );
}
void CHierarchicalListsAppView::HandleTreeListEvent( CAknTreeList& aList, TAknTreeItemID aItem, TEvent aEvent )
{
//Код обработки событий
}
TInt CHierarchicalListsAppView::CountComponentControls() const
{
return 1; // возвращаем число компонентов в контейнере
}
CCoeControl* CHierarchicalListsAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iSingleStyleTreeList;
default:
return NULL;
}
}
// -----------------------------------------------------------------------------
// CHierarchicalListsAppView::~CHierarchicalListsAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CHierarchicalListsAppView::~CHierarchicalListsAppView()
{
....
....
if(iSingleStyleTreeList)
{
delete iSingleStyleTreeList;
iSingleStyleTreeList = NULL;
}
}
void CHierarchicalListsAppView::AddNodeL()
{
// Добавляем родительский узел на самом верхнем уровне
_LIT( KNewNodeText, "New Node" );
TAknTreeItemID parentNode1 = iSingleStyleTreeList->AddNodeL( KAknTreeIIDRoot,KNewNodeText, KPersistent | KExpanded, ETrue );
}
void CHierarchicalListsAppView::DeleteNodeL()
{
TAknTreeItemID focusedItem = iSingleStyleTreeList->FocusedItem();
if(iSingleStyleTreeList->IsNode(focusedItem))
{
iSingleStyleTreeList->RemoveItem(focusedItem,ETrue);
}
}
void CHierarchicalListsAppView::AddLeafL()
{
TAknTreeItemID focusedItem = iSingleStyleTreeList->FocusedItem();
if(iSingleStyleTreeList->IsNode(focusedItem))
{
_LIT( KNewLeafText, "New Leaf" );
TAknTreeItemID leaf1 = iSingleStyleTreeList->AddLeafL( focusedItem, KNewLeafText,KPersistent, ETrue );
}
}
void CHierarchicalListsAppView::DeleteLeafL()
{
TAknTreeItemID focusedItem = iSingleStyleTreeList->FocusedItem();
if(iSingleStyleTreeList->IsLeaf(focusedItem))
{
iSingleStyleTreeList->RemoveItem(focusedItem,ETrue);
}
}
void CHierarchicalListsAppView::DeleteTreeL()
{
if(! iSingleStyleTreeList->IsEmpty(KAknTreeIIDRoot))
{
iSingleStyleTreeList->RemoveItem(KAknTreeIIDRoot,ETrue);
}
При подготовке статьи использованы следующие материалы:
No related wiki articles found