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

#ifndef __HWMULTIVIEWCONTAINER1_H__
#define __HWMULTIVIEWCONTAINER1_H__

#include <coecntrl.h>


// Deklaracja klasy kontrolki pola edycji
class CEikEdwin;

class CHwMultiViewContainer1 : public CCoeControl, MCoeControlObserver
    {
    public:    // Konstruktor i destruktor
        void ConstructL( const TRect& aRect );
        ~CHwMultiViewContainer1();

    private:   // Odziedziczone z klasy CCoeControl
        void SizeChanged();
        // Metoda wywoywana przez rodowisko uruchomieniowe aplikacji - zwraca 
        // liczb kontrolek nalecych do kontenera widoku.
        TInt CountComponentControls() const;
        // Metoda wywoywana przez rodowisko uruchomieniowe aplikacji  zwraca
        // wskaniki do kolejnych kontrolek kontenera widoku.
        CCoeControl* ComponentControl( TInt aIndex ) const;
        void Draw( const TRect& aRect ) const;
        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );

    private:   // Odziedziczone z interfejsu MCoeControlObserver
        void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
        
    private:   // Pola
        CEikEdwin* iEdwin;
    };

#endif  // __HWMULTIVIEWCONTAINER1_H__


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

#include <eikedwin.h>    // CEikEdwin
#include "HwMultiViewContainer1.h"


void CHwMultiViewContainer1::ConstructL( const TRect& aRect )
    {
    // Tworzenie okna kontenera
    CreateWindowL();

    // Tworzenie obiektu kontrolki pola edycji
    // - pierwsza faza konstrukcji
    iEdwin = new( ELeave ) CEikEdwin();
    // - ustawienie okna-rodzica
    iEdwin->SetContainerWindowL( *this );
    // - druga faza konstrukcji
    iEdwin->ConstructL( 0, 0, 32 /*maks. liczba znakw*/, 0 );
    // - ustawienie domylnego tekstu
    _LIT( KTekst, "To jest CEikEdwin" );
    iEdwin->SetTextL( &KTekst() );
    // - ustwienie kontrolki jako biecej (pojawi si w niej kursor)
    iEdwin->SetFocus( ETrue );

    // Ustawienie obszaru widoku oraz jego aktywacja (widok jest gotowy do
    // narysowania).
    SetRect( aRect );
    ActivateL();
    }

CHwMultiViewContainer1::~CHwMultiViewContainer1()
    {
    delete iEdwin;
    }

void CHwMultiViewContainer1::SizeChanged()
    {
    // Uaktualnianie rozmiaru kontrolki pola edycji po kadej zmianie obszaru widoku
    TSize size( Size() );
    size.iHeight -= 20;
    size.iWidth -= 20;
    
    iEdwin->SetExtent( TPoint( 10, 10 ), size );
    }

TInt CHwMultiViewContainer1::CountComponentControls() const
    {
    // Widok posiada tylko jedn kontrolk - pole tekstowe (klasa iEdwin).
    return 1;
    }

CCoeControl* CHwMultiViewContainer1::ComponentControl( TInt aIndex ) const
    {
    switch( aIndex )
        {
        case 0:
            return iEdwin;
        default:
            return NULL;
        }
    }

void CHwMultiViewContainer1::Draw( const TRect& aRect ) const
    {
    // Czyszczenie obszaru widoku (kolor domylny)
    CWindowGc& gc = SystemGc();
    TRect drawRect( aRect );
    gc.Clear(drawRect);
    }

TKeyResponse CHwMultiViewContainer1::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
    {
    // Przekierowywanie zdarze klawiszowych do kontrolki
    return iEdwin->OfferKeyEventL( aKeyEvent, aType );
    }

void CHwMultiViewContainer1::HandleControlEventL( CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/ )
    {
    // Obsuga zmian stanu kontrolek nalecych do kontenera widoku (implementacja
    // pominita)
    }
