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

📄 ccontcontainer.cpp

📁 实现好友名单。可以今天添加、删除以及增加等操作
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        UpdateContactDbName( noContactFile );
        }

    // Try remove db
    if ( iCoeEnv->FsSession ().IsValidName( contactFile->Des() ) )
        {
        TInt errCode( iCoeEnv->FsSession().Delete( contactFile->Des() ) );
        if ( errCode != KErrNone )
            {
            HBufC* text = StringLoader::LoadLC( R_CONTACTS_CANNOT_DELETE_DB );
            CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
            informationNote->ExecuteLD( *text );
            CleanupStack::PopAndDestroy( text );
            }
        }

    CleanupStack::PopAndDestroy( contactFile );

    // Update iContactArray and iContactGroupArray
    ReadContactsFromDbL();
    UpdateListBoxL();
    }

// ---------------------------------------------------------
// CContContainer::OpenContactDatabaseL()
// ---------------------------------------------------------
//
void CContContainer::OpenContactDatabaseL( TDesC& aDbName )
    {
    //get connection to phonebook database
    HBufC* contactFile = HBufC::NewLC( KMaxDatabasePathAndNameLength );
    TPtr ptr( contactFile->Des() );
    // Resolve path for contact database file
    GetContactDbName( aDbName, ptr );

    if ( iContactDb )
        {
        if( !iDbName.Compare( contactFile->Des() ) )
            {
            CleanupStack::PopAndDestroy( contactFile );
            return;
            }
        iContactDb->CloseTables();
        delete iContactDb;
        iContactDb = NULL;
        }

    TRAPD(err, iContactDb = CContactDatabase::OpenL( contactFile->Des() ););
    // Check if database already exist
    if ( err == KErrNotFound )
        {
        HBufC* text = StringLoader::LoadLC( R_CONTACTS_DB_NOT_FOUND );
        CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
        informationNote->ExecuteLD( *text );
        CleanupStack::PopAndDestroy( text );

        iContactDb = NULL;
        // Update iContactArray and iContactGroupArray
        ReadContactsFromDbL();
        TBuf<15> noContactFile( KNullDesC );
        UpdateContactDbName( noContactFile );
        UpdateListBoxL();
        }
    else
        {
        // Update iContactArray and iContactGroupArray
        ReadContactsFromDbL();
        UpdateContactDbName( *contactFile );
        UpdateListBoxL();
        }
    CleanupStack::PopAndDestroy( contactFile );
    }

// ----------------------------------------------------------------------------
// CContContainer::OpenDefaultDatabaseL()
// Open default contact database.
// Database is same as what Phonebook uses.
// ----------------------------------------------------------------------------
//
void CContContainer::OpenDefaultDatabaseL()
    {
    // Read name of the default database
    _LIT( KOrgContactFile,"" );
    TBuf<KMaxDatabasePathAndNameLength> orgContactFile( KOrgContactFile );
    CContactDatabase::GetDefaultNameL( orgContactFile );
    orgContactFile.LowerCase();

    if ( iContactDb )
        {
        if ( !iDbName.Compare( orgContactFile ) )
            {
            return;
            }
        iContactDb->CloseTables();
        delete iContactDb;
        iContactDb = NULL;
        }

    TRAPD(err, iContactDb = CContactDatabase::OpenL( orgContactFile ););
    // Check if database already exist
    if ( err == KErrNotFound )
        {

        HBufC* text = StringLoader::LoadLC( R_CONTACTS_DB_NOT_FOUND );
        CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
        informationNote->ExecuteLD( *text );
        CleanupStack::PopAndDestroy( text );
        iContactDb = NULL;
        ReadContactsFromDbL();// Update iContactArray and iContactGroupArray

        TBuf<15> noContactFile( KNullDesC );
        UpdateContactDbName( noContactFile );

        UpdateListBoxL();
        }
    else
        {
        // Update iContactArray and iContactGroupArray
        ReadContactsFromDbL();
        UpdateContactDbName( orgContactFile );
        UpdateListBoxL();
        }
    }

// ----------------------------------------------------------------------------
// CContContainer::CreateContactDatabaseQueryL()
// Handle create contact database event from appui.
// ----------------------------------------------------------------------------
//
void CContContainer::CreateContactDatabaseQueryL()
    {
    TBuf<KMaxDatabaseNameLength> textData( KCDbName );
    CreateContactDatabaseL( textData );
    }

