From e95f920f24090c040ab328ca5c0e37b8f9107865 Mon Sep 17 00:00:00 2001 From: Alister Date: Wed, 29 Dec 2021 14:05:06 +0000 Subject: [PATCH] adding in map list item --- .../ui/windows/noggitWindow/NoggitWindow.cpp | 14 +++- .../widgets/MapBookmarkListItem.cpp | 68 +++++++++++++++++++ .../widgets/MapBookmarkListItem.hpp | 36 ++++++++++ 3 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.cpp create mode 100644 src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.hpp diff --git a/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp b/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp index 3deb8b0a..34502108 100644 --- a/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp +++ b/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp @@ -25,7 +25,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -239,8 +240,17 @@ namespace Noggit::Ui::Windows qulonglong bookmark_index (0); for (auto entry : _project->Bookmarks) { - auto item (new QListWidgetItem (entry.Name.c_str(), bookmarks_table)); + auto item = new QListWidgetItem(bookmarks_table); + + auto mapBookmarkData = Widget::MapListBookmarkData(); + mapBookmarkData.MapName = QString::fromStdString(entry.Name); + mapBookmarkData.Position = entry.Position; + + auto mapBookmarkItem = new Widget::MapListBookmarkItem(mapBookmarkData, bookmarks_table); + item->setData (Qt::UserRole, QVariant (bookmark_index++)); + item->setSizeHint(mapBookmarkItem->minimumSizeHint()); + bookmarks_table->setItemWidget(item, mapBookmarkItem); } QObject::connect ( bookmarks_table, &QListWidget::itemDoubleClicked diff --git a/src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.cpp b/src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.cpp new file mode 100644 index 00000000..361ee5da --- /dev/null +++ b/src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +namespace Noggit::Ui::Widget +{ + MapListBookmarkItem::MapListBookmarkItem(const MapListBookmarkData& data, QWidget* parent = nullptr) : QWidget(parent) + { + auto layout = QGridLayout(); + + QIcon icon = FontAwesomeIcon(FontAwesome::bookmark); + + auto colour = new QGraphicsColorizeEffect(this); + colour->setColor(QColor(255, 204, 0)); + colour->setStrength(1.0f); + + map_icon = new QLabel("", parent); + map_icon->setPixmap(icon.pixmap(QSize(30, 30))); + map_icon->setGeometry(0, 0, 32, 32); + map_icon->setObjectName("project-icon-label"); + map_icon->setStyleSheet("QLabel#project-icon-label { font-size: 12px; padding: 0px;}"); + map_icon->setGraphicsEffect(colour); + map_icon->setAutoFillBackground(true); + + auto projectName = toCamelCase(QString(data.MapName)); + map_name = new QLabel(projectName, parent); + map_name->setGeometry(32, 0, 300, 20); + map_name->setObjectName("project-title-label"); + map_name->setStyleSheet("QLabel#project-title-label { font-size: 12px; }"); + + + auto sstream = std::stringstream(); + sstream << std::to_string((int)data.Position.x) << " , " << std::to_string((int)data.Position.y) << " , " << std::to_string((int)data.Position.z); + + map_position = new QLabel(QString::fromStdString(sstream.str()), parent); + map_position->setGeometry(32, 15, 300, 20); + map_position->setObjectName("project-information"); + map_position->setStyleSheet("QLabel#project-information { font-size: 10px; }"); + + auto directoryEffect = new QGraphicsOpacityEffect(this); + directoryEffect->setOpacity(0.5); + + map_position->setGraphicsEffect(directoryEffect); + map_position->setAutoFillBackground(true); + + setContextMenuPolicy(Qt::CustomContextMenu); + + layout.addWidget(map_icon); + layout.addWidget(map_name); + layout.addWidget(map_position); + + setLayout(layout.layout()); + } + + QSize MapListBookmarkItem::minimumSizeHint() const + { + return QSize(300, 32); + } + + QString MapListBookmarkItem::toCamelCase(const QString& s) + { + QStringList parts = s.split(' ', QString::SkipEmptyParts); + for (int i = 0; i < parts.size(); ++i) + parts[i].replace(0, 1, parts[i][0].toUpper()); + + return parts.join(" "); + } +} diff --git a/src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.hpp b/src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.hpp new file mode 100644 index 00000000..87e575c5 --- /dev/null +++ b/src/noggit/ui/windows/noggitWindow/widgets/MapBookmarkListItem.hpp @@ -0,0 +1,36 @@ +#ifndef NOGGIT_WIGDET_MAP_BOOKMARK_LIST_ITEM_HPP +#define NOGGIT_WIGDET_MAP_BOOKMARK_LIST_ITEM_HPP + +#include +#include +#include +#include +#include +#include +#include + +namespace Noggit::Ui::Widget +{ + struct MapListBookmarkData + { + QString MapName; + glm::vec3 Position; + }; + + class MapListBookmarkItem : public QWidget + { + Q_OBJECT + private: + QLabel* map_icon; + QLabel* map_name; + QLabel* map_position; + int _maxWidth; + public: + MapListBookmarkItem(const MapListBookmarkData& data, QWidget* parent); + QSize minimumSizeHint() const override; + private: + QString toCamelCase(const QString& s); + }; +} + +#endif //NOGGIT_WIGDET_MAP_BOOKMARK_LIST_ITEM_HPP \ No newline at end of file