phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardcontainer.cpp
branchRCL_3
changeset 3 04ab22b956c2
parent 0 e686773b3f54
child 6 e8e3147d53eb
--- a/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardcontainer.cpp	Tue Feb 02 10:12:17 2010 +0200
+++ b/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardcontainer.cpp	Fri Feb 19 22:40:27 2010 +0200
@@ -30,9 +30,9 @@
 #include <MVPbkStoreContact.h>
 #include <CPbk2IconArray.h>
 #include <Pbk2UIControls.rsg>
-#include <mpbk2command.h>
-#include <pbk2menufilteringflags.hrh>
-#include <mvpbkcontactlink.h>
+#include <MPbk2Command.h>
+#include <Pbk2MenuFilteringFlags.hrh>
+#include <MVPbkContactLink.h>
 
 #include "ccappmycard.hrh"
 #include "ccappmycard.h"
@@ -66,6 +66,12 @@
 #include <centralrepository.h>
 #include <Phonebook2PrivateCRKeys.h>
 
+#include <CPbk2ApplicationServices.h>
+#include <CPbk2ServiceManager.h>
+#include <TPbk2IconId.h>
+#include <CPbk2IconInfo.h>
+
+
 // unnamed namespace
 namespace
 {
@@ -105,6 +111,8 @@
     delete iFactoryExtensionNotifier;
     delete iViewLauncher;
     delete iImageSelectionPopup;
+    delete iLongTapDetector; 
+    delete iDetailsPopup;
     }
 
 // ----------------------------------------------------------------------------
@@ -140,6 +148,46 @@
     TResourceReader reader;
     iCoeEnv->CreateResourceReaderLC( reader, R_PBK2_FIELDTYPE_ICONS );
     CPbk2IconArray* iconArray = CPbk2IconArray::NewL( reader );
+  
+    // Calculate preferred size for xsp service icons.
+    TRect mainPane;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
+    TAknLayoutRect listLayoutRect;
+    listLayoutRect.LayoutRect(
+        mainPane,
+        AknLayoutScalable_Avkon::list_single_graphic_pane_g1(0).LayoutLine() );
+    TSize size( listLayoutRect.Rect().Size() );
+        
+    // Add xsp service icons
+    CPbk2ApplicationServices* appServices = CPbk2ApplicationServices::InstanceL();
+    CPbk2ServiceManager& servMan = appServices->ServiceManager();
+    
+    const CPbk2ServiceManager::RServicesArray& services = servMan.Services();
+    TUid uid;
+    uid.iUid = KPbk2ServManId;
+    
+    for( TInt i = 0; i < services.Count(); i++ )
+        {
+        const CPbk2ServiceManager::TService& service = services[i];
+        
+        if ( service.iBitmapId && service.iBitmap )
+            {
+            AknIconUtils::SetSize(
+                      service.iBitmap,
+                      size );
+            AknIconUtils::SetSize(
+                      service.iMask,
+                      size );
+            TPbk2IconId id = TPbk2IconId( uid, service.iBitmapId );
+            CPbk2IconInfo* info = CPbk2IconInfo::NewLC(
+               id, service.iBitmap, service.iMask, size );
+            iconArray->AppendIconL( info );
+            CleanupStack::Pop( info );
+            }        
+        }
+    
+    Release( appServices );
+        
     iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
     CleanupStack::PopAndDestroy(); // reader
 
@@ -156,7 +204,6 @@
     iListBox->SetListBoxObserver( this );
     iPlugin.MyCard().AddObserverL( this );
 
-
     if( iPlugin.MyCard().IsContactLinkReady() )
     	{
         CCCAppStatusControl* statusControl = iHeaderCtrl->StatusControl();
@@ -169,11 +216,12 @@
     iFactoryExtensionNotifier = CCCaFactoryExtensionNotifier::NewL();
 
     TCallBack callBack( CCCAppMyCardContainer::CheckExtensionFactoryL, this );
-    iFactoryExtensionNotifier->ObserveExtensionFactory( callBack );
+    iFactoryExtensionNotifier->ObserveExtensionFactoryL( callBack );
+    
+    iLongTapDetector = CAknLongTapDetector::NewL( this );
     CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardContainer::ConstructL()"));
     }
 
