S60MemoryLabContainer.cpp
上传用户:laixiong
上传日期:2007-03-11
资源大小:2994k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. // Copyright: (c) 2006 Nokia Ltd.  All rights reserved.
  2. // INCLUDE FILES
  3. #include "S60MemoryLabContainer.h"
  4. #include <eiklabel.h>  // for example label control
  5. #include <eikappui.h>
  6. // ================= MEMBER FUNCTIONS =======================
  7. // ---------------------------------------------------------
  8. // CS60MemoryLabContainer::ConstructL(const TRect& aRect)
  9. // Second phase constructor
  10. // ---------------------------------------------------------
  11. //
  12. _LIT(KTextExtremelyLongLabel,    "Extremely Long Label");
  13. _LIT(KTextVeryLongLabel,         "Very Long Label");
  14. _LIT(KTextLongLabel,             "Long Label");
  15. _LIT(KTextLabel,                 "Label");
  16. _LIT(KTextCleanupStackTest,      "Cleanup Stack Test");
  17. void CS60MemoryLabContainer::ConstructL(const TRect& aRect)
  18.     {
  19.     CreateWindowL();
  20.     // Edit 1: uncomment the line below 
  21.     // User::Leave(KErrCancel);
  22.     iTopLabel = new (ELeave) CEikLabel;
  23.     iTopLabel->SetContainerWindowL(*this);
  24.     iTopLabel->SetTextL(KTextLabel);
  25.     iBottomLabel = new (ELeave) CEikLabel;
  26.     iBottomLabel->SetContainerWindowL( *this );
  27.     iBottomLabel->SetTextL(KTextLongLabel);
  28.     SetRect(aRect);
  29.     ActivateL();
  30.     }
  31. // Destructor
  32. CS60MemoryLabContainer::~CS60MemoryLabContainer()
  33.     {
  34.     delete iTopLabel;
  35.     delete iBottomLabel;
  36.     }
  37. void CS60MemoryLabContainer::ToggleLabelsL()
  38.     {
  39.     if (iToggleFlag)
  40.         {
  41.         iTopLabel->SetTextL(KTextLabel);
  42.         iBottomLabel->SetTextL(KTextLongLabel);
  43.         }
  44.     else
  45.         {
  46.         // Edit 3: 
  47.         //  a) Add a Trap harness (TRAPD macro) around the following 3 lines of code
  48.         //  b) If an error occurs:
  49.         //      i) Set the text of iTopLabel to be KTextLabel
  50.         //      ii) Raise the error again using User::Leave(error)
  51.         
  52.             // Edit 2: Uncomment the line below
  53.             //User::Leave(KErrNoMemory); // simulates the line below leaving
  54.             iBottomLabel->SetTextL(KTextExtremelyLongLabel);
  55.             );
  56.             
  57.         
  58.         }
  59.     iToggleFlag = !iToggleFlag;
  60.     }
  61. void CS60MemoryLabContainer::CleanupStackTestL()
  62.     {
  63.     // Create string on the heap to store a copy of a literal string
  64.     HBufC* labelText = HBufC::NewL(KTextCleanupStackTest().Length());   
  65.     // Edit 5: Put labelText on the Cleanup Stack using 
  66.     //         CleanupStack::PushL(labelText);
  67.     //         Alternatively HBufC::NewLC(KTextCleanupStackTest().Length()) could 
  68.     //         be called instead of HBufC::NewL(KTextCleanupStackTest().Length())
  69.     
  70.     *labelText = KTextCleanupStackTest; // Initialise the heap string
  71.     // Edit 4: Uncomment the line below
  72.     //User::Leave(KErrNoMemory); // mimic the effect of SetTextL() below leaving
  73.     iBottomLabel->SetTextL(*labelText);
  74.     // Edit 6: Replace the following line with CleanupStack::PopAndDestroy();
  75.     delete labelText;
  76.     }
  77. // ---------------------------------------------------------
  78. // CS60MemoryLabContainer::SizeChanged()
  79. // Called by framework when the view size is changed
  80. // ---------------------------------------------------------
  81. //
  82. void CS60MemoryLabContainer::SizeChanged()
  83.     {
  84.     // Set the position and size of the labels so they can 
  85.     // hold all the text
  86.     TRect rect = Rect();
  87.     
  88.     iTopLabel->SetExtent( TPoint(0,0), TSize(Rect().Width(), Rect().Height()/2));
  89.     iBottomLabel->SetExtent( TPoint(0,Rect().Height()/2), TSize(Rect().Width(),Rect().Height()/2));
  90.     }
  91. // ---------------------------------------------------------
  92. // CS60MemoryLabContainer::CountComponentControls() const
  93. // ---------------------------------------------------------
  94. //
  95. TInt CS60MemoryLabContainer::CountComponentControls() const
  96.     {
  97.     return 2; // return nbr of controls inside this container
  98.     }
  99. // ---------------------------------------------------------
  100. // CS60MemoryLabContainer::ComponentControl(TInt aIndex) const
  101. // ---------------------------------------------------------
  102. //
  103. CCoeControl* CS60MemoryLabContainer::ComponentControl(TInt aIndex) const
  104.     {
  105.     switch ( aIndex )
  106.         {
  107.         case 0:
  108.             return iTopLabel;
  109.         case 1:
  110.             return iBottomLabel;
  111.         default:
  112.             return NULL;
  113.         }
  114.     }
  115. // ---------------------------------------------------------
  116. // CS60MemoryLabContainer::Draw(const TRect& aRect) const
  117. // ---------------------------------------------------------
  118. //
  119. void CS60MemoryLabContainer::Draw(const TRect& aRect) const
  120.     {
  121.     CWindowGc& gc = SystemGc();
  122.     gc.SetPenStyle(CGraphicsContext::ENullPen);
  123.     gc.SetBrushColor(KRgbGray);
  124.     gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
  125.     gc.DrawRect(aRect);
  126.     }
  127. // ---------------------------------------------------------
  128. // CS60MemoryLabContainer::HandleControlEventL(
  129. //     CCoeControl* aControl,TCoeEvent aEventType)
  130. // ---------------------------------------------------------
  131. //
  132. void CS60MemoryLabContainer::HandleControlEventL(
  133.     CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
  134.     {
  135.     // Do nothing
  136.     }
  137.     
  138. // End of File