Warning: session_start(): open(/var/lib/php/sessions/sess_kjn3dmhrtm37rti93b1phdia92, 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;
sbool autoVis;
p {
useDBOf(#1007609);
db();
substance();
swing {
fixCAL();
canvas = cal.show(900, 600);
updateDrawingsMenu();
addToWindow(canvas, withMargin(jcenteredline(
jbutton("New drawing", f newDrawing),
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 {
S theText = getTextTrim(text);
double x = random(0.2, 0.8), y = random(0.2, 0.8);
if (autoVis)
cal.circle_autoVis(theText, x, y);
else
cal.circle(theText, x, y);
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", f 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 getCircles(Drawing d) {
CirclesAndLines cal = cast unstructure(d.calStructure);
ret collect(cal.circles, 'text);
}
static L makeDrawingsTable() {
new L l;
for (final Drawing d : reversed(list(Drawing)))
l.add(litorderedmap("Drawing" := drawingName(d),
"Circles" := join(", ", getCircles(d))));
ret l;
}
static Drawing drawingFromTable(JTable table, int row) {
ret getConcept(Drawing, parseFirstLong(getTableCell(table, row, 0)));
}
svoid addDrawingsList {
final JTable table = sexyTable();
O load = voidfunc(int row) { loadDrawing(drawingFromTable(table, row)) };
onDoubleClick(table, load);
tablePopupMenuItem(table, "Rename...", voidfunc(int row) {
final Drawing d = drawingFromTable(table, row);
final JTextField tf = jtextfield(d.name);
showFormTitled("Rename Drawing",
"Old name", jlabel(d.name),
"New name", tf,
r {
cset(d, name := getTextTrim(tf));
setDrawing(d);
});
});
tablePopupMenuItem(table, "Show structure", voidfunc(int row) {
final Drawing d = drawingFromTable(table, row);
showWrappedText("Structure of drawing", d.calStructure);
});
addToWindowSplitRight_aggressive(canvas, list, 0.7f);
awtCalcOnConceptsChange(list, r { dataToTable(table, makeDrawingsTable()) });
}
svoid fixCAL() {
cal.imageForUserMadeNodes = whiteImage(10, 10);
}
svoid setCAL(CirclesAndLines cal) {
main.cal = cal;
fixCAL();
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 {
final Drawing d = saveDrawing();
if (d == null) ret;
thread { loading {
S fullName = "Drawing " + d.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));
}}
}