USignals.h

00001 #ifndef _USIGNALS_H
00002 #define _USIGNALS_H
00003 // -------------------------------------------------------------------------
00004 #include <sigc++/sigc++.h>
00005 #include <UniSetTypes.h>
00006 #include <MessageType.h>
00007 #include <glibmm/ustring.h>
00008 #include <glibmm/convert.h>
00009 #include <ctime>
00010 // -------------------------------------------------------------------------
00011 class GuiPM;
00012 
00013 namespace USignals
00014 {
00015 class ValueMapItem;
00016 } //namespace USingnals
00017 
00018 namespace UMessages
00019 {
00026 struct MessageId
00027 {
00028     MessageId(UniSetTypes::ObjectId id,
00029             UniSetTypes::ObjectId node,
00030             long value ):
00031         _id(id), _node(node), _value(value) {}
00032     MessageId() :
00033         _id(UniSetTypes::DefaultObjectId),
00034         _node(UniSetTypes::DefaultObjectId)
00035     {}
00036     UniSetTypes::ObjectId _id;
00037     UniSetTypes::ObjectId _node;
00038     long _value;
00039     bool operator==(const MessageId& x) const
00040     { return ( _id == x._id && _node == x._node && _value == x._value );}
00041     bool operator!=(const MessageId& x) const
00042     { return !(*this==x); }
00043     bool operator<(const MessageId& x)const {
00044         if (_id < x._id) return true;
00045         if (_id > x._id) return false;
00046         if (_node < x._node) return true;
00047         if (_node > x._node) return false;
00048         if (_value < x._value) return true;
00049         else return false;
00050     }
00051 };
00057 class Message
00058 {
00059 public:
00060     Message(const USignals::ValueMapItem& item, const UMessages::MessageId& id) : _item(&item), id_(id)  {}
00061 
00065     Message() : _item(NULL) {}
00066 
00067     MessageId getMessageId() const;     
00069     time_t getLastTime() const;     
00070     time_t getTimeUsec() const;     
00072     const Glib::ustring& getText() const;   
00074     int getMessageType() const;     
00076     bool valid() const;         
00078 private:
00079     const USignals::ValueMapItem* _item;
00080     const UMessages::MessageId id_;
00081 };
00083 enum MessageType { INFO=1, WARNING=2, ALARM=3 };
00084 } //namespace UMessages
00085 
00086 namespace USignals
00087 {
00088 class SigControllerImpl;
00089 
00090 typedef sigc::slot<void, UniSetTypes::ObjectId, UniSetTypes::ObjectId, long>
00091     ValueChangedSlot;
00092 typedef sigc::slot<void, UniSetTypes::ObjectId, UniSetTypes::ObjectId, float>
00093     AnalogValueChangedSlot;
00094 typedef sigc::slot<void, UniSetTypes::ObjectId, UniSetTypes::ObjectId, long>
00095     ValueInOutSlot;
00096 typedef sigc::slot<void, UMessages::MessageId, Glib::ustring> MessageSlot;
00097 typedef sigc::slot<void, UMessages::MessageId, int, time_t, Glib::ustring> FullMessageSlot;
00098 
00099 typedef sigc::signal<void, UniSetTypes::ObjectId, UniSetTypes::ObjectId, long>
00100     ValueChangedSignal;
00101 typedef sigc::signal<void, UniSetTypes::ObjectId, UniSetTypes::ObjectId, float>
00102     AnalogValueChangedSignal;
00103 typedef sigc::signal<void, UniSetTypes::ObjectId, UniSetTypes::ObjectId, long>
00104     ValueInOutSignal;
00105 typedef sigc::signal<void, UMessages::MessageId, Glib::ustring> MessageSignal;
00106 
00107 typedef sigc::signal<void, UMessages::MessageId, int, time_t, Glib::ustring> FullMessageSignal;
00108 
00113 class Connection : public sigc::connection
00114 {
00115 public:
00116     Connection( ) {}
00117 
00118     Connection( sigc::connection conn) :
00119         sigc::connection(conn)
00120     {}
00121 
00122     virtual void disconnect()
00123     {
00124         sigc::connection::disconnect();
00125     }
00126 };
00131 struct VConn
00132 {
00133     sigc::connection conn;
00134     UniSetTypes::ObjectId id;
00135     UniSetTypes::ObjectId node;
00136     long value;
00137     void disconnect();
00138 };
00139 // -------------------------------------------------------------------------
00147 class SigController
00148 {
00149 public:
00150     SigController(GuiPM* gpm);
00151     ~SigController();
00153     Connection connect_value_changed( const ValueChangedSlot& slot,
00154             UniSetTypes::ObjectId id,
00155             UniSetTypes::ObjectId node );
00157     Connection connect_analog_value_changed( const AnalogValueChangedSlot& slot,
00158             UniSetTypes::ObjectId id,
00159             UniSetTypes::ObjectId node );
00161     VConn connect_value_in( const ValueInOutSlot& slot,
00162             UniSetTypes::ObjectId id,
00163             UniSetTypes::ObjectId node,
00164             long value);
00166     VConn connect_value_out( const ValueInOutSlot& slot,
00167             UniSetTypes::ObjectId id,
00168             UniSetTypes::ObjectId node,
00169             long value);
00171     Connection connect_on_any_message( const MessageSlot& slot);
00173     Connection connect_on_message( const MessageSlot& slot,
00174             UMessages::MessageId id);
00176     Connection connect_on_any_message_full ( const FullMessageSlot& slot );
00178     long get_value(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node);
00180     long get_value_from_gpm(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node);
00182     float get_analog_value(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node);
00184     UMessages::Message get_message( const UMessages::MessageId& id);
00186     std::list<UMessages::Message > get_message_list( const UMessages::MessageId& id);
00188     std::list<UMessages::Message >  get_all_messages_list();
00190     void sensorInfo(UniSetTypes::SensorMessage *sm);
00191     void on_connect();
00192 private:
00193     SigController();
00194     SigControllerImpl* _impl;
00195 };
00196 
00197 } //namespace USignals
00198 #endif

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