00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <e32keys.h>
00017
00018 #include <coemain.h>
00019
00020 #include <eikenv.h>
00021 #include <eikdef.h>
00022 #include <eikon.hrh>
00023 #include <eiklabel.h>
00024 #include <eikstart.h>
00025
00026 #include <txtshell.rsg>
00027 #include "txtshell.hrh"
00028 #include "txtshell.h"
00029
00030
00031
00032
00033
00034 TExampleShellModel::TExampleShellModel()
00035 {
00036 iLibrary=KNullDesC;
00037 }
00038
00039 TBool TExampleShellModel::Differs(const TExampleShellModel* aCompare) const
00040 {
00041 return((*(TInt32*)this)!=(*(TInt32*)aCompare));
00042 }
00043
00044
00045
00046
00047
00048 void CExampleShellContainer::ConstructL(const TRect& aRect, TExampleShellModel* aModel)
00049 {
00050 iModel=aModel;
00051 CreateWindowL();
00052 Window().SetShadowDisabled(ETrue);
00053 iContext=this;
00054 iBrushStyle=CGraphicsContext::ESolidBrush;
00055 iBrushColor=KRgbWhite;
00056 SetRect(aRect);
00057 CreateLabelL();
00058 ActivateL();
00059 }
00060
00061 CExampleShellContainer::~CExampleShellContainer()
00062 {
00063 delete iExampleControl;
00064 delete iLabel;
00065 }
00066
00067 TInt CExampleShellContainer::CountComponentControls() const
00068 {
00069 return 1 + (iExampleControl ? 1 : 0);
00070 }
00071
00072 CCoeControl* CExampleShellContainer::ComponentControl(TInt aIndex) const
00073 {
00074 switch (aIndex)
00075 {
00076 case 0: return iLabel;
00077 case 1: return iExampleControl;
00078 default: return 0;
00079 };
00080 }
00081
00082 const TInt KLabelHeight=20;
00083
00084 void CExampleShellContainer::CreateLabelL()
00085 {
00086 iLabel=new (ELeave) CEikLabel;
00087 TRect rect=Rect();
00088 rect.iTl.iY=rect.iBr.iY-KLabelHeight;
00089 iLabel->SetContainerWindowL(*this);
00090 iLabel->SetRect(rect);
00091 iLabel->SetAlignment(EHCenterVCenter);
00092 iLabel->SetBufferReserveLengthL(200);
00093 iLabel->SetFont(iEikonEnv->AnnotationFont());
00094 iLabel->ActivateL();
00095 }
00096
00097 void CExampleShellContainer::ResetExampleL(CGraphicExampleControl* aExample)
00098 {
00099
00100 delete iExampleControl;
00101
00102 iExampleControl=aExample;
00103
00104 if (!iExampleControl) return;
00105 TRect rect=Rect();
00106 rect.iBr.iY-=KLabelHeight;
00107 rect.Shrink(2,2);
00108 iExampleControl->ConstructL(rect,this,*this);
00109 }
00110
00111 void CExampleShellContainer::NotifyGraphicExampleFinished()
00112 {
00113 _LIT(KStatus,"example finished");
00114 NotifyStatus(KStatus);
00115 }
00116
00117 void CExampleShellContainer::NotifyStatus(const TDesC& aMessage)
00118 {
00119 TRAPD(err,iLabel->SetTextL(aMessage));
00120 if(err)
00121 {
00122 return;
00123 }
00124 if (IsActivated()) iLabel->DrawNow();
00125 }
00126
00127 TKeyResponse CExampleShellContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
00128 {
00129 if (iExampleControl)
00130 return iExampleControl->OfferKeyEventL(aKeyEvent,aType);
00131 else
00132 return EKeyWasNotConsumed;
00133 }
00134
00135 void CExampleShellContainer::Draw(const TRect& ) const
00136 {
00137 CWindowGc& gc = SystemGc();
00138 gc.SetPenStyle(CGraphicsContext::ENullPen);
00139 gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
00140 gc.DrawRect(Rect());
00141 }
00142
00143
00144
00145
00146
00147 void CExampleShellAppUi::ConstructL()
00148 {
00149 _LIT(KStatus,"initialized");
00150 BaseConstructL();
00151 iModel=((CExampleShellDocument*)iDocument)->Model();
00152 iContainer=new(ELeave) CExampleShellContainer;
00153 iContainer->ConstructL(ClientRect(),iModel);
00154 iContainer->NotifyStatus(KStatus);
00155
00156 AddToStackL(iContainer);
00157 }
00158
00159 void CExampleShellAppUi::HandleCommandL(TInt aCommand)
00160 {
00161 switch (aCommand)
00162 {
00163 case EExampleShellSelectGlobal:
00164 iContainer->ResetExampleL(new (ELeave) CGlobalControl);
00165 return;
00166 case EExampleShellSelectRich:
00167 iContainer->ResetExampleL(new (ELeave) CRichControl);
00168 return;
00169 case EExampleShellSelectStyled:
00170 iContainer->ResetExampleL(new (ELeave) CStyleControl);
00171 return;
00172 case EExampleShellSelectView:
00173 iContainer->ResetExampleL(new (ELeave) CViewControl);
00174 return;
00175 case EEikCmdExit:
00176 Exit();
00177 return;
00178 }
00179 }
00180
00181 CExampleShellAppUi::~CExampleShellAppUi()
00182 {
00183 RemoveFromStack(iContainer);
00184 delete iContainer;
00185 }
00186
00187
00188
00189
00190
00191 CEikAppUi* CExampleShellDocument::CreateAppUiL()
00192 {
00193 return(new(ELeave) CExampleShellAppUi);
00194 }
00195
00196
00197
00198
00199
00200 TUid CExampleShellApplication::AppDllUid() const
00201 {
00202 return KUidExampleShellApp;
00203 }
00204
00205 CApaDocument* CExampleShellApplication::CreateDocumentL()
00206 {
00207 return new(ELeave) CExampleShellDocument(*this);
00208 }
00209
00210 LOCAL_C CApaApplication* NewApplication()
00211 {
00212 return new CExampleShellApplication;
00213 }
00214
00215 GLDEF_C TInt E32Main()
00216 {
00217 return EikStart::RunApplication(NewApplication);
00218 }