ListBox: Part VI
16 Nov 2003 - 21:59
Keywords :

ListBox creation

The following code snippet shows how to create and initialize listbox. Certain parts of initialization are slightly different in case of CEikColumnListBox-derived and CEikFormattedCellListBox-derived listboxes.

ListBox Container Code:

// Creation, initialization
CEikColumnListBox* _listBox = new (ELeave) CEikColumnListBox-derived ListBox;
or
CEikFormattedCellListBox* _listBox = new (ELeave) CEikFormattedCellListBox-derived ListBox;

_listBox->ConstructL(this);        // parent: container, use default flags
_listBox->SetContainerWindowL(*this);
_listBox->CreateScrollBarFrameL(ETrue);
_listBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);    
       
// Setting the icon list
// For CEikColumnListBox-derived ListBox
CArrayPtr* iconList = (method that returns icon list);
_listBox->ItemDrawer()->ColumnData()->SetIconArray(iconList);
or                                  
// For CEikFormattedCellListBox-derived ListBox
_listBox->ItemDrawer()->FormattedCellData()->SetIconArray();
_listBox->ItemDrawer()->FormattedCellData()->SetSubCellAlignmentL(2, CGraphicsContext::ELeft);    
                             
// Setting the item list (in this example listbox takes the ownership of the list)
CDesCArray* listBoxItems = (method that returns listbox items);

// Items could be read also from a resource file (ARRAY structure in .rss file),
// in cases where item list is non-modifiable (and perhaps language-dependent)
// CDesCArrayFlat* listBoxItems = iCoeEnv->ReadDesCArrayResourceL(R_MYAPP_LISTBOX_ITEMS);    

CTextListBoxModel* model = _listBox->Model();
model->SetItemTextArray(listBoxItems);
model->SetOwnershipType(ELbmOwnsItemArray); // transfers ownership

Icons in a ListBox

The icon list is a multi-bitmap file. The icons used in a listbox can have different sizes: typically, you'll have big and small icons in your icon list. Small icon size could be something like 13x13 pixels, while good candidates for a big icon size are 30x40, 36x44, 40x30, 40x48 and 44x36. (All dimensions should be taken just as a guideline.)

The following code shows how to create icons for a listbox, assuming that icons are stored in a multi-bitmap (.mbm) file located in the application's installation directory.

_LIT(KIconsFilename, "\\system\\apps\\<appname>\\<iconfile>.mbm");
// CGulIcon class packages two bitmaps: icon image and its mask
// CAknIconArray inherits from CArrayPtrFlat
CArrayPtr* iconList = new (ELeave) CAknIconArray(10);
CleanupStack::PushL(iconList);

// Icons are referenced by their physical position in .mbm file
iconList->AppendL(iEikonEnv->CreateIconL(KIconsFilename, <icon1 idx>, <icon1mask idx>));
iconList->AppendL(iEikonEnv->CreateIconL(KIconsFilename, <icon2 idx>, <icon2mask idx>));
...
CleanupStack::Pop();
// assign icon list to a listbox...

How to add an item

The following code shows how to add an item to the listbox.

CTextListBoxModel* model = _listBox->Model();
MDesCArray* textArray = model->ItemTextArray();
CDesCArray* listBoxItems = static_cast<CDesCArray*>(textArray);

// The actual item text format depends on the listbox type, see tables with listbox types
_LIT(KItemName,"MyNewItem");
TBuf<32> item;
item.Format(_L("%d\t%S\t%d\t%d"), 0, &KItemName, 1, 2); // 0, 1, 2 = icon indexes in iconlist
listBoxItems->AppendL(item);

_listBox->HandleItemAdditionL(); // Update listbox
_listBox->SetCurrentItemIndexAndDraw(listBoxItems->Count() - 1); // select new item

How to remove an item

The following code shows how to remove an item from the listbox.

CTextListBoxModel* model = _listBox->Model();
TInt currentItem = _listBox->CurrentItemIndex();

MDesCArray* textArray = model->ItemTextArray();
CDesCArray* listBoxItems = static_cast<CDesCArray*>(textArray);
listBoxItems->Delete(currentItem, 1); // 1 = how many items to delete
AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(_listBox, currentItem, ETrue);
_listBox->DrawNow(); // Update listbox


:<: Part IV
Part VII :>:

Tutorial posted November 16th, 2003 by klisa1

Submitted by pramoda on Wed, 2004-03-24 11:00.

Can anybody tell me what are the header files invloved in this tutorial??

Tanx


Submitted by Felix (not verified) on Mon, 2004-03-29 12:40.

For Avkon listboxes you will need "aknlists.h".

Submitted by giridhar.N (not verified) on Sat, 2004-09-25 09:07.

#include akniconarray.h // CAknIcon #include aknlists.h //CAknSingleStyleListBox #include aknutils.h #include barsread.h // TResource Reader #include eikclbd.h // CColumnListBoxData #include eikmenub.h // CEikMenuBar #include eiktxlbm.h #include eiklbx.h #include eiklbm.h #include eiktxlbx.h

#include <stringloader.h> // StringLoader #include <uikon.hrh> // TKeyCode #defines #include <eiklabel.h> // for example label control #include<badesca.h>


Submitted by stolik (not verified) on Fri, 2006-07-07 13:52.

>> item.Format(_L("%d\t%S\t%d\t%d"), 0, &KItemName, 1, 2); // 0, 1, 2 = icon indexes in iconlist

and if for some item i don't want any icon? what should be the symbol then? just a space or "-" don't work...


Submitted by Timothy Tripp (not verified) on Tue, 2006-08-15 08:38.

If you want the main item icon to be empty, you'll need to create an icon with no foreground to it and just use its index. If you want the trailing icons to be blank, just exclude them from the item text, such as:

item.Format(_L("%d\t%S"), 0, &KItemName); // 0 = icon index in iconlist

Cheers,

TT


Submitted by stevexu on Fri, 2007-07-27 10:35.

hi every body
i write a simple code into the multiviews example, i add a method to view's container. the code is follow
void CMultiViewsContainer1::DisplayListBox()
{
m_listBox = new (ELeave) CAknSingleStyleListBox();
m_listBox->SetListBoxObserver(this);
m_listBox->SetContainerWindowL(*this);

m_listBox->ConstructL(this, 0);
m_listBox->CreateScrollBarFrameL(ETrue);
m_listBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);

CTextListBoxModel* model = m_listBox->Model();
MDesCArray* textArray = model->ItemTextArray();
CDesCArray* listBoxItems = static_cast(textArray);
model->SetItemTextArray(listBoxItems);
model->SetOwnershipType(ELbmOwnsItemArray);

TBuf<32> item;
_LIT(KIT1, "item 1");
_LIT(KIT2, "item 2");

item.Format(_L("\t%S\t\t"), &KIT1);
listBoxItems->AppendL(item);
return;
item.Format(_L("%S"), &KIT2);

listBoxItems->AppendL(item);

m_listBox->HandleItemAdditionL();
m_listBox->SetCurrentItemIndexAndDraw(listBoxItems->Count() - 1);
m_listBox->ActivateL();

DrawNow();
}
when i execute it in epoc, i got a error of cbase21, if i do not execute appendl of CDesCArray, it run ok , who can tell me why?
thanks
steve


Submitted by satishkhatri on Thu, 2009-08-13 10:13.

Hi,

I am using the given Example . it gives the following error:-

Creation Time Description Resource Path Location Type
1250153429265 illegal use of incomplete struct/union/class 'CTextListBoxModel' SListBoxExampleAppView.cpp SListBoxExample/src line 81 C/C++ Problem



copyright 2003-2009 NewLC SARL