⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aknexquerycontainer.cpp

📁 symbian中询问对话框生成的源代码 适合初学者使用。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void CAknExQueryContainer::ShowGlobalMessageQueryL(
								const TTimerUpdateType& aUpdateType )
    {
    iDisplayDialog = ETrue;
    SetTextToLabelL( R_AKNEXQUERY_OPERATE_MESSAGE );

    if ( !iGlobalMsgQuery )
        {
        iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
        }
    delete iGlobalListObserver;
    iGlobalListObserver = NULL;
    iGlobalListObserver = CAknExQueryGlobalListObserver::NewL( this );

    iGlobalListObserver->SetSelectItemFlag();
    iGlobalListObserver->Start();

    HBufC* messageText = HBufC::NewLC( KAknExQueryTextLargeMessageLength );

    // Read message from resouce
    for ( TInt i( R_AKNEXQUERY_MESSAGE_TEXT1 );
                i <= R_AKNEXQUERY_MESSAGE_TEXT3 ; i += 1 )
        {
        TBuf<KAknExQueryTextMaxLength> temp;
        iCoeEnv->ReadResource( temp, i );
        messageText->Des() += temp;
        }

    TBuf<KAknExQueryTextBufLength> headerText;
    iCoeEnv->ReadResource( headerText, R_AKNEXQUERY_HEADING_TEXT );



    iGlobalMsgQuery->ShowMsgQueryL( iGlobalListObserver->iStatus,
                                    *messageText,
                                    R_AVKON_SOFTKEYS_ANSWER_EXIT,
                                    headerText,
                                    KAvkonMbmFilePath,
                                    EMbmAvkonQgn_indi_checkbox_on,
                                    EMbmAvkonQgn_indi_checkbox_on_mask );

    CleanupStack::PopAndDestroy(); //messageText
    iGlobalListObserver->UnsetSelectItemFlag();
    StartTimerL( 3000000, 50000000, aUpdateType );
    iDisplayDialog = EFalse;
    }


// ----------------------------------------------------------------------------
// CAknExQueryContainer::StartTimerL()
//
// ----------------------------------------------------------------------------
void CAknExQueryContainer::StartTimerL( TInt aStart, TInt aInterval,
                              const TTimerUpdateType& aUpdateType )
	{
    DeleteTimer();

    iTimer = CPeriodic::NewL( EPriorityLow );
	iTimerUpdateType = aUpdateType;

	iTimer->Start( aStart, aInterval, TCallBack( TimerCallbackL, this ) );
	}

// ----------------------------------------------------------------------------
// CAknExQueryContainer::TimerCallbackL()
//
// ----------------------------------------------------------------------------
TInt CAknExQueryContainer::TimerCallbackL( TAny* aThis )
	{
    static_cast<CAknExQueryContainer*>( aThis )->ProcessTimerEventL();
	return 0;
	}

// ----------------------------------------------------------------------------
// CAknExQueryContainer::ProcessTimerEventL()
//
// ----------------------------------------------------------------------------
void CAknExQueryContainer::ProcessTimerEventL()
    {
    if ( iGlobalMsgQuery && iTimerUpdateType == EUpdateGlobalQuery )
		{
        iGlobalMsgQuery->UpdateMsgQuery( R_AVKON_SOFTKEYS_EXIT );
        iTimerUpdateType = ECancelGlobalQuery;
        }
    else if ( iGlobalMsgQuery && iTimerUpdateType == ECancelGlobalQuery )
		{
        iTimerUpdateType = ENoUpdate;
		iGlobalMsgQuery->CancelMsgQuery();
        DeleteTimer();
        }
    else if ( iGlobalListQuery && iTimerUpdateType == ECancelListQuery )
        {
    	iGlobalListQuery->CancelListQuery();
        DeleteTimer();
        }
    else if ( iPopupList && iTimerUpdateType == ECancelPopupList )
        {
        iPopupList->CancelPopup();
        DeleteTimer();
        }
    else if ( iGlobalListQuery && iTimerUpdateType == EUpdateGlobalListQueryUp )
		{
        iGlobalListQuery->MoveSelectionUp();
		iTimerUpdateType = EUpdateGlobalListQueryDown;
		DeleteTimer();
		}
    else if ( iGlobalListQuery && iTimerUpdateType == EUpdateGlobalListQueryDown )
		{
        iGlobalListQuery->MoveSelectionDown();
		iTimerUpdateType = EUpdateGlobalListQuerySelect;
		DeleteTimer();
        }
	else if ( iGlobalListQuery && iTimerUpdateType
                        == EUpdateGlobalListQuerySelect )
		{
        iGlobalListQuery->SelectItem();
        iTimerUpdateType = ENoUpdate;
        DeleteTimer();
        }
    else if ( iQueryDialog && iTimerUpdateType == ECancelQueryAnim )
        {
        CAknQueryControl* control = static_cast<CAknQueryControl*>
									( iQueryDialog->ControlOrNull( EGeneralQuery ) );
        control->CancelAnimation();
        DeleteTimer();
        }
    }

