UniWidgets  1.2.0
UniOscillograph.h
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