Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion glabels/TemplatePicker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ namespace glabels
if ( auto* tItem = dynamic_cast<TemplatePickerItem *>( mModel->item( i, 0 ) ) )
{
bool nameMask = tItem->tmplate().name().contains( searchString, Qt::CaseInsensitive );
bool descMask = tItem->tmplate().description().contains( searchString, Qt::CaseInsensitive );

bool sizeMask =
(isoMask && tItem->tmplate().isSizeIso()) ||
Expand All @@ -228,7 +229,7 @@ namespace glabels
}


if ( nameMask && sizeMask && categoryMask )
if ( (nameMask||descMask) && sizeMask && categoryMask )
{
setRowHidden( i, false );
}
Expand Down
1 change: 1 addition & 0 deletions model/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ set (Model_sources
FramePath.cpp
FrameRect.cpp
FrameRound.cpp
GenericTemplate.cpp
Handle.cpp
Layout.cpp
Markup.cpp
Expand Down
32 changes: 27 additions & 5 deletions model/Db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "Config.hpp"
#include "StrUtil.hpp"
#include "FileUtil.hpp"
#include "GenericTemplate.hpp"
#include "Settings.hpp"
#include "XmlCategoryParser.hpp"
#include "XmlPaperParser.hpp"
Expand Down Expand Up @@ -87,6 +88,7 @@ namespace glabels::model
readCategories();
readVendors();
readTemplates();
createGenericTemplates();
}


Expand Down Expand Up @@ -470,11 +472,12 @@ namespace glabels::model
for ( auto& paper : mPapers )
{
qDebug() << "paper "
<< "id=" << paper.id() << ", "
<< "name=" << paper.name() << ", "
<< "width=" << paper.width().pt() << "pts, "
<< "height=" << paper.height().pt() << "pts, "
<< "pwg_size=" << paper.pwgSize();
<< "id=" << paper.id() << ", "
<< "name=" << paper.name() << ", "
<< "width=" << paper.width().pt() << "pts, "
<< "height=" << paper.height().pt() << "pts, "
<< "pwg_class=" << paper.pwgClass()
<< "type=" << paper.type();
}

qDebug();
Expand Down Expand Up @@ -697,6 +700,25 @@ namespace glabels::model
}


void Db::createGenericTemplates()
{
for ( auto& paper : papers() )
{
if ( paper.type() == Paper::SHEET )
{
registerTemplate( GenericTemplate::fullPage( paper ) );
registerTemplate( GenericTemplate::halfPage1x2( paper ) );
registerTemplate( GenericTemplate::halfPage2x1( paper ) );
registerTemplate( GenericTemplate::quarterPage2x2( paper ) );
}
else if ( paper.type() == Paper::ENVELOPE )
{
registerTemplate( GenericTemplate::envelope( paper ) );
}
}
}


void Db::readUserTemplatesFromDir( const QDir& dir )
{
QStringList filters;
Expand Down
2 changes: 2 additions & 0 deletions model/Db.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ namespace glabels::model
static void readTemplatesFromDir( const QDir& dir );
static void registerTemplate( const Template& tmplate );

static void createGenericTemplates();

static void readUserTemplatesFromDir( const QDir& dir );


Expand Down
134 changes: 134 additions & 0 deletions model/GenericTemplate.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
// GenericTemplate.cpp
//
// Copyright (C) 2026 Jaye 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 "GenericTemplate.hpp"

#include "FrameRect.hpp"

#include <QDebug>


namespace glabels::model
{


Template GenericTemplate::fullPage( const Paper& paper )
{
// TRANSLATORS
//: %1 = page size. (e.g. A4)
return sheetTemplate( paper, 1, 1, QString( tr( "%1 full-page labels" ) ).arg( paper.name() ) );
}


Template GenericTemplate::halfPage1x2( const Paper& paper )
{
// TRANSLATORS
//: %1 = page size. (e.g. A4)
return sheetTemplate( paper, 1, 2, QString( tr( "%1 half-page labels" ) ).arg( paper.name() ) );
}


Template GenericTemplate::halfPage2x1( const Paper& paper )
{
return sheetTemplate( paper, 2, 1, QString( tr( "%1 half-page labels" ) ).arg( paper.name() ) );
}


Template GenericTemplate::quarterPage2x2( const Paper& paper )
{
// TRANSLATORS
//: %1 = page size. (e.g. A4)
return sheetTemplate( paper, 2, 2, QString( tr( "%1 quarter-page labels" ) ).arg( paper.name() ) );
}


Template GenericTemplate::envelope( const Paper& paper )
{
// TRANSLATORS
//: %1 = envelope size. (e.g. DL)
QString description = QString( tr( "%1 envelope" ) ).arg( paper.name() );

Template tmplate( tr("Generic"),
paper.id() + "-ENV",
description,
paper.id(),
paper.width(),
paper.height() );

FrameRect frame( paper.width(),
paper.height(),
Distance::pt( 0 ),
Distance::pt( 0 ),
Distance::pt( 0 ) );

Layout layout( 1,
1,
Distance::pt( 0 ),
Distance::pt( 0 ),
Distance::pt( 0 ),
Distance::pt( 0 ) );

frame.addLayout( layout );
tmplate.addFrame( frame );

tmplate.addCategory( "mail" );

return tmplate;
}


Template GenericTemplate::sheetTemplate( const Paper& paper,
int nx,
int ny,
const QString& description )
{
Template tmplate( tr("Generic"),
QString( "%1-%2x%3" ).arg(paper.id()).arg(nx).arg(ny),
description,
paper.id(),
paper.width(),
paper.height() );

FrameRect frame( paper.width()/nx,
paper.height()/ny,
Distance::pt( 0 ),
Distance::pt( 0 ),
Distance::pt( 0 ) );

Layout layout( nx,
ny,
Distance::pt( 0 ),
Distance::pt( 0 ),
paper.width()/nx,
paper.height()/ny );

frame.addLayout( layout );
tmplate.addFrame( frame );

tmplate.addCategory( "label" );
tmplate.addCategory( "rectangle-label" );
tmplate.addCategory( "card" );

return tmplate;
}


}
59 changes: 59 additions & 0 deletions model/GenericTemplate.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// GenericTemplate.hpp
//
// Copyright (C) 2026 Jaye 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_GenericTemplate_hpp
#define model_GenericTemplate_hpp


#include "Template.hpp"
#include "Paper.hpp"

#include <QCoreApplication>


namespace glabels::model
{

class GenericTemplate
{
Q_DECLARE_TR_FUNCTIONS(GenericTemplate)

public:
GenericTemplate() = delete;

static Template fullPage( const Paper& paper );
static Template halfPage1x2( const Paper& paper );
static Template halfPage2x1( const Paper& paper );
static Template quarterPage2x2( const Paper& paper );

static Template envelope( const Paper& paper );


private:
static Template sheetTemplate( const Paper& paper,
int nx,
int ny,
const QString& description );
};

}


#endif // model_GenericTemplate_hpp
20 changes: 14 additions & 6 deletions model/Paper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,14 @@ namespace glabels::model
const QString& name,
Distance width,
Distance height,
const QString& pwgSize )
const QString& pwgClass,
Type type )
: mId(id),
mName(name),
mWidth(width),
mHeight(height),
mPwgSize(pwgSize)
mPwgClass(pwgClass),
mType(type)
{
// empty
}
Expand Down Expand Up @@ -64,21 +66,27 @@ namespace glabels::model
}


QString Paper::pwgSize() const
QString Paper::pwgClass() const
{
return mPwgSize;
return mPwgClass;
}


Paper::Type Paper::type() const
{
return mType;
}


bool Paper::isSizeIso() const
{
return mPwgSize.startsWith( "iso_" );
return mPwgClass == "iso";
}


bool Paper::isSizeUs() const
{
return mPwgSize.startsWith( "na_" );
return mPwgClass == "na";
}

}
23 changes: 19 additions & 4 deletions model/Paper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,23 @@ namespace glabels::model

class Paper
{
public:
enum Type
{
SHEET,
ENVELOPE,
ROLL
};


public:
Paper() = default;
Paper( const QString& id,
const QString& name,
Distance width,
Distance height,
const QString& pwgSize );
const QString& pwgClass,
Type type = SHEET );
~Paper() = default;

QString id() const;
Expand All @@ -50,18 +60,23 @@ namespace glabels::model
/* Height */
Distance height() const;

/* PWG 5101.1-2002 size name */
QString pwgSize() const;
/* PWG 5101.1-2023 class */
QString pwgClass() const;

Type type() const;

bool isSizeIso() const;
bool isSizeUs() const;


private:
QString mId;
QString mName;
Distance mWidth;
Distance mHeight;
QString mPwgSize;
QString mPwgClass;
Type mType;

};

}
Expand Down
Loading
Loading