Здравствуйте, я столкнулся с неприятным багом (фичей?) в CAknMarkableListDialog (это диалог-список с галочками). Дело в том что если ни одной галочки не отмечено, то при нажатии ок происходит выделение того пункта на котором стоит курсор, а потом уже выход из диалога. Причем, даже видно перед тем как диалог закрывается, как ставится эта галочка на пункте на котором стоит курсор. Т.е этот диалог в принципе не может вернуть пустой список выбранных элементов. Может кто посоветует как это обойти, или может я что то не верно делаю?
Ресурс диалога
Код вызова диалога и обработки результатаCode:RESOURCE DIALOG r_txt_uid_selection_list { flags = EAknDialogMarkableList | EAknListBoxLoopScrolling; buttons = R_AVKON_SOFTKEYS_OK_CANCEL; items = { DLG_LINE { type = EAknCtSingleListBox; id = ESelectionListControl; control = LISTBOX { flags = EAknListBoxStylusMultiselectionList; // мультиселекшн чтобы отмечать элементы джойстиком а не шифтом }; }, DLG_LINE { itemflags = EEikDlgItemNonFocusing; id = EFindControl; type = EAknCtSelectionListFixedFind; } }; }
Code:CArrayFixFlat<TInt>* DefaultSelectedItemsList=new (ELeave) CArrayFixFlat<TInt>(3); TInt sel=0; ..... CAknMarkableListDialog* dlg=CAknMarkableListDialog::NewL(sel,DefaultSelectedItemsList,itemList,R_AVKON_DIALOG_EMPTY_MENUBAR); dlg->PrepareLC(R_TXT_UID_SELECTION_LIST); dlg->SetTitleL(aData.iName); ((CEikListBox*)dlg->Control(ESelectionListControl))->SetSelectionIndexesL(DefaultSelectedItemsList); ((CAknSingleStyleListBox*)dlg->Control(ESelectionListControl))->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); TInt popupOk=dlg->RunLD(); if (!popupOk) { return aUids; } else { i=0; for (i=0; i<DefaultSelectedItemsList->Count(); i++) { _LOGDATA(_L("In select: %d"),DefaultSelectedItemsList->At(i)); TInt uid=Uids[DefaultSelectedItemsList->At(i)]; TBuf<255> buf; buf.AppendNum((TUint)uid, EHex); result.Append(buf); TChar c(aData.iMinValue); result.Append(c); } }

Reply With Quote

