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

Документация по UniWidgets. Последние изменения: Fri Oct 10 09:57:50 2014. Создано системой  doxygen 1.5.9