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

#ifndef __HWMULTIVIEWAPPUI_H__
#define __HWMULTIVIEWAPPUI_H__

#include <eikapp.h>
#include <eikdoc.h>
#include <e32std.h>
#include <coeccntx.h>
#include <aknviewappui.h>
#include <akntabgrp.h>
#include <aknnavide.h>


class CHwMultiViewView;
class CHwMultiViewView2;  

class CHwMultiViewAppUi : public CAknViewAppUi
    {
    public:    // Konstruktor i destruktor
        void ConstructL();      
        ~CHwMultiViewAppUi();

    private:   // Odziedziczone z klasy bazowej
        void HandleCommandL(TInt aCommand);
        virtual void HandleResourceChangeL( TInt aType );  

    private:   // Pola
        TUid iViewId1;
        TUid iViewId2;
    };

#endif  // __HWMULTIVIEWAPPUI_H__


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

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


void CHwMultiViewAppUi::ConstructL()
    {
    // Konstruktor klasy bazowej - wczamy wsparcie dla skrek (tematw).
    BaseConstructL( EAknEnableSkin );

    // Widok 1
    // - pierwsza faza konstrukcji
    CHwMultiViewView1* view1 = new( ELeave ) CHwMultiViewView1();
    CleanupStack::PushL( view1 );
    // - druga faza konstrukcji
    view1->ConstructL();
    // Rejestracja i dodanie widoku do AppUi (AppUi przejmuje prawo wasnoci 
    // do wskanika).
    // view1 - nie musimy go zwalnia samodzielnie.
    AddViewL( view1 );
    // Konstrukcja obiektu widoku zostaa zakoczona prawidowo - zdejmujemy wskanik 
    // ze stosu CleanupStack.
    CleanupStack::Pop( view1 );
    // Zapamitujemy identyfikator widoku - jest on uywany w metodzie
    // HandleResourceChangeL().
    iViewId1 = view1->Id(); 

    // Widok 2 - powtrzenie czynnoci
    CHwMultiViewView2* view2 = new( ELeave ) CHwMultiViewView2();
    CleanupStack::PushL( view2 );
    view2->ConstructL();
    AddViewL( view2 );
    CleanupStack::Pop( view2 );
    iViewId2 = view2->Id();

    // Widok 1 bdzie widokiem gwnym aplikacji.
    SetDefaultViewL( *view1 );
    }

CHwMultiViewAppUi::~CHwMultiViewAppUi()
    {
    }

void CHwMultiViewAppUi::HandleCommandL( TInt aCommand )
    {
    switch( aCommand )
        {
        case EEikCmdExit:
        case EAknSoftkeyExit:
            {
            Exit();
            break;
            }
        }
    }

void CHwMultiViewAppUi::HandleResourceChangeL( TInt aType )
    {
    CAknAppUi::HandleResourceChangeL( aType );

    if ( aType==KEikDynamicLayoutVariantSwitch )
        {
        // Zmienia si orientacja ekranu - informujemy o tym fakcie oba widoki.
        ( ( CHwMultiViewView1* )View( iViewId1) )->HandleClientRectChange();
        ( ( CHwMultiViewView2* )View( iViewId2) )->HandleClientRectChange();
        }
    }
