meetingrequest/mrgui/mrfieldbuilderplugin/src/CESMRFieldBuilderPlugin.cpp
branchRCL_3
changeset 64 3533d4323edc
equal deleted inserted replaced
63:d189ee25cf9d 64:3533d4323edc
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  MRUI field build plugin implementation
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "emailtrace.h"
       
    20 #include "cesmrfieldbuilderplugin.h"
       
    21 
       
    22 //<cmail>
       
    23 #include "esmrdef.h"
       
    24 //</cmail>
       
    25 #include "mesmrresponseobserver.h"
       
    26 
       
    27 // Editor fields
       
    28 #include "cesmrsubjectfield.h"
       
    29 #include "cesmrtimefield.h"
       
    30 #include "cesmrdatefield.h"
       
    31 #include "cesmrlocationfield.h"
       
    32 #include "cesmralarmfield.h"
       
    33 #include "cesmrrecurencefield.h"
       
    34 #include "cesmrdescriptionfield.h"
       
    35 #include "cesmrcheckbox.h"
       
    36 #include "cesmrsingletimefield.h"
       
    37 #include "cmralarmonofffield.h"
       
    38 #include "cesmrsyncfield.h"
       
    39 #include "cesmrpriorityfield.h"
       
    40 #include "cmrattachmentsfield.h"
       
    41 #include "cmrunifiededitorfield.h"
       
    42 #include "cmrmulticalenfield.h"
       
    43 
       
    44 // Viewer fields
       
    45 #include "cesmrviewerlocationfield.h"
       
    46 #include "cesmrviewerstartdatefield.h"
       
    47 #include "cesmrviewertimefield.h"
       
    48 #include "cesmrvieweralarmfield.h"
       
    49 #include "cesmrviewerdescriptionfield.h"
       
    50 #include "cesmrviewerstopdatefield.h"
       
    51 #include "cesmrviewerrecurrencefield.h"
       
    52 #include "cesmrviewerrecurrencedatefield.h"
       
    53 #include "cesmrviewersyncfield.h"
       
    54 #include "cesmrviewerpriorityfield.h"
       
    55 #include "cesmrvieweralldayeventfield.h"
       
    56 #include "cesmrvieweralarmdatefield.h"
       
    57 #include "cesmrvieweralarmtimefield.h"
       
    58 #include "cesmrviewerdetailedsubjectfield.h"
       
    59 #include "cesmrrepeatuntil.h"
       
    60 #include "cmrviewerattachmentfield.h"
       
    61 
       
    62 
       
    63 /// Unnamed namespace for local definitions
       
    64 namespace { // codescanner::namespace
       
    65 
       
    66 // Panic literal
       
    67 _LIT( KESMRFieldBuilderPlugin, "ESMRFieldBuilderPlugin" );
       
    68 
       
    69 /** Panic codes */
       
    70 enum TESMRFieldBuilderPluginPanic
       
    71     {
       
    72     EInvalidFieldId = 0 // Invalid field id
       
    73     };
       
    74 
       
    75 void Panic( TESMRFieldBuilderPluginPanic aPanic )
       
    76     {
       
    77     User::Panic( KESMRFieldBuilderPlugin, aPanic );
       
    78     }
       
    79 
       
    80 }  // namespace
       
    81 
       
    82 // ======== MEMBER FUNCTIONS ========
       
    83 
       
    84 // -----------------------------------------------------------------------------
       
    85 // CESMRFieldBuilderPlugin::CESMRFieldBuilderPlugin
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 CESMRFieldBuilderPlugin::CESMRFieldBuilderPlugin()
       
    89     :iExtension(NULL),
       
    90     iFieldExtension(NULL)
       
    91     {
       
    92     FUNC_LOG;
       
    93     //do nothing
       
    94     }
       
    95 
       
    96 // -----------------------------------------------------------------------------
       
    97 // CESMRFieldBuilderPlugin::~CESMRFieldBuilderPlugin
       
    98 // -----------------------------------------------------------------------------
       
    99 //
       
   100 CESMRFieldBuilderPlugin::~CESMRFieldBuilderPlugin()
       
   101     {
       
   102     FUNC_LOG;
       
   103     delete iExtension;
       
   104     }
       
   105 
       
   106 // -----------------------------------------------------------------------------
       
   107 // CESMRFieldBuilderPlugin::NewL
       
   108 // -----------------------------------------------------------------------------
       
   109 //
       
   110 CESMRFieldBuilderPlugin* CESMRFieldBuilderPlugin::NewL()
       
   111     {
       
   112     FUNC_LOG;
       
   113     CESMRFieldBuilderPlugin* self = new (ELeave) CESMRFieldBuilderPlugin;
       
   114     return self;
       
   115     }
       
   116 
       
   117 // ----------------------------------------------------------------------------
       
   118 // CESMRFieldBuilderPlugin::ExtensionL
       
   119 // ----------------------------------------------------------------------------
       
   120 //
       
   121 TAny* CESMRFieldBuilderPlugin::ExtensionL( TUid aExtensionUid )
       
   122     {
       
   123     FUNC_LOG;
       
   124     if(!iExtension)
       
   125         {
       
   126         LoadExtensionL();
       
   127         }
       
   128 
       
   129     TAny* extension = NULL;
       
   130     if ( iExtension )
       
   131         {
       
   132         extension = iExtension->ExtensionL( aExtensionUid );
       
   133         }
       
   134     return extension;
       
   135     }
       
   136 
       
   137 // ---------------------------------------------------------------------------
       
   138 // CESMRFieldBuilderPlugin::FieldBuilderL()
       
   139 // ---------------------------------------------------------------------------
       
   140 //
       
   141 MESMRFieldBuilder* CESMRFieldBuilderPlugin::FieldBuilderL()
       
   142     {
       
   143     FUNC_LOG;
       
   144     return this;
       
   145     }
       
   146 
       
   147 // ---------------------------------------------------------------------------
       
   148 // CESMRFieldBuilderPlugin::CreateEditorFieldL()
       
   149 // ---------------------------------------------------------------------------
       
   150 //
       
   151 CESMRField* CESMRFieldBuilderPlugin::CreateEditorFieldL(
       
   152         MESMRFieldValidator* aValidator,
       
   153         TESMREntryField aField )
       
   154     {
       
   155     FUNC_LOG;
       
   156     CESMRField* field = NULL;
       
   157     switch ( aField.iFieldId )
       
   158         {
       
   159         case EESMRFieldMeetingTime:
       
   160             field = CESMRTimeField::NewL( aValidator );
       
   161             break;
       
   162         case EESMRFieldStartDate:
       
   163             field = CESMRDateField::NewL( aValidator, aField.iFieldId );
       
   164             break;
       
   165         case EESMRFieldStopDate:
       
   166             field = CESMRDateField::NewL( aValidator, aField.iFieldId );
       
   167             break;
       
   168         case EESMRFieldLocation:
       
   169             field = CESMRLocationField::NewL();
       
   170             break;
       
   171         case EESMRFieldAlarm:
       
   172             field = CESMRAlarmField::NewL( aValidator );
       
   173             break;
       
   174         case EESMRFieldAllDayEvent:
       
   175             field = CESMRCheckBox::NewL( aValidator );
       
   176             break;
       
   177         case EESMRFieldAlarmOnOff:
       
   178             field = CMRAlarmOnOffField::NewL( aValidator );
       
   179             break;
       
   180         case EESMRFieldAlarmTime:
       
   181             field = CESMRSingleTimeField::NewL( aValidator );
       
   182             break;
       
   183         case EESMRFieldAlarmDate:
       
   184             field = CESMRDateField::NewL( aValidator, aField.iFieldId );
       
   185             break;
       
   186         case EESMRFieldSubject:
       
   187             field = CESMRSubjectField::NewL();
       
   188             break;
       
   189         case EESMRFieldDescription:
       
   190             field = CESMRDescriptionField::NewL();
       
   191             break;
       
   192         case EESMRFieldRecurrence:
       
   193             field = CESMRRecurenceField::NewL( aValidator );
       
   194             break;
       
   195         case EESMRFieldRecurrenceDate:
       
   196             field = CESMRRepeatUntilField::NewL( aValidator );
       
   197             break;
       
   198         case EESMRFieldSync:
       
   199             field = CESMRSyncField::NewL();
       
   200             break;
       
   201         case EESMRFieldOccasion:
       
   202             field = CESMRSubjectField::NewL( CESMRSubjectField::ETypeOccasion );
       
   203             break;
       
   204         case EESMRFieldPriority:
       
   205             field = CESMRPriorityField::NewL();
       
   206             break;
       
   207         case EESMRFieldAttachments:
       
   208             field = CMRAttachmentsField::NewL();
       
   209             break;
       
   210         case EESMRFieldUnifiedEditor:
       
   211             field = CMRUnifiedEditorField::NewL();
       
   212             break;
       
   213         case EESMRFieldCalendarName:
       
   214             field = CMRMultiCalenField::NewL();
       
   215             break;
       
   216         default:
       
   217             {
       
   218             field = FieldBuilderExtensionL()->CreateEditorFieldL(
       
   219                     aValidator,
       
   220                     aField );
       
   221             }
       
   222             break;
       
   223         }
       
   224 
       
   225     __ASSERT_ALWAYS( field, Panic(EInvalidFieldId) );
       
   226     // Set field mode
       
   227     field->SetFieldMode( EESMRFieldModeEdit );
       
   228 
       
   229     return field;
       
   230     }
       
   231 
       
   232 // ---------------------------------------------------------------------------
       
   233 // CESMRFieldBuilderPlugin::CreateViewerFieldL()
       
   234 // ---------------------------------------------------------------------------
       
   235 //
       
   236 CESMRField* CESMRFieldBuilderPlugin::CreateViewerFieldL( MESMRResponseObserver* aResponseObserver,
       
   237                                                    TESMREntryField aField,
       
   238                                                    TBool aResponseReady )
       
   239     {
       
   240     FUNC_LOG;
       
   241     CESMRField* field = NULL;
       
   242     switch ( aField.iFieldId )
       
   243         {
       
   244         case EESMRFieldMeetingTime:
       
   245             {
       
   246             field = CESMRViewerTimeField::NewL();
       
   247             break;
       
   248             }
       
   249         case EESMRFieldStartDate:
       
   250             {
       
   251             field = CESMRViewerStartDateField::NewL();
       
   252             break;
       
   253             }
       
   254         case EESMRFieldStopDate:
       
   255             {
       
   256             field = CESMRViewerStopDateField::NewL();
       
   257             break;
       
   258             }
       
   259         case EESMRFieldLocation:
       
   260             {
       
   261             field = CESMRViewerLocationField::NewL();
       
   262             break;
       
   263             }
       
   264         case EESMRFieldAlarm:
       
   265             {
       
   266             field = CESMRViewerAlarmField::NewL();
       
   267             break;
       
   268             }
       
   269         case EESMRFieldDescription:
       
   270             {
       
   271             field = CESMRViewerDescriptionField::NewL();
       
   272             break;
       
   273             }
       
   274         case EESMRFieldRecurrence:
       
   275             {
       
   276             field = CESMRViewerRecurrenceField::NewL();
       
   277             break;
       
   278             }
       
   279         case EESMRFieldRecurrenceDate:
       
   280             {
       
   281             field = CESMRViewerRecurrenceDateField::NewL();
       
   282             break;
       
   283             }
       
   284         case EESMRFieldSync:
       
   285             {
       
   286             field = CESMRViewerSyncField::NewL();
       
   287             break;
       
   288             }
       
   289         case EESMRFieldPriority:
       
   290             {
       
   291             field = CESMRViewerPriorityField::NewL();
       
   292             break;
       
   293             }
       
   294         case EESMRFieldAllDayEvent:
       
   295             {
       
   296             field = CESMRViewerAllDayEventField::NewL();
       
   297             break;
       
   298             }
       
   299         case EESMRFieldAlarmDate:
       
   300             {
       
   301             field = CESMRViewerAlarmDateField::NewL();
       
   302             break;
       
   303             }
       
   304         case EESMRFieldAlarmTime:
       
   305             {
       
   306             field = CESMRViewerAlarmTimeField::NewL();
       
   307             break;
       
   308             }
       
   309         case EESMRFieldDetailedSubject:
       
   310             {
       
   311             field = CESMRViewerDetailedSubjectField::NewL();
       
   312             break;
       
   313             }
       
   314         case EESMRFieldViewerAttachments:
       
   315             {
       
   316             field = CMRViewerAttachmentsField::NewL();
       
   317             break;
       
   318             }
       
   319         case EESMRFieldCalendarName:
       
   320         	{
       
   321         	field = CMRMultiCalenField::NewL();
       
   322         	break;
       
   323         	}
       
   324                
       
   325         default:
       
   326             {
       
   327             MESMRFieldBuilder* extension = FieldBuilderExtensionL();
       
   328             if ( extension )
       
   329                 {
       
   330                 field = extension->CreateViewerFieldL(
       
   331                         aResponseObserver,
       
   332                         aField,
       
   333                         aResponseReady );
       
   334                 }
       
   335             }
       
   336             break;
       
   337         }
       
   338 
       
   339     __ASSERT_ALWAYS( field, Panic(EInvalidFieldId) );
       
   340     // Set field mode
       
   341     field->SetFieldMode( EESMRFieldModeView );
       
   342 
       
   343     return field;
       
   344     }
       
   345 
       
   346 // ---------------------------------------------------------------------------
       
   347 // CESMRFieldBuilderPlugin::FieldBuilderExtensionL()
       
   348 // ---------------------------------------------------------------------------
       
   349 //
       
   350 MESMRFieldBuilder* CESMRFieldBuilderPlugin::FieldBuilderExtensionL()
       
   351     {
       
   352     FUNC_LOG;
       
   353     if(!iFieldExtension)
       
   354         {
       
   355         LoadExtensionL();
       
   356         }
       
   357 
       
   358     return iFieldExtension;
       
   359     }
       
   360 
       
   361 // ---------------------------------------------------------------------------
       
   362 // CESMRFieldBuilderPlugin::LoadExtensionL()
       
   363 // ---------------------------------------------------------------------------
       
   364 //
       
   365 void CESMRFieldBuilderPlugin::LoadExtensionL()
       
   366     {
       
   367     FUNC_LOG;
       
   368     CESMRFieldBuilderInterface* extension = NULL;
       
   369 
       
   370     TRAPD(error,
       
   371             extension = CESMRFieldBuilderInterface::CreatePluginL(
       
   372                     TUid::Uid(KESMRUIFieldBuilderPluginExtensionImplUId) ) );
       
   373 
       
   374     if ( error == KErrNone && extension )
       
   375         {
       
   376         delete iExtension;
       
   377         iExtension = extension;
       
   378         iFieldExtension = iExtension->FieldBuilderL();
       
   379         }
       
   380 
       
   381     }
       
   382 //EOF
       
   383