diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txtstyl_8cpp_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txtstyl_8cpp_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,326 @@ + + + + +TB9.2 Example Applications: examples/AppFramework/txtshell/txtstyl.cpp Source File + + + + + +

examples/AppFramework/txtshell/txtstyl.cpp

00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+00002 // All rights reserved.
+00003 // This component and the accompanying materials are made available
+00004 // under the terms of "Eclipse Public License v1.0"
+00005 // which accompanies this distribution, and is available
+00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
+00007 //
+00008 // Initial Contributors:
+00009 // Nokia Corporation - initial contribution.
+00010 //
+00011 // Contributors:
+00012 //
+00013 // Description:
+00014 //
+00015 
+00016 #include "txtexamp.h"
+00017 
+00018 #include <txtrich.h>
+00019 
+00020 CStyleControl::~CStyleControl()
+00021         {
+00022         delete iTextView; // text view
+00023         delete iLayout; // layout
+00024         delete iRichText; // contained text object
+00025         delete iNormalCharFormatLayer; // char format layer
+00026         delete iNormalParaFormatLayer; // para format layer
+00027         }
+00028 
+00029 void CStyleControl::CreateNormalL()
+00030         {
+00031         // Create the "Normal" style 
+00032         // = the global format layers upon which all styles will be based.
+00033         // Use default formatting except for an increased left margin and line spacing.
+00034         CParaFormat* paraFormat=CParaFormat::NewLC();
+00035         TParaFormatMask paraFormatMask;
+00036         paraFormat->iLeftMarginInTwips=360;
+00037         paraFormatMask.SetAttrib(EAttLeftMargin);
+00038         paraFormat->iLineSpacingInTwips=300;
+00039         paraFormatMask.SetAttrib(EAttLineSpacing);
+00040         // Create the normal (global) style
+00041         iNormalParaFormatLayer=CParaFormatLayer::NewL(paraFormat,paraFormatMask);
+00042         CleanupStack::PopAndDestroy();  // paraFormat
+00043         TCharFormat charFormat;
+00044         TCharFormatMask charFormatMask;
+00045         charFormatMask.SetAttrib(EAttFontHeight);
+00046         iNormalCharFormatLayer=CCharFormatLayer::NewL(charFormat,charFormatMask); 
+00047         }
+00048 
+00049 void CStyleControl::CreateStylesL()
+00050         {
+00051         // Create two new styles, with names "Warning" and "ListBullet", 
+00052         // add some appropriate formatting and append them to a style list.
+00053         _LIT(KStyle,"Warning");
+00054         _LIT(KStyleTwo,"ListBullet");
+00055         CParaFormat* paraFormat=CParaFormat::NewLC();
+00056         TParaFormatMask paraFormatMask;
+00057         TCharFormat charFormat;
+00058         TCharFormatMask charFormatMask;
+00059         // Style 1 - "Warning style"
+00060         iStyleOne=CParagraphStyle::NewL(
+00061                 *iNormalParaFormatLayer,*iNormalCharFormatLayer); // Base it on the "normal" layers
+00062 
+00063         // Enclose text in a paragraph border
+00064         TParaBorder paraBorder;
+00065         paraBorder.iLineStyle=TParaBorder::ESolid;
+00066         paraBorder.iThickness=4; // border width
+00067         paraBorder.iColor=KRgbGray; // set border color to gray
+00068         paraBorder.iAutoColor=EFalse; // iColor overrides text color
+00069         paraFormat->SetParaBorderL(CParaFormat::EParaBorderTop,paraBorder);
+00070         paraFormat->SetParaBorderL(CParaFormat::EParaBorderBottom,paraBorder);
+00071         paraFormat->SetParaBorderL(CParaFormat::EParaBorderLeft,paraBorder);
+00072         paraFormat->SetParaBorderL(CParaFormat::EParaBorderRight,paraBorder);
+00073         paraFormatMask.SetAttrib(EAttTopBorder);
+00074         paraFormatMask.SetAttrib(EAttBottomBorder);
+00075         paraFormatMask.SetAttrib(EAttRightBorder);
+00076         paraFormatMask.SetAttrib(EAttLeftBorder);
+00077         iStyleOne->SetL(paraFormat,paraFormatMask); 
+00078         // Make it bold.
+00079         // First, get handle to style 1's character format layer
+00080         CCharFormatLayer* charStyleFormatLayer = iStyleOne->CharFormatLayer(); 
+00081         charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+00082         charFormatMask.SetAttrib(EAttFontStrokeWeight);
+00083         // Set the style's character format layer
+00084         charStyleFormatLayer->SetL(charFormat,charFormatMask);
+00085         // Finally, set its name to "Warning"
+00086         iStyleOne->iName=KStyle;
+00087 
+00088         // Style 2 - "listbullet"
+00089         paraFormat->Strip(); // Clear paraformat ready for new style
+00090         paraFormatMask.ClearAll(); // Clear mask
+00091         iStyleTwo=CParagraphStyle::NewL(
+00092                 *iNormalParaFormatLayer,*iNormalCharFormatLayer);  // Base it on the "normal" layers
+00093         paraFormat->iBullet=new(ELeave)TBullet; 
+00094         paraFormat->iBullet->iHeightInTwips=480; // Size of bullet point character=480 twips
+00095         paraFormat->iBullet->iHangingIndent=ETrue; // Indent the rest of the paragraph from the bullet
+00096         paraFormatMask.SetAttrib(EAttBullet);
+00097         iStyleTwo->SetL(paraFormat,paraFormatMask); 
+00098         // Finally, set its name to "ListBullet"
+00099         iStyleTwo->iName=KStyleTwo;
+00100 
+00101         // Create style table and insert styles.
+00102         iStyleList=CStyleList::NewL();
+00103         RParagraphStyleInfo info1(iStyleOne);
+00104         RParagraphStyleInfo info2(iStyleTwo);
+00105         iStyleList->AppendL(&info1);
+00106         iStyleList->AppendL(&info2);
+00107         // Create rich text object based on normal layers, with the style table.
+00108         iRichText=CRichText::NewL(iNormalParaFormatLayer,iNormalCharFormatLayer,*iStyleList);
+00109         CleanupStack::PopAndDestroy();  // paraFormat
+00110 }
+00111 
+00112 void CStyleControl::UpdateModelL()
+00113         {
+00114         // Create all constant literal descriptors used in this function, 
+00115         // e.g. for message text
+00116         _LIT(KText1,"Some text using normal style");
+00117         _LIT(KText2,"Text in warning style - based on normal");
+00118         _LIT(KText3,"Text in list bullet style");
+00119         _LIT(KText4,"Some more text in list bullet style");
+00120         _LIT(KText5,"Some text in italics");
+00121         _LIT(KStatus0,"Initialised styles and view");
+00122         _LIT(KStatus1,"Normal");
+00123         _LIT(KStatus2,"Warning style");
+00124         _LIT(KStatus3,"List bullet style");
+00125         _LIT(KStatus4,"Character and paragraph formatting applied to styled text");
+00126         _LIT(KStatus5,"All specific formatting removed from third paragraph");
+00127         _LIT(KStatus6,"Inserted some normal text with specific formatting");
+00128         _LIT(KStatus7,"Applied a style (warning) to text, retaining specific formatting");
+00129         _LIT(KStatus8,"Reset();");
+00130         _LIT(KStatusDefault,"(overshot!!)");
+00131 
+00132                 
+00133         switch (Phase())
+00134                 {
+00135         // Apply paragraph styles
+00136         case 0:
+00137                 {
+00138                 // Create the global format layers on which all styles are based.
+00139                 CreateNormalL();        
+00140                 // Create text object and styles.
+00141                 CreateStylesL();        
+00142                 // Prerequisites for view - viewing rectangle
+00143                 iViewRect=Rect();
+00144                 iViewRect.Shrink(3,3);
+00145                 // context and device
+00146                 CWindowGc& gc=SystemGc(); // get graphics context
+00147                 CBitmapDevice* device=(CBitmapDevice*) (gc.Device()); // device
+00148                 // layout
+00149                 iLayout=CTextLayout::NewL(iRichText,iViewRect.Width()); // new layout
+00150                         // construct layout, giving width of viewing rectangle
+00151                 // text view
+00152                 iTextView=CTextView::NewL(iLayout, iViewRect,
+00153                         device,
+00154                         device,
+00155                         &Window(),
+00156                         0, // no window group
+00157                         &iCoeEnv->WsSession()
+00158                         );
+00159                 iFormObserver->NotifyStatus(KStatus0);
+00160                 break;
+00161                 }
+00162         case 1:
+00163                 // Set some character formatting - applied globally
+00164                 iCharFormatMask.SetAttrib(EAttFontStrokeWeight);  
+00165                 
+00166                 iCharFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+00167 
+00168                 // apply formatting - pos and length are irrelevent
+00169                 iRichText->ApplyCharFormatL(iCharFormat,iCharFormatMask, 0,0);
+00170                 
+00171                 // Insert a paragraph using the "normal" (default) formatting.
+00172                 iRichText->InsertL(0,KText1);
+00173                 iRichText->InsertL(iRichText->DocumentLength(),
+00174                         CEditableText::EParagraphDelimiter); 
+00175                 iFormObserver->NotifyStatus(KStatus1);
+00176                 break;
+00177         case 2:
+00178                 {
+00179                 // Insert a paragraph in "warning" style
+00180                 TInt length;
+00181                 TInt startPos;
+00182                 iRichText->InsertL(iRichText->DocumentLength(),KText2);
+00183                 iRichText->InsertL(iRichText->DocumentLength(),
+00184                         CEditableText::EParagraphDelimiter); 
+00185                 // Get start position of second paragraph
+00186                 startPos=iRichText->CharPosOfParagraph(length,1); // Not interested in length
+00187                 // Apply warning style to second paragraph - single character is enough
+00188                 iRichText->ApplyParagraphStyleL(*iStyleList->At(0).iStyle,startPos,1,
+00189                         CParagraphStyle::ERetainAllSpecificFormats);
+00190                 iFormObserver->NotifyStatus(KStatus2);
+00191                 break;
+00192                 }
+00193         case 3:
+00194         // Insert two paragraphs in list bullet style
+00195                 {
+00196                 TInt length;
+00197                 TInt startPos;
+00198                 // Insert some text in bullet point style
+00199                 iRichText->InsertL(iRichText->DocumentLength(),KText3);
+00200                 iRichText->InsertL(iRichText->DocumentLength(),
+00201                         CEditableText::EParagraphDelimiter); 
+00202                                 // end para
+00203                 iRichText->InsertL(iRichText->DocumentLength(),KText4);
+00204                 iRichText->InsertL(iRichText->DocumentLength(),
+00205                         CEditableText::EParagraphDelimiter);
+00206                                 // end para
+00207                 // Get start position and length of third paragraph
+00208                 startPos=iRichText->CharPosOfParagraph(length,2); // Interested in length
+00209                 // Apply list bullet style to 3rd and 4th paragraphs, 
+00210                 // from start of para 2, for length of para2 + 1 characters.
+00211                 iRichText->ApplyParagraphStyleL(*iStyleList->At(1).iStyle,startPos,length+1,
+00212                         CParagraphStyle::ERetainAllSpecificFormats);
+00213                 iFormObserver->NotifyStatus(KStatus3);
+00214                 break;
+00215                 }
+00216         case 4:
+00217                 // Apply character and paragraph formatting 
+00218                 // (underlining and right alignment) over a style
+00219                 {
+00220                 TInt startPos, length;
+00221                 // Get start pos and length of third paragraph
+00222                 startPos=iRichText->CharPosOfParagraph(length,2); 
+00223                 // set underlining
+00224                 TCharFormat charFormat;
+00225                 TCharFormatMask charFormatMask;
+00226                 charFormat.iFontPresentation.iUnderline=EUnderlineOn; 
+00227                 charFormatMask.SetAttrib(EAttFontUnderline); // interested in underlining
+00228                 // Apply character formatting, from start of para for para length 
+00229                 // minus one char (don't want trailing paragraph delimiter underlined)
+00230                 iRichText->ApplyCharFormatL(charFormat, charFormatMask,startPos,length-1);
+00231                 CParaFormat* paraFormat=CParaFormat::NewL();
+00232                 TParaFormatMask paraFormatMask;
+00233                 paraFormat->iHorizontalAlignment=CParaFormat::ERightAlign; 
+00234                 paraFormatMask.SetAttrib(EAttAlignment);
+00235                 // Apply right alignment to first paragraph. A single character is enough
+00236                 iRichText->ApplyParaFormatL(paraFormat, paraFormatMask,startPos,1);
+00237                 iFormObserver->NotifyStatus(KStatus4);
+00238                 delete paraFormat;
+00239                 break;
+00240                 }
+00241         case 5:
+00242                 // Remove all specific formatting from third para
+00243                 {
+00244                 TInt startPos, length;
+00245                 startPos=iRichText->CharPosOfParagraph(length,2); 
+00246                 // Remove all specific character formatting from the paragraph 
+00247                 iRichText->RemoveSpecificCharFormatL(startPos,length);
+00248                 // Remove all specific para formatting from the paragraph
+00249                 iRichText->RemoveSpecificParaFormatL(startPos,2);
+00250                 iFormObserver->NotifyStatus(KStatus5);
+00251                 break;
+00252                 }
+00253         case 6:
+00254                 // Insert text in italics at the end of the document
+00255                 {
+00256                 TCharFormat charFormat;
+00257                 TCharFormatMask charFormatMask;
+00258                 charFormat.iFontSpec.iFontStyle.SetPosture(EPostureItalic);     
+00259                 charFormatMask.SetAttrib(EAttFontPosture); // interested in italic
+00260                 // Set formatting for all text inserted at this position.
+00261                 iRichText->SetInsertCharFormatL(charFormat,charFormatMask,iRichText->DocumentLength());
+00262                 iRichText->InsertL(iRichText->DocumentLength(),KText5);
+00263                 iRichText->CancelInsertCharFormat(); // "Insert pending" state cancelled
+00264                 iRichText->InsertL(iRichText->DocumentLength(),
+00265                         CEditableText::EParagraphDelimiter); // add a para delimiter at end of paragraph
+00266                 iFormObserver->NotifyStatus(KStatus6);
+00267                 break;
+00268                 }
+00269         case 7:
+00270                 {
+00271                 // Apply a style to text added in previous case; retain all its specific formatting.
+00272                 TInt startPos, length;
+00273                 // Get any document position in the 5th paragraph. Not interested in length.
+00274                 startPos=iRichText->CharPosOfParagraph(length,4);
+00275                 iRichText->ApplyParagraphStyleL(*iStyleList->At(0).iStyle,startPos,1,
+00276                         CParagraphStyle::ERetainAllSpecificFormats);
+00277                 iFormObserver->NotifyStatus(KStatus7);
+00278                 break;
+00279                 }
+00280         case 8:
+00281                 //reset document
+00282                 iRichText->Reset();
+00283                 // message to say what we did
+00284                 iFormObserver->NotifyStatus(KStatus8);
+00285                 break;
+00286         default:
+00287                 iFormObserver->NotifyStatus(KStatusDefault);
+00288                 break;
+00289                 }
+00290         }
+00291 
+00292 void CStyleControl::Draw(const TRect& aRect) const
+00293         {
+00294         // draw surround
+00295         CGraphicsContext& gc=SystemGc(); // context to draw into
+00296         TRect rect=Rect(); // screen boundary
+00297         gc.DrawRect(rect); // outline screen boundary
+00298         rect.Shrink(1,1);
+00299         gc.SetPenColor(KRgbWhite);
+00300         gc.DrawRect(rect);
+00301         rect.Shrink(1,1);
+00302         gc.SetPenColor(KRgbBlack);
+00303         gc.DrawRect(rect);
+00304         // draw editable text - will work unless OOM
+00305         TInt err;
+00306         TRAP(err,iTextView->FormatTextL());
+00307         if (err) return;
+00308         TRAP(err,iTextView->DrawL(aRect));
+00309         }
+00310 
+
+
Generated by  + +doxygen 1.6.2
+ +