You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/kiconedit/kiconcolors.cpp

171 lines
4.4 KiB

/*
KDE Icon Editor - a small graphics drawing program for the KDE
Copyright (C) 1998 Thomas Tanghus (tanghus@kde.org)
This program 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 2 of the License, or (at your option) any later version.
This program 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 Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <tqpainter.h>
#include <tqdrawutil.h>
#include <kdebug.h>
#include "kiconcolors.h"
KDrawColors::KDrawColors(TQWidget *parent) : KColorGrid(parent, 0, 3)
{
kdDebug(4640) << "KDrawColors - constructor" << endl;
setCellSize(17);
setGrid(true);
setGridState(KColorGrid::Shaded);
selected = 0;
kdDebug(4640) << "KDrawColors - constructor - done" << endl;
}
void KDrawColors::paintCell( TQPainter *painter, int row, int col )
{
//KColorGrid::paintCell(painter, row, col);
uint c = colorAt( row * numCols() + col );
TQBrush brush(c);
int d = spacing();
qDrawShadePanel( painter, d, d, cellSize()-d, cellSize()-d,
colorGroup(), true, 1, &brush);
if ( row * numCols() + col == selected)
painter->drawWinFocusRect( d+1, d+1, cellSize()-(2*d)+1, cellSize()-(2*d)+1 );
}
void KDrawColors::mouseReleaseEvent( TQMouseEvent *e )
{
int row = findRow( e->pos().y() );
int col = findCol( e->pos().x() );
int cell = row * numCols() + col;
if ( selected != cell )
{
int prevSel = selected;
selected = cell;
updateCell( prevSel/numCols(), prevSel%numCols(), FALSE );
updateCell( row, col, FALSE );
}
emit newColor(colorAt(cell)|OPAQUE_MASK);
}
KSysColors::KSysColors(TQWidget *parent) : KDrawColors(parent)
{
kdDebug(4640) << "KSysColors - constructor" << endl;
setNumRows(7);
setNumCols(6);
//fill(backgroundColor().rgb()|OPAQUE_MASK);
setFixedSize(numCols()*cellSize(), numRows()*cellSize());
fill(TRANSPARENT|OPAQUE_MASK);
int numcells = 42;
kdDebug(4640) << "KSysColors - constructor - before setColor" << endl;
for(int i = 0; i < numcells; i++)
{
setColor(i, iconpalette[i]|OPAQUE_MASK);
}
kdDebug(4640) << "KSysColors - constructor - done" << endl;
}
KCustomColors::KCustomColors(TQWidget *parent) : KDrawColors(parent)
{
kdDebug(4640) << "KCustomColors - constructor" << endl;
setNumRows(3);
setNumCols(6);
fill(TRANSPARENT|OPAQUE_MASK);
setFixedSize(numCols()*cellSize(), numRows()*cellSize());
freecells = new bool[numRows()*numCols()];
for(int i = 0; i < numRows()*numCols(); i++)
freecells[i] = true;
kdDebug(4640) << "KCustomColors - constructor - done" << endl;
}
KCustomColors::~KCustomColors()
{
delete [] freecells;
}
void KCustomColors::mouseDoubleClickEvent(TQMouseEvent *e)
{
int row = findRow( e->pos().y() );
int col = findCol( e->pos().x() );
int cell = row * numCols() + col;
TQColor color=colorAt(cell);
if(KColorDialog::getColor(color))
{
setColor(cell, color.rgb());
emit newColor(color.rgb()|OPAQUE_MASK);
freecells[cell] = false;
}
}
void KCustomColors::addColor(uint c)
{
if(!contains(c))
{
int f = getFreeCell();
if(f != -1)
{
TQColor color(c);
if(!color.isValid())
{
kdDebug(4640) << "KCustomColors::addColor: Not a valid color: " << c << endl;
return;
}
//kdDebug(4640) << "KCustomColors::addColor: Adding color: " << c << " - " << qRed(c) << " " << qGreen(c) << " " << qBlue(c) << endl;
setColor(f, c);
freecells[f] = false;
}
}
}
int KCustomColors::getFreeCell()
{
for (int i = 0; i < numRows()*numCols(); i++)
{
if(freecells[i])
{
if(i+1 < numRows()*numCols())
freecells[i+1] = true;
else
freecells[0] = true;
return i;
break;
}
}
freeAllCells(); // start over again - not very elegant
return 0;
}
void KCustomColors::freeAllCells()
{
for (int i = 0; i < numRows()*numCols(); i++)
freecells[i] = true;
}
void KCustomColors::clear()
{
fill(TRANSPARENT);
freeAllCells();
update();
}
#include "kiconcolors.moc"