Libraryless. Click here for Pure Java version (11928L/85K).
asclass DynConvoPopup > DynModule { L<Post> posts = dm_synchroList(this); int windowWidth = 400, windowHeight = 400; S userInput; S text; bool right; // for form bool popupVisible; Rect popupPosition; transient JChatConvo view; srecord Post(S html, bool right) {} start { componentFieldsToKeep = litset('view); // we clean it up ourselves if (popupVisible) openPopup(); } visual withCenteredButtons(withMargin(jvstack( centerAndEastWithMargin(dm_textField text(), jline(dm_checkBox right(), jbutton("Add post", rEnter { addPost(text, right) }))))), "Show popup", rEnter openPopup, "Clear posts", rEnter clearPosts); void cleanMeUp { JComponent v = view; view = null; disposeFrame(v); } void sendInput { S s = trim(userInput); if (nempty(s)) { addPost(htmlEncode2(s), false); vmBus_send chatUserInput(module(), s); setField(userInput := ""); } } JComponent makeConvoView() { view = new JChatConvo; for (Post p : cloneList(posts)) view.addPost(p.html, p.right); ret centerAndSouth( jscroll_trackWidth(view), withMargin(dm_textFieldAndSubmit userInput('sendInput, buttonText := "Send"))); } // API void openPopup swing { if (view == null) { setField(popupVisible := true); JComponent content = makeConvoView(); JFrame frame = showFrameInBottomRightCorner(content, windowWidth, windowHeight); setBounds(frame, popupPosition); moveWindowIntoScreen(frame); alwaysOnTop(frame); onFrameClosing(content, r { if (view != null) setField(popupVisible := false) }); onBoundsChange(frame, r { setField(popupPosition := boundsRect(frame)) }); } else activateFrame(view); } void closePopup swing { disposeFrame(view); } void addPost(S html, bool right) swing { posts.add(new Post(html, right)); view?.addPost(html, right); } void clearPosts swing { posts.clear(); view?.clearPosts(); } void reply(S s) { if (empty(s = trim(s))) ret; addPost(htmlEncode2(s), true); } bool isMainChat() { true; } }
Began life as a copy of #1026600
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1027445 |
Snippet name: | DynConvoPopup |
Eternal ID of this version: | #1027445/2 |
Text MD5: | 765fbe2e7b67090481c7542ba7c6e074 |
Transpilation MD5: | 374482543d7b47fcba42fb13cdf9690a |
Author: | stefan |
Category: | javax / stefan's os |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-03-20 18:34:49 |
Source code size: | 2272 bytes / 84 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 227 / 548 |
Version history: | 1 change(s) |
Referenced in: | #1034167 - Standard Classes + Interfaces (LIVE, continuation of #1003674) |