Simplify geometry XML format by folding row element.
This commit is contained in:
@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user