diff --git a/s132/items.p b/s132/items.p new file mode 100644 index 00000000..6606ff6a --- /dev/null +++ b/s132/items.p @@ -0,0 +1,62 @@ +(lp0 +(i__main__ +Theme +p1 +(dp2 +S'x' +p3 +I50 +sS'y' +p4 +I22 +sS'under_mouse' +p5 +I00 +sS'selected' +p6 +I00 +sS'content' +p7 +S'sin.com' +p8 +sba(i__main__ +Theme +p9 +(dp10 +S'x' +p11 +I79 +sS'y' +p12 +I58 +sS'under_mouse' +p13 +I00 +sS'selected' +p14 +I00 +sS'content' +p15 +S'mat.geo.coo' +p16 +sba(i__main__ +Theme +p17 +(dp18 +S'x' +p19 +I273 +sS'y' +p20 +I18 +sS'under_mouse' +p21 +I00 +sS'selected' +p22 +I00 +sS'content' +p23 +S'pst.rcr' +p24 +sba. \ No newline at end of file diff --git a/s132/s132.pmg.png b/s132/s132.pmg.png new file mode 100644 index 00000000..388172d8 Binary files /dev/null and b/s132/s132.pmg.png differ diff --git a/s132/s132.pyde b/s132/s132.pyde new file mode 100644 index 00000000..09ae1b09 --- /dev/null +++ b/s132/s132.pyde @@ -0,0 +1,134 @@ +# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day +SKETCH_NAME = "s132" # 180512 + +import pickle + +LINE_SPACE = 22 +ITEM_WIDTH = 80 +ITEM_HEIGHT = 20 + +ITEMS, EDGES = [], [] + +ThemeS = ["sin.com", + "mat.geo.coo", + "pst.rcr", + ] + +def setup(): + size(500, 500) + rectMode(CENTER) + textAlign(CENTER, CENTER) + textSize(10) + for t in ThemeS: + ITEMS.append(Theme(t)) + +def draw(): + background(200) + for i in ITEMS: + i.update() + for e in EDGES: + e.update() + + +class Theme(): + y_stack = 0 + + def __init__(self, content, x=50, y=None): + + self.under_mouse = False + self.selected = False + self.x = x + if y == None: + Theme.y_stack += LINE_SPACE + self.y = Theme.y_stack + else: + self.y = y + self.content = content + + def update(self): + self.move() + self.plot() + + def move(self): + if self.mouse_over(): + self.under_mouse = True + if keyPressed and keyCode == CONTROL: + self.x = mouseX - ITEM_WIDTH / 2 + self.y = mouseY - ITEM_HEIGHT / 2 + if keyPressed and keyCode == ALT: + self.selected = not self.selected + else: + self.under_mouse = False + + def plot(self): + noFill() + if self.under_mouse: + B = 255 + else: + B = 0 + + if self.selected: + R = 255 + else: + R = 0 + stroke(R, 0, B) + rect(self.x, self.y, ITEM_WIDTH, ITEM_HEIGHT) + fill(0) + text(self.content, self.x + 6, self.y + 3) + + def mouse_over(self): + return (self.x < mouseX < self.x + ITEM_WIDTH and + self.y < mouseY < self.y + ITEM_HEIGHT) + +class Link(): + + def __init__(self, a, b): + + self.under_mouse = False + self.selected = False + self.a = a + self.b = b + + def update(self): + self.plot() + + def plot(self): + mx = (self.a.x + self.b.x) / 2 + noFill() + bezier(self.a.x, self.a.y, mx, self.a.y, + mx, self.b.y, self.b.x, self.b.y) + +def mousePressed(): + if keyPressed and keyCode == SHIFT: + x, y = mouseX, mouseY + c = input('new item') + if c: + ITEMS.append(Theme(c, x, y)) + +def keyPressed(): + if key == "l": + selected = [i for i in ITEMS if i.selected] + if len(selected) == 2: + a, b = selected + EDGES.append(Link(a, b)) + + if key == 's': + pickle.dump(ITEMS, open("items.p", "wb")) + print 'done s' + + if key == 'l': + f = open("items.p", 'rb') + pickle.load(f) + print 'done l' + + +def input(message=''): + from javax.swing import JOptionPane + return JOptionPane.showInputDialog(frame, message) + + + + + # def mouse_over(self): + # return (self.x < mouseX < self.x + ITEM_WIDTH and + # self.y < mouseY < self.y + ITEM_HEIGHT) diff --git a/s132/sketch.properties b/s132/sketch.properties new file mode 100644 index 00000000..2456b0ab --- /dev/null +++ b/s132/sketch.properties @@ -0,0 +1,2 @@ +mode=Python +mode.id=jycessing.mode.PythonMode