phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorImageField.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorImageField.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,343 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Phonebook 2 contact editor iamge field.
+*
+*/
+
+
+#include "CPbk2ContactEditorImageField.h"
+
+// Phonebook 2
+#include "MPbk2ContactEditorUiBuilder.h"
+#include "MPbk2ContactEditorUiBuilderExtension.h"
+#include "MPbk2ContactEditorFieldVisitor.h"
+#include <MPbk2FieldProperty.h>
+#include <CPbk2PresentationContactField.h>
+#include <Pbk2PresentationUtils.h>
+#include "Pbk2ImageCommands.h"
+#include "CPbk2ContactEditorReadonlyField.h"
+#include "Pbk2EditorLineIds.hrh"
+#include <Pbk2UIControls.hrh>
+#include <Pbk2Config.hrh>
+
+// Virtual Phonebook
+#include <MVPbkContactFieldTextData.h>
+#include <VPbkFieldType.hrh>
+#include <MVPbkFieldType.h>
+#include <Pbk2UIControls.rsg>
+
+// System includes
+#include <eikcapc.h>
+#include <eikedwin.h>
+#include <AknUtils.h>
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::CPbk2ContactEditorImageField
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorImageField::CPbk2ContactEditorImageField
+        ( CPbk2PresentationContactField& aContactField,
+          MPbk2ContactEditorUiBuilder& aUiBuilder,
+          CPbk2IconInfoContainer& aIconInfoContainer ) :
+            CPbk2ContactEditorFieldBase( aContactField, aUiBuilder,
+                aIconInfoContainer )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::~CPbk2ContactEditorImageField
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorImageField::~CPbk2ContactEditorImageField()
+    {    
+    delete iInitialText;    
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::NewLC
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorImageField* CPbk2ContactEditorImageField::NewLC
+        ( CPbk2PresentationContactField& aContactField,
+          MPbk2ContactEditorUiBuilder& aUiBuilder,
+          CPbk2IconInfoContainer& aIconInfoContainer,
+          TInt aCustomPosition) 
+    {
+    CPbk2ContactEditorImageField* self = 
+        new ( ELeave ) CPbk2ContactEditorImageField( aContactField,
+            aUiBuilder, aIconInfoContainer );
+    CleanupStack::PushL( self );
+    self->ConstructL(aCustomPosition);
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ConstructL
+// Create and insert a line in the dialog
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorImageField::ConstructL(TInt aCustomPosition)
+    {
+    MPbk2ContactEditorUiBuilderExtension* ext = 
+        static_cast<MPbk2ContactEditorUiBuilderExtension*>(
+            iUiBuilder.ContactEditorUiBuilderExtension(KNullUid));
+    
+    iControl = static_cast<CPbk2ContactEditorReadonlyField*>(
+        ext->AddCustomFieldToFormL(aCustomPosition, R_PBK2_IMAGE_LINE));
+    iControl->InitializeL(this);
+    SetTextL();      
+    iInitialText = iControl->GetTextInHBufL();    
+    iControl->CreateTextViewL(); 
+    iCaptionedCtrl = iUiBuilder.LineControl(ControlId()); 
+    iUiBuilder.TryChangeFocusL(ControlId());  
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ControlId
+// --------------------------------------------------------------------------
+//
+TInt CPbk2ContactEditorImageField::ControlId() const
+    {
+    return EPbk2EditorLineImage;  
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::SetTextL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorImageField::SetTextL()
+    {
+    // Get image name or set descriptive text
+    TBool isFilename(EFalse);     
+    TVPbkFieldStorageType type = iContactField.FieldData().DataType();    
+    
+    if(type == EVPbkFieldStorageTypeText)
+         {
+         isFilename = !iContactField.FieldData().IsEmpty();
+         }
+
+    TBool isThumbnail(Pbk2ImageCommands::IsThumbnailFieldL(iContactField));
+    TBool imagefileValid(Pbk2ImageCommands::IsImageFieldValidL(iContactField));    
+    
+    if( !isFilename && !isThumbnail )    
+        {
+        HBufC* defaultText = CCoeEnv::Static()->AllocReadResourceLC
+            ( R_QTN_PHOB_FIELD_ADD_IMAGE );
+        TPtrC dataPtr(*defaultText);
+           
+        FormatTextL( dataPtr, EDontClipFileExtension );  
+        CleanupStack::PopAndDestroy(defaultText);
+        iTextState = ENoData; 
+        }
+    else if( !imagefileValid ) 
+        {
+        //cold filename, show "Thumbnail" (e.g mem card not present)
+        HBufC* defaultText = CCoeEnv::Static()->AllocReadResourceLC
+            ( R_QTN_PHOB_FIELD_THUMBNAIL );
+        TPtrC dataPtr(*defaultText);
+               
+        FormatTextL( dataPtr, EClipFileExtension );  
+        CleanupStack::PopAndDestroy(defaultText);
+        iTextState = EThumbnail;
+        }        
+    else
+        {
+        TPtrC dataPtr(MVPbkContactFieldTextData::Cast(  
+            iContactField.FieldData()).Text());
+        
+        FormatTextL( dataPtr, EClipFileExtension );      
+        iTextState = EFilename;
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::FormatTextL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorImageField::FormatTextL(TPtrC aDataPtr, TClipFileExtension aClipFileExtension)
+    {
+    HBufC* textBuf = HBufC::NewLC(aDataPtr.Length());
+    TPtr text = textBuf->Des();        
+    text.Zero();
+    Pbk2PresentationUtils::AppendWithNewlineTranslationL(text, aDataPtr);
+    
+    if (aClipFileExtension == EClipFileExtension )
+        {
+        TParsePtr fileNameParser( text );
+        TPtrC baseName( fileNameParser.Name() );
+        // Set formatted text to editor control
+        iControl->SetTextL(&baseName);    
+        }
+    else
+        {
+        // Don't use filename parsing if a default string "Add image" is used.
+        // There might be a dot in the end of the string and it would be then removed.
+        // Example: "Adaug. imag."
+        iControl->SetTextL(&text); 
+        }
+    
+    // SetTextL method above copied the text to the control,
+    // so it is safe to destroy the buffer
+    CleanupStack::PopAndDestroy(textBuf);
+    iUiBuilder.LoadBitmapToFieldL
+        ( iContactField.FieldProperty(), iIconInfoContainer, ControlId() );
+
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::Control
+// --------------------------------------------------------------------------
+//
+CEikEdwin* CPbk2ContactEditorImageField::Control() const
+    {
+    // We don't show anything out
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ControlTextL
+// -----------------------------------------------------------------------------
+//  
+HBufC* CPbk2ContactEditorImageField::ControlTextL() const
+    {
+    return CPbk2ContactEditorFieldBase::ControlTextL();    
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::SaveFieldL
+// --------------------------------------------------------------------------
+//  
+void CPbk2ContactEditorImageField::SaveFieldL()
+    {
+    HBufC* text = iControl->GetTextInHBufL();
+    CleanupStack::PushL(text);
+    
+    if(iInitialText->Compare(*text) )
+        {
+        iContactDataHasChanged = ETrue;
+        }
+    else
+        {
+        iContactDataHasChanged = EFalse;
+        }
+    
+    CleanupStack::PopAndDestroy(text);
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::HandleCustomFieldCommandL
+// -----------------------------------------------------------------------------
+//
+TBool CPbk2ContactEditorImageField::HandleCustomFieldCommandL(TInt aCommand )
+    {
+    TBool ret(EFalse);
+    MPbk2ContactEditorUiBuilderExtension* ext = 
+         static_cast<MPbk2ContactEditorUiBuilderExtension*>(
+             iUiBuilder.ContactEditorUiBuilderExtension(KNullUid));  
+         
+    if(aCommand == EPbk2CmdEditorHandleCustomSelect)
+        {
+#ifdef ECE_DISABLE_CONTEXT_MENU
+        if (ContactField().FieldData().IsEmpty())
+            {
+            ret = ext->HandleCustomFieldCommandL(EPbk2CmdEditorChangeImage);
+            }
+        else
+            {
+            ret = ext->HandleCustomFieldCommandL(EPbk2CmdEditorContextMenu);
+            }
+#else
+        ret = ext->HandleCustomFieldCommandL(EPbk2CmdEditorChangeImage);
+#endif
+        }
+    else if(aCommand == EPbk2CmdEditorHandleCustomRemove)
+        {
+        ret = ext->HandleCustomFieldCommandL(EPbk2CmdEditorRemoveImage);
+        }
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ActivateL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorImageField::ActivateL()
+    {
+    iCaptionedCtrl->ActivateL();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::AcceptL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorImageField::AcceptL
+        ( MPbk2ContactEditorFieldVisitor& aVisitor )
+    {
+    aVisitor.VisitL( *this );
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ConsumesKeyEvent
+// -----------------------------------------------------------------------------
+//
+TBool CPbk2ContactEditorImageField::ConsumesKeyEvent
+        ( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    
+    TKeyResponse keyResponse = iControl->OfferKeyEventL( aKeyEvent, aType );
+
+    if ( EKeyWasConsumed == keyResponse )
+        {
+        return ETrue;
+        }
+            
+    return EFalse;
+    }   
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::TextState
+// -----------------------------------------------------------------------------
+//
+TInt CPbk2ContactEditorImageField::TextState()
+    {
+    return iTextState;
+    }   
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ContactField
+// -----------------------------------------------------------------------------
+//
+CPbk2PresentationContactField& CPbk2ContactEditorImageField::ContactField()
+    {
+    return iContactField;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2ContactEditorImageField::ContactEditorFieldExtension
+// -----------------------------------------------------------------------------
+//
+TAny* CPbk2ContactEditorImageField::ContactEditorFieldExtension(
+	TUid aExtensionUid )
+    {
+    if( aExtensionUid == KMPbk2ContactEditorFieldExtension2Uid )
+       {
+         return static_cast<MPbk2ContactEditorField2*>( this );
+       }    
+        
+    return this;
+    }
+
+
+
+// End of File