/*
* HwMultiViewView1.h
* Autor: Pawe Gala
*/

#ifndef __HWMULTIVIEWVIEW1_H__
#define __HWMULTIVIEWVIEW1_H__

#include <aknview.h>

// Identyfikator widoku
const TUid KView1Id = {1};

// Deklaracja klasy kontenera widoku
class CHwMultiViewContainer1;

class CHwMultiViewView1 : public CAknView
    {
    public:    // Konstruktor i destruktor
        void ConstructL();
        ~CHwMultiViewView1();

    public:    // Odziedziczone z klasy bazowej
        TUid Id() const;
        void HandleCommandL( TInt aCommand );
        void HandleClientRectChange();

    private:   // Odziedziczone z klasy bazowej
        void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage );
        void DoDeactivate();
        
    private:   // Pola
        CHwMultiViewContainer1* iContainer;
    };

#endif  // __HWMULTIVIEWVIEW1_H__


/*
* HwMultiViewView1.cpp
* Autor: Pawe Gala
*/

#include  <aknviewappui.h>
#include  <avkon.hrh>
#include  <HwMultiView.rsg>
#include  "HwMultiViewView1.h"
#include  "HwMultiViewView2.h"
#include  "HwMultiViewContainer1.h" 
#include  "HwMultiView.hrh"


void CHwMultiViewView1::ConstructL()
    {
    // Tworzenie widoku na podstawie struktury zapisanej w zasobach
    BaseConstructL( R_HWMULTIVIEW_VIEW1 );
    }

CHwMultiViewView1::~CHwMultiViewView1()
    {
    if( iContainer )
        {
        // Przed usuniciem obiektu kontenera naley usun go ze stosu kontrolek
        // AppUi.
        AppUi()->RemoveFromViewStack( *this, iContainer );
        delete iContainer;
        }
    }

TUid CHwMultiViewView1::Id() const
    {
    return KView1Id;
    }

void CHwMultiViewView1::HandleCommandL(TInt aCommand)
    {
    // Przetwarzanie komend - jeeli widok nie posiada procedury obsugi
    // komendy, to jest ona przekierowywana do AppUi.
    switch( aCommand )
        {
        case EHwMultiViewCmdView1SwitchToView2:
            {
            // Aktywacja widoku drugiego
            AppUi()->ActivateLocalViewL( KView2Id );
            }
            break;
        default:
            {
            AppUi()->HandleCommandL( aCommand );
            }
        }
    }

void CHwMultiViewView1::HandleClientRectChange()
    {
    // Zmieni si rozmiar obszaru aplikacji - aktualizujemy obszar kontenera.
    if( iContainer )
        {
        iContainer->SetRect( ClientRect() );
        }
    }

void CHwMultiViewView1::DoActivateL( const TVwsViewId&, TUid, const TDesC8& )
    {
    // Aktywacja widoku 
    if(!iContainer)
        {
        // Kontener jeszcze nie istnieje.
        // - pierwsza faza konstrukcji
        iContainer = new( ELeave ) CHwMultiViewContainer1();
        // - ustawienie kontrolki-rodzica
        iContainer->SetMopParent( this );
        // - druga faza konstrukcji
        iContainer->ConstructL( ClientRect() );
        // - dodanie kontenera do stosu kontrolek AppUi (jest to konieczne, aby 
              // zdarzenia mogy by przekazywane do kontenera)
        AppUi()->AddToStackL( *this, iContainer );
        } 
   }

void CHwMultiViewView1::DoDeactivate()
    {
    // Deaktywacja widoku - usuwamy kontener (zwalniamy pami).
    if( iContainer )
        {
        // Przed usuniciem obiektu kontenera naley usun go ze stosu kontrolek
        // AppUi.
        AppUi()->RemoveFromViewStack( *this, iContainer );
        delete iContainer;
        iContainer = NULL;
        }
    }
