00001 /* 00002 * Copyright © 2008 Nokia Corporation. 00003 */ 00004 00005 // INCLUDE FILES 00006 #include "ContactsModelAppUi.h" 00007 #include "ContactsModelContainer.h" 00008 #include "ContactsModelDocument.h" 00009 #include <ContactsModel.rsg> 00010 #include "ContactsModel.hrh" 00011 00012 #include <AknCommonDialogs.h> 00013 #include <CAknFileSelectionDialog.h> 00014 #include <CAknFileNamePromptDialog.h> 00015 #include <aknnotewrappers.h> 00016 #include <eikmenup.h> 00017 #include <f32file.h> 00018 #include <s32file.h> 00019 #include <avkon.hrh> 00020 #include <maknfileselectionobserver.h> 00021 00022 _LIT(KDefaultFileName, "vcard"); 00023 _LIT(KFailedToOpen, "Failed to open file for import"); 00024 _LIT(KFailedToImport, "Failed to import"); 00025 _LIT(KFailedToCreateFile, "Failed to create file for export"); 00026 00027 const TInt KBufferSize = 256; 00028 00029 // ================= MEMBER FUNCTIONS ======================= 00030 // 00031 // ---------------------------------------------------------- 00032 // CContactsModelAppUi::ConstructL() 00033 // ---------------------------------------------------------- 00034 // 00035 void CContactsModelAppUi::ConstructL() 00036 { 00037 BaseConstructL(EAknEnableSkin); 00038 00039 iAppContainer = new (ELeave) CContactsModelContainer; 00040 iAppContainer->SetMopParent( this ); 00041 iAppContainer->ConstructL( ClientRect(), (CContactsModelDocument*)(iDocument) ); 00042 AddToStackL( iAppContainer ); 00043 } 00044 00045 // ---------------------------------------------------- 00046 // CContactsModelAppUi::~CContactsModelAppUi() 00047 // Destructor 00048 // Frees reserved resources 00049 // ---------------------------------------------------- 00050 // 00051 CContactsModelAppUi::~CContactsModelAppUi() 00052 { 00053 if (iAppContainer) 00054 { 00055 RemoveFromStack( iAppContainer ); 00056 delete iAppContainer; 00057 } 00058 } 00059 00060 // ------------------------------------------------------------------------------ 00061 // CContactsModelAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) 00062 // This function is called by the EIKON framework just before it displays 00063 // a menu pane. Its default implementation is empty, and by overriding it, 00064 // the application can set the state of menu items dynamically according 00065 // to the state of application data. 00066 // ------------------------------------------------------------------------------ 00067 // 00068 void CContactsModelAppUi::DynInitMenuPaneL( 00069 TInt aResourceId,CEikMenuPane* aMenuPane) 00070 { 00071 if (aResourceId == R_CONTACTSMODEL_MENU) 00072 { 00073 if(iAppContainer->ItemCount() < 1) 00074 { 00075 aMenuPane->SetItemDimmed(EContactsModelCmdAppExport, ETrue); 00076 } 00077 } 00078 } 00079 00080 // ---------------------------------------------------- 00081 // CContactsModelAppUi::HandleKeyEventL( 00082 // const TKeyEvent& aKeyEvent,TEventCode /*aType*/) 00083 // takes care of key event handling 00084 // ---------------------------------------------------- 00085 // 00086 TKeyResponse CContactsModelAppUi::HandleKeyEventL( 00087 const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/) 00088 { 00089 return EKeyWasNotConsumed; 00090 } 00091 00092 // ---------------------------------------------------- 00093 // CContactsModelAppUi::HandleCommandL(TInt aCommand) 00094 // takes care of command handling 00095 // ---------------------------------------------------- 00096 // 00097 void CContactsModelAppUi::HandleCommandL(TInt aCommand) 00098 { 00099 switch ( aCommand ) 00100 { 00101 case EAknSoftkeyExit: 00102 case EEikCmdExit: 00103 { 00104 Exit(); 00105 break; 00106 } 00107 case EContactsModelCmdAppImport: 00108 { 00109 00110 TBuf<KBufferSize> fileName; 00111 //select file to import from 00112 if(AknCommonDialogs::RunSelectDlgLD(fileName, R_FILE_SELECTION_DIALOG)) 00113 { 00114 //import to the default contact database 00115 ImportL(fileName); 00116 //update listbox to display imported contacts 00117 HandleModelChangeL(); 00118 } 00119 00120 break; 00121 } 00122 case EContactsModelCmdAppExport: 00123 { 00124 //get file to export to 00125 TFileName defaultFileName(KDefaultFileName); 00126 if(AknCommonDialogs::RunSaveDlgLD(defaultFileName, R_MEMORY_SELECTION_DIALOG)) 00127 { 00128 //and export selected item 00129 ExportL(defaultFileName, iAppContainer->GetSelectedItem()); 00130 } 00131 00132 break; 00133 } 00134 00135 default: 00136 break; 00137 } 00138 } 00139 00140 // ---------------------------------------------------- 00141 // CContactsModelAppUi::ImportL(TDesC& aFileName) 00142 // Import new contact information (VCard) 00143 // ---------------------------------------------------- 00144 // 00145 void CContactsModelAppUi::ImportL(const TDesC& aFileName) 00146 { 00147 // Create a file to read contacts 00148 RFs fileSession; 00149 User::LeaveIfError(fileSession.Connect()); 00150 CleanupClosePushL(fileSession); 00151 00152 RFile file; 00153 if (file.Open(fileSession, aFileName, EFileRead) != KErrNone) 00154 { 00155 CAknInformationNote* informationNote = new (ELeave)CAknInformationNote; 00156 informationNote->ExecuteLD(KFailedToOpen); 00157 CleanupStack::PopAndDestroy(); // Close fileSession 00158 return; 00159 } 00160 CleanupClosePushL(file); 00161 00162 //open file 00163 RFileReadStream inputFileStream(file); 00164 CleanupClosePushL(inputFileStream); 00165 00166 TInt result = ((CContactsModelDocument*)iDocument)->ImportL(inputFileStream); 00167 if(result!=KErrNone) 00168 { 00169 CAknInformationNote* informationNote = new (ELeave)CAknInformationNote; 00170 informationNote->ExecuteLD(KFailedToImport); 00171 } 00172 00173 // Clean up 00174 CleanupStack::PopAndDestroy(); // Close inputFileStream 00175 00176 CleanupStack::PopAndDestroy(); // Close file 00177 CleanupStack::PopAndDestroy(); // Close fileSession 00178 00179 // read from the default database to display new items 00180 ((CContactsModelDocument*)iDocument)->UpdateContactsL(); 00181 } 00182 00183 // ---------------------------------------------------- 00184 // CContactsModelAppUi::ExportL(TDesC& aFileName, TInt aItemIndex) 00185 // Export contact information 00186 // ---------------------------------------------------- 00187 // 00188 void CContactsModelAppUi::ExportL(const TDesC& aFileName, TInt aItemIndex) 00189 { 00190 // Create a file to write contacts 00191 RFs fileSession; 00192 User::LeaveIfError(fileSession.Connect()); 00193 CleanupClosePushL(fileSession); 00194 00195 RFile file; 00196 if (file.Replace(fileSession, aFileName, EFileWrite) != KErrNone) 00197 { 00198 CAknInformationNote* informationNote = new (ELeave)CAknInformationNote; 00199 informationNote->ExecuteLD(KFailedToCreateFile); 00200 CleanupStack::PopAndDestroy(); // Close fileSession 00201 return; 00202 } 00203 CleanupClosePushL(file); 00204 00205 //open file 00206 RFileWriteStream outputFileStream(file); 00207 CleanupClosePushL(outputFileStream); 00208 00209 ((CContactsModelDocument*)iDocument)->ExportL(outputFileStream, aItemIndex); 00210 00211 // Clean up 00212 CleanupStack::PopAndDestroy(); // Close outputFileStream 00213 00214 CleanupStack::PopAndDestroy(); // Close file 00215 CleanupStack::PopAndDestroy(); // Close fileSession 00216 } 00217 00218 void CContactsModelAppUi::HandleModelChangeL() 00219 { 00220 //read from the document to the listbox model 00221 iAppContainer->UpdateL(); 00222 //and redraw 00223 iAppContainer->DrawNow(); 00224 } 00225 00226 // --------------------------------------------------------- 00227 // CDBMSAppUi::HandleResourceChangeL() 00228 // Called by framework when resource is changed. 00229 // --------------------------------------------------------- 00230 // 00231 void CContactsModelAppUi::HandleResourceChangeL(TInt aType) 00232 { 00233 CAknAppUi::HandleResourceChangeL(aType); //call to upper class 00234 00235 // ADDED FOR SCALABLE UI SUPPORT 00236 // ***************************** 00237 //if ( aType == KEikDynamicLayoutVariantSwitch ) 00238 //hard coded constant so it can be compiled with first edition 00239 if ( aType == 0x101F8121 ) 00240 { 00241 if(iAppContainer) 00242 iAppContainer->SetRect( ClientRect() ); 00243 } 00244 } 00245 00246 // End of File 00247
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.