Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > media > contrib-release-debug > by-pkgid > 4d4c94c1cf259d8f8e2a7c3821a11962 > files > 58

bsc-debug-4.1.0-2mdv2011.0.i586.rpm

#ifndef INCLUDED_QBtEventsController_h
#define INCLUDED_QBtEventsController_h

/********************************************************************
 * Copyright (C) Piotr Pszczolkowski
 *-------------------------------------------------------------------
 * This file is part of Beesoft Commander.
 *
 * Beesoft Commander is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * Beesoft Commander is distributed in the hope that it will be
 * useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Beesoft Commander; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA  02110-1301  USA
 *-------------------------------------------------------------------
 * Project      : Beesoft Commander
 * File         : QBtEventsController.h
 * Author       : Piotr Pszczolkowski
 * Contact      : piotr@beesoft.org
 * Creation date: 24.08.2007
 *******************************************************************/

/*------- include files:
-------------------------------------------------------------------*/
#include "QBtEvent.h"
#include <QVariant>
#include <QObject>
#include <QMutex>
#include <map>
#include <set>

/*------- class declaration:
-------------------------------------------------------------------*/
/**
* @brief  Klasa <b>singleton</b> obslugujaca wysylanie i odbior zdarzen zdefiniowanych
*         przez uzytkownika.
* @author Piotr Pszczolkowski
* @date   2007.08.24
*
* Funkcje tego obiektu pozwalaja na wysylania zdarzen przez dowolna funkcje.<br>
* Zdarzenia beda odbierane tylko przez klasy ktore zarejestrowaly chec ich odbierania.<br>
* Odbierac zdarzenia moga tylko i wylacznie obiekty dziedziczace klase QObject i ktore na
* poczatku deklaracji klasy maja wpisane makro Q_OBJECT.<br>
* Klasa chcaca odbierac zdarzenie moze to robic uzywajac wlasnej implementacji
* funkcji customEvent( QEvent* const in_event )
*/
class QBtEventsController : public QObject
{
   Q_OBJECT

// ******* CONSTRUCTION/DESTRUCTION *******
private:
   /**
   * @brief Prywatny konstruktor.
   *
   * Jest on prywatny ze wzgledu na implementacje singletona.<br>
   * Jednym mozliwym miejscem jego wywolania jest funkcja instance().<br>
   * Klasa nie zawiera zadnego publicznego konstruktora.<br>
   *
   * @see instance()
   */
   QBtEventsController();

   /**
   * @brief Prywatny destruktor.
   */
   ~QBtEventsController();

   /**
   * @brief Zablokowany copy-construktor.
   */
   QBtEventsController( const QBtEventsController& );

   /**
   * @brief Zablokowany operator przypisania.
   */
   QBtEventsController& operator=( const QBtEventsController& );

// ******* TYPES *******
private:
   /**
   * @brief Nazwa na posortowany zbior wskaznikow do zarejestrowanych 
   *        obiektow chcacych odbierac sygnaly.
   * @see EventsRegister
   */
   typedef std::set< QObject* > Objects;

   /**
   * @brief Nazwa na posortowany zbior sygnalow i zainteresownych nimi obiektow.
   *
   * Kluczem zbioru sa numery sygnalow. Kazdemu sygnalowi odpowiada zbior
   * obiektow, ktore chca go otrzymywac.
   *
   * @see append(), Objects
   */
   typedef std::map< qint32, Objects > EventsRegister;

// ******* MEMBERS *******
private:
   /**
   * @brief Rejestr zawierajacy informacje o obiektach i sygnalach.
   * @see EventsRegister
   */
   EventsRegister evreg_;

   /**
   * @brief Muteks sluzacy do blokowania wielodostepu do rejestru.
   * @see evreg_
   */
   QMutex mutex_;

// ******* METHODS *******
public:
   /**
   * @brief Funkcja zwracajaca wskaznik do obiektu (singletona).
   *
   * Funkcja ta jest gwarantem tego, ze obiekt zostanie utworzony tylko jeden raz.<br>
   * Jesli obiekt zostal wczesniej utworzony to zostanie zwrocony wskaznik do niego.<br>
   * Jesli obiekt jeszcze nie istnieje zostanie on najpierw utworzony, a nastepnie
   * zostanie zwrocony wskaznik do niego.<br>
   * Kazde odwolanie sie do metod tego obiektu musi miec postac
   * QBtEventsController::instance()->nazwa_metody.
   *
   * @see QBtEventsController()
   */
   static QBtEventsController* instance();

