From 73b7475cbcd67855a21e3faaee6c9dfad246e659 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Sat, 14 May 2016 13:25:24 -0400 Subject: [PATCH] Finished fleshing out MergeView for now. --- glabels/MergeFactory.cpp | 16 ++++++ glabels/MergeFactory.h | 1 + glabels/MergeRecord.cpp | 2 +- glabels/MergeText.cpp | 1 + glabels/MergeView.cpp | 102 ++++++++++++++++++++++++++++++--------- glabels/MergeView.h | 7 ++- glabels/ui/MergeView.ui | 16 +++--- 7 files changed, 111 insertions(+), 34 deletions(-) diff --git a/glabels/MergeFactory.cpp b/glabels/MergeFactory.cpp index bd786a5..008bd27 100644 --- a/glabels/MergeFactory.cpp +++ b/glabels/MergeFactory.cpp @@ -140,6 +140,22 @@ MergeFactory::SourceType MergeFactory::idToType( const QString& id ) } +/// +/// Lookup ID from index +/// +QString MergeFactory::indexToId( int index ) +{ + QList ids = mBackendIdMap.keys(); + + if ( (index > 0) && (index < ids.size()) ) + { + return ids[index]; + } + + return "None"; +} + + /// /// Register backend /// diff --git a/glabels/MergeFactory.h b/glabels/MergeFactory.h index 1bced79..edd3718 100644 --- a/glabels/MergeFactory.h +++ b/glabels/MergeFactory.h @@ -60,6 +60,7 @@ public: static QString idToName( const QString& id ); static QString nameToId( const QString& name ); static SourceType idToType( const QString& id ); + static QString indexToId( int index ); ///////////////////////////////// diff --git a/glabels/MergeRecord.cpp b/glabels/MergeRecord.cpp index 6fcb1d1..570988d 100644 --- a/glabels/MergeRecord.cpp +++ b/glabels/MergeRecord.cpp @@ -24,7 +24,7 @@ /// /// Constructor /// -MergeRecord::MergeRecord() : mSelected( false ) +MergeRecord::MergeRecord() : mSelected( true ) { } diff --git a/glabels/MergeText.cpp b/glabels/MergeText.cpp index 5fab99b..2446657 100644 --- a/glabels/MergeText.cpp +++ b/glabels/MergeText.cpp @@ -84,6 +84,7 @@ void MergeText::open() mFile.open( QIODevice::ReadOnly|QIODevice::Text ); mKeys.clear(); + mNFieldsMax = 0; if ( mLine1HasKeys && mFile.isOpen() ) { diff --git a/glabels/MergeView.cpp b/glabels/MergeView.cpp index 17b3988..37c46ba 100644 --- a/glabels/MergeView.cpp +++ b/glabels/MergeView.cpp @@ -22,6 +22,8 @@ #include "LabelModel.h" #include "MergeFactory.h" +#include +#include #include @@ -54,8 +56,18 @@ void MergeView::setModel( LabelModel* model, UndoRedoModel* undoRedoModel ) mModel = model; mUndoRedoModel = undoRedoModel; + // Initialize CWD + if ( model->fileName().isEmpty() ) + { + mCwd = "."; + } + else + { + mCwd = QFileInfo( model->fileName() ).absolutePath(); + } + onMergeChanged(); - connect( mModel, SIGNAL(changed()), this, SLOT(onMergeChanged()) ); + connect( mModel, SIGNAL(mergeChanged()), this, SLOT(onMergeChanged()) ); } @@ -65,6 +77,7 @@ void MergeView::setModel( LabelModel* model, UndoRedoModel* undoRedoModel ) void MergeView::onMergeChanged() { int index = mMergeFormatNames.indexOf( MergeFactory::idToName( mModel->merge()->id() ) ); + mOldFormatComboIndex = index; formatCombo->setCurrentIndex( index ); switch ( MergeFactory::idToType( mModel->merge()->id() ) ) @@ -81,7 +94,7 @@ void MergeView::onMergeChanged() locationButton->setEnabled( true ); if ( mModel->merge()->source().isEmpty() ) { - locationButton->setText( "" ); + locationButton->setText( "Select file..." ); } else { @@ -94,6 +107,8 @@ void MergeView::onMergeChanged() break; } + recordsTable->clear(); + recordsTable->setColumnCount( 0 ); loadHeaders( mModel->merge() ); loadTable( mModel->merge() ); @@ -109,6 +124,10 @@ void MergeView::onMergeChanged() /// void MergeView::onMergeSourceChanged() { + locationButton->setText( mModel->merge()->source() ); + + recordsTable->clear(); + recordsTable->setColumnCount( 0 ); loadHeaders( mModel->merge() ); loadTable( mModel->merge() ); } @@ -136,6 +155,38 @@ void MergeView::onMergeSelectionChanged() } +/// +/// Format combo changed handler +void MergeView::onFormatComboActivated() +{ + int index = formatCombo->currentIndex(); + if ( index != mOldFormatComboIndex ) + { + mOldFormatComboIndex = index; + + mModel->setMerge( MergeFactory::createMerge( MergeFactory::indexToId(index) ) ); + } +} + + +/// +/// Location button clicked handler +/// +void MergeView::onLocationButtonClicked() +{ + QString fileName = + QFileDialog::getOpenFileName( this, + tr("Select merge file"), + mCwd, + tr("All files (*)") ); + if ( !fileName.isEmpty() ) + { + mModel->merge()->setSource( fileName ); + mCwd = QFileInfo( fileName ).absolutePath(); // Update CWD + } +} + + /// /// Select all button clicked handler /// @@ -177,33 +228,36 @@ void MergeView::loadHeaders( Merge* merge ) mPrimaryKey = merge->primaryKey(); mKeys = merge->keyList(); - recordsTable->setColumnCount( mKeys.size() + 1 ); // Include extra column - - // First column = primay Key - QTableWidgetItem* item = new QTableWidgetItem( mPrimaryKey ); - item->setFlags( Qt::ItemIsEnabled ); - recordsTable->setHorizontalHeaderItem( 0, item ); - - // Starting on second column, one column per key, skip primary Key - int iCol = 1; - foreach ( QString key, mKeys ) + if ( mKeys.size() > 0 ) { - if ( key != mPrimaryKey ) - { - QTableWidgetItem* item = new QTableWidgetItem( key ); - item->setFlags( Qt::ItemIsEnabled ); - recordsTable->setHorizontalHeaderItem( iCol, item ); + recordsTable->setColumnCount( mKeys.size() + 1 ); // Include extra column + + // First column = primay Key + QTableWidgetItem* item = new QTableWidgetItem( mPrimaryKey ); + item->setFlags( Qt::ItemIsEnabled ); + recordsTable->setHorizontalHeaderItem( 0, item ); + + // Starting on second column, one column per key, skip primary Key + int iCol = 1; + foreach ( QString key, mKeys ) + { + if ( key != mPrimaryKey ) + { + QTableWidgetItem* item = new QTableWidgetItem( key ); + item->setFlags( Qt::ItemIsEnabled ); + recordsTable->setHorizontalHeaderItem( iCol, item ); + + iCol++; + } - iCol++; } + // Extra dummy column to fill any extra horizontal space + QTableWidgetItem* fillItem = new QTableWidgetItem(); + fillItem->setFlags( Qt::NoItemFlags ); + recordsTable->setHorizontalHeaderItem( iCol, fillItem ); + recordsTable->horizontalHeader()->setStretchLastSection( true ); } - - // Extra dummy column to fill any extra horizontal space - QTableWidgetItem* fillItem = new QTableWidgetItem(); - fillItem->setFlags( Qt::NoItemFlags ); - recordsTable->setHorizontalHeaderItem( iCol, fillItem ); - recordsTable->horizontalHeader()->setStretchLastSection( true ); } diff --git a/glabels/MergeView.h b/glabels/MergeView.h index 488e6df..4227867 100644 --- a/glabels/MergeView.h +++ b/glabels/MergeView.h @@ -60,6 +60,8 @@ private slots: void onMergeSourceChanged(); void onMergeSelectionChanged(); + void onFormatComboActivated(); + void onLocationButtonClicked(); void onSelectAllButtonClicked(); void onUnselectAllButtonClicked(); void onCellChanged( int iRow, int iCol ); @@ -79,13 +81,16 @@ private: private: QStringList mMergeFormatNames; - LabelModel* mModel; + LabelModel* mModel; UndoRedoModel* mUndoRedoModel; QStringList mKeys; QString mPrimaryKey; + QString mCwd; + bool mBlock; + int mOldFormatComboIndex; }; diff --git a/glabels/ui/MergeView.ui b/glabels/ui/MergeView.ui index 3ed8184..fbb9ee6 100644 --- a/glabels/ui/MergeView.ui +++ b/glabels/ui/MergeView.ui @@ -147,11 +147,11 @@ locationButton clicked() MergeView - onUnselectAllButtonClicked() + onLocationButtonClicked() - 175 - 85 + 174 + 93 570 @@ -163,15 +163,15 @@ formatCombo activated(int) MergeView - onFormatComboChanged() + onFormatComboActivated() - 166 + 162 48 - 565 - 56 + 563 + 50 @@ -180,6 +180,6 @@ onSelectAllButtonClicked() onUnselectAllButtonClicked() onLocationButtonClicked() - onFormatComboChanged() + onFormatComboActivated()