Commit b8015bbe authored by Daiki Ueno's avatar Daiki Ueno
Browse files

Simplify geometry XML format by folding row element.

parent 157d7c57
This diff is collapsed.
......@@ -152,22 +152,24 @@ on_cancelled (EekKey *key,
static EekKey *
eek_section_real_create_key (EekSection *self,
guint keycode,
gint column,
gint row)
gint column_index,
gint row_index)
{
EekKey *key;
gint num_columns, num_rows;
EekOrientation orientation;
gint num_rows;
EekRow *row;
num_rows = eek_section_get_n_rows (self);
g_return_val_if_fail (0 <= row && row < num_rows, NULL);
eek_section_get_row (self, row, &num_columns, &orientation);
g_return_val_if_fail (column < num_columns, NULL);
g_return_val_if_fail (0 <= row_index && row_index < num_rows, NULL);
row = g_slist_nth_data (self->priv->rows, row_index);
if (row->num_columns < column_index + 1)
row->num_columns = column_index + 1;
key = g_object_new (EEK_TYPE_KEY,
"keycode", keycode,
"column", column,
"row", row,
"column", column_index,
"row", row_index,
NULL);
g_return_val_if_fail (key, NULL);
......
......@@ -240,6 +240,7 @@ struct _GeometryParseData {
EekSection *section;
EekKey *key;
gint num_columns;
gint num_rows;
EekOrientation orientation;
gdouble corner_radius;
GSList *points;
......@@ -287,8 +288,8 @@ static const gchar *geometry_valid_path_list[] = {
"outline/geometry",
"bounds/section/geometry",
"row/section/geometry",
"key/section/geometry",
"bounds/key/section/geometry",
"key/row/section/geometry",
"bounds/key/row/section/geometry",
"point/outline/geometry",
};
......@@ -384,27 +385,21 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
}
if (g_strcmp0 (element_name, "row") == 0) {
attribute = get_attribute (attribute_names, attribute_values,
"columns");
if (attribute == NULL) {
g_set_error (error,
G_MARKUP_ERROR,
G_MARKUP_ERROR_MISSING_ATTRIBUTE,
"no \"columns\" attribute for \"row\"");
return;
}
data->num_columns = strtol (attribute, NULL, 10);
attribute = get_attribute (attribute_names, attribute_values,
"orientation");
if (attribute != NULL)
data->orientation = strtol (attribute, NULL, 10);
eek_section_add_row (data->section,
data->num_columns,
data->orientation);
data->num_rows++;
goto out;
}
if (g_strcmp0 (element_name, "key") == 0) {
guint keycode;
gint column, row;
attribute = get_attribute (attribute_names, attribute_values,
"keycode");
......@@ -417,29 +412,10 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
}
keycode = strtoul (attribute, NULL, 10);
attribute = get_attribute (attribute_names, attribute_values,
"column");
if (attribute == NULL) {
g_set_error (error,
G_MARKUP_ERROR,
G_MARKUP_ERROR_MISSING_ATTRIBUTE,
"no \"column\" attribute for \"key\"");
return;
}
column = strtol (attribute, NULL, 10);
attribute = get_attribute (attribute_names, attribute_values,
"row");
if (attribute == NULL) {
g_set_error (error,
G_MARKUP_ERROR,
G_MARKUP_ERROR_MISSING_ATTRIBUTE,
"no \"row\" attribute for \"row\"");
return;
}
row = strtol (attribute, NULL, 10);
data->key = eek_section_create_key (data->section, keycode, column, row);
data->key = eek_section_create_key (data->section,
keycode,
data->num_columns,
data->num_rows - 1);
attribute = get_attribute (attribute_names, attribute_values,
"name");
......@@ -458,6 +434,9 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
g_hash_table_insert (data->key_oref_hash,
data->key,
g_strdup (attribute));
data->num_columns++;
goto out;
}
......@@ -533,6 +512,7 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
if (g_strcmp0 (element_name, "section") == 0) {
data->section = NULL;
data->num_rows = 0;
return;
}
......@@ -541,6 +521,12 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
return;
}
if (g_strcmp0 (element_name, "row") == 0) {
data->num_columns = 0;
data->orientation = EEK_ORIENTATION_HORIZONTAL;
return;
}
if (g_strcmp0 (element_name, "outline") == 0) {
EekOutline *outline = g_slice_new (EekOutline);
......@@ -566,15 +552,6 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
g_free (data->oref);
return;
}
if (g_strcmp0 (element_name, "row") == 0) {
eek_section_add_row (data->section,
data->num_columns,
data->orientation);
data->num_columns = 0;
data->orientation = EEK_ORIENTATION_HORIZONTAL;
return;
}
}
static const GMarkupParser geometry_parser = {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment