2013-08-09 06:57:18 +02:00
|
|
|
#include "lc_global.h"
|
|
|
|
#include "lc_qpropertiesdialog.h"
|
|
|
|
#include "ui_lc_qpropertiesdialog.h"
|
2016-06-14 01:57:31 +02:00
|
|
|
#include "lc_qutils.h"
|
2013-08-16 03:25:51 +02:00
|
|
|
#include "lc_basewindow.h"
|
2013-08-09 06:57:18 +02:00
|
|
|
#include "lc_colors.h"
|
|
|
|
#include "lc_application.h"
|
|
|
|
#include "pieceinf.h"
|
|
|
|
|
|
|
|
lcQPropertiesDialog::lcQPropertiesDialog(QWidget *parent, void *data) :
|
|
|
|
QDialog(parent),
|
|
|
|
ui(new Ui::lcQPropertiesDialog)
|
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
2016-09-22 17:04:51 +02:00
|
|
|
ui->fogDensityEdit->setValidator(new QDoubleValidator(ui->fogDensityEdit));
|
2013-08-09 06:57:18 +02:00
|
|
|
|
|
|
|
connect(ui->solidColorButton, SIGNAL(clicked()), this, SLOT(colorClicked()));
|
|
|
|
connect(ui->gradient1ColorButton, SIGNAL(clicked()), this, SLOT(colorClicked()));
|
|
|
|
connect(ui->gradient2ColorButton, SIGNAL(clicked()), this, SLOT(colorClicked()));
|
|
|
|
connect(ui->fogColorButton, SIGNAL(clicked()), this, SLOT(colorClicked()));
|
|
|
|
connect(ui->ambientColorButton, SIGNAL(clicked()), this, SLOT(colorClicked()));
|
|
|
|
|
|
|
|
options = (lcPropertiesDialogOptions*)data;
|
|
|
|
|
2014-12-31 18:05:23 +01:00
|
|
|
setWindowTitle(tr("%1 Properties").arg(options->Properties.mName));
|
|
|
|
|
2014-09-06 03:34:03 +02:00
|
|
|
ui->descriptionEdit->setText(options->Properties.mDescription);
|
|
|
|
ui->authorEdit->setText(options->Properties.mAuthor);
|
|
|
|
ui->commentsEdit->setText(options->Properties.mComments);
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2014-02-10 01:13:41 +01:00
|
|
|
if (options->Properties.mBackgroundType == LC_BACKGROUND_IMAGE)
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->imageRadio->setChecked(true);
|
2014-02-10 01:13:41 +01:00
|
|
|
else if (options->Properties.mBackgroundType == LC_BACKGROUND_GRADIENT)
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->gradientRadio->setChecked(true);
|
|
|
|
else
|
|
|
|
ui->solidRadio->setChecked(true);
|
|
|
|
|
2014-09-08 21:42:20 +02:00
|
|
|
ui->imageNameEdit->setText(options->Properties.mBackgroundImage);
|
2014-02-10 01:13:41 +01:00
|
|
|
ui->imageTileCheckBox->setChecked(options->Properties.mBackgroundImageTile);
|
|
|
|
ui->fogCheckBox->setChecked(options->Properties.mFogEnabled);
|
2016-06-14 01:57:31 +02:00
|
|
|
ui->fogDensityEdit->setText(lcFormatValueLocalized(options->Properties.mFogDensity));
|
2013-08-09 06:57:18 +02:00
|
|
|
|
|
|
|
QPixmap pix(12, 12);
|
|
|
|
|
2014-02-10 01:13:41 +01:00
|
|
|
pix.fill(QColor(options->Properties.mBackgroundSolidColor[0] * 255, options->Properties.mBackgroundSolidColor[1] * 255, options->Properties.mBackgroundSolidColor[2] * 255));
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->solidColorButton->setIcon(pix);
|
2014-02-10 01:13:41 +01:00
|
|
|
pix.fill(QColor(options->Properties.mBackgroundGradientColor1[0] * 255, options->Properties.mBackgroundGradientColor1[1] * 255, options->Properties.mBackgroundGradientColor1[2] * 255));
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->gradient1ColorButton->setIcon(pix);
|
2014-02-10 01:13:41 +01:00
|
|
|
pix.fill(QColor(options->Properties.mBackgroundGradientColor2[0] * 255, options->Properties.mBackgroundGradientColor2[1] * 255, options->Properties.mBackgroundGradientColor2[2] * 255));
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->gradient2ColorButton->setIcon(pix);
|
2014-02-10 01:13:41 +01:00
|
|
|
pix.fill(QColor(options->Properties.mFogColor[0] * 255, options->Properties.mFogColor[1] * 255, options->Properties.mFogColor[2] * 255));
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->fogColorButton->setIcon(pix);
|
2014-02-10 01:13:41 +01:00
|
|
|
pix.fill(QColor(options->Properties.mAmbientColor[0] * 255, options->Properties.mAmbientColor[1] * 255, options->Properties.mAmbientColor[2] * 255));
|
2013-08-09 06:57:18 +02:00
|
|
|
ui->ambientColorButton->setIcon(pix);
|
|
|
|
|
2014-10-11 01:53:08 +02:00
|
|
|
lcArray<lcPartsListEntry>& partsUsed = options->PartsList;
|
2013-08-19 03:01:06 +02:00
|
|
|
QStringList horizontalLabels, partNames;
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
QVector<bool> ColorsUsed(gNumUserColors);
|
|
|
|
QMap<PieceInfo*, int> InfoRows;
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
for (int PartIdx = 0; PartIdx < partsUsed.GetSize(); PartIdx++)
|
2013-08-09 06:57:18 +02:00
|
|
|
{
|
2016-11-15 21:12:47 +01:00
|
|
|
ColorsUsed[partsUsed[PartIdx].ColorIndex] = true;
|
|
|
|
PieceInfo* Info = partsUsed[PartIdx].Info;
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
if (!InfoRows.value(Info))
|
2013-08-09 06:57:18 +02:00
|
|
|
{
|
2016-11-15 21:12:47 +01:00
|
|
|
InfoRows[Info] = InfoRows.size();
|
|
|
|
partNames.append(Info->m_strDescription);
|
2013-08-19 03:01:06 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
QVector<int> ColorColumns(gNumUserColors);
|
|
|
|
int NumColors = 0;
|
2013-08-19 03:01:06 +02:00
|
|
|
|
|
|
|
horizontalLabels.append(tr("Part"));
|
|
|
|
|
|
|
|
for (int colorIdx = 0; colorIdx < gNumUserColors; colorIdx++)
|
|
|
|
{
|
2016-11-15 21:12:47 +01:00
|
|
|
if (ColorsUsed[colorIdx])
|
2013-08-19 03:01:06 +02:00
|
|
|
{
|
2016-11-15 21:12:47 +01:00
|
|
|
ColorColumns[colorIdx] = NumColors++;
|
2013-08-19 03:01:06 +02:00
|
|
|
horizontalLabels.append(gColorList[colorIdx].Name);
|
2013-08-09 06:57:18 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-25 01:11:31 +02:00
|
|
|
horizontalLabels.append(tr("Total"));
|
|
|
|
|
2013-08-09 06:57:18 +02:00
|
|
|
QTableWidget *table = ui->partsTable;
|
2016-11-15 21:12:47 +01:00
|
|
|
table->setColumnCount(NumColors + 2);
|
|
|
|
table->setRowCount(InfoRows.size() + 1);
|
2013-08-09 06:57:18 +02:00
|
|
|
table->setHorizontalHeaderLabels(horizontalLabels);
|
2014-01-26 07:56:36 +01:00
|
|
|
|
|
|
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
|
|
|
|
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
|
|
|
#else
|
2013-08-19 03:01:06 +02:00
|
|
|
table->horizontalHeader()->setResizeMode(0, QHeaderView::ResizeToContents);
|
2014-01-26 07:56:36 +01:00
|
|
|
#endif
|
2013-08-19 03:01:06 +02:00
|
|
|
|
|
|
|
for (int rowIdx = 0; rowIdx < partNames.size(); rowIdx++)
|
|
|
|
table->setItem(rowIdx, 0, new QTableWidgetItem(partNames[rowIdx]));
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2015-05-25 01:11:31 +02:00
|
|
|
table->setItem(partNames.size(), 0, new QTableWidgetItem(tr("Total")));
|
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
QVector<int> InfoTotals;
|
|
|
|
QVector<int> ColorTotals;
|
2015-05-25 01:11:31 +02:00
|
|
|
int total = 0;
|
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
InfoTotals.resize(InfoRows.size());
|
|
|
|
ColorTotals.resize(NumColors);
|
2015-05-25 01:11:31 +02:00
|
|
|
|
2013-08-09 06:57:18 +02:00
|
|
|
for (int partIdx = 0; partIdx < partsUsed.GetSize(); partIdx++)
|
|
|
|
{
|
|
|
|
int colorIndex = partsUsed[partIdx].ColorIndex;
|
2016-11-15 21:12:47 +01:00
|
|
|
PieceInfo* info = partsUsed[partIdx].Info;
|
2015-05-25 01:11:31 +02:00
|
|
|
int count = partsUsed[partIdx].Count;
|
|
|
|
|
|
|
|
QTableWidgetItem *item = new QTableWidgetItem(QString::number(count));
|
|
|
|
item->setTextAlignment(Qt::AlignCenter);
|
2016-11-15 21:12:47 +01:00
|
|
|
table->setItem(InfoRows[info] - 1, ColorColumns[colorIndex] + 1, item);
|
2015-05-25 01:11:31 +02:00
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
InfoTotals[InfoRows[info] - 1] += count;
|
|
|
|
ColorTotals[ColorColumns[colorIndex]] += count;
|
2015-05-25 01:11:31 +02:00
|
|
|
total += count;
|
|
|
|
}
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
for (int infoIdx = 0; infoIdx < InfoRows.size(); infoIdx++)
|
2015-05-25 01:11:31 +02:00
|
|
|
{
|
2016-11-15 21:12:47 +01:00
|
|
|
QTableWidgetItem *item = new QTableWidgetItem(QString::number(InfoTotals[infoIdx]));
|
2013-08-19 03:01:06 +02:00
|
|
|
item->setTextAlignment(Qt::AlignCenter);
|
2016-11-15 21:12:47 +01:00
|
|
|
table->setItem(infoIdx, NumColors + 1, item);
|
2013-08-09 06:57:18 +02:00
|
|
|
}
|
|
|
|
|
2016-11-15 21:12:47 +01:00
|
|
|
for (int colorIdx = 0; colorIdx < NumColors; colorIdx++)
|
2015-05-25 01:11:31 +02:00
|
|
|
{
|
2016-11-15 21:12:47 +01:00
|
|
|
QTableWidgetItem *item = new QTableWidgetItem(QString::number(ColorTotals[colorIdx]));
|
2015-05-25 01:11:31 +02:00
|
|
|
item->setTextAlignment(Qt::AlignCenter);
|
2016-11-15 21:12:47 +01:00
|
|
|
table->setItem(InfoRows.size(), colorIdx + 1, item);
|
2015-05-25 01:11:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
QTableWidgetItem *item = new QTableWidgetItem(QString::number(total));
|
|
|
|
item->setTextAlignment(Qt::AlignCenter);
|
2016-11-15 21:12:47 +01:00
|
|
|
table->setItem(InfoRows.size(), NumColors + 1, item);
|
2013-08-09 06:57:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
lcQPropertiesDialog::~lcQPropertiesDialog()
|
|
|
|
{
|
|
|
|
delete ui;
|
|
|
|
}
|
|
|
|
|
|
|
|
void lcQPropertiesDialog::accept()
|
|
|
|
{
|
2014-09-06 03:34:03 +02:00
|
|
|
options->Properties.mDescription = ui->descriptionEdit->text();
|
|
|
|
options->Properties.mAuthor = ui->authorEdit->text();
|
|
|
|
options->Properties.mComments = ui->commentsEdit->toPlainText();
|
2013-08-09 06:57:18 +02:00
|
|
|
|
|
|
|
if (ui->imageRadio->isChecked())
|
2014-02-10 01:13:41 +01:00
|
|
|
options->Properties.mBackgroundType = LC_BACKGROUND_IMAGE;
|
2013-08-09 06:57:18 +02:00
|
|
|
else if (ui->gradientRadio->isChecked())
|
2014-02-10 01:13:41 +01:00
|
|
|
options->Properties.mBackgroundType = LC_BACKGROUND_GRADIENT;
|
2013-08-09 06:57:18 +02:00
|
|
|
else
|
2014-02-10 01:13:41 +01:00
|
|
|
options->Properties.mBackgroundType = LC_BACKGROUND_SOLID;
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2014-09-08 21:42:20 +02:00
|
|
|
options->Properties.mBackgroundImage = ui->imageNameEdit->text();
|
2014-02-10 01:13:41 +01:00
|
|
|
options->Properties.mBackgroundImageTile = ui->imageTileCheckBox->isChecked();
|
|
|
|
options->Properties.mFogEnabled = ui->fogCheckBox->isChecked();
|
2016-06-14 01:57:31 +02:00
|
|
|
options->Properties.mFogDensity = lcParseValueLocalized(ui->fogDensityEdit->text());
|
2013-08-09 06:57:18 +02:00
|
|
|
options->SetDefault = ui->setDefaultCheckBox->isChecked();
|
|
|
|
|
|
|
|
QDialog::accept();
|
|
|
|
}
|
|
|
|
|
|
|
|
void lcQPropertiesDialog::colorClicked()
|
|
|
|
{
|
|
|
|
QObject *button = sender();
|
|
|
|
QString title;
|
|
|
|
float *color = NULL;
|
|
|
|
|
|
|
|
if (button == ui->solidColorButton)
|
|
|
|
{
|
2014-02-10 01:13:41 +01:00
|
|
|
color = options->Properties.mBackgroundSolidColor;
|
2013-08-09 06:57:18 +02:00
|
|
|
title = tr("Select Background Color");
|
|
|
|
}
|
|
|
|
else if (button == ui->gradient1ColorButton)
|
|
|
|
{
|
2014-02-10 01:13:41 +01:00
|
|
|
color = options->Properties.mBackgroundGradientColor1;
|
2013-08-09 06:57:18 +02:00
|
|
|
title = tr("Select Background Top Color");
|
|
|
|
}
|
|
|
|
else if (button == ui->gradient2ColorButton)
|
|
|
|
{
|
2014-02-10 01:13:41 +01:00
|
|
|
color = options->Properties.mBackgroundGradientColor2;
|
2013-08-09 06:57:18 +02:00
|
|
|
title = tr("Select Background Bottom Color");
|
|
|
|
}
|
|
|
|
else if (button == ui->fogColorButton)
|
|
|
|
{
|
2014-02-10 01:13:41 +01:00
|
|
|
color = options->Properties.mFogColor;
|
2013-08-09 06:57:18 +02:00
|
|
|
title = tr("Select Fog Color");
|
|
|
|
}
|
|
|
|
else if (button == ui->ambientColorButton)
|
|
|
|
{
|
2014-02-10 01:13:41 +01:00
|
|
|
color = options->Properties.mAmbientColor;
|
2013-08-09 06:57:18 +02:00
|
|
|
title = tr("Select Ambient Light Color");
|
|
|
|
}
|
|
|
|
|
|
|
|
QColor oldColor = QColor(color[0] * 255, color[1] * 255, color[2] * 255);
|
|
|
|
QColor newColor = QColorDialog::getColor(oldColor, this, title);
|
|
|
|
|
|
|
|
if (newColor == oldColor || !newColor.isValid())
|
|
|
|
return;
|
|
|
|
|
|
|
|
color[0] = (float)newColor.red() / 255.0f;
|
|
|
|
color[1] = (float)newColor.green() / 255.0f;
|
|
|
|
color[2] = (float)newColor.blue() / 255.0f;
|
|
|
|
|
|
|
|
QPixmap pix(12, 12);
|
|
|
|
|
|
|
|
pix.fill(newColor);
|
|
|
|
((QToolButton*)button)->setIcon(pix);
|
|
|
|
}
|
|
|
|
|
|
|
|
void lcQPropertiesDialog::on_imageNameButton_clicked()
|
|
|
|
{
|
|
|
|
QString result = QFileDialog::getOpenFileName(this, tr("Select Background Image"), ui->imageNameEdit->text(), tr("All Image Files (*.png *.jpg *.gif *.bmp);;PNG Files (*.png);;JPEG Files (*.jpg);;GIF Files (*.gif);;BMP Files (*.bmp);;All Files (*.*)"));
|
|
|
|
|
|
|
|
if (!result.isEmpty())
|
|
|
|
ui->imageNameEdit->setText(QDir::toNativeSeparators(result));
|
|
|
|
}
|