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
00119 color("black")
00120 {
00121 };
00122 float value;
00123 Gdk::Color color;
00124
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_fullname;
00162 Gtk::Menu* menu_popup;
00163 Gtk::ImageMenuItem* mi_set_expand;
00164 Gtk::ImageMenuItem* mi_set_web;
00165 Gtk::ImageMenuItem* mi_save_all_in_one;
00166 Gtk::ImageMenuItem* mi_save_channel;
00167 Gtk::ImageMenuItem* mi_save_all_channels;
00168 int save_channel_num;
00169
00170 SensorProp averageSensor;
00171 ADD_PROPERTY( prop_staticAverage, bool )
00172 ADD_PROPERTY( prop_average_value, float )
00173 ADD_PROPERTY( prop_precision, int )
00174 ADD_PROPERTY( prop_refresh_timeout, int )
00175 ADD_PROPERTY( prop_dynamicLevels, bool )
00176 ADD_PROPERTY( prop_highWarnLevel, float )
00177 ADD_PROPERTY( prop_highCritLevel, float )
00178 ADD_PROPERTY( prop_disableHighLevels, bool )
00179 ADD_PROPERTY( prop_lowWarnLevel, float )
00180 ADD_PROPERTY( prop_lowCritLevel, float )
00181 ADD_PROPERTY( prop_disableLowLevels, bool )
00182 ADD_PROPERTY( prop_infoColor, Gdk::Color )
00183 ADD_PROPERTY( prop_warnColor, Gdk::Color )
00184 ADD_PROPERTY( prop_critColor, Gdk::Color )
00185 ADD_PROPERTY( prop_useGradientColor, bool )
00186 ADD_PROPERTY( prop_insensColor, Gdk::Color )
00187 ADD_PROPERTY( prop_webColor, Gdk::Color )
00188 ADD_PROPERTY( prop_enableWeb, bool )
00189 ADD_PROPERTY( prop_scaleColor, Gdk::Color )
00190 ADD_PROPERTY( prop_scaleLabelColor, Gdk::Color )
00191 ADD_PROPERTY( prop_scaleLabelFont, Glib::ustring )
00192 ADD_PROPERTY( prop_scaleLabelFontSize, int )
00193 ADD_PROPERTY( prop_topScale, bool )
00194 ADD_PROPERTY( prop_bottomScale, bool )
00195 ADD_PROPERTY( prop_leftScale, bool )
00196 ADD_PROPERTY( prop_rightScale, bool )
00197 ADD_PROPERTY( prop_Min, float )
00198 ADD_PROPERTY( prop_Max, float )
00199 ADD_PROPERTY( prop_XmaxMin, int )
00200 ADD_PROPERTY( prop_XmaxMaj, int )
00201 ADD_PROPERTY( prop_YmaxMin, int )
00202 ADD_PROPERTY( prop_YmaxMaj, int )
00203 ADD_PROPERTY( prop_BGImagePath, Glib::ustring)
00204 ADD_PROPERTY( prop_expandBGImagePath, Glib::ustring)
00205 ADD_PROPERTY( prop_bgBorderWidth, int)
00206 ADD_PROPERTY( prop_enableMinValue, bool )
00207 ADD_PROPERTY( prop_minValueNum, int )
00208 ADD_PROPERTY( prop_minValueTextLineNum, int )
00209 ADD_PROPERTY( prop_enableMinValueThreshold, bool )
00210 ADD_PROPERTY( prop_minValueThreshold, float )
00211 ADD_PROPERTY( prop_minValueTextFixedPosition, bool )
00212 ADD_PROPERTY( prop_minValueTextColor, Gdk::Color )
00213 ADD_PROPERTY( prop_minValueDynamicColor, bool )
00214 ADD_PROPERTY( prop_minValueTextFont, Glib::ustring )
00215 ADD_PROPERTY( prop_minValueTextFontSize, int )
00216 ADD_PROPERTY( prop_minValueDashStep, double )
00217 ADD_PROPERTY( prop_minValueDashOffset, double )
00218 ADD_PROPERTY( prop_enableTooltip, bool )
00219 ADD_PROPERTY( prop_tooltipImagePath, Glib::ustring)
00220 ADD_PROPERTY( prop_tooltipImageWidth, int )
00221 ADD_PROPERTY( prop_tooltipImageHeight, int )
00222 ADD_PROPERTY( prop_tooltipLabelColor, Gdk::Color )
00223 ADD_PROPERTY( prop_tooltipDynamicColor, bool )
00224 ADD_PROPERTY( prop_tooltipLabelFont, Glib::ustring )
00225 ADD_PROPERTY( prop_tooltipLabelFontSize, int )
00226 ADD_PROPERTY( prop_enableHisory, bool )
00227 ADD_PROPERTY( prop_dir, Glib::ustring )
00228 ADD_PROPERTY( prop_historyPointInMem, long )
00230 DISALLOW_COPY_AND_ASSIGN(UDiagram);
00231 };
00232
00233 template<>
00234 inline GType UObj_Get_Type<UDiagram>()
00235 {
00236 static GType gtype = 0;
00237 if (gtype)
00238 return gtype;
00239
00240 UDiagram* dummy = new UDiagram();
00241 GtkContainerClass* container_klass = GTK_CONTAINER_GET_CLASS( dummy->gobj() );
00242
00243 gtype = G_OBJECT_TYPE(dummy->gobj());
00244 delete( dummy );
00245 Glib::wrap_register(gtype, &UObj_Wrap_New<UDiagram>);
00246
00247 return gtype;
00248 }
00249 #endif