enventor/src/bin/preference_setting.c

325 lines
12 KiB
C

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "common.h"
typedef struct preference_setting_s
{
Evas_Object *box;
Evas_Object *view_size_w_entry;
Evas_Object *view_size_h_entry;
Evas_Object *toggle_tools;
Evas_Object *toggle_status;
Evas_Object *toggle_console;
Evas_Object *toggle_indent;
Evas_Object *toggle_autocomp;
Evas_Object *toggle_smart_undo_redo;
Evas_Object *toggle_red_alert;
} preference_setting_data;
/*****************************************************************************/
/* Internal method implementation */
/*****************************************************************************/
static Evas_Object *
label_create(Evas_Object *parent, const char *text)
{
Evas_Object *label = elm_label_add(parent);
elm_object_text_set(label, text);
evas_object_show(label);
return label;
}
static Evas_Object *
toggle_create(Evas_Object *parent, const char *text, Eina_Bool state,
const char *tooltip_msg)
{
Evas_Object *toggle = elm_check_add(parent);
elm_object_style_set(toggle, "toggle");
elm_check_state_set(toggle, state);
evas_object_size_hint_weight_set(toggle, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(toggle, EVAS_HINT_FILL, 0);
elm_object_text_set(toggle, text);
elm_object_tooltip_text_set(toggle, tooltip_msg);
evas_object_show(toggle);
return toggle;
}
static Evas_Object *
entry_create(Evas_Object *parent)
{
Evas_Object *entry = elm_entry_add(parent);
elm_entry_single_line_set(entry, EINA_TRUE);
elm_entry_scrollable_set(entry, EINA_TRUE);
evas_object_show(entry);
return entry;
}
/*****************************************************************************/
/* Externally accessible calls */
/*****************************************************************************/
void
preference_setting_focus_set(preference_setting_data *psd)
{
EINA_SAFETY_ON_NULL_RETURN(psd);
elm_object_focus_set(psd->view_size_w_entry, EINA_TRUE);
}
void
preference_setting_config_set(preference_setting_data *psd)
{
EINA_SAFETY_ON_NULL_RETURN(psd);
config_tools_set(elm_check_state_get(psd->toggle_tools));
config_stats_bar_set(elm_check_state_get(psd->toggle_status));
config_console_set(elm_check_state_get(psd->toggle_console));
config_auto_indent_set(elm_check_state_get(psd->toggle_indent));
config_auto_complete_set(elm_check_state_get(psd->toggle_autocomp));
config_smart_undo_redo_set(elm_check_state_get(psd->toggle_smart_undo_redo));
config_red_alert_set(elm_check_state_get(psd->toggle_red_alert));
Evas_Coord w = 0;
Evas_Coord h = 0;
const char *w_entry = elm_entry_entry_get(psd->view_size_w_entry);
if (w_entry) w = (Evas_Coord)atoi(w_entry);
const char *h_entry = elm_entry_entry_get(psd->view_size_h_entry);
if (h_entry) h = (Evas_Coord)atoi(h_entry);
config_view_size_set(w, h);
}
void
preference_setting_reset(preference_setting_data *psd)
{
EINA_SAFETY_ON_NULL_RETURN(psd);
elm_check_state_set(psd->toggle_tools, config_tools_get());
elm_check_state_set(psd->toggle_status, config_stats_bar_get());
elm_check_state_set(psd->toggle_console, config_console_get());
elm_check_state_set(psd->toggle_indent, config_auto_indent_get());
elm_check_state_set(psd->toggle_autocomp, config_auto_complete_get());
elm_check_state_set(psd->toggle_smart_undo_redo,
config_smart_undo_redo_get());
elm_check_state_set(psd->toggle_red_alert, config_red_alert_get());
//Reset view scale
int view_size_w, view_size_h;
config_view_size_get(&view_size_w, &view_size_h);
char buf[10];
snprintf(buf, sizeof(buf), "%d", view_size_w);
elm_entry_entry_set(psd->view_size_w_entry, buf);
snprintf(buf, sizeof(buf), "%d", view_size_h);
elm_entry_entry_set(psd->view_size_h_entry, buf);
}
Evas_Object *
preference_setting_content_get(preference_setting_data *psd,
Evas_Object *parent)
{
static Elm_Entry_Filter_Accept_Set digits_filter_data;
static Elm_Entry_Filter_Limit_Size limit_filter_data;
EINA_SAFETY_ON_NULL_RETURN_VAL(psd, NULL);
if (psd->box) return psd->box;
//Preference
//Box
Evas_Object *box = elm_box_add(parent);
elm_box_padding_set(box, 0, ELM_SCALE_SIZE(5));
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(box);
Evas_Object *rect;
//Spacer
rect = evas_object_rectangle_add(evas_object_evas_get(box));
evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_min_set(rect, 0, ELM_SCALE_SIZE(1));
elm_box_pack_end(box, rect);
Evas_Object *box2;
Evas_Object *layout_padding3;
//View Size
//Box for View Size
box2 = elm_box_add(box);
elm_box_horizontal_set(box2, EINA_TRUE);
elm_box_padding_set(box2, ELM_SCALE_SIZE(5), 0);
evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 0);
evas_object_show(box2);
elm_box_pack_end(box, box2);
elm_object_tooltip_text_set(box2,
_("Set default size of live view.<br>"
"When you open a new group, Its<br>"
"view size will be set with this."));
//Label (View Size)
/* This layout is intended to put the label aligned to left side
far from 3 pixels. */
layout_padding3 = elm_layout_add(box2);
elm_layout_file_set(layout_padding3, EDJE_PATH, "padding3_layout");
evas_object_show(layout_padding3);
elm_box_pack_end(box2, layout_padding3);
Evas_Object *label_view_size = label_create(layout_padding3,
_("Default View Size"));
elm_object_part_content_set(layout_padding3, "elm.swallow.content",
label_view_size);
//Spacer
rect = evas_object_rectangle_add(evas_object_evas_get(box2));
evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box2, rect);
Evas_Coord w, h;
char w_str[5], h_str[5];
config_view_size_get(&w, &h);
snprintf(w_str, sizeof(w_str), "%d", w);
snprintf(h_str, sizeof(h_str), "%d", h);
//Entry (View Width)
Evas_Object *entry_view_size_w = entry_create(box2);
evas_object_size_hint_weight_set(entry_view_size_w, 0.15, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(entry_view_size_w, EVAS_HINT_FILL, EVAS_HINT_FILL);
digits_filter_data.accepted = "0123456789";
digits_filter_data.rejected = NULL;
elm_entry_markup_filter_append(entry_view_size_w,
elm_entry_filter_accept_set,
&digits_filter_data);
limit_filter_data.max_char_count = 4;
limit_filter_data.max_byte_count = 0;
elm_entry_markup_filter_append(entry_view_size_w,
elm_entry_filter_limit_size,
&limit_filter_data);
elm_object_text_set(entry_view_size_w, w_str);
elm_box_pack_end(box2, entry_view_size_w);
//Label (X)
Evas_Object *label_view_size_x = label_create(box2, "X");
elm_box_pack_end(box2, label_view_size_x);
//Entry (View Height)
Evas_Object *entry_view_size_h = entry_create(box2);
evas_object_size_hint_weight_set(entry_view_size_h, 0.15, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(entry_view_size_h, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_entry_markup_filter_append(entry_view_size_h,
elm_entry_filter_accept_set,
&digits_filter_data);
elm_entry_markup_filter_append(entry_view_size_h,
elm_entry_filter_limit_size,
&limit_filter_data);
elm_object_text_set(entry_view_size_h, h_str);
elm_box_pack_end(box2, entry_view_size_h);
//Toggle (Tools)
Evas_Object *toggle_tools =
toggle_create(box, _("Tools"),
config_tools_get(),
_("Tools (F7)<br>"
"Display Tools on the top area.<br>"
"Tools displays the essential function <br>"
"toggles to edit the layout."));
elm_box_pack_end(box, toggle_tools);
//Toggle (Status)
Evas_Object *toggle_status =
toggle_create(box, _("Status"), config_stats_bar_get(),
_("Status (F8)<br>"
"Display Status bar, which shows subsidiary<br>"
"information for editing in the bottom area."));
elm_box_pack_end(box, toggle_status);
//Toggle (Console)
Evas_Object *toggle_console =
toggle_create(box, _("Auto Hiding Console"), config_console_get(),
_("Hide the console box automatically<br>"
"when no messages are to be shown.<br>"
"for example, when you have fixed all<br>"
"grammatical errors."));
elm_box_pack_end(box, toggle_console);
//Toggle (Auto Indentation)
Evas_Object *toggle_indent =
toggle_create(box, _("Auto Indentation"), config_auto_indent_get(),
_("Apply automatic indentation for text editing.<br>"
"When wrapping the text around, Enventor<br>"
"inserts the line indentation automatically."));
elm_box_pack_end(box, toggle_indent);
//Toggle (Auto Completion)
Evas_Object *toggle_autocomp =
toggle_create(box, _("Auto Completion"), config_auto_complete_get(),
_("Display the candidate keyword popup with<br>"
"regards to the current editing context.<br>"
"When you type texts in the editor, the candidate<br>"
"popup appears. You can choose an item<br>"
"from the list, and a code template is inserted."));
elm_box_pack_end(box, toggle_autocomp);
//Toggle (Smart Undo/Redo)
Evas_Object *toggle_smart_undo_redo =
toggle_create(box, _("Smart Undo/Redo"), config_smart_undo_redo_get(),
_("Redo/Undo text by word. If disabled, redoing<br>"
"and undoing works by character."));
elm_box_pack_end(box, toggle_smart_undo_redo);
//Toggle (Red Alert)
Evas_Object *toggle_red_alert =
toggle_create(box, _("Error Message Red Alert"), config_red_alert_get(),
_("Enable error message red alert effect.<br>"
"When EDC compilation fails because of<br>"
"a grammar error, Enventor alerts<br>"
"you with a fading screen effect."));
evas_object_size_hint_weight_set(toggle_red_alert, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(toggle_red_alert, EVAS_HINT_FILL, 0);
elm_box_pack_end(box, toggle_red_alert);
psd->box = box;
psd->view_size_w_entry = entry_view_size_w;
psd->view_size_h_entry = entry_view_size_h;
psd->toggle_tools = toggle_tools;
psd->toggle_status = toggle_status;
psd->toggle_console = toggle_console;
psd->toggle_indent = toggle_indent;
psd->toggle_autocomp = toggle_autocomp;
psd->toggle_smart_undo_redo = toggle_smart_undo_redo;
psd->toggle_red_alert = toggle_red_alert;
return box;
}
preference_setting_data *
preference_setting_init(void)
{
preference_setting_data *psd = calloc(1, sizeof(preference_setting_data));
if (!psd)
{
mem_fail_msg();
return NULL;
}
return psd;
}
void
preference_setting_term(preference_setting_data *psd)
{
EINA_SAFETY_ON_NULL_RETURN(psd);
evas_object_del(psd->box);
free(psd);
}