   /**
   * @brief Fukcja dopisuje do rejestru obiekt chcacy odbierac wskazany sygnal.
   * @param in_receiver Wskaznik do obiektu, ktory chce odebrac sygnal,
   * @param in_event_id Identyfikator(numer) sygnalu, ktory chce odbierac ten obiekt.
   *
   * Jesli jakis obiekt chce odbierac wieksza ilosc sygnalow, tyle razy musi sie
   * rejestrowac ile sygnalow chce odbierac. Dla kazdego z sygnalow osobno.<br>
   * Typowym miejscem uzycia tej funkcji jest konstruktor obiektu chcacego
   * odbierac sygnaly.
   *
   * @see remove
   */
   bool append( QObject* in_receiver, qint32 in_event_id );

   /**
   * @brief Funkcja usuwa z rejestru wszystkie informacje o wskazanym obiekcie.
   * @param in_receiver Wskaznik do obiektu, ktory ma byc usuniety z rejestru.
   *
   * Po usunieciu wksazanego obiektu z rejestru, nie bedzie on juz otrzymywal
   * zadnych sygnalow.<br>
   * Typowym miejscem uzycia tej funkcji jest destruktor usuwanego obiektu.
   *
   * @see append
   */
   void remove( QObject* in_receiver );

   /**
   * @brief Wyslanie wskazanego sygnalu bez danych.
   * @param in_event_id Identyfikator(numer) wysylanego sygnalu.
   */
   void send_event( qint32 in_event_id );

   /**
   * @brief Wyslanie wskazanego sygnalu wraz z jedna dana.
   * @param in_event_id Identyfikator(numer) wysylanego sygnalu.
   * @param in_val Dana przekazywana wraz sygnalem.
   */
   void send_event( qint32 in_event_id, QVariant in_val );

   /**
   * @brief Wyslanie wskazanego sygnalu wraz z dwoma danymi.
   * @param in_event_id Identyfikator(numer) wysylanego sygnalu.
   * @param in_val1 Dana nr. 1 przekazywana wraz sygnalem.
   * @param in_val2 Dana nr. 2 przekazywana wraz sygnalem.
   */
   void send_event( qint32 in_event_id, QVariant in_val1, QVariant in_val2 );
   
   /**
   * @brief Wyslanie wskazanego sygnalu wraz z trzema danymi.
   * @param in_event_id Identyfikator(numer) wysylanego sygnalu.
   * @param in_val1 Dana nr. 1 przekazywana wraz sygnalem.
   * @param in_val2 Dana nr. 2 przekazywana wraz sygnalem.
   * @param in_val3 Dana nr. 3 przekazywana wraz sygnalem.
   */
   void send_event(  qint32   in_event_id,
                     QVariant in_val1,
                     QVariant in_val2,
                     QVariant in_val3 );

   /**
   * @brief Wyslanie wskazanego sygnalu wraz z czterema danymi.
   * @param in_event_id Identyfikator(numer) wysylanego sygnalu.
   * @param in_val1 Dana nr. 1 przekazywana wraz sygnalem.
   * @param in_val2 Dana nr. 2 przekazywana wraz sygnalem.
   * @param in_val3 Dana nr. 3 przekazywana wraz sygnalem.
   * @param in_val4 Dana nr. 4 przekazywana wraz sygnalem.
   */
   void send_event(  qint32   in_event_id,
                     QVariant in_val1,
                     QVariant in_val2,
                     QVariant in_val3,
                     QVariant in_val4 );
private:
   /**
   * @brief Sprawdzenie czy para obiekt-sygnal jest juz zarejestrowana w rejestrze.
   * @param in_receiver Wskaznik do obiektu chcacego odbierac wkazany sygnal,
   * @param in_event_id Identyfikatior(numer) sygnalu.
   *
   * @return
   *   @arg false rejestr nie zawiera pary obiekt-sygnal,
   *   @arg true  para obiekt-sygnal znajduje sie w rejestrze.
   *
   * @see append
   */
   bool exists( QObject* in_receiver, qint32 in_event_id );
   
   //void     print  ();
};

#endif // INCLUDED_QBtEventsController_h