More fleshing out of merge framework.

This commit is contained in:
Jim Evins
2016-05-08 00:43:35 -04:00
parent 88e32d9738
commit 37358aac43
13 changed files with 193 additions and 37 deletions
+31
View File
@@ -92,12 +92,16 @@ void LabelModel::restore( const LabelModel *savedModel )
connect( object, SIGNAL(moved()), this, SLOT(onObjectMoved()) );
}
delete mMerge;
mMerge = savedModel->mMerge->clone();
// Emit signals based on potential changes
emit changed();
emit selectionChanged();
emit modifiedChanged();
emit nameChanged();
emit sizeChanged();
emit mergeChanged();
}
@@ -263,6 +267,33 @@ QString LabelModel::shortName()
}
///
/// Get merge object
///
Merge* LabelModel::merge() const
{
return mMerge;
}
///
/// Set merge object
///
void LabelModel::setMerge( Merge* merge )
{
if ( merge != mMerge )
{
if ( mMerge )
{
delete mMerge;
}
mMerge = merge;
emit mergeChanged();
}
}
///
/// Clear modified status
///
+6
View File
@@ -25,6 +25,7 @@
#include <QList>
#include <QPainter>
#include "Merge.h"
#include "MergeRecord.h"
#include "libglabels/Template.h"
#include "Settings.h"
@@ -71,6 +72,7 @@ signals:
void sizeChanged();
void selectionChanged();
void modifiedChanged();
void mergeChanged();
/////////////////////////////////
@@ -99,6 +101,9 @@ public:
const QList<LabelModelObject*>& objectList() const;
Merge* merge() const;
void setMerge( Merge* merge );
/////////////////////////////////
// Manage objects
@@ -218,6 +223,7 @@ private:
QList<LabelModelObject*> mObjectList;
Merge* mMerge;
};
+5 -5
View File
@@ -24,7 +24,7 @@
///
/// Constructor
///
Merge::Merge( SourceType type ) : mType(type)
Merge::Merge()
{
}
@@ -32,7 +32,7 @@ Merge::Merge( SourceType type ) : mType(type)
///
/// Constructor
///
Merge::Merge( const Merge* merge ) : mType(merge->mType), mSource(merge->mSource)
Merge::Merge( const Merge* merge ) : mSource(merge->mSource)
{
foreach ( MergeRecord* record, merge->mRecordList )
{
@@ -55,11 +55,11 @@ Merge::~Merge()
///
/// Get type
/// Get id
///
Merge::SourceType Merge::type() const
QString Merge::id() const
{
return mType;
return mId;
}
+5 -11
View File
@@ -36,19 +36,13 @@ struct Merge : QObject
Q_OBJECT
/////////////////////////////////
// Source Type
/////////////////////////////////
public:
enum SourceType { NONE, FIXED, FILE };
/////////////////////////////////
// Life Cycle
/////////////////////////////////
protected:
Merge( SourceType type );
Merge();
Merge( const Merge* merge );
public:
virtual ~Merge();
@@ -62,7 +56,7 @@ protected:
// Properties
/////////////////////////////////
public:
SourceType type() const;
QString id() const;
QString source() const;
void setSource( const QString& source );
@@ -103,9 +97,9 @@ signals:
/////////////////////////////////
// Private data
/////////////////////////////////
protected:
QString mId;
private:
SourceType mType;
QString mSource;
QList<MergeRecord*> mRecordList;
};
+72 -12
View File
@@ -27,7 +27,8 @@
///
/// Static data
///
QMap<QString,MergeFactory::BackendEntry> MergeFactory::mBackendMap;
QMap<QString,MergeFactory::BackendEntry> MergeFactory::mBackendIdMap;
QMap<QString,MergeFactory::BackendEntry> MergeFactory::mBackendNameMap;
///
@@ -35,8 +36,15 @@ QMap<QString,MergeFactory::BackendEntry> MergeFactory::mBackendMap;
///
MergeFactory::MergeFactory()
{
registerBackend( "None", &MergeNone::create );
registerBackend( "Text/CSV", &MergeTextCsv::create );
registerBackend( MergeNone::id(),
tr("None"),
NONE,
&MergeNone::create );
registerBackend( MergeTextCsv::id(),
tr("Text: Comma Separated Values (CSV)"),
FILE,
&MergeTextCsv::create );
}
@@ -58,8 +66,8 @@ void MergeFactory::init()
///
Merge* MergeFactory::createMerge( const QString& id )
{
QMap<QString,BackendEntry>::iterator iBackend = mBackendMap.find( id );
if ( iBackend != mBackendMap.end() )
QMap<QString,BackendEntry>::iterator iBackend = mBackendIdMap.find( id );
if ( iBackend != mBackendIdMap.end() )
{
return iBackend->create();
}
@@ -69,16 +77,68 @@ Merge* MergeFactory::createMerge( const QString& id )
///
/// Register backend
/// Get name list
///
void MergeFactory::registerBackend( const QString& id, CreateFct create )
QList<QString> MergeFactory::nameList()
{
BackendEntry backend;
backend.id = id;
backend.create = create;
QList<QString> list;
mBackendMap[ id ] = backend;
foreach ( BackendEntry backend, mBackendIdMap )
{
list << backend.name;
}
return list;
}
///
/// Convert ID to name
///
QString MergeFactory::idToName( const QString& id )
{
if ( mBackendIdMap.contains( id ) )
{
return mBackendIdMap[id].name;
}
else
{
return tr("None");
}
}
///
/// Convert name to ID
///
QString MergeFactory::nameToId( const QString& name )
{
if ( mBackendNameMap.contains( name ) )
{
return mBackendNameMap[name].id;
}
else
{
return "None";
}
}
///
/// Register backend
///
void MergeFactory::registerBackend( const QString& id,
const QString& name,
SourceType type,
CreateFct create )
{
BackendEntry backend;
backend.name = name;
backend.type = type;
backend.create = create;
mBackendIdMap[ id ] = backend;
}
+25 -4
View File
@@ -22,6 +22,7 @@
#define MergeFactory_h
#include "Merge.h"
#include <QCoreApplication>
///
@@ -29,7 +30,16 @@
///
struct MergeFactory
{
Q_DECLARE_TR_FUNCTIONS(MergeFactory)
/////////////////////////////////
// Source Type
/////////////////////////////////
public:
enum SourceType { NONE, FIXED, FILE };
/////////////////////////////////
// Life Cycle
/////////////////////////////////
@@ -42,8 +52,13 @@ protected:
/////////////////////////////////
public:
static void init();
static Merge* createMerge( const QString& id );
static QList<QString> nameList();
static QString idToName( const QString& id );
static QString nameToId( const QString& name );
/////////////////////////////////
// private methods
@@ -51,7 +66,10 @@ public:
private:
typedef Merge* (*CreateFct)();
static void registerBackend( const QString& id, CreateFct create );
static void registerBackend( const QString& id,
const QString& name,
SourceType type,
CreateFct create );
/////////////////////////////////
@@ -60,11 +78,14 @@ private:
class BackendEntry
{
public:
QString id;
CreateFct create;
QString id;
QString name;
SourceType type;
CreateFct create;
};
static QMap<QString,BackendEntry> mBackendMap;
static QMap<QString,BackendEntry> mBackendIdMap;
static QMap<QString,BackendEntry> mBackendNameMap;
};
+11 -1
View File
@@ -24,8 +24,9 @@
///
/// Constructor
///
MergeNone::MergeNone() : Merge( Merge::NONE )
MergeNone::MergeNone() : Merge()
{
mId = "None";
}
@@ -54,6 +55,15 @@ MergeNone* MergeNone::clone() const
}
///
/// Get ID
///
QString MergeNone::id()
{
return "None";
}
///
/// Create
///
+1
View File
@@ -49,6 +49,7 @@ protected:
// Static methods
/////////////////////////////////
public:
static QString id();
static Merge* create();
+5 -2
View File
@@ -24,7 +24,8 @@
///
/// Constructor
///
MergeText::MergeText( QChar delimiter, bool line1HasKeys ) : Merge( Merge::FILE ), mNFieldsMax(0)
MergeText::MergeText( QChar delimiter, bool line1HasKeys )
: mNFieldsMax(0), mDelimeter(delimiter), mLine1HasKeys(line1HasKeys)
{
}
@@ -33,7 +34,9 @@ MergeText::MergeText( QChar delimiter, bool line1HasKeys ) : Merge( Merge::FILE
/// Constructor
///
MergeText::MergeText( const MergeText* merge )
: Merge( merge ), mDelimeter(merge->mDelimeter), mLine1HasKeys(merge->mLine1HasKeys)
: Merge( merge ),
mNFieldsMax(merge->mNFieldsMax),
mDelimeter(merge->mDelimeter), mLine1HasKeys(merge->mLine1HasKeys)
{
}
+10
View File
@@ -26,6 +26,7 @@
///
MergeTextCsv::MergeTextCsv() : MergeText(',',false)
{
mId = "Text/CSV";
}
@@ -54,6 +55,15 @@ MergeTextCsv* MergeTextCsv::clone() const
}
///
/// Get ID
///
QString MergeTextCsv::id()
{
return "Text/CSV";
}
///
/// Create
///
+1
View File
@@ -43,6 +43,7 @@ private:
// Object duplication
/////////////////////////////////
public:
static QString id();
MergeTextCsv* clone() const;
+11 -2
View File
@@ -27,6 +27,7 @@
//#include "LabelObjectLine.h"
//#include "LabelObjectImage.h"
//#include "LabelObjectBarcode.h"
#include "MergeNone.h"
#include "libglabels/XmlTemplateCreator.h"
#include "libglabels/XmlUtil.h"
@@ -96,7 +97,10 @@ XmlLabelCreator::createDoc( QDomDocument& doc, const LabelModel* label )
createObjectsNode( root, label );
// TODO merge node
if ( label->merge() && !dynamic_cast<MergeNone*>(label->merge()) )
{
createMergeNode( root, label );
}
createDataNode( root, label );
}
@@ -261,7 +265,12 @@ XmlLabelCreator::createShadowAttrs( QDomElement &node, const LabelModelObject* o
void
XmlLabelCreator::createMergeNode( QDomElement &parent, const LabelModel* label )
{
// TODO
QDomDocument doc = parent.ownerDocument();
QDomElement node = doc.createElement( "Merge" );
parent.appendChild( node );
glabels::XmlUtil::setStringAttr( node, "type", label->merge()->id() );
glabels::XmlUtil::setStringAttr( node, "src", label->merge()->source() );
}
+10
View File
@@ -27,6 +27,7 @@
//#include "LabelObjectLine.h"
//#include "LabelObjectImage.h"
//#include "LabelObjectBarcode.h"
#include "MergeFactory.h"
#include "libglabels/XmlTemplateParser.h"
#include "libglabels/XmlUtil.h"
@@ -435,6 +436,15 @@ XmlLabelParser::parseShadowAttrs( const QDomElement &node, LabelModelObject* obj
void
XmlLabelParser::parseMergeNode( const QDomElement &node, LabelModel* label )
{
using namespace glabels;
QString type = XmlUtil::getStringAttr( node, "type", "None" );
QString src = XmlUtil::getStringAttr( node, "src", "" );
Merge* merge = MergeFactory::createMerge( type );
merge->setSource( src );
label->setMerge( merge );
}