// ----------------------------------------------------------------------------
// CContContainer::DeleteContactDatabaseQueryL()
// Handle delete contact database event from appui.
// ----------------------------------------------------------------------------
//
void CContContainer::DeleteContactDatabaseQueryL()
    {

    TBuf<KMaxDatabaseNameLength> textData( KCDbName );
    HBufC* contactFile = HBufC::NewLC( KMaxDatabasePathAndNameLength );
    TPtr ptr( contactFile->Des() );

    // Resolve path for contact database file
    GetContactDbName( textData, ptr );

    // Check if created database opened
    if ( !IfContactDbSelected()  ||
	   ( IfContactDbSelected() && iDbName.Compare( contactFile->Des() ) ) )
	    {
	    HBufC* textResource = StringLoader::LoadLC( R_CONTACTS_OPEN_CREATED_DB );
        CAknInformationNote* informationNote = new( ELeave ) CAknInformationNote;
        informationNote->ExecuteLD( textResource->Des() );
        CleanupStack::PopAndDestroy( textResource );
	    CleanupStack::PopAndDestroy( contactFile );
	    return;
	    }

    CleanupStack::PopAndDestroy( contactFile );

    // If user does not want delete contact
    if ( !ShowDeleteConfirmationQueryL( R_CONTACTS_DELETE_DB_QUERY_MESSAGE ) )
        {
        UpdateListBoxL();
        return;
        }
    textData = KCDbName;
    DeleteContactDatabaseL( textData );
    }

// ----------------------------------------------------------------------------
// CContContainer::OpenDataBaseQueryL()
// Display of Data Query.
// ----------------------------------------------------------------------------
//
void CContContainer::OpenDataBaseQueryL()
    {
    TBuf<KMaxDatabaseNameLength> textData( KCDbName );
    OpenContactDatabaseL( textData );
    }

// ----------------------------------------------------------------------------
// CContContainer::ShowDeleteConfirmationQueryL()
// The display of Delete Confirmation.
// ----------------------------------------------------------------------------
//
TBool CContContainer::ShowDeleteConfirmationQueryL( const TInt aTextResourceId )
    {
    HBufC* prompt = StringLoader::LoadLC( aTextResourceId );

    CAknQueryDialog* dlg = CAknQueryDialog::NewL();

    dlg->SetPromptL( *prompt );
    TInt retCode( dlg->ExecuteLD( R_CONTACTS_CONFIRMATION_QUERY ) );

    CleanupStack::PopAndDestroy(); //prompt
    return retCode;
    }

// ----------------------------------------------------------------------------
// CContContainer::OpenTextBoxQueryL()
// Display of Data Query.
// ----------------------------------------------------------------------------
//
TBool CContContainer::OpenTextBoxQueryL(const TInt aTextResourceId,
                                               TPtr aTextData,
											   TInt aTextLength)
    {
    HBufC* prompt = StringLoader::LoadLC( aTextResourceId );
    // aTextData is smaller than 40 so this does not crash
    TBuf<KMaxTextBoxQueryLength> text = aTextData;

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

    CleanupStack::PushL( dlg );
    dlg->SetPromptL( *prompt );
    dlg->SetMaxLength( aTextLength );

    TBool answer( dlg->ExecuteLD( R_CONTACTS_TEXTBOX_QUERY ) );
    CleanupStack::Pop( dlg );
    CleanupStack::PopAndDestroy( prompt );
    aTextData = text;
    return answer;
    }

// ----------------------------------------------------
// CContContainer::EditContactDlgL()
// Opens CPbkContactEditorDlg for contact.
// ----------------------------------------------------
//
void CContContainer::EditContactDlgL()
    {
    if ( !IfContactDbSelected() )
        {
        ShowInformationNoteNoDbL();
        return;
        }

    // Check if contacts list on the list box
    if ( !IsContactsOnListBox() )
        {
        return;
        }

    // The caller does not take ownership of this object.
    // so do not push it onto the CleanupStack.
    const CContactIdArray* contacts = iContactDb->SortedItemsL();

    TInt currentItemIndex( iListBox->CurrentItemIndex() );
    TInt count( iContactArray->Count() );
    if ( currentItemIndex < 0 || currentItemIndex >= count )
        {
        HBufC* textResource = StringLoader::LoadLC( R_CONTACTS_NO_CONTACT_SELECTED );
        CAknInformationNote* informationNote = new( ELeave ) CAknInformationNote;
        informationNote->ExecuteLD( textResource->Des() );
        CleanupStack::PopAndDestroy( textResource );
	    return;
        }

    TContactItemId itemId( ((*contacts)[currentItemIndex]) );

    CPbkContactEngine* pbkContactEng =
                    CPbkContactEngine::NewL(iDbName,
                                            EFalse,
                                            &iCoeEnv->FsSession());
    CleanupStack::PushL( pbkContactEng );
    // load the contacts dialog resources
    CCoeEnv *env = CEikonEnv::Static();
    RPbkViewResourceFile pbkRes( *env );
    pbkRes.OpenL();

    CPbkContactItem* aContactItem = pbkContactEng->OpenContactL( itemId );
    CleanupStack::PushL( aContactItem );

    // Open the contacts dialog
    // third parameter: set to true if aContactItem is a
    // new contact (not yet in the database)
    // fourth parameter index of field to focus initially
    // fifth paramter if true sets the contact initially as "edited".
    CPbkContactEditorDlg* pbkContactDlg =
                    CPbkContactEditorDlg::NewL( *pbkContactEng,
                                                *aContactItem,
                                                EFalse, -1,
                                                EFalse );

    CleanupStack::PushL( pbkContactDlg );
    pbkContactDlg->SetMopParent( iAvkonAppUi );

    TInt res( KErrNone );
    TRAPD( err, res = pbkContactDlg->ExecuteLD() );

    pbkRes.Close();
    pbkContactEng->CloseContactL( aContactItem->Id() );

    CleanupStack::Pop( pbkContactDlg );
    CleanupStack::PopAndDestroy( 2 ); //aContactItem, pbkContactEng

    // Update iContactArray and iContactGroupArray
    ReadContactsFromDbL();
    UpdateListBoxL();
    }

