Libraryless. Click here for Pure Java version (17834L/112K).
abstract sclass DynRecordingTextArea extends DynModule {
S text;
switchable S title;
switchable bool wordWrap;
S globalID = aGlobalID();
transient JTextArea ta;
transient EditRecorder recorder;
transient ReliableSingleThread rstPersistText = rstWithDelay(1000, r persistText);
transient JButton popDownButton;
// We have auto-save of deleted modules
//bool warnOnDelete() { ret nempty(text); }
File logFile() { ret javaxDataDir("Text Area Logs/" + globalID); }
start {
dm_watchFieldAndNow title(r { setModuleName(title) });
dm_watchField wordWrap(r {
enableWordWrapForTextArea(ta, wordWrap);
if (ta != null && wordWrap) dm_reloadModule();
});
dm_vmBus_onMessages_q(ll("modulePoppedOut", "modulePoppedIn"), (m, myFrame) -> {
if (dm_isMe(m))
adjustUIForPoppedOutWindow();
});
}
visualize {
ta = jenableUndoRedo(typeWriterTextArea(text));
enableWordWrapForTextArea(ta, wordWrap);
logQuoted(logFile(), "text: " + text);
recorder = new EditRecorder(voidfunc(EREvent e) {
logStructure(logFile(), e);
});
recorder.text = text;
main.onChange(ta, rstPersistText);
ret jscroll(setOpaqueBackground(Color.white, withMargin(ta)));
}
void persistText enter {
if (ta == null) ret;
Pair<S, Int> p = textAndCaretPosition(ta);
recorder.update(p.a);
recorder.updateCaret(p.b);
print("persistText " + now());
setField(text := getText(ta));
}
void unvisualize {
persistText();
super.unvisualize();
}
void setText(S text) { main.setText(ta, text); }
S text() { ret or(main.getText(ta), text); }
S _modifyStructForDuplication(S struct) {
// TODO: could fail if module gets more complex
ret jreplace_first(struct, "globalID=*", "globalID=" + quote(aGlobalID()));
}
enhanceFrame {
internalFrameMenuItem(f, "Global ID: " + globalID, null);
}
void adjustUIForPoppedOutWindow swing {
if ((popDownButton != null) != dm_moduleIsPoppedOut(me())) {
if (popDownButton != null) {
removeFromParent(getParent(popDownButton));
popDownButton = null;
ret;
}
Window window = cast getWindow(dm_vis());
var popBackInButton = findButton(window, "Pop Back In");
var parent = getParent(popBackInButton);
print(+parent);
removeFromParent(parent); // hide controls
popDownButton = jPopDownButton_noText(
"Pop Back In", r { dm_popInModule(me()) },
jCheckBoxMenuItem("Always On Top", isAlwaysOnTop(window),
rEnter dm_toggleAlwaysOnTop),
);
replaceComponent(ta, -> centerAndEastWithMargin(ta, vstackWithSpacing(popDownButton)));
}
}
}Began life as a copy of #1016122
download show line numbers debug dex old transpilations
Travelled to 9 computer(s): bhatertpkbcr, cfunsshuasjs, gwrvuhgaqvyk, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
| Snippet ID: | #1020205 |
| Snippet name: | DynRecordingTextArea [Text is persistent in session & has its own log file] |
| Eternal ID of this version: | #1020205/10 |
| Text MD5: | d8cfc71d0bfb13c632bf5a70347b1812 |
| Transpilation MD5: | fddc77addcd775e1b4519612901c84c0 |
| Author: | stefan |
| Category: | javax / stefan's os |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-12-25 19:54:57 |
| Source code size: | 2839 bytes / 93 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 960 / 1731 |
| Version history: | 9 change(s) |
| Referenced in: | #1034167 - Standard Classes + Interfaces (LIVE, continuation of #1003674) |