multimediacommsengine/tsrc/MCETestUI/src/CMCETestUISessionViewContainer.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/src/CMCETestUISessionViewContainer.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,348 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+
+
+// INCLUDE FILES
+#include "CMCETestUIAppUi.h"
+#include "CMCETestUISessionView.h"
+#include "CMCETestUISessionViewContainer.h"
+#include "CMCETestUISessionViewModel.h"
+#include "CMCETestUIEngine.h"
+#include "CMCETestUIEngineProfile.h"
+#include "CMCETestUIEngineSession.h"
+#include "TMCETestUIEngineCmdBase.h"
+#include <aknviewappui.h>
+#include <aknview.h>
+#include <aknpopup.h>
+
+
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS ==========================================
+
+CMCETestUISessionViewContainer* CMCETestUISessionViewContainer::NewL(
+        const TRect& aRect,
+        CMCETestUISessionView& aOwningView,
+        CMCETestUIEngine& aEngine,
+        CMCETestUIEngineSession& aSession )
+    {
+	CMCETestUISessionViewContainer* self = 
+	        new(ELeave) CMCETestUISessionViewContainer( 
+	                        aOwningView, 
+	                        aEngine, 
+	                        aSession );
+	CleanupStack::PushL(self);
+	self->ConstructL( aRect );
+	CleanupStack::Pop(self);
+	return self;    
+    }
+
+CMCETestUISessionViewContainer::CMCETestUISessionViewContainer( 
+        CMCETestUISessionView& aOwningView, 
+        CMCETestUIEngine& aEngine, 
+        CMCETestUIEngineSession& aSession )
+    :iOwningView( aOwningView ),
+    iEngine( aEngine ),
+    iSession( aSession ),
+    iContextMenuAlreadyShown( EFalse )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::ConstructL(const TRect& aRect)
+// EPOC two phased constructor
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    //Window().SetShadowDisabled(EFalse);
+
+	iListBox = new (ELeave) CAknDoubleStyleListBox(); 
+   
+	iListBox->SetContainerWindowL(*this);
+	iListBox->ConstructL( this, 
+	                      EAknListBoxSelectionList | EAknListBoxLoopScrolling);
+	iListBox->SetListBoxObserver(this);
+	iListBox->SetMopParent(this);
+
+    iListBoxModel = CMCETestUISessionViewModel::NewL( iEngine, iSession );   
+
+    iListBox->Model()->SetItemTextArray( iListBoxModel );      
+	
+    SetRect(aRect);
+
+    iListBox->SetRect(Rect());
+
+	//Set up the listbox to use a scroll bar
+	iListBox->CreateScrollBarFrameL(ETrue);
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+	    CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+
+    ConstructModelL();
+    
+    ActivateL(); 
+   
+    //iListBox->HandleItemAdditionL();   
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::~CMCETestUISessionViewContainer()
+// Destructor
+// Frees reserved resources
+// -----------------------------------------------------------------------------
+//
+CMCETestUISessionViewContainer::~CMCETestUISessionViewContainer()
+    {
+    delete iListBox;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::~CMCETestUISessionViewContainer()
+// Destructor
+// Frees reserved resources
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::ConstructModelL()
+    {
+    iListBoxModel = CMCETestUISessionViewModel::NewL( iEngine, iSession );   
+
+    iListBox->Model()->SetItemTextArray( iListBoxModel ); 
+    
+    iListBox->Reset();      
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::SizeChanged()
+// Called by framework when the view size is changed
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::SizeChanged()
+    {
+    TInt error;
+    
+    // TRAP methods that can leave.
+    TRAP(error, SizeChangedL());
+    if(error != KErrNone)
+        {
+        User::Panic( KNullDesC16, 0 );
+        }   
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::SizeChangedL()
+// Methods that can leave and are needed by SizeChanged
+// are collected into this method.
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::SizeChangedL()
+    {
+  
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::CountComponentControls() const
+// Note! Output window must be ignored.
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUISessionViewContainer::CountComponentControls() const
+    {
+    if ( iListBox ) 
+        return 1;
+    return 0;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::ComponentControl()
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CMCETestUISessionViewContainer::ComponentControl(TInt /*aIndex*/) const
+    {
+    return iListBox;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::HandleListBoxEventL()
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::HandleListBoxEventL( 
+                CEikListBox* aListBox, 
+                TListBoxEvent aEventType )
+    {
+    TInt selectedIndex = iListBox->CurrentItemIndex();
+    CEikonEnv* eikonEnv = CEikonEnv::Static();
+	CMCETestUIAppUi* tempUiPtr = (CMCETestUIAppUi*)eikonEnv->AppUi();
+    
+    tempUiPtr->iCurrentStreamViewIndex = KErrNone;
+    if ( aListBox == iListBox )
+        {
+        if ( aEventType == EEventEnterKeyPressed || aEventType == EEventItemDoubleClicked )
+            {
+            
+            iOwningView.ChangeToStreamViewL(selectedIndex);
+            tempUiPtr->iCurrentStreamViewIndex = selectedIndex;
+            // TODO: Add changes to event and refer views
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::Draw(const TRect& aRect) const
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::Draw(const TRect& aRect ) const
+{
+    CWindowGc& gc = SystemGc();
+    gc.Clear( aRect );    
+}
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::HandleControlEventL(
+//     CCoeControl* aControl,TCoeEvent aEventType)
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::HandleControlEventL(
+        CCoeControl* /*aControl*/,
+        TCoeEvent /*aEventType*/)
+{
+    // TODO: Add your control event handler code here
+}
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
+//                                    TEventCode aType)
+// Handle key event. Only up and down key arrow events are
+// consumed in order to enable scrolling in output window.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CMCETestUISessionViewContainer::OfferKeyEventL(
+        const TKeyEvent& aKeyEvent,
+        TEventCode aType)
+    {    
+    if ( aType == EEventKeyUp )
+        {
+        
+        if ( aKeyEvent.iCode == 0 && aKeyEvent.iScanCode == 164 ) // EAknSoftkeyOptions?
+            {
+            DoShowMenuL();
+
+            return EKeyWasConsumed;
+            }
+        }
+    return iListBox->OfferKeyEventL( aKeyEvent, aType );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void CMCETestUISessionViewContainer::DoShowMenuL()
+    {
+    if ( iContextMenuAlreadyShown )
+        {
+        iContextMenuAlreadyShown = EFalse;
+        return;
+        }
+        
+    // Get command provider
+    MMCETestUIEngineCmdProvider& cmdProvider = 
+        iListBoxModel->CmdProvider( iListBox->CurrentItemIndex() );
+    
+    // Get commands    
+    const RPointerArray<TMCETestUIEngineCmdBase>& commands = 
+        cmdProvider.GetCommandsL();
+
+
+    // Generate list
+    CAknSinglePopupMenuStyleListBox* listBox = 
+            new (ELeave) CAknSinglePopupMenuStyleListBox;   
+    CleanupStack::PushL( listBox );
+    
+    CAknPopupList* popup = CAknPopupList::NewL( 
+            listBox, 
+            R_AVKON_SOFTKEYS_MENU_LIST,
+            AknPopupLayouts::EPopupSNotePopupWindow );
+    CleanupStack::PushL( popup );
+    popup->SetTitleL( _L("Available commands") );
+        
+    listBox->ConstructL( popup, 
+        EAknListBoxSelectionList | EAknListBoxLoopScrolling);
+    
+    listBox->CreateScrollBarFrameL( ETrue );
+    listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+    
+    CDesCArray* array = new (ELeave) CDesCArrayFlat( 1 );
+    CleanupStack::PushL( array );
+    
+    for ( TInt i = 0; i < commands.Count(); ++i )
+        {
+        TInt itemLength = commands[i]->Caption().Length() + 
+                          KTab().Length();
+        HBufC* item = HBufC::NewLC( itemLength );
+        TPtr itemPtr = item->Des();
+        itemPtr.Append( commands[i]->Caption() );
+        itemPtr.Append( KTab );
+
+        array->AppendL( *item );
+
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+           
+    CleanupStack::Pop( array );
+    listBox->Model()->SetItemTextArray( array );            
+    
+    CleanupStack::Pop( popup ); 
+    TInt selectedCommand = -1;             
+    if ( popup->ExecuteLD() )
+        {
+        selectedCommand = listBox->CurrentItemIndex();
+        }
+
+    CleanupStack::PopAndDestroy( listBox );
+
+    if ( selectedCommand != -1 )
+        {
+        // This will not work...
+        TRAPD( err, commands[ selectedCommand ]->ExecuteL() );
+        if ( err != KErrNone )
+            {
+            CEikonEnv* eikonEnv = CEikonEnv::Static();
+            CMCETestUIAppUi* tempUiPtr = (CMCETestUIAppUi*)eikonEnv->AppUi();
+            TInt errorLength = KLeaveMessage().Length() + 10;
+            HBufC* error = HBufC::NewL( errorLength );
+            TPtr errorPtr = error->Des();
+            errorPtr.Append( KLeaveMessage );
+            errorPtr.AppendNum( err );
+           // User::InfoPrint( *error );
+            tempUiPtr->NotifyUser(*error);
+            delete error;
+            }
+                          
+        }
+    }
+
+// End of File