]> saetta.ns0.it Git - reptool/libreptool/commitdiff
Added function RptReport::set_database_from_datamodel.
authorAndrea Zagli <azagli@libero.it>
Thu, 9 Sep 2010 08:42:34 +0000 (10:42 +0200)
committerAndrea Zagli <azagli@libero.it>
Thu, 9 Sep 2010 08:42:34 +0000 (10:42 +0200)
Bugfix on sections printing.

data/reptool.dtd
data/reptool_report.dtd
src/rptreport.c
src/rptreport.h

index 7fa1c7afbdf23b040461d2e13fc93d2e1758cd81..ebf2e93fa0bf845bff4cc4989c03aadcf976ed1f 100644 (file)
 <!ELEMENT reptool (properties?, database?, page, report)>
 
 <!ELEMENT properties (unit-length?)>
-
 <!ELEMENT unit-length (pt | in | cm | mm) #IMPLIED>
 
-<!ELEMENT database (provider, connection_string, sql)>
+<!ELEMENT database (provider, connection-string, sql)>
 <!ELEMENT provider (#PCDATA)>
 <!ELEMENT connection-string (#PCDATA)>
 <!ELEMENT sql (#PCDATA)>
index e153c73d8cf1a8db9926c3930a8ab6a61d5c1806..f9f1ab620e4e1288989fac46c340086e25f3d30c 100644 (file)
 <!ELEMENT reptool_report (properties?, page*)>
 
 <!ELEMENT properties (unit-length?)>
-
 <!ELEMENT unit-length (pt | in | cm | mm) #IMPLIED>
 
 <!ELEMENT page (%objects;)>
index a4ea626b5fb7c6a2b6d43e4cbfe9ba6b90808389..e71702302e7ed3639123042d25eb61e547cda644 100644 (file)
@@ -602,6 +602,35 @@ rpt_report_set_database (RptReport *rpt_report,
        priv->db->provider_id = g_strstrip (g_strdup (provider_id));
        priv->db->connection_string = g_strstrip (g_strdup (connection_string));
        priv->db->sql = g_strstrip (g_strdup (sql));
+       priv->db->gda_conn = NULL;
+       priv->db->gda_datamodel = NULL;
+}
+
+/**
+ * rpt_report_set_database_from_datamodel:
+ * @rpt_report: an #RptReport object.
+ * @data_model: a #GdaDataModel.
+ *
+ */
+void
+rpt_report_set_database_from_datamodel (RptReport *rpt_report, GdaDataModel *data_model)
+{
+       g_return_if_fail (IS_RPT_REPORT (rpt_report));
+       g_return_if_fail (GDA_IS_DATA_MODEL (data_model));
+
+       RptReportPrivate *priv = RPT_REPORT_GET_PRIVATE (rpt_report);
+
+       if (priv->db != NULL)
+               {
+                       g_free (priv->db);
+               }
+       priv->db = (Database *)g_malloc0 (sizeof (Database));
+
+       priv->db->provider_id = NULL;
+       priv->db->connection_string = NULL;
+       priv->db->sql = NULL;
+       priv->db->gda_conn = NULL;
+       priv->db->gda_datamodel = data_model;
 }
 
 /**
@@ -1207,32 +1236,35 @@ xmlDoc
 
                        /* database connection */
                        gda_init ();
-                       error = NULL;
-                       priv->db->gda_conn = gda_connection_open_from_string (priv->db->provider_id,
-                                                                             priv->db->connection_string,
-                                                                             NULL,
-                                                                             GDA_CONNECTION_OPTIONS_NONE,
-                                                                             &error);
-                       if (priv->db->gda_conn == NULL)
-                               {
-                                       /* TO DO */
-                                       g_warning ("Unable to establish the connection.");
-                                       return NULL;
-                               }
-                       else
+                       if (priv->db->gda_datamodel == NULL)
                                {
-                                       GdaSqlParser *parser = gda_sql_parser_new ();
-                                       error = NULL;
-                                       GdaStatement *stmt = gda_sql_parser_parse_string (parser, priv->db->sql, NULL, &error);
-
                                        error = NULL;
-                                       priv->db->gda_datamodel = gda_connection_statement_execute_select (priv->db->gda_conn, stmt, NULL, &error);
-                                       if (priv->db->gda_datamodel == NULL)
+                                       priv->db->gda_conn = gda_connection_open_from_string (priv->db->provider_id,
+                                                                                                     priv->db->connection_string,
+                                                                                                     NULL,
+                                                                                                     GDA_CONNECTION_OPTIONS_NONE,
+                                                                                                     &error);
+                                       if (priv->db->gda_conn == NULL)
                                                {
                                                        /* TO DO */
-                                                       g_warning ("Unable to create the datamodel.");
+                                                       g_warning ("Unable to establish the connection.");
                                                        return NULL;
                                                }
+                                       else
+                                               {
+                                                       GdaSqlParser *parser = gda_sql_parser_new ();
+                                                       error = NULL;
+                                                       GdaStatement *stmt = gda_sql_parser_parse_string (parser, priv->db->sql, NULL, &error);
+
+                                                       error = NULL;
+                                                       priv->db->gda_datamodel = gda_connection_statement_execute_select (priv->db->gda_conn, stmt, NULL, &error);
+                                                       if (priv->db->gda_datamodel == NULL)
+                                                               {
+                                                                       /* TO DO */
+                                                                       g_warning ("Unable to create the datamodel.");
+                                                                       return NULL;
+                                                               }
+                                               }
                                }
 
                        rows = gda_data_model_get_n_rows (priv->db->gda_datamodel);
@@ -1257,6 +1289,14 @@ xmlDoc
                                                        cur_y = priv->page->margin_top;
                                                        xpage = rpt_report_rptprint_new_page (rpt_report, xroot);
 
+                                                       if (priv->page_header != NULL)
+                                                               {
+                                                                       if ((priv->cur_page == 1 && priv->page_header->first_page) ||
+                                                                           priv->cur_page > 1)
+                                                                               {
+                                                                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_HEADER, row);
+                                                                               }
+                                                               }
                                                        if (priv->cur_page == 1 && priv->report_header != NULL)
                                                                {
                                                                        rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_REPORT_HEADER, row);
@@ -1266,14 +1306,6 @@ xmlDoc
                                                                                        xpage = rpt_report_rptprint_new_page (rpt_report, xroot);
                                                                                }
                                                                }