// ----------------------------------------------------------------------------
// CAknExQueryContainer::DoSetIconArrayL()
// Set icon to array dynamically.
// ----------------------------------------------------------------------------
void CAknExQueryContainer::DoSetIconArrayL()
    {
    TInt index( 0 );
    CAknListQueryDialog* dialog = new ( ELeave ) CAknListQueryDialog( &index );
    dialog->PrepareLC( R_AKNEXQUERY_MULTI_SELECTION_QUERY );

    CArrayPtr<CGulIcon>* icons = new ( ELeave ) CAknIconArray( 10 );
    CleanupStack::PushL( icons );


    icons->AppendL( iEikonEnv->CreateIconL( KAvkonMbmFilePath,
        EMbmAvkonQgn_indi_marked_add, EMbmAvkonQgn_indi_marked_add_mask ) );
    icons->AppendL( iEikonEnv->CreateIconL( KAvkonMbmFilePath,
        EMbmAvkonQgn_prop_folder_medium,EMbmAvkonQgn_prop_folder_medium_mask ) );

    dialog->SetIconArrayL( icons );
    dialog->RunLD();
    CleanupStack::Pop(); //icons
    }

void CAknExQueryContainer::DeleteTimer()
    {
    delete iTimer;
    iTimer = NULL;
    }
// ----------------------------------------------------------------------------
// CAknExQueryContainer::SetIconL()
// Set Icon dynamically
// ----------------------------------------------------------------------------
void CAknExQueryContainer::SetIconL( CAknQueryDialog* aDlg,
                                    TInt32 aBitmap,
                                    TInt32 aMask )
    {
    CEikImage* image = new ( ELeave ) CEikImage();
    CleanupStack::PushL( image );

    CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL(
        KAknExQueryMbmFilePath, aBitmap );
    CleanupStack::PushL( bitmap );
    CFbsBitmap* mask = iEikonEnv->CreateBitmapL(
        KAknExQueryMbmFilePath, aMask );
    CleanupStack::PushL( mask );

    image->SetBitmap( bitmap );
    image->SetMask( mask );
    CleanupStack::Pop( 2 ); //mask and bitmap

    aDlg->QueryHeading()->SetHeaderImageL( image );
    CleanupStack::PopAndDestroy(); //image
    }

// ----------------------------------------------------------------------------
// CAknExQueryContainer::ShowCodeQueryL()
// Display of Code Query.
// ----------------------------------------------------------------------------
//
void CAknExQueryContainer::ShowCodeQueryL(
     const TInt aLength, TDesC* aDefaultText )
    {
    iDisplayDialog = ETrue;
    SetTextToLabelL( R_AKNEXQUERY_OPERATE_MESSAGE );

    TBuf<KAknExQueryCodeBufLength> textData;

    if ( aDefaultText && aDefaultText->Length() <= KAknExQueryCodeBufLength )
        {
        textData = *aDefaultText;
        }

    CAknTextQueryDialog* dlg =
        new ( ELeave ) CAknTextQueryDialog( textData,
                                           CAknQueryDialog::ENoTone );

	if ( aLength )
		{
		dlg->PrepareLC( R_AKNEXQUERY_CODE_QUERY );
		dlg->SetMaxLength( aLength );
		dlg->RunLD();
		}
	else
		{
		dlg->ExecuteLD( R_AKNEXQUERY_CODE_QUERY );
		}
    iDisplayDialog = EFalse;
    }


// ----------------------------------------------------------------------------
// CAknExQueryContainer::DoCancelPopUp()
// Cancel Popup.
// ----------------------------------------------------------------------------
//
void CAknExQueryContainer::DoCancelPopUp()
    {
    iDisplayDialog = ETrue;
    SetTextToLabelL( R_AKNEXQUERY_OPERATE_MESSAGE );
    CEikTextListBox* list = new ( ELeave ) CEikTextListBox;
    CleanupStack::PushL( list );
    iPopupList = CAknPopupList::NewL( list, R_AVKON_SOFTKEYS_OK_BACK, AknPopupLayouts::EMenuWindow );
    CleanupStack::PushL( iPopupList );
    list->ConstructL( iPopupList,CEikListBox::ELeftDownInViewRect );
    list->CreateScrollBarFrameL( ETrue );
    list->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );

    TBuf<50> buf;
    CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( 1 );
    CleanupStack::PushL( items );
    iCoeEnv->ReadResource( buf, R_AKNEXQUERY_LIST_ITEM4 );
    items->AppendL( buf );
    iCoeEnv->ReadResource( buf, R_AKNEXQUERY_LIST_ITEM5 );
    items->AppendL( buf );
    iCoeEnv->ReadResource( buf, R_AKNEXQUERY_LIST_ITEM6 );
    items->AppendL( buf );

    CTextListBoxModel* model = list->Model();
    model->SetItemTextArray( items );
    model->SetOwnershipType( ELbmOwnsItemArray );


    iCoeEnv->ReadResource( buf, R_AKNEXQUERY_LIST_TITLE2 );
    iPopupList->SetTitleL( buf );

    StartTimerL( 3000000, 10000000, ECancelPopupList );
    TInt answer( iPopupList->ExecuteLD() );
    DeleteTimer();

    if ( answer )
        {
        iCoeEnv->ReadResource( buf, R_AKNEXQUERY_MESSAGE_TEXT10 );
        TInt index = list->CurrentItemIndex();
        TBuf<50> text;
        text.Format( buf, index+1 );
        User::InfoPrint( text );
        }
    else
        {
        iCoeEnv->ReadResource( buf, R_AKNEXQUERY_MESSAGE_TEXT11 );
        User::InfoPrint( buf );
        }

    CleanupStack::Pop( 2 );			//items ( destroyed by listbox ). popupList
    CleanupStack::PopAndDestroy();	// list

    iDisplayDialog = EFalse;
    }

