<!ELEMENT report-header (%objects;)>
<!ATTLIST report-header
- height CDATA #REQUIRED
+ height CDATA #REQUIRED
+ new-page-after (y | n) #IMPLIED
>
<!ELEMENT report-footer (%objects;)>
<!ATTLIST report-footer
- height CDATA #REQUIRED
- align (none | bottom) "none"
+ height CDATA #REQUIRED
+ align (none | bottom) #IMPLIED
+ new-page-before (y | n) #IMPLIED
>
<!ELEMENT page-header (%objects;)>
<!ATTLIST page-header
height CDATA #REQUIRED
- first-page (y | n) "y"
+ first-page (y | n) #IMPLIED
>
<!ELEMENT page-footer (%objects;)>
<!ATTLIST page-footer
height CDATA #REQUIRED
- first-page (y | n ) "y"
+ first-page (y | n ) #IMPLIED
>
<!ELEMENT group (groupheader?, groupfooter?)>
<!ELEMENT group-footer (%objects;)>
<!ATTLIST group-footer
height CDATA #REQUIRED
- new-page-after (y | n) "n"
+ new-page-after (y | n) #IMPLIED
>
<!ELEMENT body (%objects;)>
<!ATTLIST body
height CDATA #REQUIRED
- new-page-after (y | n) "n"
+ new-page-after (y | n) #IMPLIED
>
* Returns: the newly created #RptObject object.
*/
RptObject
-*rpt_obj_text_new (const gchar *name, RptPoint *position)
+*rpt_obj_text_new (const gchar *name, RptPoint position)
{
- RptObject *rpt_obj_text = RPT_OBJECT (g_object_new (rpt_obj_text_get_type (), NULL));
+ RptObject *rpt_obj_text = NULL;
+
+ gchar *name_ = g_strstrip (g_strdup (name));
- g_object_set (G_OBJECT (rpt_obj_text),
- "name", name,
- "position", position,
- NULL);
+ if (strcmp (name_, "") != 0)
+ {
+ rpt_obj_text = RPT_OBJECT (g_object_new (rpt_obj_text_get_type (), NULL));
+
+ g_object_set (G_OBJECT (rpt_obj_text),
+ "name", name_,
+ "position", &position,
+ NULL);
+ }
return rpt_obj_text;
}
gchar *name;
RptObject *rpt_obj_text = NULL;
- name = (gchar *)xmlGetProp (xnode, "name");
+ name = g_strdup ((gchar *)xmlGetProp (xnode, "name"));
if (name != NULL && strcmp (g_strstrip (name), "") != 0)
{
- RptPoint *position;
+ RptPoint position;
RptObjTextPrivate *priv;
- rpt_common_get_position (xnode, position);
+ rpt_common_get_position (xnode, &position);
- rpt_obj_text = rpt_obj_text_new (name, position);
+ rpt_obj_text = rpt_obj_text_new ((const gchar *)name, position);
if (rpt_obj_text != NULL)
{
GValue *value,
GParamSpec *pspec);
-static void rpt_report_xml_parse_body (RptReport *rpt_report, xmlNodeSetPtr xnodeset);
+static void rpt_report_xml_parse_body (RptReport *rpt_report, xmlNode *xnode);
static RptObject *rpt_report_get_object_from_name (GList *list, const gchar *name);
static xmlNode *rpt_report_rptprint_new_page (RptReport *rptreport,
xmlNode *xroot);
static void rpt_report_rptprint_body (RptReport *rptreport,
- xmlNode *xpage);
+ xmlNode *xpage,
+ gdouble *cur_y);
static void rpt_report_rptprint_parse_source (RptReport *rptreport,
RptObject *rptobj,
xmlNode *xnode);
{
RptReportPrivate *priv = RPT_REPORT_GET_PRIVATE (rpt_report);
+ priv->gda_client = NULL;
+ priv->gda_conn = NULL;
+ priv->gda_datamodel = NULL;
+
priv->page = (Page *)g_malloc0 (sizeof (Page));
priv->page->size = (RptSize *)g_malloc0 (sizeof (RptSize));
priv->page->size->width = 0.0;
if (priv->gda_conn == NULL)
{
/* TO DO */
+ g_warning ("Unable to establish the connection.");
}
else
{
xnodeset = xpresult->nodesetval;
if (xnodeset->nodeNr == 1)
{
- rpt_report_xml_parse_body (rpt_report, xnodeset);
+ rpt_report_xml_parse_body (rpt_report, xnodeset->nodeTab[0]);
}
}
}
{
xmlDoc *xdoc;
xmlNode *xroot;
- xmlNode *xnode;
+ xmlNode *xpage;
gint pages;
+ gdouble cur_y = 0.0;
RptReportPrivate *priv = RPT_REPORT_GET_PRIVATE (rptreport);
xroot = xmlNewNode (NULL, "reptool_report");
xmlDocSetRootElement (xdoc, xroot);
- pages++;
- xnode = rpt_report_rptprint_new_page (rptreport, xroot);
- rpt_report_rptprint_body (rptreport, xnode);
+ if (priv->gda_datamodel != NULL)
+ {
+ gint row;
+ gint rows;
+
+ rows = gda_data_model_get_n_rows (priv->gda_datamodel);
+
+ for (row = 0; row < rows; row++)
+ {
+ if (row == 0 || cur_y > priv->page->size->height)
+ {
+ cur_y = 0.0;
+ pages++;
+ xpage = rpt_report_rptprint_new_page (rptreport, xroot);
+ }
+
+ rpt_report_rptprint_body (rptreport, xpage, &cur_y);
+ }
+ }
+ else
+ {
+ pages++;
+ xpage = rpt_report_rptprint_new_page (rptreport, xroot);
+ rpt_report_rptprint_body (rptreport, xpage, &cur_y);
+ }
return xdoc;
}
}
static void
-rpt_report_xml_parse_body (RptReport *rpt_report, xmlNodeSetPtr xnodeset)
+rpt_report_xml_parse_body (RptReport *rpt_report, xmlNode *xnode)
{
RptObject *rptobj;
- gchar *objname;
gchar *prop;
- xmlNode *cur = xnodeset->nodeTab[0];
+ gchar *objname;
+ xmlNode *cur;
RptReportPrivate *priv = RPT_REPORT_GET_PRIVATE (rpt_report);
- prop = xmlGetProp (cur, "height");
+ prop = (gchar *)xmlGetProp (xnode, "height");
if (prop != NULL)
{
- priv->body->height = strtod (prop, NULL);
+ priv->body->height = strtod (g_strstrip (g_strdup (prop)), NULL);
}
- cur = cur->children;
+ cur = xnode->children;
while (cur != NULL)
{
if (strcmp (cur->name, "text") == 0)
rptobj = rpt_obj_text_new_from_xml (cur);
if (rptobj != NULL)
{
- g_object_get (rptobj, "name", objname, NULL);
+ g_object_get (rptobj, "name", &objname, NULL);
if (rpt_report_get_object_from_name (priv->body->objects, objname) == NULL)
{
else
{
/* TO DO */
+ g_warning ("An object with name \"%s\" already exists.", objname);
}
}
}
list = g_list_first (list);
while (list != NULL)
{
- g_object_get ((RptObject *)list->data, "name", objname, NULL);
+ g_object_get ((RptObject *)list->data, "name", &objname, NULL);
if (strcmp (name, objname) == 0)
{
obj = (RptObject *)list->data;
}
static void
-rpt_report_rptprint_body (RptReport *rptreport, xmlNode *xpage)
+rpt_report_rptprint_body (RptReport *rptreport, xmlNode *xpage, gdouble *cur_y)
{
GList *objects;
xmlAttrPtr attr;
xmlNode *xnode;
+ gchar *prop;
RptObject *rptobj;
xmlRemoveProp (attr);
}
+ prop = (gchar *)xmlGetProp (xnode, "y");
+ if (prop == NULL)
+ {
+ prop = g_strdup ("0.0");
+ }
+ xmlSetProp (xnode, "y", g_strdup_printf ("%f", strtod (prop, NULL) + *cur_y));
+
if (IS_RPT_OBJ_TEXT (rptobj))
{
rpt_report_rptprint_parse_source (rptreport, rptobj, xnode);
objects = g_list_next (objects);
}
+ *cur_y += priv->body->height;
}
static void