From 20f07335c2455ffa9223c61fd4ebe4184be47dd7 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 7 May 2019 03:28:44 +0200 Subject: [PATCH] added menu, added clear workspace function, buttons file now gui file Signed-off-by: Victor Giers --- build/application.linux-arm64/data/save.csv | 41 ------- .../application.linux-arm64/lib/ontology.jar | Bin 9285 -> 9462 bytes .../source/{buttons.pde => gui.pde} | 40 +++++-- .../source/ontology.java | 84 ++++++++++----- .../source/ontology.pde | 28 ++++- .../source/save_load.pde | 12 +-- build/application.linux-arm64/source/ui.pde | 1 + build/application.linux-armv6hf/data/save.csv | 41 ------- .../lib/ontology.jar | Bin 9285 -> 9462 bytes .../source/{buttons.pde => gui.pde} | 40 +++++-- .../source/ontology.java | 84 ++++++++++----- .../source/ontology.pde | 28 ++++- .../source/save_load.pde | 12 +-- build/application.linux-armv6hf/source/ui.pde | 1 + build/application.linux32/data/save.csv | 41 ------- build/application.linux32/lib/ontology.jar | Bin 9285 -> 9462 bytes .../source/{buttons.pde => gui.pde} | 40 +++++-- .../application.linux32/source/ontology.java | 84 ++++++++++----- build/application.linux32/source/ontology.pde | 28 ++++- .../application.linux32/source/save_load.pde | 12 +-- build/application.linux32/source/ui.pde | 1 + build/application.linux64/data/save.csv | 41 ------- build/application.linux64/lib/ontology.jar | Bin 9285 -> 9462 bytes .../source/{buttons.pde => gui.pde} | 40 +++++-- .../application.linux64/source/ontology.java | 84 ++++++++++----- build/application.linux64/source/ontology.pde | 28 ++++- .../application.linux64/source/save_load.pde | 12 +-- build/application.linux64/source/ui.pde | 1 + build/application.windows32/data/save.csv | 41 ------- build/application.windows32/lib/ontology.jar | Bin 9285 -> 9462 bytes build/application.windows32/ontology.exe | Bin 88576 -> 88576 bytes .../application.windows32/source/buttons.pde | 78 -------------- build/application.windows32/source/gui.pde | 100 ++++++++++++++++++ .../source/ontology.java | 84 ++++++++++----- .../application.windows32/source/ontology.pde | 28 ++++- .../source/save_load.pde | 12 +-- build/application.windows32/source/ui.pde | 1 + build/application.windows64/data/save.csv | 41 ------- build/application.windows64/lib/ontology.jar | Bin 9285 -> 9462 bytes build/application.windows64/ontology.exe | Bin 88576 -> 88576 bytes .../application.windows64/source/buttons.pde | 78 -------------- build/application.windows64/source/gui.pde | 100 ++++++++++++++++++ .../source/ontology.java | 84 ++++++++++----- .../application.windows64/source/ontology.pde | 28 ++++- .../source/save_load.pde | 12 +-- build/application.windows64/source/ui.pde | 1 + data/save.csv | 41 ------- gui.pde | 100 ++++++++++++++++++ ontology.pde | 28 ++++- save_load.pde | 12 +-- ui.pde | 1 + 51 files changed, 935 insertions(+), 759 deletions(-) rename build/application.linux-arm64/source/{buttons.pde => gui.pde} (63%) rename build/application.linux-armv6hf/source/{buttons.pde => gui.pde} (63%) rename build/application.linux32/source/{buttons.pde => gui.pde} (63%) rename build/application.linux64/source/{buttons.pde => gui.pde} (63%) delete mode 100644 build/application.windows32/source/buttons.pde create mode 100644 build/application.windows32/source/gui.pde delete mode 100644 build/application.windows64/source/buttons.pde create mode 100644 build/application.windows64/source/gui.pde create mode 100644 gui.pde diff --git a/build/application.linux-arm64/data/save.csv b/build/application.linux-arm64/data/save.csv index 4ed18e7..139597f 100644 --- a/build/application.linux-arm64/data/save.csv +++ b/build/application.linux-arm64/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/build/application.linux-arm64/lib/ontology.jar b/build/application.linux-arm64/lib/ontology.jar index 8379e9f09bd49ef6510257ae66b9c362f1fb762f..f218851d9263345cd084700b57d6fbfd4c970295 100644 GIT binary patch delta 9052 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 delta 8874 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 I?Y~$52k4|AR{#J2 diff --git a/build/application.linux-arm64/source/buttons.pde b/build/application.linux-arm64/source/gui.pde similarity index 63% rename from build/application.linux-arm64/source/buttons.pde rename to build/application.linux-arm64/source/gui.pde index 525ddb1..4b9de3a 100644 --- a/build/application.linux-arm64/source/buttons.pde +++ b/build/application.linux-arm64/source/gui.pde @@ -1,19 +1,26 @@ -int buttonCount = 6; +int buttonCount = 8; int i_buttonId; + + + void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } void buttonFunctions(int functionID) { @@ -38,6 +45,12 @@ void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -76,3 +89,12 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/build/application.linux-arm64/source/ontology.java b/build/application.linux-arm64/source/ontology.java index f7bfd3a..cf773f7 100644 --- a/build/application.linux-arm64/source/ontology.java +++ b/build/application.linux-arm64/source/ontology.java @@ -23,11 +23,12 @@ boolean darkMode = true; public void setup() { surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -72,10 +73,14 @@ public void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -97,22 +102,42 @@ public void draw() { } } } -int buttonCount = 6; + +public void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} +int buttonCount = 8; int i_buttonId; + + + public void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } public void buttonFunctions(int functionID) { @@ -137,6 +162,12 @@ public void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -175,6 +206,15 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +public void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} int linkCount; boolean dragLink; //state of dragging a link @@ -364,7 +404,6 @@ class Node { text(title, x, y+textSize/3); } } - /** * Saving and loading is a messy hack! * You'll get a blank line in your save file for each deleted object. @@ -390,17 +429,7 @@ public void loadCSVFile(File selection) { } public void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { @@ -439,12 +468,12 @@ public void saveCSV(String path) { String[] saveArray = split(saveString, '\n'); saveStrings(path, saveArray); } - /** * Keys only get caught for changing a nodes title. * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + public void keyPressed() { if (key == ESC) { key = 0; @@ -564,7 +593,6 @@ public void mouseWheel(MouseEvent event) { nodes[i].setVectors(); } } - public void settings() { size(800, 600); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "ontology" }; diff --git a/build/application.linux-arm64/source/ontology.pde b/build/application.linux-arm64/source/ontology.pde index 07edee4..41227fc 100644 --- a/build/application.linux-arm64/source/ontology.pde +++ b/build/application.linux-arm64/source/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/build/application.linux-arm64/source/save_load.pde b/build/application.linux-arm64/source/save_load.pde index eb7501b..d261652 100644 --- a/build/application.linux-arm64/source/save_load.pde +++ b/build/application.linux-arm64/source/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/build/application.linux-arm64/source/ui.pde b/build/application.linux-arm64/source/ui.pde index 67f9b3a..ea86ca1 100644 --- a/build/application.linux-arm64/source/ui.pde +++ b/build/application.linux-arm64/source/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0; diff --git a/build/application.linux-armv6hf/data/save.csv b/build/application.linux-armv6hf/data/save.csv index 4ed18e7..139597f 100644 --- a/build/application.linux-armv6hf/data/save.csv +++ b/build/application.linux-armv6hf/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/build/application.linux-armv6hf/lib/ontology.jar b/build/application.linux-armv6hf/lib/ontology.jar index 8379e9f09bd49ef6510257ae66b9c362f1fb762f..f218851d9263345cd084700b57d6fbfd4c970295 100644 GIT binary patch delta 9052 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 delta 8874 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 I?Y~$52k4|AR{#J2 diff --git a/build/application.linux-armv6hf/source/buttons.pde b/build/application.linux-armv6hf/source/gui.pde similarity index 63% rename from build/application.linux-armv6hf/source/buttons.pde rename to build/application.linux-armv6hf/source/gui.pde index 525ddb1..4b9de3a 100644 --- a/build/application.linux-armv6hf/source/buttons.pde +++ b/build/application.linux-armv6hf/source/gui.pde @@ -1,19 +1,26 @@ -int buttonCount = 6; +int buttonCount = 8; int i_buttonId; + + + void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } void buttonFunctions(int functionID) { @@ -38,6 +45,12 @@ void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -76,3 +89,12 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/build/application.linux-armv6hf/source/ontology.java b/build/application.linux-armv6hf/source/ontology.java index f7bfd3a..cf773f7 100644 --- a/build/application.linux-armv6hf/source/ontology.java +++ b/build/application.linux-armv6hf/source/ontology.java @@ -23,11 +23,12 @@ boolean darkMode = true; public void setup() { surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -72,10 +73,14 @@ public void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -97,22 +102,42 @@ public void draw() { } } } -int buttonCount = 6; + +public void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} +int buttonCount = 8; int i_buttonId; + + + public void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } public void buttonFunctions(int functionID) { @@ -137,6 +162,12 @@ public void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -175,6 +206,15 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +public void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} int linkCount; boolean dragLink; //state of dragging a link @@ -364,7 +404,6 @@ class Node { text(title, x, y+textSize/3); } } - /** * Saving and loading is a messy hack! * You'll get a blank line in your save file for each deleted object. @@ -390,17 +429,7 @@ public void loadCSVFile(File selection) { } public void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { @@ -439,12 +468,12 @@ public void saveCSV(String path) { String[] saveArray = split(saveString, '\n'); saveStrings(path, saveArray); } - /** * Keys only get caught for changing a nodes title. * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + public void keyPressed() { if (key == ESC) { key = 0; @@ -564,7 +593,6 @@ public void mouseWheel(MouseEvent event) { nodes[i].setVectors(); } } - public void settings() { size(800, 600); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "ontology" }; diff --git a/build/application.linux-armv6hf/source/ontology.pde b/build/application.linux-armv6hf/source/ontology.pde index 07edee4..41227fc 100644 --- a/build/application.linux-armv6hf/source/ontology.pde +++ b/build/application.linux-armv6hf/source/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/build/application.linux-armv6hf/source/save_load.pde b/build/application.linux-armv6hf/source/save_load.pde index eb7501b..d261652 100644 --- a/build/application.linux-armv6hf/source/save_load.pde +++ b/build/application.linux-armv6hf/source/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/build/application.linux-armv6hf/source/ui.pde b/build/application.linux-armv6hf/source/ui.pde index 67f9b3a..ea86ca1 100644 --- a/build/application.linux-armv6hf/source/ui.pde +++ b/build/application.linux-armv6hf/source/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0; diff --git a/build/application.linux32/data/save.csv b/build/application.linux32/data/save.csv index 4ed18e7..139597f 100644 --- a/build/application.linux32/data/save.csv +++ b/build/application.linux32/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/build/application.linux32/lib/ontology.jar b/build/application.linux32/lib/ontology.jar index 8379e9f09bd49ef6510257ae66b9c362f1fb762f..f218851d9263345cd084700b57d6fbfd4c970295 100644 GIT binary patch delta 9052 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 delta 8874 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 I?Y~$52k4|AR{#J2 diff --git a/build/application.linux32/source/buttons.pde b/build/application.linux32/source/gui.pde similarity index 63% rename from build/application.linux32/source/buttons.pde rename to build/application.linux32/source/gui.pde index 525ddb1..4b9de3a 100644 --- a/build/application.linux32/source/buttons.pde +++ b/build/application.linux32/source/gui.pde @@ -1,19 +1,26 @@ -int buttonCount = 6; +int buttonCount = 8; int i_buttonId; + + + void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } void buttonFunctions(int functionID) { @@ -38,6 +45,12 @@ void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -76,3 +89,12 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/build/application.linux32/source/ontology.java b/build/application.linux32/source/ontology.java index f7bfd3a..cf773f7 100644 --- a/build/application.linux32/source/ontology.java +++ b/build/application.linux32/source/ontology.java @@ -23,11 +23,12 @@ boolean darkMode = true; public void setup() { surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -72,10 +73,14 @@ public void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -97,22 +102,42 @@ public void draw() { } } } -int buttonCount = 6; + +public void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} +int buttonCount = 8; int i_buttonId; + + + public void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } public void buttonFunctions(int functionID) { @@ -137,6 +162,12 @@ public void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -175,6 +206,15 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +public void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} int linkCount; boolean dragLink; //state of dragging a link @@ -364,7 +404,6 @@ class Node { text(title, x, y+textSize/3); } } - /** * Saving and loading is a messy hack! * You'll get a blank line in your save file for each deleted object. @@ -390,17 +429,7 @@ public void loadCSVFile(File selection) { } public void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { @@ -439,12 +468,12 @@ public void saveCSV(String path) { String[] saveArray = split(saveString, '\n'); saveStrings(path, saveArray); } - /** * Keys only get caught for changing a nodes title. * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + public void keyPressed() { if (key == ESC) { key = 0; @@ -564,7 +593,6 @@ public void mouseWheel(MouseEvent event) { nodes[i].setVectors(); } } - public void settings() { size(800, 600); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "ontology" }; diff --git a/build/application.linux32/source/ontology.pde b/build/application.linux32/source/ontology.pde index 07edee4..41227fc 100644 --- a/build/application.linux32/source/ontology.pde +++ b/build/application.linux32/source/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/build/application.linux32/source/save_load.pde b/build/application.linux32/source/save_load.pde index eb7501b..d261652 100644 --- a/build/application.linux32/source/save_load.pde +++ b/build/application.linux32/source/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/build/application.linux32/source/ui.pde b/build/application.linux32/source/ui.pde index 67f9b3a..ea86ca1 100644 --- a/build/application.linux32/source/ui.pde +++ b/build/application.linux32/source/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0; diff --git a/build/application.linux64/data/save.csv b/build/application.linux64/data/save.csv index 4ed18e7..139597f 100644 --- a/build/application.linux64/data/save.csv +++ b/build/application.linux64/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/build/application.linux64/lib/ontology.jar b/build/application.linux64/lib/ontology.jar index 8379e9f09bd49ef6510257ae66b9c362f1fb762f..f218851d9263345cd084700b57d6fbfd4c970295 100644 GIT binary patch delta 9052 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 delta 8874 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 I?Y~$52k4|AR{#J2 diff --git a/build/application.linux64/source/buttons.pde b/build/application.linux64/source/gui.pde similarity index 63% rename from build/application.linux64/source/buttons.pde rename to build/application.linux64/source/gui.pde index 525ddb1..4b9de3a 100644 --- a/build/application.linux64/source/buttons.pde +++ b/build/application.linux64/source/gui.pde @@ -1,19 +1,26 @@ -int buttonCount = 6; +int buttonCount = 8; int i_buttonId; + + + void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } void buttonFunctions(int functionID) { @@ -38,6 +45,12 @@ void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -76,3 +89,12 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/build/application.linux64/source/ontology.java b/build/application.linux64/source/ontology.java index f7bfd3a..cf773f7 100644 --- a/build/application.linux64/source/ontology.java +++ b/build/application.linux64/source/ontology.java @@ -23,11 +23,12 @@ boolean darkMode = true; public void setup() { surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -72,10 +73,14 @@ public void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -97,22 +102,42 @@ public void draw() { } } } -int buttonCount = 6; + +public void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} +int buttonCount = 8; int i_buttonId; + + + public void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } public void buttonFunctions(int functionID) { @@ -137,6 +162,12 @@ public void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -175,6 +206,15 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +public void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} int linkCount; boolean dragLink; //state of dragging a link @@ -364,7 +404,6 @@ class Node { text(title, x, y+textSize/3); } } - /** * Saving and loading is a messy hack! * You'll get a blank line in your save file for each deleted object. @@ -390,17 +429,7 @@ public void loadCSVFile(File selection) { } public void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { @@ -439,12 +468,12 @@ public void saveCSV(String path) { String[] saveArray = split(saveString, '\n'); saveStrings(path, saveArray); } - /** * Keys only get caught for changing a nodes title. * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + public void keyPressed() { if (key == ESC) { key = 0; @@ -564,7 +593,6 @@ public void mouseWheel(MouseEvent event) { nodes[i].setVectors(); } } - public void settings() { size(800, 600); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "ontology" }; diff --git a/build/application.linux64/source/ontology.pde b/build/application.linux64/source/ontology.pde index 07edee4..41227fc 100644 --- a/build/application.linux64/source/ontology.pde +++ b/build/application.linux64/source/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/build/application.linux64/source/save_load.pde b/build/application.linux64/source/save_load.pde index eb7501b..d261652 100644 --- a/build/application.linux64/source/save_load.pde +++ b/build/application.linux64/source/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/build/application.linux64/source/ui.pde b/build/application.linux64/source/ui.pde index 67f9b3a..ea86ca1 100644 --- a/build/application.linux64/source/ui.pde +++ b/build/application.linux64/source/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0; diff --git a/build/application.windows32/data/save.csv b/build/application.windows32/data/save.csv index 4ed18e7..139597f 100644 --- a/build/application.windows32/data/save.csv +++ b/build/application.windows32/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/build/application.windows32/lib/ontology.jar b/build/application.windows32/lib/ontology.jar index 8379e9f09bd49ef6510257ae66b9c362f1fb762f..f218851d9263345cd084700b57d6fbfd4c970295 100644 GIT binary patch delta 9052 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 delta 8874 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 I?Y~$52k4|AR{#J2 diff --git a/build/application.windows32/ontology.exe b/build/application.windows32/ontology.exe index 40790d1a1c34d1e1f61f33946f467cd3111efea9..46d29a10107417330f9c3c07d4311de08503872b 100755 GIT binary patch delta 344 zcmZqJ!rHKfbwUSo>b(mSyM37#Ycp-Utyu};PG+xC1=IRfrqV!u3 x && mouseX < x+w && mouseY > y && mouseY < y+h) ? true : false; - } - - void click() { - buttonFunctions(id); - } - Button(int x_, int y_, String label_) { - id = i_buttonId; - i_buttonId++; - x = x_; - y = y_ ; - label = label_; - w = int(textWidth(label))+18; - h = 32; - } - - void display() { - stroke(0); - strokeWeight(1); - fill(255, 127); - rect(x, y, w, h, 4); - fill(0); - text(label, x+9, y+h/2+5); - } -} diff --git a/build/application.windows32/source/gui.pde b/build/application.windows32/source/gui.pde new file mode 100644 index 0000000..4b9de3a --- /dev/null +++ b/build/application.windows32/source/gui.pde @@ -0,0 +1,100 @@ +int buttonCount = 8; +int i_buttonId; + + + + +void initButtons() { + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); + buttons[2] = new Button(10, 50, "Dark/Bright Mode"); + buttons[3] = new Button(10, 90, "Save"); + buttons[4] = new Button(10, 130, "Open"); + buttons[5] = new Button(10, 170, "Export Image"); + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ +} + +void buttonFunctions(int functionID) { + switch (functionID) { + case(0): + addNode(int(random(50, width-50)), int(random(30, height-150)), ""); + i_selectedNode = nodeCount-1; + break; + case(1): + deleteSelectedNode(); + break; + case(2): + darkMode = !darkMode; + break; + case(3): + saveCSV(dataPath("save.csv")); + selectOutput("Where to save .csv file to?", "saveCSVFile"); + break; + case(4): + selectInput("Select csv File", "loadCSVFile"); + break; + case(5): + selectOutput("Where to export .png image file to?", "savePNGFile"); + break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; + default: + break; + } +} + + +Button buttons[] = new Button[buttonCount]; + +class Button { + int id, x, y, w, h; + String label; + + boolean hover() { + return (mouseX > x && mouseX < x+w && mouseY > y && mouseY < y+h) ? true : false; + } + + void click() { + buttonFunctions(id); + } + Button(int x_, int y_, String label_) { + id = i_buttonId; + i_buttonId++; + x = x_; + y = y_ ; + label = label_; + w = int(textWidth(label))+18; + h = 32; + } + + void display() { + stroke(0); + strokeWeight(1); + fill(255, 127); + rect(x, y, w, h, 4); + fill(0); + text(label, x+9, y+h/2+5); + } +} + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/build/application.windows32/source/ontology.java b/build/application.windows32/source/ontology.java index f7bfd3a..cf773f7 100644 --- a/build/application.windows32/source/ontology.java +++ b/build/application.windows32/source/ontology.java @@ -23,11 +23,12 @@ boolean darkMode = true; public void setup() { surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -72,10 +73,14 @@ public void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -97,22 +102,42 @@ public void draw() { } } } -int buttonCount = 6; + +public void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} +int buttonCount = 8; int i_buttonId; + + + public void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } public void buttonFunctions(int functionID) { @@ -137,6 +162,12 @@ public void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -175,6 +206,15 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +public void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} int linkCount; boolean dragLink; //state of dragging a link @@ -364,7 +404,6 @@ class Node { text(title, x, y+textSize/3); } } - /** * Saving and loading is a messy hack! * You'll get a blank line in your save file for each deleted object. @@ -390,17 +429,7 @@ public void loadCSVFile(File selection) { } public void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { @@ -439,12 +468,12 @@ public void saveCSV(String path) { String[] saveArray = split(saveString, '\n'); saveStrings(path, saveArray); } - /** * Keys only get caught for changing a nodes title. * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + public void keyPressed() { if (key == ESC) { key = 0; @@ -564,7 +593,6 @@ public void mouseWheel(MouseEvent event) { nodes[i].setVectors(); } } - public void settings() { size(800, 600); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "ontology" }; diff --git a/build/application.windows32/source/ontology.pde b/build/application.windows32/source/ontology.pde index 07edee4..41227fc 100644 --- a/build/application.windows32/source/ontology.pde +++ b/build/application.windows32/source/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/build/application.windows32/source/save_load.pde b/build/application.windows32/source/save_load.pde index eb7501b..d261652 100644 --- a/build/application.windows32/source/save_load.pde +++ b/build/application.windows32/source/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/build/application.windows32/source/ui.pde b/build/application.windows32/source/ui.pde index 67f9b3a..ea86ca1 100644 --- a/build/application.windows32/source/ui.pde +++ b/build/application.windows32/source/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0; diff --git a/build/application.windows64/data/save.csv b/build/application.windows64/data/save.csv index 4ed18e7..139597f 100644 --- a/build/application.windows64/data/save.csv +++ b/build/application.windows64/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/build/application.windows64/lib/ontology.jar b/build/application.windows64/lib/ontology.jar index 8379e9f09bd49ef6510257ae66b9c362f1fb762f..f218851d9263345cd084700b57d6fbfd4c970295 100644 GIT binary patch delta 9052 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 delta 8874 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 I?Y~$52k4|AR{#J2 diff --git a/build/application.windows64/ontology.exe b/build/application.windows64/ontology.exe index 3d0c33098adb6f4ab7379fceda29c6cd7701fdc0..c403a9a150490a2d9e81581e3a1d6d59b86739e1 100755 GIT binary patch delta 344 zcmZqJ!rHKfbwUSo>b(mSyM38YgfeZstyu};PG+xC1=IRfrqV!u3 x && mouseX < x+w && mouseY > y && mouseY < y+h) ? true : false; - } - - void click() { - buttonFunctions(id); - } - Button(int x_, int y_, String label_) { - id = i_buttonId; - i_buttonId++; - x = x_; - y = y_ ; - label = label_; - w = int(textWidth(label))+18; - h = 32; - } - - void display() { - stroke(0); - strokeWeight(1); - fill(255, 127); - rect(x, y, w, h, 4); - fill(0); - text(label, x+9, y+h/2+5); - } -} diff --git a/build/application.windows64/source/gui.pde b/build/application.windows64/source/gui.pde new file mode 100644 index 0000000..4b9de3a --- /dev/null +++ b/build/application.windows64/source/gui.pde @@ -0,0 +1,100 @@ +int buttonCount = 8; +int i_buttonId; + + + + +void initButtons() { + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); + buttons[2] = new Button(10, 50, "Dark/Bright Mode"); + buttons[3] = new Button(10, 90, "Save"); + buttons[4] = new Button(10, 130, "Open"); + buttons[5] = new Button(10, 170, "Export Image"); + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ +} + +void buttonFunctions(int functionID) { + switch (functionID) { + case(0): + addNode(int(random(50, width-50)), int(random(30, height-150)), ""); + i_selectedNode = nodeCount-1; + break; + case(1): + deleteSelectedNode(); + break; + case(2): + darkMode = !darkMode; + break; + case(3): + saveCSV(dataPath("save.csv")); + selectOutput("Where to save .csv file to?", "saveCSVFile"); + break; + case(4): + selectInput("Select csv File", "loadCSVFile"); + break; + case(5): + selectOutput("Where to export .png image file to?", "savePNGFile"); + break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; + default: + break; + } +} + + +Button buttons[] = new Button[buttonCount]; + +class Button { + int id, x, y, w, h; + String label; + + boolean hover() { + return (mouseX > x && mouseX < x+w && mouseY > y && mouseY < y+h) ? true : false; + } + + void click() { + buttonFunctions(id); + } + Button(int x_, int y_, String label_) { + id = i_buttonId; + i_buttonId++; + x = x_; + y = y_ ; + label = label_; + w = int(textWidth(label))+18; + h = 32; + } + + void display() { + stroke(0); + strokeWeight(1); + fill(255, 127); + rect(x, y, w, h, 4); + fill(0); + text(label, x+9, y+h/2+5); + } +} + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/build/application.windows64/source/ontology.java b/build/application.windows64/source/ontology.java index f7bfd3a..cf773f7 100644 --- a/build/application.windows64/source/ontology.java +++ b/build/application.windows64/source/ontology.java @@ -23,11 +23,12 @@ boolean darkMode = true; public void setup() { surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -72,10 +73,14 @@ public void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -97,22 +102,42 @@ public void draw() { } } } -int buttonCount = 6; + +public void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} +int buttonCount = 8; int i_buttonId; + + + public void initButtons() { - buttons[0] = new Button(10, 10, "Add Node"); - buttons[1] = new Button(104, 10, "Delete Node"); + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); buttons[2] = new Button(10, 50, "Dark/Bright Mode"); buttons[3] = new Button(10, 90, "Save"); buttons[4] = new Button(10, 130, "Open"); buttons[5] = new Button(10, 170, "Export Image"); -/* buttons[0] = new Button(10, 10, "Node Hinzufügen"); - buttons[1] = new Button(155, 10, "Löschen"); - buttons[2] = new Button(10, 50, "Farben umkehren"); - buttons[3] = new Button(10, 90, "Speichern"); - buttons[4] = new Button(10, 130, "Öffnen"); - buttons[5] = new Button(10, 170, "Bild Exportieren");*/ + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ } public void buttonFunctions(int functionID) { @@ -137,6 +162,12 @@ public void buttonFunctions(int functionID) { case(5): selectOutput("Where to export .png image file to?", "savePNGFile"); break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; default: break; } @@ -175,6 +206,15 @@ class Button { text(label, x+9, y+h/2+5); } } + +boolean menuOpen; + +public void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} int linkCount; boolean dragLink; //state of dragging a link @@ -364,7 +404,6 @@ class Node { text(title, x, y+textSize/3); } } - /** * Saving and loading is a messy hack! * You'll get a blank line in your save file for each deleted object. @@ -390,17 +429,7 @@ public void loadCSVFile(File selection) { } public void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { @@ -439,12 +468,12 @@ public void saveCSV(String path) { String[] saveArray = split(saveString, '\n'); saveStrings(path, saveArray); } - /** * Keys only get caught for changing a nodes title. * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + public void keyPressed() { if (key == ESC) { key = 0; @@ -564,7 +593,6 @@ public void mouseWheel(MouseEvent event) { nodes[i].setVectors(); } } - public void settings() { size(800, 600); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "ontology" }; diff --git a/build/application.windows64/source/ontology.pde b/build/application.windows64/source/ontology.pde index 07edee4..41227fc 100644 --- a/build/application.windows64/source/ontology.pde +++ b/build/application.windows64/source/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/build/application.windows64/source/save_load.pde b/build/application.windows64/source/save_load.pde index eb7501b..d261652 100644 --- a/build/application.windows64/source/save_load.pde +++ b/build/application.windows64/source/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/build/application.windows64/source/ui.pde b/build/application.windows64/source/ui.pde index 67f9b3a..ea86ca1 100644 --- a/build/application.windows64/source/ui.pde +++ b/build/application.windows64/source/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0; diff --git a/data/save.csv b/data/save.csv index 4ed18e7..139597f 100644 --- a/data/save.csv +++ b/data/save.csv @@ -1,43 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Biological Process,395,537,32,33 -Physiological Process,292,455,34 -Cellular Process,483,455,34 -Cellular Physiological Process,391,375,36,35 -Cell Cycle,305,296,40,41 -Cell Division,544,265,37 -Cytokinesis,543,165,38 -Cytokinesis after Meiosis,399,54 -M Phase of Meiotic Cell Cycle,310,144,38 -M Phase,239,225,39 -Meiotic Cell Cycle,392,225,39 - diff --git a/gui.pde b/gui.pde new file mode 100644 index 0000000..4b9de3a --- /dev/null +++ b/gui.pde @@ -0,0 +1,100 @@ +int buttonCount = 8; +int i_buttonId; + + + + +void initButtons() { + buttons[0] = new Button(72, 10, "Add Node"); + buttons[1] = new Button(164, 10, "Delete Node"); + buttons[2] = new Button(10, 50, "Dark/Bright Mode"); + buttons[3] = new Button(10, 90, "Save"); + buttons[4] = new Button(10, 130, "Open"); + buttons[5] = new Button(10, 170, "Export Image"); + buttons[6] = new Button(10, 210, "Empty Workspace"); + buttons[7] = new Button(10, 10, "Menu"); + /* buttons[0] = new Button(10, 10, "Node Hinzufügen"); + buttons[1] = new Button(155, 10, "Löschen"); + buttons[2] = new Button(10, 50, "Farben umkehren"); + buttons[3] = new Button(10, 90, "Speichern"); + buttons[4] = new Button(10, 130, "Öffnen"); + buttons[5] = new Button(10, 170, "Bild Exportieren"); + buttons[6] = new Button(10, 210, "Arbeitsfläche leeren"); + buttons[7] = new Button(10, 210, "Menü");*/ +} + +void buttonFunctions(int functionID) { + switch (functionID) { + case(0): + addNode(int(random(50, width-50)), int(random(30, height-150)), ""); + i_selectedNode = nodeCount-1; + break; + case(1): + deleteSelectedNode(); + break; + case(2): + darkMode = !darkMode; + break; + case(3): + saveCSV(dataPath("save.csv")); + selectOutput("Where to save .csv file to?", "saveCSVFile"); + break; + case(4): + selectInput("Select csv File", "loadCSVFile"); + break; + case(5): + selectOutput("Where to export .png image file to?", "savePNGFile"); + break; + case(6): + deleteAll(); + break; + case(7): + menu(); + break; + default: + break; + } +} + + +Button buttons[] = new Button[buttonCount]; + +class Button { + int id, x, y, w, h; + String label; + + boolean hover() { + return (mouseX > x && mouseX < x+w && mouseY > y && mouseY < y+h) ? true : false; + } + + void click() { + buttonFunctions(id); + } + Button(int x_, int y_, String label_) { + id = i_buttonId; + i_buttonId++; + x = x_; + y = y_ ; + label = label_; + w = int(textWidth(label))+18; + h = 32; + } + + void display() { + stroke(0); + strokeWeight(1); + fill(255, 127); + rect(x, y, w, h, 4); + fill(0); + text(label, x+9, y+h/2+5); + } +} + +boolean menuOpen; + +void menu() { + if (menuOpen) { + } else { + } + menuOpen = !menuOpen; +} diff --git a/ontology.pde b/ontology.pde index 07edee4..41227fc 100644 --- a/ontology.pde +++ b/ontology.pde @@ -7,11 +7,12 @@ boolean darkMode = true; void setup() { size(800, 600); surface.setResizable(true); + //frame.setResizable(true); textSize(textSize); initButtons(); - + /** * When saving, a copy of the save-file is stored locally which is opened when starting the program */ @@ -56,10 +57,14 @@ void draw() { textAlign(CORNER); buttons[0].display(); if (i_selectedNode != -1) buttons[1].display(); - buttons[2].display(); - buttons[3].display(); - buttons[4].display(); - buttons[5].display(); + if (menuOpen) { + buttons[2].display(); + buttons[3].display(); + buttons[4].display(); + buttons[5].display(); + buttons[6].display(); + } + buttons[7].display(); rectMode(CENTER); textAlign(CENTER); textSize(textSize); @@ -81,3 +86,16 @@ void draw() { } } } + +void deleteAll() { + for (int i = 0; i < nodeCount; i++) { + //nodes[i].deleted = true; + i_selectedNode = i; + deleteSelectedNode(); + } + nodeCount = 0; + for (int i = 0; i < linkCount; i++) { + links[i].active = false; + } + linkCount = 0; +} diff --git a/save_load.pde b/save_load.pde index eb7501b..d261652 100644 --- a/save_load.pde +++ b/save_load.pde @@ -23,17 +23,7 @@ void loadCSVFile(File selection) { } void loadCSV(String path) { - for (int i = 0; i < nodeCount; i++) { - //nodes[i].deleted = true; - i_selectedNode = i; - deleteSelectedNode(); - } - nodeCount = 0; - - for (int i = 0; i < linkCount; i++) { - links[i].active = false; - } - linkCount = 0; + deleteAll(); String[] loadString = loadStrings(path); for (int i = 0; i < loadString.length-1; i++) { diff --git a/ui.pde b/ui.pde index 67f9b3a..ea86ca1 100644 --- a/ui.pde +++ b/ui.pde @@ -3,6 +3,7 @@ * Previous title is remembered in savedTitle and restored when hitting Escape */ String savedTitle; + void keyPressed() { if (key == ESC) { key = 0;