📄 searchresults.cpp
字号:
*/
void CSearchResults::AddListBoxItemL( CEikTextListBox* aListBox, const TDesC& aString )
{
CTextListBoxModel* model = aListBox->Model();
CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
itemArray->AppendL( aString );
aListBox->HandleItemAdditionL();
}
void CSearchResults::ResetListL()
{
CTextListBoxModel* model = iListBox->Model();
CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
itemArray->Reset();
iListBox->HandleItemRemovalL();
}
/**
* Get the array of selected item indices, with respect to the list model.
* The array is sorted in ascending order.
* The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
* the first with no argument (referring to the internal resource) and the
* second with the array pointer.
* @return newly allocated array, which is left on the cleanup stack;
* or NULL for empty list.
*/
RArray< TInt >* CSearchResults::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
{
CAknFilteredTextListBoxModel* model =
static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
if ( model->NumberOfItems() == 0 )
return NULL;
// get currently selected indices
const CListBoxView::CSelectionIndexArray* selectionIndexes =
aListBox->SelectionIndexes();
TInt selectedIndexesCount = selectionIndexes->Count();
if ( selectedIndexesCount == 0 )
return NULL;
// copy the indices and sort numerically
RArray<TInt>* orderedSelectedIndices =
new (ELeave) RArray< TInt >( selectedIndexesCount );
// push the allocated array
CleanupStack::PushL( orderedSelectedIndices );
// dispose the array resource
CleanupClosePushL( *orderedSelectedIndices );
// see if the search field is enabled
CAknListBoxFilterItems* filter = model->Filter();
if ( filter != NULL )
{
// when filtering enabled, translate indices back to underlying model
for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
{
TInt filteredItem = ( *selectionIndexes ) [ idx ];
TInt actualItem = filter->FilteredItemIndex ( filteredItem );
orderedSelectedIndices->InsertInOrder( actualItem );
}
}
else
{
// the selection indices refer directly to the model
for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
}
return orderedSelectedIndices;
}
/**
* Delete the selected item or items from the list box.
*/
void CSearchResults::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
{
CAknFilteredTextListBoxModel* model =
static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
if ( model->NumberOfItems() == 0 )
return;
RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );
if ( !orderedSelectedIndices )
return;
// Delete selected items from bottom up so indices don't change on us
CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
TInt currentItem = 0;
for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; )
{
currentItem = ( *orderedSelectedIndices )[ idx ];
itemArray->Delete ( currentItem );
}
// dispose the array resources
CleanupStack::PopAndDestroy();
// dispose the array pointer
CleanupStack::PopAndDestroy( orderedSelectedIndices );
// refresh listbox's cursor now that items are deleted
AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
aListBox, currentItem, ETrue );
}
// [[[ begin generated function: do not modify
/**
* Get the listbox.
*/
CAknDoubleStyleListBox* CSearchResults::ListBox()
{
return iListBox;
}
// ]]] end generated function
// [[[ begin generated function: do not modify
/**
* Create a list box item with the given column values.
*/
void CSearchResults::CreateListBoxItemL( TDes& aBuffer, const TDesC& aMainText,
const TDesC& aSecondaryText )
{
_LIT ( KStringHeader, "\t%S\t%S" );
aBuffer.Format( KStringHeader(), &aMainText, &aSecondaryText );
}
// ]]] end generated function
// [[[ begin generated function: do not modify
/**
* Add an item to the list by reading the text items from the array resource
* and setting a single image property (if available) from an index
* in the list box's icon array.
* @param aResourceId id of an ARRAY resource containing the textual
* items in the columns
*
*/
void CSearchResults::AddListBoxResourceArrayItemL( TInt aResourceId )
{
CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
CleanupStack::PushL( array );
// This is intended to be large enough, but if you get
// a USER 11 panic, consider reducing string sizes.
TBuf<512> listString;
CreateListBoxItemL( listString, ( *array ) [ 0 ], ( *array ) [ 1 ] );
AddListBoxItemL( iListBox, listString );
CleanupStack::PopAndDestroy( array );
}
// ]]] end generated function
/**
* Set up the list's icon array. This should be called before
* activating the container.
*/
void CSearchResults::SetupListBoxIconsL()
{
CArrayPtr< CGulIcon >* icons = NULL;
icons = new (ELeave) CAknIconArray( 1 );
CleanupStack::PushL( icons );
CGulIcon* icon;
// for EListBoxYahoo_mbmList_iconIndex
icon = LoadAndScaleIconL(
KYahoo_mbmFile, EMbmYahoo_mbmList_icon, EMbmYahoo_mbmList_icon_mask,
NULL, EAspectRatioPreserved );
CleanupStack::PushL( icon );
icons->AppendL( icon );
CleanupStack::Pop( icon );
CleanupStack::Pop( icons );
if ( icons != NULL )
{
iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
}
}
/**
* Handle commands relating to markable lists.
*/
TBool CSearchResults::HandleMarkableListCommandL( TInt aCommand )
{
return EFalse;
}
// [[[ begin generated function: do not modify
/**
* This routine loads and scales a bitmap or icon.
*
* @param aFileName the MBM or MIF filename
* @param aBitmapId the bitmap id
* @param aMaskId the mask id or -1 for none
* @param aSize the TSize for the icon, or NULL to use real size
* @param aScaleMode one of the EAspectRatio* enums when scaling
*
*/
CGulIcon* CSearchResults::LoadAndScaleIconL( const TDesC& aFileName, TInt aBitmapId, TInt aMaskId, TSize* aSize, TScaleMode aScaleMode )
{
CFbsBitmap *bitmap, *mask;
AknIconUtils::CreateIconL( bitmap, mask, aFileName, aBitmapId, aMaskId );
TSize size;
if ( !aSize )
{
// Use size from the image header. In case of SVG,
// we preserve the image data for a while longer, since ordinarily
// it is disposed at the first GetContentDimensions() or SetSize() call.
AknIconUtils::PreserveIconData( bitmap );
AknIconUtils::GetContentDimensions( bitmap, size );
}
else
size = *aSize;
AknIconUtils::SetSize( bitmap, size, aScaleMode );
AknIconUtils::SetSize( mask, size, aScaleMode );
if ( !aSize )
AknIconUtils::DestroyIconData( bitmap );
return CGulIcon::NewL( bitmap, mask );
}
// ]]] end generated function
/**
* Override of the HandleListBoxEventL virtual function
*/
void CSearchResults::HandleListBoxEventL( CEikListBox *aListBox, TListBoxEvent anEventType )
{
for (int i = 0; i < iListBoxEventDispatch.Count(); i++)
{
const TListBoxEventDispatch& currEntry = iListBoxEventDispatch[i];
if (currEntry.src == aListBox && currEntry.event == anEventType)
{
(this->*currEntry.handler)( aListBox, anEventType );
break;
}
}
}
/**
* Helper function to register MEikListBoxObserver event handlers
*/
void CSearchResults::AddListBoxEventHandlerL( CEikListBox *aListBox, TListBoxEvent anEvent, ListBoxEventHandler aHandler )
{
TListBoxEventDispatch entry;
entry.src = aListBox;
entry.event = anEvent;
entry.handler = aHandler;
iListBoxEventDispatch.AppendL( entry );
}
/**
* Handle the EEventEnterKeyPressed event.
*/
void CSearchResults::HandleListBoxEnterKeyPressedL( CEikListBox* /* aListBox */, TListBoxEvent /* anEventType */ )
{
CSearchResultsView *view = static_cast<CSearchResultsView*>(iCommandObserver);
view->ShowSelectedImageL();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -