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 <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 // TExampleShellModel 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 // class CExampleShellContainer 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; // make it bottom 20 pixels 00089 iLabel->SetContainerWindowL(*this); 00090 iLabel->SetRect(rect); 00091 iLabel->SetAlignment(EHCenterVCenter); // center text 00092 iLabel->SetBufferReserveLengthL(200); // nice long buffer 00093 iLabel->SetFont(iEikonEnv->AnnotationFont()); 00094 iLabel->ActivateL(); // now ready 00095 } 00096 00097 void CExampleShellContainer::ResetExampleL(CGraphicExampleControl* aExample) 00098 { 00099 // get rid of old control 00100 delete iExampleControl; 00101 // set up new one 00102 iExampleControl=aExample; 00103 // if non-zero, then carry on 00104 if (!iExampleControl) return; 00105 TRect rect=Rect(); // get our rect 00106 rect.iBr.iY-=KLabelHeight; // make way for label 00107 rect.Shrink(2,2); // shrink it a bit 00108 iExampleControl->ConstructL(rect,this,*this); // construct, giving rect, observer, and parent 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& /*aRect*/) const 00136 { 00137 CWindowGc& gc = SystemGc(); 00138 gc.SetPenStyle(CGraphicsContext::ENullPen); 00139 gc.SetBrushStyle(CGraphicsContext::ESolidBrush); 00140 gc.DrawRect(Rect()); 00141 } 00142 00143 // 00144 // CExampleShellAppUi 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 // add container to stack; enables key event handling. 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 // CExampleShellDocument 00189 // 00190 00191 CEikAppUi* CExampleShellDocument::CreateAppUiL() 00192 { 00193 return(new(ELeave) CExampleShellAppUi); 00194 } 00195 00196 // 00197 // CExampleShellApplication 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 }
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.