[glom] Print Layout: Create Standard Layout: Support multiple pages.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom] Print Layout: Create Standard Layout: Support multiple pages.
- Date: Fri, 30 Sep 2011 14:51:27 +0000 (UTC)
commit 1519d3350c4fa507bc2a90a1fdd22272fc9c189e
Author: Murray Cumming <murrayc murrayc com>
Date: Fri Sep 30 16:50:35 2011 +0200
Print Layout: Create Standard Layout: Support multiple pages.
* glom/mode_design/print_layouts/window_print_layout_edit.[h|cc]:
create_standard(): Support multiple pages, trying to keep out of the margins.
* glom/print_layout/canvas_print_layout.cc: add_layout_group_children():
Do not add canvas items that were not able to handle the layout item, such
as buttons.
ChangeLog | 10 ++
.../print_layouts/window_print_layout_edit.cc | 91 +++++++++++++++-----
.../print_layouts/window_print_layout_edit.h | 6 +-
glom/print_layout/canvas_print_layout.cc | 2 +-
.../canvas/canvas_group_resizable.cc | 6 ++
5 files changed, 92 insertions(+), 23 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 2861093..e1dc2a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2011-09-30 Murray Cumming <murrayc murrayc com>
+ Print Layout: Create Standard Layout: Support multiple pages.
+
+ * glom/mode_design/print_layouts/window_print_layout_edit.[h|cc]:
+ create_standard(): Support multiple pages, trying to keep out of the margins.
+ * glom/print_layout/canvas_print_layout.cc: add_layout_group_children():
+ Do not add canvas items that were not able to handle the layout item, such
+ as buttons.
+
+2011-09-30 Murray Cumming <murrayc murrayc com>
+
Fix the DTD.
* glom/glom_document.dtd: Fix my typo to fix make check.
diff --git a/glom/mode_design/print_layouts/window_print_layout_edit.cc b/glom/mode_design/print_layouts/window_print_layout_edit.cc
index b8eedf3..866c3f9 100644
--- a/glom/mode_design/print_layouts/window_print_layout_edit.cc
+++ b/glom/mode_design/print_layouts/window_print_layout_edit.cc
@@ -934,14 +934,17 @@ void Window_PrintLayout_Edit::on_menu_insert_create_standard()
//Start inside the border, on the next grid line:
double y = 0;
- double y_border = 0;
- const Glib::RefPtr<const Gtk::PageSetup> page_setup = m_canvas.get_page_setup();
- if(page_setup)
- y_border = page_setup->get_top_margin(m_canvas.property_units());
-
- while(y <= y_border)
- y += GRID_GAP;
-
+ double max_y = 0; //ignored
+ guint page_number = 0;
+ get_page_y_start_and_end(page_number, y, max_y);
+
+ Glib::RefPtr<Gtk::PageSetup> page_setup = m_canvas.get_page_setup();
+ if(!page_setup)
+ {
+ std::cerr << G_STRFUNC << ": page_setup was null" << std::endl;
+ return;
+ }
+
double x = 0;
double x_border = 0;
if(page_setup)
@@ -972,13 +975,53 @@ void Window_PrintLayout_Edit::on_menu_insert_create_standard()
if(!group)
continue;
- create_standard(group, m_print_layout->m_layout_group, x, y);
+ create_standard(group, m_print_layout->m_layout_group, x, y, page_number);
}
+ //Add extra pages if necessary:
+ if(page_number >= m_print_layout->get_page_count())
+ {
+ m_print_layout->set_page_count(page_number + 1);
+ }
+
m_canvas.set_print_layout(m_table_name, m_print_layout);
}
-void Window_PrintLayout_Edit::create_standard(const sharedptr<const LayoutGroup>& layout_group, const sharedptr<LayoutGroup>& print_layout_group, double x, double& y)
+void Window_PrintLayout_Edit::get_page_y_start_and_end(guint page_number, double& y1, double& y2)
+{
+ y1 = 0;
+ y2 = 0;
+
+ Glib::RefPtr<Gtk::PageSetup> page_setup = m_canvas.get_page_setup();
+ if(!page_setup)
+ {
+ std::cerr << G_STRFUNC << ": page_setup was null" << std::endl;
+ return;
+ }
+
+ const Gtk::PaperSize paper_size = page_setup->get_paper_size();
+ const Gtk::Unit units = m_canvas.property_units();
+
+ double page_height = 0;
+ if(page_setup->get_orientation() == Gtk::PAGE_ORIENTATION_PORTRAIT) //TODO: Handle the reverse orientations too?
+ page_height = paper_size.get_height(units);
+ else
+ page_height = paper_size.get_width(units);
+
+ //y1:
+ y1 = page_height * (page_number);
+ double y_border = page_setup->get_top_margin(units);
+ while(y1 <= y_border)
+ y1 += GRID_GAP;
+
+ //y2:
+ y2 = page_height * (page_number + 1);
+ y2 -= page_setup->get_bottom_margin(units); //TODO: Handle orientation here and wherever else we use the margin?
+
+ //std::cout << G_STRFUNC << "page_number=" << page_number << ", y1=" << y1 << "y2=" << y2 << std::endl;
+}
+
+void Window_PrintLayout_Edit::create_standard(const sharedptr<const LayoutGroup>& layout_group, const sharedptr<LayoutGroup>& print_layout_group, double x, double& y, guint& page_number)
{
if(!layout_group || !print_layout_group)
{
@@ -992,13 +1035,9 @@ void Window_PrintLayout_Edit::create_standard(const sharedptr<const LayoutGroup>
return;
}
+ double min_y = 0; //ignored;
double max_y = 0;
- const Gtk::PaperSize paper_size = page_setup->get_paper_size();
- const Gtk::Unit units = m_canvas.property_units();
- if(page_setup->get_orientation() == Gtk::PAGE_ORIENTATION_PORTRAIT) //TODO: Handle the reverse orientations too?
- max_y = paper_size.get_height(units);
- else
- max_y = paper_size.get_width(units);
+ get_page_y_start_and_end(page_number, min_y, max_y);
const double height = ITEM_HEIGHT;
const double gap = GRID_GAP;
@@ -1015,8 +1054,13 @@ void Window_PrintLayout_Edit::create_standard(const sharedptr<const LayoutGroup>
print_layout_group->add_item(text);
- if( y >= max_y)
- return;
+ //Start on the next page, if necessary:
+ //TODO: Add a page if necessary:
+ if( y >= max_y )
+ {
+ page_number += 1;
+ get_page_y_start_and_end(page_number, y, max_y);
+ }
}
//Recurse into the group's child items:
@@ -1034,7 +1078,7 @@ void Window_PrintLayout_Edit::create_standard(const sharedptr<const LayoutGroup>
if(group)
{
//Recurse: //TODO: Handle portals separately:
- create_standard(group, print_layout_group, x, y);
+ create_standard(group, print_layout_group, x, y, page_number);
}
else
{
@@ -1063,8 +1107,13 @@ void Window_PrintLayout_Edit::create_standard(const sharedptr<const LayoutGroup>
print_layout_group->add_item(clone);
- if(y >= max_y)
- break;
+ //Start on the next page, if necessary:
+ //TODO: Add a page if necessary:
+ if( y >= max_y )
+ {
+ page_number += 1;
+ get_page_y_start_and_end(page_number, y, max_y);
+ }
}
}
}
diff --git a/glom/mode_design/print_layouts/window_print_layout_edit.h b/glom/mode_design/print_layouts/window_print_layout_edit.h
index 3b5bb36..d3a51e4 100644
--- a/glom/mode_design/print_layouts/window_print_layout_edit.h
+++ b/glom/mode_design/print_layouts/window_print_layout_edit.h
@@ -131,7 +131,11 @@ private:
void canvas_convert_from_drag_pixels(double& x, double& y, bool adjust_for_scrolling = false) const;
void get_dimensions_of_multiple_selected_items(double& x, double& y, double& width, double& height);
- void create_standard(const sharedptr<const LayoutGroup>& layout_group, const sharedptr<LayoutGroup>& print_layout_group, double x, double& y);
+ /* Get the start and end of the page, inside the margins.
+ */
+ void get_page_y_start_and_end(guint page_number, double& y1, double& y2);
+
+ void create_standard(const sharedptr<const LayoutGroup>& layout_group, const sharedptr<LayoutGroup>& print_layout_group, double x, double& y, guint& page_number);
//Box_DB_Table_Definition* m_box;
Glib::ustring m_name_original;
diff --git a/glom/print_layout/canvas_print_layout.cc b/glom/print_layout/canvas_print_layout.cc
index 58c4f47..3b036d4 100644
--- a/glom/print_layout/canvas_print_layout.cc
+++ b/glom/print_layout/canvas_print_layout.cc
@@ -167,7 +167,7 @@ void Canvas_PrintLayout::add_layout_group_children(const sharedptr<LayoutGroup>&
else
{
Glib::RefPtr<CanvasLayoutItem> canvas_item = CanvasLayoutItem::create(item);
- if(canvas_item)
+ if(canvas_item && canvas_item->get_child()) //get_child() returns null if the layout item was not handled.
add_canvas_layout_item(canvas_item);
}
}
diff --git a/glom/utility_widgets/canvas/canvas_group_resizable.cc b/glom/utility_widgets/canvas/canvas_group_resizable.cc
index 9e188de..5175438 100644
--- a/glom/utility_widgets/canvas/canvas_group_resizable.cc
+++ b/glom/utility_widgets/canvas/canvas_group_resizable.cc
@@ -209,6 +209,12 @@ void CanvasGroupResizable::create_outline_group()
void CanvasGroupResizable::set_outline_visible(bool visible)
{
+ if(!m_group_outline)
+ {
+ std::cerr << G_STRFUNC << ": m_group_outline was null." << std::endl;
+ return;
+ }
+
m_group_outline->property_visibility() =
(visible ? Goocanvas::ITEM_VISIBLE : Goocanvas::ITEM_INVISIBLE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]