src/guiutilities.cpp

Wed, 10 Jan 2018 22:54:09 +0200

author
Santeri Piippo
date
Wed, 10 Jan 2018 22:54:09 +0200
changeset 1226
d1199d965235
parent 1224
5a31b6d4bf81
child 1231
ce0c9f2e6b9c
permissions
-rw-r--r--

drop Qt4 support

/*
 *  LDForge: LDraw parts authoring CAD
 *  Copyright (C) 2013 - 2018 Teemu Piippo
 *
 *  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 3 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 General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <QComboBox>
#include <QPainter>
#include "colors.h"
#include "guiutilities.h"
#include "ldDocument.h"
#include "mainwindow.h"

GuiUtilities::GuiUtilities(QObject* parent) :
	QObject(parent),
	HierarchyElement(parent) {}

QIcon GuiUtilities::makeColorIcon(LDColor ldcolor, int size)
{
	// Create an image object and link a painter to it.
	QImage img(size, size, QImage::Format_ARGB32);
	QPainter painter(&img);
	QColor color = ldcolor.faceColor();

	if (ldcolor == MainColor)
	{
		// Use the user preferences for main color here
		color = config->mainColor();
		color.setAlphaF(config->mainColorAlpha());
	}

	// Paint the icon border
	painter.fillRect(QRect(0, 0, size, size), ldcolor.edgeColor());

	// Paint the checkerboard background, visible with translucent icons
	painter.drawPixmap(QRect(1, 1, size - 2, size - 2), GetIcon("checkerboard"), QRect(0, 0, 8, 8));

	// Paint the color above the checkerboard
	painter.fillRect(QRect(1, 1, size - 2, size - 2), color);
	return QIcon(QPixmap::fromImage(img));
}

void GuiUtilities::fillUsedColorsToComboBox(QComboBox* box)
{
	QMap<LDColor, int> counts;

	for (LDObject* obj : currentDocument()->objects())
	{
		if (not obj->isColored() or not obj->color().isValid())
			continue;

		if (not counts.contains(obj->color()))
			counts[obj->color()] = 1;
		else
			counts[obj->color()] += 1;
	}

	box->clear();
	int row = 0;

	QMapIterator<LDColor, int> it(counts);
	while (it.hasNext())
	{
		it.next();
		QIcon ico = makeColorIcon(it.key(), 16);
		box->addItem(ico, format("[%1] %2(%3 object%4)",
			it.key(), it.key().name(), it.value(), plural(it.value())));
		box->setItemData(row, it.key().index());
		++row;
	}
}

QColor GuiUtilities::mainColorRepresentation()
{
	QColor col(config->mainColor());

	if (not col.isValid())
		return QColor(0, 0, 0);

	col.setAlpha(config->mainColorAlpha() * 255.f);
	return col;
}

mercurial