📄 ccontcontainer.cpp
字号:
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 + -