|
UniWidgets
1.2.0
|
00001 #ifndef _UNIOSCILLOGRAPH_H 00002 #define _UNIOSCILLOGRAPH_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 UniOscillograph : public UDefaultFunctions<Gtk::Fixed> 00019 { 00020 public: 00021 UniOscillograph(); 00022 explicit UniOscillograph(GtkmmBaseType::BaseObjectType* gobject); 00023 virtual ~UniOscillograph(); 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 static void timeToInt(long time,int &hour, int &min, int &sec, time_t tm=time(0)); 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 oscil_allocate_changed(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_channels_list(); 00051 virtual void draw_tooltip(); 00052 virtual bool on_dialog_focus_out_event(GdkEventFocus *event); 00053 00054 bool on_timer_tick(); 00055 00056 Gtk::VBox *topScaleBox; 00057 Gtk::VBox *bottomScaleBox; 00058 Gtk::HBox *leftScaleBox; 00059 Gtk::HBox *rightScaleBox; 00060 HScale *topScale; 00061 HScale *bottomScale; 00062 VScale *leftScale; 00063 VScale *rightScale; 00064 HScaleLabels* topLabel; 00065 HScaleLabels* bottomLabel; 00066 00067 Web *plot_area; 00068 Gtk::Table *table; 00069 Gtk::HBox *hbox; 00070 00071 Gtk::Image *BGImage; 00072 Gtk::Image *expandBGImage; 00073 00074 Gtk::Frame *channelsListBox; 00075 Gtk::EventBox *channelsListScrollwin; 00076 Glib::RefPtr<Pango::Layout> channels_layout; 00077 00078 Glib::RefPtr<Pango::Layout> tooltip_layout; 00079 Glib::RefPtr<Gdk::Pixbuf> tooltip_image; 00080 00081 private: 00082 void ctor(); 00083 sigc::connection tmr; 00084 00085 void connect_child(Gtk::Widget* child); 00086 void disconnect_child(Gtk::Widget& child); 00087 00088 void set_child_connector(Gtk::Widget&); 00089 00090 void on_web_enable_changed(); 00091 void on_web_color_changed(); 00092 void on_scales_enable_changed(); 00093 void on_scales_enable_real_time_changed(); 00094 void on_scales_y_range_changed(); 00095 void on_scales_x_range_changed(); 00096 void on_scales_x_step_changed(); 00097 void on_scales_autoscale_changed(); 00098 void on_font_changed(); 00099 void on_font_color_changed(); 00100 void on_scale_color_changed(); 00101 void on_v_scale_changed(); 00102 void on_h_scale_changed(); 00103 void on_plot_bg_color_changed(); 00104 void on_refresh_timeout_changed(); 00105 void on_bg_image_changed(); 00106 void on_expand_bg_image_changed(); 00107 void on_bg_border_width_changed(); 00108 void on_tooltip_image_changed(); 00109 void on_tooltip_font_changed(); 00110 void on_history_enable_changed(); 00111 void on_history_dir_changed(); 00112 void on_channels_list_width_changed(); 00113 void on_channels_list_font_changed(); 00114 void on_channels_list_frame_changed(); 00115 void on_channels_list_border_width_changed(); 00116 void set_channel_random_color(UniOscilChannel *ch); 00117 void dialog_change_position(); 00118 00119 bool scroll_channels_list_event(GdkEvent *event); 00120 00121 void set_channel_visible(); 00122 void set_all_channel_visible(bool show = true); 00123 void set_channel_visible_only(); 00124 void save_channel(); 00125 void save_all_channels(); 00126 void save_channel_in_file(int channel_num, string filename); 00127 void save_all_channels_in_one_file(); 00128 void set_channel_color(); 00129 void set_dynamic_range(); 00130 void set_range(); 00131 void oscil_expand(); 00132 inline void set_oscil_web(){ prop_enableWeb.set_value(!prop_enableWeb);}; 00133 inline void set_time_on_scale(){ prop_enableScaleRealTime.set_value(!prop_enableScaleRealTime);}; 00134 00135 typedef std::vector<UniOscilChannel*> ChannelsList; 00136 ChannelsList channels; 00137 00138 struct CnannelHistoryData 00139 { 00140 CnannelHistoryData(): 00141 value(0), 00142 tm() 00143 { 00144 }; 00145 float value; 00146 time_t tm; 00147 }__attribute__((packed)); 00148 typedef std::map<int,CnannelHistoryData> CnannelHistoryDataMap; 00149 typedef std::map<double,CnannelHistoryDataMap> HistoryMap; 00150 HistoryMap history; 00151 00152 typedef std::map<double,double> CnannelsDataMap; 00153 typedef std::map<UniOscilChannel*,CnannelsDataMap> DataMap; 00154 DataMap data; 00155 00156 int width; 00157 int height; 00158 int ch_num; 00159 double min_x; 00160 double max_x; 00161 double min_y; 00162 double max_y; 00163 double point_x; 00164 double step_x; 00165 double range_y; 00166 bool show_tooltip; 00167 bool is_show; 00168 bool is_expand; 00169 int widget_width; 00170 int widget_height; 00171 int widget_x; 00172 int widget_y; 00173 00174 int softmove_ch_list_pos_x; 00175 int softmove_ch_list_pos_y; 00176 int softmove_ch_list_step_x; 00177 int softmove_ch_list_step_y; 00178 int softmove_ch_list_start_x; 00179 int softmove_ch_list_start_y; 00180 bool softmove_ch_list_start; 00181 00182 std::string history_file_name; 00183 std::string history_file_fullname; 00184 Gtk::Menu* menu_popup; 00185 Gtk::ImageMenuItem* mi_set_expand; 00186 Gtk::ImageMenuItem* mi_set_web; 00187 Gtk::ImageMenuItem* mi_set_time_on_scale; 00188 Gtk::ImageMenuItem* mi_set_dynamic_range; 00189 Gtk::ImageMenuItem* mi_set_range; 00190 Gtk::ImageMenuItem* mi_save_all_in_one; 00191 Gtk::ImageMenuItem* mi_save_all_channels; 00192 Gtk::Dialog* range_dialog; 00193 Gtk::SpinButton *ymin_spinbutton; 00194 Gtk::SpinButton *ymax_spinbutton; 00195 00196 Gtk::Menu* ch_menu_popup; 00197 Gtk::ImageMenuItem* ch_mi_visible_channel; 00198 Gtk::ImageMenuItem* ch_mi_visible_only_one_channel; 00199 Gtk::ImageMenuItem* ch_mi_visible_all_channel; 00200 Gtk::ImageMenuItem* ch_mi_hide_all_channel; 00201 Gtk::ImageMenuItem* ch_mi_save_all_in_one; 00202 Gtk::ImageMenuItem* ch_mi_save_channel; 00203 Gtk::ImageMenuItem* ch_mi_save_all_channels; 00204 Gtk::ImageMenuItem* ch_mi_set_channel_color; 00205 int save_channel_num; 00206 Gtk::ColorSelectionDialog* cs_dialog; 00207 00208 ADD_PROPERTY( prop_refresh_timeout, int ) 00209 ADD_PROPERTY( prop_enableTimeLine, bool ) 00210 ADD_PROPERTY( prop_timeLineColor, Gdk::Color ) 00211 ADD_PROPERTY( prop_enableWeb, bool ) 00212 ADD_PROPERTY( prop_webColor, Gdk::Color ) 00213 ADD_PROPERTY( prop_scaleColor, Gdk::Color ) 00214 ADD_PROPERTY( prop_scaleLabelColor, Gdk::Color ) 00215 ADD_PROPERTY( prop_scaleLabelFont, Glib::ustring ) 00216 ADD_PROPERTY( prop_scaleLabelFontSize, int ) 00217 ADD_PROPERTY( prop_topScale, bool ) 00218 ADD_PROPERTY( prop_bottomScale, bool ) 00219 ADD_PROPERTY( prop_leftScale, bool ) 00220 ADD_PROPERTY( prop_rightScale, bool ) 00221 ADD_PROPERTY( prop_enableScaleRealTime, bool ) 00222 ADD_PROPERTY( prop_XRange, float ) 00223 ADD_PROPERTY( prop_XStepsNum, int ) 00224 ADD_PROPERTY( prop_YMin, float ) 00225 ADD_PROPERTY( prop_YMax, float ) 00226 ADD_PROPERTY( prop_YDynamicRange, bool ) 00227 ADD_PROPERTY( prop_smoothCurve, bool ) 00228 ADD_PROPERTY( prop_XmaxMin, int ) 00229 ADD_PROPERTY( prop_XmaxMaj, int ) 00230 ADD_PROPERTY( prop_YmaxMin, int ) 00231 ADD_PROPERTY( prop_YmaxMaj, int ) 00232 ADD_PROPERTY( prop_BGImagePath, Glib::ustring) 00233 ADD_PROPERTY( prop_expandBGImagePath, Glib::ustring) 00234 ADD_PROPERTY( prop_bgBorderWidth, int) 00235 ADD_PROPERTY( prop_enableTooltip, bool ) 00236 ADD_PROPERTY( prop_tooltipImagePath, Glib::ustring) 00237 ADD_PROPERTY( prop_tooltipImageWidth, int ) 00238 ADD_PROPERTY( prop_tooltipImageHeight, int ) 00239 ADD_PROPERTY( prop_enableTooltipRealTime, bool ) 00240 ADD_PROPERTY( prop_tooltipLabelPrecision, int ) 00241 ADD_PROPERTY( prop_tooltipLabelColor, Gdk::Color ) 00242 ADD_PROPERTY( prop_tooltipLabelFont, Glib::ustring ) 00243 ADD_PROPERTY( prop_tooltipLabelFontSize, int ) 00244 ADD_PROPERTY( prop_enableHisory, bool ) 00245 ADD_PROPERTY( prop_dir, Glib::ustring ) 00246 ADD_PROPERTY( prop_historyPointInMem, long ) 00247 ADD_PROPERTY( prop_enableLabelList, bool ) 00248 ADD_PROPERTY( prop_labelListWidth, int ) 00249 ADD_PROPERTY( prop_labelListBorderWidth, int ) 00250 ADD_PROPERTY( prop_labelListFrame, Gtk::ShadowType ) 00251 ADD_PROPERTY( prop_labelListFont, Glib::ustring ) 00252 ADD_PROPERTY( prop_labelListFontSize, int ) 00254 DISALLOW_COPY_AND_ASSIGN(UniOscillograph); 00255 }; 00256 // ------------------------------------------------------------------------- 00257 template<> 00258 inline GType UObj_Get_Type<UniOscillograph>() 00259 { 00260 static GType gtype = 0; 00261 if (gtype) 00262 return gtype; 00263 00264 UniOscillograph* dummy = new UniOscillograph(); 00265 GtkContainerClass* container_klass = GTK_CONTAINER_GET_CLASS( dummy->gobj() ); 00266 00267 gtype = G_OBJECT_TYPE(dummy->gobj()); 00268 delete( dummy ); 00269 Glib::wrap_register(gtype, &UObj_Wrap_New<UniOscillograph>); 00270 00271 return gtype; 00272 } 00273 #endif
1.7.6.1