-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsavegriddialog.cpp
More file actions
99 lines (86 loc) · 2.96 KB
/
savegriddialog.cpp
File metadata and controls
99 lines (86 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <QColor>
#include <QFileDialog>
#include <QIcon>
#include <QImage>
#include <QMap>
#include <QListWidgetItem>
#include <QPixmap>
#include <QSpinBox>
#include "libs/qimagegrid/qimagegrid.hpp"
#include "savegriddialog.hpp"
namespace {
const QMap<QString, Qt::GlobalColor> colors {
{"Transparent", Qt::transparent},
{"White", Qt::white},
{"Black", Qt::black},
{"Red", Qt::red},
{"Dark red", Qt::darkRed},
{"Green", Qt::green},
{"Dark green", Qt::darkGreen},
{"Blue", Qt::blue},
{"Dark blue", Qt::darkBlue},
{"Cyan", Qt::cyan},
{"Dark cyan", Qt::darkCyan},
{"Magenta", Qt::magenta},
{"Dark magenta", Qt::darkMagenta},
{"Yellow", Qt::yellow},
{"Dark yellow", Qt::darkYellow},
{"Gray", Qt::gray},
{"Dark gray", Qt::darkGray},
{"Light gray", Qt::lightGray}};
} // namespace
namespace vfg {
namespace ui {
SaveGridDialog::SaveGridDialog(QWidget *parent) :
QDialog(parent)
{
ui.setupUi(this);
ui.iconList->setUniformItemSizes(true);
ui.iconList->setDragDropMode(QAbstractItemView::DragOnly);
ui.iconList->setFixedWidth(180);
ui.iconList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui.gridWidget->setSpacing(ui.spacingSpinBox->value());
connect(ui.spacingSpinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
ui.gridWidget, &ImageGridWidget::setSpacing);
connect(ui.resizeToWidth, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
ui.gridWidget, &ImageGridWidget::setWidth);
}
void SaveGridDialog::addPixmap(const QPixmap &img)
{
auto item = new QListWidgetItem;
item->setIcon({img});
ui.iconList->insertItem(0, item);
ui.iconList->setIconSize(img.scaledToWidth(150).size());
ui.resizeToWidth->setValue(img.width());
}
void SaveGridDialog::on_pushButton_clicked()
{
const QString path = QFileDialog::getSaveFileName(this, tr("Save as..."), {},
"PNG Images (*.png)");
QImageGrid imageGrid;
imageGrid.setSpacing(ui.spacingSpinBox->value());
const QColor color(colors.value(ui.comboBox->currentText()));
if(color == Qt::transparent) {
imageGrid.setImageFormat(QImage::Format_ARGB32);
}
else {
imageGrid.setImageFormat(QImage::Format_RGB32);
}
imageGrid.setSpacingColor(color);
imageGrid.setWidth(ui.resizeToWidth->value());
const auto rows = ui.gridWidget->getRowCount();
for(auto idx = 0; idx < rows; ++idx) {
const auto cols = ui.gridWidget->getColumnCount(idx);
for(auto idx2 = 0; idx2 < cols; ++idx2) {
const QIcon icon = ui.gridWidget->iconAt(idx, idx2);
imageGrid.addImage(idx, idx2, icon.pixmap(icon.availableSizes().first()).toImage());
}
}
imageGrid.save(path);
}
void SaveGridDialog::on_comboBox_currentIndexChanged(const QString &arg1)
{
ui.gridWidget->setBackgroundColor(colors.value(arg1));
}
} // namespace ui
} // namespace vfg