Some tweaking of ColorPaletteDialog.

This commit is contained in:
Jim Evins
2015-08-18 20:58:55 -04:00
parent a2504036e8
commit c90c2f8236
9 changed files with 309 additions and 42 deletions
+2
View File
@@ -14,6 +14,7 @@ set (glabels_sources
ColorNode.cpp
ColorPaletteDialog.cpp
ColorPaletteItem.cpp
ColorPaletteButtonItem.cpp
ColorSwatch.cpp
Cursors.cpp
FieldButton.cpp
@@ -49,6 +50,7 @@ set (glabels_qobject_headers
ColorHistory.h
ColorPaletteDialog.h
ColorPaletteItem.h
ColorPaletteButtonItem.h
FieldButton.h
FieldMenu.h
FieldMenuItem.h
+1 -4
View File
@@ -53,7 +53,7 @@ namespace glabels
mDialog->setModal( true );
connect( this, SIGNAL(pressed()), this, SLOT(onButtonPressed()) );
connect( mDialog, SIGNAL(changed(colorNode,bool)), this, SLOT(onColorPaletteDialogChanged(colorNode,bool)) );
connect( mDialog, SIGNAL(colorChanged(colorNode,bool)), this, SLOT(onColorPaletteDialogChanged(colorNode,bool)) );
}
@@ -123,7 +123,6 @@ namespace glabels
void ColorButton::onButtonPressed()
{
setDown( true );
// TODO: move dialog -- see menu_position_function is VALA version
mDialog->show();
}
@@ -131,8 +130,6 @@ namespace glabels
void ColorButton::onPaletteDialogChanged( ColorNode colorNode, bool isDefault )
{
setDown( false );
mColorNode = colorNode;
mIsDefault = isDefault;
+6 -4
View File
@@ -50,7 +50,7 @@ namespace glabels
QColor newColors[MAX_COLORS];
int n;
readColorArray( oldColors, n );
readColorArray( oldColors, &n );
int i;
newColors[0] = color;
@@ -69,6 +69,8 @@ namespace glabels
QColor colors[MAX_COLORS];
int n;
readColorArray( colors, &n );
if ( (n > 0) && (i < n) )
{
return colors[i];
@@ -80,15 +82,15 @@ namespace glabels
}
void ColorHistory::readColorArray( QColor array[MAX_COLORS], int& n )
void ColorHistory::readColorArray( QColor array[MAX_COLORS], int* n )
{
QSettings settings;
settings.beginGroup( "ColorHistory" );
settings.beginReadArray( "history" );
n = settings.value( "history/size", 0 ).toInt();
for ( int i = 0; i < n; i++ )
*n = settings.value( "history/size", 0 ).toInt();
for ( int i = 0; i < *n; i++ )
{
settings.setArrayIndex(i);
array[i] = settings.value( "color" ).value<QColor>();
+1 -1
View File
@@ -67,7 +67,7 @@ namespace glabels
// Private Methods
/////////////////////////////////
private:
void readColorArray( QColor array[MAX_COLORS], int& n );
void readColorArray( QColor array[MAX_COLORS], int* n );
void writeColorArray( const QColor array[MAX_COLORS], int n );
+130
View File
@@ -0,0 +1,130 @@
/* ColorPaletteButtonItem.cpp
*
* Copyright (C) 2014 Jim Evins <evins@snaught.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "ColorPaletteButtonItem.h"
#include <QPainter>
//
// Private Configuration Data
//
namespace
{
const int border = 4;
const int hBox = 25;
const QColor hoverOutlineColor( 89, 130, 182 );
const QColor hoverGradientColor0( 164, 195, 232 );
const QColor hoverGradientColor1( 147, 181, 224 );
const int outlineWidthPixels = 1;
const QColor textColor( 0, 0, 0 );
const QColor hoverTextColor( 255, 255, 255 );
}
namespace glabels
{
///
/// 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 ( mHover )
{
QLinearGradient gradient( 0, 0, 0, height() );
gradient.setColorAt( 0, hoverGradientColor0 );
gradient.setColorAt( 1, hoverGradientColor1 );
painter.setBrush( QBrush( gradient ) );
QPen pen( hoverOutlineColor );
pen.setWidth( outlineWidthPixels );
painter.setPen( pen );
painter.drawRect( 0, 0, width()-1, height()-1 );
}
//
// Draw text
//
painter.setBrush( QBrush( Qt::NoBrush ) );
if ( mHover )
{
painter.setPen( QPen( hoverTextColor ) );
}
else
{
painter.setPen( QPen( textColor ) );
}
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();
}
}
+74
View File
@@ -0,0 +1,74 @@
/* ColorPaletteButtonItem.h
*
* Copyright (C) 2014 Jim Evins <evins@snaught.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef glabels_ColorPaletteButtonItem_h
#define glabels_ColorPaletteButtonItem_h
#include <QWidget>
#include <QColor>
namespace glabels
{
///
/// Color Palette Item
///
class ColorPaletteButtonItem : public QWidget
{
Q_OBJECT
/////////////////////////////////
// Life Cycle
/////////////////////////////////
public:
ColorPaletteButtonItem( const QString& text, QWidget* parent = 0 );
/////////////////////////////////
// Signals
/////////////////////////////////
signals:
void activated();
/////////////////////////////////
// Event handlers
/////////////////////////////////
protected:
void paintEvent( QPaintEvent* event );
void enterEvent( QEvent* event );
void leaveEvent( QEvent* event );
void mousePressEvent( QMouseEvent* event );
/////////////////////////////////
// Private Data
/////////////////////////////////
private:
QString mText;
bool mHover;
};
}
#endif // glabels_ColorPaletteButtonItem_h
+51 -21
View File
@@ -20,8 +20,15 @@
#include "ColorPaletteDialog.h"
#include "ColorPaletteItem.h"
#include "ColorPaletteButtonItem.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QPushButton>
#include <QToolButton>
#include <QFrame>
namespace glabels
@@ -80,14 +87,20 @@ namespace glabels
mColorHistory = ColorHistory::instance();
connect( mColorHistory, SIGNAL(changed()), this, SLOT(onColorHistoryChanged()) );
QGridLayout* layout = new QGridLayout();
int iAbsRow = 0;
QVBoxLayout* vLayout = new QVBoxLayout();
vLayout->setContentsMargins( 0, 0, 0, 0 );
vLayout->setSpacing( 0 );
QPushButton* defaultButton = new QPushButton( defaultLabel );
layout->addWidget( defaultButton, iAbsRow, 0, 1, PALETTE_COLS );
iAbsRow++;
ColorPaletteButtonItem* defaultButton = new ColorPaletteButtonItem( defaultLabel );
vLayout->addWidget( defaultButton );
QFrame* hline1 = new QFrame;
hline1->setFrameStyle( QFrame::HLine | QFrame::Plain );
hline1->setLineWidth( 1 );
vLayout->addWidget( hline1 );
QGridLayout* mainPaletteLayout = new QGridLayout();
mainPaletteLayout->setSpacing( 0 );
for ( int iRow = 0; iRow < PALETTE_ROWS; iRow++ )
{
for ( int iCol = 0; iCol < PALETTE_COLS; iCol++ )
@@ -99,33 +112,46 @@ namespace glabels
mColorTable[i].name );
connect( item, SIGNAL(activated(int)), this, SLOT(onPaletteItemActivated(int)) );
layout->addWidget( item, iAbsRow, iCol );
mainPaletteLayout->addWidget( item, iRow, iCol );
}
iAbsRow++;
}
vLayout->addLayout( mainPaletteLayout );
QFrame* hline2 = new QFrame;
hline2->setFrameStyle( QFrame::HLine | QFrame::Plain );
hline2->setLineWidth( 1 );
vLayout->addWidget( hline2 );
QHBoxLayout* customPaletteLayout = new QHBoxLayout();
customPaletteLayout->setSpacing( 0 );
for ( int iCol = 0; iCol < PALETTE_COLS; iCol++ )
{
mHistoryItem[iCol] = new ColorPaletteItem( iCol,
QColor(0,0,0,0),
"" );
mHistoryItem[iCol] = new ColorPaletteItem( iCol, QColor(0,0,0,0), "" );
mHistoryItem[iCol]->setEnabled( false );
connect( mHistoryItem[iCol], SIGNAL(activated(int)), this, SLOT(onHistoryItemActivated(int)) );
layout->addWidget( mHistoryItem[iCol], iAbsRow, iCol );
customPaletteLayout->addWidget( mHistoryItem[iCol] );
}
iAbsRow++;
vLayout->addLayout( customPaletteLayout );
QPushButton* customColorButton = new QPushButton( tr("Custom color") );
layout->addWidget( customColorButton, iAbsRow, 0, 1, PALETTE_COLS );
iAbsRow++;
QFrame* hline3 = new QFrame;
hline3->setFrameStyle( QFrame::HLine | QFrame::Plain );
hline3->setLineWidth( 1 );
vLayout->addWidget( hline3 );
QPushButton* mergeFieldButton = new QPushButton( "TODO: Field Button" );
layout->addWidget( mergeFieldButton, iAbsRow, 0, 1, PALETTE_COLS );
ColorPaletteButtonItem* customColorButton = new ColorPaletteButtonItem( tr("Custom color") );
vLayout->addWidget( customColorButton );
setLayout( layout );
QFrame* hline4 = new QFrame;
hline4->setFrameStyle( QFrame::HLine | QFrame::Plain );
hline4->setLineWidth( 1 );
vLayout->addWidget( hline4 );
ColorPaletteButtonItem* mergeFieldButton = new ColorPaletteButtonItem( "TODO: Field Button" );
vLayout->addWidget( mergeFieldButton );
setLayout( vLayout );
loadCustomColorHistory();
}
@@ -143,12 +169,13 @@ namespace glabels
}
void ColorPaletteDialog::onDefaultButtonClicked()
void ColorPaletteDialog::onDefaultItemActivated()
{
mColorNode.setFieldFlag( false );
mColorNode.setColor( mDefaultColor );
mColorNode.setKey( "" );
setVisible( false );
emit colorChanged( mColorNode, true );
}
@@ -159,6 +186,7 @@ namespace glabels
mColorNode.setColor( QColor( mColorTable[id].colorSpec ) );
mColorNode.setKey( "" );
setVisible( false );
emit colorChanged( mColorNode, false );
}
@@ -169,12 +197,14 @@ namespace glabels
mColorNode.setColor( mColorHistory->getColor( id ) );
mColorNode.setKey( "" );
setVisible( false );
emit colorChanged( mColorNode, false );
}
void ColorPaletteDialog::onCustomColorButtonClicked()
void ColorPaletteDialog::onCustomColorItemActivated()
{
setVisible( false );
// TODO
}
@@ -187,7 +217,7 @@ namespace glabels
void ColorPaletteDialog::loadCustomColorHistory()
{
for ( int i; i < PALETTE_COLS; i++ )
for ( int i = 0; i < PALETTE_COLS; i++ )
{
QColor color = mColorHistory->getColor( i );
+2 -2
View File
@@ -69,10 +69,10 @@ namespace glabels
// Slots
/////////////////////////////////
private slots:
void onDefaultButtonClicked();
void onDefaultItemActivated();
void onPaletteItemActivated( int id );
void onHistoryItemActivated( int id );
void onCustomColorButtonClicked();
void onCustomColorItemActivated();
void onColorHistoryChanged();
+41 -9
View File
@@ -32,8 +32,14 @@ namespace
const int border = 4;
const int wSwatch = 25;
const int hSwatch = 25;
const QColor hoverColor( 170, 200, 255 );
const QColor hoverBgOutlineColor( 89, 130, 182 );
const QColor hoverBgGradientColor0( 164, 195, 232 );
const QColor hoverBgGradientColor1( 147, 181, 224 );
const int hoverBgOutlineWidthPixels = 1;
const QColor outlineColor( 0, 0, 0 );
const QColor hoverOutlineColor( 255, 255, 255 );
const QColor emptyOutlineColor( 192, 192, 192 );
const int outlineWidthPixels = 1;
}
@@ -80,18 +86,44 @@ namespace glabels
{
QPainter painter(this);
if ( mHover && mColor.alpha() )
//
// Draw background
//
if ( isEnabled() && mHover )
{
painter.setBrush( QBrush( hoverColor ) );
painter.setPen( Qt::NoPen );
painter.drawRect( rect() );
QLinearGradient gradient( 0, 0, 0, height() );
gradient.setColorAt( 0, hoverBgGradientColor0 );
gradient.setColorAt( 1, hoverBgGradientColor1 );
painter.setBrush( QBrush( gradient ) );
QPen pen( hoverBgOutlineColor );
pen.setWidth( hoverBgOutlineWidthPixels );
painter.setPen( pen );
painter.drawRect( 0, 0, width()-1, height()-1 );
}
if ( mColor.alpha() )
//
// Draw swatch
//
painter.setBrush( QBrush( Qt::NoBrush ) );
if ( isEnabled() )
{
QPen pen( outlineColor );
pen.setWidth( outlineWidthPixels );
painter.setPen( pen );
if ( mHover )
{
QPen pen( hoverOutlineColor );
pen.setWidth( outlineWidthPixels );
painter.setPen( pen );
}
else
{
QPen pen( outlineColor );
pen.setWidth( outlineWidthPixels );
painter.setPen( pen );
}
}
else
{