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

summaryrefslogtreecommitdiff
path: root/source/frontend/StarJoinRequestDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/frontend/StarJoinRequestDialog.cpp')
-rw-r--r--source/frontend/StarJoinRequestDialog.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/source/frontend/StarJoinRequestDialog.cpp b/source/frontend/StarJoinRequestDialog.cpp
new file mode 100644
index 0000000..9d854df
--- /dev/null
+++ b/source/frontend/StarJoinRequestDialog.cpp
@@ -0,0 +1,52 @@
+#include "StarJoinRequestDialog.hpp"
+#include "StarGuiReader.hpp"
+#include "StarRoot.hpp"
+#include "StarLabelWidget.hpp"
+#include "StarButtonWidget.hpp"
+#include "StarImageWidget.hpp"
+#include "StarRandom.hpp"
+#include "StarAssets.hpp"
+
+namespace Star {
+
+JoinRequestDialog::JoinRequestDialog() {}
+
+void JoinRequestDialog::displayRequest(String const& userName, function<void(P2PJoinRequestReply)> callback) {
+ auto assets = Root::singleton().assets();
+
+ removeAllChildren();
+
+ GuiReader reader;
+
+ m_callback = move(callback);
+
+ reader.registerCallback("yes", [this](Widget*){ reply(P2PJoinRequestReply::Yes); });
+ reader.registerCallback("no", [this](Widget*){ reply(P2PJoinRequestReply::No); });
+ reader.registerCallback("ignore", [this](Widget*){ reply(P2PJoinRequestReply::Ignore); });
+
+ m_confirmed = false;
+
+ Json config = assets->json("/interface/windowconfig/joinrequest.config");
+
+ reader.construct(config.get("paneLayout"), this);
+
+ String message = config.getString("joinMessage").replaceTags(StringMap<String>{{"username", userName}});
+ fetchChild<LabelWidget>("message")->setText(message);
+
+ show();
+}
+
+void JoinRequestDialog::reply(P2PJoinRequestReply reply) {
+ m_confirmed = true;
+ m_callback(reply);
+ dismiss();
+}
+
+void JoinRequestDialog::dismissed() {
+ if (!m_confirmed)
+ m_callback(P2PJoinRequestReply::No);
+
+ Pane::dismissed();
+}
+
+}