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 <graphicsshell.rsg>
00027 #include "GraphicsShell.hrh"
00028 #include "GraphicsShell.h"
00029
00030
00031
00032
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
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;
00090 iLabel->SetContainerWindowL(*this);
00091 iLabel->SetRect(rect);
00092 iLabel->SetAlignment(EHCenterVCenter);
00093 iLabel->SetBufferReserveLengthL(200);
00094 iLabel->SetFont(iEikonEnv->AnnotationFont());
00095 iLabel->ActivateL();
00096 }
00097
00098 void CExampleShellContainer::ResetExampleL(CGraphicExampleControl* aExample)
00099 {
00100
00101 delete iExampleControl;
00102
00103 iExampleControl=aExample;
00104
00105 if (!iExampleControl) return;
00106 TRect rect=Rect();
00107 rect.iBr.iY-=KLabelHeight;
00108 rect.Shrink(2,2);
00109 iExampleControl->ConstructL(rect,this,*this);
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& ) const
00137 {
00138 CWindowGc& gc = SystemGc();
00139 gc.SetPenStyle(CGraphicsContext::ENullPen);
00140 gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
00141 gc.DrawRect(Rect());
00142 }
00143
00144
00145
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
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
00184
00185
00186 CEikAppUi* CExampleShellDocument::CreateAppUiL()
00187 {
00188 return(new(ELeave) CExampleShellAppUi);
00189 }
00190
00191
00192
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
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 }