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

examples/AppFramework/txtshell/txtview.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 CViewControl::~CViewControl()
+00021         {
+00022         delete iTextView; // text view
+00023         delete iLayout; // text layout
+00024         delete iRichText; // contained text object
+00025         delete iCharFormatLayer; // char format layer
+00026         delete iParaFormatLayer; // para format layer
+00027         delete iBitmap; // line cursor character bitmap
+00028         }
+00029 
+00030 void CViewControl::UpdateModelL()
+00031         {
+00032         // Create all constant literal descriptors used in this function, 
+00033         // e.g. for message text
+00034 
+00035         _LIT(KText1, "To be, or not to be, that is the question; \
+00036 whether 'tis nobler in the mind to suffer the \
+00037 slings and arrows of outrageous fortune, or \
+00038 to stand against a sea of troubles, and by \
+00039 opposing end them."); 
+00040         _LIT(KText4,"Format band set. Num formatted lines=%d");
+00041         _LIT(KText5,"Format band unset. Num formatted lines=%d");
+00042         _LIT(KPathAndFile,"\\resource\\apps\\cursors.mbm");
+00043         _LIT(KCDrive,"\\");
+00044         _LIT(KZDrive,"Z:");
+00045         _LIT(KStatus0,"Initialised - with grey fill colour");
+00046         _LIT(KStatus1,"Added lots of text");
+00047         _LIT(KStatus2,"Selected first paragraph");
+00048         _LIT(KStatus3,"Formatted the selected text (and cancelled selection)");
+00049         _LIT(KStatus6,"Set 20 pixel line cursor margin and 2 cursors");
+00050         _LIT(KStatus7,"Reset the view rectangle - old wrapping still applies");
+00051         _LIT(KStatus8,"Text wrapping set to new view rectangle");
+00052         _LIT(KStatus9,"View rectangle and wrap width reset");
+00053         _LIT(KStatus10,"Horizontal scroll left");
+00054         _LIT(KStatus11,"Scrolling DOWN, blank space NOT scrolled");
+00055         _LIT(KStatus12,"Back to top and horizontal scroll right");
+00056         _LIT(KStatus13,"Reset();");
+00057         _LIT(KStatusDefault,"(overshot!!)");
+00058 
+00059         switch (Phase())
+00060                 {
+00061         case 0:
+00062                 {
+00063                 // Preparation for following cases:
+00064                 TCharFormat charFormat;
+00065                 TCharFormatMask charFormatMask;
+00066                 iUpdateModelDoesRedraw=ETrue; 
+00067                         // NextPhaseL() should call DrawNow() for the first case only
+00068                 // Create rich text object to be displayed in the text view
+00069                 iParaFormatLayer=CParaFormatLayer::NewL(); // required para format
+00070                 iCharFormatLayer=CCharFormatLayer::NewL(); // required char format
+00071                                 // empty text objects
+00072                 iRichText=CRichText::NewL(iParaFormatLayer, iCharFormatLayer);
+00073                 // prerequisites for view - viewing rectangle
+00074                 iViewRect=Rect();
+00075                 iViewRect.Shrink(3,3);
+00076                 // context and device
+00077                 CWindowGc& gc=SystemGc(); // get graphics context
+00078                 CBitmapDevice* device=(CBitmapDevice*) (gc.Device()); // device
+00079                 // Construct the layout object used by the text view,
+00080                 // specifying wrap width (= width of viewing rectangle)
+00081                 iLayout=CTextLayout::NewL(iRichText,iViewRect.Width());
+00082                 // Construct text view
+00083                 iTextView=CTextView::NewL(iLayout, iViewRect,
+00084                         device,
+00085                         device,
+00086                         &Window(),
+00087                         &iCoeEnv->RootWin(), // window group, needed for cursor
+00088                         &iCoeEnv->WsSession()
+00089                         ); // new view
+00090                 // Set paragraph fill color and font height.
+00091                 // For visibility, set font height to 10 point.
+00092                 charFormatMask.SetAttrib(EAttFontHeight); 
+00093                         // height attribute only is relevant
+00094                 charFormat.iFontSpec.iHeight=200; // set to 10 point (200 twips)
+00095                 iRichText->ApplyCharFormatL(charFormat,charFormatMask,0,0);
+00096                 // Apply grey paragraph fill colour 
+00097                 CParaFormat* paraFormat=CParaFormat::NewL();
+00098                 TParaFormatMask paraFormatMask;
+00099                 paraFormat->iFillColor=TRgb(204,204,204); // Light grey
+00100                 paraFormatMask.SetAttrib(EAttFillColor);
+00101                         // fill colour attribute only is relevant
+00102                 iRichText->ApplyParaFormatL(paraFormat,paraFormatMask,0,0);
+00103                 iTextView->FormatTextL();
+00104                 iFormObserver->NotifyStatus(KStatus0);
+00105                 delete paraFormat;
+00106                 break;
+00107                 }
+00108         case 1:
+00109                 {
+00110                 // Set some character formatting
+00111                 iCharFormatMask.SetAttrib(EAttFontStrokeWeight);  
+00112                 
+00113                 iCharFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+00114 
+00115                 // apply formatting - pos and length are irrelevent
+00116                 iRichText->ApplyCharFormatL(iCharFormat,iCharFormatMask, 0,0);
+00117                 
+00118                 // insert lots of text
+00119                 for (TInt count=0;count<5;count++) // insert a paragraph, *5
+00120                         {       
+00121                         iRichText->InsertL(iRichText->DocumentLength(),KText1); // text
+00122                         iRichText->InsertL(iRichText->DocumentLength(),
+00123                                 CEditableText::EParagraphDelimiter); // end para
+00124                         };
+00125                 TCursorSelection selection(0, iRichText->DocumentLength());
+00126                         // start and length of the inserted block
+00127                 iTextView->HandleInsertDeleteL(selection, 0); 
+00128                         // zero deleted characters 
+00129                 iFormObserver->NotifyStatus(KStatus1);
+00130                 break;
+00131                 }
+00132         case 2:
+00133                 {
+00134                 // Select the first paragraph
+00135                 TInt pos=1;
+00136                 TUint scanMask=CPlainText::EScanToUnitEnd;
+00137                 iRichText->ScanParas(pos,scanMask);
+00138                         // get end position of current para
+00139                 // move cursor to end of para and select it
+00140                 iTextView->SetDocPosL(pos,ETrue); // ETrue = select the range
+00141                 iFormObserver->NotifyStatus(KStatus2);
+00142                 break;
+00143                 }
+00144         case 3:
+00145                 {
+00146                 // Apply italics to the selected region
+00147                 TCursorSelection cursorSelection;
+00148                 TCharFormat charFormat;
+00149                 TCharFormatMask charFormatMask;
+00150                 // Set italics
+00151                 charFormat.iFontSpec.iFontStyle.SetPosture(EPostureItalic); 
+00152                 charFormatMask.SetAttrib(EAttFontPosture); 
+00153                         // font posture attribute only is relevant
+00154                 cursorSelection=iTextView->Selection(); // get range of selection
+00155                 TInt lowerPos=cursorSelection.LowerPos();
+00156                 TInt length=cursorSelection.Length();
+00157                 // Apply formatting to range
+00158                 iRichText->ApplyCharFormatL(charFormat,charFormatMask,lowerPos,length);
+00159                 iTextView->HandleRangeFormatChangeL(cursorSelection); // reformat from here
+00160                 iTextView->CancelSelectionL(); // remove selection and redraw
+00161                 iFormObserver->NotifyStatus(KStatus3);
+00162                 break;
+00163                 }
+00164         case 4:
+00165                 {
+00166                 TBuf<80> message;
+00167                 // Set formatting to the band only and display the number of formatted lines.
+00168                 iLayout->SetAmountToFormat(CTextLayout::EFFormatBand);
+00169                 iTextView->HandleGlobalChangeL(); // global layout change 
+00170                 message.Format(KText4,iLayout->NumFormattedLines());
+00171                 iFormObserver->NotifyStatus(message);
+00172                 break;
+00173                 }
+00174         case 5:
+00175                 {
+00176                 TBuf<80> message;
+00177                 // Set formatting to the whole document, then display the number of 
+00178                 // formatted lines.
+00179                 iLayout->SetAmountToFormat(CTextLayout::EFFormatAllText);
+00180                 iTextView->HandleGlobalChangeL(); // global layout change 
+00181                 message.Format(KText5,iLayout->NumFormattedLines());
+00182                 iFormObserver->NotifyStatus(message);
+00183                 break;
+00184                 }
+00185         case 6:
+00186                 {
+00187                 // Set line cursor margin and line cursor bitmap
+00188                 iTextView->SetMarginWidths(0,20); // zero label margin, 20 pixel line cursor margin
+00189                 iTextView->DrawL(iViewRect); // update the view (SetMarginWidths() doesn't redraw)
+00190                 // Load in bitmap to represent line cursor.
+00191                 iBitmap=new(ELeave) CFbsBitmap();
+00192                 TBufC<40> pathandfile(KPathAndFile);
+00193                 TParse    bitmapFileName;
+00194                 TBufC<2>  c_drive(KCDrive);
+00195                 TBufC<2>  z_drive(KZDrive);
+00196 
+00197             bitmapFileName.Set(pathandfile,&c_drive,NULL);
+00198                 
+00199                 if (iBitmap->Load(bitmapFileName.FullName())) 
+00200                         // can't find cursor bitmap on C: drive, so try Z:
+00201                         {
+00202                         bitmapFileName.Set(pathandfile,&z_drive,NULL);
+00203                         iBitmap->Load(bitmapFileName.FullName());
+00204                         iTextView->SetLineCursorBitmap(iBitmap);
+00205                         iTextView->SetCursorVisibilityL(TCursor::EFCursorVisible,
+00206                                 TCursor::EFCursorFlashing); 
+00207                         // both cursors now visible - flashing text cursor
+00208                         iFormObserver->NotifyStatus(KStatus6);
+00209                         }
+00210                 break;
+00211                 }
+00212         case 7:
+00213                 {
+00214                 // Reset the view rectangle.
+00215                 // Before doing this, clear the existing one,
+00216                 // (the view should really be implemented as a control, in a container control,
+00217                 // and then the background would get cleared nicely by the container).
+00218                 ActivateGc();
+00219                 SystemGc().Clear(iViewRect);
+00220                 DeactivateGc();
+00221                 // Shrink the view rectangle by 40 pixels both directions
+00222                 iViewRect.Shrink(40,40);
+00223                 iTextView->SetViewRect(iViewRect);
+00224                 iTextView->DrawL(iViewRect); // Redraw the completely revamped view 
+00225                         // (SetViewRect() does not do a redraw)
+00226                 iFormObserver->NotifyStatus(KStatus7);
+00227                 break;
+00228                 }
+00229         case 8:
+00230                 {
+00231                 // Wrap text to new view rectangle.
+00232                 // New wrap width = new view rect width minus total margin width.
+00233                 // First calculate the total margin width.
+00234                 TInt labelMarginWidth;
+00235                 TInt lineCursorMarginWidth;
+00236                 iTextView->MarginWidths(labelMarginWidth,lineCursorMarginWidth);
+00237                 iLayout->SetWrapWidth(iViewRect.Width()-(labelMarginWidth+lineCursorMarginWidth));
+00238                 iLayout->ForceNoWrapping(EFalse); // Ensure wrapping on
+00239                 iTextView->HandleGlobalChangeL();
+00240                 iFormObserver->NotifyStatus(KStatus8);
+00241                 break;
+00242                 }
+00243         case 9:
+00244                 {
+00245                 // Reset view rectangle back to old dimensions and set wrapping
+00246                 // width accordingly
+00247                 TInt labelMarginWidth;
+00248                 TInt lineCursorMarginWidth;
+00249                 iTextView->MarginWidths(labelMarginWidth,lineCursorMarginWidth);
+00250                 iViewRect.Grow(40,40);
+00251                         // Increase view rectangle by 40 pixels both directions
+00252                 iTextView->SetViewRect(iViewRect);
+00253                 iLayout->SetWrapWidth(iViewRect.Width()-(labelMarginWidth+lineCursorMarginWidth));
+00254                 iTextView->HandleGlobalChangeL();
+00255                 iFormObserver->NotifyStatus((KStatus9));
+00256                 break;
+00257                 }
+00258         case 10:
+00259                 // Horizontal scrolling
+00260                 iTextView->SetHorizontalScrollJump(40); // scroll jump is 40 pixels
+00261                 iTextView->ScrollDisplayL(TCursorPosition::EFLeft,CTextLayout::EFAllowScrollingBlankSpace); 
+00262                         // scroll to the left (scrolling blank space is allowed)
+00263                 iFormObserver->NotifyStatus(KStatus10);
+00264                 break;
+00265         case 11:
+00266                 {
+00267                 // Vertical scrolling
+00268                 iFormObserver->NotifyStatus(KStatus11);
+00269                 TInt pixelsScrolled;
+00270                 // Scroll down to the bottom of the document, 
+00271                 do
+00272                         pixelsScrolled=iTextView->ScrollDisplayL(TCursorPosition::EFLineDown,
+00273                                 CTextLayout::EFDisallowScrollingBlankSpace);
+00274                 while (pixelsScrolled);
+00275                 break;
+00276                 }
+00277         case 12:
+00278                 {
+00279                 // Horizontal scroll back to left margin and to top of doc
+00280                 iFormObserver->NotifyStatus(KStatus12);
+00281                 TInt pixelsScrolled;
+00282                 do
+00283                         pixelsScrolled=iTextView->ScrollDisplayL(TCursorPosition::EFLineUp);            
+00284                 while (pixelsScrolled);
+00285                 iTextView->ScrollDisplayL(TCursorPosition::EFRight); 
+00286                         // scroll right (horizontal scroll jump value=40 pixels)
+00287                 break;
+00288                 }
+00289         case 13:
+00290                 {
+00291                 // Reset document. 
+00292                 iRichText->Reset(); // change whole document!
+00293                 iTextView->FormatTextL(); // so format the whole lot
+00294                 iTextView->DrawL(iViewRect); // and draw it afresh
+00295                 iFormObserver->NotifyStatus(KStatus13);
+00296                 break;
+00297                 }
+00298         default:
+00299                 iFormObserver->NotifyStatus(KStatusDefault);
+00300                 break;
+00301                 }
+00302         }
+00303 
+00304 void CViewControl::Draw(const TRect& aRect) const
+00305         {
+00306         // draw surround
+00307         CGraphicsContext& gc=SystemGc(); // context to draw into
+00308         TRect rect=Rect(); // screen boundary
+00309         gc.DrawRect(rect); // outline screen boundary
+00310         rect.Shrink(1,1);
+00311         gc.SetPenColor(KRgbWhite);
+00312         gc.DrawRect(rect);
+00313         rect.Shrink(1,1);
+00314         gc.SetPenColor(KRgbBlack);
+00315         gc.DrawRect(rect);
+00316         // draw editable text - will work unless OOM
+00317         TInt err;
+00318         TRAP(err,iTextView->DrawL(aRect));
+00319         }
+00320 
+
+
Generated by  + +doxygen 1.6.2
+ +