Warning: session_start(): open(/var/lib/php/sessions/sess_bh25mia091pmffouc1f62vch9i, 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
!7
concept Drawing {
S globalID = aGlobalID();
S name;
S calStructure;
}
static new CirclesAndLines cal;
static Canvas canvas;
static Drawing drawing;
p {
useDBOf(#1007609);
db();
substance();
swing {
canvas = cal.show(800, 600);
setCAL(cal);
updateDrawingsMenu();
addToWindow(canvas, withMargin(jcenteredline(
jbutton("New Circle...", f newCircle),
jbutton("Save drawing", f saveDrawing),
jbutton("PUBLISH drawing to server", f publish)));
addToWindow(canvas, withMargin(jcenteredlabel("Create connections by dragging between circles with right mouse button")));
addDrawingsList();
centerFrame(canvas);
hideConsole();
}
}
svoid newCircle {
final JTextField text = jtextfield();
showFormTitled("New Circle", "Text", text, r-thread { loading {
cal.circle_autoVis(getTextTrim(text), random(0.2, 0.8), random(0.2, 0.8));
canvas.update();
}});
}
static Drawing saveDrawing() {
ret saveDrawing(drawing != null ? drawing.name : "");
}
static Drawing saveDrawing(S name) {
if (empty(name)) {
final JTextField tfName = jtextfield(name);
showFormTitled("Name drawing",
"Name", tfName,
r {
saveDrawing(or2(getTextTrim(tfName), "Untitled"));
});
null;
}
S s = structure(cal);
if (drawing == null)
drawing = cnew(Drawing);
setDrawing(drawing);
cset(drawing, calStructure := s, +name);
updateDrawingsMenu();
ret drawing;
}
svoid newDrawing {
setCAL(new CirclesAndLines);
setDrawing(null);
}
svoid updateDrawingsMenu {
L params = ll("New drawing", r { newDrawing() });
for (final Drawing d : reversed(list(Drawing)))
addAll(params, "Load " + (nempty(d.name) ? quote(d.name) : str(d.id)) + " (made " + renderDate(d.created) + ")", r { loadDrawing(d) });
addMenu(canvas, "Drawings", toObjectArray(params));
}
sS drawingName(Drawing d) {
ret d == null ? "" : "[" + d.id + "] "
+ (nempty(d.name) ? quote(d.name) + " " : "");
}
static L makeDrawingsList() {
new L l;
for (final Drawing d : reversed(list(Drawing)))
l.add(drawingName(d)
/*+ " (" + renderDate(d.created) + ")"*/);
ret l;
}
svoid addDrawingsList {
final JList list = jlist();
onDoubleClick(list, voidfunc(S s) { loadDrawing(getConcept(Drawing, parseFirstLong(s))) });
addToWindowSplitRight_aggressive(canvas, list, 0.7f);
awtCalcOnConceptsChange(list, r { fillListWithStrings(list, makeDrawingsList()) });
}
svoid setCAL(CirclesAndLines cal) {
main.cal = cal;
Canvas c = canvas;
canvas = cal.makeCanvas();
awtReplaceComponent(c, canvas);
new CirclesRelater(canvas, cal);
}
svoid setDrawing(Drawing d) {
drawing = d;
setFrameTitle(canvas, drawingName(d) + " - " + programName());
}
svoid loadDrawing(Drawing d) {
setDrawing(d);
CirclesAndLines cal = cast unstructure(d.calStructure);
cal_setAutoVis(cal);
setCAL(cal);
}
svoid publish {
fS globalID = aGlobalID();
final JTextField tfName = jtextfield(name);
showFormTitled("Publish drawing to server?",
"Global ID" := globalID,
"Name" := tfName,
r-thread { loading {
Drawing d = saveDrawing();
cset(d, +globalID, name := getTextTrim(tfName));
S fullName = "Drawing " + globalID + " " + renderDate(now())
+ " - " + or2(d.name, "Untitled");
S url = uploadToImageServer(canvas.getImage(), fullName);
infoBox("Image uploaded to server! " + url);
S id = createSuperHighSnippet(structure(d), fullName, 56 /*SN_AI_DRAWING*/, null, null);
infoBox("Drawing uploaded. " + fsI(id));
}});
}