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()) );
|
||||
}
|
||||
|
||||
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
|
||||
///
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
+71
-11
@@ -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;
|
||||
QList<QString> list;
|
||||
|
||||
backend.id = id;
|
||||
backend.create = create;
|
||||
foreach ( BackendEntry backend, mBackendIdMap )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+25
-4
@@ -22,6 +22,7 @@
|
||||
#define MergeFactory_h
|
||||
|
||||
#include "Merge.h"
|
||||
#include <QCoreApplication>
|
||||
|
||||
|
||||
///
|
||||
@@ -29,6 +30,15 @@
|
||||
///
|
||||
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
@@ -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
|
||||
///
|
||||
|
||||
@@ -49,6 +49,7 @@ protected:
|
||||
// Static methods
|
||||
/////////////////////////////////
|
||||
public:
|
||||
static QString id();
|
||||
static Merge* create();
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
///
|
||||
|
||||
@@ -43,6 +43,7 @@ private:
|
||||
// Object duplication
|
||||
/////////////////////////////////
|
||||
public:
|
||||
static QString id();
|
||||
MergeTextCsv* clone() const;
|
||||
|
||||
|
||||
|
||||
@@ -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() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user