Warning: session_start(): open(/var/lib/php/sessions/sess_6eafvm83hgd8ekfqm383k22e5l, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
srecord noeq JTextFileEditor(File file) is Swingable {
settable bool autoSave;
JTextArea textArea;
JButton btnReload, btnSave;
JLabel lblChanged;
volatile S fileContents, savedText;
FileWatchService fileWatcher;
Q q = startQ();
RSTOverQ rstLoad = rstWithPreDelay(1.0, q, r _load);
RSTOverQ rstSave;
cachedVisualize {
assertNotNull(file);
rstSave = rstWithPreDelay(autoSave ? 1.0 : 0.0, q, r _save);
savedText = fileContents = loadTextFile(file);
textArea = wordWrapTypeWriterTextArea(savedText);
onChange(textArea, -> {
updateButtons();
if (autoSave) {
rstSave!;
print(rstSave.stats());
}
});
bindToComponent(textArea, -> {
fileWatcher = new FileWatchService;
fileWatcher.addNonRecursiveListener(dirOfFile(file),
f -> {
bool mine = sameFile(f, file);
printVars("File change", +f, +mine, +file);
if (mine) {
print(rstLoad.stats());
rstLoad!;
print(rstLoad.stats());
}
});
rstLoad!;
}, -> { dispose fileWatcher; });
ret northAndCenterWithMargin(
centerAndEastWithMargin(
swing(-> JFilePathLabel(file).visualize()),
jline(
autoSave
? (lblChanged = jlabel())
: (btnSave = disableButton(jbutton("Save", rstSave))),
btnReload = jbutton("Reload", r reload)
)),
textArea
);
}
void updateButtons {
bool changed = !eq(savedText, getText(textArea));
setEnabled(btnSave, changed);
setEnabled(btnReload, !eq(fileContents, savedText));
setText(lblChanged, changed ? "*" : "");
}
void _save {
saveTextFileVerbose(file, savedText = getText(textArea));
}
void reload {
savedText = fileContents;
setText(textArea, savedText);
updateButtons();
}
void _load {
print("Loading " + file);
fileContents = loadTextFile(file);
updateButtons();
}
}