Some fleshing out of MergeView.
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include <QMimeData>
|
||||
#include <QtDebug>
|
||||
|
||||
#include "MergeNone.h"
|
||||
#include "LabelModelObject.h"
|
||||
#include "LabelRegion.h"
|
||||
#include "XmlLabelCreator.h"
|
||||
@@ -45,6 +46,7 @@ namespace
|
||||
///
|
||||
LabelModel::LabelModel() : mUntitledInstance(0), mModified(true), mTmplate(0), mRotate(false)
|
||||
{
|
||||
mMerge = new MergeNone();
|
||||
}
|
||||
|
||||
|
||||
@@ -282,11 +284,8 @@ Merge* LabelModel::merge() const
|
||||
void LabelModel::setMerge( Merge* merge )
|
||||
{
|
||||
if ( merge != mMerge )
|
||||
{
|
||||
if ( mMerge )
|
||||
{
|
||||
delete mMerge;
|
||||
}
|
||||
mMerge = merge;
|
||||
|
||||
emit mergeChanged();
|
||||
|
||||
@@ -169,6 +169,7 @@ void MainWindow::setModel( LabelModel *label )
|
||||
mPropertiesView->setModel( mModel, mUndoRedoModel );
|
||||
mLabelEditor->setModel( mModel, mUndoRedoModel );
|
||||
mObjectEditor->setModel( mModel, mUndoRedoModel );
|
||||
mMergeView->setModel( mModel , mUndoRedoModel );
|
||||
mPrintView->setModel( mModel );
|
||||
|
||||
mContents->setEnabled( true );
|
||||
|
||||
+2
-1
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QList>
|
||||
|
||||
#include "MergeRecord.h"
|
||||
@@ -78,7 +79,7 @@ public:
|
||||
// Virtual methods
|
||||
/////////////////////////////////
|
||||
public:
|
||||
virtual QList<QString> keyList() const = 0;
|
||||
virtual QStringList keyList() const = 0;
|
||||
virtual QString primaryKey() const = 0;
|
||||
protected:
|
||||
virtual void open() = 0;
|
||||
|
||||
@@ -79,9 +79,9 @@ Merge* MergeFactory::createMerge( const QString& id )
|
||||
///
|
||||
/// Get name list
|
||||
///
|
||||
QList<QString> MergeFactory::nameList()
|
||||
QStringList MergeFactory::nameList()
|
||||
{
|
||||
QList<QString> list;
|
||||
QStringList list;
|
||||
|
||||
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
|
||||
///
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "Merge.h"
|
||||
#include <QCoreApplication>
|
||||
#include <QStringList>
|
||||
|
||||
|
||||
///
|
||||
@@ -55,9 +56,10 @@ public:
|
||||
|
||||
static Merge* createMerge( const QString& id );
|
||||
|
||||
static QList<QString> nameList();
|
||||
static QStringList nameList();
|
||||
static QString idToName( const QString& id );
|
||||
static QString nameToId( const QString& name );
|
||||
static SourceType idToType( const QString& id );
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -76,9 +76,9 @@ Merge* MergeNone::create()
|
||||
///
|
||||
/// Get key list
|
||||
///
|
||||
QList<QString> MergeNone::keyList() const
|
||||
QStringList MergeNone::keyList() const
|
||||
{
|
||||
QList<QString> emptyList;
|
||||
QStringList emptyList;
|
||||
return emptyList;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -33,7 +33,7 @@ struct MergeNone : public Merge
|
||||
/////////////////////////////////
|
||||
// Life Cycle
|
||||
/////////////////////////////////
|
||||
protected:
|
||||
public:
|
||||
MergeNone();
|
||||
MergeNone( const MergeNone* merge );
|
||||
virtual ~MergeNone();
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
// Implementation of virtual methods
|
||||
/////////////////////////////////
|
||||
public:
|
||||
QList<QString> keyList() const;
|
||||
QStringList keyList() const;
|
||||
QString primaryKey() const;
|
||||
protected:
|
||||
void open();
|
||||
|
||||
+13
-5
@@ -20,6 +20,9 @@
|
||||
|
||||
#include "MergeText.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <QtDebug>
|
||||
|
||||
|
||||
///
|
||||
/// Constructor
|
||||
@@ -52,9 +55,9 @@ MergeText::~MergeText()
|
||||
///
|
||||
/// Get key list
|
||||
///
|
||||
QList<QString> MergeText::keyList() const
|
||||
QStringList MergeText::keyList() const
|
||||
{
|
||||
QList<QString> keys;
|
||||
QStringList keys;
|
||||
for ( int iField = 0; iField < mNFieldsMax; iField++ )
|
||||
{
|
||||
keys << keyFromIndex(iField);
|
||||
@@ -89,6 +92,10 @@ void MergeText::open()
|
||||
{
|
||||
mKeys.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
mNFieldsMax = mKeys.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +117,7 @@ void MergeText::close()
|
||||
///
|
||||
MergeRecord* MergeText::readNextRecord()
|
||||
{
|
||||
QList<QString> values = parseLine();
|
||||
QStringList values = parseLine();
|
||||
if ( !values.isEmpty() )
|
||||
{
|
||||
MergeRecord* record = new MergeRecord();
|
||||
@@ -121,6 +128,7 @@ MergeRecord* MergeText::readNextRecord()
|
||||
(*record)[ keyFromIndex(iField) ] = value;
|
||||
iField++;
|
||||
}
|
||||
mNFieldsMax = std::max( mNFieldsMax, iField );
|
||||
|
||||
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
|
||||
/// empty field. Returns an empty list when done.
|
||||
///
|
||||
QList<QString> MergeText::parseLine()
|
||||
QStringList MergeText::parseLine()
|
||||
{
|
||||
QList<QString> fields;
|
||||
QStringList fields;
|
||||
|
||||
enum State
|
||||
{
|
||||
|
||||
+3
-3
@@ -45,7 +45,7 @@ protected:
|
||||
// Implementation of virtual methods
|
||||
/////////////////////////////////
|
||||
public:
|
||||
QList<QString> keyList() const;
|
||||
QStringList keyList() const;
|
||||
QString primaryKey() const;
|
||||
protected:
|
||||
void open();
|
||||
@@ -57,7 +57,7 @@ protected:
|
||||
// Private methods
|
||||
/////////////////////////////////
|
||||
QString keyFromIndex( int iField ) const;
|
||||
QList<QString> parseLine();
|
||||
QStringList parseLine();
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -68,7 +68,7 @@ private:
|
||||
bool mLine1HasKeys;
|
||||
|
||||
QFile mFile;
|
||||
QList<QString> mKeys;
|
||||
QStringList mKeys;
|
||||
int mNFieldsMax;
|
||||
};
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
///
|
||||
MergeTextCsv::MergeTextCsv() : MergeText(',',false)
|
||||
{
|
||||
mId = "Text/CSV";
|
||||
mId = "Text/Comma";
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ MergeTextCsv* MergeTextCsv::clone() const
|
||||
///
|
||||
QString MergeTextCsv::id()
|
||||
{
|
||||
return "Text/CSV";
|
||||
return "Text/Comma";
|
||||
}
|
||||
|
||||
|
||||
|
||||
+105
-4
@@ -21,6 +21,7 @@
|
||||
#include "MergeView.h"
|
||||
|
||||
#include "LabelModel.h"
|
||||
#include "MergeFactory.h"
|
||||
#include <QtDebug>
|
||||
|
||||
|
||||
@@ -31,6 +32,9 @@ MergeView::MergeView( QWidget *parent )
|
||||
: QWidget(parent), mModel(0)
|
||||
{
|
||||
setupUi( this );
|
||||
|
||||
mMergeFormatNames = MergeFactory::nameList();
|
||||
formatCombo->addItems( mMergeFormatNames );
|
||||
}
|
||||
|
||||
|
||||
@@ -45,17 +49,114 @@ MergeView::~MergeView()
|
||||
///
|
||||
/// Set Model
|
||||
///
|
||||
void MergeView::setModel( LabelModel* model )
|
||||
void MergeView::setModel( LabelModel* model, UndoRedoModel* undoRedoModel )
|
||||
{
|
||||
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"
|
||||
|
||||
|
||||
class LabelModel; // Forward reference
|
||||
// Forward references
|
||||
class LabelModel;
|
||||
class UndoRedoModel;
|
||||
class Merge;
|
||||
|
||||
|
||||
///
|
||||
@@ -46,21 +49,34 @@ public:
|
||||
/////////////////////////////////
|
||||
// Public methods
|
||||
/////////////////////////////////
|
||||
void setModel( LabelModel* model );
|
||||
void setModel( LabelModel* model, UndoRedoModel* undoRedoModel );
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Slots
|
||||
/////////////////////////////////
|
||||
private slots:
|
||||
void onLabelChanged();
|
||||
void onMergeChanged();
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Private methods
|
||||
/////////////////////////////////
|
||||
private:
|
||||
void loadHeaders( Merge* merge );
|
||||
void loadTable( Merge* merge );
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Private Data
|
||||
/////////////////////////////////
|
||||
private:
|
||||
QStringList mMergeFormatNames;
|
||||
|
||||
LabelModel* mModel;
|
||||
UndoRedoModel* mUndoRedoModel;
|
||||
|
||||
QStringList mKeys;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "libglabels/Db.h"
|
||||
#include "Settings.h"
|
||||
#include "MergeFactory.h"
|
||||
#include "StartupWizard.h"
|
||||
|
||||
|
||||
@@ -36,6 +37,7 @@ int main( int argc, char **argv )
|
||||
|
||||
Settings::init();
|
||||
glabels::Db::init();
|
||||
MergeFactory::init();
|
||||
////// TEMPORARY TESTING ////////
|
||||
#if 0
|
||||
glabels::Db::printKnownPapers();
|
||||
|
||||
Reference in New Issue
Block a user