Some fleshing out of MergeView.
This commit is contained in:
@@ -28,6 +28,7 @@
|
|||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
|
||||||
|
#include "MergeNone.h"
|
||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
#include "LabelRegion.h"
|
#include "LabelRegion.h"
|
||||||
#include "XmlLabelCreator.h"
|
#include "XmlLabelCreator.h"
|
||||||
@@ -45,6 +46,7 @@ namespace
|
|||||||
///
|
///
|
||||||
LabelModel::LabelModel() : mUntitledInstance(0), mModified(true), mTmplate(0), mRotate(false)
|
LabelModel::LabelModel() : mUntitledInstance(0), mModified(true), mTmplate(0), mRotate(false)
|
||||||
{
|
{
|
||||||
|
mMerge = new MergeNone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -283,10 +285,7 @@ void LabelModel::setMerge( Merge* merge )
|
|||||||
{
|
{
|
||||||
if ( merge != mMerge )
|
if ( merge != mMerge )
|
||||||
{
|
{
|
||||||
if ( mMerge )
|
delete mMerge;
|
||||||
{
|
|
||||||
delete mMerge;
|
|
||||||
}
|
|
||||||
mMerge = merge;
|
mMerge = merge;
|
||||||
|
|
||||||
emit mergeChanged();
|
emit mergeChanged();
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ void MainWindow::setModel( LabelModel *label )
|
|||||||
mPropertiesView->setModel( mModel, mUndoRedoModel );
|
mPropertiesView->setModel( mModel, mUndoRedoModel );
|
||||||
mLabelEditor->setModel( mModel, mUndoRedoModel );
|
mLabelEditor->setModel( mModel, mUndoRedoModel );
|
||||||
mObjectEditor->setModel( mModel, mUndoRedoModel );
|
mObjectEditor->setModel( mModel, mUndoRedoModel );
|
||||||
|
mMergeView->setModel( mModel , mUndoRedoModel );
|
||||||
mPrintView->setModel( mModel );
|
mPrintView->setModel( mModel );
|
||||||
|
|
||||||
mContents->setEnabled( true );
|
mContents->setEnabled( true );
|
||||||
|
|||||||
+2
-1
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
|
||||||
#include "MergeRecord.h"
|
#include "MergeRecord.h"
|
||||||
@@ -78,7 +79,7 @@ public:
|
|||||||
// Virtual methods
|
// Virtual methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
virtual QList<QString> keyList() const = 0;
|
virtual QStringList keyList() const = 0;
|
||||||
virtual QString primaryKey() const = 0;
|
virtual QString primaryKey() const = 0;
|
||||||
protected:
|
protected:
|
||||||
virtual void open() = 0;
|
virtual void open() = 0;
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ Merge* MergeFactory::createMerge( const QString& id )
|
|||||||
///
|
///
|
||||||
/// Get name list
|
/// Get name list
|
||||||
///
|
///
|
||||||
QList<QString> MergeFactory::nameList()
|
QStringList MergeFactory::nameList()
|
||||||
{
|
{
|
||||||
QList<QString> list;
|
QStringList list;
|
||||||
|
|
||||||
foreach ( BackendEntry backend, mBackendIdMap )
|
foreach ( BackendEntry backend, mBackendIdMap )
|
||||||
{
|
{
|
||||||
@@ -124,6 +124,22 @@ QString MergeFactory::nameToId( const QString& name )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Convert ID to type
|
||||||
|
///
|
||||||
|
MergeFactory::SourceType MergeFactory::idToType( const QString& id )
|
||||||
|
{
|
||||||
|
if ( mBackendIdMap.contains( id ) )
|
||||||
|
{
|
||||||
|
return mBackendIdMap[id].type;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Register backend
|
/// Register backend
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include "Merge.h"
|
#include "Merge.h"
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -55,9 +56,10 @@ public:
|
|||||||
|
|
||||||
static Merge* createMerge( const QString& id );
|
static Merge* createMerge( const QString& id );
|
||||||
|
|
||||||
static QList<QString> nameList();
|
static QStringList nameList();
|
||||||
static QString idToName( const QString& id );
|
static QString idToName( const QString& id );
|
||||||
static QString nameToId( const QString& name );
|
static QString nameToId( const QString& name );
|
||||||
|
static SourceType idToType( const QString& id );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
|||||||
@@ -76,9 +76,9 @@ Merge* MergeNone::create()
|
|||||||
///
|
///
|
||||||
/// Get key list
|
/// Get key list
|
||||||
///
|
///
|
||||||
QList<QString> MergeNone::keyList() const
|
QStringList MergeNone::keyList() const
|
||||||
{
|
{
|
||||||
QList<QString> emptyList;
|
QStringList emptyList;
|
||||||
return emptyList;
|
return emptyList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -33,7 +33,7 @@ struct MergeNone : public Merge
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Life Cycle
|
// Life Cycle
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
protected:
|
public:
|
||||||
MergeNone();
|
MergeNone();
|
||||||
MergeNone( const MergeNone* merge );
|
MergeNone( const MergeNone* merge );
|
||||||
virtual ~MergeNone();
|
virtual ~MergeNone();
|
||||||
@@ -57,7 +57,7 @@ public:
|
|||||||
// Implementation of virtual methods
|
// Implementation of virtual methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
QList<QString> keyList() const;
|
QStringList keyList() const;
|
||||||
QString primaryKey() const;
|
QString primaryKey() const;
|
||||||
protected:
|
protected:
|
||||||
void open();
|
void open();
|
||||||
|
|||||||
+13
-5
@@ -20,6 +20,9 @@
|
|||||||
|
|
||||||
#include "MergeText.h"
|
#include "MergeText.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
@@ -52,9 +55,9 @@ MergeText::~MergeText()
|
|||||||
///
|
///
|
||||||
/// Get key list
|
/// Get key list
|
||||||
///
|
///
|
||||||
QList<QString> MergeText::keyList() const
|
QStringList MergeText::keyList() const
|
||||||
{
|
{
|
||||||
QList<QString> keys;
|
QStringList keys;
|
||||||
for ( int iField = 0; iField < mNFieldsMax; iField++ )
|
for ( int iField = 0; iField < mNFieldsMax; iField++ )
|
||||||
{
|
{
|
||||||
keys << keyFromIndex(iField);
|
keys << keyFromIndex(iField);
|
||||||
@@ -89,6 +92,10 @@ void MergeText::open()
|
|||||||
{
|
{
|
||||||
mKeys.clear();
|
mKeys.clear();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mNFieldsMax = mKeys.size();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +117,7 @@ void MergeText::close()
|
|||||||
///
|
///
|
||||||
MergeRecord* MergeText::readNextRecord()
|
MergeRecord* MergeText::readNextRecord()
|
||||||
{
|
{
|
||||||
QList<QString> values = parseLine();
|
QStringList values = parseLine();
|
||||||
if ( !values.isEmpty() )
|
if ( !values.isEmpty() )
|
||||||
{
|
{
|
||||||
MergeRecord* record = new MergeRecord();
|
MergeRecord* record = new MergeRecord();
|
||||||
@@ -121,6 +128,7 @@ MergeRecord* MergeText::readNextRecord()
|
|||||||
(*record)[ keyFromIndex(iField) ] = value;
|
(*record)[ keyFromIndex(iField) ] = value;
|
||||||
iField++;
|
iField++;
|
||||||
}
|
}
|
||||||
|
mNFieldsMax = std::max( mNFieldsMax, iField );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
@@ -161,9 +169,9 @@ QString MergeText::keyFromIndex( int iField ) const
|
|||||||
/// Returns a list of fields. A blank line is considered a line with one
|
/// Returns a list of fields. A blank line is considered a line with one
|
||||||
/// empty field. Returns an empty list when done.
|
/// empty field. Returns an empty list when done.
|
||||||
///
|
///
|
||||||
QList<QString> MergeText::parseLine()
|
QStringList MergeText::parseLine()
|
||||||
{
|
{
|
||||||
QList<QString> fields;
|
QStringList fields;
|
||||||
|
|
||||||
enum State
|
enum State
|
||||||
{
|
{
|
||||||
|
|||||||
+3
-3
@@ -45,7 +45,7 @@ protected:
|
|||||||
// Implementation of virtual methods
|
// Implementation of virtual methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
QList<QString> keyList() const;
|
QStringList keyList() const;
|
||||||
QString primaryKey() const;
|
QString primaryKey() const;
|
||||||
protected:
|
protected:
|
||||||
void open();
|
void open();
|
||||||
@@ -57,7 +57,7 @@ protected:
|
|||||||
// Private methods
|
// Private methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
QString keyFromIndex( int iField ) const;
|
QString keyFromIndex( int iField ) const;
|
||||||
QList<QString> parseLine();
|
QStringList parseLine();
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
@@ -68,7 +68,7 @@ private:
|
|||||||
bool mLine1HasKeys;
|
bool mLine1HasKeys;
|
||||||
|
|
||||||
QFile mFile;
|
QFile mFile;
|
||||||
QList<QString> mKeys;
|
QStringList mKeys;
|
||||||
int mNFieldsMax;
|
int mNFieldsMax;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
///
|
///
|
||||||
MergeTextCsv::MergeTextCsv() : MergeText(',',false)
|
MergeTextCsv::MergeTextCsv() : MergeText(',',false)
|
||||||
{
|
{
|
||||||
mId = "Text/CSV";
|
mId = "Text/Comma";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ MergeTextCsv* MergeTextCsv::clone() const
|
|||||||
///
|
///
|
||||||
QString MergeTextCsv::id()
|
QString MergeTextCsv::id()
|
||||||
{
|
{
|
||||||
return "Text/CSV";
|
return "Text/Comma";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+105
-4
@@ -21,6 +21,7 @@
|
|||||||
#include "MergeView.h"
|
#include "MergeView.h"
|
||||||
|
|
||||||
#include "LabelModel.h"
|
#include "LabelModel.h"
|
||||||
|
#include "MergeFactory.h"
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
|
||||||
|
|
||||||
@@ -31,6 +32,9 @@ MergeView::MergeView( QWidget *parent )
|
|||||||
: QWidget(parent), mModel(0)
|
: QWidget(parent), mModel(0)
|
||||||
{
|
{
|
||||||
setupUi( this );
|
setupUi( this );
|
||||||
|
|
||||||
|
mMergeFormatNames = MergeFactory::nameList();
|
||||||
|
formatCombo->addItems( mMergeFormatNames );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -45,17 +49,114 @@ MergeView::~MergeView()
|
|||||||
///
|
///
|
||||||
/// Set Model
|
/// Set Model
|
||||||
///
|
///
|
||||||
void MergeView::setModel( LabelModel* model )
|
void MergeView::setModel( LabelModel* model, UndoRedoModel* undoRedoModel )
|
||||||
{
|
{
|
||||||
mModel = model;
|
mModel = model;
|
||||||
|
mUndoRedoModel = undoRedoModel;
|
||||||
|
|
||||||
connect( mModel, SIGNAL(changed()), this, SLOT(onLabelChanged()) );
|
onMergeChanged();
|
||||||
|
connect( mModel, SIGNAL(changed()), this, SLOT(onMergeChanged()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Label changed handler
|
/// Merge changed handler
|
||||||
///
|
///
|
||||||
void MergeView::onLabelChanged()
|
void MergeView::onMergeChanged()
|
||||||
{
|
{
|
||||||
|
int index = mMergeFormatNames.indexOf( MergeFactory::idToName( mModel->merge()->id() ) );
|
||||||
|
formatCombo->setCurrentIndex( index );
|
||||||
|
|
||||||
|
switch ( MergeFactory::idToType( mModel->merge()->id() ) )
|
||||||
|
{
|
||||||
|
case MergeFactory::NONE:
|
||||||
|
case MergeFactory::FIXED:
|
||||||
|
locationLabel->setEnabled( false );
|
||||||
|
locationButton->setEnabled( false );
|
||||||
|
locationButton->setText( "" );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MergeFactory::FILE:
|
||||||
|
locationLabel->setEnabled( true );
|
||||||
|
locationButton->setEnabled( true );
|
||||||
|
if ( mModel->merge()->source().isEmpty() )
|
||||||
|
{
|
||||||
|
locationButton->setText( "" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
locationButton->setText( mModel->merge()->source() );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
qWarning( "MergeView::onMergeChanged()::Should not be reached!" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
loadHeaders( mModel->merge() );
|
||||||
|
loadTable( mModel->merge() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load headers
|
||||||
|
///
|
||||||
|
void MergeView::loadHeaders( Merge* merge )
|
||||||
|
{
|
||||||
|
mKeys = merge->keyList();
|
||||||
|
|
||||||
|
recordsTable->setColumnCount( mKeys.size() + 1 );
|
||||||
|
|
||||||
|
QTableWidgetItem* item = new QTableWidgetItem();
|
||||||
|
item->setFlags( Qt::ItemIsEnabled );
|
||||||
|
recordsTable->setHorizontalHeaderItem( 0, item );
|
||||||
|
|
||||||
|
int iCol = 1;
|
||||||
|
foreach ( QString key, mKeys )
|
||||||
|
{
|
||||||
|
QTableWidgetItem* item = new QTableWidgetItem( key );
|
||||||
|
item->setFlags( Qt::ItemIsEnabled );
|
||||||
|
recordsTable->setHorizontalHeaderItem( iCol, item );
|
||||||
|
|
||||||
|
iCol++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load table
|
||||||
|
///
|
||||||
|
void MergeView::loadTable( Merge* merge )
|
||||||
|
{
|
||||||
|
const QList<MergeRecord*>& records = merge->recordList();
|
||||||
|
recordsTable->setRowCount( records.size() );
|
||||||
|
|
||||||
|
int iRow = 0;
|
||||||
|
foreach ( MergeRecord* record, records )
|
||||||
|
{
|
||||||
|
QTableWidgetItem* item = new QTableWidgetItem();
|
||||||
|
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsUserCheckable );
|
||||||
|
item->setCheckState( record->isSelected() ? Qt::Checked : Qt::Unchecked );
|
||||||
|
recordsTable->setItem( iRow, 0, item );
|
||||||
|
recordsTable->resizeColumnToContents( 0 );
|
||||||
|
|
||||||
|
int iCol = 1;
|
||||||
|
foreach ( QString key, mKeys )
|
||||||
|
{
|
||||||
|
if ( record->contains( key ) )
|
||||||
|
{
|
||||||
|
QTableWidgetItem* item = new QTableWidgetItem( (*record)[key] );
|
||||||
|
item->setFlags( Qt::ItemIsEnabled );
|
||||||
|
recordsTable->setItem( iRow, iCol, item );
|
||||||
|
recordsTable->resizeColumnToContents( iCol );
|
||||||
|
}
|
||||||
|
|
||||||
|
iCol++;
|
||||||
|
}
|
||||||
|
|
||||||
|
iRow++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-3
@@ -24,7 +24,10 @@
|
|||||||
#include "ui_MergeView.h"
|
#include "ui_MergeView.h"
|
||||||
|
|
||||||
|
|
||||||
class LabelModel; // Forward reference
|
// Forward references
|
||||||
|
class LabelModel;
|
||||||
|
class UndoRedoModel;
|
||||||
|
class Merge;
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -46,21 +49,34 @@ public:
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Public methods
|
// Public methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
void setModel( LabelModel* model );
|
void setModel( LabelModel* model, UndoRedoModel* undoRedoModel );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Slots
|
// Slots
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private slots:
|
private slots:
|
||||||
void onLabelChanged();
|
void onMergeChanged();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Private methods
|
||||||
|
/////////////////////////////////
|
||||||
|
private:
|
||||||
|
void loadHeaders( Merge* merge );
|
||||||
|
void loadTable( Merge* merge );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Private Data
|
// Private Data
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private:
|
private:
|
||||||
|
QStringList mMergeFormatNames;
|
||||||
|
|
||||||
LabelModel* mModel;
|
LabelModel* mModel;
|
||||||
|
UndoRedoModel* mUndoRedoModel;
|
||||||
|
|
||||||
|
QStringList mKeys;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include "libglabels/Db.h"
|
#include "libglabels/Db.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
|
#include "MergeFactory.h"
|
||||||
#include "StartupWizard.h"
|
#include "StartupWizard.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
Settings::init();
|
Settings::init();
|
||||||
glabels::Db::init();
|
glabels::Db::init();
|
||||||
|
MergeFactory::init();
|
||||||
////// TEMPORARY TESTING ////////
|
////// TEMPORARY TESTING ////////
|
||||||
#if 0
|
#if 0
|
||||||
glabels::Db::printKnownPapers();
|
glabels::Db::printKnownPapers();
|
||||||
|
|||||||
Reference in New Issue
Block a user