00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 #include <coemain.h>
00033 #include <eikenv.h>
00034 #include <gdi.h>
00035 #include <txtrich.h>
00036 #include <aknsbasicbackgroundcontrolcontext.h>
00037 
00038 #include "DescriptorExContainer.h"
00039 
00040 
00041 
00042 
00043 
00044 
00045 void CDescriptorExContainer::ConstructL(const TRect& aRect)
00046     {
00047     CreateWindowL();
00048 
00049     
00050     iTextBox = new (ELeave) CEikEdwin();
00051     iTextBox->SetContainerWindowL( *this );
00052     iTextBox->ConstructL( CEikEdwin::ENoAutoSelection |
00053                           CEikEdwin::EDisplayOnly |
00054                           CEikEdwin::EReadOnly |
00055                           CEikEdwin::EAvkonEditor |
00056                           CEikEdwin::EInclusiveSizeFixed);
00057     iTextBox->CreateScrollBarFrameL()->SetScrollBarVisibilityL(
00058             CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOn);
00059     
00060     iTextBox->UpdateScrollBarsL();
00061     
00062     
00063     
00064     iSkinContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgAreaMainAppsGrid,aRect,EFalse);         
00065     
00066     
00067     ActivateL();
00068 
00069     
00070     
00071     
00072     SetRect(aRect);
00073     }
00074 
00075 
00076 
00077 
00078 CDescriptorExContainer::~CDescriptorExContainer()
00079     {
00080     delete iTextBox;
00081     delete iSkinContext;
00082     }
00083 
00084 
00085 
00086 
00087 void CDescriptorExContainer::SetTextL(const TDesC& aText)
00088 {
00089     iTextBox->SetTextL( &aText );
00090     iTextBox->SetFocus( ETrue );
00091     
00092     iTextBox->HandleTextChangedL();
00093     iTextBox->UpdateScrollBarsL();
00094     
00095 }
00096 
00097 
00098 
00099 
00100 TInt CDescriptorExContainer::CountComponentControls() const
00101     {
00102     return 1; 
00103     }
00104 
00105 
00106 
00107 
00108 
00109 
00110 
00111 TKeyResponse CDescriptorExContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
00112                                                     TEventCode aType)
00113 {
00114     TKeyResponse result = EKeyWasNotConsumed;
00115     switch(aKeyEvent.iScanCode)
00116     {
00117     case EStdKeyRightArrow:
00118     case EStdKeyDownArrow:
00119         {
00120             result = EKeyWasConsumed;
00121             if( aType == EEventKeyDown )
00122             {
00123                 iTextBox->MoveCursorL( TCursorPosition::EFLineDown, EFalse );
00124             }
00125             break;
00126         }
00127 
00128     case EStdKeyLeftArrow:
00129     case EStdKeyUpArrow:
00130         {
00131             result = EKeyWasConsumed;
00132             if( aType == EEventKeyDown )
00133             {
00134                 iTextBox->MoveCursorL( TCursorPosition::EFLineUp, EFalse );
00135             }
00136             break;
00137         }
00138     }
00139     return result;
00140 }
00141 
00142 
00143 
00144 
00145 CCoeControl* CDescriptorExContainer::ComponentControl(TInt aIndex) const
00146     {
00147     switch ( aIndex )
00148         {
00149         case 0:
00150             return iTextBox;
00151         default:
00152             return NULL;
00153         }
00154     }
00155 
00156 TInt CDescriptorExContainer::GetScrollbarWidth() const
00157     {
00158     TInt scrollbarWidth = iTextBox->ScrollBarFrame()->
00159         ScrollBarBreadth(CEikScrollBar::EVertical);
00160     
00161     
00162     if (scrollbarWidth == 0)
00163         {
00164         scrollbarWidth = 8;
00165         }
00166     
00167     return scrollbarWidth;
00168     }
00169 
00170 
00171 void CDescriptorExContainer::SizeChanged()
00172     {
00173     TRect rect = Rect();
00174     TInt scrollbarWidth = GetScrollbarWidth();
00175     iTextBox->SetExtent(TPoint(0, 0),
00176             TSize(rect.Width() - scrollbarWidth, rect.Height()));
00177 
00178     iTextBox->UpdateScrollBarsL();
00179     
00180     
00181     iSkinContext->SetRect(rect);
00182     }
00183 
00184 
00185 TTypeUid::Ptr CDescriptorExContainer::MopSupplyObject(TTypeUid aId)
00186     {
00187     
00188     if( aId.iUid == MAknsControlContext::ETypeId && iSkinContext != NULL )
00189         {
00190         return MAknsControlContext::SupplyMopObject( aId, iSkinContext );
00191         }
00192     return CCoeControl::MopSupplyObject( aId );    
00193     }
00194