diff --git a/glabels/CMakeLists.txt b/glabels/CMakeLists.txt index 1adfc5d..14fc417 100644 --- a/glabels/CMakeLists.txt +++ b/glabels/CMakeLists.txt @@ -9,6 +9,7 @@ set (glabels_sources BarcodeMenuButton.cpp BarcodeMenuItem.cpp BarcodeStyle.cpp + ColorButton.cpp ColorHistory.cpp ColorNode.cpp ColorPaletteDialog.cpp @@ -35,6 +36,7 @@ set (glabels_qobject_headers BarcodeMenu.h BarcodeMenuButton.h BarcodeMenuItem.h + ColorButton.h ColorHistory.h ColorPaletteDialog.h ColorPaletteItem.h diff --git a/glabels/ColorButton.cpp b/glabels/ColorButton.cpp new file mode 100644 index 0000000..1dd6df0 --- /dev/null +++ b/glabels/ColorButton.cpp @@ -0,0 +1,138 @@ +/* ColorButton.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 "ColorButton.h" + +#include "ColorSwatch.h" +#include + + +namespace +{ + const int SWATCH_W = 100; + const int SWATCH_H = 24; +} + + +namespace glabels +{ + + ColorButton::ColorButton( const QString& defaultLabel, + const QColor& defaultColor, + const QColor& color, + QWidget* parent ) + : QPushButton( parent ) + { + mDefaultColor = defaultColor; + mColorNode = ColorNode( color ); + + setIcon( QIcon( ColorSwatch( SWATCH_W, SWATCH_H, color ) ) ); + setText( "" ); + + mDialog = new ColorPaletteDialog( defaultLabel, defaultColor, color ); + mDialog->setModal( true ); + + connect( this, SIGNAL(pressed()), this, SLOT(onButtonPressed()) ); + connect( mDialog, SIGNAL(changed(colorNode,bool)), this, SLOT(onColorPaletteDialogChanged(colorNode,bool)) ); + } + + + void ColorButton::setColorNode( ColorNode colorNode ) + { + mIsDefault = false; + + mColorNode = colorNode; + + if ( colorNode.fieldFlag() ) + { + setIcon( QIcon() ); + setText( colorNode.key() ); + } + else + { + setIcon( QIcon( ColorSwatch( SWATCH_W, SWATCH_H, colorNode.color() ) ) ); + setText( "" ); + } + } + + + void ColorButton::setColor( QColor color ) + { + mIsDefault = false; + + mColorNode.setFieldFlag( false ); + mColorNode.setColor( color ); + mColorNode.setKey( "" ); + + setIcon( QIcon( ColorSwatch( SWATCH_W, SWATCH_H, color ) ) ); + setText( "" ); + } + + + void ColorButton::setToDefault() + { + mIsDefault = true; + + mColorNode.setFieldFlag( false ); + mColorNode.setColor( mDefaultColor ); + mColorNode.setKey( "" ); + + setIcon( QIcon(ColorSwatch( SWATCH_W, SWATCH_H, mDefaultColor ) ) ); + setText( "" ); + } + + + ColorNode ColorButton::getColorNode( bool& isDefault ) + { + isDefault = mIsDefault; + return mColorNode; + } + + + void ColorButton::setKeys( const QList keyList ) + { + mDialog->setKeys( keyList ); + } + + + void ColorButton::clearKeys() + { + mDialog->clearKeys(); + } + + + void ColorButton::onButtonPressed() + { + setDown( true ); + // TODO: move dialog -- see menu_position_function is VALA version + mDialog->show(); + } + + + void ColorButton::onPaletteDialogChanged( ColorNode colorNode, bool isDefault ) + { + mColorNode = colorNode; + mIsDefault = isDefault; + + emit colorChanged( colorNode, isDefault ); + } + + +} diff --git a/glabels/ColorButton.h b/glabels/ColorButton.h new file mode 100644 index 0000000..92cd3e8 --- /dev/null +++ b/glabels/ColorButton.h @@ -0,0 +1,98 @@ +/* ColorButton.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 glabels_ColorButton_h +#define glabels_ColorButton_h + +#include + +#include "ColorNode.h" +#include "ColorPaletteDialog.h" + + +namespace glabels +{ + + /// + /// Color Button + /// + class ColorButton : public QPushButton + { + Q_OBJECT + + + ///////////////////////////////// + // Life Cycle + ///////////////////////////////// + public: + ColorButton( const QString& defaultLabel, + const QColor& defaultColor, + const QColor& color, + QWidget* parent = 0 ); + + + ///////////////////////////////// + // Signals + ///////////////////////////////// + signals: + void colorChanged( ColorNode colorNode, bool isDefault ); + + + ///////////////////////////////// + // Public Methods + ///////////////////////////////// + public: + void setColorNode( ColorNode colorNode ); + void setColor( QColor color ); + void setToDefault(); + ColorNode getColorNode( bool& isDefault ); + void setKeys( const QList keyList ); + void clearKeys(); + + + ///////////////////////////////// + // Slots + ///////////////////////////////// + private slots: + void onButtonPressed(); + void onPaletteDialogChanged( ColorNode colorNode, bool isDefault ); + + + ///////////////////////////////// + // Private Methods + ///////////////////////////////// + private: + + + ///////////////////////////////// + // Private Members + ///////////////////////////////// + private: + QColor mDefaultColor; + bool mIsDefault; + ColorNode mColorNode; + + ColorPaletteDialog* mDialog; + }; + +} + + +#endif // glabels_ColorButton_h diff --git a/glabels/ColorPaletteDialog.cpp b/glabels/ColorPaletteDialog.cpp index 8ee93f7..fcf6819 100644 --- a/glabels/ColorPaletteDialog.cpp +++ b/glabels/ColorPaletteDialog.cpp @@ -72,8 +72,8 @@ namespace glabels ColorPaletteDialog::ColorPaletteDialog( const QString& defaultLabel, - QColor defaultColor, - QColor color, + const QColor& defaultColor, + const QColor& color, QWidget* parent ) : QDialog( parent ) { diff --git a/glabels/ColorPaletteDialog.h b/glabels/ColorPaletteDialog.h index 3f72982..05f02f2 100644 --- a/glabels/ColorPaletteDialog.h +++ b/glabels/ColorPaletteDialog.h @@ -33,7 +33,7 @@ namespace glabels { /// - /// Barcode Backends Database + /// Color Palette Dialog /// class ColorPaletteDialog : public QDialog { @@ -45,9 +45,9 @@ namespace glabels ///////////////////////////////// public: ColorPaletteDialog( const QString& defaultLabel, - QColor defaultColor, - QColor color, - QWidget* parent ); + const QColor& defaultColor, + const QColor& color, + QWidget* parent = 0 ); ///////////////////////////////// diff --git a/glabels/ColorPaletteItem.h b/glabels/ColorPaletteItem.h index 990a553..7b851c9 100644 --- a/glabels/ColorPaletteItem.h +++ b/glabels/ColorPaletteItem.h @@ -29,7 +29,7 @@ namespace glabels { /// - /// Barcode Menu Item + /// Color Palette Item /// class ColorPaletteItem : public QPushButton {