From 18089d86353f1f06243d465dff715b78607d4206 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Sat, 21 May 2016 21:21:45 -0400 Subject: [PATCH] Added merge printing. --- glabels/ColorNode.cpp | 32 +++++-------- glabels/ColorNode.h | 9 ++-- glabels/LabelModelBoxObject.cpp | 14 ++---- glabels/Merge.cpp | 21 +++++++- glabels/Merge.h | 4 +- glabels/PageRenderer.cpp | 85 ++++++++++++++++++++++++++------- glabels/PageRenderer.h | 19 ++++---- glabels/PrintView.cpp | 6 +-- 8 files changed, 124 insertions(+), 66 deletions(-) diff --git a/glabels/ColorNode.cpp b/glabels/ColorNode.cpp index 839286d..45993bf 100644 --- a/glabels/ColorNode.cpp +++ b/glabels/ColorNode.cpp @@ -1,6 +1,6 @@ /* ColorNode.cpp * - * Copyright (C) 2013 Jim Evins + * Copyright (C) 2013-2016 Jim Evins * * This file is part of gLabels-qt. * @@ -20,6 +20,8 @@ #include "ColorNode.h" +#include "MergeRecord.h" + /// /// Default Constructor @@ -158,40 +160,28 @@ uint32_t ColorNode::rgba( void ) const } -#if TODO -QColor ColorNode::expand( MergeRecord? record ) +QColor ColorNode::color( MergeRecord* record ) const { - if ( fieldFlag ) + if ( mFieldFlag ) { - if ( record == null ) + if ( record == 0 ) { - return QColor.fromRgba(0x00000000); + return mColor; } else { - string? text = record.evalKey( key ); - if ( text != null ) + if ( record->contains( mKey ) ) { - Gdk.Color gdkColor = Gdk.Color(); - if ( Gdk.Color.parse( text, out gdkColor ) ) - { - Color color = Color.from_gdkColor( gdkColor ); - return color; - } - else - { - return Color.fromRgba(0x00000000); - } + return QColor( (*record)[ mKey ] ); } else { - return Color.fromRgba(0x00000000); + return mColor; } } } else { - return color; + return mColor; } } -#endif diff --git a/glabels/ColorNode.h b/glabels/ColorNode.h index 4a74a8b..e046e7a 100644 --- a/glabels/ColorNode.h +++ b/glabels/ColorNode.h @@ -1,6 +1,6 @@ /* ColorNode.h * - * Copyright (C) 2013 Jim Evins + * Copyright (C) 2013-2016 Jim Evins * * This file is part of gLabels-qt. * @@ -25,6 +25,8 @@ #include #include +class MergeRecord; // Forward reference + /// /// Color Node Type @@ -87,10 +89,7 @@ public: ///////////////////////////////// public: uint32_t rgba( void ) const; - -#if TODO - QColor expand( MergeRecord? record ); -#endif + QColor color( MergeRecord* record ) const; ///////////////////////////////// diff --git a/glabels/LabelModelBoxObject.cpp b/glabels/LabelModelBoxObject.cpp index e14a3c6..3c005b8 100644 --- a/glabels/LabelModelBoxObject.cpp +++ b/glabels/LabelModelBoxObject.cpp @@ -68,11 +68,9 @@ LabelModelBoxObject* LabelModelBoxObject::clone() const /// void LabelModelBoxObject::drawShadow( QPainter* painter, bool inEditor, MergeRecord* record ) const { - /// TODO expand colors based on record - - QColor lineColor = mLineColorNode.color(); - QColor fillColor = mFillColorNode.color(); - QColor shadowColor = mShadowColorNode.color(); + QColor lineColor = mLineColorNode.color( record ); + QColor fillColor = mFillColorNode.color( record ); + QColor shadowColor = mShadowColorNode.color( record ); shadowColor.setAlphaF( mShadowOpacity ); @@ -115,10 +113,8 @@ void LabelModelBoxObject::drawShadow( QPainter* painter, bool inEditor, MergeRec /// void LabelModelBoxObject::drawObject( QPainter* painter, bool inEditor, MergeRecord* record ) const { - /// TODO expand colors based on record - - QColor lineColor = mLineColorNode.color(); - QColor fillColor = mFillColorNode.color(); + QColor lineColor = mLineColorNode.color( record ); + QColor fillColor = mFillColorNode.color( record ); painter->setPen( QPen( lineColor, mLineWidth.pt() ) ); painter->setBrush( fillColor ); diff --git a/glabels/Merge.cpp b/glabels/Merge.cpp index 6028855..41fc00e 100644 --- a/glabels/Merge.cpp +++ b/glabels/Merge.cpp @@ -1,6 +1,6 @@ /* Merge.cpp * - * Copyright (C) 2015 Jim Evins + * Copyright (C) 2015-2016 Jim Evins * * This file is part of gLabels-qt. * @@ -165,6 +165,25 @@ void Merge::unselectAll() } +/// +/// Return count of selected records +/// +int Merge::nSelectedRecords() const +{ + int count = 0; + + foreach ( MergeRecord* record, mRecordList ) + { + if ( record->isSelected() ) + { + count++; + } + } + + return count; +} + + /// /// Return list of selected records /// diff --git a/glabels/Merge.h b/glabels/Merge.h index 3c0dc72..f9f2cc8 100644 --- a/glabels/Merge.h +++ b/glabels/Merge.h @@ -1,6 +1,6 @@ /* Merge.h * - * Copyright (C) 2015 Jim Evins + * Copyright (C) 2015-2016 Jim Evins * * This file is part of gLabels-qt. * @@ -73,6 +73,8 @@ public: void setSelected( int i, bool state = true ); void selectAll(); void unselectAll(); + + int nSelectedRecords() const; const QList selectedRecords() const; diff --git a/glabels/PageRenderer.cpp b/glabels/PageRenderer.cpp index e50bba6..d1e0f41 100644 --- a/glabels/PageRenderer.cpp +++ b/glabels/PageRenderer.cpp @@ -1,6 +1,6 @@ /* PageRenderer.cpp * - * Copyright (C) 2013-2014 Jim Evins + * Copyright (C) 2013-2016 Jim Evins * * This file is part of gLabels-qt. * @@ -21,6 +21,8 @@ #include "PageRenderer.h" #include "LabelModel.h" +#include "Merge.h" +#include "MergeNone.h" #include "MergeRecord.h" #include @@ -37,9 +39,9 @@ namespace PageRenderer::PageRenderer() - : mModel(0), mNLabels(0), mStartLabel(0), + : mModel(0), mNCopies(0), mStartLabel(0), mPrintOutlines(false), mPrintCropMarks(false), mPrintReverse(false), - mIPage(0), mNPages(0) + mIsMerge(false), mIPage(0), mNPages(0) { } @@ -47,15 +49,17 @@ PageRenderer::PageRenderer() void PageRenderer::setModel( const LabelModel* model ) { mModel = model; + mMerge = mModel->merge(); mOrigins = mModel->frame()->getOrigins(); mNLabelsPerPage = mModel->frame()->nLabels(); + mIsMerge = ( dynamic_cast(mMerge) == 0 ); updateNPages(); } -void PageRenderer::setNLabels( int nLabels ) +void PageRenderer::setNCopies( int nCopies ) { - mNLabels = nLabels; + mNCopies = nCopies; updateNPages(); } @@ -114,12 +118,17 @@ void PageRenderer::updateNPages() { if ( mModel ) { - /// @TODO merge case - - int lastLabel = mStartLabel + mNLabels; - - mNPages = lastLabel / mNLabelsPerPage; - if ( lastLabel % mNLabelsPerPage ) + if ( mIsMerge ) + { + mLastLabel = mStartLabel + mNCopies*mMerge->nSelectedRecords(); + } + else + { + mLastLabel = mStartLabel + mNCopies; + } + + mNPages = mLastLabel / mNLabelsPerPage; + if ( mLastLabel % mNLabelsPerPage ) { mNPages++; } @@ -147,9 +156,14 @@ void PageRenderer::printPage( QPainter* painter, int iPage ) const { if ( mModel ) { - /// @TODO merge case - - printSimplePage( painter, iPage ); + if ( mIsMerge ) + { + printMergePage( painter, iPage ); + } + else + { + printSimplePage( painter, iPage ); + } } } @@ -164,10 +178,9 @@ void PageRenderer::printSimplePage( QPainter* painter, int iPage ) const iStart = mStartLabel; } - int lastLabel = mStartLabel + mNLabels; - if ( (lastLabel / mNLabelsPerPage) == iPage ) + if ( (mLastLabel / mNLabelsPerPage) == iPage ) { - iEnd = lastLabel % mNLabelsPerPage; + iEnd = mLastLabel % mNLabelsPerPage; } printCropMarks( painter ); @@ -194,7 +207,43 @@ void PageRenderer::printSimplePage( QPainter* painter, int iPage ) const void PageRenderer::printMergePage( QPainter* painter, int iPage ) const { - /// @TODO merge case + int iStart = 0; + int iEnd = mNLabelsPerPage; + + if ( iPage == 0 ) + { + iStart = mStartLabel; + } + + if ( (mLastLabel / mNLabelsPerPage) == iPage ) + { + iEnd = mLastLabel % mNLabelsPerPage; + } + + const QList records = mMerge->selectedRecords(); + int iRecord = (iPage*mNLabelsPerPage + iStart - mStartLabel) % records.size(); + + printCropMarks( painter ); + + for ( int i = iStart; i < iEnd; i++ ) + { + painter->save(); + + painter->translate( mOrigins[i].x().pt(), mOrigins[i].y().pt() ); + + painter->save(); + + clipLabel( painter ); + printLabel( painter, records[iRecord] ); + + painter->restore(); // From before clip + + printOutline( painter ); + + painter->restore(); // From before translation + + iRecord = (iRecord + 1) % records.size(); + } } diff --git a/glabels/PageRenderer.h b/glabels/PageRenderer.h index d41896d..30a946d 100644 --- a/glabels/PageRenderer.h +++ b/glabels/PageRenderer.h @@ -27,12 +27,11 @@ #include #include - -class QPainter; // Forward reference - - -class LabelModel; // Forward reference -class MergeRecord; // Forward reference +// Forward references +class QPainter; +class LabelModel; +class Merge; +class MergeRecord; /// @@ -52,7 +51,7 @@ public: ///////////////////////////////// public: void setModel( const LabelModel* model ); - void setNLabels( int nLabels ); + void setNCopies( int nCopies ); void setStartLabel( int startLabel ); void setPrintOutlines( bool printOutlinesFlag ); void setPrintCropMarks( bool printCropMarksFlag ); @@ -82,13 +81,17 @@ private: ///////////////////////////////// private: const LabelModel* mModel; - int mNLabels; + const Merge* mMerge; + + int mNCopies; int mStartLabel; + int mLastLabel; bool mPrintOutlines; bool mPrintCropMarks; bool mPrintReverse; int mIPage; + bool mIsMerge; int mNPages; int mNLabelsPerPage; diff --git a/glabels/PrintView.cpp b/glabels/PrintView.cpp index 969ef99..a27c172 100644 --- a/glabels/PrintView.cpp +++ b/glabels/PrintView.cpp @@ -77,7 +77,7 @@ void PrintView::onLabelSizeChanged() copiesToSpin->setRange( copiesFromSpin->value(), nLabelsPerPage ); if ( copiesSheetsRadio->isChecked() ) { - mRenderer.setNLabels( copiesSheetsSpin->value()*nLabelsPerPage ); + mRenderer.setNCopies( copiesSheetsSpin->value()*nLabelsPerPage ); mRenderer.setStartLabel( 0 ); copiesFromSpin->setValue( 1 ); copiesToSpin->setValue( nLabelsPerPage ); @@ -113,14 +113,14 @@ void PrintView::onFormChanged() // TODO select between simple and merge if ( copiesSheetsRadio->isChecked() ) { - mRenderer.setNLabels( copiesSheetsSpin->value()*nLabelsPerPage ); + mRenderer.setNCopies( copiesSheetsSpin->value()*nLabelsPerPage ); mRenderer.setStartLabel( 0 ); copiesFromSpin->setValue( 1 ); copiesToSpin->setValue( nLabelsPerPage ); } else { - mRenderer.setNLabels( copiesToSpin->value() - copiesFromSpin->value() + 1 ); + mRenderer.setNCopies( copiesToSpin->value() - copiesFromSpin->value() + 1 ); mRenderer.setStartLabel( copiesFromSpin->value() - 1 ); copiesSheetsSpin->setValue( 1 ); }