Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.
Hierarchical Lists API позволяет представить данные в виде иерархического списка, текста и графики. Это новый компонент пользовательского интерфейса, доступный начиная с S60 5-го издания. В данной статье мы рассмотрим пример работы с этим API.
...
...
#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;
....
};
// -----------------------------------------------------------------------------
// CSingleColumnStyleTreeListAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSingleColumnStyleTreeListAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
CreateHierarchicalSingleColumnStyleListL();
....
....
// Устанавливаем размеры окна
SetRect(aRect);
// Активизируем окно
ActivateL();
}
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 );
}
void CSingleColumnStyleTreeListAppView::HandleTreeListEvent( CAknTreeList& aList, TAknTreeItemID aItem, TEvent aEvent )
{
//Код обработки событий
}
TInt CSingleColumnStyleTreeListAppView::CountComponentControls() const
{
return 1; // возвращаем число компонентов в контейнере
}
CCoeControl* CSingleColumnStyleTreeListAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iSingleColumnStyleTreeList;
default:
return NULL;
}
}
// -----------------------------------------------------------------------------
// CSingleColumnStyleTreeListAppView::~CSingleColumnStyleTreeListAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CSingleColumnStyleTreeListAppView::~CSingleColumnStyleTreeListAppView()
{
....
....
if(iSingleColumnStyleTreeList)
{
delete iSingleColumnStyleTreeList;
iSingleColumnStyleTreeList = NULL;
}
}
void CSingleColumnStyleTreeListAppView::AddSubTitleL()
{
// Adding third subtitle row for the parent data row
_LIT( KNewSubtitleRow, "New Subtitle" );
TAknTreeItemID newSubtitleRow = iSingleColumnStyleTreeList->AddSubtitleRowL( KAknTreeIIDRoot, KNewSubtitleRow, NULL, ETrue );
}
void CSingleColumnStyleTreeListAppView::DeleteSubTitleL()
{
TAknTreeItemID focusedItem = iSingleColumnStyleTreeList->FocusedItem();
if(iSingleColumnStyleTreeList->IsNode(focusedItem))
{
iSingleColumnStyleTreeList->RemoveItem(focusedItem,ETrue);
}
}
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 );
}
}
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);
}
}
При подготовке статьи использованы следующие материалы:
No related wiki articles found