Implement continuous tape labels and path-based label shapes.

- Added "roll" as a special paper id
- Added roll_width attribute to draw tape in previews
- Updated Brother QL-500/* label templates
- Preserve print dialog settings between print jobs.
- Added path based labels for arbitrary shaped labels.
- Fleshed out implementation of continuous labels.
This commit is contained in:
Jim Evins
2018-08-11 14:05:26 -04:00
parent b9a1f2e150
commit 467ca9fc62
135 changed files with 41934 additions and 13681 deletions
+3
View File
@@ -31,6 +31,7 @@ set (glabels_sources
PropertiesView.cpp
Preview.cpp
PreviewOverlayItem.cpp
RollTemplatePath.cpp
SelectProductDialog.cpp
SimplePreview.cpp
StartupView.cpp
@@ -85,6 +86,8 @@ set (glabels_forms
ui/TemplateDesignerRoundPage.ui
ui/TemplateDesignerEllipsePage.ui
ui/TemplateDesignerCdPage.ui
ui/TemplateDesignerPathPage.ui
ui/TemplateDesignerContinuousPage.ui
ui/TemplateDesignerNLayoutsPage.ui
ui/TemplateDesignerOneLayoutPage.ui
ui/TemplateDesignerTwoLayoutPage.ui
+3 -2
View File
@@ -56,12 +56,13 @@ namespace glabels
{
auto* model = new model::Model();
model->setTmplate( tmplate );
model->clearModified();
// Intelligently decide to rotate label by default
const model::Frame* frame = tmplate->frames().first();
model->setRotate( frame->h() > frame->w() );
model->clearModified();
// Either apply to current window or open a new one
if ( window->isEmpty() )
{
+1 -1
View File
@@ -1143,7 +1143,7 @@ namespace glabels
foreach( model::Markup* markup, mModel->frame()->markups() )
{
painter->drawPath( markup->path() );
painter->drawPath( markup->path( mModel->frame() ) );
}
painter->restore();
+23 -4
View File
@@ -20,6 +20,8 @@
#include "MiniPreviewPixmap.h"
#include "RollTemplatePath.h"
#include "model/Template.h"
@@ -63,16 +65,25 @@ namespace glabels
painter.setBackgroundMode( Qt::TransparentMode );
painter.setRenderHint( QPainter::Antialiasing, true );
// For "Roll" templates, allow extra room for tape width and continuation break lines
model::Distance drawWidth = tmplate->pageWidth();
model::Distance drawHeight = tmplate->pageHeight();
if ( tmplate->isRoll() )
{
drawWidth = tmplate->rollWidth();
drawHeight *= 1.2;
}
double w = width - 1;
double h = height - 1;
double scale;
if ( (w/tmplate->pageWidth().pt()) > (h/tmplate->pageHeight().pt()) )
if ( (w/drawWidth.pt()) > (h/drawHeight.pt()) )
{
scale = h / tmplate->pageHeight().pt();
scale = h / drawHeight.pt();
}
else
{
scale = w / tmplate->pageWidth().pt();
scale = w / drawWidth.pt();
}
painter.scale( scale, scale );
@@ -95,7 +106,15 @@ namespace glabels
painter.setBrush( brush );
painter.setPen( pen );
painter.drawRect( 0, 0, tmplate->pageWidth().pt(), tmplate->pageHeight().pt() );
if ( !tmplate->isRoll() )
{
painter.drawRect( 0, 0, tmplate->pageWidth().pt(), tmplate->pageHeight().pt() );
}
else
{
painter.drawPath( RollTemplatePath( tmplate ) );
}
painter.restore();
}
+32 -25
View File
@@ -21,6 +21,7 @@
#include "Preview.h"
#include "PreviewOverlayItem.h"
#include "RollTemplatePath.h"
#include <QGraphicsDropShadowEffect>
#include <QGraphicsRectItem>
@@ -35,7 +36,7 @@ namespace glabels
//
namespace
{
const QColor paperColor( 255, 255, 255 );
const QColor paperColor( 242, 242, 242 );
const QColor paperOutlineColor( 0, 0, 0 );
const double paperOutlineWidthPixels = 1;
@@ -44,7 +45,7 @@ namespace glabels
const double shadowRadiusPixels = 12;
const QColor labelColor( 255, 255, 255 );
const QColor labelOutlineColor( 215, 215, 215 );
const QColor labelOutlineColor( 192, 192, 192 );
const double labelOutlineWidthPixels = 1;
}
@@ -85,20 +86,31 @@ namespace glabels
{
mModel = mRenderer->model();
clearScene();
mScene->clear();
if ( mModel != nullptr )
{
auto tmplate = mModel->tmplate();
// For "Roll" templates, allow extra room to draw continuation break lines.
model::Distance drawHeight = mModel->tmplate()->pageHeight();
model::Distance drawOffset = 0;
if ( tmplate->isRoll() )
{
drawHeight = 1.2 * tmplate->pageHeight();
drawOffset = 0.1 * tmplate->pageHeight();
}
// Set scene up with a 5% margin around paper
model::Distance x = -0.05 * mModel->tmplate()->pageWidth();
model::Distance y = -0.05 * mModel->tmplate()->pageHeight();
model::Distance w = 1.10 * mModel->tmplate()->pageWidth();
model::Distance h = 1.10 * mModel->tmplate()->pageHeight();
model::Distance x = -0.05 * tmplate->pageWidth();
model::Distance y = -0.05 * drawHeight - drawOffset;
model::Distance w = 1.10 * tmplate->pageWidth();
model::Distance h = 1.10 * drawHeight;
mScene->setSceneRect( x.pt(), y.pt(), w.pt(), h.pt() );
fitInView( mScene->sceneRect(), Qt::KeepAspectRatio );
drawPaper( mModel->tmplate()->pageWidth(), mModel->tmplate()->pageHeight() );
drawPaper();
drawLabels();
drawPreviewOverlay();
}
@@ -114,23 +126,10 @@ namespace glabels
}
///
/// Clear View
///
void Preview::clearScene()
{
foreach ( QGraphicsItem *item, mScene->items() )
{
mScene->removeItem( item );
delete item;
}
}
///
/// Draw Paper
///
void Preview::drawPaper( const model::Distance& pw, const model::Distance& ph )
void Preview::drawPaper()
{
auto *shadowEffect = new QGraphicsDropShadowEffect();
shadowEffect->setColor( shadowColor );
@@ -142,7 +141,16 @@ namespace glabels
pen.setCosmetic( true );
pen.setWidthF( paperOutlineWidthPixels );
auto *pageItem = new QGraphicsRectItem( 0, 0, pw.pt(), ph.pt() );
QAbstractGraphicsShapeItem* pageItem;
auto tmplate = mModel->tmplate();
if ( !tmplate->isRoll() )
{
pageItem = new QGraphicsRectItem( 0, 0, tmplate->pageWidth().pt(), tmplate->pageHeight().pt() );
}
else
{
pageItem = new QGraphicsPathItem( RollTemplatePath( tmplate ) );
}
pageItem->setBrush( brush );
pageItem->setPen( pen );
pageItem->setGraphicsEffect( shadowEffect );
@@ -170,9 +178,8 @@ namespace glabels
///
void Preview::drawLabel( const model::Distance& x, const model::Distance& y, const QPainterPath& path )
{
QBrush brush( Qt::NoBrush );
QBrush brush( labelColor );
QPen pen( labelOutlineColor );
pen.setStyle( Qt::DotLine );
pen.setCosmetic( true );
pen.setWidthF( labelOutlineWidthPixels );
+1 -2
View File
@@ -68,8 +68,7 @@ namespace glabels
// Internal Methods
/////////////////////////////////
private:
void clearScene();
void drawPaper( const model::Distance& pw, const model::Distance& ph );
void drawPaper();
void drawLabels();
void drawLabel( const model::Distance& x, const model::Distance& y, const QPainterPath& path );
+9 -10
View File
@@ -40,6 +40,14 @@ namespace glabels
preview->setRenderer( &mRenderer );
mPrinter = new QPrinter( QPrinter::HighResolution );
mPrinter->setColorMode( QPrinter::Color );
mPrintDialog = new QPrintDialog( mPrinter, this );
mPrintDialog->setOption( QAbstractPrintDialog::PrintToFile, true );
mPrintDialog->setOption( QAbstractPrintDialog::PrintSelection, false );
mPrintDialog->setOption( QAbstractPrintDialog::PrintPageRange, false );
mPrintDialog->setOption( QAbstractPrintDialog::PrintShowPageSize, true );
mPrintDialog->setOption( QAbstractPrintDialog::PrintCollateCopies, false );
mPrintDialog->setOption( QAbstractPrintDialog::PrintCurrentPage, false );
}
@@ -120,16 +128,7 @@ namespace glabels
///
void PrintView::onPrintButtonClicked()
{
QPrintDialog printDialog( mPrinter, this );
printDialog.setOption( QAbstractPrintDialog::PrintToFile, true );
printDialog.setOption( QAbstractPrintDialog::PrintSelection, false );
printDialog.setOption( QAbstractPrintDialog::PrintPageRange, false );
printDialog.setOption( QAbstractPrintDialog::PrintShowPageSize, true );
printDialog.setOption( QAbstractPrintDialog::PrintCollateCopies, false );
printDialog.setOption( QAbstractPrintDialog::PrintCurrentPage, false );
if ( printDialog.exec() == QDialog::Accepted )
if ( mPrintDialog->exec() == QDialog::Accepted )
{
mRenderer.print( mPrinter );
}
+4 -1
View File
@@ -28,6 +28,7 @@
#include "model/PageRenderer.h"
#include <QPrinter>
#include <QPrintDialog>
namespace glabels
@@ -73,7 +74,9 @@ namespace glabels
QPrinter* mPrinter;
model::PageRenderer mRenderer;
bool mBlocked;
QPrintDialog* mPrintDialog;
bool mBlocked;
};
+33
View File
@@ -24,6 +24,7 @@
#include "UndoRedoModel.h"
#include "model/Db.h"
#include "model/FrameContinuous.h"
#include "model/Settings.h"
#include <QStyledItemDelegate>
@@ -171,6 +172,38 @@ namespace glabels
orientationCombo->setCurrentIndex( isRotated ? 0 : 1 );
}
mOldOrientationIndex = orientationCombo->currentIndex();
if ( auto* continuousFrame = dynamic_cast<const model::FrameContinuous*>( frame ) )
{
if (!mInLengthSpinChanged)
{
const QSignalBlocker blocker( lengthSpin );
lengthSpin->setSuffix( " " + mUnits.toTrName() );
lengthSpin->setDecimals( mUnits.resolutionDigits() );
lengthSpin->setSingleStep( mUnits.resolution() );
lengthSpin->setMinimum( continuousFrame->hMin().inUnits( mUnits ) );
lengthSpin->setMaximum( continuousFrame->hMax().inUnits( mUnits ) );
lengthSpin->setValue( continuousFrame->h().inUnits( mUnits ) );
}
parametersGroupBox->setVisible( true );
}
else
{
parametersGroupBox->setVisible( false );
}
}
///
/// Length spin changed handler
///
void PropertiesView::onLengthSpinChanged()
{
mInLengthSpinChanged = true;
mModel->setH( model::Distance( lengthSpin->value(), mUnits ) );
mInLengthSpinChanged = false;
}
+3
View File
@@ -63,6 +63,7 @@ namespace glabels
private slots:
void onSettingsChanged();
void onLabelSizeChanged();
void onLengthSpinChanged();
void onOrientationActivated();
void onChangeProductButtonClicked();
@@ -71,6 +72,8 @@ namespace glabels
// Private Data
/////////////////////////////////
private:
bool mInLengthSpinChanged{ false };
model::Model* mModel;
UndoRedoModel* mUndoRedoModel;
model::Units mUnits;
+71
View File
@@ -0,0 +1,71 @@
/* RollTemplatePath.cpp
*
* Copyright (C) 2014 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#include "RollTemplatePath.h"
#include <QtDebug>
namespace glabels
{
///
/// Constructor
///
RollTemplatePath::RollTemplatePath( const model::Template* tmplate )
{
if ( !tmplate->isRoll() )
{
qWarning() << "Not a \"Roll\" template type.";
}
model::Distance x0 = (tmplate->pageWidth() - tmplate->rollWidth()) / 2.0;
model::Distance w = tmplate->rollWidth();
model::Distance h = tmplate->pageHeight();
model::Distance c = 0.07*h;
model::Distance b = 0.03*h;
const int nx = 18;
// Upper break line
moveTo( x0.pt(), -c.pt() );
for ( int ix = 1; ix <= nx; ix++ )
{
model::Distance x = ix * (w/double(nx)) + x0;
double a = ix * (2*M_PI/double(nx));
lineTo( x.pt(), b.pt()*sin(a) - c.pt() );
}
// Lower break line
lineTo( (x0+w).pt(), (h+c).pt() );
for ( int ix = nx-1; ix >= 0; ix-- )
{
model::Distance x = ix * (w/double(nx)) + x0;
double a = ix * (2*M_PI/double(nx));
lineTo( x.pt(), b.pt()*sin(a) + h.pt() + c.pt() );
}
// Close path
closeSubpath();
}
} // namespace glabels
+49
View File
@@ -0,0 +1,49 @@
/* RollTemplatePath.h
*
* Copyright (C) 2018 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef RollTemplatePath_h
#define RollTemplatePath_h
#include "model/Template.h"
#include <QPainterPath>
namespace glabels
{
///
/// Painter path for "Roll" templates
///
class RollTemplatePath : public QPainterPath
{
/////////////////////////////////
// Life Cycle
/////////////////////////////////
public:
RollTemplatePath( const model::Template* tmplate );
};
}
#endif // RollTemplatePath_h
+27 -20
View File
@@ -20,6 +20,9 @@
#include "SimplePreview.h"
#include "RollTemplatePath.h"
#include <QGraphicsPathItem>
#include <QGraphicsRectItem>
#include <QGraphicsDropShadowEffect>
#include <QtDebug>
@@ -33,7 +36,7 @@ namespace glabels
//
namespace
{
const QColor paperColor( 255, 255, 255 );
const QColor paperColor( 242, 242, 242 );
const QColor paperOutlineColor( 0, 0, 0 );
const double paperOutlineWidthPixels = 1;
@@ -105,43 +108,39 @@ namespace glabels
///
void SimplePreview::update()
{
clearScene();
mScene->clear();
if ( mTmplate != nullptr )
{
// For "Roll" templates, allow extra room to draw continuation break lines.
model::Distance drawHeight = mTmplate->pageHeight();
model::Distance drawOffset = 0;
if ( mTmplate->isRoll() )
{
drawHeight = 1.2 * mTmplate->pageHeight();
drawOffset = 0.1 * mTmplate->pageHeight();
}
// Set scene up with a 5% margin around paper
model::Distance x = -0.05 * mTmplate->pageWidth();
model::Distance y = -0.05 * mTmplate->pageHeight();
model::Distance y = -0.05 * drawHeight - drawOffset;
model::Distance w = 1.10 * mTmplate->pageWidth();
model::Distance h = 1.10 * mTmplate->pageHeight();
model::Distance h = 1.10 * drawHeight;
mScene->setSceneRect( x.pt(), y.pt(), w.pt(), h.pt() );
fitInView( mScene->sceneRect(), Qt::KeepAspectRatio );
drawPaper( mTmplate->pageWidth(), mTmplate->pageHeight() );
drawPaper();
drawLabels();
drawArrow();
}
}
///
/// Clear View
///
void SimplePreview::clearScene()
{
foreach ( QGraphicsItem *item, mScene->items() )
{
mScene->removeItem( item );
delete item;
}
}
///
/// Draw Paper
///
void SimplePreview::drawPaper( const model::Distance& pw, const model::Distance& ph )
void SimplePreview::drawPaper()
{
auto *shadowEffect = new QGraphicsDropShadowEffect();
shadowEffect->setColor( shadowColor );
@@ -153,7 +152,15 @@ namespace glabels
pen.setCosmetic( true );
pen.setWidthF( paperOutlineWidthPixels );
auto *pageItem = new QGraphicsRectItem( 0, 0, pw.pt(), ph.pt() );
QAbstractGraphicsShapeItem* pageItem;
if ( !mTmplate->isRoll() )
{
pageItem = new QGraphicsRectItem( 0, 0, mTmplate->pageWidth().pt(), mTmplate->pageHeight().pt() );
}
else
{
pageItem = new QGraphicsPathItem( RollTemplatePath( mTmplate ) );
}
pageItem->setBrush( brush );
pageItem->setPen( pen );
pageItem->setGraphicsEffect( shadowEffect );
+1 -2
View File
@@ -67,8 +67,7 @@ namespace glabels
/////////////////////////////////
private:
void update();
void clearScene();
void drawPaper( const model::Distance& pw, const model::Distance& ph );
void drawPaper();
void drawLabels();
void drawLabel( const model::Distance& x, const model::Distance& y, const QPainterPath& path );
void drawArrow();
+226 -78
View File
@@ -24,7 +24,9 @@
#include "model/Db.h"
#include "model/Distance.h"
#include "model/FrameCd.h"
#include "model/FrameContinuous.h"
#include "model/FrameEllipse.h"
#include "model/FramePath.h"
#include "model/FrameRect.h"
#include "model/FrameRound.h"
#include "model/Markup.h"
@@ -60,6 +62,8 @@ namespace glabels
RoundPageId,
EllipsePageId,
CdPageId,
PathPageId,
ContinuousPageId,
NLayoutsPageId,
OneLayoutPageId,
TwoLayoutPageId,
@@ -114,18 +118,20 @@ namespace glabels
setOption( QWizard::IndependentPages, false );
setOption( QWizard::NoBackButtonOnStartPage, true );
setPage( IntroPageId, new TemplateDesignerIntroPage() );
setPage( NamePageId, new TemplateDesignerNamePage() );
setPage( PageSizePageId, new TemplateDesignerPageSizePage() );
setPage( ShapePageId, new TemplateDesignerShapePage() );
setPage( RectPageId, new TemplateDesignerRectPage() );
setPage( RoundPageId, new TemplateDesignerRoundPage() );
setPage( EllipsePageId, new TemplateDesignerEllipsePage() );
setPage( CdPageId, new TemplateDesignerCdPage() );
setPage( NLayoutsPageId, new TemplateDesignerNLayoutsPage() );
setPage( OneLayoutPageId, new TemplateDesignerOneLayoutPage() );
setPage( TwoLayoutPageId, new TemplateDesignerTwoLayoutPage() );
setPage( ApplyPageId, new TemplateDesignerApplyPage() );
setPage( IntroPageId, new TemplateDesignerIntroPage() );
setPage( NamePageId, new TemplateDesignerNamePage() );
setPage( PageSizePageId, new TemplateDesignerPageSizePage() );
setPage( ShapePageId, new TemplateDesignerShapePage() );
setPage( RectPageId, new TemplateDesignerRectPage() );
setPage( RoundPageId, new TemplateDesignerRoundPage() );
setPage( EllipsePageId, new TemplateDesignerEllipsePage() );
setPage( CdPageId, new TemplateDesignerCdPage() );
setPage( PathPageId, new TemplateDesignerPathPage() );
setPage( ContinuousPageId, new TemplateDesignerContinuousPage() );
setPage( NLayoutsPageId, new TemplateDesignerNLayoutsPage() );
setPage( OneLayoutPageId, new TemplateDesignerOneLayoutPage() );
setPage( TwoLayoutPageId, new TemplateDesignerTwoLayoutPage() );
setPage( ApplyPageId, new TemplateDesignerApplyPage() );
}
@@ -136,16 +142,27 @@ namespace glabels
{
switch (currentId())
{
case IntroPageId:
return NamePageId;
if ( mIsTemplatePathBased )
{
return PathPageId;
}
else if ( mIsTemplateContinuousBased )
{
return ContinuousPageId;
}
else
{
return NamePageId;
}
case NamePageId:
return PageSizePageId;
case PageSizePageId:
return ShapePageId;
case ShapePageId:
if ( field( "shape.rect" ).toBool() )
{
@@ -163,19 +180,53 @@ namespace glabels
{
return CdPageId;
}
case RectPageId:
return NLayoutsPageId;
if ( field( "pageSize.pageSize" ) != tr("Roll") )
{
return NLayoutsPageId;
}
else
{
return OneLayoutPageId;
}
case RoundPageId:
return NLayoutsPageId;
if ( field( "pageSize.pageSize" ) != tr("Roll") )
{
return NLayoutsPageId;
}
else
{
return OneLayoutPageId;
}
case EllipsePageId:
return NLayoutsPageId;
if ( field( "pageSize.pageSize" ) != tr("Roll") )
{
return NLayoutsPageId;
}
else
{
return OneLayoutPageId;
}
case CdPageId:
return NLayoutsPageId;
if ( field( "pageSize.pageSize" ) != tr("Roll") )
{
return NLayoutsPageId;
}
else
{
return OneLayoutPageId;
}
case PathPageId:
return IntroPageId;
case ContinuousPageId:
return IntroPageId;
case NLayoutsPageId:
if ( field( "nLayouts.one" ).toBool() )
{
@@ -188,10 +239,10 @@ namespace glabels
case OneLayoutPageId:
return ApplyPageId;
case TwoLayoutPageId:
return ApplyPageId;
case ApplyPageId:
default:
return -1;
@@ -326,8 +377,9 @@ namespace glabels
QString paperId = model::Db::lookupPaperIdFromName( field( "pageSize.pageSize" ).toString() );
model::Distance pageW( field( "pageSize.w" ).toDouble(), units );
model::Distance pageH( field( "pageSize.h" ).toDouble(), units );
model::Distance pageRollW( field( "pageSize.rollW" ).toDouble(), units );
auto t = new model::Template( brand, part, description, paperId, pageW, pageH, true );
auto t = new model::Template( brand, part, description, paperId, pageW, pageH, pageRollW, true );
model::Frame* frame;
if ( field( "shape.rect" ).toBool() )
@@ -337,10 +389,11 @@ namespace glabels
model::Distance r( field( "rect.r" ).toDouble(), units );
model::Distance xWaste( field( "rect.xWaste" ).toDouble(), units );
model::Distance yWaste( field( "rect.yWaste" ).toDouble(), units );
model::Distance margin( field( "rect.margin" ).toDouble(), units );
model::Distance xMargin( field( "rect.xMargin" ).toDouble(), units );
model::Distance yMargin( field( "rect.yMargin" ).toDouble(), units );
frame = new model::FrameRect( w, h, r, xWaste, yWaste );
frame->addMarkup( new model::MarkupMargin( frame, margin ) );
frame->addMarkup( new model::MarkupMargin( xMargin, yMargin ) );
}
else if ( field( "shape.round" ).toBool() )
{
@@ -349,7 +402,7 @@ namespace glabels
model::Distance margin( field( "round.margin" ).toDouble(), units );
frame = new model::FrameRound( r, waste );
frame->addMarkup( new model::MarkupMargin( frame, margin ) );
frame->addMarkup( new model::MarkupMargin( margin ) );
}
else if ( field( "shape.ellipse" ).toBool() )
{
@@ -359,7 +412,7 @@ namespace glabels
model::Distance margin( field( "ellipse.margin" ).toDouble(), units );
frame = new model::FrameEllipse( w, h, waste );
frame->addMarkup( new model::MarkupMargin( frame, margin ) );
frame->addMarkup( new model::MarkupMargin( margin ) );
}
else
{
@@ -371,7 +424,7 @@ namespace glabels
model::Distance margin( field( "cd.margin" ).toDouble(), units );
frame = new model::FrameCd( r1, r2, xClip, yClip, waste );
frame->addMarkup( new model::MarkupMargin( frame, margin ) );
frame->addMarkup( new model::MarkupMargin( margin ) );
}
t->addFrame( frame );
@@ -384,7 +437,7 @@ namespace glabels
model::Distance dx( field( "oneLayout.dx" ).toDouble(), units );
model::Distance dy( field( "oneLayout.dy" ).toDouble(), units );
frame->addLayout( new model::Layout( nx, ny, x0, y0, dx, dy ) );
frame->addLayout( model::Layout( nx, ny, x0, y0, dx, dy ) );
}
else
{
@@ -402,8 +455,8 @@ namespace glabels
model::Distance dx2( field( "twoLayout.dx2" ).toDouble(), units );
model::Distance dy2( field( "twoLayout.dy2" ).toDouble(), units );
frame->addLayout( new model::Layout( nx1, ny1, x01, y01, dx1, dy1 ) );
frame->addLayout( new model::Layout( nx2, ny2, x02, y02, dx2, dy2 ) );
frame->addLayout( model::Layout( nx1, ny1, x01, y01, dx1, dy1 ) );
frame->addLayout( model::Layout( nx2, ny2, x02, y02, dx2, dy2 ) );
}
return t;
@@ -458,6 +511,7 @@ namespace glabels
setField( "pageSize.pageSize", model::Db::lookupPaperNameFromId( tmplate->paperId() ) );
setField( "pageSize.w", tmplate->pageWidth().inUnits( units ) );
setField( "pageSize.h", tmplate->pageHeight().inUnits( units ) );
setField( "pageSize.rollW", tmplate->rollWidth().inUnits( units ) );
const model::Frame* frame = tmplate->frames().first();
if ( auto frameRect = dynamic_cast<const model::FrameRect*>( frame ) )
@@ -500,38 +554,39 @@ namespace glabels
{
if ( auto markupMargin = dynamic_cast<const model::MarkupMargin*>( markup ) )
{
setField( "rect.margin", markupMargin->size().inUnits( units ) );
setField( "round.margin", markupMargin->size().inUnits( units ) );
setField( "ellipse.margin", markupMargin->size().inUnits( units ) );
setField( "cd.margin", markupMargin->size().inUnits( units ) );
setField( "rect.xMargin", markupMargin->xSize().inUnits( units ) );
setField( "rect.yMargin", markupMargin->ySize().inUnits( units ) );
setField( "round.margin", markupMargin->xSize().inUnits( units ) );
setField( "ellipse.margin", markupMargin->xSize().inUnits( units ) );
setField( "cd.margin", markupMargin->xSize().inUnits( units ) );
}
}
QList<model::Layout*> layouts = frame->layouts();
auto layouts = frame->layouts();
if ( layouts.size() == 1 )
{
setField( "oneLayout.nx", layouts[0]->nx() );
setField( "oneLayout.ny", layouts[0]->ny() );
setField( "oneLayout.x0", layouts[0]->x0().inUnits( units ) );
setField( "oneLayout.y0", layouts[0]->y0().inUnits( units ) );
setField( "oneLayout.dx", layouts[0]->dx().inUnits( units ) );
setField( "oneLayout.dy", layouts[0]->dy().inUnits( units ) );
setField( "oneLayout.nx", layouts[0].nx() );
setField( "oneLayout.ny", layouts[0].ny() );
setField( "oneLayout.x0", layouts[0].x0().inUnits( units ) );
setField( "oneLayout.y0", layouts[0].y0().inUnits( units ) );
setField( "oneLayout.dx", layouts[0].dx().inUnits( units ) );
setField( "oneLayout.dy", layouts[0].dy().inUnits( units ) );
}
else if ( layouts.size() > 1 )
{
setField( "twoLayout.nx1", layouts[0]->nx() );
setField( "twoLayout.ny1", layouts[0]->ny() );
setField( "twoLayout.x01", layouts[0]->x0().inUnits( units ) );
setField( "twoLayout.y01", layouts[0]->y0().inUnits( units ) );
setField( "twoLayout.dx1", layouts[0]->dx().inUnits( units ) );
setField( "twoLayout.dy1", layouts[0]->dy().inUnits( units ) );
setField( "twoLayout.nx1", layouts[0].nx() );
setField( "twoLayout.ny1", layouts[0].ny() );
setField( "twoLayout.x01", layouts[0].x0().inUnits( units ) );
setField( "twoLayout.y01", layouts[0].y0().inUnits( units ) );
setField( "twoLayout.dx1", layouts[0].dx().inUnits( units ) );
setField( "twoLayout.dy1", layouts[0].dy().inUnits( units ) );
setField( "twoLayout.nx2", layouts[1]->nx() );
setField( "twoLayout.ny2", layouts[1]->ny() );
setField( "twoLayout.x02", layouts[1]->x0().inUnits( units ) );
setField( "twoLayout.y02", layouts[1]->y0().inUnits( units ) );
setField( "twoLayout.dx2", layouts[1]->dx().inUnits( units ) );
setField( "twoLayout.dy2", layouts[1]->dy().inUnits( units ) );
setField( "twoLayout.nx2", layouts[1].nx() );
setField( "twoLayout.ny2", layouts[1].ny() );
setField( "twoLayout.x02", layouts[1].x0().inUnits( units ) );
setField( "twoLayout.y02", layouts[1].y0().inUnits( units ) );
setField( "twoLayout.dx2", layouts[1].dx().inUnits( units ) );
setField( "twoLayout.dy2", layouts[1].dy().inUnits( units ) );
}
}
@@ -583,7 +638,20 @@ namespace glabels
{
if ( auto td = dynamic_cast<TemplateDesigner*>( wizard() ) )
{
td->loadFromTemplate( tmplate );
if ( dynamic_cast<model::FramePath*>(tmplate->frames().constFirst()) )
{
td->mIsTemplatePathBased = true;
}
else if ( dynamic_cast<model::FrameContinuous*>(tmplate->frames().constFirst()) )
{
td->mIsTemplateContinuousBased = true;
}
else
{
td->mIsTemplatePathBased = false;
td->mIsTemplateContinuousBased = false;
td->loadFromTemplate( tmplate );
}
td->next();
}
}
@@ -658,20 +726,30 @@ namespace glabels
setupUi( widget );
pageSizeCombo->insertItem( 0, tr("Other") );
pageSizeCombo->insertItems( 1, model::Db::paperNames() );
pageSizeCombo->insertItem( 1, tr("Roll") );
pageSizeCombo->insertItems( 2, model::Db::paperNames() );
pageSizeCombo->setCurrentText( defaultPageSize[ model::Settings::preferedPageSizeFamily() ] );
bool isOther = pageSizeCombo->currentText() == tr("Other");
bool isRoll = pageSizeCombo->currentText() == tr("Roll");
wSpin->setSuffix( " " + model::Settings::units().toTrName() );
wSpin->setDecimals( model::Settings::units().resolutionDigits() );
wSpin->setSingleStep( model::Settings::units().resolution() );
wSpin->setMaximum( maxPageSize[ model::Settings::units().toEnum() ] );
wSpin->setEnabled( pageSizeCombo->currentText() == tr("Other") );
wSpin->setEnabled( isOther || isRoll );
hSpin->setSuffix( " " + model::Settings::units().toTrName() );
hSpin->setDecimals( model::Settings::units().resolutionDigits() );
hSpin->setSingleStep( model::Settings::units().resolution() );
hSpin->setMaximum( maxPageSize[ model::Settings::units().toEnum() ] );
hSpin->setEnabled( pageSizeCombo->currentText() == tr("Other") );
hSpin->setEnabled( isOther || isRoll );
rollWSpin->setSuffix( " " + model::Settings::units().toTrName() );
rollWSpin->setDecimals( model::Settings::units().resolutionDigits() );
rollWSpin->setSingleStep( model::Settings::units().resolution() );
rollWSpin->setMaximum( maxPageSize[ model::Settings::units().toEnum() ] );
rollWSpin->setEnabled( isRoll );
if ( pageSizeCombo->currentText() != tr("Other") )
{
@@ -683,6 +761,7 @@ namespace glabels
registerField( "pageSize.pageSize", pageSizeCombo, "currentText" );
registerField( "pageSize.w", wSpin, "value" );
registerField( "pageSize.h", hSpin, "value" );
registerField( "pageSize.rollW", rollWSpin, "value" );
connect( pageSizeCombo, &QComboBox::currentTextChanged, this, &TemplateDesignerPageSizePage::onComboChanged );
@@ -705,15 +784,29 @@ namespace glabels
void TemplateDesignerPageSizePage::onComboChanged()
{
if ( pageSizeCombo->currentText() != tr("Other") )
bool isOther = pageSizeCombo->currentText() == tr("Other");
bool isRoll = pageSizeCombo->currentText() == tr("Roll");
if ( !isOther && !isRoll )
{
const model::Paper* paper = model::Db::lookupPaperFromName( pageSizeCombo->currentText() );
wSpin->setValue( paper->width().inUnits( model::Settings::units() ) );
hSpin->setValue( paper->height().inUnits( model::Settings::units() ) );
}
wSpin->setEnabled( pageSizeCombo->currentText() == tr("Other") );
hSpin->setEnabled( pageSizeCombo->currentText() == tr("Other") );
if ( !isRoll )
{
rollWSpin->setValue( 0 );
}
wLabel->setEnabled( isOther || isRoll );
wSpin->setEnabled( isOther || isRoll );
hLabel->setEnabled( isOther || isRoll );
hSpin->setEnabled( isOther || isRoll );
rollWLabel->setEnabled( isRoll );
rollWSpin->setEnabled( isRoll );
}
@@ -781,16 +874,21 @@ namespace glabels
yWasteSpin->setDecimals( model::Settings::units().resolutionDigits() );
yWasteSpin->setSingleStep( model::Settings::units().resolution() );
marginSpin->setSuffix( " " + model::Settings::units().toTrName() );
marginSpin->setDecimals( model::Settings::units().resolutionDigits() );
marginSpin->setSingleStep( model::Settings::units().resolution() );
xMarginSpin->setSuffix( " " + model::Settings::units().toTrName() );
xMarginSpin->setDecimals( model::Settings::units().resolutionDigits() );
xMarginSpin->setSingleStep( model::Settings::units().resolution() );
registerField( "rect.w", wSpin, "value" );
registerField( "rect.h", hSpin, "value" );
registerField( "rect.r", rSpin, "value" );
registerField( "rect.xWaste", xWasteSpin, "value" );
registerField( "rect.yWaste", yWasteSpin, "value" );
registerField( "rect.margin", marginSpin, "value" );
yMarginSpin->setSuffix( " " + model::Settings::units().toTrName() );
yMarginSpin->setDecimals( model::Settings::units().resolutionDigits() );
yMarginSpin->setSingleStep( model::Settings::units().resolution() );
registerField( "rect.w", wSpin, "value" );
registerField( "rect.h", hSpin, "value" );
registerField( "rect.r", rSpin, "value" );
registerField( "rect.xWaste", xWasteSpin, "value" );
registerField( "rect.yWaste", yWasteSpin, "value" );
registerField( "rect.xMargin", xMarginSpin, "value" );
registerField( "rect.yMargin", yMarginSpin, "value" );
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget( widget );
@@ -811,7 +909,8 @@ namespace glabels
rSpin->setMaximum( std::min(wMax,hMax)/2.0 );
xWasteSpin->setMaximum( std::min(wMax,hMax)/4.0 );
yWasteSpin->setMaximum( std::min(wMax,hMax)/4.0 );
marginSpin->setMaximum( std::min(wMax,hMax)/4.0 );
xMarginSpin->setMaximum( std::min(wMax,hMax)/4.0 );
yMarginSpin->setMaximum( std::min(wMax,hMax)/4.0 );
static bool alreadyInitialized = false;
if ( !td->isBasedOnCopy() && !alreadyInitialized )
@@ -824,7 +923,8 @@ namespace glabels
rSpin->setValue( defaultRectR.inUnits( model::Settings::units() ) );
xWasteSpin->setValue( defaultWaste.inUnits( model::Settings::units() ) );
yWasteSpin->setValue( defaultWaste.inUnits( model::Settings::units() ) );
marginSpin->setValue( defaultMargin.inUnits( model::Settings::units() ) );
xMarginSpin->setValue( defaultMargin.inUnits( model::Settings::units() ) );
yMarginSpin->setValue( defaultMargin.inUnits( model::Settings::units() ) );
}
}
}
@@ -1059,6 +1159,54 @@ namespace glabels
}
///
/// Path Product Page
///
TemplateDesignerPathPage::TemplateDesignerPathPage( QWidget* parent ) : QWizardPage(parent)
{
setTitle( tr("Unsupported Product Style") );
setSubTitle( tr("Path based product templates are not currently supported by the Product Template Designer.") );
QWidget* widget = new QWidget;
setupUi( widget );
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget( widget );
setLayout( layout );
}
bool TemplateDesignerPathPage::isComplete() const
{
// Must "Cancel" or "Back" from this page
return false;
}
///
/// Continuous Product Page
///
TemplateDesignerContinuousPage::TemplateDesignerContinuousPage( QWidget* parent ) : QWizardPage(parent)
{
setTitle( tr("Unsupported Product Style") );
setSubTitle( tr("Continuous tape product templates are not currently supported by the Product Template Designer.") );
QWidget* widget = new QWidget;
setupUi( widget );
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget( widget );
setLayout( layout );
}
bool TemplateDesignerContinuousPage::isComplete() const
{
// Must "Cancel" or "Back" from this page
return false;
}
///
/// Number of Layouts Page
///
+33 -1
View File
@@ -30,6 +30,8 @@
#include "ui_TemplateDesignerRoundPage.h"
#include "ui_TemplateDesignerEllipsePage.h"
#include "ui_TemplateDesignerCdPage.h"
#include "ui_TemplateDesignerPathPage.h"
#include "ui_TemplateDesignerContinuousPage.h"
#include "ui_TemplateDesignerNLayoutsPage.h"
#include "ui_TemplateDesignerOneLayoutPage.h"
#include "ui_TemplateDesignerTwoLayoutPage.h"
@@ -59,6 +61,8 @@ namespace glabels
friend class TemplateDesignerRoundPage;
friend class TemplateDesignerEllipsePage;
friend class TemplateDesignerCdPage;
friend class TemplateDesignerPathPage;
friend class TemplateDesignerContinuousPage;
friend class TemplateDesignerNLayoutsPage;
friend class TemplateDesignerOneLayoutPage;
friend class TemplateDesignerTwoLayoutPage;
@@ -92,7 +96,9 @@ namespace glabels
// Private methods
/////////////////////////////////
private:
bool mIsBasedOnCopy;
bool mIsBasedOnCopy{false};
bool mIsTemplatePathBased{false};
bool mIsTemplateContinuousBased{false};
};
@@ -220,6 +226,32 @@ namespace glabels
};
//
// Path Page
//
class TemplateDesignerPathPage : public QWizardPage, public Ui::TemplateDesignerPathPage
{
Q_OBJECT
public:
TemplateDesignerPathPage( QWidget* parent = nullptr );
bool isComplete() const override;
};
//
// Continuous Page
//
class TemplateDesignerContinuousPage : public QWizardPage, public Ui::TemplateDesignerContinuousPage
{
Q_OBJECT
public:
TemplateDesignerContinuousPage( QWidget* parent = nullptr );
bool isComplete() const override;
};
//
// NLayouts Page
//
+78 -7
View File
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>806</width>
<width>886</width>
<height>742</height>
</rect>
</property>
@@ -25,7 +25,7 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<layout class="QGridLayout" name="gridLayout_5" columnstretch="0,0,0,0,1">
<item row="0" column="4">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -42,7 +42,16 @@
</item>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>12</number>
</property>
<property name="rightMargin">
<number>12</number>
</property>
<property name="bottomMargin">
<number>12</number>
</property>
<item>
@@ -256,6 +265,51 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="parametersGroupBox">
<property name="title">
<string>Adjustable Parameters</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="horizontalSpacing">
<number>12</number>
</property>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="lengthSpin">
<property name="accelerated">
<bool>false</bool>
</property>
<property name="prefix">
<string notr="true"/>
</property>
<property name="suffix">
<string notr="true"> in</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Label length:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="orientationGroupBox">
<property name="sizePolicy">
@@ -385,8 +439,8 @@
<slot>onChangeProductButtonClicked()</slot>
<hints>
<hint type="sourcelabel">
<x>309</x>
<y>239</y>
<x>342</x>
<y>291</y>
</hint>
<hint type="destinationlabel">
<x>728</x>
@@ -401,8 +455,8 @@
<slot>onOrientationActivated()</slot>
<hints>
<hint type="sourcelabel">
<x>308</x>
<y>334</y>
<x>342</x>
<y>467</y>
</hint>
<hint type="destinationlabel">
<x>802</x>
@@ -410,9 +464,26 @@
</hint>
</hints>
</connection>
<connection>
<sender>lengthSpin</sender>
<signal>valueChanged(double)</signal>
<receiver>PropertiesView</receiver>
<slot>onLengthSpinChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>188</x>
<y>349</y>
</hint>
<hint type="destinationlabel">
<x>801</x>
<y>376</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>onChangeProductButtonClicked()</slot>
<slot>onOrientationActivated()</slot>
<slot>onLengthSpinChanged()</slot>
</slots>
</ui>
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerContinuousPage</class>
<widget class="QWidget" name="TemplateDesignerContinuousPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>18</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click &amp;quot;Cancel&amp;quot; to quit, or click &amp;quot;Back&amp;quot; to begin with a different product.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+86 -59
View File
@@ -25,54 +25,19 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Page size:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="wSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Height:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="pageSizeCombo"/>
</item>
</layout>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>173</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
@@ -87,18 +52,80 @@
</property>
</spacer>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>12</number>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>173</height>
</size>
</property>
</spacer>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="rollWLabel">
<property name="text">
<string>Roll width:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="hLabel">
<property name="text">
<string>Height:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="pageSizeCombo"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="wLabel">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="rollWSpin">
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="wSpin">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Page size:</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
+59
View File
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerPathPage</class>
<widget class="QWidget" name="TemplateDesignerPathPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>18</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click &amp;quot;Cancel&amp;quot; to quit, or click &amp;quot;Back&amp;quot; to begin with a different product.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+59 -42
View File
@@ -30,25 +30,15 @@
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>2. Height:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="rSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
<string>4. Horizontal waste:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QDoubleSpinBox" name="marginSpin">
<widget class="QDoubleSpinBox" name="xMarginSpin">
<property name="accelerated">
<bool>true</bool>
</property>
@@ -57,23 +47,10 @@
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="yWasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>3. Corner radius</string>
</property>
</widget>
</item>
@@ -94,24 +71,54 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>4. Horizontal waste:</string>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="rSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>3. Corner radius</string>
<string>5. Vertical waste:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="yWasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>2. Height:</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>6. Margin:</string>
<string>6. Margin (X):</string>
</property>
</widget>
</item>
@@ -125,10 +132,20 @@
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<item row="6" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>5. Vertical waste:</string>
<string>7. Margin (Y):</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QDoubleSpinBox" name="yMarginSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string>in</string>
</property>
</widget>
</item>
+2
View File
@@ -26,7 +26,9 @@ set (Model_sources
FileUtil.cpp
Frame.cpp
FrameCd.cpp
FrameContinuous.cpp
FrameEllipse.cpp
FramePath.cpp
FrameRect.cpp
FrameRound.cpp
Handles.cpp
+15 -11
View File
@@ -67,13 +67,10 @@ namespace glabels
QList<Vendor*> Db::mVendors;
QStringList Db::mVendorNames;
QList<Template*> Db::mTemplates;
QString Db::mPaperNameOther;
Db::Db()
{
mPaperNameOther = tr("Other");
readPapers();
readCategories();
readVendors();
@@ -209,6 +206,15 @@ namespace glabels
{
if ( !name.isNull() && !name.isEmpty() )
{
if ( name == tr("Other") )
{
return "other";
}
else if ( name == tr("Roll") )
{
return "roll";
}
const Paper *paper = lookupPaperFromName( name );
if ( paper != nullptr )
{
@@ -225,9 +231,13 @@ namespace glabels
{
if ( !id.isNull() && !id.isEmpty() )
{
if ( isPaperIdOther( id ) )
if ( id == "roll" )
{
return mPaperNameOther;
return tr("Roll");
}
else
{
return tr("Other");
}
const Paper *paper = lookupPaperFromId( id );
@@ -256,12 +266,6 @@ namespace glabels
}
bool Db::isPaperIdOther( const QString& id )
{
return ( id == "Other" );
}
void Db::registerCategory( Category *category )
{
if ( !isCategoryIdKnown( category->id() ) )
-3
View File
@@ -71,7 +71,6 @@ namespace glabels
static QString lookupPaperIdFromName( const QString& name );
static QString lookupPaperNameFromId( const QString& id );
static bool isPaperIdKnown( const QString& id );
static bool isPaperIdOther( const QString& id );
static void registerCategory( Category *category );
static const Category *lookupCategoryFromName( const QString& name );
@@ -134,8 +133,6 @@ namespace glabels
static QList<Template*> mTemplates;
static QString mPaperNameOther;
};
}
+10
View File
@@ -208,3 +208,13 @@ namespace glabels
}
}
QDebug operator<<( QDebug dbg, const glabels::model::Distance& distance )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << distance.pt() << "pt";
return dbg;
}
+12
View File
@@ -69,6 +69,7 @@ namespace glabels
Distance& operator+=( const Distance& d );
Distance& operator-=( const Distance& d );
Distance& operator*=( double f );
Distance operator-();
friend inline Distance operator+( const Distance& d1, const Distance& d2 );
@@ -100,6 +101,10 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::Distance& distance );
//
// Inline methods
//
@@ -200,6 +205,13 @@ namespace glabels
}
inline Distance& Distance::operator*=( double f )
{
mDPts *= f;
return *this;
}
inline Distance Distance::operator-()
{
return Distance::pt( -mDPts );
+66 -11
View File
@@ -20,6 +20,12 @@
#include "Frame.h"
#include "FrameCd.h"
#include "FrameContinuous.h"
#include "FrameEllipse.h"
#include "FramePath.h"
#include "FrameRect.h"
#include "FrameRound.h"
#include "Markup.h"
#include <algorithm>
@@ -42,12 +48,12 @@ namespace glabels
mId = other.mId;
mNLabels = 0;
foreach ( Layout *layout, mLayouts )
foreach ( const Layout& layout, other.mLayouts )
{
addLayout( layout->dup() );
addLayout( layout );
}
foreach ( Markup *markup, mMarkups )
foreach ( Markup *markup, other.mMarkups )
{
addMarkup( markup->dup() );
}
@@ -72,7 +78,7 @@ namespace glabels
}
const QList<Layout*>& Frame::layouts() const
const QList<Layout>& Frame::layouts() const
{
return mLayouts;
}
@@ -89,13 +95,13 @@ namespace glabels
QVector<Point> origins( nLabels() );
int i = 0;
foreach ( Layout *layout, mLayouts )
foreach ( const Layout& layout, mLayouts )
{
for ( int iy = 0; iy < layout->ny(); iy++ )
for ( int iy = 0; iy < layout.ny(); iy++ )
{
for ( int ix = 0; ix < layout->nx(); ix++ )
for ( int ix = 0; ix < layout.nx(); ix++ )
{
origins[i++] = Point( ix*layout->dx() + layout->x0(), iy*layout->dy() + layout->y0() );
origins[i++] = Point( ix*layout.dx() + layout.x0(), iy*layout.dy() + layout.y0() );
}
}
}
@@ -106,12 +112,12 @@ namespace glabels
}
void Frame::addLayout( Layout *layout )
void Frame::addLayout( const Layout& layout )
{
mLayouts << layout;
// Update total number of labels
mNLabels += layout->nx() * layout->ny();
mNLabels += layout.nx() * layout.ny();
// Update layout description
if ( mLayouts.size() == 1 )
@@ -122,7 +128,7 @@ namespace glabels
* %3 = total number of labels on a page (sheet).
*/
mLayoutDescription = QString( tr("%1 x %2 (%3 per sheet)") )
.arg(layout->nx()).arg(layout->ny()).arg(mNLabels);
.arg(layout.nx()).arg(layout.ny()).arg(mNLabels);
}
else
{
@@ -137,5 +143,54 @@ namespace glabels
mMarkups << markup;
}
void Frame::setH( const Distance& h )
{
// Default implementation does nothing
}
}
}
QDebug operator<<( QDebug dbg, const glabels::model::Frame& frame )
{
if ( auto* frameCd = dynamic_cast<const glabels::model::FrameCd*>(&frame) )
{
dbg << *frameCd;
return dbg;
}
else if ( auto* frameContinuous = dynamic_cast<const glabels::model::FrameContinuous*>(&frame) )
{
dbg << *frameContinuous;
return dbg;
}
else if ( auto* frameEllipse = dynamic_cast<const glabels::model::FrameEllipse*>(&frame) )
{
dbg << *frameEllipse;
return dbg;
}
else if ( auto* framePath = dynamic_cast<const glabels::model::FramePath*>(&frame) )
{
dbg << *framePath;
return dbg;
}
else if ( auto* frameRect = dynamic_cast<const glabels::model::FrameRect*>(&frame) )
{
dbg << *frameRect;
return dbg;
}
else if ( auto* frameRound = dynamic_cast<const glabels::model::FrameRound*>(&frame) )
{
dbg << *frameRound;
return dbg;
}
else
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "UNKNOWN FRAME";
return dbg;
}
}
+12 -4
View File
@@ -27,6 +27,7 @@
#include "Point.h"
#include <QCoreApplication>
#include <QDebug>
#include <QList>
#include <QPainterPath>
#include <QString>
@@ -56,23 +57,26 @@ namespace glabels
QString id() const;
int nLabels() const;
QString layoutDescription() const;
const QList<Layout*>& layouts() const;
const QList<Layout>& layouts() const;
const QList<Markup*>& markups() const;
QVector<Point> getOrigins() const;
void addLayout( Layout* layout );
void addLayout( const Layout& layout );
void addMarkup( Markup* markup );
virtual Distance w() const = 0;
virtual Distance h() const = 0;
virtual void setH( const Distance& h );
virtual QString sizeDescription( const Units& units ) const = 0;
virtual bool isSimilarTo( Frame* other ) const = 0;
virtual const QPainterPath& path() const = 0;
virtual const QPainterPath& clipPath() const = 0;
virtual QPainterPath marginPath( const Distance& size ) const = 0;
virtual QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const = 0;
private:
@@ -80,7 +84,7 @@ namespace glabels
int mNLabels;
QString mLayoutDescription;
QList<Layout*> mLayouts;
QList<Layout> mLayouts;
QList<Markup*> mMarkups;
};
@@ -88,4 +92,8 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::Frame& frame );
#endif // model_Frame_h
+24 -10
View File
@@ -93,15 +93,6 @@ namespace glabels
}
FrameCd::FrameCd( const FrameCd& other )
: Frame(other),
mR1(other.mR1), mR2(other.mR2), mW(other.mW), mH(other.mH), mWaste(other.mWaste),
mPath(other.mPath)
{
// empty
}
Frame* FrameCd::dup() const
{
return new FrameCd( *this );
@@ -187,8 +178,12 @@ namespace glabels
}
QPainterPath FrameCd::marginPath( const Distance& size ) const
QPainterPath FrameCd::marginPath( const Distance& xSize,
const Distance& ySize ) const
{
// Note: ignore ySize, assume xSize == ySize
Distance size = xSize;
Distance wReal = (mW == 0) ? 2*mR1 : mW;
Distance hReal = (mH == 0) ? 2*mR1 : mH;
@@ -219,3 +214,22 @@ namespace glabels
}
}
QDebug operator<<( QDebug dbg, const glabels::model::FrameCd& frame )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "FrameCd{ "
<< frame.id() << ","
<< frame.r1() << ","
<< frame.r2() << ","
<< frame.waste() << ","
<< frame.w() << ","
<< frame.h() << ","
<< frame.layouts() << ","
<< frame.markups()
<< " }";
return dbg;
}
+7 -2
View File
@@ -42,7 +42,7 @@ namespace glabels
const Distance& waste,
const QString& id = "0" );
FrameCd( const FrameCd &other );
FrameCd( const FrameCd &other ) = default;
Frame *dup() const override;
@@ -58,7 +58,8 @@ namespace glabels
const QPainterPath& path() const override;
const QPainterPath& clipPath() const override;
QPainterPath marginPath( const Distance& size ) const override;
QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const override;
private:
@@ -77,4 +78,8 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::FrameCd& frame );
#endif // model_FrameCd_h
+166
View File
@@ -0,0 +1,166 @@
/* FrameContinuous.cpp
*
* Copyright (C) 2018 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#include "FrameContinuous.h"
#include "Constants.h"
#include "StrUtil.h"
namespace glabels
{
namespace model
{
FrameContinuous::FrameContinuous( const Distance& w,
const Distance& hMin,
const Distance& hMax,
const Distance& hDefault,
const QString& id )
: Frame(id), mW(w), mHMin(hMin), mHMax(hMax), mHDefault(hDefault), mH(hDefault)
{
mPath.addRect( 0, 0, mW.pt(), mH.pt() );
}
Frame* FrameContinuous::dup() const
{
return new FrameContinuous( *this );
}
Distance FrameContinuous::w() const
{
return mW;
}
Distance FrameContinuous::h() const
{
return mH;
}
Distance FrameContinuous::hMin() const
{
return mHMin;
}
Distance FrameContinuous::hMax() const
{
return mHMax;
}
Distance FrameContinuous::hDefault() const
{
return mHDefault;
}
void FrameContinuous::setH( const Distance& h )
{
mH = h;
mPath = QPainterPath(); // clear path
mPath.addRect( 0, 0, mW.pt(), mH.pt() );
}
QString FrameContinuous::sizeDescription( const Units& units ) const
{
if ( units.toEnum() == Units::IN )
{
QString wStr = StrUtil::formatFraction( mW.in() );
return QString().sprintf( "%s %s %s",
qPrintable(wStr),
qPrintable(units.toTrName()),
qPrintable(tr("wide")) );
}
else
{
return QString().sprintf( "%.3f %s %s",
mW.inUnits(units),
qPrintable(units.toTrName()),
qPrintable(tr("wide")) );
}
}
bool FrameContinuous::isSimilarTo( Frame* other ) const
{
if ( auto *otherContinuous = dynamic_cast<FrameContinuous*>(other) )
{
if ( fabs( mW - otherContinuous->mW ) <= EPSILON )
{
return true;
}
}
return false;
}
const QPainterPath& FrameContinuous::path() const
{
return mPath;
}
const QPainterPath& FrameContinuous::clipPath() const
{
return mPath;
}
QPainterPath FrameContinuous::marginPath( const Distance& xSize,
const Distance& ySize ) const
{
Distance w = mW - 2*xSize;
Distance h = mH - 2*ySize;
QPainterPath path;
path.addRect( xSize.pt(), ySize.pt(), w.pt(), h.pt() );
return path;
}
}
}
QDebug operator<<( QDebug dbg, const glabels::model::FrameContinuous& frame )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "FrameContinuous{ "
<< frame.id() << ","
<< frame.w() << ","
<< frame.h() << ","
<< frame.hMin() << ","
<< frame.hMax() << ","
<< frame.hDefault() << ","
<< frame.layouts() << ","
<< frame.markups()
<< " }";
return dbg;
}
+85
View File
@@ -0,0 +1,85 @@
/* FrameContinuous.h
*
* Copyright (C) 2018 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef model_FrameContinuous_h
#define model_FrameContinuous_h
#include "Frame.h"
namespace glabels
{
namespace model
{
class FrameContinuous : public Frame
{
Q_DECLARE_TR_FUNCTIONS(FrameContinuous)
public:
FrameContinuous( const Distance& w,
const Distance& hMin,
const Distance& hMax,
const Distance& hDefault,
const QString& id = "0" );
FrameContinuous( const FrameContinuous& other ) = default;
Frame* dup() const override;
Distance w() const override;
Distance h() const override;
Distance hMin() const;
Distance hMax() const;
Distance hDefault() const;
void setH( const Distance& h ) override;
QString sizeDescription( const Units& units ) const override;
bool isSimilarTo( Frame* other ) const override;
const QPainterPath& path() const override;
const QPainterPath& clipPath() const override;
QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const override;
private:
Distance mW;
Distance mHMin;
Distance mHMax;
Distance mHDefault;
Distance mH;
QPainterPath mPath;
};
}
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::FrameContinuous& frame );
#endif // model_FrameContinuous_h
+22 -8
View File
@@ -40,13 +40,6 @@ namespace glabels
}
FrameEllipse::FrameEllipse( const FrameEllipse& other )
: Frame(other), mW(other.mW), mH(other.mH), mWaste(other.mWaste), mPath(other.mPath)
{
// empty
}
Frame* FrameEllipse::dup() const
{
return new FrameEllipse( *this );
@@ -119,8 +112,12 @@ namespace glabels
}
QPainterPath FrameEllipse::marginPath( const Distance& size ) const
QPainterPath FrameEllipse::marginPath( const Distance& xSize,
const Distance& ySize ) const
{
// Note: ignore ySize, assume xSize == ySize
Distance size = xSize;
Distance w = mW - 2*size;
Distance h = mH - 2*size;
@@ -132,3 +129,20 @@ namespace glabels
}
}
QDebug operator<<( QDebug dbg, const glabels::model::FrameEllipse& frame )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "FrameEllipse{ "
<< frame.id() << ","
<< frame.w() << ","
<< frame.h() << ","
<< frame.waste() << ","
<< frame.layouts() << ","
<< frame.markups()
<< " }";
return dbg;
}
+7 -2
View File
@@ -40,7 +40,7 @@ namespace glabels
const Distance& waste,
const QString& id = "0" );
FrameEllipse( const FrameEllipse& other );
FrameEllipse( const FrameEllipse& other ) = default;
Frame* dup() const override;
@@ -54,7 +54,8 @@ namespace glabels
const QPainterPath& path() const override;
const QPainterPath& clipPath() const override;
QPainterPath marginPath( const Distance& size ) const override;
QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const override;
private:
@@ -71,4 +72,8 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::FrameEllipse& frame );
#endif // model_FrameEllipse_h
+157
View File
@@ -0,0 +1,157 @@
/* FramePath.cpp
*
* Copyright (C) 2018 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#include "FramePath.h"
#include "Constants.h"
#include "StrUtil.h"
namespace glabels
{
namespace model
{
FramePath::FramePath( const QPainterPath& path,
const Distance& xWaste,
const Distance& yWaste,
const Units& originalUnits,
const QString& id )
: Frame(id), mXWaste(xWaste), mYWaste(yWaste), mPath(path), mOriginalUnits(originalUnits)
{
QRectF r = path.boundingRect();
mW = Distance::pt( r.width() );
mH = Distance::pt( r.height() );
mClipPath.addRect( r.x()-mXWaste.pt(), r.y()-mYWaste.pt(),
r.width() + 2*mXWaste.pt(), r.height() + 2*mYWaste.pt() );
}
Frame* FramePath::dup() const
{
return new FramePath( *this );
}
Distance FramePath::w() const
{
return mW;
}
Distance FramePath::h() const
{
return mH;
}
Distance FramePath::xWaste() const
{
return mXWaste;
}
Distance FramePath::yWaste() const
{
return mYWaste;
}
Units FramePath::originalUnits() const
{
return mOriginalUnits;
}
QString FramePath::sizeDescription( const Units& units ) const
{
if ( units.toEnum() == Units::IN )
{
QString wStr = StrUtil::formatFraction( mW.in() );
QString hStr = StrUtil::formatFraction( mH.in() );
return QString().sprintf( "%s x %s %s",
qPrintable(wStr),
qPrintable(hStr),
qPrintable(units.toTrName()) );
}
else
{
return QString().sprintf( "%.5g x %.5g %s",
mW.inUnits(units),
mH.inUnits(units),
qPrintable(units.toTrName()) );
}
}
bool FramePath::isSimilarTo( Frame* other ) const
{
if ( auto *otherPath = dynamic_cast<FramePath*>(other) )
{
if ( mPath == otherPath->mPath )
{
return true;
}
}
return false;
}
const QPainterPath& FramePath::path() const
{
return mPath;
}
const QPainterPath& FramePath::clipPath() const
{
return mClipPath;
}
QPainterPath FramePath::marginPath( const Distance& xSize,
const Distance& ySize ) const
{
return mPath; // No margin
}
}
}
QDebug operator<<( QDebug dbg, const glabels::model::FramePath& frame )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "FramePath{ "
<< frame.id() << ","
<< frame.path() << ","
<< frame.xWaste() << ","
<< frame.yWaste() << ","
<< frame.layouts() << ","
<< frame.markups()
<< " }";
return dbg;
}
+86
View File
@@ -0,0 +1,86 @@
/* FramePath.h
*
* Copyright (C) 2018 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef model_FramePath_h
#define model_FramePath_h
#include "Frame.h"
namespace glabels
{
namespace model
{
class FramePath : public Frame
{
Q_DECLARE_TR_FUNCTIONS(FramePath)
public:
FramePath( const QPainterPath& path,
const Distance& xWaste,
const Distance& yWaste,
const Units& originalUnits,
const QString& id = "0" );
FramePath( const FramePath& other ) = default;
Frame* dup() const override;
Distance xWaste() const;
Distance yWaste() const;
Units originalUnits() const;
Distance w() const override;
Distance h() const override;
QString sizeDescription( const Units& units ) const override;
bool isSimilarTo( Frame* other ) const override;
const QPainterPath& path() const override;
const QPainterPath& clipPath() const override;
QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const override;
private:
Distance mW;
Distance mH;
Distance mXWaste;
Distance mYWaste;
QPainterPath mPath;
QPainterPath mClipPath;
Units mOriginalUnits;
};
}
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::FramePath& frame );
#endif // model_FramePath_h
+25 -14
View File
@@ -44,16 +44,7 @@ namespace glabels
mR.pt(), mR.pt() );
}
FrameRect::FrameRect( const FrameRect &other )
: Frame(other),
mW(other.mW), mH(other.mH), mR(other.mR), mXWaste(other.mXWaste),
mYWaste(other.mYWaste), mPath(other.mPath)
{
// empty
}
Frame* FrameRect::dup() const
{
return new FrameRect( *this );
@@ -138,14 +129,15 @@ namespace glabels
}
QPainterPath FrameRect::marginPath( const Distance& size ) const
QPainterPath FrameRect::marginPath( const Distance& xSize,
const Distance& ySize ) const
{
Distance w = mW - 2*size;
Distance h = mH - 2*size;
Distance r = std::max( mR - size, Distance(0.0) );
Distance w = mW - 2*xSize;
Distance h = mH - 2*ySize;
Distance r = std::max( mR - std::min(xSize, ySize), Distance(0.0) );
QPainterPath path;
path.addRoundedRect( size.pt(), size.pt(), w.pt(), h.pt(), r.pt(), r.pt() );
path.addRoundedRect( xSize.pt(), ySize.pt(), w.pt(), h.pt(), r.pt(), r.pt() );
return path;
}
@@ -153,3 +145,22 @@ namespace glabels
}
}
QDebug operator<<( QDebug dbg, const glabels::model::FrameRect& frame )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "FrameRect{ "
<< frame.id() << ","
<< frame.w() << ","
<< frame.h() << ","
<< frame.r() << ","
<< frame.xWaste() << ","
<< frame.yWaste() << ","
<< frame.layouts() << ","
<< frame.markups()
<< " }";
return dbg;
}
+7 -2
View File
@@ -42,7 +42,7 @@ namespace glabels
const Distance& yWaste,
const QString& id = "0" );
FrameRect( const FrameRect& other );
FrameRect( const FrameRect& other ) = default;
Frame* dup() const override;
@@ -59,7 +59,8 @@ namespace glabels
const QPainterPath& path() const override;
const QPainterPath& clipPath() const override;
QPainterPath marginPath( const Distance& size ) const override;
QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const override;
private:
@@ -78,4 +79,8 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::FrameRect& frame );
#endif // model_FrameRect_h
+21 -8
View File
@@ -40,13 +40,6 @@ namespace glabels
}
FrameRound::FrameRound( const FrameRound& other )
: Frame(other), mR(other.mR), mWaste(other.mWaste), mPath(other.mPath)
{
// empty
}
Frame* FrameRound::dup() const
{
return new FrameRound( *this );
@@ -123,8 +116,12 @@ namespace glabels
}
QPainterPath FrameRound::marginPath( const Distance& size ) const
QPainterPath FrameRound::marginPath( const Distance& xSize,
const Distance& ySize ) const
{
// Note: ignore ySize, assume xSize == ySize
Distance size = xSize;
Distance r = mR - size;
QPainterPath path;
@@ -135,3 +132,19 @@ namespace glabels
}
}
QDebug operator<<( QDebug dbg, const glabels::model::FrameRound& frame )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "FrameRound{ "
<< frame.id() << ","
<< frame.r() << ","
<< frame.waste() << ","
<< frame.layouts() << ","
<< frame.markups()
<< " }";
return dbg;
}
+7 -2
View File
@@ -39,7 +39,7 @@ namespace glabels
const Distance& waste,
const QString& id = "0" );
FrameRound( const FrameRound &other );
FrameRound( const FrameRound &other ) = default;
Frame *dup() const override;
@@ -54,7 +54,8 @@ namespace glabels
const QPainterPath& path() const override;
const QPainterPath& clipPath() const override;
QPainterPath marginPath( const Distance& size ) const override;
QPainterPath marginPath( const Distance& xSize,
const Distance& ySize ) const override;
private:
@@ -70,4 +71,8 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::FrameRound& frame );
#endif // model_FrameRound_h
+24 -14
View File
@@ -86,22 +86,32 @@ namespace glabels
}
bool Layout::isSimilarTo( const Layout *other )
bool Layout::isSimilarTo( const Layout& other ) const
{
return ( (mNx == other->mNx) &&
(mNy == other->mNy) &&
(fabs(mX0 - other->mX0) < EPSILON) &&
(fabs(mY0 - other->mY0) < EPSILON) &&
(fabs(mDx - other->mDx) < EPSILON) &&
(fabs(mDy - other->mDy) < EPSILON) );
}
Layout* Layout::dup() const
{
auto *other = new Layout( *this );
return other;
return ( (mNx == other.mNx) &&
(mNy == other.mNy) &&
(fabs(mX0 - other.mX0) < EPSILON) &&
(fabs(mY0 - other.mY0) < EPSILON) &&
(fabs(mDx - other.mDx) < EPSILON) &&
(fabs(mDy - other.mDy) < EPSILON) );
}
}
}
QDebug operator<<( QDebug dbg, const glabels::model::Layout& layout )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "Layout{ "
<< layout.nx() << ","
<< layout.ny() << ","
<< layout.x0() << ","
<< layout.y0() << ","
<< layout.dx() << ","
<< layout.dy()
<< " }";
return dbg;
}
+7 -3
View File
@@ -24,6 +24,8 @@
#include "Distance.h"
#include <QDebug>
namespace glabels
{
@@ -52,9 +54,7 @@ namespace glabels
Distance dx() const;
Distance dy() const;
bool isSimilarTo( const Layout *other );
Layout* dup() const;
bool isSimilarTo( const Layout& other ) const;
private:
@@ -71,4 +71,8 @@ namespace glabels
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::Layout& layout );
#endif // model_Layout_h
+27 -8
View File
@@ -26,29 +26,48 @@ namespace glabels
namespace model
{
const QPainterPath& Markup::path() const
QPainterPath Markup::path( const Frame* frame ) const
{
// Use cached path -- default does not depend on frame size
return mPath;
}
MarkupMargin::MarkupMargin( const Frame* frame,
const Distance& size )
: mFrame(frame), mSize(size)
MarkupMargin::MarkupMargin( const Distance& size )
: mXSize(size), mYSize(size)
{
mPath = frame->marginPath( size );
}
MarkupMargin::MarkupMargin( const Distance& xSize,
const Distance& ySize )
: mXSize(xSize), mYSize(ySize)
{
}
QPainterPath MarkupMargin::path( const Frame* frame ) const
{
// Re-calculate path -- frame size may have changed
return frame->marginPath( mXSize, mYSize );
}
Markup* MarkupMargin::dup() const
{
return new MarkupMargin( mFrame, mSize );
return new MarkupMargin( mXSize, mYSize );
}
Distance MarkupMargin::size() const
Distance MarkupMargin::xSize() const
{
return mSize;
return mXSize;
}
Distance MarkupMargin::ySize() const
{
return mYSize;
}
+11 -6
View File
@@ -37,7 +37,7 @@ namespace glabels
public:
virtual Markup* dup() const = 0;
const QPainterPath& path() const;
virtual QPainterPath path( const Frame* frame ) const;
protected:
QPainterPath mPath;
@@ -47,16 +47,21 @@ namespace glabels
class MarkupMargin : public Markup
{
public:
MarkupMargin( const Frame* frame,
const Distance& size );
MarkupMargin( const Distance& size );
Distance size() const;
MarkupMargin( const Distance& xSize,
const Distance& ySize );
QPainterPath path( const Frame* frame ) const override;
Distance xSize() const;
Distance ySize() const;
Markup* dup() const override;
private:
const Frame* mFrame;
Distance mSize;
Distance mXSize;
Distance mYSize;
};
+50 -15
View File
@@ -55,12 +55,21 @@ namespace glabels
/// Default constructor.
///
Model::Model()
: mUntitledInstance(0), mModified(true), mTmplate(nullptr), mFrame(nullptr), mRotate(false)
: mUntitledInstance(0), mModified(true), mRotate(false)
{
mMerge = new merge::None();
}
///
/// Destructor.
///
Model::~Model()
{
delete mMerge;
}
///
/// Save model state
///
@@ -90,7 +99,6 @@ namespace glabels
mModified = savedModel->mModified;
mFileName = savedModel->mFileName;
mTmplate = savedModel->mTmplate;
mFrame = savedModel->mFrame;
mRotate = savedModel->mRotate;
foreach ( ModelObject* savedObject, savedModel->mObjectList )
@@ -155,7 +163,7 @@ namespace glabels
///
const Template* Model::tmplate() const
{
return mTmplate;
return &mTmplate;
}
@@ -164,7 +172,7 @@ namespace glabels
///
const Frame* Model::frame() const
{
return mFrame;
return mTmplate.frames().constFirst();
}
@@ -173,18 +181,14 @@ namespace glabels
///
void Model::setTmplate( const Template* tmplate )
{
if (mTmplate != tmplate)
{
mTmplate = tmplate;
mFrame = tmplate->frames().first();
mTmplate = *tmplate;
setModified();
setModified();
emit changed();
emit sizeChanged();
emit changed();
emit sizeChanged();
Settings::addToRecentTemplateList( tmplate->name() );
}
Settings::addToRecentTemplateList( tmplate->name() );
}
@@ -219,7 +223,14 @@ namespace glabels
///
Distance Model::w() const
{
return mRotate ? mFrame->h() : mFrame->w();
if ( auto* frame = mTmplate.frames().constFirst() )
{
return mRotate ? frame->h() : frame->w();
}
else
{
return Distance::pt(0);
}
}
@@ -228,7 +239,31 @@ namespace glabels
///
Distance Model::h() const
{
return mRotate ? mFrame->w() : mFrame->h();
if ( auto* frame = mTmplate.frames().constFirst() )
{
return mRotate ? frame->w() : frame->h();
}
else
{
return Distance::pt(0);
}
}
///
/// Set height (if variable length)
///
void Model::setH( const Distance& h )
{
if ( auto* frame = mTmplate.frames().first() )
{
frame->setH( h );
setModified();
emit changed();
emit sizeChanged();
}
}
+5 -4
View File
@@ -57,7 +57,7 @@ namespace glabels
/////////////////////////////////
public:
Model();
~Model() override = default;
~Model();
/////////////////////////////////
@@ -103,6 +103,8 @@ namespace glabels
Distance w() const;
Distance h() const;
void setH( const Distance& h );
const QList<ModelObject*>& objectList() const;
merge::Merge* merge() const;
@@ -222,11 +224,10 @@ namespace glabels
int mUntitledInstance;
bool mModified;
QString mFileName;
const Template* mTmplate;
const Frame* mFrame;
Template mTmplate;
bool mRotate;
QList<ModelObject*> mObjectList;
QList<ModelObject*> mObjectList;
merge::Merge* mMerge;
};
+13 -9
View File
@@ -193,6 +193,10 @@ namespace glabels
void PageRenderer::print( QPrinter* printer ) const
{
QSizeF pageSize( mModel->tmplate()->pageWidth().pt(), mModel->tmplate()->pageHeight().pt() );
if ( mModel->tmplate()->pageWidth().pt() > mModel->tmplate()->pageHeight().pt() )
{
printer->setOrientation( QPrinter::Landscape );
}
printer->setPageSize( QPageSize(pageSize, QPageSize::Point) );
printer->setFullPage( true );
printer->setPageMargins( 0, 0, 0, 0, QPrinter::Point );
@@ -338,16 +342,16 @@ namespace glabels
Distance w = mModel->frame()->w();
Distance h = mModel->frame()->h();
foreach ( Layout* layout, mModel->frame()->layouts() )
foreach ( const Layout& layout, mModel->frame()->layouts() )
{
Distance xMin = layout->x0();
Distance yMin = layout->y0();
Distance xMax = layout->x0() + layout->dx()*(layout->nx()-1) + w;
Distance yMax = layout->y0() + layout->dy()*(layout->ny()-1) + h;
Distance xMin = layout.x0();
Distance yMin = layout.y0();
Distance xMax = layout.x0() + layout.dx()*(layout.nx()-1) + w;
Distance yMax = layout.y0() + layout.dy()*(layout.ny()-1) + h;
for ( int ix = 0; ix < layout->nx(); ix++ )
for ( int ix = 0; ix < layout.nx(); ix++ )
{
Distance x1 = xMin + ix*layout->dx();
Distance x1 = xMin + ix*layout.dx();
Distance x2 = x1 + w;
Distance y1 = max( yMin-tickOffset, Distance::pt(0) );
@@ -362,9 +366,9 @@ namespace glabels
painter->drawLine( x2.pt(), y3.pt(), x2.pt(), y4.pt() );
}
for ( int iy = 0; iy < layout->ny(); iy++ )
for ( int iy = 0; iy < layout.ny(); iy++ )
{
Distance y1 = yMin + iy*layout->dy();
Distance y1 = yMin + iy*layout.dy();
Distance y2 = y1 + h;
Distance x1 = max( xMin-tickOffset, Distance::pt(0) );
+1 -1
View File
@@ -61,7 +61,7 @@ namespace glabels
if ( denom[i] == 0.0 )
{
/* None of our denominators work. */
return QString().sprintf( "%.5g", x );
return QString().sprintf( "%.3f", x );
}
if ( denom[i] == 1.0 )
{
+97 -8
View File
@@ -21,6 +21,7 @@
#include "Template.h"
#include "Db.h"
#include "FrameContinuous.h"
#include <QtDebug>
@@ -36,6 +37,7 @@ namespace glabels
const QString& paperId,
const Distance& pageWidth,
const Distance& pageHeight,
const Distance& rollWidth,
bool isUserDefined )
: mBrand(brand),
mPart(part),
@@ -43,6 +45,7 @@ namespace glabels
mPaperId(paperId),
mPageWidth(pageWidth),
mPageHeight(pageHeight),
mRollWidth(rollWidth),
mIsUserDefined(isUserDefined),
mIsSizeIso(false),
mIsSizeUs(false),
@@ -56,6 +59,8 @@ namespace glabels
mIsSizeIso = paper->isSizeIso();
mIsSizeUs = paper->isSizeUs();
}
mIsRoll = (paperId == "roll");
}
@@ -67,15 +72,17 @@ namespace glabels
mPaperId = other.mPaperId;
mPageWidth = other.mPageWidth;
mPageHeight = other.mPageHeight;
mRollWidth = other.mRollWidth;
mIsSizeIso = other.mIsSizeIso;
mIsSizeUs = other.mIsSizeUs;
mIsRoll = other.mIsRoll;
mEquivPart = other.mEquivPart;
mName = other.mName;
mProductUrl = other.mProductUrl;
foreach ( Frame* frame, other.mFrames )
{
addFrame( frame );
addFrame( frame->dup() );
}
foreach ( QString categoryId, other.mCategoryIds )
@@ -85,9 +92,50 @@ namespace glabels
}
Template* Template::dup() const
Template::~Template()
{
return new Template( *this );
while ( !mFrames.isEmpty() )
{
delete mFrames.takeFirst();
}
}
Template& Template::operator=( const Template& other )
{
if ( this != &other )
{
mBrand = other.mBrand;
mPart = other.mPart;
mDescription = other.mDescription;
mPaperId = other.mPaperId;
mPageWidth = other.mPageWidth;
mPageHeight = other.mPageHeight;
mRollWidth = other.mRollWidth;
mIsSizeIso = other.mIsSizeIso;
mIsSizeUs = other.mIsSizeUs;
mIsRoll = other.mIsRoll;
mEquivPart = other.mEquivPart;
mName = other.mName;
mProductUrl = other.mProductUrl;
while ( !mFrames.isEmpty() )
{
delete mFrames.takeFirst();
}
foreach ( Frame* frame, other.mFrames )
{
addFrame( frame->dup() );
}
mCategoryIds.clear();
foreach ( QString categoryId, other.mCategoryIds )
{
addCategory( categoryId );
}
}
return *this;
}
@@ -107,7 +155,7 @@ namespace glabels
const Template* other = Db::lookupTemplateFromBrandPart( brand, equivPart );
if ( other != nullptr )
{
Template* tmplate = other->dup();
Template* tmplate = new Template( *other );
tmplate->mPart = part;
tmplate->mEquivPart = equivPart;
@@ -159,7 +207,22 @@ namespace glabels
Distance Template::pageHeight() const
{
return mPageHeight;
// Adjust height if continuous tape
const model::Frame* frame = mFrames.constFirst();
if ( const auto* frameContinuous = dynamic_cast<const model::FrameContinuous*>(frame) )
{
return frameContinuous->h();
}
else
{
return mPageHeight;
}
}
Distance Template::rollWidth() const
{
return mRollWidth;
}
@@ -181,6 +244,12 @@ namespace glabels
}
bool Template::isRoll() const
{
return mIsRoll;
}
bool Template::isUserDefined() const
{
return mIsUserDefined;
@@ -274,12 +343,12 @@ namespace glabels
}
// Are they layed out similarly?
foreach ( Layout* layout1, frame1->layouts() )
foreach ( const Layout& layout1, frame1->layouts() )
{
bool matchFound = false;
foreach ( Layout* layout2, frame2->layouts() )
foreach ( const Layout& layout2, frame2->layouts() )
{
if ( layout1->isSimilarTo(layout2) )
if ( layout1.isSimilarTo( layout2 ) )
{
matchFound = true;
break;
@@ -297,3 +366,23 @@ namespace glabels
}
}
QDebug operator<<( QDebug dbg, const glabels::model::Template& tmplate )
{
QDebugStateSaver saver(dbg);
dbg.nospace() << "Template{ "
<< tmplate.brand() << "," << tmplate.part() << "," << tmplate.description() << ","
<< tmplate.paperId() << ","
<< tmplate.pageWidth() << ","
<< tmplate.pageHeight() << ","
<< tmplate.rollWidth() << ","
<< tmplate.isSizeIso() << ","
<< tmplate.isSizeUs() << ","
<< tmplate.isSizeOther() << ","
<< tmplate.isRoll() << ","
<< *tmplate.frames().constFirst() << ","
<< " }";
return dbg;
}
+15 -1
View File
@@ -43,17 +43,22 @@ namespace glabels
public:
Template() = default;
Template( const QString& brand,
const QString& part,
const QString& description,
const QString& paperId,
const Distance& pageWidth,
const Distance& pageHeight,
const Distance& rollWidth = 0,
bool isUserDefined = false );
Template( const Template& other );
Template* dup() const;
~Template();
Template& operator=( const Template& other );
// Generic full page template
static Template* fullPage( const QString& paperId );
@@ -71,9 +76,11 @@ namespace glabels
QString paperId() const;
Distance pageWidth() const;
Distance pageHeight() const;
Distance rollWidth() const;
bool isSizeIso() const;
bool isSizeUs() const;
bool isSizeOther() const;
bool isRoll() const;
bool isUserDefined() const;
@@ -104,8 +111,10 @@ namespace glabels
QString mPaperId;
Distance mPageWidth;
Distance mPageHeight;
Distance mRollWidth;
bool mIsSizeIso;
bool mIsSizeUs;
bool mIsRoll;
bool mIsUserDefined;
@@ -119,7 +128,12 @@ namespace glabels
};
}
}
// Debugging support
QDebug operator<<( QDebug dbg, const glabels::model::Template& tmplate );
#endif // model_Template_h
+62 -10
View File
@@ -91,7 +91,10 @@ namespace glabels
XmlUtil::setLengthAttr( node, "width", tmplate->pageWidth() );
XmlUtil::setLengthAttr( node, "height", tmplate->pageHeight() );
}
if ( tmplate->isRoll() )
{
XmlUtil::setLengthAttr( node, "roll_width", tmplate->rollWidth() );
}
XmlUtil::setStringAttr( node, "description", tmplate->description() );
@@ -141,6 +144,14 @@ namespace glabels
{
createLabelCdNode( parent, frameCd );
}
else if ( const auto* framePath = dynamic_cast<const FramePath*>(frame) )
{
createLabelPathNode( parent, framePath );
}
else if ( const auto* frameContinuous = dynamic_cast<const FrameContinuous*>(frame) )
{
createLabelContinuousNode( parent, frameContinuous );
}
else
{
Q_ASSERT_X( false, "XmlTemplateCreator::createLabelNode", "Invalid frame type." );
@@ -217,6 +228,39 @@ namespace glabels
}
void XmlTemplateCreator::createLabelPathNode( QDomElement &parent, const FramePath* frame )
{
QDomDocument doc = parent.ownerDocument();
QDomElement node = doc.createElement( "Label-path" );
parent.appendChild( node );
XmlUtil::setStringAttr( node, "id", frame->id() );
XmlUtil::setLengthAttr( node, "x_waste", frame->xWaste() );
XmlUtil::setLengthAttr( node, "y_waste", frame->yWaste() );
XmlUtil::setUnitsAttr( node, "d_units", frame->originalUnits() );
XmlUtil::setPathDataAttr( node, "d", frame->path(), frame->originalUnits() );
createLabelNodeCommon( node, frame );
}
void XmlTemplateCreator::createLabelContinuousNode( QDomElement &parent, const FrameContinuous* frame )
{
QDomDocument doc = parent.ownerDocument();
QDomElement node = doc.createElement( "Label-continuous" );
parent.appendChild( node );
XmlUtil::setStringAttr( node, "id", frame->id() );
XmlUtil::setLengthAttr( node, "width", frame->w() );
XmlUtil::setLengthAttr( node, "height", frame->h() );
XmlUtil::setLengthAttr( node, "min_height", frame->hMin() );
XmlUtil::setLengthAttr( node, "max_height", frame->hMin() );
XmlUtil::setLengthAttr( node, "default_height", frame->hDefault() );
createLabelNodeCommon( node, frame );
}
void XmlTemplateCreator::createLabelNodeCommon( QDomElement &node, const Frame *frame )
{
foreach ( Markup* markup, frame->markups() )
@@ -247,27 +291,27 @@ namespace glabels
}
}
foreach ( Layout* layout, frame->layouts() )
foreach ( const Layout& layout, frame->layouts() )
{
createLayoutNode( node, layout );
}
}
void XmlTemplateCreator::createLayoutNode( QDomElement& parent, const Layout* layout )
void XmlTemplateCreator::createLayoutNode( QDomElement& parent, const Layout& layout )
{
QDomDocument doc = parent.ownerDocument();
QDomElement node = doc.createElement( "Layout" );
parent.appendChild( node );
XmlUtil::setIntAttr( node, "nx", layout->nx() );
XmlUtil::setIntAttr( node, "ny", layout->ny() );
XmlUtil::setIntAttr( node, "nx", layout.nx() );
XmlUtil::setIntAttr( node, "ny", layout.ny() );
XmlUtil::setLengthAttr( node, "x0", layout->x0() );
XmlUtil::setLengthAttr( node, "y0", layout->y0() );
XmlUtil::setLengthAttr( node, "x0", layout.x0() );
XmlUtil::setLengthAttr( node, "y0", layout.y0() );
XmlUtil::setLengthAttr( node, "dx", layout->dx() );
XmlUtil::setLengthAttr( node, "dy", layout->dy() );
XmlUtil::setLengthAttr( node, "dx", layout.dx() );
XmlUtil::setLengthAttr( node, "dy", layout.dy() );
}
@@ -277,7 +321,15 @@ namespace glabels
QDomElement node = doc.createElement( "Markup-margin" );
parent.appendChild( node );
XmlUtil::setLengthAttr( node, "size", markup->size() );
if ( markup->xSize() == markup->ySize() )
{
XmlUtil::setLengthAttr( node, "size", markup->xSize() );
}
else
{
XmlUtil::setLengthAttr( node, "x_size", markup->xSize() );
XmlUtil::setLengthAttr( node, "y_size", markup->ySize() );
}
}
+5 -1
View File
@@ -23,7 +23,9 @@
#include "FrameCd.h"
#include "FrameContinuous.h"
#include "FrameEllipse.h"
#include "FramePath.h"
#include "FrameRect.h"
#include "FrameRound.h"
#include "Layout.h"
@@ -55,8 +57,10 @@ namespace glabels
void createLabelEllipseNode( QDomElement& parent, const FrameEllipse* frame );
void createLabelRoundNode( QDomElement& parent, const FrameRound* frame );
void createLabelCdNode( QDomElement& parent, const FrameCd* frame );
void createLabelPathNode( QDomElement& parent, const FramePath* frame );
void createLabelContinuousNode( QDomElement& parent, const FrameContinuous* frame );
void createLabelNodeCommon( QDomElement& node, const Frame* frame );
void createLayoutNode( QDomElement& parent, const Layout* layout );
void createLayoutNode( QDomElement& parent, const Layout& layout );
void createMarkupMarginNode( QDomElement& parent, const MarkupMargin* markupMargin );
void createMarkupLineNode( QDomElement& parent, const MarkupLine* markupLine );
void createMarkupCircleNode( QDomElement& parent, const MarkupCircle* markupCircle );
+76 -5
View File
@@ -25,6 +25,8 @@
#include "FrameCd.h"
#include "FrameRound.h"
#include "FrameEllipse.h"
#include "FramePath.h"
#include "FrameContinuous.h"
#include "Layout.h"
#include "Markup.h"
#include "Template.h"
@@ -153,7 +155,7 @@ namespace glabels
QString description = XmlUtil::getI18nAttr( node, "description", "" );
QString paperId = XmlUtil::getStringAttr( node, "size", "" );
if ( !Db::isPaperIdOther( paperId ) )
if ( Db::isPaperIdKnown( paperId ) )
{
const Paper *paper = Db::lookupPaperFromId( paperId );
if ( paper == nullptr )
@@ -169,8 +171,9 @@ namespace glabels
{
Distance width = XmlUtil::getLengthAttr( node, "width", Distance(0) );
Distance height = XmlUtil::getLengthAttr( node, "height", Distance(0) );
Distance rollWidth = XmlUtil::getLengthAttr( node, "roll_width", Distance(0) );
tmplate = new Template( brand, part, description, paperId, width, height, isUserDefined );
tmplate = new Template( brand, part, description, paperId, width, height, rollWidth, isUserDefined );
}
for ( QDomNode child = node.firstChild(); !child.isNull(); child = child.nextSibling() )
@@ -195,6 +198,14 @@ namespace glabels
{
parseLabelCdNode( child.toElement(), tmplate );
}
else if ( child.toElement().tagName() == "Label-path" )
{
parseLabelPathNode( child.toElement(), tmplate );
}
else if ( child.toElement().tagName() == "Label-continuous" )
{
parseLabelContinuousNode( child.toElement(), tmplate );
}
else if ( !child.isComment() )
{
qWarning() << "Warning: bad element: "
@@ -303,6 +314,57 @@ namespace glabels
}
void XmlTemplateParser::parseLabelPathNode( const QDomElement &node, Template *tmplate )
{
QString id = XmlUtil::getStringAttr( node, "id", "0" );
Units dUnits = XmlUtil::getUnitsAttr( node, "d_units", Units::pc() );
QPainterPath d = XmlUtil::getPathDataAttr( node, "d", dUnits );
Distance xWaste, yWaste;
Distance waste = XmlUtil::getLengthAttr( node, "waste", Distance(-1) );
if ( waste >= Distance(0) )
{
xWaste = waste;
yWaste = waste;
}
else
{
xWaste = XmlUtil::getLengthAttr( node, "x_waste", Distance(0) );
yWaste = XmlUtil::getLengthAttr( node, "y_waste", Distance(0) );
}
Frame *frame = new FramePath( d, xWaste, yWaste, dUnits, id );
parseLabelNodeCommon( node, frame );
tmplate->addFrame( frame );
}
void XmlTemplateParser::parseLabelContinuousNode( const QDomElement &node, Template *tmplate )
{
QString id = XmlUtil::getStringAttr( node, "id", "0" );
Distance w = XmlUtil::getLengthAttr( node, "width", Distance(0) );
Distance h = XmlUtil::getLengthAttr( node, "height", Distance(0) );
Distance hMin = XmlUtil::getLengthAttr( node, "min_height", Distance(0) );
Distance hMax = XmlUtil::getLengthAttr( node, "max_height", Distance(0) );
Distance hDefault = XmlUtil::getLengthAttr( node, "default_height", Distance(0) );
Frame *frame = new FrameContinuous( w, hMin, hMax, hDefault, id );
if ( h > Distance(0) )
{
frame->setH( h );
}
parseLabelNodeCommon( node, frame );
tmplate->addFrame( frame );
}
void XmlTemplateParser::parseLabelNodeCommon( const QDomElement &node, Frame *frame )
{
for ( QDomNode child = node.firstChild(); !child.isNull(); child = child.nextSibling() )
@@ -352,15 +414,24 @@ namespace glabels
Distance dX = XmlUtil::getLengthAttr( node, "dx", Distance(0) );
Distance dY = XmlUtil::getLengthAttr( node, "dy", Distance(0) );
frame->addLayout( new Layout( nX, nY, x0, y0, dX, dY ) );
frame->addLayout( Layout( nX, nY, x0, y0, dX, dY ) );
}
void XmlTemplateParser::parseMarkupMarginNode( const QDomElement &node, Frame *frame )
{
Distance size = XmlUtil::getLengthAttr( node, "size", Distance(0) );
Distance size = XmlUtil::getLengthAttr( node, "size", Distance(0) );
Distance xSize = XmlUtil::getLengthAttr( node, "x_size", Distance(0) );
Distance ySize = XmlUtil::getLengthAttr( node, "y_size", Distance(0) );
frame->addMarkup( new MarkupMargin( frame, size ) );
if ( size > Distance(0) )
{
frame->addMarkup( new MarkupMargin( size ) );
}
else
{
frame->addMarkup( new MarkupMargin( xSize, ySize ) );
}
}
+2
View File
@@ -48,6 +48,8 @@ namespace glabels
void parseLabelEllipseNode( const QDomElement &node, Template *tmplate );
void parseLabelRoundNode( const QDomElement &node, Template *tmplate );
void parseLabelCdNode( const QDomElement &node, Template *tmplate );
void parseLabelPathNode( const QDomElement &node, Template *tmplate );
void parseLabelContinuousNode( const QDomElement &node, Template *tmplate );
void parseLabelNodeCommon( const QDomElement &node, Frame *frame );
void parseLayoutNode( const QDomElement &node, Frame *frame );
void parseMarkupMarginNode( const QDomElement &node, Frame *frame );
+188
View File
@@ -325,6 +325,149 @@ namespace glabels
}
Units XmlUtil::getUnitsAttr( const QDomElement& node,
const QString& name,
const Units& default_value )
{
init();
QString valueString = node.attribute( name, "" );
if ( valueString != "" )
{
return Units( valueString );
}
return default_value;
}
QPainterPath XmlUtil::getPathDataAttr( const QDomElement& node,
const QString& name,
const Units& units )
{
init();
QPainterPath d;
//
// Simple path data parser
//
QStringList tokens = node.attribute( name, "" ).split( " ", QString::SkipEmptyParts );
enum { CMD, MX, MY, MDX, MDY, LX, LY, LDX, LDY, HX, HDX, VY, VDY } state = CMD;
Distance x = 0;
Distance y = 0;
Distance dx = 0;
Distance dy = 0;
QPointF c;
for ( unsigned int i = 0; i < tokens.size(); i++ )
{
switch (state)
{
case CMD:
switch (tokens[i][0].unicode())
{
case 'M':
state = MX;
break;
case 'm':
state = MDX;
break;
case 'L':
state = LX;
break;
case 'l':
state = LDX;
break;
case 'H':
state = HX;
break;
case 'h':
state = HDX;
break;
case 'V':
state = VY;
break;
case 'v':
state = VDY;
break;
case 'Z':
case 'z':
d.closeSubpath();
state = CMD;
break;
}
break;
case MX:
x = Distance( tokens[i].toDouble(), units );
state = MY;
break;
case MY:
y = Distance( tokens[i].toDouble(), units );
d.moveTo( x.pt(), y.pt() );
state = CMD;
break;
case MDX:
dx = Distance( tokens[i].toDouble(), units );
state = MDY;
break;
case MDY:
dy = Distance( tokens[i].toDouble(), units );
c = d.currentPosition();
d.moveTo( c.x()+x.pt(), c.y()+y.pt() );
state = CMD;
break;
case LX:
x = Distance( tokens[i].toDouble(), units );
state = LY;
break;
case LY:
y = Distance( tokens[i].toDouble(), units );
d.lineTo( x.pt(), y.pt() );
state = CMD;
break;
case LDX:
dx = Distance( tokens[i].toDouble(), units );
state = LDY;
break;
case LDY:
dy = Distance( tokens[i].toDouble(), units );
c = d.currentPosition();
d.lineTo( c.x()+dx.pt(), c.y()+dy.pt() );
state = CMD;
break;
case HX:
x = Distance( tokens[i].toDouble(), units );
c = d.currentPosition();
d.lineTo( x.pt(), c.y() );
state = CMD;
break;
case HDX:
dx = Distance( tokens[i].toDouble(), units );
c = d.currentPosition();
d.lineTo( c.x()+dx.pt(), c.y() );
state = CMD;
break;
case VY:
y = Distance( tokens[i].toDouble(), units );
c = d.currentPosition();
d.lineTo( c.x(), y.pt() );
state = CMD;
break;
case VDY:
dy = Distance( tokens[i].toDouble(), units );
c = d.currentPosition();
d.lineTo( c.x(), c.y()+dy.pt() );
state = CMD;
break;
}
}
return d;
}
void XmlUtil::setStringAttr( QDomElement& node,
const QString& name,
const QString& value )
@@ -456,5 +599,50 @@ namespace glabels
}
void XmlUtil::setUnitsAttr( QDomElement& node,
const QString& name,
const Units& value )
{
node.setAttribute( name, value.toIdString() );
}
void XmlUtil::setPathDataAttr( QDomElement& node,
const QString& name,
const QPainterPath& path,
const Units& units )
{
QString pathString;
for ( int i = 0; i < path.elementCount(); i++ )
{
auto element = path.elementAt( i );
// QPainterPath is natively in pts
Distance x = Distance::pt( element.x );
Distance y = Distance::pt( element.y );
// Translate desired units for path data
double xValue = x.inUnits( units );
double yValue = y.inUnits( units );
if ( element.isMoveTo() )
{
pathString.append( QString( "M %1 %2" ).arg( xValue ).arg( yValue ) );
}
else if ( element.isLineTo() )
{
pathString.append( QString( "L %1 %2" ).arg( xValue ).arg( yValue ) );
}
if ( i < (path.elementCount() - 1) )
{
pathString.append( " " );
}
}
node.setAttribute( name, pathString );
}
}
}
+19
View File
@@ -26,6 +26,7 @@
#include <QDomElement>
#include <QFont>
#include <QPainterPath>
#include <QString>
#include <Qt>
#include <QTextOption>
@@ -91,6 +92,14 @@ namespace glabels
const QString& name,
QTextOption::WrapMode default_value );
static Units getUnitsAttr( const QDomElement& node,
const QString& name,
const Units& default_value );
static QPainterPath getPathDataAttr( const QDomElement& node,
const QString& name,
const Units& units );
static void setStringAttr( QDomElement& node,
const QString& name,
@@ -128,6 +137,16 @@ namespace glabels
const QString& name,
QTextOption::WrapMode value );
static void setUnitsAttr( QDomElement& node,
const QString& name,
const Units& value );
static void setPathDataAttr( QDomElement& node,
const QString& name,
const QPainterPath& value,
const Units& units );
private:
Units mUnits;
+41 -15
View File
@@ -7,49 +7,75 @@
*********************************************************************
Labels for the Brother QL-500/550/650 PC Label Printers
These templates are based on the exact media sizes and measurements
in version 1.1 of the 'Brother-QL-500-ptouch.ppd' file.
Currently only have templates for a few of the popular sizes.
REFERENCES:
Brother Industries, Ltd. (October 3, 2011), "Brother QL Series
Command Reference (QL-500/550/560/570/580N/650TD/700/1050/1060N)",
http://download.brother.com/welcome/docp000678/cv_qlseries_eng_raster_600.pdf
*********************************************************************
*********************************************************************
-->
<Template brand="Brother" part="DK-1201" size="Other" width="82pt" height="255pt" _description="Address labels">
<!-- ********************************************************************* -->
<!-- Die-cut Labels -->
<!-- ********************************************************************* -->
<Template brand="Brother" part="DK-1201" _description="Address labels"
size="roll" roll_width="32mm" width="28.96mm" height="89.83mm" >
<Meta category="label"/>
<Meta category="mail"/>
<Label-rectangle id="0" width="82pt" height="255pt" round="4pt" x_waste="0" y_waste="0">
<Markup-rect x1="4.25pt" y1="8.5pt" w="73.5pt" h="238pt" r="0" />
<Label-rectangle id="0" width="28.96mm" height="89.83mm" round="1.5mm" x_waste="0" y_waste="0">
<Markup-margin x_size="1.5mm" y_size="3.0mm" /> <!-- Print Area -->
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
</Label-rectangle>
</Template>
<Template brand="Brother" part="DK-1202" size="Other" width="176pt" height="283pt" _description="Shipping labels">
<Template brand="Brother" part="DK-1202" _description="Shipping labels"
size="roll" roll_width="67mm" width="61.98mm" height="99.82mm" >
<Meta category="label"/>
<Meta category="mail"/>
<Label-rectangle id="0" width="176pt" height="283pt" round="4pt" x_waste="0" y_waste="0">
<Markup-rect x1="4.25pt" y1="8.5pt" w="167.5pt" h="266pt" r="0" />
<Label-rectangle id="0" width="61.98mm" height="99.82mm" round="1.5mm" x_waste="0" y_waste="0">
<Markup-margin x_size="1.5mm" y_size="3.0mm" /> <!-- Print Area -->
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
</Label-rectangle>
</Template>
<Template brand="Brother" part="DK-1204" size="Other" width="48pt" height="153pt" _description="Multipurpose labels">
<Template brand="Brother" part="DK-1204" _description="Multipurpose labels"
size="roll" roll_width="20mm" width="17.02mm" height="53.85mm" >
<Meta category="label"/>
<Label-rectangle id="0" width="48pt" height="153pt" round="4pt" x_waste="0" y_waste="0">
<Markup-rect x1="4.25pt" y1="8.5pt" w="39.5pt" h="136pt" r="0" />
<Label-rectangle id="0" width="17.02mm" height="53.85mm" round="1.5mm" x_waste="0" y_waste="0">
<Markup-margin x_size="1.5mm" y_size="3.0mm" /> <!-- Print Area -->
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
</Label-rectangle>
</Template>
<Template brand="Brother" part="DK-1208" size="Other" width="108pt" height="255pt" _description="Address labels">
<Template brand="Brother" part="DK-1208" _description="Address labels"
size="roll" roll_width="43mm" width="38.01mm" height="89.83mm" >
<Meta category="label"/>
<Meta category="mail"/>
<Label-rectangle id="0" width="108pt" height="255pt" round="4pt" x_waste="0" y_waste="0">
<Markup-rect x1="4.25pt" y1="8.5pt" w="99.5pt" h="238pt" r="0" />
<Label-rectangle id="0" width="38.01mm" height="89.83mm" round="1.5mm" x_waste="0" y_waste="0">
<Markup-margin x_size="1.5mm" y_size="3.0mm" /> <!-- Print Area -->
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
</Label-rectangle>
</Template>
<!-- ********************************************************************* -->
<!-- Continuous Label Tapes -->
<!-- ********************************************************************* -->
<Template brand="Brother" part="DK-2205" _description="Continuous label tape"
size="roll" roll_width="67mm" width="61.98mm" >
<Meta category="label"/>
<Meta category="mail"/>
<Label-continuous id="0" width="61.98mm" min_height="25mm" max_height="1000mm" default_height="100mm" >
<Markup-margin x_size="1.5mm" y_size="3.0mm" />
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
</Label-continuous>
</Template>
</Glabels-templates>
+44 -17
View File
@@ -3,15 +3,54 @@
<Glabels-templates>
<!-- =================================================================== -->
<!-- Dymo 11352 Return address labels. -->
<!-- 28mm x 89mm Address labels. -->
<!-- =================================================================== -->
<Template brand="Dymo" part="11352" size="Other" width="25mm" height="54mm" _description="Return address labels">
<Template brand="Dymo" part="30252" _description="Address labels"
size="roll" roll_width="31mm" width="28mm" height="89mm" >
<Meta category="label" />
<Meta category="mail" />
<Label-rectangle id="0" width="28mm" height="89mm" round="1mm" x_waste="0mm" y_waste="0mm" >
<Markup-rect x1="1mm" y1="6mm" w="26mm" h="77mm" />
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0" />
</Label-rectangle>
</Template>
<Template brand="Dymo" part="99010" equiv="30252" />
<!-- =================================================================== -->
<!-- Postage stamp labels. -->
<!-- =================================================================== -->
<Template brand="Dymo" part="30915" _description="Postage stamp labels"
size="roll" roll_width="51mm" width="41mm" height="31mm" >
<Meta category="label" />
<Meta category="mail" />
<Label-path id="0" x_waste="0mm" y_waste="0mm" d_units="mm"
d="M 0 1
l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1
l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1
l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1
l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1 l 1 -1 l 1 1
l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1
l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1
l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1 l 1 1 l -1 1
H 0
Z" >
<Markup-rect x1="1mm" y1="6mm" w="33mm" h="24mm" />
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0" />
</Label-path>
</Template>
<!-- =================================================================== -->
<!-- 25mm x 54mm Return address labels. -->
<!-- =================================================================== -->
<Template brand="Dymo" part="11352" _description="Return address labels"
size="roll" roll_width="28mm" width="25mm" height="54mm" >
<Meta category="label"/>
<Meta category="mail"/>
<Meta product_url="http://global.dymo.com/deAT/Labels/S0722520.html"/>
<Label-rectangle id="0" width="25mm" height="54mm" round="0pt" x_waste="0pt" y_waste="0pt">
<Label-rectangle id="0" width="25mm" height="54mm" round="1mm" x_waste="0mm" y_waste="0mm">
<Markup-rect x1="1mm" y1="6mm" w="23mm" h="42mm" />
<Markup-margin size="0pt"/>
<Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="25mm" dy="54mm"/>
<Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0" />
</Label-rectangle>
</Template>
@@ -150,18 +189,6 @@
</Label-rectangle>
</Template>
<!-- =================================================================== -->
<!-- Dymo 99010 Address labels. -->
<!-- =================================================================== -->
<Template brand="Dymo" part="99010" size="Other" width="28mm" height="89mm" _description="Address labels">
<Meta category="label"/>
<Meta category="mail"/>
<Label-rectangle id="0" width="28mm" height="89mm" round="0pt" x_waste="0pt" y_waste="0pt">
<Markup-margin size="0pt"/>
<Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="28mm" dy="89mm"/>
</Label-rectangle>
</Template>
<!-- =================================================================== -->
<!-- Dymo 99012 Large address labels. -->
<!-- =================================================================== -->
+15 -3
View File
@@ -51,7 +51,6 @@
"(built-in |
gnu-barcode |
zint |
libiec16022 |
libqrencode")
-->
<!ENTITY % BC_STYLE_TYPE "CDATA">
@@ -181,7 +180,7 @@
<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!-- Template Section -->
<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!ENTITY % label_element "Label-rectangle | Label-round | Label-ellipse | Label-cd">
<!ENTITY % label_element "Label-rectangle | Label-round | Label-ellipse | Label-cd | Label-continuous">
<!ENTITY % markup_element "Markup-margin | Markup-line | Markup-circle | Markup-rect | Markup-ellipse">
<!ELEMENT Template (Meta*, (%label_element;)*)>
@@ -193,6 +192,7 @@
size %STRING_TYPE; #IMPLIED
width %LENGTH_TYPE; #IMPLIED
height %LENGTH_TYPE; #IMPLIED
roll_width %LENGTH_TYPE; #IMPLIED
description %STRING_TYPE; #IMPLIED
_description %STRING_TYPE; #IMPLIED
>
@@ -240,9 +240,21 @@
waste %LENGTH_TYPE; #IMPLIED
>
<!ELEMENT Label-continuous ((%markup_element;)*, Layout+)>
<!ATTLIST Label-continuous
id %STRING_TYPE; #REQUIRED
width %LENGTH_TYPE; #REQUIRED
min_height %LENGTH_TYPE; #REQUIRED
max_height %LENGTH_TYPE; #REQUIRED
default_height %LENGTH_TYPE; #REQUIRED
height %LENGTH_TYPE; #IMPLIED
>
<!ELEMENT Markup-margin EMPTY>
<!ATTLIST Markup-margin
size %LENGTH_TYPE; #REQUIRED
size %LENGTH_TYPE; #IMPLIED
x_size %LENGTH_TYPE; #IMPLIED
y_size %LENGTH_TYPE; #IMPLIED
>
<!ELEMENT Markup-line EMPTY>
+278 -173
View File
@@ -210,10 +210,17 @@
<context>
<name>Db</name>
<message>
<location filename="../model/Db.cpp" line="75"/>
<location filename="../model/Db.cpp" line="209"/>
<location filename="../model/Db.cpp" line="240"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../model/Db.cpp" line="213"/>
<location filename="../model/Db.cpp" line="236"/>
<source>Roll</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Factory</name>
@@ -267,12 +274,12 @@
<context>
<name>Frame</name>
<message>
<location filename="../model/Frame.cpp" line="124"/>
<location filename="../model/Frame.cpp" line="130"/>
<source>%1 x %2 (%3 per sheet)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../model/Frame.cpp" line="130"/>
<location filename="../model/Frame.cpp" line="136"/>
<source>%1 per sheet</source>
<translation type="unfinished"></translation>
</message>
@@ -280,17 +287,26 @@
<context>
<name>FrameCd</name>
<message>
<location filename="../model/FrameCd.cpp" line="150"/>
<location filename="../model/FrameCd.cpp" line="157"/>
<location filename="../model/FrameCd.cpp" line="141"/>
<location filename="../model/FrameCd.cpp" line="148"/>
<source>diameter</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FrameContinuous</name>
<message>
<location filename="../model/FrameContinuous.cpp" line="96"/>
<location filename="../model/FrameContinuous.cpp" line="103"/>
<source>wide</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FrameRound</name>
<message>
<location filename="../model/FrameRound.cpp" line="82"/>
<location filename="../model/FrameRound.cpp" line="89"/>
<location filename="../model/FrameRound.cpp" line="96"/>
<source>diameter</source>
<translation type="unfinished"></translation>
</message>
@@ -345,6 +361,11 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="64"/>
<source>Object properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="77"/>
<source>Text</source>
@@ -375,6 +396,17 @@
<source>Word</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="310"/>
<source>Anywhere</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="315"/>
<location filename="../glabels/ui/ObjectEditor.ui" line="787"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="338"/>
<source>Allow printing to shrink text to fit object</source>
@@ -454,17 +486,6 @@
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="315"/>
<location filename="../glabels/ui/ObjectEditor.ui" line="787"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="310"/>
<source>Anywhere</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="802"/>
<source>Select File...</source>
@@ -578,11 +599,6 @@
<source>Opacity:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="64"/>
<source>Object properties</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
@@ -708,82 +724,92 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="70"/>
<location filename="../glabels/ui/PropertiesView.ui" line="79"/>
<source>Product</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="84"/>
<location filename="../glabels/ui/PropertiesView.ui" line="93"/>
<source>Vendor:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="97"/>
<location filename="../glabels/ui/PropertiesView.ui" line="123"/>
<location filename="../glabels/ui/PropertiesView.ui" line="149"/>
<location filename="../glabels/ui/PropertiesView.ui" line="175"/>
<location filename="../glabels/ui/PropertiesView.ui" line="201"/>
<location filename="../glabels/ui/PropertiesView.ui" line="227"/>
<location filename="../glabels/ui/PropertiesView.ui" line="106"/>
<location filename="../glabels/ui/PropertiesView.ui" line="132"/>
<location filename="../glabels/ui/PropertiesView.ui" line="158"/>
<location filename="../glabels/ui/PropertiesView.ui" line="184"/>
<location filename="../glabels/ui/PropertiesView.ui" line="210"/>
<location filename="../glabels/ui/PropertiesView.ui" line="236"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="110"/>
<location filename="../glabels/ui/PropertiesView.ui" line="119"/>
<source>Part #:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="136"/>
<location filename="../glabels/ui/PropertiesView.ui" line="145"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="162"/>
<location filename="../glabels/ui/PropertiesView.ui" line="171"/>
<source>Page size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="188"/>
<location filename="../glabels/ui/PropertiesView.ui" line="197"/>
<source>Label size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="214"/>
<location filename="../glabels/ui/PropertiesView.ui" line="223"/>
<source>Layout:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="236"/>
<location filename="../glabels/ui/PropertiesView.ui" line="245"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select another product for this gLabels project.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="242"/>
<location filename="../glabels/ui/PropertiesView.ui" line="251"/>
<source>Change product</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="268"/>
<location filename="../glabels/ui/PropertiesView.ui" line="271"/>
<source>Adjustable Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="293"/>
<source>Label length:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="322"/>
<source>Orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="282"/>
<location filename="../glabels/ui/PropertiesView.ui" line="336"/>
<source>Select horizontal or vertical orientation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="292"/>
<location filename="../glabels/ui/PropertiesView.ui" line="346"/>
<source>Horizontal orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="301"/>
<location filename="../glabels/ui/PropertiesView.ui" line="355"/>
<source>Vertical orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="324"/>
<location filename="../glabels/ui/PropertiesView.ui" line="378"/>
<source>Similar Products</source>
<translation type="unfinished"></translation>
</message>
@@ -919,6 +945,16 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="46"/>
<source>6. Margin:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="53"/>
<source>1. Outer radius:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="73"/>
<source>4. Clipping height:</source>
@@ -930,8 +966,8 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="53"/>
<source>1. Outer radius:</source>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="87"/>
<source>3. Clipping width:</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -939,14 +975,17 @@
<source>5. Waste:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerContinuousPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="87"/>
<source>3. Clipping width:</source>
<location filename="../glabels/ui/TemplateDesignerContinuousPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="46"/>
<source>6. Margin:</source>
<location filename="../glabels/ui/TemplateDesignerContinuousPage.ui" line="35"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click &amp;quot;Cancel&amp;quot; to quit, or click &amp;quot;Back&amp;quot; to begin with a different product.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -957,11 +996,6 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="73"/>
<source>3. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="59"/>
<source>2. Height:</source>
@@ -972,6 +1006,11 @@
<source>1. Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="73"/>
<source>3. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="90"/>
<source>4. Margin:</source>
@@ -1057,13 +1096,13 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="70"/>
<source>Brand:</source>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="63"/>
<source>(e.g. &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="117"/>
<source>(e.g. Avery, Acme, ...)</source>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="70"/>
<source>Brand:</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1071,19 +1110,19 @@
<source>Part #:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="107"/>
<source>(e.g. 8163A)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="97"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="63"/>
<source>(e.g. &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</source>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="107"/>
<source>(e.g. 8163A)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="117"/>
<source>(e.g. Avery, Acme, ...)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1111,7 +1150,7 @@
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="82"/>
<source>Distance from top edge (y0);</source>
<source>Distance from top edge (y0):</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1138,18 +1177,36 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="34"/>
<source>Page size:</source>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="75"/>
<source>Roll width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="41"/>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="82"/>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="92"/>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="58"/>
<source>Height:</source>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="122"/>
<source>Page size:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerPathPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerPathPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPathPage.ui" line="35"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click &amp;quot;Cancel&amp;quot; to quit, or click &amp;quot;Back&amp;quot; to begin with a different product.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1161,33 +1218,43 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="83"/>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="114"/>
<source>2. Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="60"/>
<source>1. Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="36"/>
<source>2. Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="107"/>
<source>3. Corner radius</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="100"/>
<source>4. Horizontal waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="131"/>
<source>5. Vertical waste:</source>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="53"/>
<source>3. Corner radius</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="114"/>
<source>6. Margin:</source>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="121"/>
<source>6. Margin (X):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="138"/>
<source>7. Margin (Y):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="148"/>
<source>in</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="87"/>
<source>5. Vertical waste:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1199,8 +1266,8 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="93"/>
<source>2. Waste:</source>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="79"/>
<source>3. Margin</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1209,8 +1276,8 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="79"/>
<source>3. Margin</source>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="93"/>
<source>2. Waste:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1261,7 +1328,7 @@
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="74"/>
<source>Distance from top edge (y0);</source>
<source>Distance from top edge (y0):</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1362,43 +1429,43 @@
<context>
<name>glabels::File</name>
<message>
<location filename="../glabels/File.cpp" line="104"/>
<location filename="../glabels/File.cpp" line="105"/>
<source>gLabels - Open Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="106"/>
<location filename="../glabels/File.cpp" line="187"/>
<location filename="../glabels/File.cpp" line="107"/>
<location filename="../glabels/File.cpp" line="188"/>
<source>glabels files (*.glabels);;All files (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="133"/>
<location filename="../glabels/File.cpp" line="134"/>
<source>Unable to open &quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="133"/>
<location filename="../glabels/File.cpp" line="134"/>
<source>&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="185"/>
<location filename="../glabels/File.cpp" line="186"/>
<source>gLabels - Save Project As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="198"/>
<location filename="../glabels/File.cpp" line="199"/>
<source>Save Label As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="200"/>
<location filename="../glabels/File.cpp" line="201"/>
<source>%1 already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="201"/>
<location filename="../glabels/File.cpp" line="202"/>
<source>Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
@@ -1427,21 +1494,46 @@
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="87"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="88"/>
<source>Select &lt;b&gt;Edit&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="94"/>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="95"/>
<source>Select &lt;b&gt;Properties&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="101"/>
<source>Merge</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="102"/>
<source>Select &lt;b&gt;Merge&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="108"/>
<source>Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="109"/>
<source>Select &lt;b&gt;Print&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="233"/>
<source>&amp;New...</source>
@@ -1482,6 +1574,12 @@
<source>Save current gLabels project to a different name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="257"/>
<location filename="../glabels/MainWindow.cpp" line="558"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="259"/>
<source>Select project Edit mode</source>
@@ -1968,37 +2066,6 @@
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="257"/>
<location filename="../glabels/MainWindow.cpp" line="558"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="87"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="88"/>
<source>Select &lt;b&gt;Edit&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="95"/>
<source>Select &lt;b&gt;Properties&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="102"/>
<source>Select &lt;b&gt;Merge&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="109"/>
<source>Select &lt;b&gt;Print&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="572"/>
<source>&amp;View</source>
@@ -2354,7 +2421,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PrintView.cpp" line="85"/>
<location filename="../glabels/PrintView.cpp" line="93"/>
<source>(Will print a total of %1 items on %2 pages.)</source>
<translation type="unfinished"></translation>
</message>
@@ -2362,17 +2429,17 @@
<context>
<name>glabels::PropertiesView</name>
<message>
<location filename="../glabels/PropertiesView.cpp" line="44"/>
<location filename="../glabels/PropertiesView.cpp" line="45"/>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PropertiesView.cpp" line="191"/>
<location filename="../glabels/PropertiesView.cpp" line="224"/>
<source>Product Rotate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PropertiesView.cpp" line="220"/>
<location filename="../glabels/PropertiesView.cpp" line="253"/>
<source>Change Product</source>
<translation type="unfinished"></translation>
</message>
@@ -2380,7 +2447,7 @@
<context>
<name>glabels::SimplePreview</name>
<message>
<location filename="../glabels/SimplePreview.cpp" line="238"/>
<location filename="../glabels/SimplePreview.cpp" line="245"/>
<source>Up</source>
<translation type="unfinished"></translation>
</message>
@@ -2388,12 +2455,20 @@
<context>
<name>glabels::TemplateDesigner</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="111"/>
<location filename="../glabels/TemplateDesigner.cpp" line="115"/>
<source>Product Template Designer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="455"/>
<location filename="../glabels/TemplateDesigner.cpp" line="185"/>
<location filename="../glabels/TemplateDesigner.cpp" line="195"/>
<location filename="../glabels/TemplateDesigner.cpp" line="205"/>
<location filename="../glabels/TemplateDesigner.cpp" line="215"/>
<source>Roll</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="508"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
@@ -2401,23 +2476,23 @@
<context>
<name>glabels::TemplateDesignerApplyPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1386"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1413"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1534"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1561"/>
<source>Save Product Template</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1387"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1535"/>
<source>Click &quot;Save&quot; to save your custom product template!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1415"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1563"/>
<source>User product template (%1 %2) already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1416"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1564"/>
<source>Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
@@ -2425,25 +2500,38 @@
<context>
<name>glabels::TemplateDesignerCdPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="981"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1081"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="982"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1082"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerContinuousPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1191"/>
<source>Unsupported Product Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1192"/>
<source>Continuous tape product templates are not currently supported by the Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerEllipsePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="909"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1009"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="910"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1010"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
@@ -2451,12 +2539,12 @@
<context>
<name>glabels::TemplateDesignerIntroPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="553"/>
<location filename="../glabels/TemplateDesigner.cpp" line="608"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="554"/>
<location filename="../glabels/TemplateDesigner.cpp" line="609"/>
<source>Welcome to the gLabels Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
@@ -2464,12 +2552,12 @@
<context>
<name>glabels::TemplateDesignerNLayoutsPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1067"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1215"/>
<source>Number of Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1068"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1216"/>
<source>Please select the number of layouts required.</source>
<translation type="unfinished"></translation>
</message>
@@ -2477,17 +2565,17 @@
<context>
<name>glabels::TemplateDesignerNamePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="604"/>
<location filename="../glabels/TemplateDesigner.cpp" line="672"/>
<source>Name and Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="605"/>
<location filename="../glabels/TemplateDesigner.cpp" line="673"/>
<source>Please enter the following identifying information about the product.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="636"/>
<location filename="../glabels/TemplateDesigner.cpp" line="704"/>
<source>Brand and part number match an existing built-in product template!</source>
<translation type="unfinished"></translation>
</message>
@@ -2495,12 +2583,12 @@
<context>
<name>glabels::TemplateDesignerOneLayoutPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1098"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1246"/>
<source>Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1099"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1247"/>
<source>Please enter parameters for your single layout.</source>
<translation type="unfinished"></translation>
</message>
@@ -2508,36 +2596,53 @@
<context>
<name>glabels::TemplateDesignerPageSizePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="654"/>
<location filename="../glabels/TemplateDesigner.cpp" line="722"/>
<source>Page Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="655"/>
<location filename="../glabels/TemplateDesigner.cpp" line="723"/>
<source>Please select the product page size.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="660"/>
<location filename="../glabels/TemplateDesigner.cpp" line="668"/>
<location filename="../glabels/TemplateDesigner.cpp" line="674"/>
<location filename="../glabels/TemplateDesigner.cpp" line="676"/>
<location filename="../glabels/TemplateDesigner.cpp" line="708"/>
<location filename="../glabels/TemplateDesigner.cpp" line="715"/>
<location filename="../glabels/TemplateDesigner.cpp" line="716"/>
<location filename="../glabels/TemplateDesigner.cpp" line="728"/>
<location filename="../glabels/TemplateDesigner.cpp" line="733"/>
<location filename="../glabels/TemplateDesigner.cpp" line="754"/>
<location filename="../glabels/TemplateDesigner.cpp" line="787"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="729"/>
<location filename="../glabels/TemplateDesigner.cpp" line="734"/>
<location filename="../glabels/TemplateDesigner.cpp" line="788"/>
<source>Roll</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerPathPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1167"/>
<source>Unsupported Product Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1168"/>
<source>Path based product templates are not currently supported by the Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerRectPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="758"/>
<location filename="../glabels/TemplateDesigner.cpp" line="851"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="759"/>
<location filename="../glabels/TemplateDesigner.cpp" line="852"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
@@ -2545,12 +2650,12 @@
<context>
<name>glabels::TemplateDesignerRoundPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="844"/>
<location filename="../glabels/TemplateDesigner.cpp" line="944"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="845"/>
<location filename="../glabels/TemplateDesigner.cpp" line="945"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
@@ -2558,12 +2663,12 @@
<context>
<name>glabels::TemplateDesignerShapePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="725"/>
<location filename="../glabels/TemplateDesigner.cpp" line="818"/>
<source>Product Shape</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="726"/>
<location filename="../glabels/TemplateDesigner.cpp" line="819"/>
<source>Please select the basic product shape.</source>
<translation type="unfinished"></translation>
</message>
@@ -2571,12 +2676,12 @@
<context>
<name>glabels::TemplateDesignerTwoLayoutPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1220"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1368"/>
<source>Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1221"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1369"/>
<source>Please enter parameters for your two layouts.</source>
<translation type="unfinished"></translation>
</message>
@@ -3049,7 +3154,7 @@
<context>
<name>glabels::model::Model</name>
<message>
<location filename="../model/Model.cpp" line="260"/>
<location filename="../model/Model.cpp" line="295"/>
<source>Untitled</source>
<translation type="unfinished"></translation>
</message>
+1031 -400
View File
File diff suppressed because it is too large Load Diff
+1031 -271
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1031 -271
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1030 -315
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1030 -324
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1031 -336
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1030 -291
View File
File diff suppressed because it is too large Load Diff
+1028 -342
View File
File diff suppressed because it is too large Load Diff
+1031 -271
View File
File diff suppressed because it is too large Load Diff
+1028 -327
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1031 -384
View File
File diff suppressed because it is too large Load Diff
+1031 -271
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1031 -275
View File
File diff suppressed because it is too large Load Diff
+1031 -271
View File
File diff suppressed because it is too large Load Diff
+1030 -272
View File
File diff suppressed because it is too large Load Diff
+1031 -271
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+1030 -270
View File
File diff suppressed because it is too large Load Diff
+279 -174
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="uk" sourcelanguage="en_US">
<TS version="2.1" language="uk_UA">
<context>
<name>AboutDialog</name>
<message>
@@ -210,10 +210,17 @@
<context>
<name>Db</name>
<message>
<location filename="../model/Db.cpp" line="75"/>
<location filename="../model/Db.cpp" line="209"/>
<location filename="../model/Db.cpp" line="240"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../model/Db.cpp" line="213"/>
<location filename="../model/Db.cpp" line="236"/>
<source>Roll</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Factory</name>
@@ -267,12 +274,12 @@
<context>
<name>Frame</name>
<message>
<location filename="../model/Frame.cpp" line="124"/>
<location filename="../model/Frame.cpp" line="130"/>
<source>%1 x %2 (%3 per sheet)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../model/Frame.cpp" line="130"/>
<location filename="../model/Frame.cpp" line="136"/>
<source>%1 per sheet</source>
<translation type="unfinished"></translation>
</message>
@@ -280,17 +287,26 @@
<context>
<name>FrameCd</name>
<message>
<location filename="../model/FrameCd.cpp" line="150"/>
<location filename="../model/FrameCd.cpp" line="157"/>
<location filename="../model/FrameCd.cpp" line="141"/>
<location filename="../model/FrameCd.cpp" line="148"/>
<source>diameter</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FrameContinuous</name>
<message>
<location filename="../model/FrameContinuous.cpp" line="96"/>
<location filename="../model/FrameContinuous.cpp" line="103"/>
<source>wide</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FrameRound</name>
<message>
<location filename="../model/FrameRound.cpp" line="82"/>
<location filename="../model/FrameRound.cpp" line="89"/>
<location filename="../model/FrameRound.cpp" line="96"/>
<source>diameter</source>
<translation type="unfinished"></translation>
</message>
@@ -345,6 +361,11 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="64"/>
<source>Object properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="77"/>
<source>Text</source>
@@ -375,6 +396,17 @@
<source>Word</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="310"/>
<source>Anywhere</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="315"/>
<location filename="../glabels/ui/ObjectEditor.ui" line="787"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="338"/>
<source>Allow printing to shrink text to fit object</source>
@@ -454,17 +486,6 @@
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="315"/>
<location filename="../glabels/ui/ObjectEditor.ui" line="787"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="310"/>
<source>Anywhere</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="802"/>
<source>Select File...</source>
@@ -578,11 +599,6 @@
<source>Opacity:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/ObjectEditor.ui" line="64"/>
<source>Object properties</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
@@ -708,82 +724,92 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="70"/>
<location filename="../glabels/ui/PropertiesView.ui" line="79"/>
<source>Product</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="84"/>
<location filename="../glabels/ui/PropertiesView.ui" line="93"/>
<source>Vendor:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="97"/>
<location filename="../glabels/ui/PropertiesView.ui" line="123"/>
<location filename="../glabels/ui/PropertiesView.ui" line="149"/>
<location filename="../glabels/ui/PropertiesView.ui" line="175"/>
<location filename="../glabels/ui/PropertiesView.ui" line="201"/>
<location filename="../glabels/ui/PropertiesView.ui" line="227"/>
<location filename="../glabels/ui/PropertiesView.ui" line="106"/>
<location filename="../glabels/ui/PropertiesView.ui" line="132"/>
<location filename="../glabels/ui/PropertiesView.ui" line="158"/>
<location filename="../glabels/ui/PropertiesView.ui" line="184"/>
<location filename="../glabels/ui/PropertiesView.ui" line="210"/>
<location filename="../glabels/ui/PropertiesView.ui" line="236"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="110"/>
<location filename="../glabels/ui/PropertiesView.ui" line="119"/>
<source>Part #:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="136"/>
<location filename="../glabels/ui/PropertiesView.ui" line="145"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="162"/>
<location filename="../glabels/ui/PropertiesView.ui" line="171"/>
<source>Page size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="188"/>
<location filename="../glabels/ui/PropertiesView.ui" line="197"/>
<source>Label size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="214"/>
<location filename="../glabels/ui/PropertiesView.ui" line="223"/>
<source>Layout:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="236"/>
<location filename="../glabels/ui/PropertiesView.ui" line="245"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select another product for this gLabels project.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="242"/>
<location filename="../glabels/ui/PropertiesView.ui" line="251"/>
<source>Change product</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="268"/>
<location filename="../glabels/ui/PropertiesView.ui" line="271"/>
<source>Adjustable Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="293"/>
<source>Label length:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="322"/>
<source>Orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="282"/>
<location filename="../glabels/ui/PropertiesView.ui" line="336"/>
<source>Select horizontal or vertical orientation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="292"/>
<location filename="../glabels/ui/PropertiesView.ui" line="346"/>
<source>Horizontal orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="301"/>
<location filename="../glabels/ui/PropertiesView.ui" line="355"/>
<source>Vertical orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/PropertiesView.ui" line="324"/>
<location filename="../glabels/ui/PropertiesView.ui" line="378"/>
<source>Similar Products</source>
<translation type="unfinished"></translation>
</message>
@@ -919,6 +945,16 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="46"/>
<source>6. Margin:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="53"/>
<source>1. Outer radius:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="73"/>
<source>4. Clipping height:</source>
@@ -930,8 +966,8 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="53"/>
<source>1. Outer radius:</source>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="87"/>
<source>3. Clipping width:</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -939,14 +975,17 @@
<source>5. Waste:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerContinuousPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="87"/>
<source>3. Clipping width:</source>
<location filename="../glabels/ui/TemplateDesignerContinuousPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="46"/>
<source>6. Margin:</source>
<location filename="../glabels/ui/TemplateDesignerContinuousPage.ui" line="35"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click &amp;quot;Cancel&amp;quot; to quit, or click &amp;quot;Back&amp;quot; to begin with a different product.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -957,11 +996,6 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="73"/>
<source>3. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="59"/>
<source>2. Height:</source>
@@ -972,6 +1006,11 @@
<source>1. Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="73"/>
<source>3. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="90"/>
<source>4. Margin:</source>
@@ -1057,13 +1096,13 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="70"/>
<source>Brand:</source>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="63"/>
<source>(e.g. &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="117"/>
<source>(e.g. Avery, Acme, ...)</source>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="70"/>
<source>Brand:</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1071,19 +1110,19 @@
<source>Part #:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="107"/>
<source>(e.g. 8163A)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="97"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="63"/>
<source>(e.g. &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</source>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="107"/>
<source>(e.g. 8163A)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="117"/>
<source>(e.g. Avery, Acme, ...)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1111,7 +1150,7 @@
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="82"/>
<source>Distance from top edge (y0);</source>
<source>Distance from top edge (y0):</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1138,18 +1177,36 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="34"/>
<source>Page size:</source>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="75"/>
<source>Roll width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="41"/>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="82"/>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="92"/>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="58"/>
<source>Height:</source>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="122"/>
<source>Page size:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerPathPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerPathPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPathPage.ui" line="35"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click &amp;quot;Cancel&amp;quot; to quit, or click &amp;quot;Back&amp;quot; to begin with a different product.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1161,33 +1218,43 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="83"/>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="114"/>
<source>2. Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="60"/>
<source>1. Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="36"/>
<source>2. Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="107"/>
<source>3. Corner radius</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="100"/>
<source>4. Horizontal waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="131"/>
<source>5. Vertical waste:</source>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="53"/>
<source>3. Corner radius</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="114"/>
<source>6. Margin:</source>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="121"/>
<source>6. Margin (X):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="138"/>
<source>7. Margin (Y):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="148"/>
<source>in</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="87"/>
<source>5. Vertical waste:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1199,8 +1266,8 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="93"/>
<source>2. Waste:</source>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="79"/>
<source>3. Margin</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1209,8 +1276,8 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="79"/>
<source>3. Margin</source>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="93"/>
<source>2. Waste:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1261,7 +1328,7 @@
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="74"/>
<source>Distance from top edge (y0);</source>
<source>Distance from top edge (y0):</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1362,43 +1429,43 @@
<context>
<name>glabels::File</name>
<message>
<location filename="../glabels/File.cpp" line="104"/>
<location filename="../glabels/File.cpp" line="105"/>
<source>gLabels - Open Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="106"/>
<location filename="../glabels/File.cpp" line="187"/>
<location filename="../glabels/File.cpp" line="107"/>
<location filename="../glabels/File.cpp" line="188"/>
<source>glabels files (*.glabels);;All files (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="133"/>
<location filename="../glabels/File.cpp" line="134"/>
<source>Unable to open &quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="133"/>
<location filename="../glabels/File.cpp" line="134"/>
<source>&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="185"/>
<location filename="../glabels/File.cpp" line="186"/>
<source>gLabels - Save Project As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="198"/>
<location filename="../glabels/File.cpp" line="199"/>
<source>Save Label As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="200"/>
<location filename="../glabels/File.cpp" line="201"/>
<source>%1 already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="201"/>
<location filename="../glabels/File.cpp" line="202"/>
<source>Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
@@ -1427,21 +1494,46 @@
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="87"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="88"/>
<source>Select &lt;b&gt;Edit&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="94"/>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="95"/>
<source>Select &lt;b&gt;Properties&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="101"/>
<source>Merge</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="102"/>
<source>Select &lt;b&gt;Merge&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="108"/>
<source>Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="109"/>
<source>Select &lt;b&gt;Print&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="233"/>
<source>&amp;New...</source>
@@ -1482,6 +1574,12 @@
<source>Save current gLabels project to a different name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="257"/>
<location filename="../glabels/MainWindow.cpp" line="558"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="259"/>
<source>Select project Edit mode</source>
@@ -1968,37 +2066,6 @@
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="257"/>
<location filename="../glabels/MainWindow.cpp" line="558"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="87"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="88"/>
<source>Select &lt;b&gt;Edit&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="95"/>
<source>Select &lt;b&gt;Properties&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="102"/>
<source>Select &lt;b&gt;Merge&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="109"/>
<source>Select &lt;b&gt;Print&lt;/b&gt; mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="572"/>
<source>&amp;View</source>
@@ -2354,7 +2421,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PrintView.cpp" line="85"/>
<location filename="../glabels/PrintView.cpp" line="93"/>
<source>(Will print a total of %1 items on %2 pages.)</source>
<translation type="unfinished"></translation>
</message>
@@ -2362,17 +2429,17 @@
<context>
<name>glabels::PropertiesView</name>
<message>
<location filename="../glabels/PropertiesView.cpp" line="44"/>
<location filename="../glabels/PropertiesView.cpp" line="45"/>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PropertiesView.cpp" line="191"/>
<location filename="../glabels/PropertiesView.cpp" line="224"/>
<source>Product Rotate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PropertiesView.cpp" line="220"/>
<location filename="../glabels/PropertiesView.cpp" line="253"/>
<source>Change Product</source>
<translation type="unfinished"></translation>
</message>
@@ -2380,7 +2447,7 @@
<context>
<name>glabels::SimplePreview</name>
<message>
<location filename="../glabels/SimplePreview.cpp" line="238"/>
<location filename="../glabels/SimplePreview.cpp" line="245"/>
<source>Up</source>
<translation type="unfinished"></translation>
</message>
@@ -2388,12 +2455,20 @@
<context>
<name>glabels::TemplateDesigner</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="111"/>
<location filename="../glabels/TemplateDesigner.cpp" line="115"/>
<source>Product Template Designer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="455"/>
<location filename="../glabels/TemplateDesigner.cpp" line="185"/>
<location filename="../glabels/TemplateDesigner.cpp" line="195"/>
<location filename="../glabels/TemplateDesigner.cpp" line="205"/>
<location filename="../glabels/TemplateDesigner.cpp" line="215"/>
<source>Roll</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="508"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
@@ -2401,23 +2476,23 @@
<context>
<name>glabels::TemplateDesignerApplyPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1386"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1413"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1534"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1561"/>
<source>Save Product Template</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1387"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1535"/>
<source>Click &quot;Save&quot; to save your custom product template!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1415"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1563"/>
<source>User product template (%1 %2) already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1416"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1564"/>
<source>Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
@@ -2425,25 +2500,38 @@
<context>
<name>glabels::TemplateDesignerCdPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="981"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1081"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="982"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1082"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerContinuousPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1191"/>
<source>Unsupported Product Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1192"/>
<source>Continuous tape product templates are not currently supported by the Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerEllipsePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="909"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1009"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="910"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1010"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
@@ -2451,12 +2539,12 @@
<context>
<name>glabels::TemplateDesignerIntroPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="553"/>
<location filename="../glabels/TemplateDesigner.cpp" line="608"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="554"/>
<location filename="../glabels/TemplateDesigner.cpp" line="609"/>
<source>Welcome to the gLabels Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
@@ -2464,12 +2552,12 @@
<context>
<name>glabels::TemplateDesignerNLayoutsPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1067"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1215"/>
<source>Number of Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1068"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1216"/>
<source>Please select the number of layouts required.</source>
<translation type="unfinished"></translation>
</message>
@@ -2477,17 +2565,17 @@
<context>
<name>glabels::TemplateDesignerNamePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="604"/>
<location filename="../glabels/TemplateDesigner.cpp" line="672"/>
<source>Name and Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="605"/>
<location filename="../glabels/TemplateDesigner.cpp" line="673"/>
<source>Please enter the following identifying information about the product.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="636"/>
<location filename="../glabels/TemplateDesigner.cpp" line="704"/>
<source>Brand and part number match an existing built-in product template!</source>
<translation type="unfinished"></translation>
</message>
@@ -2495,12 +2583,12 @@
<context>
<name>glabels::TemplateDesignerOneLayoutPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1098"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1246"/>
<source>Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1099"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1247"/>
<source>Please enter parameters for your single layout.</source>
<translation type="unfinished"></translation>
</message>
@@ -2508,36 +2596,53 @@
<context>
<name>glabels::TemplateDesignerPageSizePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="654"/>
<location filename="../glabels/TemplateDesigner.cpp" line="722"/>
<source>Page Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="655"/>
<location filename="../glabels/TemplateDesigner.cpp" line="723"/>
<source>Please select the product page size.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="660"/>
<location filename="../glabels/TemplateDesigner.cpp" line="668"/>
<location filename="../glabels/TemplateDesigner.cpp" line="674"/>
<location filename="../glabels/TemplateDesigner.cpp" line="676"/>
<location filename="../glabels/TemplateDesigner.cpp" line="708"/>
<location filename="../glabels/TemplateDesigner.cpp" line="715"/>
<location filename="../glabels/TemplateDesigner.cpp" line="716"/>
<location filename="../glabels/TemplateDesigner.cpp" line="728"/>
<location filename="../glabels/TemplateDesigner.cpp" line="733"/>
<location filename="../glabels/TemplateDesigner.cpp" line="754"/>
<location filename="../glabels/TemplateDesigner.cpp" line="787"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="729"/>
<location filename="../glabels/TemplateDesigner.cpp" line="734"/>
<location filename="../glabels/TemplateDesigner.cpp" line="788"/>
<source>Roll</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerPathPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1167"/>
<source>Unsupported Product Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1168"/>
<source>Path based product templates are not currently supported by the Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerRectPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="758"/>
<location filename="../glabels/TemplateDesigner.cpp" line="851"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="759"/>
<location filename="../glabels/TemplateDesigner.cpp" line="852"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
@@ -2545,12 +2650,12 @@
<context>
<name>glabels::TemplateDesignerRoundPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="844"/>
<location filename="../glabels/TemplateDesigner.cpp" line="944"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="845"/>
<location filename="../glabels/TemplateDesigner.cpp" line="945"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
@@ -2558,12 +2663,12 @@
<context>
<name>glabels::TemplateDesignerShapePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="725"/>
<location filename="../glabels/TemplateDesigner.cpp" line="818"/>
<source>Product Shape</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="726"/>
<location filename="../glabels/TemplateDesigner.cpp" line="819"/>
<source>Please select the basic product shape.</source>
<translation type="unfinished"></translation>
</message>
@@ -2571,12 +2676,12 @@
<context>
<name>glabels::TemplateDesignerTwoLayoutPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1220"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1368"/>
<source>Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1221"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1369"/>
<source>Please enter parameters for your two layouts.</source>
<translation type="unfinished"></translation>
</message>
@@ -3049,7 +3154,7 @@
<context>
<name>glabels::model::Model</name>
<message>
<location filename="../model/Model.cpp" line="260"/>
<location filename="../model/Model.cpp" line="295"/>
<source>Untitled</source>
<translation type="unfinished"></translation>
</message>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+96 -88
View File
@@ -27,6 +27,14 @@
<source>Barcode labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bookplate labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottle/jar labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Business card CD labels</source>
<translation type="unfinished"></translation>
@@ -63,6 +71,18 @@
<source>CD/DVD center hub labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD insert (back)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD insert (front)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD labels</source>
<translation type="unfinished"></translation>
@@ -79,6 +99,10 @@
<source>CD/DVD labels (rectangles)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD labels (spine labels)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD labels (spine only)</source>
<translation type="unfinished"></translation>
@@ -91,6 +115,10 @@
<source>CD/DVD tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Candle labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Candy labels</source>
<translation type="unfinished"></translation>
@@ -99,6 +127,10 @@
<source>Cassette labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Classification labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Coffee and tea labels</source>
<translation type="unfinished"></translation>
@@ -111,6 +143,10 @@
<source>DLT labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DVD insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Digital media labels</source>
<translation type="unfinished"></translation>
@@ -123,6 +159,10 @@
<source>Diskette labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Divider labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Elliptical labels</source>
<translation type="unfinished"></translation>
@@ -131,6 +171,10 @@
<source>File folder labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Filing labels</source>
<translation type="unfinished"></translation>
@@ -175,6 +219,10 @@
<source>ID labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Index cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Labels</source>
<translation type="unfinished"></translation>
@@ -183,6 +231,14 @@
<source>Large address labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Large arch file labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Large round labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Lever arch file labels</source>
<translation type="unfinished"></translation>
@@ -263,6 +319,14 @@
<source>Photo products</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Post cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Postage stamp labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Printable mousepad</source>
<translation type="unfinished"></translation>
@@ -299,6 +363,10 @@
<source>Target stickers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tent cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trapezoid labels</source>
<translation type="unfinished"></translation>
@@ -307,6 +375,26 @@
<source>Triangular labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tube labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS face labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS-C insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Video labels (face only)</source>
<translation type="unfinished"></translation>
@@ -319,94 +407,6 @@
<source>Video tape spine labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Zip disc labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bookplate labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottle/jar labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Candle labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Classification labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS face labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Large arch file labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tube labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD insert (back)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD insert (front)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD labels (spine labels)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DVD insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Divider labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Index cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Large round labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Post cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tent cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VHS-C insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Video-8 insert</source>
<translation type="unfinished"></translation>
@@ -419,5 +419,13 @@
<source>Zip disc insert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Zip disc labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continuous label tape</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
+41 -43
View File
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ar" sourcelanguage="en_US">
<TS version="2.1" language="ar_EG">
<context>
<name>XmlStrings</name>
<message>
<source>Address labels</source>
<translation type="unfinished">ملصقات عناوين</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Any card</source>
<translation type="unfinished">كل البطاقات</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Any label</source>
<translation type="unfinished">كل الملصقات</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Arch file inserts</source>
@@ -45,7 +45,7 @@
</message>
<message>
<source>Business cards</source>
<translation type="unfinished">بطاقة رجال الأعمال</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD booklet</source>
@@ -85,7 +85,7 @@
</message>
<message>
<source>CD/DVD labels</source>
<translation type="unfinished">ملصقات سيدي/دفيدي</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD labels (disc labels)</source>
@@ -109,7 +109,7 @@
</message>
<message>
<source>CD/DVD or other media</source>
<translation type="unfinished">بطاقات أقراص حاسب</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD tray</source>
@@ -157,7 +157,7 @@
</message>
<message>
<source>Diskette labels</source>
<translation type="unfinished">ملصقات الأقراص المرنة</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Divider labels</source>
@@ -165,7 +165,7 @@
</message>
<message>
<source>Elliptical labels</source>
<translation type="unfinished">ملصقات بيضاوية</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>File folder labels</source>
@@ -181,21 +181,19 @@
</message>
<message>
<source>Floppy disk labels</source>
<translation type="unfinished">ملصقات القرص المرن</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Flyer paper</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Foldable business cards</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Foldable cards</source>
<translation type="unfinished">بطاقات مطوية</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Full face CD/DVD labels</source>
@@ -211,7 +209,7 @@
</message>
<message>
<source>Greeting cards</source>
<translation type="unfinished">بطاقات تهنئة</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hanging folder labels</source>
@@ -227,7 +225,7 @@
</message>
<message>
<source>Labels</source>
<translation type="unfinished">الملصقات</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Large address labels</source>
@@ -251,11 +249,11 @@
</message>
<message>
<source>Mailing labels</source>
<translation type="unfinished">ملصقات بريدية</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mailing/shipping products</source>
<translation type="unfinished">مغلفات البريد/الشحن</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Medical chart labels</source>
@@ -263,7 +261,7 @@
</message>
<message>
<source>Membership cards</source>
<translation type="unfinished">بطاقات عضوية</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metal tin container labels</source>
@@ -275,8 +273,7 @@
</message>
<message>
<source>Mini Disc labels</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mini address labels</source>
@@ -300,8 +297,7 @@
</message>
<message>
<source>Name plates</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nutritional labels</source>
@@ -313,29 +309,31 @@
</message>
<message>
<source>Passport photo labels</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Photo labels</source>
<translation type="unfinished">ملصقات الصور</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Photo products</source>
<translation type="unfinished">صور</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Post cards</source>
<translation type="unfinished">بطاقة بريدية</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Postage stamp labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Printable mousepad</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rectangular labels</source>
<translation type="unfinished">ملصقات مستطيلة</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Return address labels</source>
@@ -343,12 +341,11 @@
</message>
<message>
<source>Round labels</source>
<translation type="unfinished">ملصقات دائرية</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>SD card labels</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Seal labels</source>
@@ -356,11 +353,11 @@
</message>
<message>
<source>Shipping labels</source>
<translation type="unfinished">ملصقات شحن</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Square labels</source>
<translation type="unfinished">ملصقات مربعة</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Target stickers</source>
@@ -372,13 +369,11 @@
</message>
<message>
<source>Trapezoid labels</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Triangular labels</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tube labels</source>
@@ -426,8 +421,11 @@
</message>
<message>
<source>Zip disc labels</source>
<translation type="unfinished">
</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continuous label tape</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
+41 -33
View File
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="bs" sourcelanguage="en_US">
<TS version="2.1" language="bs_BA">
<context>
<name>XmlStrings</name>
<message>
<source>Address labels</source>
<translation type="unfinished">Adresne naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Any card</source>
<translation type="unfinished">Bilo koja karta</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Any label</source>
<translation type="unfinished">Bilo koja oznaka</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Arch file inserts</source>
@@ -45,7 +45,7 @@
</message>
<message>
<source>Business cards</source>
<translation type="unfinished">Vizit karta</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD booklet</source>
@@ -85,7 +85,7 @@
</message>
<message>
<source>CD/DVD labels</source>
<translation type="unfinished">CD/DVD naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD labels (disc labels)</source>
@@ -109,7 +109,7 @@
</message>
<message>
<source>CD/DVD or other media</source>
<translation type="unfinished">CD/DVD ili drugi medij</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>CD/DVD tray</source>
@@ -157,7 +157,7 @@
</message>
<message>
<source>Diskette labels</source>
<translation type="unfinished">Dikseta naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Divider labels</source>
@@ -165,7 +165,7 @@
</message>
<message>
<source>Elliptical labels</source>
<translation type="unfinished">Eliprična oznaka</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>File folder labels</source>
@@ -181,19 +181,19 @@
</message>
<message>
<source>Floppy disk labels</source>
<translation type="unfinished">Floppy disk naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Flyer paper</source>
<translation type="unfinished">Letak papir</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Foldable business cards</source>
<translation type="unfinished">Sklopive vizit karte</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Foldable cards</source>
<translation type="unfinished">Sklopive karte</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Full face CD/DVD labels</source>
@@ -209,7 +209,7 @@
</message>
<message>
<source>Greeting cards</source>
<translation type="unfinished">Čestitke</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hanging folder labels</source>
@@ -225,7 +225,7 @@
</message>
<message>
<source>Labels</source>
<translation type="unfinished">Oznake</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Large address labels</source>
@@ -249,11 +249,11 @@
</message>
<message>
<source>Mailing labels</source>
<translation type="unfinished">Slanje naljepnica</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mailing/shipping products</source>
<translation type="unfinished">Slanje/Otpremanje proizvoda</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Medical chart labels</source>
@@ -261,7 +261,7 @@
</message>
<message>
<source>Membership cards</source>
<translation type="unfinished">Članske kartice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metal tin container labels</source>
@@ -273,7 +273,7 @@
</message>
<message>
<source>Mini Disc labels</source>
<translation type="unfinished">Mini Disk naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mini address labels</source>
@@ -297,7 +297,7 @@
</message>
<message>
<source>Name plates</source>
<translation type="unfinished">Ploče sa imenima</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nutritional labels</source>
@@ -309,27 +309,31 @@
</message>
<message>
<source>Passport photo labels</source>
<translation type="unfinished">Naljepnice za sliku pasoša</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Photo labels</source>
<translation type="unfinished">Foto naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Photo products</source>
<translation type="unfinished">Foto proizvodi</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Post cards</source>
<translation type="unfinished">Poštanske karte</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Postage stamp labels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Printable mousepad</source>
<translation type="unfinished">Pogdloga za miša koja se može štampati</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rectangular labels</source>
<translation type="unfinished">Pravougaona oznaka</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Return address labels</source>
@@ -337,11 +341,11 @@
</message>
<message>
<source>Round labels</source>
<translation type="unfinished">Okrugla oznaka</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>SD card labels</source>
<translation type="unfinished">Naljepnice za SD kartice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Seal labels</source>
@@ -349,11 +353,11 @@
</message>
<message>
<source>Shipping labels</source>
<translation type="unfinished">Naljepnice za dostavu</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Square labels</source>
<translation type="unfinished">Kvadratna oznaka</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Target stickers</source>
@@ -365,11 +369,11 @@
</message>
<message>
<source>Trapezoid labels</source>
<translation type="unfinished">Trapezoidni naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Triangular labels</source>
<translation type="unfinished">Trougaone naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tube labels</source>
@@ -417,7 +421,11 @@
</message>
<message>
<source>Zip disc labels</source>
<translation type="unfinished">Zip disk naljepnice</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continuous label tape</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Some files were not shown because too many files have changed in this diff Show More