textandlocutils/numbergrouping/inc/AknPhoneNumberGrouping.h
author hgs
Mon, 12 Jul 2010 15:26:00 +0800
changeset 46 6124ff6478cc
parent 40 91ef7621b7fc
permissions -rw-r--r--
20104_07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     1
/*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     3
* All rights reserved.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     8
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     9
* Initial Contributors:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    11
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    12
* Contributors:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    13
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    14
* Description: 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    15
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    16
*    This class gives feature variant - independent access to Series 60 number grouping 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    17
*    and provides digit type conversion.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    18
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    19
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    20
*/
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    21
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    22
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    23
#ifndef AKNPHONENUMBERGROUPING_H
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    24
#define AKNPHONENUMBERGROUPING_H
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    25
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    26
// INCLUDES
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    27
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    28
#include <e32std.h>
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    29
#include <gdi.h>
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    30
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    31
// CONSTANTS
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    32
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    33
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    34
// CLASS DECLARATION
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    35
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    36
class CPNGNumberGrouping; 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    37
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    38
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    39
/**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    40
* This class acts as a wrapper for the Number Grouping engine (NumberGrouping.dll). 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    41
* It exposes non-static API to the engine so that it can be used without the client code dealing with the
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    42
* issues of
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    43
* - build switches for calling numbergrouping API
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    44
* - build switches for linking to NumberGrouping.lib
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    45
* - checks on Feature Manager.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    46
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    47
* It deals with these internally.  In the case of __SERIES60_PHONE_NUMBER_GROUPING being #undef-ed, this 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    48
* object acts as if there is a "null" phone number grouping.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    49
* 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    50
* Static methods are included for those who are doing a small number of individual groupings of phone numbers, 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    51
* say, when a view or popup is constructed, or a title pane is refreshed. These construct the object 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    52
* internally within the static call.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    53
* 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    54
* The class also deals with the conversion of numbers to potentially locale or setting-
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    55
* specific number symbols, using the Series 60 platform policy.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    56
* 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    57
* For repeated, frequent operations, the non-static API is recommended.  Only a limited number of methods 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    58
* from NumberGrouping.h are exposed, but these suffice in the main use cases.  
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    59
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    60
*  @lib Avkon.dll
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    61
*  @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    62
*/
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    63
NONSHARABLE_CLASS(CAknPhoneNumberGrouping) : public CBase
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    64
    {
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    65
    public:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    66
        // 2 stage constructors
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    67
        IMPORT_C static CAknPhoneNumberGrouping* NewLC(TInt aUnformattedLength);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    68
        IMPORT_C static CAknPhoneNumberGrouping* NewL(TInt aUnformattedLength);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    69
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    70
        // Destructor
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    71
        ~CAknPhoneNumberGrouping();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    72
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    73
    public: // non-static methods for using phone number grouping engine in the simplest cases
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    74
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    75
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    76
        * Load an ungrouped number into the phone number grouping engine
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    77
        * This calls the CPNGNumberGrouping::Set within the engine
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    78
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    79
        * @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    80
        * @param    aUngroupedNumber    input ungrouped phone number
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    81
        * @return                       KErrNone if there was no error                   
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    82
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    83
        IMPORT_C TInt Set( const TDesC& aUngroupedNumber );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    84
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    85
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    86
        * Returns a reference to the formatted number stored within the number grouping engine
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    87
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    88
        * NOTE: This api does not convert to current digit type. This requires a method that takes
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    89
        * a modifiable descriptor, so use CopyFormattedNumber( TDes& ) const
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    90
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    91
        * This method is particularly useful for obtaining the size of the required buffer to copy 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    92
        * the grouped phone number to by calling FormattedNumber.Length()
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    93
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    94
        * @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    95
        * @return   reference to internally held formatted (grouped) phone number
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    96
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    97
	    IMPORT_C const TDesC& FormattedNumber() const;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    98
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    99
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   100
        * Copies the grouped phone number stored in the object to the supplied output buffer, 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   101
        * performing any current digit type conversion required.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   102
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   103
        * The length required for the supplied output descriptor must be greater or equal to the text waiting
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   104
        * to be copied out of the instance.  This can be determined before the call with no loss of 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   105
        * performance with FormattedNumber().Length();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   106
        *       
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   107
        * The application will be Panicked (USER 11) if the output descriptor is too short.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   108
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   109
        * @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   110
        * @param    aGroupedNumber      Output (grouped) descriptor to be written to.  To avoid a panic, this
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   111
        *                               must be at least as big as the formatted number currently stored.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   112
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   113
	    IMPORT_C void CopyFormattedNumber( TDes& aGroupedNumber ) const;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   114
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   115
    public: // Static utility methods for doing the one-off grouping of phone numbers
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   116
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   117
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   118
        * Static utility method for doing one-off grouping of a phone number according to the current
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   119
        * configuration.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   120
        * 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   121
        * The method Leaves if the number grouping engine could not be allocated, or the output heap memory
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   122
        * could not be allocated.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   123
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   124
        * @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   125
        * @param    aUngroupedNumber    Input descriptor to be grouped
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   126
        * @return                       Pointer to heap descriptor containing the grouped number
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   127
        *                               Ownership is transferred to the caller
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   128
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   129
        IMPORT_C static HBufC* CreateGroupedPhoneNumberL( const TDesC& aUngroupedNumber );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   130
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   131
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   132
        * Static utility method for doing one-off grouping of a phone number according to the current
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   133
        * configuration.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   134
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   135
        * The operations are internally trapped so as not to leave. The grouped number must fit into output
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   136
        * descriptor, or else no grouping will take place and the input will just be copied to the output.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   137
        * A negative return value will indicate that the output did not fit, and by how much.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   138
        * 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   139
        * The application will be Panicked (USER 11) if the output descriptor is too short even for an exact
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   140
        * copy of the input.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   141
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   142
        * @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   143
        * @param    aUngroupedNumber    Input descriptor to be grouped
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   144
        * @param    aGroupedNumber      Output (grouped) descriptor to be written to
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   145
        * @return                       If the entire grouped number could be copied to the output, then the
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   146
        *                               returned number is zero or positive. This number represents the number
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   147
        *                               of further characters in the grouped number that could have been accomodated.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   148
        *                               A negative return value indicates that the grouped number could not be
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   149
        *                               copied, and that the ungrouped number had to be copied. The magnitude
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   150
        *                               of the return value in this case is how many more characters would have
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   151
        *                               been needed.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   152
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   153
        IMPORT_C static TInt GroupPhoneNumber( const TDesC& aUngroupedNumber, TDes& aGroupedNumber );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   154
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   155
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   156
        * Static utility method for doing one-off grouping of a phone number according to the current
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   157
        * configuration.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   158
        * 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   159
        * The operations are internally trapped so as not to leave. The grouped number must fit into the one, 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   160
        * input/output descriptor, or else no grouping will take place. A negative return value indicates that the
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   161
        * grouped number did not fit. 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   162
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   163
        * @since 2.6
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   164
        * @param    aUngroupedNumber    Input descriptor to be grouped
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   165
        * @return                       If the entire grouped number could be copied to the output, then the
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   166
        *                               returned number is zero or positive. This number represents the number
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   167
        *                               of further characters in the grouped number that could have been accomodated.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   168
        *                               A negative return value indicates that the grouped number could not be
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   169
        *                               copied, and that the ungrouped number had to be copied. The magnitude
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   170
        *                               of the return value in this case is how many more characters would have
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   171
        *                               been needed.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   172
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   173
        IMPORT_C static TInt GroupPhoneNumber( TDes& aPhoneNumber );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   174
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   175
    private:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   176
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   177
        * C++ constructor.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   178
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   179
        CAknPhoneNumberGrouping();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   180
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   181
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   182
        * 2nd phase constructor is private.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   183
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   184
        void ConstructL( TInt aUnformattedLength );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   185
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   186
        /**
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   187
        * Internal method for creating a phone number grouping engine and copying out the result to an 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   188
        * output buffer. 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   189
        *
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   190
        * The creation of the engine may leave, in which case nothing else happens. But if it does not
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   191
        * leave, an attempt will be made to copy the grouped phone number to aGroupedPhoneNumber.  
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   192
        * If there is enough space, it is copied and the amount of space in characters left over in 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   193
        * the target buffer is returned.  If it does not fit, then there is no copy made and the 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   194
        * aExtraSpace contains a negative value, the additional length required.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   195
        * 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   196
        * @param    aUngroupedNumber    Input descriptor containing a phone number        
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   197
        * @param    aGroupedNumber      Output descriptor for the grouped phone number
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   198
        * @param    aExtraSpace         How much extra space there was in the output descriptor
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   199
        * @return   EFalse iff the grouped phone number was not copied.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   200
        */
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   201
        static TBool DoFormatPhoneNumberL( 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   202
            const TDesC& aUngroupedNumber,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   203
            TDes& aGroupedNumber,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   204
            TInt& aExtraSpace);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   205
 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   206
    private:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   207
        // Owned number grouping engine
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   208
        CPNGNumberGrouping* iNumberGroupingEngine;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   209
        };
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   210
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   211
#endif
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   212
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   213
// End of File