Some fleshing out of MergeView.

This commit is contained in:
Jim Evins
2016-05-10 23:59:57 -04:00
parent 37358aac43
commit 8b56520fed
13 changed files with 175 additions and 29 deletions
+3 -4
View File
@@ -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();
}
@@ -283,10 +285,7 @@ void LabelModel::setMerge( Merge* merge )
{
if ( merge != mMerge )
{
if ( mMerge )
{
delete mMerge;
}
delete mMerge;
mMerge = merge;
emit mergeChanged();
+1
View File
@@ -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
View File
@@ -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;
+18 -2
View File
@@ -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
///
+3 -1
View File
@@ -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 );
/////////////////////////////////
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
};
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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;
};
+2
View File
@@ -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();