FloatWidget::FloatWidget(Gtk::Widget& parent, int width, int height) : m_width(width), m_height(height) { m_parent = &parent; resize(m_width, m_height); set_decorated(false); set_keep_above(); set_skip_taskbar_hint(true); set_skip_pager_hint(true); set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY); reparent(parent); m_widgetlist.insert(this); }
guiTools::guiTools(Controller *c, guiMain *gui) : m_Adjustment_Median_Radius(1.0, 1.0, 2.0, 1.0, 0.0, 0.0), m_SpinButton_Median_Radius(m_Adjustment_Median_Radius), m_Adjustment_Gauss_Radius(1.0, 1.0, 10.0, 1.0, 0.0, 0.0), m_SpinButton_Gauss_Radius(m_Adjustment_Gauss_Radius), m_Adjustment_Gauss_Sigma(1.0, 0.1, 5.0, 0.1, 0.0, 0.0), m_HScale_Gauss_Sigma(m_Adjustment_Gauss_Sigma), m_Adjustment_Bilateral_Radius(1.0, 1.0, 10.0, 1.0, 0.0, 0.0), m_SpinButton_Bilateral_Radius(m_Adjustment_Bilateral_Radius), m_Adjustment_Bilateral_Sigma_Color(1.0, 0.1, 500.0, 0.1, 0.0, 0.0), m_HScale_Bilateral_Sigma_Color(m_Adjustment_Bilateral_Sigma_Color), m_Adjustment_Bilateral_Sigma_Space(1.0, 0.1, 500.0, 0.1, 0.0, 0.0), m_HScale_Bilateral_Sigma_Space(m_Adjustment_Bilateral_Sigma_Space), m_Adjustment_Morphological_Radius(1.0, 1.0, 10.0, 1.0, 0.0, 0.0), m_SpinButton_Morphological_Radius(m_Adjustment_Morphological_Radius) { controller = c; frameManager = controller->getFrameManager(); frameProcessor = frameManager->getFrameProcessor(); mainGUI = gui; // Median filter m_medianFiter = false; m_Frame_Median.set_label("2D Median Filter"); m_CheckButton_Median.set_label("Enable"); m_CheckButton_Median.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_median_clicked) ); m_CheckButton_Median_Masked.set_label("Use mask"); m_CheckButton_Median_Masked.set_active(true); m_CheckButton_Median_Masked.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_median_masked_clicked) ); m_Label_Median_Radius.set_label("Radius:"); m_Label_Median_Radius.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_kernelRadiusMedian = 1; m_HBox_Median_Radius.pack_start(m_Label_Median_Radius, Gtk::PACK_SHRINK, 5); m_Adjustment_Median_Radius.signal_value_changed().connect( sigc::mem_fun(*this, &guiTools::on_spinbutton_median_radius_value_changed) ); m_HBox_Median_Radius.pack_start(m_SpinButton_Median_Radius, Gtk::PACK_EXPAND_PADDING, 5); m_VBox_Median.pack_start(m_CheckButton_Median, Gtk::PACK_START, 5); m_VBox_Median.pack_start(m_CheckButton_Median_Masked, Gtk::PACK_SHRINK, 5); m_VBox_Median.pack_start(m_HBox_Median_Radius, Gtk::PACK_SHRINK, 5); m_VBox_Median.set_border_width(5); m_Frame_Median.add(m_VBox_Median); m_Frame_Median.set_border_width(5); // 3D Median filter m_medianFiter3D = false; m_Frame_Median3D.set_label("3D Median Filter"); m_CheckButton_Median3D.set_label("Enable"); m_CheckButton_Median3D.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_median3D_clicked) ); m_CheckButton_Median3D_Masked.set_label("Use mask"); m_CheckButton_Median3D_Masked.set_active(true); m_CheckButton_Median3D_Masked.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_median3D_masked_clicked) ); m_VBox_Median3D.pack_start(m_CheckButton_Median3D, Gtk::PACK_START, 5); m_VBox_Median3D.pack_start(m_CheckButton_Median3D_Masked, Gtk::PACK_SHRINK, 5); m_VBox_Median3D.set_border_width(5); m_Frame_Median3D.add(m_VBox_Median3D); m_Frame_Median3D.set_border_width(5); // Gaussian filter m_gaussianFiter = false; m_Frame_Gaussian.set_label("Gaussian Filter"); m_CheckButton_Gauss.set_label("Enable"); m_CheckButton_Gauss.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_gauss_clicked) ); m_Label_Gauss_Radius.set_label("Radius:"); m_Label_Gauss_Radius.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_CheckButton_Gauss_Auto_Sigma.set_label("Manual Sigma Adjustment"); m_CheckButton_Gauss_Auto_Sigma.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_gauss_auto_sigma_clicked) ); m_kernelRadiusGauss = 1; m_HBox_Gauss_Radius.pack_start(m_Label_Gauss_Radius, Gtk::PACK_SHRINK, 5); m_Adjustment_Gauss_Radius.signal_value_changed().connect( sigc::mem_fun(*this, &guiTools::on_spinbutton_gauss_radius_value_changed) ); m_HBox_Gauss_Radius.pack_start(m_SpinButton_Gauss_Radius, Gtk::PACK_EXPAND_PADDING, 5); m_Label_Gauss_Auto_Sigma.set_label("Sigma:"); m_Label_Gauss_Auto_Sigma.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_Label_Gauss_Auto_Sigma.set_sensitive(false); m_HBox_Gauss_Auto_Sigma.pack_start(m_Label_Gauss_Auto_Sigma, Gtk::PACK_SHRINK, 5); m_sigmaGauss = -1.0; m_Adjustment_Gauss_Sigma.set_value(frameProcessor->calcGaussianSigma(m_kernelRadiusGauss)); m_HScale_Gauss_Sigma.set_digits(2); m_HScale_Gauss_Sigma.set_draw_value(true); // Show position label m_HScale_Gauss_Sigma.set_value_pos(Gtk::POS_BOTTOM); // Where to draw the position label (if drawn at all) m_HScale_Gauss_Sigma.set_sensitive(false); m_HScale_Gauss_Sigma.signal_button_press_event().connect(sigc::mem_fun(*this, &guiTools::on_slider_gauss_sigma_clicked), false); m_HScale_Gauss_Sigma.signal_button_release_event().connect(sigc::mem_fun(*this, &guiTools::on_slider_gauss_sigma_released), false); m_HScale_Gauss_Sigma.signal_change_value().connect(sigc::mem_fun(*this, &guiTools::on_slider_gauss_sigma_change_value) ); m_HBox_Gauss_Auto_Sigma.add(m_HScale_Gauss_Sigma); m_VBox_Gauss.pack_start(m_CheckButton_Gauss, Gtk::PACK_START, 5); m_VBox_Gauss.pack_start(m_CheckButton_Gauss_Auto_Sigma, Gtk::PACK_SHRINK, 5); m_VBox_Gauss.pack_start(m_HBox_Gauss_Radius, Gtk::PACK_SHRINK, 5); m_VBox_Gauss.pack_start(m_HBox_Gauss_Auto_Sigma, Gtk::PACK_SHRINK, 5); m_VBox_Gauss.set_border_width(5); m_Frame_Gaussian.add(m_VBox_Gauss); m_Frame_Gaussian.set_border_width(5); // Bilateral filter m_bilateralFilter = false; m_Frame_Bilateral.set_label("Bilateral Filter"); m_CheckButton_Bilateral.set_label("Enable"); m_CheckButton_Bilateral.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_bilateral_clicked) ); m_Label_Bilateral_Radius.set_label("Radius:"); m_Label_Bilateral_Radius.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_kernelRadiusBilateral = 1; m_HBox_Bilateral_Radius.pack_start(m_Label_Bilateral_Radius, Gtk::PACK_SHRINK, 5); m_Adjustment_Bilateral_Radius.signal_value_changed().connect( sigc::mem_fun(*this, &guiTools::on_spinbutton_bilateral_radius_value_changed) ); m_HBox_Bilateral_Radius.pack_start(m_SpinButton_Bilateral_Radius, Gtk::PACK_EXPAND_PADDING, 5); m_Label_Bilateral_Sigma_Color.set_label("Sigma Color:"); m_Label_Bilateral_Sigma_Color.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_HBox_Bilateral_Sigma_Color.pack_start(m_Label_Bilateral_Sigma_Color, Gtk::PACK_SHRINK, 5); m_sigmaBilateralColor = 50.0; m_Adjustment_Bilateral_Sigma_Color.set_value(m_sigmaBilateralColor); m_HScale_Bilateral_Sigma_Color.set_digits(2); m_HScale_Bilateral_Sigma_Color.set_draw_value(true); // Show position label m_HScale_Bilateral_Sigma_Color.set_value_pos(Gtk::POS_BOTTOM); // Where to draw the position label (if drawn at all) m_HScale_Bilateral_Sigma_Color.set_sensitive(true); m_HScale_Bilateral_Sigma_Color.signal_button_press_event().connect(sigc::mem_fun(*this, &guiTools::on_slider_bilateral_sigma_color_clicked), false); m_HScale_Bilateral_Sigma_Color.signal_button_release_event().connect(sigc::mem_fun(*this, &guiTools::on_slider_bilateral_sigma_color_released), false); m_HScale_Bilateral_Sigma_Color.signal_change_value().connect(sigc::mem_fun(*this, &guiTools::on_slider_bilateral_sigma_color_change_value) ); m_HBox_Bilateral_Sigma_Color.add(m_HScale_Bilateral_Sigma_Color); m_Label_Bilateral_Sigma_Space.set_label("Sigma Space:"); m_Label_Bilateral_Sigma_Space.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_HBox_Bilateral_Sigma_Space.pack_start(m_Label_Bilateral_Sigma_Space, Gtk::PACK_SHRINK, 5); m_sigmaBilateralSpace = 3.0; m_Adjustment_Bilateral_Sigma_Space.set_value(m_sigmaBilateralSpace); m_HScale_Bilateral_Sigma_Space.set_digits(2); m_HScale_Bilateral_Sigma_Space.set_draw_value(true); // Show position label m_HScale_Bilateral_Sigma_Space.set_value_pos(Gtk::POS_BOTTOM); // Where to draw the position label (if drawn at all) m_HScale_Bilateral_Sigma_Space.set_sensitive(true); m_HScale_Bilateral_Sigma_Space.signal_button_press_event().connect(sigc::mem_fun(*this, &guiTools::on_slider_bilateral_sigma_space_clicked), false); m_HScale_Bilateral_Sigma_Space.signal_button_release_event().connect(sigc::mem_fun(*this, &guiTools::on_slider_bilateral_sigma_space_released), false); m_HScale_Bilateral_Sigma_Space.signal_change_value().connect(sigc::mem_fun(*this, &guiTools::on_slider_bilateral_sigma_space_change_value) ); m_HBox_Bilateral_Sigma_Space.add(m_HScale_Bilateral_Sigma_Space); m_VBox_Bilateral.pack_start(m_CheckButton_Bilateral, Gtk::PACK_START, 5); m_VBox_Bilateral.pack_start(m_HBox_Bilateral_Radius, Gtk::PACK_SHRINK, 5); m_VBox_Bilateral.pack_start(m_HBox_Bilateral_Sigma_Color, Gtk::PACK_SHRINK, 5); m_VBox_Bilateral.pack_start(m_HBox_Bilateral_Sigma_Space, Gtk::PACK_SHRINK, 5); m_VBox_Bilateral.set_border_width(5); m_Frame_Bilateral.add(m_VBox_Bilateral); m_Frame_Bilateral.set_border_width(5); // Morphological transformation m_morphologicalFilter = false; m_kernelRadiusMorphological = 1; m_kernelTypeMorphological = 0; m_Frame_Morphological.set_label("Opening Filter"); m_CheckButton_Morphological.set_label("Enable"); m_CheckButton_Morphological.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_morphological_clicked) ); m_CheckButton_Morphological_Masked.set_label("Use mask"); m_CheckButton_Morphological_Masked.set_active(true); m_CheckButton_Morphological_Masked.signal_clicked().connect( sigc::mem_fun(*this, &guiTools::on_checkbutton_morphological_masked_clicked) ); m_Label_Morphological_Radius.set_label("Radius:"); m_Label_Morphological_Radius.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_HBox_Morphological_Radius.pack_start(m_Label_Morphological_Radius, Gtk::PACK_SHRINK, 5); m_Adjustment_Morphological_Radius.signal_value_changed().connect( sigc::mem_fun(*this, &guiTools::on_spinbutton_morphological_radius_value_changed) ); m_HBox_Morphological_Radius.pack_start(m_SpinButton_Morphological_Radius, Gtk::PACK_EXPAND_PADDING, 5); m_Label_Morphological_Kerneltype.set_label("Kernel type:"); m_Label_Morphological_Kerneltype.set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP); m_HBox_Morphological_Kerneltype.pack_start(m_Label_Morphological_Kerneltype, Gtk::PACK_SHRINK, 5); m_Combo_Morphological_Kerneltype.append("Cross-shaped"); m_Combo_Morphological_Kerneltype.append("Rectangular"); m_Combo_Morphological_Kerneltype.append("Elliptic"); m_Combo_Morphological_Kerneltype.set_active(0); // Initial value m_Combo_Morphological_Kerneltype.set_size_request(120); m_Combo_Morphological_Kerneltype.signal_changed().connect(sigc::mem_fun(*this, &guiTools::on_combo_morphological_kerneltype_changed)); m_HBox_Morphological_Kerneltype.pack_start(m_Combo_Morphological_Kerneltype, Gtk::PACK_EXPAND_PADDING, 5); m_VBox_Morphological.pack_start(m_CheckButton_Morphological, Gtk::PACK_START, 5); m_VBox_Morphological.pack_start(m_CheckButton_Morphological_Masked, Gtk::PACK_SHRINK, 5); m_VBox_Morphological.pack_start(m_HBox_Morphological_Radius, Gtk::PACK_SHRINK, 5); m_VBox_Morphological.pack_start(m_HBox_Morphological_Kerneltype, Gtk::PACK_SHRINK, 5); m_VBox_Morphological.set_border_width(5); m_Frame_Morphological.add(m_VBox_Morphological); m_Frame_Morphological.set_border_width(5); m_VBox_Spatial_Filters.pack_start(m_Frame_Median, Gtk::PACK_START, 5); m_VBox_Spatial_Filters.pack_start(m_Frame_Median3D, Gtk::PACK_START, 5); m_VBox_Spatial_Filters.pack_start(m_Frame_Gaussian, Gtk::PACK_START, 5); m_VBox_Spatial_Filters.pack_start(m_Frame_Bilateral, Gtk::PACK_START, 5); m_VBox_Spatial_Filters.pack_start(m_Frame_Morphological, Gtk::PACK_START, 5); add(m_VBox_Spatial_Filters); set_title("OpenCV Filters"); set_skip_taskbar_hint(true); // No task bar entry set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG); // No task bar entry, always on top set_size_request(250, 675); }