ConfirmSignal.h

00001 #ifndef _MSGCONFIRMSIGNAL_H
00002 #define _MSGCONFIRMSIGNAL_H
00003 // -------------------------------------------------------------------------
00004 #include <UniSetTypes.h>
00005 #include <sigc++/sigc++.h>
00006 #include <USignals.h>
00007 #include <deque>
00008 #include <set>
00009 #include <USignals.h>
00010 #include <time.h>
00011 // -------------------------------------------------------------------------
00012 class MsgConfirmConnection;
00013 class GuiPM;
00014 // -------------------------------------------------------------------------
00015 typedef sigc::slot< void, UMessages::MessageId, time_t> MsgConfirmSlot;
00016 typedef sigc::signal< void, UMessages::MessageId, time_t> MsgConfirmSignal;
00020 enum MessageStatus {
00021              WAITS_CONFIRM  
00022              ,CONFIRMED     
00023              ,DROPPED       
00024            };
00025 // -------------------------------------------------------------------------
00029 struct MsgConfirmEntry
00030 {
00031     MsgConfirmEntry( UMessages::MessageId id, MsgConfirmSignal* signal ):
00032         _id( id ), _signal( signal ) {}
00033     UMessages::MessageId _id;       
00034     MsgConfirmSignal* _signal;      
00035 };
00036 // -------------------------------------------------------------------------
00037 typedef std::deque<MsgConfirmEntry> MsgConfirmContainer;
00038 typedef std::set<UMessages::MessageId> MsgConfirmedContainer;
00039 // -------------------------------------------------------------------------
00044 class WaitsQueue_ConstIterator : public MsgConfirmContainer::const_iterator
00045 {
00046 public:
00047     typedef MsgConfirmContainer::const_iterator BaseIt;
00048     typedef MsgConfirmContainer::iterator NonConstBaseIt;
00049     WaitsQueue_ConstIterator( const BaseIt& iter ) : BaseIt(iter) {}
00050     WaitsQueue_ConstIterator( const NonConstBaseIt& iter ) : BaseIt(iter) {}
00051     const UMessages::MessageId& operator*() const 
00052     {
00053         return BaseIt::operator->()->_id;
00054     }
00055     const UMessages::MessageId* operator->() const
00056     {
00057         return &operator*();
00058     }
00059 };
00060 // -------------------------------------------------------------------------
00076 class ConfirmSignal
00077 {
00078 friend class MsgConfirmConnection;
00079 public:
00080     typedef WaitsQueue_ConstIterator const_iterator;
00081     ConfirmSignal( GuiPM* gpm );
00082     ~ConfirmSignal();
00088     MsgConfirmConnection connect( const MsgConfirmSlot&, UMessages::MessageId id);
00089     sigc::connection connect_msg_wait_confirm( sigc::slot<void, UMessages::MessageId>& slot );
00094     MessageStatus get_message_status(UMessages::MessageId id);
00095 
00097     const_iterator begin()
00098     {
00099         return mcc.begin(); 
00100     }
00102     const_iterator end()
00103     {
00104         return mcc.end();
00105     }
00107     void emit(time_t sec);
00108 
00110     void set_autoconfirm_time(int new_time)
00111     { _auto_confirm_time = new_time; }
00112 
00113 private:
00114     void confirm(time_t);
00115     void on_disconnect();
00116     void drop_message(UMessages::MessageId id, USignals::VConn* conn);
00117 
00118     MsgConfirmContainer mcc;
00119     MsgConfirmedContainer mcedc;
00120     sigc::signal<void, UMessages::MessageId> signal_msg_wait_confirm;
00121     GuiPM* _gpm;
00122 
00123     int _auto_confirm_time;
00124     bool auto_confirm();
00125 };
00126 // -------------------------------------------------------------------------
00130 class MsgConfirmConnection
00131 {
00132 public:
00133     MsgConfirmConnection(ConfirmSignal* sig, sigc::connection& conn, UMessages::MessageId id)
00134         :_id (id), _signal(sig), _connection(conn) {}
00135     MsgConfirmConnection():_signal(NULL) {}
00136     ~MsgConfirmConnection() {}
00137     void disconnect();
00138 
00139 private:
00140     UMessages::MessageId _id;
00141     ConfirmSignal* _signal;
00142     sigc::connection _connection;
00143 
00144 public:
00145 
00146 };
00147 #endif

Документация по UniWidgets. Последние изменения: Fri Oct 10 09:57:49 2014. Создано системой  doxygen 1.5.9