diff --git a/glabels/CMakeLists.txt b/glabels/CMakeLists.txt index 1121a3c..810f839 100644 --- a/glabels/CMakeLists.txt +++ b/glabels/CMakeLists.txt @@ -36,6 +36,8 @@ set (glabels_sources MergeField.cpp MergeView.cpp MergeRecord.cpp + MergeNone.cpp + MergeText.cpp ObjectEditor.cpp Outline.cpp PageRenderer.cpp diff --git a/glabels/Merge.cpp b/glabels/Merge.cpp index 6ee0f6d..e19f747 100644 --- a/glabels/Merge.cpp +++ b/glabels/Merge.cpp @@ -24,17 +24,51 @@ /// /// Constructor /// -Merge::Merge( QString id, QString name, SourceType type ) - : mId(id), mName(name), mType(type) +Merge::Merge( SourceType type ) : mType(type) { } +/// +/// Constructor +/// +Merge::Merge( const Merge* merge ) : mType(merge->mType), mSource(merge->mSource) +{ + foreach ( MergeRecord* record, merge->mRecordList ) + { + mRecordList << record->clone(); + } +} + + /// /// Destructor /// Merge::~Merge() { + foreach ( MergeRecord* record, mRecordList ) + { + delete record; + } + mRecordList.clear(); +} + + +/// +/// Get type +/// +Merge::SourceType Merge::type() const +{ + return mType; +} + + +/// +/// Get source +/// +QString Merge::source() const +{ + return mSource; } @@ -63,6 +97,15 @@ void Merge::setSource( const QString& source ) } +/// +/// Get record list +/// +const QList& Merge::recordList( void ) const +{ + return mRecordList; +} + + /// /// Select matching record /// diff --git a/glabels/Merge.h b/glabels/Merge.h index ebd6667..aacd106 100644 --- a/glabels/Merge.h +++ b/glabels/Merge.h @@ -29,7 +29,7 @@ /// -/// Merge Record Structure +/// Merge Object /// struct Merge : QObject { @@ -39,6 +39,7 @@ struct Merge : QObject ///////////////////////////////// // Source Type ///////////////////////////////// +public: enum SourceType { NONE, FIXED, FILE }; @@ -46,21 +47,26 @@ struct Merge : QObject // Life Cycle ///////////////////////////////// protected: - Merge( QString id, QString name, SourceType type ); + Merge( SourceType type ); + Merge( const Merge* merge ); virtual ~Merge(); + ///////////////////////////////// + // Object duplication + ///////////////////////////////// + virtual Merge* clone() const = 0; + + ///////////////////////////////// // Properties ///////////////////////////////// public: - inline QString id() const; - inline QString name() const; - inline SourceType type() const; - inline QString source() const; + SourceType type() const; + QString source() const; void setSource( const QString& source ); - inline const QList& recordList( void ) const; + const QList& recordList( void ) const; ///////////////////////////////// @@ -98,47 +104,11 @@ signals: // Private data ///////////////////////////////// private: - QString mId; - QString mName; SourceType mType; QString mSource; - bool mSelected; QList mRecordList; }; -///////////////////////////////// -// INLINE METHODS -///////////////////////////////// -QString Merge::id() const -{ - return mId; -} - - -QString Merge::name() const -{ - return mId; -} - - -Merge::SourceType Merge::type() const -{ - return mType; -} - - -QString Merge::source() const -{ - return mSource; -} - - -const QList& Merge::recordList( void ) const -{ - return mRecordList; -} - - #endif // Merge_h diff --git a/glabels/MergeField.cpp b/glabels/MergeField.cpp index 1aeaa3c..a5409d6 100644 --- a/glabels/MergeField.cpp +++ b/glabels/MergeField.cpp @@ -19,3 +19,57 @@ */ #include "MergeField.h" + + +/// +/// Default constructor +/// +MergeField::MergeField() +{ +} + + +/// +/// Constructor +/// +MergeField::MergeField( const QString& key, const QString& value ) +{ + mKey = key; + mValue = value; +} + + +/// +/// Get key +/// +const QString MergeField::key( void ) const +{ + return mKey; +} + + +/// +/// Set key +/// +void MergeField::setKey( const QString& value ) +{ + mKey = value; +} + + +/// +/// Get value +/// +const QString MergeField::value( void ) const +{ + return mValue; +} + + +/// +/// Set value +/// +void MergeField::setValue( const QString& value ) +{ + mValue = value; +} diff --git a/glabels/MergeField.h b/glabels/MergeField.h index ef75ca2..34fc648 100644 --- a/glabels/MergeField.h +++ b/glabels/MergeField.h @@ -29,6 +29,13 @@ /// struct MergeField { + ///////////////////////////////// + // Life Cycle + ///////////////////////////////// +public: + MergeField(); + MergeField( const QString& key, const QString& value ); + ///////////////////////////////// // Properties @@ -37,15 +44,15 @@ public: // // Key Property // - inline const QString key( void ) const; - inline void setKey( const QString &value ); + const QString key( void ) const; + void setKey( const QString& value ); // // Value Property // - inline const QString value( void ) const; - inline void setValue( const QString &value ); + const QString value( void ) const; + void setValue( const QString& value ); ///////////////////////////////// @@ -58,31 +65,4 @@ private: }; -///////////////////////////////// -// INLINE METHODS -///////////////////////////////// -const QString MergeField::key( void ) const -{ - return mKey; -} - - -void MergeField::setKey( const QString &value ) -{ - mKey = value; -} - - -const QString MergeField::value( void ) const -{ - return mValue; -} - - -void MergeField::setValue( const QString &value ) -{ - mValue = value; -} - - #endif // MergeField_h diff --git a/glabels/MergeNone.cpp b/glabels/MergeNone.cpp new file mode 100644 index 0000000..f67e9e6 --- /dev/null +++ b/glabels/MergeNone.cpp @@ -0,0 +1,98 @@ +/* MergeNone.cpp + * + * Copyright (C) 2015 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#include "MergeNone.h" + + +/// +/// Constructor +/// +MergeNone::MergeNone() : Merge( Merge::NONE ) +{ +} + + +/// +/// Constructor +/// +MergeNone::MergeNone( const MergeNone* merge ) : Merge( merge ) +{ +} + + +/// +/// Destructor +/// +MergeNone::~MergeNone() +{ +} + + +/// +/// Clone +/// +MergeNone* MergeNone::clone() const +{ + return new MergeNone( this ); +} + + +/// +/// Get key list +/// +QList MergeNone::keyList() const +{ + QList emptyList; + return emptyList; +} + + +/// +/// Get primary key +/// +QString MergeNone::primaryKey() const +{ + return ""; +} + + +/// +/// Open source +/// +void MergeNone::open() +{ +} + + +/// +/// Close source +/// +void MergeNone::close() +{ +} + + +/// +/// Read next record +/// +MergeRecord* MergeNone::readNextRecord() +{ + return 0; +} diff --git a/glabels/MergeNone.h b/glabels/MergeNone.h new file mode 100644 index 0000000..4ae4cb2 --- /dev/null +++ b/glabels/MergeNone.h @@ -0,0 +1,62 @@ +/* MergeNone.h + * + * Copyright (C) 2015 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#ifndef MergeNone_h +#define MergeNone_h + +#include "Merge.h" + + +/// +/// MergeNone Backend +/// +struct MergeNone : public Merge +{ + + ///////////////////////////////// + // Life Cycle + ///////////////////////////////// +protected: + MergeNone(); + MergeNone( const MergeNone* merge ); + virtual ~MergeNone(); + + + ///////////////////////////////// + // Object duplication + ///////////////////////////////// + MergeNone* clone() const; + + + ///////////////////////////////// + // Implementation of virtual methods + ///////////////////////////////// +public: + QList keyList() const; + QString primaryKey() const; +protected: + void open(); + void close(); + MergeRecord* readNextRecord(); + +}; + + +#endif // MergeNone_h diff --git a/glabels/MergeRecord.cpp b/glabels/MergeRecord.cpp index 7afd5e9..9276fa4 100644 --- a/glabels/MergeRecord.cpp +++ b/glabels/MergeRecord.cpp @@ -27,3 +27,66 @@ MergeRecord::MergeRecord() : mSelected( false ) { } + + +/// +/// Constructor +/// +MergeRecord::MergeRecord( const MergeRecord* record ) + : mSelected(record->mSelected), mFieldList(record->mFieldList) +{ +} + + +/// +/// Clone +/// +MergeRecord* MergeRecord::clone() const +{ + return new MergeRecord( this ); +} + + +/// +/// Is record selected? +/// +bool MergeRecord::isSelected() const +{ + return mSelected; +} + + +/// +/// Set selected on not selected +/// +void MergeRecord::setSelected( bool value ) +{ + mSelected = value; +} + + +/// +/// Is record empty? +/// +bool MergeRecord::isEmpty() const +{ + return mFieldList.size() == 0; +} + + +/// +/// Get field list +/// +const QList& MergeRecord::fieldList() const +{ + return mFieldList; +} + + +/// +/// Set field list +/// +void MergeRecord::setFieldList( QList& value ) +{ + mFieldList = value; +} diff --git a/glabels/MergeRecord.h b/glabels/MergeRecord.h index 8790e88..c514f15 100644 --- a/glabels/MergeRecord.h +++ b/glabels/MergeRecord.h @@ -37,18 +37,25 @@ struct MergeRecord ///////////////////////////////// public: MergeRecord(); + MergeRecord( const MergeRecord* record ); + + + ///////////////////////////////// + // Object duplication + ///////////////////////////////// + MergeRecord* clone() const; ///////////////////////////////// // Properties ///////////////////////////////// public: - inline bool isSelected() const; - inline void setSelected( bool value ); - inline bool empty() const; + bool isSelected() const; + void setSelected( bool value ); + bool isEmpty() const; - inline const QList& fieldList() const; - inline void setFieldList( QList& value ); + const QList& fieldList() const; + void setFieldList( QList& value ); ///////////////////////////////// @@ -60,37 +67,4 @@ private: }; -///////////////////////////////// -// INLINE METHODS -///////////////////////////////// -bool MergeRecord::isSelected() const -{ - return mSelected; -} - - -void MergeRecord::setSelected( bool value ) -{ - mSelected = value; -} - - -bool MergeRecord::empty() const -{ - return mFieldList.size() == 0; -} - - -const QList& MergeRecord::fieldList() const -{ - return mFieldList; -} - - -void MergeRecord::setFieldList( QList& value ) -{ - mFieldList = value; -} - - #endif // MergeRecord_h diff --git a/glabels/MergeText.cpp b/glabels/MergeText.cpp new file mode 100644 index 0000000..7cbcfd8 --- /dev/null +++ b/glabels/MergeText.cpp @@ -0,0 +1,101 @@ +/* MergeText.cpp + * + * Copyright (C) 2015 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#include "MergeText.h" + + +/// +/// Constructor +/// +MergeText::MergeText( QChar delimiter, bool line1HasKeys ) : Merge( Merge::FILE ) +{ +} + + +/// +/// Constructor +/// +MergeText::MergeText( const MergeText* merge ) + : Merge( merge ), mDelimeter(merge->mDelimeter), mLine1HasKeys(merge->mLine1HasKeys) +{ +} + + +/// +/// Destructor +/// +MergeText::~MergeText() +{ +} + + +/// +/// Get key list +/// +QList MergeText::keyList() const +{ + QList emptyList; + return emptyList; +} + + +/// +/// Get primary key +/// +QString MergeText::primaryKey() const +{ + return ""; +} + + +/// +/// Open source +/// +void MergeText::open() +{ + mFile.setFileName( source() ); + mFile.open( QIODevice::ReadOnly|QIODevice::Text ); + + if ( mLine1HasKeys && mFile.isOpen() ) + { + // Todo parse line #1, create key list from string list + } +} + + +/// +/// Close source +/// +void MergeText::close() +{ + if ( mFile.isOpen() ) + { + mFile.close(); + } +} + + +/// +/// Read next record +/// +MergeRecord* MergeText::readNextRecord() +{ + return 0; +} diff --git a/glabels/MergeText.h b/glabels/MergeText.h new file mode 100644 index 0000000..5d2e406 --- /dev/null +++ b/glabels/MergeText.h @@ -0,0 +1,67 @@ +/* MergeText.h + * + * Copyright (C) 2015 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#ifndef MergeText_h +#define MergeText_h + +#include "Merge.h" + +#include + + +/// +/// MergeText Backend +/// +struct MergeText : public Merge +{ + + ///////////////////////////////// + // Life Cycle + ///////////////////////////////// +protected: + MergeText( QChar delimiter, bool line1HasKeys ); + MergeText( const MergeText* merge ); + virtual ~MergeText(); + + + ///////////////////////////////// + // Implementation of virtual methods + ///////////////////////////////// +public: + QList keyList() const; + QString primaryKey() const; +protected: + void open(); + void close(); + MergeRecord* readNextRecord(); + + + ///////////////////////////////// + // Private data + ///////////////////////////////// +private: + QChar mDelimeter; + bool mLine1HasKeys; + + QFile mFile; +}; + + +#endif // MergeText_h diff --git a/glabels/ui/MergeView.ui b/glabels/ui/MergeView.ui index 13342f1..3ed8184 100644 --- a/glabels/ui/MergeView.ui +++ b/glabels/ui/MergeView.ui @@ -1,7 +1,7 @@ MergeView - + 0 @@ -22,6 +22,13 @@ + + + + Location + + + @@ -29,22 +36,15 @@ - - - - + Location: - - - - Placeholder - - + + @@ -71,19 +71,19 @@ - + - + Select all - + Unselect all @@ -110,5 +110,76 @@ - + + + selectAllButton + clicked() + MergeView + onSelectAllButtonClicked() + + + 63 + 571 + + + 69 + 601 + + + + + unselectAllButton + clicked() + MergeView + onUnselectAllButtonClicked() + + + 178 + 567 + + + 263 + 600 + + + + + locationButton + clicked() + MergeView + onUnselectAllButtonClicked() + + + 175 + 85 + + + 570 + 75 + + + + + formatCombo + activated(int) + MergeView + onFormatComboChanged() + + + 166 + 48 + + + 565 + 56 + + + + + + onSelectAllButtonClicked() + onUnselectAllButtonClicked() + onLocationButtonClicked() + onFormatComboChanged() +