Merge remote-tracking branch 'origin/master'

# Conflicts:
#	resources/resources.qrc
This commit is contained in:
sshumakov3
2020-11-16 00:34:47 +03:00
4 changed files with 243 additions and 236 deletions

Binary file not shown.

View File

@@ -25,15 +25,16 @@ namespace noggit::ui
titleBarWidget->windowTitle->setText(window->windowTitle()); titleBarWidget->windowTitle->setText(window->windowTitle());
titleBarWidget->iconButton->setAccessibleName("titlebar_icon"); titleBarWidget->iconButton->setAccessibleName("titlebar_icon");
titleBarWidget->iconButton->setMinimumWidth(32);
titleBarWidget->minimizeButton->setIcon(font_awesome_icon(font_awesome::windowminimize)); titleBarWidget->minimizeButton->setIcon(font_awesome_icon(font_awesome::windowminimize));
titleBarWidget->minimizeButton->setIconSize(QSize(14, 14)); titleBarWidget->minimizeButton->setIconSize(QSize(16, 16));
titleBarWidget->minimizeButton->setAccessibleName("titlebar_minimize"); titleBarWidget->minimizeButton->setAccessibleName("titlebar_minimize");
titleBarWidget->maximizeButton->setIcon(font_awesome_icon(font_awesome::windowrestore)); titleBarWidget->maximizeButton->setIcon(font_awesome_icon(font_awesome::windowmaximize));
titleBarWidget->maximizeButton->setAccessibleName("titlebar_maximize"); titleBarWidget->maximizeButton->setAccessibleName("titlebar_maximize");
titleBarWidget->maximizeButton->setIconSize(QSize(14, 14)); titleBarWidget->maximizeButton->setIconSize(QSize(14, 14));
titleBarWidget->closeButton->setIcon(font_awesome_icon(font_awesome::times)); titleBarWidget->closeButton->setIcon(font_awesome_icon(font_awesome::times));
titleBarWidget->closeButton->setAccessibleName("titlebar_close"); titleBarWidget->closeButton->setAccessibleName("titlebar_close");
titleBarWidget->closeButton->setIconSize(QSize(16, 16)); titleBarWidget->closeButton->setIconSize(QSize(18, 18));
QObject::connect(titleBarWidget->closeButton, QObject::connect(titleBarWidget->closeButton,
&QPushButton::clicked, &QPushButton::clicked,

View File

@@ -31,10 +31,16 @@
</property> </property>
<item> <item>
<widget class="QLabel" name="iconButton"> <widget class="QLabel" name="iconButton">
<property name="minimumSize">
<size>
<width>28</width>
<height>28</height>
</size>
</property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>26</width> <width>28</width>
<height>26</height> <height>28</height>
</size> </size>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
@@ -109,8 +115,8 @@
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>45</width> <width>32</width>
<height>30</height> <height>32</height>
</size> </size>
</property> </property>
</widget> </widget>
@@ -151,8 +157,8 @@
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>45</width> <width>32</width>
<height>30</height> <height>32</height>
</size> </size>
</property> </property>
</widget> </widget>
@@ -192,8 +198,8 @@
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>45</width> <width>32</width>
<height>30</height> <height>32</height>
</size> </size>
</property> </property>
</widget> </widget>

View File

@@ -1,225 +1,225 @@
// This file is part of Noggit3, licensed under GNU General Public License (version 3). // This file is part of Noggit3, licensed under GNU General Public License (version 3).
#include <noggit/ui/texture_palette_small.hpp> #include <noggit/ui/texture_palette_small.hpp>
#include <noggit/ui/font_awesome.hpp> #include <noggit/ui/font_awesome.hpp>
#include <noggit/ui/TexturingGUI.h> #include <noggit/ui/TexturingGUI.h>
#include <noggit/ui/CurrentTexture.h> #include <noggit/ui/CurrentTexture.h>
#include <QtWidgets/QGridLayout> #include <QtWidgets/QGridLayout>
#include <QtWidgets/QPushButton> #include <QtWidgets/QPushButton>
#include <QtWidgets/QListWidget> #include <QtWidgets/QListWidget>
#include <QtWidgets/QListWidgetItem> #include <QtWidgets/QListWidgetItem>
#include <QtWidgets/QApplication> #include <QtWidgets/QApplication>
#include <QtGui/QDropEvent> #include <QtGui/QDropEvent>
#include <QtGui/QMouseEvent> #include <QtGui/QMouseEvent>
#include <QtGui/QDragEnterEvent> #include <QtGui/QDragEnterEvent>
#include <QtGui/QDrag> #include <QtGui/QDrag>
#include <QMimeData> #include <QMimeData>
#include <unordered_set> #include <unordered_set>
#include <string> #include <string>
#include <algorithm> #include <algorithm>
namespace noggit namespace noggit
{ {
namespace ui namespace ui
{ {
PaletteList::PaletteList(QWidget* parent) : QListWidget(parent) PaletteList::PaletteList(QWidget* parent) : QListWidget(parent)
{ {
setIconSize(QSize(100, 100)); setIconSize(QSize(100, 100));
setViewMode(QListWidget::IconMode); setViewMode(QListWidget::IconMode);
setFlow(QListWidget::LeftToRight); setFlow(QListWidget::LeftToRight);
setWrapping(false); setWrapping(false);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setSelectionMode(QAbstractItemView::SingleSelection); setSelectionMode(QAbstractItemView::SingleSelection);
setAcceptDrops(false); setAcceptDrops(false);
} }
void PaletteList::mousePressEvent(QMouseEvent* event) void PaletteList::mousePressEvent(QMouseEvent* event)
{ {
if (event->button() == Qt::LeftButton) if (event->button() == Qt::LeftButton)
_start_pos = event->pos(); _start_pos = event->pos();
QListWidget::mousePressEvent(event); QListWidget::mousePressEvent(event);
} }
void PaletteList::mouseMoveEvent(QMouseEvent* event) void PaletteList::mouseMoveEvent(QMouseEvent* event)
{ {
QListWidget::mouseMoveEvent(event); QListWidget::mouseMoveEvent(event);
if (!(event->buttons() & Qt::LeftButton)) if (!(event->buttons() & Qt::LeftButton))
return; return;
if ((event->pos() - _start_pos).manhattanLength() if ((event->pos() - _start_pos).manhattanLength()
< QApplication::startDragDistance()) < QApplication::startDragDistance())
return; return;
const QList<QListWidgetItem*> selected_items = selectedItems(); const QList<QListWidgetItem*> selected_items = selectedItems();
for (auto item : selected_items) for (auto item : selected_items)
{ {
QMimeData* mimeData = new QMimeData; QMimeData* mimeData = new QMimeData;
mimeData->setText("tileset/" + item->toolTip()); mimeData->setText("tileset/" + item->toolTip());
QDrag* drag = new QDrag(this); QDrag* drag = new QDrag(this);
drag->setMimeData(mimeData); drag->setMimeData(mimeData);
drag->setPixmap(item->icon().pixmap(100, 100)); drag->setPixmap(item->icon().pixmap(100, 100));
drag->exec(); drag->exec();
return; // we assume only one item can be selected return; // we assume only one item can be selected
} }
} }
texture_palette_small::texture_palette_small (QWidget* parent) texture_palette_small::texture_palette_small (QWidget* parent)
: widget(parent) : widget(parent)
, layout(new ::QGridLayout(this) , layout(new ::QGridLayout(this)
) )
{ {
setWindowTitle("Quick Access Texture Palette"); setWindowTitle("Quick Access Texture Palette");
setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
setMinimumSize(100, 100); setMinimumSize(100, 100);
setAcceptDrops(true); setAcceptDrops(true);
_texture_paths = std::unordered_set<std::string>(); _texture_paths = std::unordered_set<std::string>();
_texture_list = new PaletteList(this); _texture_list = new PaletteList(this);
layout->addWidget(_texture_list, 0, 0); layout->addWidget(_texture_list, 0, 0);
connect(_texture_list, &QListWidget::itemClicked connect(_texture_list, &QListWidget::itemClicked
, this , this
, [=](QListWidgetItem* item) , [=](QListWidgetItem* item)
{ {
emit selected("tileset/" + item->toolTip().toStdString()); emit selected("tileset/" + item->toolTip().toStdString());
} }
); );
QVBoxLayout* button_layout = new QVBoxLayout(this); QVBoxLayout* button_layout = new QVBoxLayout(this);
_add_button = new QPushButton(this); _add_button = new QPushButton(this);
_add_button->setIcon(font_awesome_icon(font_awesome::plus)); _add_button->setIcon(font_awesome_icon(font_awesome::plus));
button_layout->addWidget(_add_button); button_layout->addWidget(_add_button);
connect(_add_button, &QAbstractButton::clicked, this, &texture_palette_small::addTexture); connect(_add_button, &QAbstractButton::clicked, this, &texture_palette_small::addTexture);
_remove_button = new QPushButton(this); _remove_button = new QPushButton(this);
_remove_button->setIcon(font_awesome_icon(font_awesome::timescircle)); _remove_button->setIcon(font_awesome_icon(font_awesome::times));
button_layout->addWidget(_remove_button); button_layout->addWidget(_remove_button);
connect(_remove_button, &QAbstractButton::clicked, this, &texture_palette_small::removeSelectedTexture); connect(_remove_button, &QAbstractButton::clicked, this, &texture_palette_small::removeSelectedTexture);
layout->addLayout(button_layout, 0, 1); layout->addLayout(button_layout, 0, 1);
updateWidget(); updateWidget();
} }
void texture_palette_small::addTexture() void texture_palette_small::addTexture()
{ {
if (_texture_paths.size() > 12) if (_texture_paths.size() > 12)
return; return;
std::string filename; std::string filename;
if (noggit::ui::selected_texture::get()) if (noggit::ui::selected_texture::get())
filename = noggit::ui::selected_texture::get().get()->filename; filename = noggit::ui::selected_texture::get().get()->filename;
else else
filename = "tileset\\generic\\black.blp"; filename = "tileset\\generic\\black.blp";
addTextureByFilename(filename); addTextureByFilename(filename);
} }
void texture_palette_small::addTextureByFilename(const std::string& filename) void texture_palette_small::addTextureByFilename(const std::string& filename)
{ {
if (_texture_paths.size() > 12) if (_texture_paths.size() > 12)
return; return;
QString display_name = QString(filename.c_str()).remove("tileset/"); QString display_name = QString(filename.c_str()).remove("tileset/");
for (auto path : _texture_paths) for (auto path : _texture_paths)
if (path == display_name.toStdString()) if (path == display_name.toStdString())
return; return;
_texture_paths.emplace(display_name.toStdString()); _texture_paths.emplace(display_name.toStdString());
QListWidgetItem* list_item = new QListWidgetItem(_texture_list); QListWidgetItem* list_item = new QListWidgetItem(_texture_list);
list_item->setIcon(*BLPRenderer::getInstance().render_blp_to_pixmap(filename, _texture_list->iconSize().width(), _texture_list->iconSize().height())); list_item->setIcon(*BLPRenderer::getInstance().render_blp_to_pixmap(filename, _texture_list->iconSize().width(), _texture_list->iconSize().height()));
list_item->setToolTip(display_name); list_item->setToolTip(display_name);
list_item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled); list_item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
updateWidget(); updateWidget();
_texture_list->addItem(list_item); _texture_list->addItem(list_item);
if (_texture_paths.size() == 12) if (_texture_paths.size() == 12)
_add_button->setDisabled(true); _add_button->setDisabled(true);
} }
void texture_palette_small::removeTexture(QString filename) void texture_palette_small::removeTexture(QString filename)
{ {
filename.remove("tileset/"); filename.remove("tileset/");
QList<QListWidgetItem*> tilesets = _texture_list->findItems(filename, Qt::MatchExactly); QList<QListWidgetItem*> tilesets = _texture_list->findItems(filename, Qt::MatchExactly);
for (auto tileset : tilesets) for (auto tileset : tilesets)
if (tileset->toolTip() == filename) if (tileset->toolTip() == filename)
{ {
_texture_paths.erase(filename.toStdString()); _texture_paths.erase(filename.toStdString());
_texture_list->removeItemWidget(tileset); _texture_list->removeItemWidget(tileset);
_add_button->setDisabled(false); _add_button->setDisabled(false);
delete tileset; delete tileset;
updateWidget(); updateWidget();
return; return;
} }
} }
void texture_palette_small::removeSelectedTexture() void texture_palette_small::removeSelectedTexture()
{ {
QList<QListWidgetItem*> selected_items = _texture_list->selectedItems(); QList<QListWidgetItem*> selected_items = _texture_list->selectedItems();
for (auto item : selected_items) for (auto item : selected_items)
{ {
for (auto path : _texture_paths) for (auto path : _texture_paths)
if (path == item->toolTip().toStdString()) if (path == item->toolTip().toStdString())
{ {
_texture_paths.erase(path); _texture_paths.erase(path);
_texture_list->removeItemWidget(item); _texture_list->removeItemWidget(item);
_add_button->setDisabled(false); _add_button->setDisabled(false);
delete item; delete item;
updateWidget(); updateWidget();
return; return;
} }
} }
} }
void texture_palette_small::updateWidget() void texture_palette_small::updateWidget()
{ {
setFixedSize(QSize(std::max(static_cast<size_t>(170 * 3), 65 + (106 * _texture_paths.size())), 132)); setFixedSize(QSize(std::max(static_cast<size_t>(170 * 3), 65 + (106 * _texture_paths.size())), 132));
} }
void texture_palette_small::dragEnterEvent(QDragEnterEvent* event) void texture_palette_small::dragEnterEvent(QDragEnterEvent* event)
{ {
if (event->mimeData()->hasText() if (event->mimeData()->hasText()
&& _texture_paths.size() < 12 && _texture_paths.size() < 12
&& (_texture_paths.find(event->mimeData()->text().remove("tileset/").toStdString()) == _texture_paths.end()) && (_texture_paths.find(event->mimeData()->text().remove("tileset/").toStdString()) == _texture_paths.end())
) )
event->accept(); event->accept();
} }
void texture_palette_small::dropEvent(QDropEvent* event) void texture_palette_small::dropEvent(QDropEvent* event)
{ {
addTextureByFilename(event->mimeData()->text().toStdString()); addTextureByFilename(event->mimeData()->text().toStdString());
event->accept(); event->accept();
} }
} }
} }