-
 /**
  * Gets a digit from a descriptor.
  *
@@ -193,10 +241,10 @@
         }
 
     CleanupStack::PopAndDestroy( orderBuf );
+    
     return result;
     }
 
-
 // ----------------------------------------------------------------------------
 // CCCAppMyCardContainer::ResolveNameOrderL()
 // ----------------------------------------------------------------------------
@@ -322,6 +370,14 @@
 	delete iImageSelectionPopup;
 	iImageSelectionPopup = NULL;
 	
+	delete iDetailsPopup;
+	iDetailsPopup = NULL;
+	
+	if( iImageLoader )
+	    {
+        TRAP_IGNORE( iImageLoader->ResizeImageL(iHeaderCtrl->ThumbnailSize()));
+	    }
+	
     DrawDeferred();
     }
 
@@ -444,10 +500,10 @@
         if( !iImageLoader )
             {
             // lazy initialization
-            iImageLoader = CCCAppMyCardImageLoader::NewL(
-                mycard.ContactManager(), *this );
+            iImageLoader = CCCAppMyCardImageLoader::NewL( *this );
             }
-        iImageLoader->LoadContactImageL( mycard.StoreContact() );
+        iImageLoader->LoadContactImageL( mycard.StoreContact(), 
+                iHeaderCtrl->ThumbnailSize() );
         }
 
     if( iPlugin.MyCard().IsContactLinkReady() && !iControlLink )
@@ -513,6 +569,13 @@
         case EEventItemDoubleClicked:
         case EEventItemSingleClicked:
             {
+            // Don't open the editor if stylusMenu opened using longTap 
+            if( iLongTapHandled ) 
+                {
+                iLongTapHandled = EFalse;
+                return;
+                }
+            
             // start the editor and pass tapped field index
             iPlugin.EditL( FocusedFieldIndex() );
             break;
@@ -546,8 +609,6 @@
     return NULL;
 	}
 
-
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::NumberOfContacts
 // --------------------------------------------------------------------------
@@ -595,7 +656,6 @@
     // do nothing
 	}
 
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::SetFocusedContactL
 // --------------------------------------------------------------------------
@@ -700,8 +760,6 @@
     return NULL;
 	}
 
-
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::SelectedContactsOrFocusedContactL
 // --------------------------------------------------------------------------
@@ -787,8 +845,6 @@
     // Not supported
 	}
 
-
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::DynInitMenuPaneL
 // --------------------------------------------------------------------------
@@ -805,9 +861,9 @@
 // --------------------------------------------------------------------------
 //
 void CCCAppMyCardContainer::ProcessCommandL(TInt /*aCommandId*/) const
-	{
+        {
     // Nothing to do
-	}
+        }
 
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::UpdateAfterCommandExecution
@@ -871,8 +927,6 @@
     return KNullDesC;
 	}
 
-
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::ResetFindL
 // --------------------------------------------------------------------------
@@ -900,7 +954,6 @@
     // Do nothing
 	}
 
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::SetBlank
 // --------------------------------------------------------------------------
@@ -910,7 +963,6 @@
     // This control does not support blanking
 	}
 
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::RegisterCommand
 // --------------------------------------------------------------------------
@@ -920,7 +972,6 @@
     iCommand = aCommand;
 	}
 
-
 // --------------------------------------------------------------------------
 // CCCAppMyCardContainer::SetTextL
 // --------------------------------------------------------------------------
@@ -1002,8 +1053,7 @@
             iHeaderCtrl->SetLabel1TextL( lastName );
             break;
             }
-        }
-    
+        }    
 	}
 
 //------------------------------------------------------------------------------
@@ -1044,9 +1094,61 @@
     iImageSelectionPopup->SetPosition( aPos );
     iImageSelectionPopup->ShowMenu();   
 }
+ 
+// ----------------------------------------------------------------------------
+// CCCAppMyCardContainer::HandleLongTapEventL()
+// ----------------------------------------------------------------------------
+//
+void CCCAppMyCardContainer::HandleLongTapEventL( const TPoint& /*aPenEventLocation*/, 
+                                    const TPoint& /*aPenEventScreenLocation*/ )
+    {       
+    if( iDetailsPopup )
+        {
+        iLongTapHandled = ETrue;
+        iDetailsPopup->ShowMenu();
+        }
+    }
+ 
+// ----------------------------------------------------------------------------
+// CCCAppCommLauncherContainer::HandlePointerEventL()
+// ----------------------------------------------------------------------------
+//
+void CCCAppMyCardContainer::HandlePointerEventL(
+    const TPointerEvent& aPointerEvent )
+    {               
+    TInt index;
+    TPoint pos = aPointerEvent.iPosition;
+    
+    if ( iListBox->View()->XYPosToItemIndex( aPointerEvent.iPosition, index ) )
+       {
+       iLongTapDetector->PointerEventL( aPointerEvent );
+         
+       if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+           {
+           // Pressed Down Effect
+           iListBox->View()->ItemDrawer()->SetFlags(
+                   CListItemDrawer::EPressedDownState );
+           }
+       }
+
+   if ( !iDetailsPopup )
+      {
+      iDetailsPopup = CAknStylusPopUpMenu::NewL( &iPlugin, aPointerEvent.iPosition ); 
+      TInt resourceReaderId = R_MYCARD_CONTACT_COPY_DETAIL_STYLUS_MENU; 
+      TResourceReader reader;
+      iCoeEnv->CreateResourceReaderLC( reader , resourceReaderId );
+      iDetailsPopup->ConstructFromResourceL( reader );
+      CleanupStack::PopAndDestroy(); // reader
+      }
+      
+    PosToScreenCoordinates( this, pos );    
+    iDetailsPopup->SetPosition( pos );      
+   
+    CCoeControl::HandlePointerEventL( aPointerEvent );              
+    }
 
 // ---------------------------------------------------------------------------
-// PosToScreenCoordinates
+// CCCAppCommLauncherContainer::PosToScreenCoordinates
 // ---------------------------------------------------------------------------
 //
 void CCCAppMyCardContainer::PosToScreenCoordinates(