--- a/src/colorSelector.cc Sun Aug 23 00:25:21 2015 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,195 +0,0 @@ -/* - * LDForge: LDraw parts authoring CAD - * Copyright (C) 2013, 2014 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/>. - * ===================================================================== - * - * colorSelectDialog.cxx: Color selector box. - */ - -#include <QGraphicsScene> -#include <QGraphicsItem> -#include <QMouseEvent> -#include <QScrollBar> -#include <QColorDialog> -#include "main.h" -#include "mainWindow.h" -#include "colorSelector.h" -#include "colors.h" -#include "configuration.h" -#include "miscallenous.h" -#include "ui_colorsel.h" - -enum { NUM_COLUMNS = 16 }; - -EXTERN_CFGENTRY (String, MainColor) -EXTERN_CFGENTRY (Float, MainColorAlpha) - -ColorSelector::ColorSelector (LDColor defaultvalue, QWidget* parent) : - QDialog (parent), - ui (*new Ui_ColorSelUi) -{ - m_firstResize = true; - ui.setupUi (this); - setSelection (defaultvalue); - - QGridLayout* layout = new QGridLayout (this); - - // Spawn color selector buttons - for (LDColor ldcolor; ldcolor.isLDConfigColor(); ++ldcolor) - { - QPushButton* button = new QPushButton (this); - button->setMinimumSize (QSize (32, 32)); - button->setMaximumSize (button->minimumSize()); - - if (ldcolor.isValid ()) - { - QColor color (ldcolor.faceColor()); - - if (ldcolor == MainColor) - { - color = QColor (cfg::MainColor); - color.setAlphaF (cfg::MainColorAlpha); - } - - QString color2name (Luma (color) < 80 ? "white" : "black"); - button->setAutoFillBackground (true); - button->setStyleSheet (format ("background-color: rgba(%1, %2, %3, %4); color: %5", - color.red(), color.green(), color.blue(), color.alpha(), color2name)); - button->setCheckable (true); - button->setText (QString::number (ldcolor.index())); - button->setToolTip (format ("%1: %2", ldcolor.index(), ldcolor.name())); - m_buttons[ldcolor.index()] = button; - m_buttonsReversed[button] = ldcolor.index(); - connect (button, SIGNAL (clicked(bool)), this, SLOT (colorButtonClicked())); - - if (ldcolor == selection()) - button->setChecked (true); - } - else - { - button->setEnabled (false); - } - - layout->addWidget (button, ldcolor.index() / NUM_COLUMNS, ldcolor.index() % NUM_COLUMNS); - } - - QWidget* widget = new QWidget(); - widget->setLayout (layout); - ui.definedColors->setWidget (widget); - connect (ui.directColor, SIGNAL (clicked (bool)), this, SLOT (chooseDirectColor())); - - ui.definedColors->setMinimumWidth (ui.definedColors->widget()->width() + 16); - -#ifdef TRANSPARENT_DIRECT_COLORS - connect (ui.transparentDirectColor, SIGNAL (clicked (bool)), this, SLOT (transparentCheckboxClicked())); -#else - ui.transparentDirectColor->hide(); -#endif - - drawColorInfo(); -} - -ColorSelector::~ColorSelector() -{ - delete &ui; -} - -void ColorSelector::colorButtonClicked() -{ - QPushButton* button = qobject_cast<QPushButton*> (sender()); - auto it = m_buttonsReversed.find (button); - LDColor color; - - if (Q_UNLIKELY (button == null or it == m_buttonsReversed.end() - or not (color = *it).isValid())) - { - print ("colorButtonClicked() called with invalid sender"); - return; - } - - if (selection().isValid()) - { - auto button = m_buttons.find (selection().index()); - - if (button != m_buttons.end()) - (*button)->setChecked (false); - } - - setSelection (color); - button->setChecked (true); - drawColorInfo(); -} - -void ColorSelector::drawColorInfo() -{ - if (not selection().isValid()) - { - ui.colorLabel->setText ("---"); - ui.iconLabel->setPixmap (QPixmap()); - ui.transparentDirectColor->setChecked (false); - return; - } - - ui.colorLabel->setText (format ("%1 - %2", selection().indexString(), - (selection().isDirect() ? "<direct color>" : selection().name()))); - ui.iconLabel->setPixmap (MakeColorIcon (selection(), 16).pixmap (16, 16)); - -#ifdef TRANSPARENT_DIRECT_COLORS - ui.transparentDirectColor->setEnabled (selection().isDirect()); - ui.transparentDirectColor->setChecked (selection().isDirect() and selection().faceColor().alphaF() < 1.0); -#else - ui.transparentDirectColor->setChecked (false); - ui.transparentDirectColor->setEnabled (false); -#endif -} - -void ColorSelector::selectDirectColor (QColor color) -{ - qint32 colorIndex = (ui.transparentDirectColor->isChecked() ? 0x03000000 : 0x02000000); - colorIndex |= (color.red() << 16) | (color.green() << 8) | (color.blue()); - setSelection (colorIndex); - drawColorInfo(); -} - -void ColorSelector::chooseDirectColor() -{ - QColor defcolor = selection() != -1 ? selection().faceColor() : Qt::white; - QColor newcolor = QColorDialog::getColor (defcolor); - - if (not newcolor.isValid()) - return; // canceled - - selectDirectColor (newcolor); -} - -void ColorSelector::transparentCheckboxClicked() -{ - if (selection().isDirect()) - selectDirectColor (selection().faceColor()); -} - -bool ColorSelector::selectColor (LDColor& val, LDColor defval, QWidget* parent) -{ - ColorSelector dlg (defval, parent); - - if (dlg.exec() and dlg.selection().isValid()) - { - val = dlg.selection(); - return true; - } - - return false; -}