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 #ifndef __TXTEXAMP_H 00017 #define __TXTEXAMP_H 00018 00019 #include <coemain.h> 00020 #include <coecntrl.h> 00021 #include <s32file.h> 00022 #include <txtglobl.h> 00023 #include <frmtview.h> 00024 #include <txtfmlyr.h> 00025 00026 // 00027 // class MGraphicsExampleObserver 00028 // 00029 00030 class MGraphicsExampleObserver 00031 // Defines an interface that controls can call to inform the shell 00032 // that they have finished, or that the status message display needs 00033 // updating. It is implemented by CExampleShellContainer 00034 { 00035 public: 00036 // Notify user that example has finished 00037 virtual void NotifyGraphicExampleFinished()=0; 00038 // Notify user of the current status of the example 00039 virtual void NotifyStatus(const TDesC& aMessage)=0; 00040 }; 00041 00042 // 00043 // class CGraphicExampleControl 00044 // 00045 00046 /* 00047 Usage 00048 00049 This class is used as a base class for graphics and text 00050 examples. It uses CONE's facilities to provide an initialized 00051 graphics environment. 00052 00053 It creates a 600x200 window in which drawing can be done. 00054 00055 It supports multiple phases, so different drawings can be 00056 done from one phase to another. Tap the spacebar or click the 00057 mouse (anywhere) to advance a phase. 00058 00059 Quit the program by pressing the exit button. 00060 00061 Writing derived classes 00062 00063 A minimal derived class should have a Draw() function 00064 which puts a drawing onto the screen. 00065 00066 If you are using multiple phases, code a constructor which 00067 calls SetMaxPhases() specifying the number of phases. Have 00068 Draw() honour the phase number, available using Phase(). 00069 */ 00070 00071 #pragma warning(disable : 4100) 00072 // disable "parameter not used" warning on HandleKey() 00073 00074 class CGraphicExampleControl : public CCoeControl 00075 { 00076 public: 00077 // construct/destruct 00078 void ConstructL(const TRect& aRect, MGraphicsExampleObserver* aObserver, const CCoeControl& aParent); 00079 // second-phase construction 00080 ~CGraphicExampleControl(); 00081 // public so container can offer keys 00082 TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); 00083 // intercepts space; offers other keys to derived classes 00084 protected: 00085 // derived classes must provide the next 2 functions 00086 virtual void UpdateModelL() =0; // empty update model function 00087 virtual void Draw(const TRect& /* aRect */) const {}; // empty draw function 00088 // use Phase() in Draw() to tell what phase we're in 00089 TInt Phase() const { return iPhase; }; // get phase number 00090 void SetMaxPhases(TInt aMaxPhases) { iMaxPhases=aMaxPhases; }; 00091 // use this from derived-class constructor to set number of phases 00092 CFont* iMessageFont; // font for messages 00093 private: 00094 // functions provided for CCoeControl protocol 00095 void HandlePointerEventL(const TPointerEvent& aPointerEvent); 00096 // advances phase on pointer-down 00097 void Quit(); // does termination 00098 void NextPhaseL(); // advances phase: quits if all phases done 00099 // phase control for graphics examples 00100 TInt iPhase; // phase number 00101 TInt iMaxPhases; // maximum phases 00102 protected: 00103 MGraphicsExampleObserver* iFormObserver; 00104 TBool iUpdateModelDoesRedraw; // whether UpdateModelL() does a redraw for us 00105 }; 00106 00107 // sundry derived classes 00108 00109 class CGlobalText; 00110 class CRichText; 00111 class CParaFormatLayer; 00112 class CCharFormatLayer; 00113 class CTextLayout; 00114 class CTextView; 00115 class CStyleList; 00116 class CParagraphStyle; 00117 00118 00119 class CGlobalControl : public CGraphicExampleControl 00120 { 00121 // Demonstrates the use of global text 00122 public: 00123 CGlobalControl() { SetMaxPhases(16); }; 00124 void UpdateModelL(); 00125 void Draw(const TRect& aRect) const; 00126 ~CGlobalControl(); 00127 private: 00128 CGlobalText* iGlobalText; // global text object 00129 CParaFormatLayer* iParaFormatLayer; 00130 CCharFormatLayer* iCharFormatLayer; 00131 TStreamId iStreamId; // required when storing and restoring global text 00132 // text layout and view stuff 00133 CTextLayout* iLayout; // text layout 00134 CTextView* iTextView; // text view 00135 TRect iViewRect; // rectangle through which to view text 00136 TCharFormat iCharFormat; 00137 TCharFormatMask iCharFormatMask; 00138 }; 00139 00140 class CRichControl : public CGraphicExampleControl 00141 { 00142 // Demonstrates the use of rich text 00143 public: 00144 CRichControl() { SetMaxPhases(14);}; 00145 ~CRichControl(); // destructor 00146 void UpdateModelL(); 00147 void Draw(const TRect& aRect) const; 00148 private: 00149 CRichText* iRichText; // global text object 00150 CParaFormatLayer* iParaFormatLayer; 00151 CCharFormatLayer* iCharFormatLayer; 00152 TStreamId iStreamId; // required when storing and restoring global text 00153 // text layout and view stuff 00154 CTextLayout* iLayout; // text layout 00155 CTextView* iTextView; // text view 00156 TRect iViewRect; // rectangle through which to view text 00157 TCharFormat iCharFormat; 00158 TCharFormatMask iCharFormatMask; 00159 }; 00160 00161 class CStyleControl : public CGraphicExampleControl 00162 { 00163 // Demonstrates the use of styles in rich text 00164 public: 00165 CStyleControl() { SetMaxPhases(9);}; 00166 ~CStyleControl(); // destructor 00167 void UpdateModelL(); 00168 void Draw(const TRect& aRect) const; 00169 private: 00170 void CreateNormalL(); // Create Normal style (the global layers) 00171 void CreateStylesL(); // Create some paragraph styles 00172 private: 00173 CRichText* iRichText; // rich text object 00174 CParaFormatLayer* iNormalParaFormatLayer; 00175 CCharFormatLayer* iNormalCharFormatLayer; 00176 TStreamId iStreamId; // required when storing and restoring global text 00177 // text layout and view stuff 00178 CTextLayout* iLayout; // text layout 00179 CTextView* iTextView; // text view 00180 TRect iViewRect; // rectangle through which to view text 00181 CStyleList* iStyleList; // Style list holds the two styles 00182 CParagraphStyle* iStyleOne; 00183 CParagraphStyle* iStyleTwo; 00184 TCharFormat iCharFormat; 00185 TCharFormatMask iCharFormatMask; 00186 }; 00187 00188 class CViewControl : public CGraphicExampleControl 00189 { 00190 // Demonstrates the use of the text view and text layout classes 00191 public: 00192 CViewControl() { SetMaxPhases(14);}; 00193 ~CViewControl(); 00194 void UpdateModelL(); 00195 void Draw(const TRect& aRect) const; 00196 private: 00197 CRichText* iRichText; // rich text object 00198 CParaFormatLayer* iParaFormatLayer; 00199 CCharFormatLayer* iCharFormatLayer; 00200 // text layout and view stuff 00201 CTextLayout* iLayout; // text layout 00202 CTextView* iTextView; // text view 00203 TRect iViewRect; // rectangle through which to view text 00204 CFbsBitmap* iBitmap; // line cursor bitmap 00205 TCharFormat iCharFormat; 00206 TCharFormatMask iCharFormatMask; 00207 }; 00208 00209 #endif 00210
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.