// ----------------------------------------------------
// CContContainer::GetSelectedContactL()
// Set selected contact's item id to
// variable and changes listbox data to contact groups.
// ----------------------------------------------------
//
void CContContainer::GetSelectedContactL()
    {
    if ( !IfContactDbSelected() )
        {
        ShowInformationNoteNoDbL();
        return;
        }

    if ( !IsContactsOnListBox() )
        {
	    return;
        }

    iContactDb->SetDbViewContactType( KUidContactCard );
    // The caller does not take ownership of this object.
    // so do not push it onto the CleanupStack
    const CContactIdArray* contacts = iContactDb->SortedItemsL();

    TInt currentItemIndex( iListBox->CurrentItemIndex() );
    TInt count( iContactArray->Count() );
    if ( currentItemIndex < 0 || currentItemIndex >= count )
        {
	    return;
        }

    iSelectedItemId = ((*contacts)[currentItemIndex]);

    ShowContactGroupsL();
    }

// ----------------------------------------------------
// CContContainer::AddContactToGrp()
// Add selected contact to contact group.
// ----------------------------------------------------

void CContContainer::AddContactToGrpL()
    {
    if ( !IfContactDbSelected() )
        {
        ShowInformationNoteNoDbL();
        return;
        }

    if ( iSelectedItemId == -1 )
	    {
	    return;
	    }

    TInt currentItemIndex( iListBox->CurrentItemIndex() );
    TInt count( iContactGroupArray->Count() );
    if ( currentItemIndex < 0 || currentItemIndex >= count )
        {
        return;
        }

    // The caller takes ownership of the returned object.
    // groupIdList is NULL if there are no groups in the database.
    CContactIdArray* groupIdList = iContactDb->GetGroupIdListL();
    if ( !groupIdList )
        {
	    return;
        }

    CleanupStack::PushL( groupIdList );

    TContactItemId groupItemId = ((*groupIdList)[currentItemIndex]);
    iContactDb->AddContactToGroupL( iSelectedItemId , groupItemId );

    iSelectedItemId = -1;

    CleanupStack::PopAndDestroy( groupIdList );
    }
// ----------------------------------------------------
// CContContainer::AddNewContactDlg()
// Open CPbkContactEditorDlg dialog
// for new contact item.
// ----------------------------------------------------
//
void CContContainer::AddNewContactDlgL()
    {

    if ( !IfContactDbSelected() )
        {
        ShowInformationNoteNoDbL();
        return;
        }

    if ( !IsContactsOnListBox() )
        {
        return;
        }

    //Creates a new Phonebook engine object and connect
    //to the contact database. If the database
    //does not exist it is created.
    CPbkContactEngine* pbkContactEng =
                    CPbkContactEngine::NewL( iDbName,
                                             EFalse,
                                             &iCoeEnv->FsSession() );
    // Put object to the stack
    CleanupStack::PushL( pbkContactEng );

    // load the contacts dialog resources
    CCoeEnv *env = CEikonEnv::Static();
    RPbkViewResourceFile pbkRes( *env );
    pbkRes.OpenL();

    //create a new empty contact
    // The caller takes ownership of this object.
    // so push it onto the CleanupStack
    CPbkContactItem* aContactItem = pbkContactEng->CreateEmptyContactL();
    CleanupStack::PushL( aContactItem );

    // launch the contact dialog
    CPbkContactEditorDlg* pbkContactDlg =
                CPbkContactEditorDlg::NewL( *pbkContactEng,
                                            *aContactItem,
                                            ETrue, -1,
                                            ETrue );

    CleanupStack::PushL( pbkContactDlg );

    pbkContactDlg->SetMopParent( iAvkonAppUi );

    TInt res( KErrNone );

    // Show contact dialog
    TRAPD( err, res = pbkContactDlg->ExecuteLD() );

    pbkRes.Close();

    CleanupStack::Pop( pbkContactDlg );
    CleanupStack::PopAndDestroy( 2 ); //aContactItem, pbkContactEng

    // Update internal database connection
    iContactDb->CloseTables();
    delete iContactDb;
    iContactDb = CContactDatabase::OpenL( iDbName );

    // Update iContactArray and iContactGroupArray
    ReadContactsFromDbL();
    // Update display
    UpdateListBoxL();
    }

// ----------------------------------------------------
// CContContainer::DeleteContactDlg()
// Delete contact from contact database.
// ----------------------------------------------------
//
void CContContainer::DeleteContactDlgL()
    {

    if ( !IfContactDbSelected() )
        {
        ShowInformationNoteNoDbL();
        return;
        }

⌨️ 快捷键说明

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