More fleshing out of merge framework.
This commit is contained in:
@@ -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
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ protected:
|
|||||||
// Static methods
|
// Static methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
|
static QString id();
|
||||||
static Merge* create();
|
static Merge* create();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ private:
|
|||||||
// Object duplication
|
// Object duplication
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
|
static QString id();
|
||||||
MergeTextCsv* clone() const;
|
MergeTextCsv* clone() const;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user