Россия, Кемерово, КемГИК |
Системные настройки по умолчанию
Запрос языковых настроек
В этом разделе мы поговорим о том, как запрашивать системные настройки по умолчанию.
Создайте проект ‘SystemSetting.’ Откройте файл исходного кода и внесите следующие изменения в начале файла.
#include "systemsetting.h" typedef struct appdata { Evas_Object *win; Evas_Object *conform; Evas_Object *label1; Evas_Object *label2; Evas_Object *label3; Evas_Object *label4; } appdata_s;
Мы объявили четыре метки. В первой метке мы будем отображать языковые настройки, наличие/отсутствия режима молчания — во второй метке, временную зону - в третьей метке и имя устройства — в четвертой метке. Введите три функции выше create_base_gui().
static void my_table_pack(Evas_Object *table, Evas_Object *child, int col, int row, int spanx, int spany, bool h_expand, bool v_expand, double h_align, double v_align) { /* Create a frame around the child, for padding */ Evas_Object *frame = elm_frame_add(table); elm_object_style_set(frame, "pad_small"); evas_object_size_hint_weight_set(frame, h_expand ? EVAS_HINT_EXPAND : 0, v_expand ? EVAS_HINT_EXPAND : 0); evas_object_size_hint_align_set(frame, h_align, v_align); /* place child in its box */ { evas_object_size_hint_weight_set(child, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(child, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_object_content_set(frame, child); evas_object_show(child); } elm_table_pack(table, frame, col, row, spanx, spany); evas_object_show(frame); } static Evas_Object * my_button_add(Evas_Object *parent, const char *text, Evas_Smart_Cb cb, void *cb_data) { Evas_Object *btn; btn = elm_button_add(parent); elm_object_text_set(btn, text); evas_object_smart_callback_add(btn, "clicked", cb, cb_data); return btn; } static Evas_Object * my_label_add(Evas_Object *parent, const char *text) { Evas_Object *btn; btn = elm_label_add(parent); elm_object_text_set(btn, text); return btn; }
Функция my_table_pack() добавляет элемент управления в контейнер Table.
Функция my_button_add() создает кнопку.
Функция my_label_add() создает метку.
Добавьте код внутри функции create_base_gui() function. Этот код создает один объект Frame, один объект Table, одну кнопку и восемь меток.
/* Conformant */ ad->conform = elm_conformant_add(ad->win); elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW); elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE); evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win, ad->conform); evas_object_show(ad->conform); { Evas_Object *tbl, *btn, *frame, *o; /* Frame */ frame = elm_frame_add(ad->win); elm_object_style_set(frame, "pad_medium"); elm_object_content_set(ad->conform, frame); evas_object_show(frame); /* Container: standard table */ tbl = elm_table_add(ad->win); /* Make this table homogeneous for nicer, fixed layout */ elm_table_homogeneous_set(tbl, EINA_TRUE); elm_object_content_set(frame, tbl); evas_object_show(tbl); { /* Button */ btn = my_button_add(tbl, "Load System Settings", btn_clicked_cb, ad); my_table_pack(tbl, btn, 0, 0, 2, 1, EVAS_HINT_EXPAND, 0, EVAS_HINT_FILL, EVAS_HINT_FILL); /* Fields */ o = my_label_add(tbl, "Language:"); my_table_pack(tbl, o, 0, 1, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL); ad->label1 = my_label_add(tbl, ""); my_table_pack(tbl, ad->label1, 1, 1, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL); o = my_label_add(tbl, "Silent mode:"); my_table_pack(tbl, o, 0, 2, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL); ad->label2 = my_label_add(tbl, ""); my_table_pack(tbl, ad->label2, 1, 2, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL); o = my_label_add(tbl, "Time zone:"); my_table_pack(tbl, o, 0, 3, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL); ad->label3 = my_label_add(tbl, ""); my_table_pack(tbl, ad->label3, 1, 3, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL); o = my_label_add(tbl, "Device name:"); my_table_pack(tbl, o, 0, 4, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL); ad->label4 = my_label_add(tbl, ""); my_table_pack(tbl, ad->label4, 1, 4, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL); } } /* Show window after base gui is set up */ evas_object_show(ad->win);
Теперь мы создадим функции — обработчики нажатия на кнопки. Добавьте код выше функции create_base_gui() function.
static void btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = data; char buf[100]; char *sValue = NULL; bool bValue; system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &sValue); elm_object_text_set(ad->label1, sValue); free(sValue); }
system_settings_get_value_string(system_settings_key_e, char **) - это API, который запрашивает системные параметры. Первый параметр — это ключевое значение. Указав SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, мы получаем тип языка, определенного пользователем. Запустите проект.
Запрос режима тишины
Для того, чтобы узнать, включен ли режим тишины, добавьте следующий код в конце функции btn_clicked_cb() function.
system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &sValue); elm_object_text_set(ad->label1, sValue); free(sValue); system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE, &bValue); elm_object_text_set(ad->label2, bValue ? "On" : "Off"); }
system_settings_get_value_bool(system_settings_key_e, bool *) - это API, который запрашивает системные настройки. Возвращает значение в булевом формате. Первый параметр принимает булево значение. Указав в качестве параметра SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE, мы узнаем включен ли режим.
Запустите пример.
Запрос временной зоны
Для запроса временной зоны добавьте код в конец функции btn_clicked_cb().
system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE, &bValue); elm_object_text_set(ad->label2, bValue ? "On" : "Off"); system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, &sValue); elm_object_text_set(ad->label3, sValue); free(sValue); }
Указав SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE в качестве первого параметра функции system_settings_get_value_string(), мы узнаем временную зону в строковом формате.
Запрос имени устройства
Для запроса имени устройства добавьте код в конец функции btn_clicked_cb().
system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, &sValue); elm_object_text_set(ad->label3, sValue); free(sValue); system_settings_get_value_string(SYSTEM_SETTINGS_KEY_DEVICE_NAME, &sValue); elm_object_text_set(ad->label4, sValue); free(sValue); }
использование SYSTEM_SETTINGS_KEY_DEVICE_NAME в качестве первого параметра функции system_settings_get_value_string(), мы узнаем имя устройства в виде строки. Запустите проект.