diff options
Diffstat (limited to 'source/frontend/StarBookmarkInterface.cpp')
-rw-r--r-- | source/frontend/StarBookmarkInterface.cpp | 81 |
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)); +} + +} |