diff --git a/glabels/CMakeLists.txt b/glabels/CMakeLists.txt index 5ba9916..928c2a7 100644 --- a/glabels/CMakeLists.txt +++ b/glabels/CMakeLists.txt @@ -86,6 +86,7 @@ set (glabels_qobject_headers MainWindow.h MergeView.h ObjectEditor.h + PageRenderer.h PreferencesDialog.h PrintView.h PropertiesView.h diff --git a/glabels/LabelModel.cpp b/glabels/LabelModel.cpp index cfb3427..336c37f 100644 --- a/glabels/LabelModel.cpp +++ b/glabels/LabelModel.cpp @@ -104,6 +104,8 @@ void LabelModel::restore( const LabelModel *savedModel ) emit nameChanged(); emit sizeChanged(); emit mergeChanged(); + emit mergeSourceChanged(); + emit mergeSelectionChanged(); } @@ -293,9 +295,11 @@ void LabelModel::setMerge( merge::Merge* merge ) mMerge = merge; connect( mMerge, SIGNAL(sourceChanged()), this, SLOT(onMergeSourceChanged()) ); + connect( mMerge, SIGNAL(selectionChanged()), this, SLOT(onMergeSelectionChanged()) ); setModified(); + emit changed(); emit mergeChanged(); emit mergeSourceChanged(); } @@ -431,6 +435,16 @@ void LabelModel::onMergeSourceChanged() } +/// +/// Merge Selection Changed Slot +/// +void LabelModel::onMergeSelectionChanged() +{ + emit changed(); + emit mergeSelectionChanged(); +} + + /// /// Select Object /// diff --git a/glabels/LabelModel.h b/glabels/LabelModel.h index 661a54a..fd2b80b 100644 --- a/glabels/LabelModel.h +++ b/glabels/LabelModel.h @@ -75,6 +75,7 @@ signals: void modifiedChanged(); void mergeChanged(); void mergeSourceChanged(); + void mergeSelectionChanged(); ///////////////////////////////// @@ -211,6 +212,7 @@ private slots: void onObjectChanged(); void onObjectMoved(); void onMergeSourceChanged(); + void onMergeSelectionChanged(); ///////////////////////////////// diff --git a/glabels/PageRenderer.cpp b/glabels/PageRenderer.cpp index ff8eec1..b89d22d 100644 --- a/glabels/PageRenderer.cpp +++ b/glabels/PageRenderer.cpp @@ -49,49 +49,78 @@ PageRenderer::PageRenderer() void PageRenderer::setModel( const LabelModel* model ) { mModel = model; + + connect( mModel, SIGNAL(changed()), this, SLOT(onModelChanged()) ); + + onModelChanged(); +} + + +const LabelModel* PageRenderer::model() const +{ + return mModel; +} + + +void PageRenderer::onModelChanged() +{ mMerge = mModel->merge(); mOrigins = mModel->frame()->getOrigins(); mNLabelsPerPage = mModel->frame()->nLabels(); mIsMerge = ( dynamic_cast(mMerge) == 0 ); updateNPages(); + + emit changed(); } - + void PageRenderer::setNCopies( int nCopies ) { mNCopies = nCopies; updateNPages(); + + emit changed(); } - + void PageRenderer::setStartLabel( int startLabel ) { mStartLabel = startLabel; updateNPages(); + + emit changed(); } void PageRenderer::setPrintOutlines( bool printOutlinesFlag ) { mPrintOutlines = printOutlinesFlag; + + emit changed(); } void PageRenderer::setPrintCropMarks( bool printCropMarksFlag ) { mPrintCropMarks = printCropMarksFlag; + + emit changed(); } void PageRenderer::setPrintReverse( bool printReverseFlag ) { mPrintReverse = printReverseFlag; + + emit changed(); } void PageRenderer::setIPage( int iPage ) { mIPage = iPage; + + emit changed(); } @@ -213,6 +242,7 @@ void PageRenderer::printSimplePage( QPainter* painter, int iPage ) const void PageRenderer::printMergePage( QPainter* painter, int iPage ) const { + int iRecord = 0; int iStart = 0; int iEnd = mNLabelsPerPage; @@ -227,7 +257,10 @@ void PageRenderer::printMergePage( QPainter* painter, int iPage ) const } const QList records = mMerge->selectedRecords(); - int iRecord = (iPage*mNLabelsPerPage + iStart - mStartLabel) % records.size(); + if ( records.size() ) + { + iRecord = (iPage*mNLabelsPerPage + iStart - mStartLabel) % records.size(); + } printCropMarks( painter ); diff --git a/glabels/PageRenderer.h b/glabels/PageRenderer.h index be4680d..2fff48f 100644 --- a/glabels/PageRenderer.h +++ b/glabels/PageRenderer.h @@ -38,8 +38,10 @@ class LabelModel; /// /// PageRenderer Widget /// -class PageRenderer +class PageRenderer : public QObject { + Q_OBJECT + ///////////////////////////////// // Life Cycle ///////////////////////////////// @@ -52,6 +54,7 @@ public: ///////////////////////////////// public: void setModel( const LabelModel* model ); + const LabelModel* model() const; void setNCopies( int nCopies ); void setStartLabel( int startLabel ); void setPrintOutlines( bool printOutlinesFlag ); @@ -65,6 +68,20 @@ public: void printPage( QPainter* painter, int iPage ) const; + ///////////////////////////////// + // Signals + ///////////////////////////////// +signals: + void changed(); + + + ///////////////////////////////// + // Private slots + ///////////////////////////////// +private slots: + void onModelChanged(); + + ///////////////////////////////// // Internal Methods ///////////////////////////////// diff --git a/glabels/Preview.cpp b/glabels/Preview.cpp index d64f46d..283e869 100644 --- a/glabels/Preview.cpp +++ b/glabels/Preview.cpp @@ -65,11 +65,23 @@ Preview::Preview( QWidget *parent ) /// -/// Set model +/// Set renderer /// -void Preview::setModel( const LabelModel* model ) +void Preview::setRenderer( const PageRenderer* renderer ) { - mModel = model; + mRenderer = renderer; + + connect( mRenderer, SIGNAL(changed()), this, SLOT(onRendererChanged()) ); + onRendererChanged(); +} + + +/// +/// Renderer changed handler +/// +void Preview::onRendererChanged() +{ + mModel = mRenderer->model(); clearScene(); @@ -91,15 +103,6 @@ void Preview::setModel( const LabelModel* model ) } -/// -/// Set renderer -/// -void Preview::setRenderer( const PageRenderer* renderer ) -{ - mRenderer = renderer; -} - - /// /// Resize Event Handler /// diff --git a/glabels/Preview.h b/glabels/Preview.h index 686e00a..013e7b0 100644 --- a/glabels/Preview.h +++ b/glabels/Preview.h @@ -46,11 +46,12 @@ public: ///////////////////////////////// - // Properties + // Renderer ///////////////////////////////// public: - void setModel( const LabelModel* model ); void setRenderer( const PageRenderer* renderer ); +private slots: + void onRendererChanged(); ///////////////////////////////////// diff --git a/glabels/PrintView.cpp b/glabels/PrintView.cpp index 1c7af1d..3d65df4 100644 --- a/glabels/PrintView.cpp +++ b/glabels/PrintView.cpp @@ -54,33 +54,35 @@ PrintView::~PrintView() void PrintView::setModel( LabelModel* model ) { mModel = model; + mRenderer.setModel( mModel ); - connect( mModel, SIGNAL(sizeChanged()), this, SLOT(onLabelSizeChanged()) ); - connect( mModel, SIGNAL(changed()), this, SLOT(onLabelChanged()) ); + connect( mModel, SIGNAL(changed()), this, SLOT(onModelChanged()) ); - onLabelSizeChanged(); onFormChanged(); } /// -/// Label size changed handler +/// Model changed handler /// -void PrintView::onLabelSizeChanged() +void PrintView::onModelChanged() { - copiesStartSpin->setRange( 1, mModel->frame()->nLabels() ); - - preview->setModel( mModel ); - mRenderer.setModel( mModel ); + updateView(); } /// -/// Label changed handler +/// Update view /// -void PrintView::onLabelChanged() +void PrintView::updateView() { - preview->update(); + copiesStartSpin->setRange( 1, mModel->frame()->nLabels() ); + + copiesDescriptionLabel->setText( tr("(Will print a total of %1 items on %2 pages.)") + .arg(mRenderer.nItems()).arg(mRenderer.nPages()) ); + + pageSpin->setRange( 1, mRenderer.nPages() ); + nPagesLabel->setText( QString::number( mRenderer.nPages() ) ); } @@ -95,20 +97,15 @@ void PrintView::onFormChanged() mRenderer.setNCopies( copiesSpin->value() ); mRenderer.setStartLabel( copiesStartSpin->value() - 1 ); - copiesDescriptionLabel->setText( tr("(Will print a total of %1 items on %2 pages.)") - .arg(mRenderer.nItems()).arg(mRenderer.nPages()) ); mRenderer.setPrintOutlines( printOutlinesCheck->isChecked() ); mRenderer.setPrintCropMarks( printCropMarksCheck->isChecked() ); mRenderer.setPrintReverse( printReverseCheck->isChecked() ); - pageSpin->setRange( 1, mRenderer.nPages() ); - nPagesLabel->setText( QString::number( mRenderer.nPages() ) ); - mRenderer.setIPage( pageSpin->value() - 1 ); - preview->update(); - + updateView(); + mBlocked = false; } } diff --git a/glabels/PrintView.h b/glabels/PrintView.h index fbbac71..26f5282 100644 --- a/glabels/PrintView.h +++ b/glabels/PrintView.h @@ -56,8 +56,8 @@ public: // Slots ///////////////////////////////// private slots: - void onLabelChanged(); - void onLabelSizeChanged(); + void onModelChanged(); + void updateView(); void onFormChanged(); void onPrintButtonClicked();