[PATCH] Print: add the "1 dive per page" option

Lubomir I. Ivanov neolit123 at gmail.com
Thu Jul 24 09:08:02 PDT 2014


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

With this option there is an exception, which makes the notes
section of the profile table occupy half the page.

Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---
http://trac.hohndel.org/ticket/636#comment:4

---
 display.h              |  3 ++-
 qt-ui/printlayout.cpp  | 14 ++++++++++----
 qt-ui/printlayout.h    |  2 +-
 qt-ui/printoptions.cpp |  9 +++++++++
 qt-ui/printoptions.h   |  1 +
 qt-ui/printoptions.ui  | 13 +++++++++++++
 6 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/display.h b/display.h
index b728b8b..7775dcf 100644
--- a/display.h
+++ b/display.h
@@ -39,7 +39,8 @@ struct options {
 	enum {
 		PRETTY,
 		TABLE,
-		TWOPERPAGE
+		TWOPERPAGE,
+		ONEPERPAGE
 	} type;
 	int print_selected;
 	int color_selected;
diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp
index 6aaff02..4b368db 100644
--- a/qt-ui/printlayout.cpp
+++ b/qt-ui/printlayout.cpp
@@ -68,6 +68,9 @@ void PrintLayout::print()
 	case options::PRETTY:
 		printProfileDives(3, 2);
 		break;
+	case options::ONEPERPAGE:
+		printProfileDives(1, 1);
+		break;
 	case options::TWOPERPAGE:
 		printProfileDives(2, 1);
 		break;
@@ -167,7 +170,8 @@ void PrintLayout::printProfileDives(int divesPerRow, int divesPerColumn)
 	// create a model and table
 	ProfilePrintModel model;
 	model.setFontsize(divesPerColumn == 1 ? 6.5 : 4.5);
-	QPointer<QTableView> table(createProfileTable(&model, scaledW));
+	// if there is only one dive per page row we pass fitNotesToHeight to be almost half the page height
+	QPointer<QTableView> table(createProfileTable(&model, scaledW, (divesPerRow == 1) ? scaledH * 0.45 : 0.0));
 	// profilePrintTableMaxH updates after the table is created
 	const int tableH = profilePrintTableMaxH;
 	// resize the profile widget
@@ -227,7 +231,7 @@ void PrintLayout::printProfileDives(int divesPerRow, int divesPerColumn)
 }
 
 /* we create a table that has a fixed height, but can stretch to fit certain width */
-QTableView *PrintLayout::createProfileTable(ProfilePrintModel *model, const int tableW)
+QTableView *PrintLayout::createProfileTable(ProfilePrintModel *model, const int tableW, const qreal fitNotesToHeight)
 {
 	// setup a new table
 	QTableView *table = new QTableView();
@@ -266,14 +270,16 @@ QTableView *PrintLayout::createProfileTable(ProfilePrintModel *model, const int
 	table->setSpan(6, 0, 1, 5);
 	table->setSpan(7, 0, 5, 5);
 	/* resize row heights to the 'profilePrintRowHeights' indexes.
-	 * profilePrintTableMaxH will then hold the table height. */
+	 * profilePrintTableMaxH will then hold the table height.
+	 * what fitNotesToHeight does it to expand the notes section to fit a special height */
 	int i;
 	profilePrintTableMaxH = 0;
 	for (i = 0; i < rows; i++) {
-		int h = profilePrintRowHeights.at(i);
+		int h = (i == rows - 1 && fitNotesToHeight != 0.0) ? fitNotesToHeight : profilePrintRowHeights.at(i);
 		profilePrintTableMaxH += h;
 		vHeader->resizeSection(i, h);
 	}
+
 	// resize columns. columns widths are percentages from the table width.
 	int accW = 0;
 	for (i = 0; i < cols; i++) {
diff --git a/qt-ui/printlayout.h b/qt-ui/printlayout.h
index 8a90790..efd3159 100644
--- a/qt-ui/printlayout.h
+++ b/qt-ui/printlayout.h
@@ -38,7 +38,7 @@ private:
 	void setup();
 	int estimateTotalDives() const;
 	void printProfileDives(int divesPerRow, int divesPerColumn);
-	QTableView *createProfileTable(ProfilePrintModel *model, const int tableW);
+	QTableView *createProfileTable(ProfilePrintModel *model, const int tableW, const qreal fitNotesToHeight = 0.0);
 	void printTable();
 	void addTablePrintDataRow(TablePrintModel *model, int row, struct dive *dive) const;
 	void addTablePrintHeadingRow(TablePrintModel *model, int row) const;
diff --git a/qt-ui/printoptions.cpp b/qt-ui/printoptions.cpp
index ac5f655..818e89c 100644
--- a/qt-ui/printoptions.cpp
+++ b/qt-ui/printoptions.cpp
@@ -23,6 +23,9 @@ void PrintOptions::setup(struct options *printOpt)
 	case options::TWOPERPAGE:
 		ui.radioTwoDives->setChecked(true);
 		break;
+	case options::ONEPERPAGE:
+		ui.radioOneDive->setChecked(true);
+		break;
 	case options::TABLE:
 		ui.radioTablePrint->setChecked(true);
 		break;
@@ -44,6 +47,7 @@ void PrintOptions::setup(struct options *printOpt)
 
 	connect(ui.radioSixDives, SIGNAL(clicked(bool)), this, SLOT(radioSixDivesClicked(bool)));
 	connect(ui.radioTwoDives, SIGNAL(clicked(bool)), this, SLOT(radioTwoDivesClicked(bool)));
+	connect(ui.radioOneDive, SIGNAL(clicked(bool)), this, SLOT(radioOneDiveClicked(bool)));
 	connect(ui.radioTablePrint, SIGNAL(clicked(bool)), this, SLOT(radioTablePrintClicked(bool)));
 
 	connect(ui.printInColor, SIGNAL(clicked(bool)), this, SLOT(printInColorClicked(bool)));
@@ -65,6 +69,11 @@ void PrintOptions::radioTwoDivesClicked(bool check)
 	printOptions->type = options::TWOPERPAGE;
 }
 
+void PrintOptions::radioOneDiveClicked(bool check)
+{
+	printOptions->type = options::ONEPERPAGE;
+}
+
 void PrintOptions::radioTablePrintClicked(bool check)
 {
 	printOptions->type = options::TABLE;
diff --git a/qt-ui/printoptions.h b/qt-ui/printoptions.h
index 66d3d74..e14ae46 100644
--- a/qt-ui/printoptions.h
+++ b/qt-ui/printoptions.h
@@ -22,6 +22,7 @@ private
 slots:
 	void radioSixDivesClicked(bool check);
 	void radioTwoDivesClicked(bool check);
+	void radioOneDiveClicked(bool check);
 	void radioTablePrintClicked(bool check);
 	void printInColorClicked(bool check);
 	void printSelectedClicked(bool check);
diff --git a/qt-ui/printoptions.ui b/qt-ui/printoptions.ui
index c108315..e7bdbf6 100644
--- a/qt-ui/printoptions.ui
+++ b/qt-ui/printoptions.ui
@@ -134,6 +134,19 @@
       </widget>
      </item>
      <item>
+      <widget class="QRadioButton" name="radioOneDive">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>1 dive per page</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QRadioButton" name="radioTablePrint">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list