|
UniWidgets
1.2.0
|
00001 #ifndef _UDIAGRAM_H 00002 #define _UDIAGRAM_H 00003 // ------------------------------------------------------------------------- 00004 #include <gtkmm.h> 00005 #include "UniOscilChannel.h" 00006 #include "UDefaultFunctions.h" 00007 #include "GuiPM.h" 00008 #include "USignals.h" 00009 #include "UScale.h" 00010 #include "plugins.h" 00011 #include "global_macros.h" 00012 // ------------------------------------------------------------------------- 00018 class UDiagram : public UDefaultFunctions<Gtk::Fixed> 00019 { 00020 public: 00021 UDiagram(); 00022 explicit UDiagram(GtkmmBaseType::BaseObjectType* gobject); 00023 virtual ~UDiagram(); 00024 00025 virtual void process_sensor(UniSetTypes::ObjectId,UniSetTypes::ObjectId,long); 00026 void startup_init(void); 00027 00028 static std::string timeToString(time_t tm=time(0), std::string brk=""); 00029 static std::string dateToString(time_t tm=time(0), std::string brk=""); 00030 static bool createDir( const std::string dir ); 00031 void timeToInt(long time,int &hour, int &min, int &sec); 00033 protected: 00034 enum ScalePosition 00035 { 00036 LEFT = 0, 00037 RIGHT, 00038 TOP, 00039 BOTTOM 00040 }; 00041 virtual bool on_plot_area_event(GdkEvent *event); 00042 virtual void on_add(Gtk::Widget* w); 00043 virtual void on_remove(Gtk::Widget* w); 00044 virtual void diagram_resize(Gtk::Allocation& alloc); 00045 virtual void on_realize(); 00046 virtual bool on_expose_event(GdkEventExpose*); 00047 virtual void set_connector(const ConnectorRef& connector) throw(); 00048 virtual void on_connect() throw(); 00049 virtual void on_disconnect() throw(); 00050 virtual void draw_min_value(); 00051 00052 bool on_timer_tick(); 00053 00054 Gtk::VBox *topScaleBox; 00055 Gtk::VBox *bottomScaleBox; 00056 Gtk::HBox *leftScaleBox; 00057 Gtk::HBox *rightScaleBox; 00058 HScale *topScale; 00059 HScale *bottomScale; 00060 VScale *leftScale; 00061 VScale *rightScale; 00062 Web *plot_area; 00063 Gtk::Table *table; 00064 Gtk::Image *BGImage; 00065 Gtk::Image *expandBGImage; 00066 00067 Glib::RefPtr<Pango::Layout> tooltip_layout; 00068 Glib::RefPtr<Gdk::Pixbuf> tooltip_image; 00069 00070 Glib::RefPtr<Pango::Layout> minValue_layout; 00071 00072 private: 00073 void ctor(); 00074 sigc::connection tmr; 00075 00076 void connect_child(Gtk::Widget* child); 00077 void disconnect_child(Gtk::Widget& child); 00078 00079 void set_child_connector(Gtk::Widget&); 00080 00081 void on_web_enable_changed(); 00082 void on_web_color_changed(); 00083 void on_scales_enable_changed(); 00084 void on_scales_range_changed(); 00085 void on_scales_autoscale_changed(); 00086 void on_font_changed(); 00087 void on_font_color_changed(); 00088 void on_scale_color_changed(); 00089 void on_v_scale_changed(); 00090 void on_h_scale_changed(); 00091 void on_average_changed(); 00092 void on_plot_bg_color_changed(); 00093 void on_bg_image_changed(); 00094 void on_expand_bg_image_changed(); 00095 void on_bg_border_width_changed(); 00096 void on_refresh_timeout_changed(); 00097 void on_tooltip_image_changed(); 00098 void on_tooltip_font_changed(); 00099 void on_enable_min_value_changed(); 00100 void on_min_value_font_changed(); 00101 void on_min_value_text_line_num_changed(); 00102 void on_history_enable_changed(); 00103 void on_history_dir_changed(); 00104 00105 void save_channel(); 00106 void save_all_channels(); 00107 void save_channel_in_file(int channel_num, string filename); 00108 void save_all_channels_in_one_file(); 00109 void diagram_expand(); 00110 inline void set_diagram_web(){ prop_enableWeb.set_value(!prop_enableWeb);}; 00111 00112 typedef std::vector<UniOscilChannel*> ChannelsList; 00113 ChannelsList channels; 00114 00115 struct CnannelData{ 00116 CnannelData(): 00117 value(0), 00118 // name(""), 00119 color("black") 00120 { 00121 }; 00122 float value; 00123 Gdk::Color color; 00124 // string name; 00125 }; 00126 typedef std::map<int,CnannelData> MinValueChannelMap; 00127 MinValueChannelMap min_value_channels; 00128 00129 typedef std::map<int,Gdk::Color> MinValueLine; 00130 typedef std::map<float,MinValueLine> MinValueMap; 00131 MinValueMap min_value; 00132 00133 struct CnannelHistoryData{ 00134 CnannelHistoryData(): 00135 value(0), 00136 tm() 00137 { 00138 }; 00139 float value; 00140 time_t tm; 00141 }__attribute__((packed)); 00142 typedef std::map<int,CnannelHistoryData> CnannelsDataMap; 00143 typedef std::map<double,CnannelsDataMap> HistoryMap; 00144 HistoryMap history; 00145 00146 int width; 00147 int height; 00148 double point_x; 00149 int ch_num; 00150 double range; 00151 double average; 00152 double last_average; 00153 bool show_tooltip; 00154 bool is_show; 00155 bool is_expand; 00156 int widget_width; 00157 int widget_height; 00158 int widget_x; 00159 int widget_y; 00160 00161 std::string history_file_name; 00162 std::string history_file_fullname; 00163 Gtk::Menu* menu_popup; 00164 Gtk::ImageMenuItem* mi_set_expand; 00165 Gtk::ImageMenuItem* mi_set_web; 00166 Gtk::ImageMenuItem* mi_save_all_in_one; 00167 Gtk::ImageMenuItem* mi_save_channel; 00168 Gtk::ImageMenuItem* mi_save_all_channels; 00169 int save_channel_num; 00170 00171 SensorProp averageSensor; 00172 ADD_PROPERTY( prop_staticAverage, bool ) 00173 ADD_PROPERTY( prop_average_value, float ) 00174 ADD_PROPERTY( prop_precision, int ) 00175 ADD_PROPERTY( prop_refresh_timeout, int ) 00176 ADD_PROPERTY( prop_dynamicLevels, bool ) 00177 ADD_PROPERTY( prop_highWarnLevel, float ) 00178 ADD_PROPERTY( prop_highCritLevel, float ) 00179 ADD_PROPERTY( prop_disableHighLevels, bool ) 00180 ADD_PROPERTY( prop_lowWarnLevel, float ) 00181 ADD_PROPERTY( prop_lowCritLevel, float ) 00182 ADD_PROPERTY( prop_disableLowLevels, bool ) 00183 ADD_PROPERTY( prop_infoColor, Gdk::Color ) 00184 ADD_PROPERTY( prop_warnColor, Gdk::Color ) 00185 ADD_PROPERTY( prop_critColor, Gdk::Color ) 00186 ADD_PROPERTY( prop_useGradientColor, bool ) 00187 ADD_PROPERTY( prop_insensColor, Gdk::Color ) 00188 ADD_PROPERTY( prop_webColor, Gdk::Color ) 00189 ADD_PROPERTY( prop_enableWeb, bool ) 00190 ADD_PROPERTY( prop_scaleColor, Gdk::Color ) 00191 ADD_PROPERTY( prop_scaleLabelColor, Gdk::Color ) 00192 ADD_PROPERTY( prop_scaleLabelFont, Glib::ustring ) 00193 ADD_PROPERTY( prop_scaleLabelFontSize, int ) 00194 ADD_PROPERTY( prop_topScale, bool ) 00195 ADD_PROPERTY( prop_bottomScale, bool ) 00196 ADD_PROPERTY( prop_leftScale, bool ) 00197 ADD_PROPERTY( prop_rightScale, bool ) 00198 ADD_PROPERTY( prop_Min, float ) 00199 ADD_PROPERTY( prop_Max, float ) 00200 ADD_PROPERTY( prop_XmaxMin, int ) 00201 ADD_PROPERTY( prop_XmaxMaj, int ) 00202 ADD_PROPERTY( prop_YmaxMin, int ) 00203 ADD_PROPERTY( prop_YmaxMaj, int ) 00204 ADD_PROPERTY( prop_BGImagePath, Glib::ustring) 00205 ADD_PROPERTY( prop_expandBGImagePath, Glib::ustring) 00206 ADD_PROPERTY( prop_bgBorderWidth, int) 00207 ADD_PROPERTY( prop_enableMinValue, bool ) 00208 ADD_PROPERTY( prop_minValueNum, int ) 00209 ADD_PROPERTY( prop_minValueTextLineNum, int ) 00210 ADD_PROPERTY( prop_enableMinValueThreshold, bool ) 00211 ADD_PROPERTY( prop_minValueThreshold, float ) 00212 ADD_PROPERTY( prop_minValueTextFixedPosition, bool ) 00213 ADD_PROPERTY( prop_minValueTextColor, Gdk::Color ) 00214 ADD_PROPERTY( prop_minValueDynamicColor, bool ) 00215 ADD_PROPERTY( prop_minValueTextFont, Glib::ustring ) 00216 ADD_PROPERTY( prop_minValueTextFontSize, int ) 00217 ADD_PROPERTY( prop_minValueDashStep, double ) 00218 ADD_PROPERTY( prop_minValueDashOffset, double ) 00219 ADD_PROPERTY( prop_enableTooltip, bool ) 00220 ADD_PROPERTY( prop_tooltipImagePath, Glib::ustring) 00221 ADD_PROPERTY( prop_tooltipImageWidth, int ) 00222 ADD_PROPERTY( prop_tooltipImageHeight, int ) 00223 ADD_PROPERTY( prop_tooltipLabelColor, Gdk::Color ) 00224 ADD_PROPERTY( prop_tooltipDynamicColor, bool ) 00225 ADD_PROPERTY( prop_tooltipLabelFont, Glib::ustring ) 00226 ADD_PROPERTY( prop_tooltipLabelFontSize, int ) 00227 ADD_PROPERTY( prop_enableHisory, bool ) 00228 ADD_PROPERTY( prop_dir, Glib::ustring ) 00229 ADD_PROPERTY( prop_historyPointInMem, long ) 00231 DISALLOW_COPY_AND_ASSIGN(UDiagram); 00232 }; 00233 // ------------------------------------------------------------------------- 00234 template<> 00235 inline GType UObj_Get_Type<UDiagram>() 00236 { 00237 static GType gtype = 0; 00238 if (gtype) 00239 return gtype; 00240 00241 UDiagram* dummy = new UDiagram(); 00242 GtkContainerClass* container_klass = GTK_CONTAINER_GET_CLASS( dummy->gobj() ); 00243 00244 gtype = G_OBJECT_TYPE(dummy->gobj()); 00245 delete( dummy ); 00246 Glib::wrap_register(gtype, &UObj_Wrap_New<UDiagram>); 00247 00248 return gtype; 00249 } 00250 #endif
1.7.6.1