diff --git a/python/core/composer/qgscomposerhtml.sip b/python/core/composer/qgscomposerhtml.sip
index 0b5cd741385..ee55603d16d 100644
--- a/python/core/composer/qgscomposerhtml.sip
+++ b/python/core/composer/qgscomposerhtml.sip
@@ -35,6 +35,31 @@ class QgsComposerHtml: QgsComposerMultiFrame
*/
void setUseSmartBreaks( bool useSmartBreaks );
+ /**Sets the maximum distance allowed when calculating where to place page breaks
+ * in the html. This distance is the maximum amount of empty space allowed
+ * at the bottom of a frame after calculating the optimum break location. Setting
+ * a larger value will result in better choice of page break location, but more
+ * wasted space at the bottom of frames. This setting is only effective if
+ * useSmartBreaks is true.
+ * @param maxBreakDistance maximum amount of empty space to leave when calculating
+ * page break locations
+ * @note added in 2.3
+ * @see maxBreakDistance
+ * @see setUseSmartBreaks
+ */
+ void setMaxBreakDistance( double maxBreakDistance );
+
+ /**Returns the maximum distance allowed when calculating where to place page breaks
+ * in the html. This distance is the maximum amount of empty space allowed
+ * at the bottom of a frame after calculating the optimum break location. This setting
+ * is only effective if useSmartBreaks is true.
+ * @returns maximum amount of empty space to leave when calculating page break locations
+ * @note added in 2.3
+ * @see setMaxBreakDistance
+ * @see useSmartBreaks
+ */
+ double maxBreakDistance() const;
+
public slots:
/**Reloads the html source from the url and redraws the item.
diff --git a/src/app/composer/qgscomposerhtmlwidget.cpp b/src/app/composer/qgscomposerhtmlwidget.cpp
index 7caef5ee73e..41ebe5bf2d4 100644
--- a/src/app/composer/qgscomposerhtmlwidget.cpp
+++ b/src/app/composer/qgscomposerhtmlwidget.cpp
@@ -61,6 +61,7 @@ void QgsComposerHtmlWidget::blockSignals( bool block )
mFileToolButton->blockSignals( block );
mResizeModeComboBox->blockSignals( block );
mUseSmartBreaksCheckBox->blockSignals( block );
+ mMaxDistanceSpinBox->blockSignals( block );
}
void QgsComposerHtmlWidget::on_mUrlLineEdit_editingFinished()
@@ -117,7 +118,7 @@ void QgsComposerHtmlWidget::on_mResizeModeComboBox_currentIndexChanged( int inde
mAddFramePushButton->setEnabled( mHtml->resizeMode() == QgsComposerMultiFrame::UseExistingFrames );
}
-void QgsComposerHtmlWidget::on_mUseSmartBreaksCheckBox_stateChanged( int state )
+void QgsComposerHtmlWidget::on_mUseSmartBreaksCheckBox_toggled( bool checked )
{
if ( !mHtml )
{
@@ -129,12 +130,22 @@ void QgsComposerHtmlWidget::on_mUseSmartBreaksCheckBox_stateChanged( int state )
{
blockSignals( true );
composition->beginMultiFrameCommand( mHtml, tr( "Use smart breaks changed" ) );
- mHtml->setUseSmartBreaks( state );
+ mHtml->setUseSmartBreaks( checked );
composition->endMultiFrameCommand();
blockSignals( false );
}
}
+void QgsComposerHtmlWidget::on_mMaxDistanceSpinBox_valueChanged( double val )
+{
+ if ( !mHtml )
+ {
+ return;
+ }
+
+ mHtml->setMaxBreakDistance( val );
+}
+
void QgsComposerHtmlWidget::on_mReloadPushButton_clicked()
{
if ( !mHtml )
@@ -179,6 +190,7 @@ void QgsComposerHtmlWidget::setGuiElementValues()
mUrlLineEdit->setText( mHtml->url().toString() );
mResizeModeComboBox->setCurrentIndex( mResizeModeComboBox->findData( mHtml->resizeMode() ) );
mUseSmartBreaksCheckBox->setChecked( mHtml->useSmartBreaks() );
+ mMaxDistanceSpinBox->setValue( mHtml->maxBreakDistance() );
mAddFramePushButton->setEnabled( mHtml->resizeMode() == QgsComposerMultiFrame::UseExistingFrames );
blockSignals( false );
diff --git a/src/app/composer/qgscomposerhtmlwidget.h b/src/app/composer/qgscomposerhtmlwidget.h
index f2b1e36fe44..3d8d2f97878 100644
--- a/src/app/composer/qgscomposerhtmlwidget.h
+++ b/src/app/composer/qgscomposerhtmlwidget.h
@@ -31,7 +31,9 @@ class QgsComposerHtmlWidget: public QWidget, private Ui::QgsComposerHtmlWidgetBa
void on_mUrlLineEdit_editingFinished();
void on_mFileToolButton_clicked();
void on_mResizeModeComboBox_currentIndexChanged( int index );
- void on_mUseSmartBreaksCheckBox_stateChanged( int state );
+ void on_mUseSmartBreaksCheckBox_toggled( bool checked );
+ void on_mMaxDistanceSpinBox_valueChanged( double val );
+
void on_mReloadPushButton_clicked();
void on_mAddFramePushButton_clicked();
diff --git a/src/core/composer/qgscomposerhtml.cpp b/src/core/composer/qgscomposerhtml.cpp
index 0087668ea60..13b24e14e8d 100644
--- a/src/core/composer/qgscomposerhtml.cpp
+++ b/src/core/composer/qgscomposerhtml.cpp
@@ -30,7 +30,8 @@ QgsComposerHtml::QgsComposerHtml( QgsComposition* c, bool createUndoCommands ):
mLoaded( false ),
mHtmlUnitsToMM( 1.0 ),
mRenderedPage( 0 ),
- mUseSmartBreaks( true )
+ mUseSmartBreaks( true ),
+ mMaxBreakDistance( 10 )
{
mHtmlUnitsToMM = htmlUnitsToMM();
mWebPage = new QWebPage();
@@ -48,7 +49,8 @@ QgsComposerHtml::QgsComposerHtml(): QgsComposerMultiFrame( 0, false ),
mLoaded( false ),
mHtmlUnitsToMM( 1.0 ),
mRenderedPage( 0 ),
- mUseSmartBreaks( true )
+ mUseSmartBreaks( true ),
+ mMaxBreakDistance( 10 )
{
}
@@ -191,7 +193,7 @@ double QgsComposerHtml::findNearbyPageBreak( double yPos )
return yPos;
}
- int maxSearchDistance = 100;
+ int maxSearchDistance = mMaxBreakDistance * htmlUnitsToMM();
//loop through all lines just before ideal break location, up to max distance
//of maxSearchDistance
@@ -256,6 +258,14 @@ void QgsComposerHtml::setUseSmartBreaks( bool useSmartBreaks )
{
mUseSmartBreaks = useSmartBreaks;
recalculateFrameSizes();
+ emit changed();
+}
+
+void QgsComposerHtml::setMaxBreakDistance( double maxBreakDistance )
+{
+ mMaxBreakDistance = maxBreakDistance;
+ recalculateFrameSizes();
+ emit changed();
}
bool QgsComposerHtml::writeXML( QDomElement& elem, QDomDocument & doc, bool ignoreFrames ) const
@@ -263,6 +273,7 @@ bool QgsComposerHtml::writeXML( QDomElement& elem, QDomDocument & doc, bool igno
QDomElement htmlElem = doc.createElement( "ComposerHtml" );
htmlElem.setAttribute( "url", mUrl.toString() );
htmlElem.setAttribute( "useSmartBreaks", mUseSmartBreaks ? "true" : "false" );
+ htmlElem.setAttribute( "maxBreakDistance", QString::number( mMaxBreakDistance ) );
bool state = _writeXML( htmlElem, doc, ignoreFrames );
elem.appendChild( htmlElem );
@@ -280,6 +291,7 @@ bool QgsComposerHtml::readXML( const QDomElement& itemElem, const QDomDocument&
}
mUseSmartBreaks = itemElem.attribute( "useSmartBreaks", "true" ) == "true" ? true : false;
+ mMaxBreakDistance = itemElem.attribute( "maxBreakDistance", "10" ).toDouble();
//finally load the set url
QString urlString = itemElem.attribute( "url" );
diff --git a/src/core/composer/qgscomposerhtml.h b/src/core/composer/qgscomposerhtml.h
index 2c29cfeca82..ae60dcabdd9 100644
--- a/src/core/composer/qgscomposerhtml.h
+++ b/src/core/composer/qgscomposerhtml.h
@@ -59,6 +59,31 @@ class CORE_EXPORT QgsComposerHtml: public QgsComposerMultiFrame
*/
void setUseSmartBreaks( bool useSmartBreaks );
+ /**Sets the maximum distance allowed when calculating where to place page breaks
+ * in the html. This distance is the maximum amount of empty space allowed
+ * at the bottom of a frame after calculating the optimum break location. Setting
+ * a larger value will result in better choice of page break location, but more
+ * wasted space at the bottom of frames. This setting is only effective if
+ * useSmartBreaks is true.
+ * @param maxBreakDistance maximum amount of empty space to leave when calculating
+ * page break locations
+ * @note added in 2.3
+ * @see maxBreakDistance
+ * @see setUseSmartBreaks
+ */
+ void setMaxBreakDistance( double maxBreakDistance );
+
+ /**Returns the maximum distance allowed when calculating where to place page breaks
+ * in the html. This distance is the maximum amount of empty space allowed
+ * at the bottom of a frame after calculating the optimum break location. This setting
+ * is only effective if useSmartBreaks is true.
+ * @returns maximum amount of empty space to leave when calculating page break locations
+ * @note added in 2.3
+ * @see setMaxBreakDistance
+ * @see useSmartBreaks
+ */
+ double maxBreakDistance() const { return mMaxBreakDistance; }
+
public slots:
/**Reloads the html source from the url and redraws the item.
@@ -78,6 +103,7 @@ class CORE_EXPORT QgsComposerHtml: public QgsComposerMultiFrame
double mHtmlUnitsToMM;
QImage* mRenderedPage;
bool mUseSmartBreaks;
+ double mMaxBreakDistance;
double htmlUnitsToMM(); //calculate scale factor
diff --git a/src/ui/qgscomposerhtmlwidgetbase.ui b/src/ui/qgscomposerhtmlwidgetbase.ui
index ea0e69bdda3..61c7afe5a1f 100644
--- a/src/ui/qgscomposerhtmlwidgetbase.ui
+++ b/src/ui/qgscomposerhtmlwidgetbase.ui
@@ -7,7 +7,7 @@
0
0
409
- 370
+ 383
@@ -47,7 +47,7 @@
0
0
407
- 347
+ 360
@@ -107,17 +107,51 @@
-
- -
+
-
Add Frame
- -
-
+
+
+
+ -
+
+
+ Use smart page breaks
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
-
+
- Use smart page breaks
+ Maximum distance
+
+
+
+ -
+
+
+ mm
+
+
+ 1
+
+
+ 1000.000000000000000
+
+
+ 1.000000000000000