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 <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 <graphicsshell.rsg> 00027 #include "GraphicsShell.hrh" 00028 #include "GraphicsShell.h" 00029 00030 00031 // 00032 // TExampleShellModel 00033 // 00034 00035 TExampleShellModel::TExampleShellModel() 00036 { 00037 iLibrary=KNullDesC; 00038 } 00039 00040 TBool TExampleShellModel::Differs(const TExampleShellModel* aCompare) const 00041 { 00042 return((*(TInt32*)this)!=(*(TInt32*)aCompare)); 00043 } 00044 00045 // 00046 // class CExampleShellContainer 00047 // 00048 00049 void CExampleShellContainer::ConstructL(const TRect& aRect, TExampleShellModel* aModel) 00050 { 00051 iModel=aModel; 00052 CreateWindowL(); 00053 Window().SetShadowDisabled(ETrue); 00054 iContext=this; 00055 iBrushStyle=CGraphicsContext::ESolidBrush; 00056 iBrushColor=KRgbWhite; 00057 SetRect(aRect); 00058 CreateLabelL(); 00059 ActivateL(); 00060 } 00061 00062 CExampleShellContainer::~CExampleShellContainer() 00063 { 00064 delete iExampleControl; 00065 delete iLabel; 00066 } 00067 00068 TInt CExampleShellContainer::CountComponentControls() const 00069 { 00070 return 1 + (iExampleControl ? 1 : 0); 00071 } 00072 00073 CCoeControl* CExampleShellContainer::ComponentControl(TInt aIndex) const 00074 { 00075 switch (aIndex) 00076 { 00077 case 0: return iLabel; 00078 case 1: return iExampleControl; 00079 default: return 0; 00080 }; 00081 } 00082 00083 const TInt KLabelHeight=20; 00084 00085 void CExampleShellContainer::CreateLabelL() 00086 { 00087 iLabel=new (ELeave) CEikLabel; 00088 TRect rect=Rect(); 00089 rect.iTl.iY=rect.iBr.iY-KLabelHeight; // make it bottom 20 pixels 00090 iLabel->SetContainerWindowL(*this); 00091 iLabel->SetRect(rect); 00092 iLabel->SetAlignment(EHCenterVCenter); // center text 00093 iLabel->SetBufferReserveLengthL(200); // nice long buffer 00094 iLabel->SetFont(iEikonEnv->AnnotationFont()); 00095 iLabel->ActivateL(); // now ready 00096 } 00097 00098 void CExampleShellContainer::ResetExampleL(CGraphicExampleControl* aExample) 00099 { 00100 // get rid of old control 00101 delete iExampleControl; 00102 // set up new one 00103 iExampleControl=aExample; 00104 // if non-zero, then carry on 00105 if (!iExampleControl) return; 00106 TRect rect=Rect(); // get our rect 00107 rect.iBr.iY-=KLabelHeight; // make way for label 00108 rect.Shrink(2,2); // shrink it a bit 00109 iExampleControl->ConstructL(rect,this,*this); // construct, giving rect, observer, and parent 00110 } 00111 00112 _LIT(KTxtFinished,"example finished"); 00113 void CExampleShellContainer::NotifyGraphicExampleFinished() 00114 { 00115 NotifyStatus(KTxtFinished); 00116 } 00117 00118 void CExampleShellContainer::NotifyStatus(const TDesC& aMessage) 00119 { 00120 TRAPD(err,iLabel->SetTextL(aMessage)); 00121 if(err) 00122 { 00123 return; 00124 } 00125 if (IsActivated()) iLabel->DrawNow(); 00126 } 00127 00128 TKeyResponse CExampleShellContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) 00129 { 00130 if (iExampleControl) 00131 return iExampleControl->OfferKeyEventL(aKeyEvent,aType); 00132 else 00133 return EKeyWasNotConsumed; 00134 } 00135 00136 void CExampleShellContainer::Draw(const TRect& /*aRect*/) const 00137 { 00138 CWindowGc& gc = SystemGc(); 00139 gc.SetPenStyle(CGraphicsContext::ENullPen); 00140 gc.SetBrushStyle(CGraphicsContext::ESolidBrush); 00141 gc.DrawRect(Rect()); 00142 } 00143 00144 // 00145 // CExampleShellAppUi 00146 // 00147 00148 _LIT(KTxtInitialized,"initialized"); 00149 void CExampleShellAppUi::ConstructL() 00150 { 00151 BaseConstructL(); 00152 iModel=((CExampleShellDocument*)iDocument)->Model(); 00153 iContainer=new(ELeave) CExampleShellContainer; 00154 iContainer->ConstructL(ClientRect(),iModel); 00155 iContainer->NotifyStatus(KTxtInitialized); 00156 // add container to stack; enables key event handling. 00157 AddToStackL(iContainer); 00158 } 00159 00160 void CExampleShellAppUi::HandleCommandL(TInt aCommand) 00161 { 00162 switch (aCommand) 00163 { 00164 case EExampleShellSelectDraw: 00165 iContainer->ResetExampleL(new (ELeave) CDrawControl); 00166 return; 00167 case EExampleShellSelectZoom: 00168 iContainer->ResetExampleL(new (ELeave) CZoomControl); 00169 return; 00170 case EEikCmdExit: 00171 Exit(); 00172 return; 00173 } 00174 } 00175 00176 CExampleShellAppUi::~CExampleShellAppUi() 00177 { 00178 RemoveFromStack(iContainer); 00179 delete iContainer; 00180 } 00181 00182 // 00183 // CExampleShellDocument 00184 // 00185 00186 CEikAppUi* CExampleShellDocument::CreateAppUiL() 00187 { 00188 return(new(ELeave) CExampleShellAppUi); 00189 } 00190 00191 // 00192 // CExampleShellApplication 00193 // 00194 00195 TUid CExampleShellApplication::AppDllUid() const 00196 { 00197 return KUidExampleShellApp; 00198 } 00199 00200 CApaDocument* CExampleShellApplication::CreateDocumentL() 00201 { 00202 return new(ELeave) CExampleShellDocument(*this); 00203 } 00204 00205 // 00206 // EXPORTed functions 00207 // 00208 00209 EXPORT_C CApaApplication* NewApplication() 00210 { 00211 return new CExampleShellApplication; 00212 } 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.