|
UniWidgets
1.0.0
|
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 void sensorInfo(UniSetTypes::SensorMessage *sm); 00189 void on_connect(); 00190 private: 00191 SigController(); 00192 SigControllerImpl* _impl; 00193 }; 00194 00195 } //namespace USignals 00196 #endif
1.7.6.1