diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txtview_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txtview_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ - - -TB10.1 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 on Thu Jan 21 10:32:54 2010 for TB10.1 Example Applications by  - -doxygen 1.5.3
- -