From 7b9f377b1ab7bdbbb9c9c5bf6c1be931b8b0e338 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Fri, 20 May 2016 23:54:46 -0400 Subject: [PATCH] Use a combo box for merge field selection. --- glabels/ColorPaletteDialog.cpp | 67 +++++++++++++++++++++++----------- glabels/ColorPaletteDialog.h | 12 ++++-- 2 files changed, 54 insertions(+), 25 deletions(-) diff --git a/glabels/ColorPaletteDialog.cpp b/glabels/ColorPaletteDialog.cpp index 6385d44..4f686fc 100644 --- a/glabels/ColorPaletteDialog.cpp +++ b/glabels/ColorPaletteDialog.cpp @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include @@ -141,7 +143,7 @@ ColorPaletteDialog::ColorPaletteDialog( const QString& defaultLabel, hline3->setLineWidth( 1 ); vLayout->addWidget( hline3 ); - ColorPaletteButtonItem* customColorButton = new ColorPaletteButtonItem( tr("Custom color") ); + ColorPaletteButtonItem* customColorButton = new ColorPaletteButtonItem( tr("Custom color...") ); connect( customColorButton, SIGNAL(activated()), this, SLOT(onCustomColorItemActivated()) ); vLayout->addWidget( customColorButton ); @@ -150,17 +152,22 @@ ColorPaletteDialog::ColorPaletteDialog( const QString& defaultLabel, hline4->setLineWidth( 1 ); vLayout->addWidget( hline4 ); - mMergeFieldButton = new ColorPaletteButtonItem( tr("Merge field") ); - connect( mMergeFieldButton, SIGNAL(activated()), this, SLOT(onMergeFieldItemActivated()) ); - mMergeFieldButton->setEnabled( false ); - vLayout->addWidget( mMergeFieldButton ); + mMergeFieldCombo = new QComboBox(); + mMergeFieldCombo->addItem( tr("Merge field...") ); + mMergeFieldCombo->setMinimumSize( 34, 34 ); + mMergeFieldCombo->setFrame( false ); + mMergeFieldCombo->setEnabled( false ); + connect( mMergeFieldCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboIndexChanged(int)) ); + vLayout->addWidget( mMergeFieldCombo ); + // Item 0 is the ComboBox title, not an item intended for selection. So disable it. + const QStandardItemModel* model = qobject_cast(mMergeFieldCombo->model()); + QStandardItem* item = model->item(0); + item->setFlags( item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled) ); + setLayout( vLayout ); loadCustomColorHistory(); - - mFieldMenu = new FieldMenu(); - connect( mFieldMenu, SIGNAL(keySelected(QString)), this, SLOT(onFieldMenuItemActivated(QString)) ); } @@ -172,21 +179,35 @@ void ColorPaletteDialog::setColorNode( const ColorNode& colorNode ) void ColorPaletteDialog::setKeys( const QStringList& keyList ) { + mKeys = keyList; + + // Clear old keys, (all entries, except item 0) + for ( int index = mMergeFieldCombo->count()-1; index > 0; index-- ) + { + mMergeFieldCombo->removeItem( index ); + } + + // Add new keys if ( keyList.size() > 0 ) { - mFieldMenu->setKeys( keyList ); - mMergeFieldButton->setEnabled( true ); + mMergeFieldCombo->addItems( keyList ); + mMergeFieldCombo->setEnabled( true ); } else { - mMergeFieldButton->setEnabled( false ); + mMergeFieldCombo->setEnabled( false ); } } void ColorPaletteDialog::clearKeys() { - mMergeFieldButton->setEnabled( false ); + + for ( int index = mMergeFieldCombo->count()-1; index > 0; index-- ) + { + mMergeFieldCombo->removeItem( index ); + } + mMergeFieldCombo->setEnabled( false ); } @@ -275,19 +296,23 @@ void ColorPaletteDialog::loadCustomColorHistory() } -void ColorPaletteDialog::onMergeFieldItemActivated() +void ColorPaletteDialog::onComboIndexChanged( int index ) { - QPoint pos( mMergeFieldButton->width(), 0 ); - mFieldMenu->popup( mMergeFieldButton->mapToGlobal(pos) ); + if ( index != 0 ) + { + mColorNode.setFieldFlag( true ); + mColorNode.setColor( QColor("#eeeeec") ); + mColorNode.setKey( mKeys[index-1] ); + + emit colorChanged( mColorNode, false ); + accept(); + } } -void ColorPaletteDialog::onFieldMenuItemActivated( QString key ) +void ColorPaletteDialog::showEvent( QShowEvent* event ) { - mColorNode.setFieldFlag( true ); - mColorNode.setColor( QColor("#eeeeec") ); - mColorNode.setKey( key ); + mMergeFieldCombo->setCurrentIndex( 0 ); - emit colorChanged( mColorNode, false ); - accept(); + QDialog::showEvent( event ); } diff --git a/glabels/ColorPaletteDialog.h b/glabels/ColorPaletteDialog.h index 24f229a..39292c6 100644 --- a/glabels/ColorPaletteDialog.h +++ b/glabels/ColorPaletteDialog.h @@ -30,6 +30,8 @@ #include "ColorPaletteButtonItem.h" #include "FieldMenu.h" +class QComboBox; // Forward reference + /// /// Color Palette Dialog @@ -74,9 +76,11 @@ private slots: void onHistoryItemActivated( int id ); void onCustomColorItemActivated(); void onColorHistoryChanged(); - void onMergeFieldItemActivated(); - void onFieldMenuItemActivated( QString key ); + void onComboIndexChanged( int index ); +protected: + void showEvent( QShowEvent* event ); + ///////////////////////////////// // Private Methods @@ -105,8 +109,8 @@ private: ColorHistory* mColorHistory; ColorPaletteItem* mHistoryItem[PALETTE_COLS]; - FieldMenu* mFieldMenu; - ColorPaletteButtonItem* mMergeFieldButton; + QComboBox* mMergeFieldCombo; + QStringList mKeys; };