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.         iTopLabel->SetTextL(KTextVeryLongLabel);
  52.         // Edit 2: Uncomment the line below
  53.         // User::Leave(KErrNoMemory); // simulates the line below leaving
  54.         iBottomLabel->SetTextL(KTextExtremelyLongLabel);
  55.         }
  56.     iToggleFlag = !iToggleFlag;
  57.     }
  58. void CS60MemoryLabContainer::CleanupStackTestL()
  59.     {
  60.     // Create string on the heap to store a copy of a literal string
  61.     HBufC* labelText = HBufC::NewL(KTextCleanupStackTest().Length());   
  62.     // Edit 5: Put labelText on the Cleanup Stack using 
  63.     //         CleanupStack::PushL(labelText);
  64.     //         Alternatively HBufC::NewLC(KTextCleanupStackTest().Length()) could 
  65.     //         be called instead of HBufC::NewL(KTextCleanupStackTest().Length())
  66.     *labelText = KTextCleanupStackTest; // Initialise the heap string
  67.     // Edit 4: Uncomment the line below
  68.     // User::Leave(KErrNoMemory); // mimic the effect of SetTextL() below leaving
  69.     iBottomLabel->SetTextL(*labelText);
  70.     // Edit 6: Replace the following line with CleanupStack::PopAndDestroy();
  71.     delete labelText;
  72.     }
  73. // ---------------------------------------------------------
  74. // CS60MemoryLabContainer::SizeChanged()
  75. // Called by framework when the view size is changed
  76. // ---------------------------------------------------------
  77. //
  78. void CS60MemoryLabContainer::SizeChanged()
  79.     {
  80.     // Set the position and size of the labels so they can 
  81.     // hold all the text
  82.     TRect rect = Rect();
  83.     
  84.     iTopLabel->SetExtent( TPoint(0,0), TSize(Rect().Width(), Rect().Height()/2));
  85.     iBottomLabel->SetExtent( TPoint(0,Rect().Height()/2), TSize(Rect().Width(),Rect().Height()/2));
  86.     }
  87. // ---------------------------------------------------------
  88. // CS60MemoryLabContainer::CountComponentControls() const
  89. // ---------------------------------------------------------
  90. //
  91. TInt CS60MemoryLabContainer::CountComponentControls() const
  92.     {
  93.     return 2; // return nbr of controls inside this container
  94.     }
  95. // ---------------------------------------------------------
  96. // CS60MemoryLabContainer::ComponentControl(TInt aIndex) const
  97. // ---------------------------------------------------------
  98. //
  99. CCoeControl* CS60MemoryLabContainer::ComponentControl(TInt aIndex) const
  100.     {
  101.     switch ( aIndex )
  102.         {
  103.         case 0:
  104.             return iTopLabel;
  105.         case 1:
  106.             return iBottomLabel;
  107.         default:
  108.             return NULL;
  109.         }
  110.     }
  111. // ---------------------------------------------------------
  112. // CS60MemoryLabContainer::Draw(const TRect& aRect) const
  113. // ---------------------------------------------------------
  114. //
  115. void CS60MemoryLabContainer::Draw(const TRect& aRect) const
  116.     {
  117.     CWindowGc& gc = SystemGc();
  118.     gc.SetPenStyle(CGraphicsContext::ENullPen);
  119.     gc.SetBrushColor(KRgbGray);
  120.     gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
  121.     gc.DrawRect(aRect);
  122.     }
  123. // ---------------------------------------------------------
  124. // CS60MemoryLabContainer::HandleControlEventL(
  125. //     CCoeControl* aControl,TCoeEvent aEventType)
  126. // ---------------------------------------------------------
  127. //
  128. void CS60MemoryLabContainer::HandleControlEventL(
  129.     CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
  130.     {
  131.     // Do nothing
  132.     }
  133.     
  134. // End of File