Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/frontend/StarBookmarkInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/frontend/StarBookmarkInterface.cpp')
-rw-r--r--source/frontend/StarBookmarkInterface.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/source/frontend/StarBookmarkInterface.cpp b/source/frontend/StarBookmarkInterface.cpp
new file mode 100644
index 0000000..132ac13
--- /dev/null
+++ b/source/frontend/StarBookmarkInterface.cpp
@@ -0,0 +1,81 @@
+#include "StarBookmarkInterface.hpp"
+#include "StarGuiReader.hpp"
+#include "StarButtonWidget.hpp"
+#include "StarImageWidget.hpp"
+#include "StarTextBoxWidget.hpp"
+#include "StarLabelWidget.hpp"
+#include "StarRoot.hpp"
+#include "StarAssets.hpp"
+
+namespace Star {
+
+EditBookmarkDialog::EditBookmarkDialog(PlayerUniverseMapPtr playerUniverseMap) {
+ m_playerUniverseMap = playerUniverseMap;
+
+ GuiReader reader;
+ auto assets = Root::singleton().assets();
+ reader.registerCallback("ok", [this](Widget*) { ok(); });
+ reader.registerCallback("remove", [this](Widget*) { remove(); });
+ reader.registerCallback("close", [this](Widget*) { close(); });
+ reader.registerCallback("name", [](Widget*) {});
+ reader.construct(assets->json("/interface/windowconfig/editbookmark.config:paneLayout"), this);
+ dismiss();
+}
+
+void EditBookmarkDialog::setBookmark(TeleportBookmark bookmark) {
+ m_bookmark = bookmark;
+
+ m_isNew = true;
+ for (auto& existing : m_playerUniverseMap->teleportBookmarks()) {
+ if (existing == bookmark) {
+ m_bookmark.bookmarkName = existing.bookmarkName;
+ m_isNew = false;
+ }
+ }
+}
+
+void EditBookmarkDialog::show() {
+ Pane::show();
+
+ if (m_isNew) {
+ fetchChild<LabelWidget>("lblTitle")->setText("NEW BOOKMARK");
+ fetchChild<ButtonWidget>("remove")->hide();
+ } else {
+ fetchChild<LabelWidget>("lblTitle")->setText("EDIT BOOKMARK");
+ fetchChild<ButtonWidget>("remove")->show();
+ }
+
+ auto assets = Root::singleton().assets();
+ fetchChild<ImageWidget>("imgIcon")->setImage(strf("/interface/bookmarks/icons/%s.png", m_bookmark.icon));
+
+ fetchChild<LabelWidget>("lblPlanetName")->setText(m_bookmark.targetName);
+ fetchChild<TextBoxWidget>("name")->setText(m_bookmark.bookmarkName, false);
+ fetchChild<TextBoxWidget>("name")->focus();
+}
+
+void EditBookmarkDialog::ok() {
+ m_bookmark.bookmarkName = fetchChild<TextBoxWidget>("name")->getText();
+ if (m_bookmark.bookmarkName.empty())
+ m_bookmark.bookmarkName = m_bookmark.targetName;
+ if (!m_isNew)
+ m_playerUniverseMap->removeTeleportBookmark(m_bookmark);
+ m_playerUniverseMap->addTeleportBookmark(m_bookmark);
+ dismiss();
+}
+
+void EditBookmarkDialog::remove() {
+ m_playerUniverseMap->removeTeleportBookmark(m_bookmark);
+ dismiss();
+}
+
+void EditBookmarkDialog::close() {
+ dismiss();
+}
+
+void setupBookmarkEntry(WidgetPtr const& entry, TeleportBookmark const& bookmark) {
+ entry->fetchChild<LabelWidget>("name")->setText(bookmark.bookmarkName);
+ entry->fetchChild<LabelWidget>("planetName")->setText(bookmark.targetName);
+ entry->fetchChild<ImageWidget>("icon")->setImage(strf("/interface/bookmarks/icons/%s.png", bookmark.icon));
+}
+
+}