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

Symbian

开发平台:

C/C++

  1. // Copyright (c) 2006 Nokia Corporation.
  2. #include "AOLabBubbleSortContainer.h"
  3. #include "ActiveBubbleSorter.h"
  4. #include <eiklabel.h>
  5. _LIT(KStartActionText, "Select menu itemnto begin sorting...");
  6. _LIT(KCancelActionText, "Select menu itemnto cancel sorting...");
  7. _LIT(KSortingText, "Sorting...");
  8. _LIT(KSortingComplete, "Sorting Complete.");
  9. _LIT(KSortingError, "Sorting Error: %d");
  10. _LIT(KSortingCancelled, "Sorting cancelled.");
  11. // Constructs a container for this application
  12. CAOLabBubbleSortContainer* CAOLabBubbleSortContainer::NewL(const TRect& aRect)
  13. {
  14. CAOLabBubbleSortContainer* self = new (ELeave) CAOLabBubbleSortContainer();
  15.     CleanupStack::PushL(self);
  16.     self->ConstructL(aRect);
  17.     CleanupStack::Pop(self);
  18.     
  19.     return self;
  20. }
  21. // EPOC two phased constructor
  22. void CAOLabBubbleSortContainer::ConstructL(const TRect& aRect)
  23.     {
  24.     CreateWindowL();
  25.     iTopLabel = new (ELeave) CEikLabel;
  26.     iTopLabel->SetContainerWindowL( *this );
  27.     iTopLabel->SetTextL(KStartActionText);
  28. iBottomLabel = new (ELeave) CEikLabel;
  29.     iBottomLabel->SetContainerWindowL( *this );
  30.     iBottomLabel->SetTextL(KNullDesC);
  31.     
  32.     iActiveBubbleSorter = CActiveBubbleSorter::NewL(*this);
  33.     SetRect(aRect);
  34.     ActivateL();
  35.     }
  36. // Destructor
  37. CAOLabBubbleSortContainer::~CAOLabBubbleSortContainer()
  38.     {
  39.     delete iActiveBubbleSorter;
  40.     delete iBottomLabel;
  41. delete iTopLabel;
  42.     }
  43. // Called by framework when the view size is changed
  44. void CAOLabBubbleSortContainer::SizeChanged()
  45.     {
  46.     iTopLabel->SetExtent( TPoint(0,0), TSize(Rect().Width(), Rect().Height()/2));
  47.     iBottomLabel->SetExtent( TPoint(0,Rect().Height()/2), TSize(Rect().Width(),Rect().Height()/2));
  48.     }
  49. // Returns the number of controls inside this container
  50. TInt CAOLabBubbleSortContainer::CountComponentControls() const
  51.     {
  52.     return 2; // return nbr of controls inside this container
  53.     }
  54. // Gets an indexed component of this compound control
  55. CCoeControl* CAOLabBubbleSortContainer::ComponentControl(TInt aIndex) const
  56.     {
  57.     switch ( aIndex )
  58.         {
  59.         case 0:
  60.             return iTopLabel;
  61.         case 1:
  62.             return iBottomLabel;
  63.         default:
  64.             return NULL;
  65.         }
  66.     }
  67. // Draw a grey rectangle that fills the client area of the screen
  68. void CAOLabBubbleSortContainer::Draw(const TRect& aRect) const
  69.     {
  70.     CWindowGc& gc = SystemGc();
  71.     
  72.     gc.SetPenStyle(CGraphicsContext::ENullPen);
  73.     gc.SetBrushColor(KRgbGray);
  74.     gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
  75.     gc.DrawRect(aRect);
  76.     }
  77. // Starts sorting
  78. void CAOLabBubbleSortContainer::SortL()
  79.     {
  80. iIsSorting = ETrue;
  81.     iTopLabel->SetTextL(KCancelActionText);
  82.     iBottomLabel->SetTextL(KSortingText);
  83.     DrawNow();
  84.     
  85.     iActiveBubbleSorter->StartL();
  86.     }
  87. // Callback function called when sorting has been completed
  88. void CAOLabBubbleSortContainer::SortComplete(TInt aError)
  89.     {
  90.     iIsSorting = EFalse;
  91.     
  92.     TBuf<20> buf;
  93.     if (aError == KErrNone)
  94.      {
  95.      buf.Format(KSortingComplete);
  96.      }
  97.     else
  98.      {
  99.      buf.Format(KSortingError, aError);
  100.      }
  101.     
  102.     iTopLabel->SetTextL(KStartActionText);
  103.     iBottomLabel->SetTextL(buf);
  104.     DrawNow();
  105.     }
  106. // Cancels the sort
  107. void CAOLabBubbleSortContainer::CancelSortL()
  108. {
  109. iActiveBubbleSorter->Cancel();
  110. iIsSorting = EFalse;
  111. iTopLabel->SetTextL(KStartActionText);
  112.     iBottomLabel->SetTextL(KSortingCancelled);
  113.     DrawNow();
  114. }
  115. // End of File