diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txtglob_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txtglob_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,363 @@ + + +TB10.1 Example Applications: examples/AppFramework/txtshell/txtglob.cpp Source File + + + + +

examples/AppFramework/txtshell/txtglob.cpp

00001 // Copyright (c) 1997-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 <fldset.h>
+00019 #include <fldbase.h>
+00020 #include <fldbltin.h>
+00021 #include <flddef.h>
+00022 
+00023 //
+00024 // field factory
+00025 //
+00026 
+00027 class TExampleFieldFactory : public MTextFieldFactory
+00028         // A text field factory. 
+00029         // It creates date/time fields only.
+00030         {
+00031 public:
+00032         virtual CTextField* NewFieldL(TUid aFieldType);
+00033         };
+00034 
+00035 CTextField* TExampleFieldFactory::NewFieldL(TUid aFieldType)
+00036         {
+00037         CTextField* field = NULL; // NULL keeps GCC compiler happy 
+00038         // Factory only produces date time fields, if aFieldType is 
+00039         // not a date time field type, do nothing.
+00040         if (aFieldType==KDateTimeFieldUid)
+00041                 field = (CTextField*)new(ELeave) CDateTimeField();
+00042         return field;
+00043         }
+00044 
+00045 //
+00046 // CGlobalControl implementation
+00047 //
+00048 
+00049 CGlobalControl::~CGlobalControl()
+00050         {
+00051         delete iTextView; // text view
+00052         delete iLayout; // layout
+00053         delete iGlobalText; // contained text object
+00054         delete iCharFormatLayer; // char format layer
+00055         delete iParaFormatLayer; // and para format layer
+00056         }
+00057 
+00058 void CGlobalControl::UpdateModelL()
+00059         {
+00060         // Create all constant literal descriptors used in this function, 
+00061         // e.g. for message text
+00062         _LIT(KPath,"\\globtxt.dat");
+00063         _LIT(KText1,"Some global text.");
+00064         _LIT(KText5, "To be, or not to be, that is the question; \
+00065 whether 'tis nobler in the mind to suffer the \
+00066 slings and arrows of outrageous fortune, or \
+00067 to stand against a sea of troubles, and by \
+00068 opposing end them."); 
+00069         _LIT(KText6,"Word at pos %d (\"%S\") has %d characters, starts at pos %d");
+00070         _LIT(KText2," And some more global text.");
+00071         _LIT(KText3,"A new paragraph.");
+00072         _LIT(KText4,"Number of characters=%d, words=%d, paras=%d");
+00073         _LIT(KText8,"%D%M%Y%H:%T:%S %1/%2/%3");
+00074         _LIT(KStatus0,"Initialised global text object and text view");
+00075         _LIT(KStatus1,"InsertL() at position zero");
+00076         _LIT(KStatus2,"InsertL() at end of document");
+00077         _LIT(KStatus3,"Insert new paragraph, and more text");
+00078         _LIT(KStatus5,"Inserted lots of text");
+00079         _LIT(KStatus7,"Inserted date time field");
+00080         _LIT(KStatus8,"Centre aligned paragraphs");
+00081         _LIT(KStatus9,"Set bold, italic and underline (and updated the field)");
+00082         _LIT(KStatus10,"Used StoreL() to store text and fields");
+00083         _LIT(KStatus12,"Used RestoreL() to restore text and fields");
+00084         _LIT(KStatus13,"Deleted lots of text");
+00085         _LIT(KStatus14,"Paragraph and character formatting reset to default values");
+00086         _LIT(KStatusReset,"Reset();");
+00087         _LIT(KStatusDefault,"(Overshot!!)");
+00088 
+00089         TBufC<28>   name(KPath);
+00090         
+00091         switch (Phase())
+00092                 {
+00093         case 0:
+00094                 {
+00095                 // Create text object, text view and layout.
+00096                 iParaFormatLayer=CParaFormatLayer::NewL(); // required para format layer
+00097                 iCharFormatLayer=CCharFormatLayer::NewL(); // required char format layer
+00098                 // Create an empty global text object
+00099                 iGlobalText=CGlobalText::NewL(iParaFormatLayer, iCharFormatLayer);
+00100                 // prerequisites for view - viewing rectangle
+00101                 iViewRect=Rect();
+00102                 iViewRect.Shrink(3,3);
+00103                 // context and device
+00104                 CWindowGc& gc=SystemGc(); // get graphics context
+00105                 CBitmapDevice *device=(CBitmapDevice*) (gc.Device()); // device
+00106                 // Create the text layout, (required by text view),
+00107                 // with the text object and a wrap width (=width of view rect)
+00108                 iLayout=CTextLayout::NewL(iGlobalText,iViewRect.Width());
+00109                 // Create text view
+00110                 iTextView=CTextView::NewL(iLayout, iViewRect,
+00111                                 device,
+00112                                 device,
+00113                                 &Window(),
+00114                                 0, // no window group
+00115                                 &iCoeEnv->WsSession()
+00116                                 ); // new view
+00117                 // message to say what we did
+00118                 iFormObserver->NotifyStatus(KStatus0);
+00119                 break;
+00120                 }
+00121         case 1:
+00122                 // Set some character formatting - applied globally
+00123                 iCharFormatMask.SetAttrib(EAttFontStrokeWeight); // set weight (for bold)
+00124 
+00125                 // Set bold     
+00126                 iCharFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+00127 
+00128                 // apply formatting - pos and length are irrelevent
+00129                 iGlobalText->ApplyCharFormatL(iCharFormat,iCharFormatMask, 0,0);
+00130                 
+00131                 // Insert some text
+00132                 iGlobalText->InsertL(0,KText1);
+00133                 iFormObserver->NotifyStatus(KStatus1);
+00134                 break;
+00135         case 2:
+00136                 // Insert some more text
+00137                 iGlobalText->InsertL(iGlobalText->LdDocumentLength(),KText2);
+00138                 iFormObserver->NotifyStatus(KStatus2);
+00139                 break;
+00140         case 3:
+00141                 // Insert a new paragraph
+00142                 iGlobalText->InsertL(iGlobalText->LdDocumentLength(),CEditableText::EParagraphDelimiter);
+00143                 // Insert text to follow new paragraph delimiter
+00144                 iGlobalText->InsertL(iGlobalText->LdDocumentLength(),KText3);
+00145                 iFormObserver->NotifyStatus(KStatus3);
+00146                 break;
+00147         case 4:
+00148                 {
+00149                 // Display document info in status message
+00150                 TBuf<80> message; // for formatting status messages
+00151                 message.Format(KText4,
+00152                                 iGlobalText->LdDocumentLength(),
+00153                                                 // length up to and excluding final para mark
+00154                                 iGlobalText->WordCount(), // white-space delimited words
+00155                                 iGlobalText->ParagraphCount() // number paras including the final one
+00156                                 );
+00157                 iFormObserver->NotifyStatus(message);
+00158                 break;
+00159                 }
+00160         case 5:
+00161                 // Insert lots of text
+00162                 iGlobalText->InsertL(iGlobalText->LdDocumentLength(),CEditableText::EParagraphDelimiter);
+00163                 iGlobalText->InsertL(iGlobalText->LdDocumentLength(),KText5);
+00164                 iFormObserver->NotifyStatus(KStatus5);
+00165                 break;
+00166         case 6:
+00167                 {
+00168                 // Display information about a random document position
+00169                 TBuf<80> message; // for formatting status messages
+00170                 // Print info about word at a document position
+00171                 TInt pos=iGlobalText->LdDocumentLength()/2;
+00172                 TInt startPos, length; // results of function
+00173                 iGlobalText->GetWordInfo(pos,startPos,length,EFalse,ETrue);
+00174                                 // gets startPos and length, given pos
+00175                 // Insert all text into buffer from startPos (start of word at 
+00176                 // position pos) onwards
+00177                 TPtrC ptr=iGlobalText->Read(startPos,length); 
+00178                 // Print out word and word info
+00179                 message.Format(KText6, pos, &ptr, length, startPos);
+00180                 iFormObserver->NotifyStatus(message);
+00181                 break;
+00182                 }
+00183         case 7:
+00184                 {
+00185                 // Insert date/time field into document
+00186                 TExampleFieldFactory* factory = new(ELeave) TExampleFieldFactory();
+00187                 CleanupStack::PushL(factory);
+00188                 // Set up the field factory
+00189                 iGlobalText->SetFieldFactory(factory);
+00190                 CTextField* field = iGlobalText->NewTextFieldL(KDateTimeFieldUid);
+00191                 // Format date to hour:minute:second day/month/year 
+00192                 ((CDateTimeField*)field)->SetFormat(KText8); 
+00193                 iGlobalText->InsertFieldL(0,field,KDateTimeFieldUid);
+00194                 // Evaluate the field (makes contents visible)
+00195                 iGlobalText->UpdateAllFieldsL();
+00196                 // Insert new para delimiter after field
+00197                 // First get length of field we've just inserted
+00198                 TFindFieldInfo info; 
+00199                 TInt pos=0;
+00200                 TInt range=0;
+00201                 iGlobalText->FindFields(info,pos,range);
+00202                 iGlobalText->InsertL(info.iFirstFieldLen,CEditableText::EParagraphDelimiter);
+00203                 iFormObserver->NotifyStatus(KStatus7);
+00204                 // clean up
+00205                 CleanupStack::PopAndDestroy(); // factory
+00206                 break;
+00207                 }
+00208         case 8:
+00209                 {
+00210                 // Set some paragraph formatting - applied globally
+00211                 CParaFormat* paraFormat=CParaFormat::NewLC();
+00212                 TParaFormatMask paraFormatMask;
+00213                 // Set centre alignment
+00214                 paraFormat->iHorizontalAlignment=CParaFormat::ECenterAlign; 
+00215                 paraFormatMask.SetAttrib(EAttAlignment);
+00216                 // apply formatting - pos and length are irrelevent
+00217                 iGlobalText->ApplyParaFormatL(paraFormat,paraFormatMask,0,0);
+00218                 iFormObserver->NotifyStatus(KStatus8);
+00219                 CleanupStack::PopAndDestroy();  // paraFormat
+00220                 break;
+00221                 }
+00222         case 9:
+00223                 {
+00224                 // Set some character formatting - applied globally
+00225                 TCharFormat charFormat;
+00226                 TCharFormatMask charFormatMask;
+00227                 // Interested in underline, posture and weight
+00228                 charFormatMask.SetAttrib(EAttFontUnderline); // set underline
+00229                 charFormatMask.SetAttrib(EAttFontPosture); // and posture (for italic)
+00230                 charFormatMask.SetAttrib(EAttFontStrokeWeight); // set weight (for bold)
+00231 
+00232                 // Set bold, italics and underlining
+00233                 charFormat.iFontPresentation.iUnderline=EUnderlineOn;
+00234                 charFormat.iFontSpec.iFontStyle.SetPosture(EPostureItalic); 
+00235                 charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+00236                 // apply formatting - pos and length are irrelevent
+00237                 iGlobalText->ApplyCharFormatL(charFormat,charFormatMask, 0,0);
+00238                 // And update the field
+00239                 iGlobalText->UpdateFieldL(0);
+00240                 iFormObserver->NotifyStatus(KStatus9);
+00241                 break;
+00242                 }
+00243 // Storing and restoring
+00244         case 10:                                                                           
+00245                 // set up a file store
+00246                 {
+00247                 RFs         theFs;
+00248                 CFileStore* theStore;
+00249                 TParse      filestorename;
+00250                 // Make a connection to the file server
+00251                 theFs.Connect();
+00252                 theFs.Parse(name,filestorename);
+00253                 theStore=CDirectFileStore::ReplaceLC(theFs,filestorename.FullName(),EFileRead|EFileWrite);
+00254                 theStore->SetTypeL(KDirectFileStoreLayoutUid);
+00255                 // store global text to file store
+00256                 iStreamId=iGlobalText->StoreL(*theStore);
+00257                 // close file store
+00258                 CleanupStack::PopAndDestroy(); // pop and destroy store
+00259                 // Disconnect from file server
+00260                 theFs.Close();
+00261                 iFormObserver->NotifyStatus(KStatus10);
+00262                 break;
+00263                 }
+00264         case 11:
+00265                 // reset document, clearing it of all content
+00266                 iGlobalText->Reset();
+00267                 iFormObserver->NotifyStatus(KStatusReset);
+00268                 break;
+00269         case 12:
+00270                 {
+00271                 // set up file store
+00272                 RFs         theFs;
+00273                 CFileStore* theStore;
+00274                 TParse      filestorename;
+00275 
+00276                 theFs.Connect();
+00277                 theFs.Parse(name,filestorename);
+00278                 theStore=CDirectFileStore::OpenLC(theFs,filestorename.FullName(),EFileRead|EFileShareReadersOnly);
+00279                 if (theStore->Type()[0]!=KDirectFileStoreLayoutUid)
+00280                         User::Leave(KErrUnknown);
+00281                 // restore text and components from file store
+00282                 iGlobalText->RestoreL(*theStore,iStreamId);
+00283                 // close file store
+00284                 CleanupStack::PopAndDestroy(); // pop and destroy store
+00285                 theFs.Close();
+00286                 iGlobalText->UpdateFieldL(0);
+00287                 iFormObserver->NotifyStatus(KStatus12);
+00288                 break;
+00289                 }
+00290         case 13:
+00291                 // Delete all text from paragraph containing a random doc position to 
+00292                 // end of document. Also delete preceding paragraph delimiter to keep 
+00293                 // paragraph count correct.
+00294                 {
+00295                 TInt pos=iGlobalText->LdDocumentLength()/2;
+00296                 iGlobalText->ToParagraphStart(pos); // pos set to start of paragraph
+00297                 pos--; // decrement so pos = preceding para delimiter
+00298                 iGlobalText->DeleteL(pos, iGlobalText->LdDocumentLength()-pos);
+00299                                 // delete rest of text
+00300                 iFormObserver->NotifyStatus(KStatus13);
+00301                 break;
+00302                 }
+00303         case 14:
+00304                 {
+00305                 // Reset all formatting back to the default
+00306                 TCharFormat charFormat;
+00307                 TCharFormatMask charFormatMask;
+00308                 CParaFormat* paraFormat=CParaFormat::NewLC();
+00309                 TParaFormatMask paraFormatMask;
+00310                 // Reset all character format attributes
+00311                 charFormatMask.SetAll();
+00312                 iGlobalText->ApplyCharFormatL(charFormat,charFormatMask,0,1);
+00313                         // format is all empty, mask is all set: thus, everything to default
+00314                 paraFormatMask.SetAll();
+00315                 iGlobalText->ApplyParaFormatL(paraFormat, paraFormatMask, 0,1);
+00316                         // ditto
+00317                 iFormObserver->NotifyStatus(KStatus14);
+00318                 CleanupStack::PopAndDestroy();  // paraFormat
+00319                 break;
+00320                 }
+00321         case 15:
+00322                 // reset document, clearing it of all text content and fields
+00323                 iGlobalText->Reset();
+00324                 iFormObserver->NotifyStatus(KStatusReset);
+00325                 break;
+00326         default:
+00327                 iFormObserver->NotifyStatus(KStatusDefault);
+00328                 break;
+00329                 }
+00330         }
+00331 
+00332 void CGlobalControl::Draw(const TRect& aRect) const
+00333         {
+00334         // draw surround
+00335         CGraphicsContext& gc=SystemGc(); // context to draw into
+00336         TRect rect=Rect(); // screen boundary
+00337         gc.DrawRect(rect); // outline screen boundary
+00338         rect.Shrink(1,1);
+00339         gc.SetPenColor(KRgbWhite);
+00340         gc.DrawRect(rect);
+00341         rect.Shrink(1,1);
+00342         gc.SetPenColor(KRgbBlack);
+00343         gc.DrawRect(rect);
+00344         // draw editable text - will work unless OOM
+00345         TInt err;
+00346         TRAP(err,iTextView->FormatTextL());
+00347         if (err) return;
+00348         TRAP(err,iTextView->DrawL(aRect));
+00349         }
+00350 
+00351 
+

Generated on Thu Jan 21 10:32:54 2010 for TB10.1 Example Applications by  + +doxygen 1.5.3
+ +