Опубликован: 22.12.2015 | Уровень: для всех | Доступ: платный
Лекция 34:

Системные настройки по умолчанию

< Лекция 33 || Лекция 34 || Лекция 35 >

Запрос языковых настроек

В этом разделе мы поговорим о том, как запрашивать системные настройки по умолчанию.

Создайте проект ‘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(), мы узнаем имя устройства в виде строки. Запустите проект.


< Лекция 33 || Лекция 34 || Лекция 35 >