examples/Graphics/GraphicsShell/GraphicsShell.cpp

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         }

Generated by  doxygen 1.6.2