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

#ifndef __GLOBALNEOKNODIALOGOWE_H__
#define __GLOBALNEOKNODIALOGOWE_H__

#include <e32base.h>

/**
* Interfejs, przez ktry przekazywane s notyfikacje o zamkniciu dialogu.
*/
class MObserwatorDialogu
    {
public:
    /**
    * Metoda wywoywana z CGlobalneOknoDialogowe::RunL() w chwili zamknicia 
    * dialogu
    * 
    * @param aId Identyfikator zamykanego dialogu.
    * @param aDane Identyfikator wybranego przycisku programowego lub indeks wybranej
    * pozycji na dialogu-licie
    */
    virtual void DialogZamkniety( TUint aId, TInt aDane ) = 0;
    };

/**
* Klasa bazowa dla wszystkich klas dialogw globalnych
*/
class CGlobalneOknoDialogowe : public CActive
    {
public:    // Konstruktor
    CGlobalneOknoDialogowe( TUint aId, MObserwatorDialogu& aObserwatorDialogu );
    
protected: // Odziedziczone z CActive
    /**
    * Implementacja domylna
    */
    virtual void RunL();
    
protected: // Destruktor
    virtual ~CGlobalneOknoDialogowe() {}
    
protected: // Pola
    // Kady obiekt dialogu ma swj identyfikator oraz przechowuje referencj 
    // do obiektu obserwatora.
    TUint iId;
    MObserwatorDialogu& iObserwatorDialogu;
    };

#endif /* __GLOBALNEOKNODIALOGOWE_H__ */


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

#include "GlobalneOknoDialogowe.h"


CGlobalneOknoDialogowe::CGlobalneOknoDialogowe( TUint aId, MObserwatorDialogu& aObserwatorDialogu )
:CActive( EPriorityStandard )
,iId( aId )
,iObserwatorDialogu( aObserwatorDialogu )
    {
    CActiveScheduler::Add( this );
    }

void CGlobalneOknoDialogowe::RunL()
    {
    iObserwatorDialogu.DialogZamkniety( iId, iStatus.Int() );
    }
