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()) ); connect( object, SIGNAL(moved()), this, SLOT(onObjectMoved()) );
} }
delete mMerge;
mMerge = savedModel->mMerge->clone();
// Emit signals based on potential changes // Emit signals based on potential changes
emit changed(); emit changed();
emit selectionChanged(); emit selectionChanged();
emit modifiedChanged(); emit modifiedChanged();
emit nameChanged(); emit nameChanged();
emit sizeChanged(); 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 /// Clear modified status
/// ///
+6
View File
@@ -25,6 +25,7 @@
#include <QList> #include <QList>
#include <QPainter> #include <QPainter>
#include "Merge.h"
#include "MergeRecord.h" #include "MergeRecord.h"
#include "libglabels/Template.h" #include "libglabels/Template.h"
#include "Settings.h" #include "Settings.h"
@@ -71,6 +72,7 @@ signals:
void sizeChanged(); void sizeChanged();
void selectionChanged(); void selectionChanged();
void modifiedChanged(); void modifiedChanged();
void mergeChanged();
///////////////////////////////// /////////////////////////////////
@@ -99,6 +101,9 @@ public:
const QList<LabelModelObject*>& objectList() const; const QList<LabelModelObject*>& objectList() const;
Merge* merge() const;
void setMerge( Merge* merge );
///////////////////////////////// /////////////////////////////////
// Manage objects // Manage objects
@@ -218,6 +223,7 @@ private:
QList<LabelModelObject*> mObjectList; QList<LabelModelObject*> mObjectList;
Merge* mMerge;
}; };
+5 -5
View File
@@ -24,7 +24,7 @@
/// ///
/// Constructor /// Constructor
/// ///
Merge::Merge( SourceType type ) : mType(type) Merge::Merge()
{ {
} }
@@ -32,7 +32,7 @@ Merge::Merge( SourceType type ) : mType(type)
/// ///
/// Constructor /// 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 ) 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 Q_OBJECT
/////////////////////////////////
// Source Type
/////////////////////////////////
public:
enum SourceType { NONE, FIXED, FILE };
///////////////////////////////// /////////////////////////////////
// Life Cycle // Life Cycle
///////////////////////////////// /////////////////////////////////
protected: protected:
Merge( SourceType type ); Merge();
Merge( const Merge* merge ); Merge( const Merge* merge );
public:
virtual ~Merge(); virtual ~Merge();
@@ -62,7 +56,7 @@ protected:
// Properties // Properties
///////////////////////////////// /////////////////////////////////
public: public:
SourceType type() const; QString id() const;
QString source() const; QString source() const;
void setSource( const QString& source ); void setSource( const QString& source );
@@ -103,9 +97,9 @@ signals:
///////////////////////////////// /////////////////////////////////
// Private data // Private data
///////////////////////////////// /////////////////////////////////
protected:
QString mId;
private: private:
SourceType mType;
QString mSource; QString mSource;
QList<MergeRecord*> mRecordList; QList<MergeRecord*> mRecordList;
}; };
+71 -11
View File
@@ -27,7 +27,8 @@
/// ///
/// Static data /// 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() MergeFactory::MergeFactory()
{ {
registerBackend( "None", &MergeNone::create ); registerBackend( MergeNone::id(),
registerBackend( "Text/CSV", &MergeTextCsv::create ); 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 ) Merge* MergeFactory::createMerge( const QString& id )
{ {
QMap<QString,BackendEntry>::iterator iBackend = mBackendMap.find( id ); QMap<QString,BackendEntry>::iterator iBackend = mBackendIdMap.find( id );
if ( iBackend != mBackendMap.end() ) if ( iBackend != mBackendIdMap.end() )
{ {
return iBackend->create(); 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; QList<QString> list;
backend.id = id; foreach ( BackendEntry backend, mBackendIdMap )
backend.create = create; {
list << backend.name;
}
mBackendMap[ id ] = backend; 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;
} }
+23 -2
View File
@@ -22,6 +22,7 @@
#define MergeFactory_h #define MergeFactory_h
#include "Merge.h" #include "Merge.h"
#include <QCoreApplication>
/// ///
@@ -29,6 +30,15 @@
/// ///
struct MergeFactory struct MergeFactory
{ {
Q_DECLARE_TR_FUNCTIONS(MergeFactory)
/////////////////////////////////
// Source Type
/////////////////////////////////
public:
enum SourceType { NONE, FIXED, FILE };
///////////////////////////////// /////////////////////////////////
// Life Cycle // Life Cycle
@@ -42,8 +52,13 @@ protected:
///////////////////////////////// /////////////////////////////////
public: public:
static void init(); static void init();
static Merge* createMerge( const QString& id ); static Merge* createMerge( const QString& id );
static QList<QString> nameList();
static QString idToName( const QString& id );
static QString nameToId( const QString& name );
///////////////////////////////// /////////////////////////////////
// private methods // private methods
@@ -51,7 +66,10 @@ public:
private: private:
typedef Merge* (*CreateFct)(); typedef Merge* (*CreateFct)();
static void registerBackend( const QString& id, CreateFct create ); static void registerBackend( const QString& id,
const QString& name,
SourceType type,
CreateFct create );
///////////////////////////////// /////////////////////////////////
@@ -61,10 +79,13 @@ private:
{ {
public: public:
QString id; QString id;
QString name;
SourceType type;
CreateFct create; 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 /// 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 /// Create
/// ///
+1
View File
@@ -49,6 +49,7 @@ protected:
// Static methods // Static methods
///////////////////////////////// /////////////////////////////////
public: public:
static QString id();
static Merge* create(); static Merge* create();
+5 -2
View File
@@ -24,7 +24,8 @@
/// ///
/// Constructor /// 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 /// Constructor
/// ///
MergeText::MergeText( const MergeText* merge ) 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) MergeTextCsv::MergeTextCsv() : MergeText(',',false)
{ {
mId = "Text/CSV";
} }
@@ -54,6 +55,15 @@ MergeTextCsv* MergeTextCsv::clone() const
} }
///
/// Get ID
///
QString MergeTextCsv::id()
{
return "Text/CSV";
}
/// ///
/// Create /// Create
/// ///
+1
View File
@@ -43,6 +43,7 @@ private:
// Object duplication // Object duplication
///////////////////////////////// /////////////////////////////////
public: public:
static QString id();
MergeTextCsv* clone() const; MergeTextCsv* clone() const;
+11 -2
View File
@@ -27,6 +27,7 @@
//#include "LabelObjectLine.h" //#include "LabelObjectLine.h"
//#include "LabelObjectImage.h" //#include "LabelObjectImage.h"
//#include "LabelObjectBarcode.h" //#include "LabelObjectBarcode.h"
#include "MergeNone.h"
#include "libglabels/XmlTemplateCreator.h" #include "libglabels/XmlTemplateCreator.h"
#include "libglabels/XmlUtil.h" #include "libglabels/XmlUtil.h"
@@ -96,7 +97,10 @@ XmlLabelCreator::createDoc( QDomDocument& doc, const LabelModel* label )
createObjectsNode( root, label ); createObjectsNode( root, label );
// TODO merge node if ( label->merge() && !dynamic_cast<MergeNone*>(label->merge()) )
{
createMergeNode( root, label );
}
createDataNode( root, label ); createDataNode( root, label );
} }
@@ -261,7 +265,12 @@ XmlLabelCreator::createShadowAttrs( QDomElement &node, const LabelModelObject* o
void void
XmlLabelCreator::createMergeNode( QDomElement &parent, const LabelModel* label ) 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 "LabelObjectLine.h"
//#include "LabelObjectImage.h" //#include "LabelObjectImage.h"
//#include "LabelObjectBarcode.h" //#include "LabelObjectBarcode.h"
#include "MergeFactory.h"
#include "libglabels/XmlTemplateParser.h" #include "libglabels/XmlTemplateParser.h"
#include "libglabels/XmlUtil.h" #include "libglabels/XmlUtil.h"
@@ -435,6 +436,15 @@ XmlLabelParser::parseShadowAttrs( const QDomElement &node, LabelModelObject* obj
void void
XmlLabelParser::parseMergeNode( const QDomElement &node, LabelModel* label ) 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 );
} }