-                                                       if (priv->page_header != NULL)
-                                                               {
-                                                                       if ((priv->cur_page == 1 && priv->page_header->first_page) ||
-                                                                           priv->cur_page > 1)
-                                                                               {
-                                                                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_HEADER, row);
-                                                                               }
-                                                               }
                                                }
 
                                        rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_BODY, row);
@@ -1284,18 +1316,18 @@ xmlDoc
                                        if ((cur_y + priv->report_footer->height > priv->page->size->height - priv->page->margin_bottom - (priv->page_footer != NULL ? priv->page_footer->height : 0.0)) ||
                                            priv->report_footer->new_page_before)
                                                {
-                                                       if (priv->cur_page > 0 && priv->page_footer != NULL)
+                                                       if (priv->page_header != NULL)
                                                                {
-                                                                       cur_y = priv->page->size->height - priv->page->margin_bottom - priv->page_footer->height;
-                                                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_FOOTER, row - 1);
+                                                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_HEADER, row);
                                                                }
 
                                                        cur_y = priv->page->margin_top;
                                                        xpage = rpt_report_rptprint_new_page (rpt_report, xroot);
 
-                                                       if (priv->page_header != NULL)
+                                                       if (priv->cur_page > 0 && priv->page_footer != NULL)
                                                                {
-                                                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_HEADER, row);
+                                                                       cur_y = priv->page->size->height - priv->page->margin_bottom - priv->page_footer->height;
+                                                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_FOOTER, row - 1);
                                                                }
                                                }
                                        rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_REPORT_FOOTER, row - 1);
@@ -1315,14 +1347,14 @@ xmlDoc
                        cur_y = priv->page->margin_top;
                        xpage = rpt_report_rptprint_new_page (rpt_report, xroot);
 
-                       if (priv->report_header != NULL)
-                               {
-                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_REPORT_HEADER, -1);
-                               }
                        if (priv->page_header != NULL)
                                {
                                        rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_PAGE_HEADER, -1);
                                }
+                       if (priv->report_header != NULL)
+                               {
+                                       rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_REPORT_HEADER, -1);
+                               }
 
                        rpt_report_rptprint_section (rpt_report, xpage, &cur_y, RPTREPORT_SECTION_BODY, -1);
 
index f5636ecb67f472821f560dbacff0c41dd803d5ac..2b728ba9244856b38ededf457ab4c9014c0da3d2 100644 (file)
@@ -78,6 +78,8 @@ void rpt_report_set_database (RptReport *rpt_report,
                               const gchar *connection_string,
                               const gchar *sql);
 
+void rpt_report_set_database_from_datamodel (RptReport *rpt_report, GdaDataModel *data_model);
+
 RptSize *rpt_report_get_page_size (RptReport *rpt_report);
 void rpt_report_set_page_size (RptReport *rpt_report,
                                RptSize size);