3 /* local function prototypes */
4 static void *_create_data(E_Config_Dialog *cfd);
5 static void _fill_data(E_Config_Dialog_Data *cfdata);
6 static void _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
7 static Evas_Object *_basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata);
8 static int _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
9 static int _basic_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
10 static void _basic_use_dpi_changed(void *data, Evas_Object *obj __UNUSED__);
11 static Evas_Object *_adv_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata);
12 static int _adv_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
13 static int _adv_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
14 static void _adv_policy_changed(void *data, Evas_Object *obj __UNUSED__);
16 struct _E_Config_Dialog_Data
19 double min, max, factor;
20 int use_mode, base_dpi, use_custom;
25 Evas_Object *o_lbl, *o_slider;
29 Evas_Object *dpi_lbl, *dpi_slider;
30 Evas_Object *custom_slider;
31 Evas_Object *min_lbl, *min_slider;
32 Evas_Object *max_lbl, *max_slider;
38 e_int_config_scale(E_Container *con, const char *params __UNUSED__)
41 E_Config_Dialog_View *v;
43 if (e_config_dialog_find("E", "appearance/scale")) return NULL;
45 v = E_NEW(E_Config_Dialog_View, 1);
46 v->create_cfdata = _create_data;
47 v->free_cfdata = _free_data;
48 v->basic.create_widgets = _basic_create;
49 v->basic.apply_cfdata = _basic_apply;
50 v->basic.check_changed = _basic_changed;
51 v->advanced.create_widgets = _adv_create;
52 v->advanced.apply_cfdata = _adv_apply;
53 v->advanced.check_changed = _adv_changed;
55 cfd = e_config_dialog_new(con, _("Scale Settings"), "E", "appearance/scale",
56 "preferences-scale", 0, v, NULL);
60 /* local function prototypes */
62 _create_data(E_Config_Dialog *cfd __UNUSED__)
64 E_Config_Dialog_Data *cfdata;
66 cfdata = E_NEW(E_Config_Dialog_Data, 1);
72 _fill_data(E_Config_Dialog_Data *cfdata)
74 cfdata->use_dpi = e_config->scale.use_dpi;
75 cfdata->use_custom = e_config->scale.use_custom;
77 if (cfdata->use_dpi) cfdata->use_mode = 1;
78 else if (cfdata->use_custom) cfdata->use_mode = 2;
79 cfdata->min = e_config->scale.min;
80 cfdata->max = e_config->scale.max;
81 cfdata->factor = e_config->scale.factor;
82 cfdata->base_dpi = e_config->scale.base_dpi;
86 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
92 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
94 Evas_Object *o, *of, *ow;
97 o = e_widget_list_add(evas, 0, 0);
99 ow = e_widget_check_add(evas, _("Scale with DPI"), &(cfdata->use_dpi));
100 e_widget_on_change_hook_set(ow, _basic_use_dpi_changed, cfdata);
101 e_widget_list_object_append(o, ow, 1, 0, 0.5);
103 of = e_widget_framelist_add(evas, _("Relative"), 0);
104 ow = e_widget_label_add(evas, _("Base DPI to scale relative to"));
105 cfdata->gui.basic.o_lbl = ow;
106 e_widget_framelist_object_append(of, ow);
107 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f DPI"), 30, 1200, 1, 0,
108 NULL, &(cfdata->base_dpi), 150);
109 cfdata->gui.basic.o_slider = ow;
110 e_widget_framelist_object_append(of, ow);
111 snprintf(buff, sizeof(buff), _("Currently %i DPI"), ecore_x_dpi_get());
112 ow = e_widget_label_add(evas, buff);
113 e_widget_framelist_object_append(of, ow);
114 e_widget_list_object_append(o, of, 1, 0, 0.5);
116 _basic_use_dpi_changed(cfdata, NULL);
121 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
123 cfdata->use_custom = 0;
124 if (cfdata->use_dpi) cfdata->use_mode = 1;
125 else cfdata->use_mode = 0;
127 e_config->scale.use_dpi = cfdata->use_dpi;
128 e_config->scale.use_custom = cfdata->use_custom;
129 e_config->scale.min = cfdata->min;
130 e_config->scale.max = cfdata->max;
131 e_config->scale.factor = cfdata->factor;
132 e_config->scale.base_dpi = cfdata->base_dpi;
136 e_config_save_queue();
142 _basic_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
144 return ((cfdata->use_dpi != e_config->scale.use_dpi) ||
145 (cfdata->base_dpi != e_config->scale.base_dpi));
149 _basic_use_dpi_changed(void *data, Evas_Object *obj __UNUSED__)
151 E_Config_Dialog_Data *cfdata;
153 if (!(cfdata = data)) return;
154 e_widget_disabled_set(cfdata->gui.basic.o_lbl, !cfdata->use_dpi);
155 e_widget_disabled_set(cfdata->gui.basic.o_slider, !cfdata->use_dpi);
159 _adv_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
161 Evas_Object *o, *otb, *ow;
165 otb = e_widget_toolbook_add(evas, 24, 24);
168 o = e_widget_list_add(evas, 0, 0);
169 rg = e_widget_radio_group_new(&(cfdata->use_mode));
170 ow = e_widget_radio_add(evas, _("Don't Scale"), 0, rg);
171 e_widget_on_change_hook_set(ow, _adv_policy_changed, cfdata);
172 e_widget_list_object_append(o, ow, 1, 1, 0.5);
173 ow = e_widget_radio_add(evas, _("Scale relative to screen DPI"), 1, rg);
174 e_widget_on_change_hook_set(ow, _adv_policy_changed, cfdata);
175 e_widget_list_object_append(o, ow, 1, 1, 0.5);
177 snprintf(buff, sizeof(buff),
178 _("Base DPI (Currently %i DPI)"), ecore_x_dpi_get());
179 ow = e_widget_label_add(evas, buff);
180 cfdata->gui.adv.dpi_lbl = ow;
181 e_widget_list_object_append(o, ow, 1, 1, 0.5);
182 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f DPI"), 30, 1200, 1, 0,
183 NULL, &(cfdata->base_dpi), 150);
184 cfdata->gui.adv.dpi_slider = ow;
185 e_widget_list_object_append(o, ow, 1, 1, 0.5);
186 ow = e_widget_radio_add(evas, _("Custom scaling factor"), 2, rg);
187 e_widget_on_change_hook_set(ow, _adv_policy_changed, cfdata);
188 e_widget_list_object_append(o, ow, 1, 1, 0.5);
189 ow = e_widget_slider_add(evas, 1, 0, _("%1.2f times"), 0.25, 8.0, 0.05,
190 0, &(cfdata->factor), NULL, 150);
191 cfdata->gui.adv.custom_slider = ow;
192 e_widget_list_object_append(o, ow, 1, 1, 0.5);
193 e_widget_toolbook_page_append(otb, NULL, _("Policy"), o,
194 1, 0, 1, 0, 0.5, 0.0);
198 o = e_widget_list_add(evas, 0, 0);
199 ow = e_widget_label_add(evas, _("Minimum"));
200 cfdata->gui.adv.min_lbl = ow;
201 e_widget_list_object_append(o, ow, 1, 1, 0.5);
202 ow = e_widget_slider_add(evas, 1, 0, _("%1.2f times"), 0.25, 8.0, 0.05,
203 0, &(cfdata->min), NULL, 150);
204 cfdata->gui.adv.min_slider = ow;
205 e_widget_list_object_append(o, ow, 1, 1, 0.5);
206 ow = e_widget_label_add(evas, _("Maximum"));
207 cfdata->gui.adv.max_lbl = ow;
208 e_widget_list_object_append(o, ow, 1, 1, 0.5);
209 ow = e_widget_slider_add(evas, 1, 0, _("%1.2f times"), 0.25, 8.0, 0.05,
210 0, &(cfdata->max), NULL, 150);
211 cfdata->gui.adv.max_slider = ow;
212 e_widget_list_object_append(o, ow, 1, 1, 0.5);
213 e_widget_toolbook_page_append(otb, NULL, _("Constraints"), o,
214 1, 0, 1, 0, 0.5, 0.0);
216 e_widget_toolbook_page_show(otb, 0);
217 _adv_policy_changed(cfdata, NULL);
222 _adv_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
224 cfdata->use_custom = 0;
226 if (cfdata->use_mode == 1)
228 else if (cfdata->use_mode == 2)
229 cfdata->use_custom = 1;
231 e_config->scale.use_dpi = cfdata->use_dpi;
232 e_config->scale.use_custom = cfdata->use_custom;
233 e_config->scale.min = cfdata->min;
234 e_config->scale.max = cfdata->max;
235 e_config->scale.factor = cfdata->factor;
236 e_config->scale.base_dpi = cfdata->base_dpi;
240 e_config_save_queue();
246 _adv_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
248 int use_dpi = 0, use_custom = 0;
250 if (cfdata->use_mode == 1)
252 else if (cfdata->use_mode == 2)
255 return ((use_dpi != e_config->scale.use_dpi) ||
256 (use_custom != e_config->scale.use_custom) ||
257 (cfdata->min != e_config->scale.min) ||
258 (cfdata->max != e_config->scale.max) ||
259 (cfdata->factor != e_config->scale.factor) ||
260 (cfdata->base_dpi != e_config->scale.base_dpi));
265 _adv_policy_changed(void *data, Evas_Object *obj __UNUSED__)
267 E_Config_Dialog_Data *cfdata;
269 if (!(cfdata = data)) return;
270 e_widget_disabled_set(cfdata->gui.adv.dpi_lbl, (cfdata->use_mode != 1));
271 e_widget_disabled_set(cfdata->gui.adv.dpi_slider, (cfdata->use_mode != 1));
272 e_widget_disabled_set(cfdata->gui.adv.custom_slider, (cfdata->use_mode != 2));
273 e_widget_disabled_set(cfdata->gui.adv.min_lbl, (cfdata->use_mode == 0));
274 e_widget_disabled_set(cfdata->gui.adv.min_slider, (cfdata->use_mode == 0));
275 e_widget_disabled_set(cfdata->gui.adv.max_lbl, (cfdata->use_mode == 0));
276 e_widget_disabled_set(cfdata->gui.adv.max_slider, (cfdata->use_mode == 0));