// ----------------------------------------------------------------------------
// CAknExQueryContainer::ShowGlobalListQueryL()
// ----------------------------------------------------------------------------
//
void CAknExQueryContainer::ShowGlobalListQueryL( const TTimerUpdateType& aUpdateType )
    {
    iDisplayDialog = ETrue;
    SetTextToLabelL( R_AKNEXQUERY_OPERATE_MESSAGE );

    CDesCArray* textArray = iCoeEnv->ReadDesCArrayResourceL(
       R_AKNEXQUERY_SUB_POPUP_DATA );

    CleanupStack::PushL( textArray );

    if ( iGlobalListObserver )
        {
        iGlobalListObserver->Cancel();
        delete iGlobalListObserver;
        iGlobalListObserver = NULL;
        }
    iGlobalListObserver = CAknExQueryGlobalListObserver::NewL( this );
    iGlobalListObserver->UnsetSelectItemFlag();

    iGlobalListObserver->Start();

    if ( iGlobalListQuery )
        {
        delete iGlobalListQuery;
        iGlobalListQuery = NULL;
        }
    iGlobalListQuery = CAknGlobalListQuery::NewL();

    iGlobalListObserver->SetSelectItemFlag();
    iGlobalListQuery->ShowListQueryL(
        textArray,
        iGlobalListObserver->iStatus,
        0 );

    if ( aUpdateType != ENoTimer )
        {
        StartTimerL( 5000000, 10000000, aUpdateType );
        }

    CleanupStack::PopAndDestroy(); // textArray
    iDisplayDialog = EFalse;
    }

// ----------------------------------------------------------------------------
// CAknExQueryContainer::DataLayoutFromControlByLayoutOrNull()
//
// ----------------------------------------------------------------------------
//
void CAknExQueryContainer::DataLayoutFromControlByLayoutOrNull()
    {
    iDisplayDialog = ETrue;
    SetTextToLabelL( R_AKNEXQUERY_OPERATE_MESSAGE );

    CAknQueryDialog* dlg = CAknQueryDialog::NewL( CAknQueryDialog::ENoTone );
    dlg->PrepareLC( R_AKNEXQUERY_DATA_QUERY );

	CAknQueryControl* control =
		static_cast<CAknQueryControl*>( dlg->ControlOrNull( EGeneralQuery ) );

	CEikEdwin* edwin =
		static_cast<CEikEdwin*>( control->ControlByLayoutOrNull( EDataLayout ) );

	edwin->SetTextL( &KAknExQueryDefaultDataText );

    dlg->RunLD();
    iDisplayDialog = EFalse;
    }

// ----------------------------------------------------------------------------
// CAknExQueryContainer::StaticSizeDataLayoutFromControlByLayoutOrNull()
// ----------------------------------------------------------------------------
//
void CAknExQueryContainer::StaticSizeDataLayoutFromControlByLayoutOrNull()
    {
    iDisplayDialog = ETrue;
    SetTextToLabelL( R_AKNEXQUERY_OPERATE_MESSAGE );

    TBuf<KAknExQueryTextBufLength> temp;
    CAknTextQueryDialog* dlg = new ( ELeave )
        CAknTextQueryDialog( temp, CAknQueryDialog::ENoTone );

    dlg->PrepareLC( R_AKNEXQUERY_DATA_QUERY_WITH_HEADING );

    CAknQueryControl* control =
        static_cast<CAknQueryControl*>( dlg->ControlOrNull( EGeneralQuery ) );

    CEikEdwin* edwin =
		static_cast<CEikEdwin*>( control->ControlByLayoutOrNull( EStaticSizeDataLayout ) );

    edwin->SetTextL( &KAknExQueryDefaultDataText );

    dlg->RunLD();
    iDisplayDialog = EFalse;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -