Pointer cleanup (#242)

- Made greater use of smart pointers, eliminating many instances of manual memory management
- Do not use pointers at all for many non-polymorphic classes
- Assorted other code cleanup
This commit is contained in:
Jaye Evins
2025-10-31 16:11:28 -04:00
committed by GitHub
parent fd10d88be5
commit 8c8e447336
159 changed files with 3364 additions and 4045 deletions
+79 -59
View File
@@ -18,6 +18,7 @@
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#include "TemplateDesigner.h"
#include "SelectProductDialog.h"
@@ -34,14 +35,16 @@
#include "model/PageRenderer.h"
#include "model/Settings.h"
#include <QDebug>
#include <QMessageBox>
#include <QPrintDialog>
#include <QPrinter>
#include <QVBoxLayout>
#include <QtDebug>
#include <algorithm>
#include <iostream>
#include <iterator>
namespace glabels
{
@@ -367,7 +370,7 @@ namespace glabels
///
/// Build template from wizard pages
///
model::Template* TemplateDesigner::buildTemplate()
model::Template TemplateDesigner::buildTemplate()
{
model::Units units = model::Settings::units();
@@ -379,9 +382,8 @@ namespace glabels
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, pageRollW, true );
auto t = model::Template( brand, part, description, paperId, pageW, pageH, pageRollW, "", true );
model::Frame* frame;
if ( field( "shape.rect" ).toBool() )
{
model::Distance w( field( "rect.w" ).toDouble(), units );
@@ -392,8 +394,10 @@ namespace glabels
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( xMargin, yMargin ) );
model::FrameRect frame( w, h, r, xWaste, yWaste );
frame.addMarkup( model::MarkupMargin( xMargin, yMargin ) );
addLayouts( frame );
t.addFrame( frame );
}
else if ( field( "shape.round" ).toBool() )
{
@@ -401,8 +405,10 @@ namespace glabels
model::Distance waste( field( "round.waste" ).toDouble(), units );
model::Distance margin( field( "round.margin" ).toDouble(), units );
frame = new model::FrameRound( r, waste );
frame->addMarkup( new model::MarkupMargin( margin ) );
model::FrameRound frame( r, waste );
frame.addMarkup( model::MarkupMargin( margin ) );
addLayouts( frame );
t.addFrame( frame );
}
else if ( field( "shape.ellipse" ).toBool() )
{
@@ -411,8 +417,10 @@ namespace glabels
model::Distance waste( field( "ellipse.waste" ).toDouble(), units );
model::Distance margin( field( "ellipse.margin" ).toDouble(), units );
frame = new model::FrameEllipse( w, h, waste );
frame->addMarkup( new model::MarkupMargin( margin ) );
model::FrameEllipse frame( w, h, waste );
frame.addMarkup( model::MarkupMargin( margin ) );
addLayouts( frame );
t.addFrame( frame );
}
else
{
@@ -423,10 +431,22 @@ namespace glabels
model::Distance waste( field( "cd.waste" ).toDouble(), units );
model::Distance margin( field( "cd.margin" ).toDouble(), units );
frame = new model::FrameCd( r1, r2, xClip, yClip, waste );
frame->addMarkup( new model::MarkupMargin( margin ) );
model::FrameCd frame( r1, r2, xClip, yClip, waste );
frame.addMarkup( model::MarkupMargin( margin ) );
addLayouts( frame );
t.addFrame( frame );
}
t->addFrame( frame );
return t;
}
///
/// Add layouts to frame
///
void TemplateDesigner::addLayouts( model::Frame& frame )
{
model::Units units = model::Settings::units();
if ( field( "nLayouts.one" ).toBool() )
{
@@ -437,7 +457,7 @@ namespace glabels
model::Distance dx( field( "oneLayout.dx" ).toDouble(), units );
model::Distance dy( field( "oneLayout.dy" ).toDouble(), units );
frame->addLayout( model::Layout( nx, ny, x0, y0, dx, dy ) );
frame.addLayout( model::Layout( nx, ny, x0, y0, dx, dy ) );
}
else
{
@@ -455,14 +475,12 @@ namespace glabels
model::Distance dx2( field( "twoLayout.dx2" ).toDouble(), units );
model::Distance dy2( field( "twoLayout.dy2" ).toDouble(), units );
frame->addLayout( model::Layout( nx1, ny1, x01, y01, dx1, dy1 ) );
frame->addLayout( 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;
}
///
/// Print test sheet
///
@@ -498,22 +516,22 @@ namespace glabels
///
/// Load wizard from template
///
void TemplateDesigner::loadFromTemplate( const model::Template* tmplate )
void TemplateDesigner::loadFromTemplate( const model::Template& tmplate )
{
mIsBasedOnCopy = true;
model::Units units = model::Settings::units();
setField( "name.brand", tmplate->brand() );
setField( "name.part", tmplate->part() + QString(" (%1)").arg( tr("Copy") ) );
setField( "name.description", tmplate->description() );
setField( "name.brand", tmplate.brand() );
setField( "name.part", tmplate.part() + QString(" (%1)").arg( tr("Copy") ) );
setField( "name.description", tmplate.description() );
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 ) );
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();
auto frame = tmplate.frame();
if ( auto frameRect = dynamic_cast<const model::FrameRect*>( frame ) )
{
setField( "shape.rect", true );
@@ -550,9 +568,9 @@ namespace glabels
setField( "cd.waste", frameCd->waste().inUnits( units ) );
}
foreach( auto markup, frame->markups() )
for( auto& markup : frame->markups() )
{
if ( auto markupMargin = dynamic_cast<const model::MarkupMargin*>( markup ) )
if ( auto markupMargin = dynamic_cast<const model::MarkupMargin*>( markup.get() ) )
{
setField( "rect.xMargin", markupMargin->xSize().inUnits( units ) );
setField( "rect.yMargin", markupMargin->ySize().inUnits( units ) );
@@ -565,28 +583,30 @@ namespace glabels
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.front().nx() );
setField( "oneLayout.ny", layouts.front().ny() );
setField( "oneLayout.x0", layouts.front().x0().inUnits( units ) );
setField( "oneLayout.y0", layouts.front().y0().inUnits( units ) );
setField( "oneLayout.dx", layouts.front().dx().inUnits( units ) );
setField( "oneLayout.dy", layouts.front().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 ) );
auto it = layouts.begin();
setField( "twoLayout.nx1", it->nx() );
setField( "twoLayout.ny1", it->ny() );
setField( "twoLayout.x01", it->x0().inUnits( units ) );
setField( "twoLayout.y01", it->y0().inUnits( units ) );
setField( "twoLayout.dx1", it->dx().inUnits( units ) );
setField( "twoLayout.dy1", it->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 ) );
std::advance( it, 1 );
setField( "twoLayout.nx2", it->nx() );
setField( "twoLayout.ny2", it->ny() );
setField( "twoLayout.x02", it->x0().inUnits( units ) );
setField( "twoLayout.y02", it->y0().inUnits( units ) );
setField( "twoLayout.dx2", it->dx().inUnits( units ) );
setField( "twoLayout.dy2", it->dy().inUnits( units ) );
}
}
@@ -633,16 +653,16 @@ namespace glabels
SelectProductDialog dialog;
dialog.exec();
const model::Template* tmplate = dialog.tmplate();
if ( tmplate )
auto tmplate = dialog.tmplate();
if ( !tmplate.isNull() )
{
if ( auto td = dynamic_cast<TemplateDesigner*>( wizard() ) )
{
if ( dynamic_cast<model::FramePath*>(tmplate->frames().constFirst()) )
if ( dynamic_cast<const model::FramePath*>(tmplate.frame()) )
{
td->mIsTemplatePathBased = true;
}
else if ( dynamic_cast<model::FrameContinuous*>(tmplate->frames().constFirst()) )
else if ( dynamic_cast<const model::FrameContinuous*>(tmplate.frame()) )
{
td->mIsTemplateContinuousBased = true;
}
@@ -753,9 +773,9 @@ namespace glabels
if ( pageSizeCombo->currentText() != tr("Other") )
{
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() ) );
auto paper = model::Db::lookupPaperFromName( pageSizeCombo->currentText() );
wSpin->setValue( paper.width().inUnits( model::Settings::units() ) );
hSpin->setValue( paper.height().inUnits( model::Settings::units() ) );
}
registerField( "pageSize.pageSize", pageSizeCombo, "currentText" );
@@ -789,9 +809,9 @@ namespace glabels
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() ) );
auto paper = model::Db::lookupPaperFromName( pageSizeCombo->currentText() );
wSpin->setValue( paper.width().inUnits( model::Settings::units() ) );
hSpin->setValue( paper.height().inUnits( model::Settings::units() ) );
}
if ( !isRoll )
@@ -1553,7 +1573,7 @@ namespace glabels
//
QString brand = field( "name.brand" ).toString();
QString part = field( "name.part" ).toString();
QString filename = model::Db::userTemplateFilename( brand, part );
QString filename = model::Db::userTemplateFileName( brand, part );
if ( QFileInfo::exists(filename) )
{