diff --git a/glabels/CMakeLists.txt b/glabels/CMakeLists.txt index df14917..0ca4ff0 100644 --- a/glabels/CMakeLists.txt +++ b/glabels/CMakeLists.txt @@ -13,7 +13,6 @@ set (glabels_sources ColorHistory.cpp ColorPaletteDialog.cpp ColorPaletteItem.cpp - ColorPaletteButtonItem.cpp ColorSwatch.cpp Cursors.cpp EditVariableDialog.cpp @@ -52,7 +51,6 @@ set (glabels_qobject_headers ColorHistory.h ColorPaletteDialog.h ColorPaletteItem.h - ColorPaletteButtonItem.h EditVariableDialog.h FieldButton.h File.h diff --git a/glabels/ColorButton.cpp b/glabels/ColorButton.cpp index 1abb9a0..9789628 100644 --- a/glabels/ColorButton.cpp +++ b/glabels/ColorButton.cpp @@ -124,15 +124,10 @@ namespace glabels } - void ColorButton::setKeys( const QList keyList ) + void ColorButton::setKeys( const merge::Merge* merge, + const model::Variables* variables ) { - mDialog->setKeys( keyList ); - } - - - void ColorButton::clearKeys() - { - mDialog->clearKeys(); + mDialog->setKeys( merge, variables ); } diff --git a/glabels/ColorButton.h b/glabels/ColorButton.h index eb16611..a7155d8 100644 --- a/glabels/ColorButton.h +++ b/glabels/ColorButton.h @@ -63,8 +63,9 @@ namespace glabels void setColor( QColor color ); void setToDefault(); model::ColorNode colorNode(); - void setKeys( const QList keyList ); - void clearKeys(); + + void setKeys( const merge::Merge* merge, + const model::Variables* variables ); ///////////////////////////////// diff --git a/glabels/ColorPaletteButtonItem.cpp b/glabels/ColorPaletteButtonItem.cpp deleted file mode 100644 index ce8d5bf..0000000 --- a/glabels/ColorPaletteButtonItem.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* ColorPaletteButtonItem.cpp - * - * Copyright (C) 2014 Jim Evins - * - * This file is part of gLabels-qt. - * - * gLabels-qt is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gLabels-qt is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with gLabels-qt. If not, see . - */ - -#include "ColorPaletteButtonItem.h" - -#include -#include - - -namespace glabels -{ - - // - // Private - // - namespace - { - const int border = 4; - const int hBox = 25; - const int outlineWidthPixels = 1; - } - - - /// - /// Constructor From Data - /// - ColorPaletteButtonItem::ColorPaletteButtonItem( const QString& text, QWidget* parent ) - : QWidget(parent), mText(text), mHover(false) - { - setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ) ); - setMinimumSize( hBox+2*border+1, hBox+2*border+1 ); - } - - - /// - /// Paint Event - /// - void ColorPaletteButtonItem::paintEvent( QPaintEvent* event ) - { - QPainter painter(this); - - // - // Draw background - // - if ( isEnabled() && mHover ) - { - QLinearGradient gradient( 0, 0, 0, height() ); - gradient.setColorAt( 0, palette().color( QPalette::Highlight ).lighter() ); - gradient.setColorAt( 1, palette().color( QPalette::Highlight ) ); - painter.setBrush( QBrush( gradient ) ); - - QPen pen( palette().color( QPalette::Text ) ); - pen.setWidth( outlineWidthPixels ); - painter.setPen( pen ); - - painter.drawRect( 0, 0, width()-1, height()-1 ); - } - - // - // Draw text - // - painter.setBrush( QBrush( Qt::NoBrush ) ); - - if ( isEnabled() && mHover ) - { - painter.setPen( QPen( palette().color( QPalette::HighlightedText ) ) ); - } - else - { - painter.setPen( QPen( palette().color( QPalette::Text ) ) ); - } - - QRect textRect( border, border, width()-2*border, hBox ); - - painter.drawText( textRect, Qt::AlignLeft|Qt::AlignVCenter, mText ); - } - - - /// - /// Enter Event - /// - void ColorPaletteButtonItem::enterEvent( QEvent* event ) - { - mHover = true; - update(); - } - - - /// - /// Leave Event - /// - void ColorPaletteButtonItem::leaveEvent( QEvent* event ) - { - mHover = false; - update(); - } - - - /// - /// Mouse Press Event - /// - void ColorPaletteButtonItem::mousePressEvent( QMouseEvent* event ) - { - emit activated(); - } - -} // namespace glabels diff --git a/glabels/ColorPaletteButtonItem.h b/glabels/ColorPaletteButtonItem.h deleted file mode 100644 index 0ffc627..0000000 --- a/glabels/ColorPaletteButtonItem.h +++ /dev/null @@ -1,75 +0,0 @@ -/* ColorPaletteButtonItem.h - * - * Copyright (C) 2014 Jim Evins - * - * This file is part of gLabels-qt. - * - * gLabels-qt is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gLabels-qt is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with gLabels-qt. If not, see . - */ - -#ifndef ColorPaletteButtonItem_h -#define ColorPaletteButtonItem_h - - -#include -#include - - -namespace glabels -{ - - /// - /// Color Palette Item - /// - class ColorPaletteButtonItem : public QWidget - { - Q_OBJECT - - ///////////////////////////////// - // Life Cycle - ///////////////////////////////// - public: - ColorPaletteButtonItem( const QString& text, QWidget* parent = nullptr ); - - - ///////////////////////////////// - // Signals - ///////////////////////////////// - signals: - void activated(); - - - ///////////////////////////////// - // Event handlers - ///////////////////////////////// - protected: - void paintEvent( QPaintEvent* event ) override; - void enterEvent( QEvent* event ) override; - void leaveEvent( QEvent* event ) override; - void mousePressEvent( QMouseEvent* event ) override; - - - ///////////////////////////////// - // Private Data - ///////////////////////////////// - private: - QString mText; - - bool mHover; - }; - -} - - -#endif // ColorPaletteButtonItem_h diff --git a/glabels/ColorPaletteDialog.cpp b/glabels/ColorPaletteDialog.cpp index 71feb32..e11b4ad 100644 --- a/glabels/ColorPaletteDialog.cpp +++ b/glabels/ColorPaletteDialog.cpp @@ -18,14 +18,16 @@ * along with gLabels-qt. If not, see . */ + #include "ColorPaletteDialog.h" #include -#include -#include -#include #include +#include +#include +#include #include +#include #include @@ -99,14 +101,12 @@ namespace glabels vLayout->setContentsMargins( 0, 0, 0, 0 ); vLayout->setSpacing( 0 ); - auto* defaultButton = new ColorPaletteButtonItem( defaultLabel ); - connect( defaultButton, SIGNAL(activated()), this, SLOT(onDefaultItemActivated()) ); - vLayout->addWidget( defaultButton ); - - QFrame* hline1 = new QFrame; - hline1->setFrameStyle( QFrame::HLine | QFrame::Plain ); - hline1->setLineWidth( 1 ); - vLayout->addWidget( hline1 ); + // + // Construct Standard Colors Grid + // + auto* standardColorsGroup = new QGroupBox( tr("Standard Colors") ); + standardColorsGroup->setAlignment( Qt::AlignHCenter ); + vLayout->addWidget( standardColorsGroup ); auto* mainPaletteLayout = new QGridLayout(); mainPaletteLayout->setSpacing( 0 ); @@ -119,17 +119,20 @@ namespace glabels ColorPaletteItem* item = new ColorPaletteItem( i, QColor( mColorTable[i].colorSpec ), tr(mColorTable[i].trname) ); - connect( item, SIGNAL(activated(int)), this, SLOT(onPaletteItemActivated(int)) ); + connect( item, SIGNAL(activated(int)), + this, SLOT(onPaletteItemActivated(int)) ); mainPaletteLayout->addWidget( item, iRow, iCol ); } } - vLayout->addLayout( mainPaletteLayout ); + standardColorsGroup->setLayout( mainPaletteLayout ); - QFrame* hline2 = new QFrame; - hline2->setFrameStyle( QFrame::HLine | QFrame::Plain ); - hline2->setLineWidth( 1 ); - vLayout->addWidget( hline2 ); + // + // Construct Recent Colors Grid + // + auto* recentColorsGroup = new QGroupBox( tr("Recent Colors") ); + recentColorsGroup->setAlignment( Qt::AlignHCenter ); + vLayout->addWidget( recentColorsGroup ); auto* customPaletteLayout = new QHBoxLayout(); customPaletteLayout->setSpacing( 0 ); @@ -137,40 +140,42 @@ namespace glabels { mHistoryItem[iCol] = new ColorPaletteItem( iCol, QColor(0,0,0,0), "" ); mHistoryItem[iCol]->setEnabled( false ); - connect( mHistoryItem[iCol], SIGNAL(activated(int)), this, SLOT(onHistoryItemActivated(int)) ); + connect( mHistoryItem[iCol], SIGNAL(activated(int)), + this, SLOT(onHistoryItemActivated(int)) ); customPaletteLayout->addWidget( mHistoryItem[iCol] ); } - vLayout->addLayout( customPaletteLayout ); + recentColorsGroup->setLayout( customPaletteLayout ); - QFrame* hline3 = new QFrame; - hline3->setFrameStyle( QFrame::HLine | QFrame::Plain ); - hline3->setLineWidth( 1 ); - vLayout->addWidget( hline3 ); - - ColorPaletteButtonItem* customColorButton = new ColorPaletteButtonItem( tr("Custom color...") ); - connect( customColorButton, SIGNAL(activated()), this, SLOT(onCustomColorItemActivated()) ); + // + // Construct Default (e.g. "No Fill") Button + // + auto* defaultColorButton = new QPushButton( defaultLabel ); + defaultColorButton->setAutoDefault( false ); + defaultColorButton->setDefault( false ); + connect( defaultColorButton, SIGNAL(clicked()), this, SLOT(onDefaultButtonClicked()) ); + vLayout->addWidget( defaultColorButton ); + + // + // Construct Custom Color Button + // + auto* customColorButton = new QPushButton( tr("Custom color...") ); + customColorButton->setAutoDefault( false ); + customColorButton->setDefault( false ); + connect( customColorButton, SIGNAL(clicked()), this, SLOT(onCustomColorButtonClicked()) ); vLayout->addWidget( customColorButton ); - QFrame* hline4 = new QFrame; - hline4->setFrameStyle( QFrame::HLine | QFrame::Plain ); - hline4->setLineWidth( 1 ); - vLayout->addWidget( hline4 ); + // + // Construct "Use key" Button + // + mFieldButton = new FieldButton(); + mFieldButton->setText( tr("Use key") ); + mFieldButton->setAutoDefault( false ); + mFieldButton->setDefault( false ); + connect( mFieldButton, SIGNAL(keySelected(QString)), this, SLOT(onKeySelected(QString)) ); + vLayout->addWidget( mFieldButton ); - mMergeFieldCombo = new QComboBox(); - mMergeFieldCombo->addItem( tr("Merge key...") ); - 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 auto* model = qobject_cast(mMergeFieldCombo->model()); - QStandardItem* item = model->item(0); - item->setFlags( item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled) ); - setLayout( vLayout ); loadCustomColorHistory(); @@ -183,59 +188,29 @@ namespace glabels } - void ColorPaletteDialog::setKeys( const QStringList& keyList ) + void ColorPaletteDialog::setKeys( const merge::Merge* merge, + const model::Variables* variables ) { - 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 ) - { - mMergeFieldCombo->addItems( keyList ); - mMergeFieldCombo->setEnabled( true ); - } - else - { - mMergeFieldCombo->setEnabled( false ); - } - } - - - void ColorPaletteDialog::clearKeys() - { - - for ( int index = mMergeFieldCombo->count()-1; index > 0; index-- ) - { - mMergeFieldCombo->removeItem( index ); - } - mMergeFieldCombo->setEnabled( false ); - } - - - void ColorPaletteDialog::onDefaultItemActivated() - { - mColorNode.setField( false ); - mColorNode.setColor( mDefaultColor ); - mColorNode.setKey( "" ); - - emit colorChanged( mColorNode, true ); - accept(); + mFieldButton->setKeys( merge, variables ); } void ColorPaletteDialog::onPaletteItemActivated( int id ) { - mColorNode.setField( false ); - mColorNode.setColor( QColor( mColorTable[id].colorSpec ) ); - mColorNode.setKey( "" ); + model::ColorNode newColorNode; + newColorNode.setField( false ); + newColorNode.setColor( QColor( mColorTable[id].colorSpec ) ); + newColorNode.setKey( "" ); - emit colorChanged( mColorNode, false ); - accept(); + if ( newColorNode != mColorNode ) + { + mColorNode = newColorNode; + + mColorHistory->addColor( mColorNode.color() ); + + emit colorChanged( mColorNode, false ); + accept(); + } } @@ -250,7 +225,18 @@ namespace glabels } - void ColorPaletteDialog::onCustomColorItemActivated() + void ColorPaletteDialog::onDefaultButtonClicked() + { + mColorNode.setField( false ); + mColorNode.setColor( mDefaultColor ); + mColorNode.setKey( "" ); + + emit colorChanged( mColorNode, true ); + accept(); + } + + + void ColorPaletteDialog::onCustomColorButtonClicked() { QColorDialog dlg( mColorNode.color(), this ); dlg.setWindowTitle( tr("Custom Color") ); @@ -302,25 +288,14 @@ namespace glabels } - void ColorPaletteDialog::onComboIndexChanged( int index ) + void ColorPaletteDialog::onKeySelected( QString key ) { - if ( index != 0 ) - { - mColorNode.setField( true ); - mColorNode.setColor( QColor( 0xee, 0xee, 0xec ) ); - mColorNode.setKey( mKeys[index-1] ); + mColorNode.setField( true ); + mColorNode.setColor( QColor( 0xee, 0xee, 0xec ) ); + mColorNode.setKey( key ); - emit colorChanged( mColorNode, false ); - accept(); - } - } - - - void ColorPaletteDialog::showEvent( QShowEvent* event ) - { - mMergeFieldCombo->setCurrentIndex( 0 ); - - QDialog::showEvent( event ); + emit colorChanged( mColorNode, false ); + accept(); } } // namespace glabels diff --git a/glabels/ColorPaletteDialog.h b/glabels/ColorPaletteDialog.h index db5f7e1..518fd75 100644 --- a/glabels/ColorPaletteDialog.h +++ b/glabels/ColorPaletteDialog.h @@ -24,11 +24,10 @@ #include "ColorHistory.h" #include "ColorPaletteItem.h" -#include "ColorPaletteButtonItem.h" +#include "FieldButton.h" #include "model/ColorNode.h" -#include #include @@ -64,25 +63,23 @@ namespace glabels // Public Methods ///////////////////////////////// public: - void setColorNode( const model::ColorNode& colorNode ); - void setKeys( const QStringList& keyList ); - void clearKeys(); + void setColorNode( const model::ColorNode& colorNode ); + + void setKeys( const merge::Merge* merge, + const model::Variables* variables ); ///////////////////////////////// // Slots ///////////////////////////////// private slots: - void onDefaultItemActivated(); void onPaletteItemActivated( int id ); void onHistoryItemActivated( int id ); - void onCustomColorItemActivated(); + void onDefaultButtonClicked(); + void onCustomColorButtonClicked(); + void onKeySelected( QString key ); void onColorHistoryChanged(); - void onComboIndexChanged( int index ); - protected: - void showEvent( QShowEvent* event ) override; - ///////////////////////////////// // Private Methods @@ -111,8 +108,7 @@ namespace glabels ColorHistory* mColorHistory; ColorPaletteItem* mHistoryItem[PALETTE_COLS]; - QComboBox* mMergeFieldCombo; - QStringList mKeys; + FieldButton* mFieldButton; }; diff --git a/glabels/ObjectEditor.cpp b/glabels/ObjectEditor.cpp index dc480b5..f31415a 100644 --- a/glabels/ObjectEditor.cpp +++ b/glabels/ObjectEditor.cpp @@ -503,13 +503,12 @@ namespace glabels { if ( !mBlocked ) { - QStringList keys = mModel->merge()->keys(); - lineColorButton->setKeys( keys ); - fillColorButton->setKeys( keys ); + lineColorButton->setKeys( mModel->merge(), mModel->variables() ); + fillColorButton->setKeys( mModel->merge(), mModel->variables() ); textInsertFieldButton->setKeys( mModel->merge(), mModel->variables() ); barcodeInsertFieldButton->setKeys( mModel->merge(), mModel->variables() ); imageFieldButton->setKeys( mModel->merge(), mModel->variables() ); - shadowColorButton->setKeys( keys ); + shadowColorButton->setKeys( mModel->merge(), mModel->variables() ); } } diff --git a/translations/glabels_C.ts b/translations/glabels_C.ts index 78a87d5..add9668 100644 --- a/translations/glabels_C.ts +++ b/translations/glabels_C.ts @@ -1133,10 +1133,6 @@ Custom color... - - Merge key... - - Custom Color @@ -1145,6 +1141,18 @@ Custom color #%1 + + Use key + + + + Standard Colors + + + + Recent Colors + + glabels::FieldButton