5 #define YUILogComponent "gtk" 14 GtkWidget *m_spiner, *m_slider;
17 YGSpinBox (YWidget *ywidget, YWidget *parent,
const std::string &label,
18 int minValue,
int maxValue,
int initialValue,
bool show_slider)
20 YGTK_HBOX_NEW(6),
"spacing", 6, NULL)
22 m_spiner = gtk_spin_button_new_with_range (minValue, maxValue, 1);
25 m_slider = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, minValue, maxValue, 1);
26 if (maxValue - minValue < 20)
28 gtk_range_set_increments (GTK_RANGE (m_slider), 1, 2);
29 gtk_scale_set_draw_value (GTK_SCALE (m_slider), FALSE);
30 YGLabeledWidget::setBuddy (m_slider);
31 gtk_widget_set_size_request (m_slider, 100, -1);
33 gtk_box_pack_start (GTK_BOX (getWidget()), m_slider, TRUE, TRUE, 0);
34 gtk_box_pack_start (GTK_BOX (getWidget()), m_spiner, FALSE, TRUE, 0);
35 gtk_widget_show (m_slider);
39 YGLabeledWidget::setBuddy (m_spiner);
40 gtk_container_add (GTK_CONTAINER (getWidget()), m_spiner);
42 gtk_widget_show (m_spiner);
44 doSetValue (initialValue);
45 connect (m_spiner,
"value-changed", G_CALLBACK (spiner_changed_cb),
this);
47 connect (m_slider,
"value-changed", G_CALLBACK (slider_changed_cb),
this);
50 GtkSpinButton *getSpiner()
51 {
return GTK_SPIN_BUTTON (m_spiner); }
54 {
return m_slider != NULL; }
56 {
return GTK_RANGE (m_slider); }
58 virtual void reportValue (
int value) = 0;
61 {
return gtk_spin_button_get_value_as_int (getSpiner()); }
63 void doSetValue (
int value)
66 gtk_spin_button_set_value (getSpiner(), value);
68 gtk_range_set_value (getSlider(), value);
72 static void spiner_changed_cb (GtkSpinButton *widget,
YGSpinBox *pThis)
74 int value = gtk_spin_button_get_value_as_int (pThis->getSpiner());
75 pThis->reportValue (value);
76 if (pThis->useSlider())
77 gtk_range_set_value (pThis->getSlider(), value);
78 pThis->emitEvent (YEvent::ValueChanged);
81 static void slider_changed_cb (GtkRange *range,
YGSpinBox *pThis)
83 int value = (int) gtk_range_get_value (range);
84 gtk_spin_button_set_value (pThis->getSpiner(), value);
85 pThis->reportValue (value);
86 pThis->emitEvent (YEvent::ValueChanged);
90 #define YGSPIN_BOX_IMPL(ParentClass) \ 91 virtual void reportValue (int value) { \ 92 ParentClass::setValue (value); \ 94 virtual int value() { \ 95 return doGetValue(); \ 97 virtual void setValueInternal (int value) { \ 101 #include "YIntField.h" 106 YGIntField (YWidget *parent,
const std::string &label,
int minValue,
int maxValue,
108 : YIntField (NULL, label, minValue, maxValue)
109 ,
YGSpinBox (
this, parent, label, minValue, maxValue, initialValue,
false)
112 YGLABEL_WIDGET_IMPL (YIntField)
113 YGSPIN_BOX_IMPL (YIntField)
116 YIntField *YGWidgetFactory::createIntField (YWidget *parent,
const std::string &label,
117 int minValue,
int maxValue,
int initialValue)
118 {
return new YGIntField (parent, label, minValue, maxValue, initialValue); }
125 YGSlider (YWidget *parent,
const std::string &label,
int minValue,
int maxValue,
127 : YSlider (NULL, label, minValue, maxValue)
128 ,
YGSpinBox (
this, parent, label, minValue, maxValue, initialValue,
true)
131 virtual unsigned int getMinSize (YUIDimension dim)
132 {
return dim == YD_HORIZ ? 200 : 0; }
134 YGLABEL_WIDGET_IMPL (YSlider)
135 YGSPIN_BOX_IMPL (YSlider)
138 YSlider *YGOptionalWidgetFactory::createSlider (YWidget *parent,
const std::string &label,
139 int minValue,
int maxValue,
int initialValue)
140 {
return new YGSlider (parent, label, minValue, maxValue, initialValue); }