examples/QtQuick/descriptors/stringrenderer_symbian.cpp

00001 /****************************************************************************
00002 **
00003 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
00004 ** All rights reserved.
00005 ** Contact: Nokia Corporation
00006 **
00007 **
00008 ** $QT_BEGIN_LICENSE:BSD$
00009 ** You may use this file under the terms of the BSD license as follows:
00010 **
00011 ** "Redistribution and use in source and binary forms, with or without
00012 ** modification, are permitted provided that the following conditions are
00013 ** met:
00014 **   * Redistributions of source code must retain the above copyright
00015 **     notice, this list of conditions and the following disclaimer.
00016 **   * Redistributions in binary form must reproduce the above copyright
00017 **     notice, this list of conditions and the following disclaimer in
00018 **     the documentation and/or other materials provided with the
00019 **     distribution.
00020 **   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
00021 **     the names of its contributors may be used to endorse or promote
00022 **     products derived from this software without specific prior written
00023 **     permission.
00024 **
00025 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00026 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00027 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00028 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00029 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00030 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00031 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00032 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00033 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00034 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00035 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
00036 ** $QT_END_LICENSE$
00037 **
00038 ****************************************************************************/
00039 
00040 
00041 // User Include.
00042 #include "stringrenderer_symbian.h"
00043 
00049 void Append( const TDesC8 &aSrc, TDes16 &aDst )
00050     {
00051     for( TInt i=0; i < aSrc.Length(); i++ )
00052         {
00053         aDst.Append(aSrc[i]);
00054         }
00055     }
00056 
00057 void Append( const TDesC16 &aSrc, TDes16 &aDst )
00058     {
00059     aDst.Append( aSrc );
00060     }
00067 template <class TDESC>
00068 LOCAL_C void RenderAsNumbersTemplated( const TDESC &anArray, TDes16 &aOutput )
00069     {
00070     aOutput.Append('{');
00071     for( TInt i=0; i < anArray.Length(); i++ )
00072         {
00073         if( i>0 )
00074             {
00075             aOutput.Append(',');
00076             }
00077         aOutput.AppendNum( (TInt) anArray[i] );
00078         }
00079     aOutput.Append('}');
00080     }
00081 
00082 void RenderAsNumbers( const TDesC8 &anArray, TDes16 &aOutput )
00083 {
00084     RenderAsNumbersTemplated(anArray, aOutput);
00085 }
00086 
00087 void RenderAsNumbers( const TDesC16 &anArray, TDes16 &aOutput )
00088 {
00089     RenderAsNumbersTemplated(anArray, aOutput);
00090 }
00091 
00099 template <class DESC>
00100 LOCAL_C void RenderDescriptorContent( const DESC &aVariable,
00101                                       TDes16 &aOutput,
00102                                       TInt aRenderFormat=KRenderDefault )
00103     {
00104     if( aRenderFormat & KRenderContentAsBinary )
00105         { // render as numbers
00106         RenderAsNumbers( aVariable, aOutput );
00107         }
00108     else
00109         { // render as string
00110         aOutput.Append('"');
00111         Append(aVariable, aOutput);
00112         aOutput.Append('"');
00113         }
00114     }
00120 _LIT( KTDesCCharacteristicsFormat, "(len=%d)" );
00121 _LIT( KTDesCharacteristicsFormat,  "(len=%d, maxlen=%d)" );
00122 
00123 void RenderObject(const TDesC8 &aVariable, TDes16 &aOutput, TInt aRenderFormat)
00124     {
00125     RenderDescriptorContent( aVariable, aOutput, aRenderFormat );
00126     if( aRenderFormat & KRenderCharacteristics )
00127         {
00128         aOutput.Append(' ');
00129         aOutput.AppendFormat( KTDesCCharacteristicsFormat, aVariable.Length() );
00130         }
00131     }
00132 
00133 void RenderObject(const TDes8 &aVariable, TDes16 &aOutput, TInt aRenderFormat)
00134     {
00135     RenderDescriptorContent( aVariable, aOutput, aRenderFormat );
00136     if( aRenderFormat & KRenderCharacteristics )
00137         {
00138         aOutput.Append(' ');
00139         aOutput.AppendFormat( KTDesCharacteristicsFormat, aVariable.Length(),
00140             aVariable.MaxLength() );
00141         }
00142     }
00143 
00144 void RenderObject(const TDesC16 &aVariable, TDes16 &aOutput, TInt aRenderFormat)
00145     {
00146     RenderDescriptorContent( aVariable, aOutput, aRenderFormat );
00147     if( aRenderFormat & KRenderCharacteristics )
00148         {
00149         aOutput.Append(' ');
00150         aOutput.AppendFormat( KTDesCCharacteristicsFormat, aVariable.Length() );
00151         }
00152     }
00153 
00154 void RenderObject(const TDes16 &aVariable, TDes16 &aOutput, TInt aRenderFormat)
00155     {
00156     RenderDescriptorContent( aVariable, aOutput, aRenderFormat );
00157     if( aRenderFormat & KRenderCharacteristics )
00158         {
00159         aOutput.Append(' ');
00160         aOutput.AppendFormat( KTDesCharacteristicsFormat,
00161                               aVariable.Length(),
00162                               aVariable.MaxLength() );
00163         }
00164     }
00165 
00166 void RenderObject(const TInt &aVariable,
00167                   TDes16 &aOutput,
00168                   TInt /*aRenderFormat*/ )
00169     {
00170     aOutput.AppendNum( aVariable );
00171     }
00172 
00178 void RenderHeader(const TDesC &aHeader, TDes &aOutput)
00179     {
00180     _LIT( KFormat, "\n--- %S ---\n" );
00181     TInt spaceAvailable = aOutput.MaxLength() - aOutput.Length();
00182     if( spaceAvailable >=
00183             aHeader.Length() +
00184             KFormat().Length()-2 ) // "%S" is replaced with header text
00185         {
00186         aOutput.AppendFormat( KFormat, &aHeader );
00187         }
00188     }

Generated by  doxygen 1.6.2