diff --git a/ControlFrame.pde b/ControlFrame.pde new file mode 100644 index 0000000..a2eba2f --- /dev/null +++ b/ControlFrame.pde @@ -0,0 +1,46 @@ +// the ControlFrame class extends PApplet, so we +// are creating a new processing applet inside a +// new frame with a controlP5 object loaded +public class ControlFrame extends PApplet { + public int w, h; + int abc = 100; + public ControlP5 cp5; + protected Object parent; + + private ControlFrame() { + } + + public ControlFrame(Object theParent, int theWidth, int theHeight) { + this.parent = theParent; + this.w = theWidth; + this.h = theHeight; + } + + public ControlP5 cp5() { + if (this.cp5 == null) { + this.cp5 = this.setupControlP5(); + } + return this.cp5; + } + + public void setup() { + size(w, h); + frameRate(5); + } + + public ControlP5 setupControlP5() { + println("About to create new ControlP5"); + ControlP5 cp5 = new ControlP5(this); + println("Created: " + cp5); + while (cp5 == null) { + println("Was null: " + cp5); + } + println("Finally created: " + cp5); + return cp5; + } + + public void draw() { + background(abc); + } + +} \ No newline at end of file diff --git a/DisplayMachine.pde b/DisplayMachine.pde index 56090c6..6e7019c 100644 --- a/DisplayMachine.pde +++ b/DisplayMachine.pde @@ -1,31 +1,31 @@ /** - Polargraph controller - Copyright Sandy Noble 2012. - - This file is part of Polargraph Controller. - - Polargraph Controller is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Polargraph Controller is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Polargraph Controller. If not, see . - - Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. - Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. - - This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. - - sandy.noble@gmail.com - http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ - */ + Polargraph controller + Copyright Sandy Noble 2015. + + This file is part of Polargraph Controller. + + Polargraph Controller is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Polargraph Controller is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Polargraph Controller. If not, see . + + Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. + Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. + + This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. + + sandy.noble@gmail.com + http://www.polargraph.co.uk/ + https://github.com/euphy/polargraphcontroller +*/ class DisplayMachine extends Machine { diff --git a/Machine.pde b/Machine.pde index 1a0f008..6e7b5bd 100644 --- a/Machine.pde +++ b/Machine.pde @@ -1,6 +1,6 @@ /** Polargraph controller - Copyright Sandy Noble 2012. + Copyright Sandy Noble 2015. This file is part of Polargraph Controller. @@ -24,7 +24,7 @@ sandy.noble@gmail.com http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ + https://github.com/euphy/polargraphcontroller */ /** * diff --git a/Misc.pde b/Misc.pde index c415e60..57d03e0 100644 --- a/Misc.pde +++ b/Misc.pde @@ -1,6 +1,6 @@ /** Polargraph controller - Copyright Sandy Noble 2012. + Copyright Sandy Noble 2015. This file is part of Polargraph Controller. @@ -24,7 +24,7 @@ sandy.noble@gmail.com http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ + https://github.com/euphy/polargraphcontroller */ class Scaler @@ -52,202 +52,202 @@ class PreviewVector extends PVector { public String command; } - - -import java.awt.Toolkit; -import java.awt.BorderLayout; -import java.awt.GraphicsEnvironment; - -public class Console extends WindowAdapter implements WindowListener, ActionListener, Runnable -{ - private JFrame frame; - private JTextArea textArea; - private Thread reader; - private Thread reader2; - private boolean quit; - - private final PipedInputStream pin=new PipedInputStream(); - private final PipedInputStream pin2=new PipedInputStream(); - - private PrintStream cOut = System.out; - private PrintStream cErr = System.err; - - Thread errorThrower; // just for testing (Throws an Exception at this Console - - public Console() - { - // create all components and add them - frame=new JFrame("Java Console"); - Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); - Dimension frameSize=new Dimension((int)(screenSize.width/2),(int)(screenSize.height/2)); - int x=(int)(frameSize.width/2); - int y=(int)(frameSize.height/2); - frame.setBounds(x,y,frameSize.width,frameSize.height); - - textArea=new JTextArea(); - textArea.setEditable(false); - JButton button=new JButton("clear"); - - frame.getContentPane().setLayout(new BorderLayout()); - frame.getContentPane().add(new JScrollPane(textArea),BorderLayout.CENTER); - frame.getContentPane().add(button,BorderLayout.SOUTH); - frame.setVisible(true); - - frame.addWindowListener(this); - button.addActionListener(this); - - try - { - this.cOut = System.out; - PipedOutputStream pout=new PipedOutputStream(this.pin); - System.setOut(new PrintStream(pout,true)); - } - catch (java.io.IOException io) - { - textArea.append("Couldn't redirect STDOUT to this console\n"+io.getMessage()); - } - catch (SecurityException se) - { - textArea.append("Couldn't redirect STDOUT to this console\n"+se.getMessage()); - } - - try - { - this.cErr = System.err; - PipedOutputStream pout2=new PipedOutputStream(this.pin2); - System.setErr(new PrintStream(pout2,true)); - } - catch (java.io.IOException io) - { - textArea.append("Couldn't redirect STDERR to this console\n"+io.getMessage()); - } - catch (SecurityException se) - { - textArea.append("Couldn't redirect STDERR to this console\n"+se.getMessage()); - } - - quit=false; // signals the Threads that they should exit - - // Starting two seperate threads to read from the PipedInputStreams - // - reader=new Thread(this); - reader.setDaemon(true); - reader.start(); - // - reader2=new Thread(this); - reader2.setDaemon(true); - reader2.start(); - -// // testing part -// // you may omit this part for your application -// // -// System.out.println("Hello World 2"); -// System.out.println("All fonts available to Graphic2D:\n"); -// GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); -// String[] fontNames=ge.getAvailableFontFamilyNames(); -// for(int n=0;n= 0 && getSerialPortNumber() < ports.length) - r.setValue(getSerialPortNumber()); - - r.add("setup", -2); - r.add("No serial connection", -1); +void button_mode_serialPortDialog() { + if (controlFrames.containsKey(CHANGE_SERIAL_PORT_WINDOW_NAME)) { + println("NOT OPENING ANOTHER ONE!"); + } + else { + final SerialPortWindow serialPortWindow = new SerialPortWindow(); + controlFrames.put(CHANGE_SERIAL_PORT_WINDOW_NAME, serialPortWindow); + } +} + +class SerialPortWindow extends ControlFrame { + + @Override + public ControlP5 cp5() { + return super.cp5(); + } + public SerialPortWindow() { + super(parentPapplet, 150, 350); + + int xPos = 100; + int yPos = 100; + + final Frame f = new Frame(CHANGE_SERIAL_PORT_WINDOW_NAME); + f.add(this); + this.init(); + f.setTitle(CHANGE_SERIAL_PORT_WINDOW_NAME); + f.setSize(super.w, super.h); + f.setLocation(xPos, yPos); + f.setResizable(false); + f.setVisible(true); + + f.addWindowListener( new WindowAdapter() { + @Override + public void windowClosing(WindowEvent we) { + + f.dispose(); + } + }); + + RadioButton r = cp5().addRadioButton("radio_serialPort") + .setPosition(10, 10) + .setSize(15,15) + .setSpacingRow(5) + .plugTo(parentPapplet, "radio_serialPort"); - for (int i = 0; i < ports.length; i++) - { - r.add(ports[i], i); - } - - int portNo = getSerialPortNumber(); - if (portNo > -1 && portNo < ports.length) - r.activate(ports[portNo]); - else - r.activate("No serial connection"); - - r.removeItem("setup"); + String[] ports = Serial.list(); + + for (int i = 0; i < ports.length; i++) { + println("Adding " + ports[i]); + r.addItem(ports[i], i); + } + + int portNo = getSerialPortNumber(); + if (portNo >= 0 && portNo < ports.length) + r.activate(ports[portNo]); + else + r.activate("No serial connection"); + + } + + } void radio_serialPort(int newSerialPort) { + println("In radio_serialPort"); if (newSerialPort == -2) { } else if (newSerialPort == -1) { - println("Disconnecting serial port."); - useSerialPortConnection = false; - if (myPort != null) - { - myPort.stop(); - myPort = null; - } - drawbotReady = false; - drawbotConnected = false; - serialPortNumber = newSerialPort; + println("Disconnecting serial port."); + useSerialPortConnection = false; + if (myPort != null) + { + myPort.stop(); + myPort = null; + } + drawbotReady = false; + drawbotConnected = false; + serialPortNumber = newSerialPort; } else if (newSerialPort != getSerialPortNumber()) { - println("About to connect to serial port in slot " + newSerialPort); - // Print a list of the serial ports, for debugging purposes: - if (newSerialPort < Serial.list().length) - { - try - { - drawbotReady = false; - drawbotConnected = false; - if (myPort != null) - { - myPort.stop(); - myPort = null; - } - if (getSerialPortNumber() >= 0) - println("closing " + Serial.list()[getSerialPortNumber()]); - - serialPortNumber = newSerialPort; - String portName = Serial.list()[serialPortNumber]; + println("About to connect to serial port in slot " + newSerialPort); + // Print a list of the serial ports, for debugging purposes: + if (newSerialPort < Serial.list().length) + { + try + { + drawbotReady = false; + drawbotConnected = false; + if (myPort != null) + { + myPort.stop(); + myPort = null; + } + if (getSerialPortNumber() >= 0) + println("closing " + Serial.list()[getSerialPortNumber()]); + + serialPortNumber = newSerialPort; + String portName = Serial.list()[serialPortNumber]; - myPort = new Serial(this, portName, getBaudRate()); - //read bytes into a buffer until you get a linefeed (ASCII 10): - myPort.bufferUntil('\n'); - useSerialPortConnection = true; - println("Successfully connected to port " + portName); - } - catch (Exception e) - { - println("Attempting to connect to serial port in slot " + getSerialPortNumber() - + " caused an exception: " + e.getMessage()); - } - } - else - { - println("No serial ports found."); - useSerialPortConnection = false; - } + myPort = new Serial(this, portName, getBaudRate()); + //read bytes into a buffer until you get a linefeed (ASCII 10): + myPort.bufferUntil('\n'); + useSerialPortConnection = true; + println("Successfully connected to port " + portName); + } + catch (Exception e) + { + println("Attempting to connect to serial port in slot " + getSerialPortNumber() + + " caused an exception: " + e.getMessage()); + } + } + else + { + println("No serial ports found."); + useSerialPortConnection = false; + } } else { - println("no serial port change."); + println("no serial port change."); } } +/* +ControlFrame newControlFrame(String name, int xPos, int yPos, int width, int height) { + final Frame f = new Frame(name); + final ControlFrame p = new ControlFrame(this, width, height); + f.add(p); + p.init(); + f.setTitle(name); + f.setSize(p.w, p.h); + f.setLocation(xPos, yPos); + f.setResizable(false); + f.setVisible(true); + + f.addWindowListener( new WindowAdapter() { + @Override + public void windowClosing(WindowEvent we) { + p.dispose(); + f.dispose(); + if (controlFrames.containsKey(f.getName())) { + controlFrames.remove(f.getName()); + } + + } + }); + + return p; +} + +*/ /*------------------------------------------------------------------------ Details about the "machine store" subwindow ------------------------------------------------------------------------*/ - -ControlWindow dialogWindow = null; - -void button_mode_machineStoreDialog() -{ - this.dialogWindow = cp5.addControlWindow("chooseStoreFilenameWindow",100,100,450,150); - dialogWindow.hideCoordinates(); - - dialogWindow.setBackground(getBackgroundColour()); - - Textfield filenameField = cp5.addTextfield("storeFilename",20,20,150,20); - filenameField.setText(getStoreFilename()); - filenameField.setLabel("Filename to store to"); - filenameField.setWindow(dialogWindow); - - Button submitButton = cp5.addButton("submitStoreFilenameWindow",0,180,20,60,20); - submitButton.setLabel("Submit"); - submitButton.setWindow(dialogWindow); - - Toggle overwriteToggle = cp5.addToggle("toggleAppendToFile",true,180,50,20,20); - overwriteToggle.setCaptionLabel("Overwrite existing file"); - overwriteToggle.setWindow(dialogWindow); - - filenameField.setFocus(true); - -} - -void storeFilename(String filename) -{ - println("Filename event: "+ filename); - if (filename != null && filename.length() <= 12) - { - setStoreFilename(filename); - sendMachineStoreMode(); - } -} - -void toggleAppendToFile(boolean theFlag) -{ - setOverwriteExistingStoreFile(theFlag); -} - -void submitStoreFilenameWindow(int theValue) -{ - Textfield tf = (Textfield) cp5.controller("storeFilename"); - tf.submit(); -} - -void button_mode_machineExecDialog() -{ - this.dialogWindow = cp5.addControlWindow("chooseExecFilenameWindow",100,100,450,150); - dialogWindow.hideCoordinates(); - - dialogWindow.setBackground(getBackgroundColour()); - - Textfield filenameField = cp5.addTextfield("execFilename",20,20,150,20); - filenameField.setText(getStoreFilename()); - filenameField.setLabel("Filename to execute from"); - filenameField.setWindow(dialogWindow); - - Button submitButton = cp5.addButton("submitExecFilenameWindow",0,180,20,60,20); - submitButton.setLabel("Submit"); - submitButton.setWindow(dialogWindow); - - filenameField.setFocus(true); - -} - -void execFilename(String filename) -{ - println("Filename event: "+ filename); - if (filename != null && filename.length() <= 12) - { - setStoreFilename(filename); - sendMachineExecMode(); - } -} -void submitExecFilenameWindow(int theValue) -{ - Textfield tf = (Textfield) cp5.controller("execFilename"); - tf.submit(); -} - -void button_mode_sendMachineLiveMode() -{ - sendMachineLiveMode(); -} - - - - - -/*------------------------------------------------------------------------ - Details about the "drawing" subwindow -------------------------------------------------------------------------*/ -void button_mode_drawPixelsDialog() -{ - this.dialogWindow = cp5.addControlWindow("drawPixelsWindow",100,100,450,150); - dialogWindow.hideCoordinates(); - - dialogWindow.setBackground(getBackgroundColour()); - - Radio rPos = cp5.addRadio("radio_startPosition",10,10); - rPos.add("Top-right", DRAW_DIR_NE); - rPos.add("Bottom-right", DRAW_DIR_SE); - rPos.add("Bottom-left", DRAW_DIR_SW); - rPos.add("Top-left", DRAW_DIR_NW); - rPos.setWindow(dialogWindow); - - Radio rSkip = cp5.addRadio("radio_pixelSkipStyle",10,100); - rSkip.add("Lift pen over masked pixels", 1); - rSkip.add("Draw masked pixels as blanks", 2); - rSkip.setWindow(dialogWindow); - -// Radio rDir = cp5.addRadio("radio_rowStartDirection",100,10); -// rDir.add("Upwards", 0); -// rDir.add("Downwards", 1); -// rDir.setWindow(dialogWindow); - - Radio rStyle = cp5.addRadio("radio_pixelStyle",100,10); - rStyle.add("Variable frequency square wave", PIXEL_STYLE_SQ_FREQ); - rStyle.add("Variable size square wave", PIXEL_STYLE_SQ_SIZE); - rStyle.add("Solid square wave", PIXEL_STYLE_SQ_SOLID); - rStyle.add("Scribble", PIXEL_STYLE_SCRIBBLE); - if (currentHardware >= HARDWARE_VER_MEGA) - { - rStyle.add("Spiral", PIXEL_STYLE_CIRCLE); - rStyle.add("Sawtooth", PIXEL_STYLE_SAW); - } - rStyle.setWindow(dialogWindow); - - Button submitButton = cp5.addButton("submitDrawWindow",0,280,10,120,20); - submitButton.setLabel("Generate commands"); - submitButton.setWindow(dialogWindow); - - -} - +// +//ControlWindow dialogWindow = null; +// +//void button_mode_machineStoreDialog() +//{ +// this.dialogWindow = cp5.addControlWindow("chooseStoreFilenameWindow",100,100,450,150); +// dialogWindow.hideCoordinates(); +// +// dialogWindow.setBackground(getBackgroundColour()); +// +// Textfield filenameField = cp5.addTextfield("storeFilename",20,20,150,20); +// filenameField.setText(getStoreFilename()); +// filenameField.setLabel("Filename to store to"); +// filenameField.setWindow(dialogWindow); +// +// Button submitButton = cp5.addButton("submitStoreFilenameWindow",0,180,20,60,20); +// submitButton.setLabel("Submit"); +// submitButton.setWindow(dialogWindow); +// +// Toggle overwriteToggle = cp5.addToggle("toggleAppendToFile",true,180,50,20,20); +// overwriteToggle.setCaptionLabel("Overwrite existing file"); +// overwriteToggle.setWindow(dialogWindow); +// +// filenameField.setFocus(true); +// +//} +// +//void storeFilename(String filename) +//{ +// println("Filename event: "+ filename); +// if (filename != null && filename.length() <= 12) +// { +// setStoreFilename(filename); +// sendMachineStoreMode(); +// } +//} +// +//void toggleAppendToFile(boolean theFlag) +//{ +// setOverwriteExistingStoreFile(theFlag); +//} +// +//void submitStoreFilenameWindow(int theValue) +//{ +// Textfield tf = (Textfield) cp5.controller("storeFilename"); +// tf.submit(); +//} +// +//void button_mode_machineExecDialog() +//{ +// this.dialogWindow = cp5.addControlWindow("chooseExecFilenameWindow",100,100,450,150); +// dialogWindow.hideCoordinates(); +// +// dialogWindow.setBackground(getBackgroundColour()); +// +// Textfield filenameField = cp5.addTextfield("execFilename",20,20,150,20); +// filenameField.setText(getStoreFilename()); +// filenameField.setLabel("Filename to execute from"); +// filenameField.setWindow(dialogWindow); +// +// Button submitButton = cp5.addButton("submitExecFilenameWindow",0,180,20,60,20); +// submitButton.setLabel("Submit"); +// submitButton.setWindow(dialogWindow); +// +// filenameField.setFocus(true); +// +//} +// +//void execFilename(String filename) +//{ +// println("Filename event: "+ filename); +// if (filename != null && filename.length() <= 12) +// { +// setStoreFilename(filename); +// sendMachineExecMode(); +// } +//} +//void submitExecFilenameWindow(int theValue) +//{ +// Textfield tf = (Textfield) cp5.controller("execFilename"); +// tf.submit(); +//} +// +//void button_mode_sendMachineLiveMode() +//{ +// sendMachineLiveMode(); +//} +// +// +// +// +// +///*------------------------------------------------------------------------ +// Details about the "drawing" subwindow +//------------------------------------------------------------------------*/ +//void button_mode_drawPixelsDialog() +//{ +// this.dialogWindow = cp5.addControlWindow("drawPixelsWindow",100,100,450,150); +// dialogWindow.hideCoordinates(); +// +// dialogWindow.setBackground(getBackgroundColour()); +// +// Radio rPos = cp5.addRadio("radio_startPosition",10,10); +// rPos.add("Top-right", DRAW_DIR_NE); +// rPos.add("Bottom-right", DRAW_DIR_SE); +// rPos.add("Bottom-left", DRAW_DIR_SW); +// rPos.add("Top-left", DRAW_DIR_NW); +// rPos.setWindow(dialogWindow); +// +// Radio rSkip = cp5.addRadio("radio_pixelSkipStyle",10,100); +// rSkip.add("Lift pen over masked pixels", 1); +// rSkip.add("Draw masked pixels as blanks", 2); +// rSkip.setWindow(dialogWindow); +// +//// Radio rDir = cp5.addRadio("radio_rowStartDirection",100,10); +//// rDir.add("Upwards", 0); +//// rDir.add("Downwards", 1); +//// rDir.setWindow(dialogWindow); +// +// Radio rStyle = cp5.addRadio("radio_pixelStyle",100,10); +// rStyle.add("Variable frequency square wave", PIXEL_STYLE_SQ_FREQ); +// rStyle.add("Variable size square wave", PIXEL_STYLE_SQ_SIZE); +// rStyle.add("Solid square wave", PIXEL_STYLE_SQ_SOLID); +// rStyle.add("Scribble", PIXEL_STYLE_SCRIBBLE); +// if (currentHardware >= HARDWARE_VER_MEGA) +// { +// rStyle.add("Spiral", PIXEL_STYLE_CIRCLE); +// rStyle.add("Sawtooth", PIXEL_STYLE_SAW); +// } +// rStyle.setWindow(dialogWindow); +// +// Button submitButton = cp5.addButton("submitDrawWindow",0,280,10,120,20); +// submitButton.setLabel("Generate commands"); +// submitButton.setWindow(dialogWindow); +// +// +//} +// public Integer renderStartPosition = DRAW_DIR_NE; // default top right hand corner for start public Integer renderStartDirection = DRAW_DIR_SE; // default start drawing in SE direction (DOWN) public Integer renderStyle = PIXEL_STYLE_SQ_FREQ; // default pixel style square wave -void radio_startPosition(int pos) -{ - this.renderStartPosition = pos; - radio_rowStartDirection(1); -} -void radio_rowStartDirection(int dir) -{ - if (renderStartPosition == DRAW_DIR_NE || renderStartPosition == DRAW_DIR_SW) - renderStartDirection = (dir == 0) ? DRAW_DIR_NW : DRAW_DIR_SE; - else if (renderStartPosition == DRAW_DIR_SE || renderStartPosition == DRAW_DIR_NW) - renderStartDirection = (dir == 0) ? DRAW_DIR_NE : DRAW_DIR_SW; -} -void radio_pixelStyle(int style) -{ - renderStyle = style; -} -void radio_pixelSkipStyle(int style) -{ - if (style == 1) - liftPenOnMaskedPixels = true; - else if (style == 2) - liftPenOnMaskedPixels = false; -} -void submitDrawWindow(int theValue) -{ - println("draw."); - println("Style: " + renderStyle); - println("Start pos: " + renderStartPosition); - println("Start dir: " + renderStartDirection); - - switch (renderStyle) - { - case PIXEL_STYLE_SQ_FREQ: button_mode_renderSquarePixel(); break; - case PIXEL_STYLE_SQ_SIZE: button_mode_renderScaledSquarePixels(); break; - case PIXEL_STYLE_SQ_SOLID: button_mode_renderSolidSquarePixels(); break; - case PIXEL_STYLE_SCRIBBLE: button_mode_renderScribblePixels(); break; - case PIXEL_STYLE_CIRCLE: button_mode_renderCirclePixel(); break; - case PIXEL_STYLE_SAW: button_mode_renderSawPixel(); break; - } - - -} - -/*------------------------------------------------------------------------ - Details about the "writing" subwindow -------------------------------------------------------------------------*/ +//void radio_startPosition(int pos) +//{ +// this.renderStartPosition = pos; +// radio_rowStartDirection(1); +//} +//void radio_rowStartDirection(int dir) +//{ +// if (renderStartPosition == DRAW_DIR_NE || renderStartPosition == DRAW_DIR_SW) +// renderStartDirection = (dir == 0) ? DRAW_DIR_NW : DRAW_DIR_SE; +// else if (renderStartPosition == DRAW_DIR_SE || renderStartPosition == DRAW_DIR_NW) +// renderStartDirection = (dir == 0) ? DRAW_DIR_NE : DRAW_DIR_SW; +//} +//void radio_pixelStyle(int style) +//{ +// renderStyle = style; +//} +//void radio_pixelSkipStyle(int style) +//{ +// if (style == 1) +// liftPenOnMaskedPixels = true; +// else if (style == 2) +// liftPenOnMaskedPixels = false; +//} +//void submitDrawWindow(int theValue) +//{ +// println("draw."); +// println("Style: " + renderStyle); +// println("Start pos: " + renderStartPosition); +// println("Start dir: " + renderStartDirection); +// +// switch (renderStyle) +// { +// case PIXEL_STYLE_SQ_FREQ: button_mode_renderSquarePixel(); break; +// case PIXEL_STYLE_SQ_SIZE: button_mode_renderScaledSquarePixels(); break; +// case PIXEL_STYLE_SQ_SOLID: button_mode_renderSolidSquarePixels(); break; +// case PIXEL_STYLE_SCRIBBLE: button_mode_renderScribblePixels(); break; +// case PIXEL_STYLE_CIRCLE: button_mode_renderCirclePixel(); break; +// case PIXEL_STYLE_SAW: button_mode_renderSawPixel(); break; +// } +// +// +//} +// +///*------------------------------------------------------------------------ +// Details about the "writing" subwindow +//------------------------------------------------------------------------*/ String textToWrite = ""; String spriteFilePrefix = "sprite/let"; String spriteFileSuffix = ".txt"; - -void button_mode_drawWritingDialog() -{ - this.dialogWindow = cp5.addControlWindow("drawWritingWindow",100,100,450,200); - dialogWindow.hideCoordinates(); - - dialogWindow.setBackground(getBackgroundColour()); - - Textfield spriteFileField = cp5.addTextfield("spriteFilePrefixField",20,20,150,20); - spriteFileField.setText(getSpriteFilePrefix()); - spriteFileField.setLabel("File prefix"); - spriteFileField.setWindow(dialogWindow); - - Textfield writingField = cp5.addTextfield("textToWriteField",20,60,400,20); - writingField.setText(getTextToWrite()); - writingField.setLabel("Text to write"); - writingField.setWindow(dialogWindow); - - Button importTextButton = cp5.addButton("importTextButton",0,20,100,120,20); - importTextButton.setLabel("Load text from file"); - importTextButton.setWindow(dialogWindow); - - Radio rPos = cp5.addRadio("radio_drawWritingDirection",20,140); +// +//void button_mode_drawWritingDialog() +//{ +// this.dialogWindow = cp5.addControlWindow("drawWritingWindow",100,100,450,200); +// dialogWindow.hideCoordinates(); +// +// dialogWindow.setBackground(getBackgroundColour()); +// +// Textfield spriteFileField = cp5.addTextfield("spriteFilePrefixField",20,20,150,20); +// spriteFileField.setText(getSpriteFilePrefix()); +// spriteFileField.setLabel("File prefix"); +// spriteFileField.setWindow(dialogWindow); +// +// Textfield writingField = cp5.addTextfield("textToWriteField",20,60,400,20); +// writingField.setText(getTextToWrite()); +// writingField.setLabel("Text to write"); +// writingField.setWindow(dialogWindow); +// +// Button importTextButton = cp5.addButton("importTextButton",0,20,100,120,20); +// importTextButton.setLabel("Load text from file"); +// importTextButton.setWindow(dialogWindow); +// +// Radio rPos = cp5.addRadio("radio_drawWritingDirection",20,140); +//// rPos.add("North-east", DRAW_DIR_NE); +// rPos.add("South-east", DRAW_DIR_SE); +//// rPos.add("South-west", DRAW_DIR_SW); +//// rPos.add("North-west", DRAW_DIR_NW); +// rPos.setWindow(dialogWindow); +// +// +// +// Button submitButton = cp5.addButton("submitWritingWindow",0,300,100,120,20); +// submitButton.setLabel("Generate commands"); +// submitButton.setWindow(dialogWindow); +//} +// +//void spriteFilePrefixField(String value) +//{ +// spriteFilePrefix = value; +//} +//void textToWriteField(String value) +//{ +// textToWrite = value; +//} +// +//String getTextToWrite() +//{ +// return textToWrite; +//} +//String getSpriteFilePrefix() +//{ +// return spriteFilePrefix; +//} +//String getSpriteFileSuffix() +//{ +// return spriteFileSuffix; +//} +// +//void importTextButton() +//{ +// textToWrite = importTextToWriteFromFile(); +// Textfield tf = (Textfield) cp5.controller("textToWriteField"); +// tf.setText(getTextToWrite()); +// tf.submit(); +//} +// +// +//void submitWritingWindow(int theValue) +//{ +// println("Write."); +// +// Textfield tf = (Textfield) cp5.controller("spriteFilePrefixField"); +// tf.submit(); +// tf.setText(getSpriteFilePrefix()); +// tf = (Textfield) cp5.controller("textToWriteField"); +// tf.submit(); +// tf.setText(getTextToWrite()); +// +// println("Start dir: " + renderStartDirection); +// println("Sprite file prefix: " + spriteFilePrefix); +// println("Text: " + textToWrite); +// +// for (int i=0; i. - - Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. - Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. - - This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. - - sandy.noble@gmail.com - http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ - */ -Set getPanelNames() -{ + Polargraph controller + Copyright Sandy Noble 2015. + + This file is part of Polargraph Controller. + + Polargraph Controller is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Polargraph Controller is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Polargraph Controller. If not, see . + + Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. + Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. + + This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. + + sandy.noble@gmail.com + http://www.polargraph.co.uk/ + https://github.com/euphy/polargraphcontroller +*/ +Set getPanelNames() { if (this.panelNames == null) this.panelNames = buildPanelNames(); return this.panelNames; } -List getTabNames() -{ +List getTabNames() { if (this.tabNames == null) this.tabNames = buildTabNames(); return this.tabNames; } -Set getControlNames() -{ +Set getControlNames() { if (this.controlNames == null) this.controlNames = buildControlNames(); return this.controlNames; } -Map> getControlsForPanels() -{ +Map> getControlsForPanels() { if (this.controlsForPanels == null) this.controlsForPanels = buildControlsForPanels(); return this.controlsForPanels; } -Map getAllControls() -{ +Map getAllControls() { if (this.allControls == null) this.allControls = buildAllControls(); return this.allControls; } -Map getControlLabels() -{ +Map getControlLabels() { if (this.controlLabels == null) this.controlLabels = buildControlLabels(); return this.controlLabels; } -Map> getPanelsForTabs() -{ +Map> getPanelsForTabs() { if (this.panelsForTabs == null) this.panelsForTabs = buildPanelsForTabs(); return this.panelsForTabs; } -Map getPanels() -{ +Map getPanels() { if (this.panels == null) this.panels = buildPanels(); return this.panels; } -Set getControlsToLockIfBoxNotSpecified() -{ +Set getControlsToLockIfBoxNotSpecified() { if (this.controlsToLockIfBoxNotSpecified == null) { this.controlsToLockIfBoxNotSpecified = buildControlsToLockIfBoxNotSpecified(); @@ -84,8 +75,7 @@ Set getControlsToLockIfBoxNotSpecified() return this.controlsToLockIfBoxNotSpecified; } -Set getControlsToLockIfImageNotLoaded() -{ +Set getControlsToLockIfImageNotLoaded() { if (this.controlsToLockIfImageNotLoaded == null) { this.controlsToLockIfImageNotLoaded = buildControlsToLockIfImageNotLoaded(); @@ -93,9 +83,7 @@ Set getControlsToLockIfImageNotLoaded() return this.controlsToLockIfImageNotLoaded; } - -void hideAllControls() -{ +void hideAllControls() { for (String key : allControls.keySet()) { Controller c = allControls.get(key); @@ -103,8 +91,7 @@ void hideAllControls() } } -Map buildPanels() -{ +Map buildPanels() { Map panels = new HashMap(); float panelHeight = frame.getHeight() - getMainPanelPosition().y - (DEFAULT_CONTROL_SIZE.y*3); @@ -121,7 +108,7 @@ Map buildPanels() panels.put(PANEL_NAME_INPUT, inputPanel); Panel rovingPanel = new Panel(PANEL_NAME_ROVING, panelOutline); - rovingPanel.setOutlineColour(color(200,200,200)); + rovingPanel.setOutlineColour(color(100,200,200)); // get controls rovingPanel.setResizable(true); rovingPanel.setControls(getControlsForPanels().get(PANEL_NAME_ROVING)); @@ -131,7 +118,7 @@ Map buildPanels() panels.put(PANEL_NAME_ROVING, rovingPanel); Panel tracePanel = new Panel(PANEL_NAME_TRACE, panelOutline); - tracePanel.setOutlineColour(color(200,200,200)); + tracePanel.setOutlineColour(color(200,255,200)); // get controls tracePanel.setResizable(true); tracePanel.setControls(getControlsForPanels().get(PANEL_NAME_TRACE)); @@ -141,7 +128,7 @@ Map buildPanels() panels.put(PANEL_NAME_TRACE, tracePanel); Panel detailsPanel = new Panel(PANEL_NAME_DETAILS, panelOutline); - detailsPanel.setOutlineColour(color(200, 200, 200)); + detailsPanel.setOutlineColour(color(200, 200, 255)); // get controls detailsPanel.setResizable(true); detailsPanel.setControls(getControlsForPanels().get(PANEL_NAME_DETAILS)); @@ -151,7 +138,7 @@ Map buildPanels() panels.put(PANEL_NAME_DETAILS, detailsPanel); Panel queuePanel = new Panel(PANEL_NAME_QUEUE, panelOutline); - queuePanel.setOutlineColour(color(200, 200, 200)); + queuePanel.setOutlineColour(color(200, 200, 50)); // get controls queuePanel.setResizable(true); queuePanel.setControls(getControlsForPanels().get(PANEL_NAME_QUEUE)); @@ -165,7 +152,7 @@ Map buildPanels() new PVector((DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x)*2, (DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y)*2)); Panel generalPanel = new Panel(PANEL_NAME_GENERAL, panelOutline); generalPanel.setResizable(false); - generalPanel.setOutlineColour(color(200, 200, 200)); + generalPanel.setOutlineColour(color(200, 50, 200)); // get controls generalPanel.setControls(getControlsForPanels().get(PANEL_NAME_GENERAL)); // get control positions @@ -241,9 +228,9 @@ Map buildAllControls() Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100); t.setLabel(getControlLabels().get(controlName)); t.hide(); - controlP5.Label l = t.captionLabel(); - l.style().marginTop = -17; //move upwards (relative to button size) - l.style().marginLeft = 4; //move to the right + controlP5.Label l = t.getCaptionLabel(); + l.getStyle().marginTop = -17; //move upwards (relative to button size) + l.getStyle().marginLeft = 4; //move to the right map.put(controlName, t); // println("Added toggle " + controlName); } @@ -252,9 +239,9 @@ Map buildAllControls() Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100); t.setLabel(getControlLabels().get(controlName)); t.hide(); - controlP5.Label l = t.captionLabel(); - l.style().marginTop = -17; //move upwards (relative to button size) - l.style().marginLeft = 4; //move to the right + controlP5.Label l = t.getCaptionLabel(); + l.getStyle().marginTop = -17; //move upwards (relative to button size) + l.getStyle().marginLeft = 4; //move to the right map.put(controlName, t); // println("Added minitoggle " + controlName); } @@ -264,9 +251,9 @@ Map buildAllControls() n.setLabel(getControlLabels().get(controlName)); n.hide(); n.setDecimalPrecision(0); - controlP5.Label l = n.captionLabel(); - l.style().marginTop = -17; //move upwards (relative to button size) - l.style().marginLeft = 40; //move to the right + controlP5.Label l = n.getCaptionLabel(); + l.getStyle().marginTop = -17; //move upwards (relative to button size) + l.getStyle().marginLeft = 40; //move to the right // change the control direction to left/right n.setDirection(Controller.VERTICAL); map.put(controlName, n); @@ -500,6 +487,12 @@ Map initialiseNumberboxValues(Map map) n.setMax(PATH_LENGTH_HIGHPASS_CUTOFF_MAX); n.setMultiplier(0.5); } + else if (MODE_ADJUST_PREVIEW_CORD_OFFSET.equals(key)) + { + n.setDecimalPrecision(0); + n.setValue(0); + n.setMultiplier(0.5); + } } } return map; @@ -555,9 +548,6 @@ Map initialiseToggleValues(Map map) return map; } - - - String getControlLabel(String butName) { if (controlLabels.containsKey(butName)) @@ -574,10 +564,10 @@ Map buildControlPositionsForPanel(Panel panel) int row = 0; for (Controller controller : panel.getControls()) { - if (controller.name().startsWith("minitoggle_")) + if (controller.getName().startsWith("minitoggle_")) { PVector p = new PVector(col*(DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x), row*(DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y)); - map.put(controller.name(), p); + map.put(controller.getName(), p); row++; if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight()) { @@ -588,7 +578,7 @@ Map buildControlPositionsForPanel(Panel panel) else { PVector p = new PVector(col*(DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x), row*(DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y)); - map.put(controller.name(), p); + map.put(controller.getName(), p); row++; if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight()) { @@ -597,9 +587,9 @@ Map buildControlPositionsForPanel(Panel panel) } } } - return map; } + Map buildControlSizesForPanel(Panel panel) { //println("Building control sizes for panel " + panel.getName()); @@ -609,16 +599,16 @@ Map buildControlSizesForPanel(Panel panel) int row = 0; for (Controller controller : panel.getControls()) { - if (controller.name().startsWith("minitoggle_")) + if (controller.getName().startsWith("minitoggle_")) { PVector s = new PVector(DEFAULT_CONTROL_SIZE.y, DEFAULT_CONTROL_SIZE.y); - map.put(controller.name(), s); + map.put(controller.getName(), s); } else { PVector s = new PVector(DEFAULT_CONTROL_SIZE.x, DEFAULT_CONTROL_SIZE.y); - map.put(controller.name(), s); - //println("Added size of " + controller.name() + " to panel. " + s); + map.put(controller.getName(), s); + //println("Added size of " + controller.getName() + " to panel. " + s); } } @@ -688,6 +678,8 @@ List getControlNamesForInputPanel() controlNames.add(MODE_CHANGE_MIN_VECTOR_LINE_LENGTH); //controlNames.add(MODE_VECTOR_PATH_LENGTH_HIGHPASS_CUTOFF); controlNames.add(MODE_RENDER_VECTORS); + + controlNames.add(MODE_ADJUST_PREVIEW_CORD_OFFSET); controlNames.add(MODE_SHOW_IMAGE); controlNames.add(MODE_SHOW_VECTOR); @@ -784,7 +776,7 @@ List getControlNamesForDetailPanel() controlNames.add(MODE_SEND_BUTTON_ACTIVATE); controlNames.add(MODE_SEND_BUTTON_DEACTIVATE); - + controlNames.add(MODE_CHANGE_SERIAL_PORT); return controlNames; @@ -960,6 +952,8 @@ Map buildControlLabels() result.put(MODE_SEND_BUTTON_ACTIVATE, "Activate button"); result.put(MODE_SEND_BUTTON_DEACTIVATE, "Deactivate button"); + result.put(MODE_ADJUST_PREVIEW_CORD_OFFSET, "Cord offset"); + return result; } @@ -1103,6 +1097,7 @@ Set buildControlNames() result.add(MODE_SEND_BUTTON_ACTIVATE); result.add(MODE_SEND_BUTTON_DEACTIVATE); + result.add(MODE_ADJUST_PREVIEW_CORD_OFFSET); return result; } diff --git a/drawing.pde b/drawing.pde index 4952b13..7ba69fa 100644 --- a/drawing.pde +++ b/drawing.pde @@ -1,31 +1,31 @@ /** - Polargraph controller - Copyright Sandy Noble 2012. - - This file is part of Polargraph Controller. - - Polargraph Controller is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Polargraph Controller is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Polargraph Controller. If not, see . - - Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. - Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. - - This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. - - sandy.noble@gmail.com - http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ - */ + Polargraph controller + Copyright Sandy Noble 2015. + + This file is part of Polargraph Controller. + + Polargraph Controller is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Polargraph Controller is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Polargraph Controller. If not, see . + + Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. + Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. + + This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. + + sandy.noble@gmail.com + http://www.polargraph.co.uk/ + https://github.com/euphy/polargraphcontroller +*/ static final String CMD_CHANGELENGTH = "C01,"; static final String CMD_CHANGEPENWIDTH = "C02,"; static final String CMD_CHANGEMOTORSPEED = "C03,"; diff --git a/polargraphcontroller.pde b/polargraphcontroller.pde index 7688662..1b430fa 100644 --- a/polargraphcontroller.pde +++ b/polargraphcontroller.pde @@ -1,6 +1,6 @@ /** Polargraph controller - Copyright Sandy Noble 2014. + Copyright Sandy Noble 2015. This file is part of Polargraph Controller. @@ -24,8 +24,7 @@ sandy.noble@gmail.com http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ - + https://github.com/euphy/polargraphcontroller */ //import processing.video.*; import diewald_CV_kit.libraryinfo.*; @@ -49,10 +48,14 @@ import processing.serial.*; import controlP5.*; import java.awt.event.KeyEvent; import java.awt.event.*; +import java.awt.Frame; +import java.awt.BorderLayout; -int majorVersionNo = 1; -int minorVersionNo = 10; -int buildNo = 2; +import java.lang.reflect.Method; + +int majorVersionNo = 2; +int minorVersionNo = 0; +int buildNo = 0; String programTitle = "Polargraph Controller v" + majorVersionNo + "." + minorVersionNo + " build " + buildNo; ControlP5 cp5; @@ -329,6 +332,8 @@ static final String MODE_ROTATE_WEBCAM_INPUT = "toggle_mode_rotateWebcam"; static final String MODE_SEND_BUTTON_ACTIVATE = "button_mode_sendButtonActivate"; static final String MODE_SEND_BUTTON_DEACTIVATE = "button_mode_sendButtonDeactivate"; +static final String MODE_ADJUST_PREVIEW_CORD_OFFSET = "numberbox_mode_previewCordOffsetValue"; + PVector statusTextPosition = new PVector(300.0, 12.0); @@ -395,6 +400,8 @@ public color guideColour = color(255); public color backgroundColour = color(100); public color densityPreviewColour = color(0); +public Integer previewCordOffset = 0; + public boolean showingSummaryOverlay = true; public boolean showingDialogBox = false; @@ -433,7 +440,7 @@ public static final String PANEL_NAME_TRACE = "panel_trace"; public static final String PANEL_NAME_GENERAL = "panel_general"; public final PVector DEFAULT_CONTROL_SIZE = new PVector(100.0, 20.0); -public final PVector CONTROL_SPACING = new PVector(2.0, 2.0); +public final PVector CONTROL_SPACING = new PVector(4.0, 4.0); public PVector mainPanelPosition = new PVector(10.0, 85.0); public final Integer PANEL_MIN_HEIGHT = 400; @@ -451,11 +458,13 @@ public Set controlsToLockIfImageNotLoaded = null; public Map> panelsForTabs = null; public Map panels = null; +public Map controlFrames = new HashMap(); + // machine moving PVector machineDragOffset = new PVector (0.0, 0.0); PVector lastMachineDragPosition = new PVector (0.0, 0.0); -public final float MIN_SCALING = 0.1; -public final float MAX_SCALING = 15.0; +public final float MIN_SCALING = 0.01; +public final float MAX_SCALING = 30.0; RShape vectorShape = null; String vectorFilename = null; @@ -489,8 +498,6 @@ static int pathLengthHighPassCutoff = 0; static final Integer PATH_LENGTH_HIGHPASS_CUTOFF_MAX = 10000; static final Integer PATH_LENGTH_HIGHPASS_CUTOFF_MIN = 0; -//Capture liveCamera; -//JMyron liveCamera; BlobDetector blob_detector; int liveSimplification = 5; int blurValue = 1; @@ -505,20 +512,16 @@ String shapeSavePath = "../../savedcaptures/"; String shapeSavePrefix = "shape-"; String shapeSaveExtension = ".svg"; -//boolean displayGamepadOverlay = false; -//PImage yButtonImage = null; -//PImage xButtonImage = null; -//PImage aButtonImage = null; -//PImage bButtonImage = null; -// -//PImage dpadXImage = null; -//PImage dpadYImage = null; +String filePath = null; + +static PApplet parentPapplet = null; void setup() { println("Running polargraph controller"); frame.setResizable(true); initLogging(); + parentPapplet = this; initImages(); @@ -535,6 +538,7 @@ void setup() } loadFromPropertiesFile(); + size(windowWidth, windowHeight, JAVA2D ); this.cp5 = new ControlP5(this); initTabs(); @@ -580,7 +584,6 @@ void setup() currentMode = MODE_BEGIN; preLoadCommandQueue(); - size(windowWidth, windowHeight, JAVA2D ); changeTab(TAB_NAME_INPUT, TAB_NAME_INPUT); addEventListeners(); @@ -1224,34 +1227,32 @@ void controlEvent(ControlEvent controlEvent) { if (controlEvent.isTab()) { - if (controlEvent.tab().name() == getCurrentTab()) + if (controlEvent.tab().getName() == getCurrentTab()) { // already here. println("Already here."); } else { - changeTab(currentTab, controlEvent.tab().name()); + changeTab(currentTab, controlEvent.tab().getName()); } } else if(controlEvent.isGroup()) { - print("got an event from "+controlEvent.group().name()+"\t"); + print("got an event from "+controlEvent.group().getName()+"\t"); // checkbox uses arrayValue to store the state of // individual checkbox-items. usage: - for (int i=0; i allCommands = new ArrayList(realtimeCommandQueue); allCommands.addAll(commandQueue); String[] list = (String[]) allCommands.toArray(new String[0]); - saveStrings(savePath, list); + saveStrings(filePath, list); println("Completed queue export, " + list.length + " commands exported."); } } } + +void fileSelected(File selection) { + if (selection == null) { + println("Window was closed or the user hit cancel."); + filePath = null; + } else { + println("User selected " + selection.getAbsolutePath()); + filePath = selection.getAbsolutePath(); + } +} + + void importQueueFromFile() { commandQueue.clear(); - String loadPath = selectInput(); - if (loadPath == null) + selectInput("Select file to import queue from", "fileSelected"); + if (filePath == null) { // nothing selected println("No input file was selected."); } else { - println("Input file: " + loadPath); - String commands[] = loadStrings(loadPath); + println("Input file: " + filePath); + String commands[] = loadStrings(filePath); // List list = Arrays commandQueue.addAll(Arrays.asList(commands)); println("Completed queue import, " + commandQueue.size() + " commands found."); @@ -1874,17 +1890,17 @@ void importQueueFromFile() String importTextToWriteFromFile() { - String loadPath = selectInput(); + selectInput("Select the text file to load the text from:", "fileSelected"); String result = ""; - if (loadPath == null) + if (filePath == null) { // nothing selected println("No input file was selected."); } else { - println("Input file: " + loadPath); - List rows = java.util.Arrays.asList(loadStrings(loadPath)); + println("Input file: " + filePath); + List rows = java.util.Arrays.asList(loadStrings(filePath)); StringBuilder sb = new StringBuilder(200); for (String row : rows) { @@ -3063,10 +3079,12 @@ float getPixelScalingOverGridSize() { return pixelScalingOverGridSize; } + void setPixelScalingOverGridSize(float scaling) { pixelScalingOverGridSize = scaling; } + int getDensityPreviewStyle() { return densityPreviewStyle; @@ -3076,14 +3094,17 @@ Integer getBaudRate() { return baudRate; } + boolean isUseWindowedConsole() { return this.useWindowedConsole; } + void setUseWindowedConsole(boolean use) { this.useWindowedConsole = use; } + void initLogging() { try @@ -3094,21 +3115,22 @@ void initLogging() // logger.addHandler(fileHandler); // logger.setLevel(Level.INFO); // logger.info("Hello"); - if (isUseWindowedConsole()) - { - console = new Console(); - } - else - { - console.close(); - console = null; - } +// if (isUseWindowedConsole()) +// { +// console = new Console(); +// } +// else +// { +// console.close(); +// console = null; +// } } catch(Exception e) { println("Exception setting up logger: " + e.getMessage()); } } + void initImages() { // try diff --git a/tabSetup.pde b/tabSetup.pde index 67f6ac6..3d62dec 100644 --- a/tabSetup.pde +++ b/tabSetup.pde @@ -1,6 +1,6 @@ /** Polargraph controller - Copyright Sandy Noble 2012. + Copyright Sandy Noble 2015. This file is part of Polargraph Controller. @@ -24,7 +24,7 @@ sandy.noble@gmail.com http://www.polargraph.co.uk/ - http://code.google.com/p/polargraph/ + https://github.com/euphy/polargraphcontroller */ Set getPanelsForTab(String tabName) @@ -83,25 +83,25 @@ List buildTabNames() void initTabs() { - cp5.tab(TAB_NAME_INPUT).setLabel(TAB_LABEL_INPUT); - cp5.tab(TAB_NAME_INPUT).activateEvent(true); - cp5.tab(TAB_NAME_INPUT).setId(1); + cp5.getTab(TAB_NAME_INPUT).setLabel(TAB_LABEL_INPUT); + cp5.getTab(TAB_NAME_INPUT).activateEvent(true); + cp5.getTab(TAB_NAME_INPUT).setId(1); - cp5.tab(TAB_NAME_DETAILS).setLabel(TAB_LABEL_DETAILS); - cp5.tab(TAB_NAME_DETAILS).activateEvent(true); - cp5.tab(TAB_NAME_DETAILS).setId(2); + cp5.getTab(TAB_NAME_DETAILS).setLabel(TAB_LABEL_DETAILS); + cp5.getTab(TAB_NAME_DETAILS).activateEvent(true); + cp5.getTab(TAB_NAME_DETAILS).setId(2); - cp5.tab(TAB_NAME_ROVING).setLabel(TAB_LABEL_ROVING); - cp5.tab(TAB_NAME_ROVING).activateEvent(true); - cp5.tab(TAB_NAME_ROVING).setId(3); + cp5.getTab(TAB_NAME_ROVING).setLabel(TAB_LABEL_ROVING); + cp5.getTab(TAB_NAME_ROVING).activateEvent(true); + cp5.getTab(TAB_NAME_ROVING).setId(3); - cp5.tab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE); - cp5.tab(TAB_NAME_TRACE).activateEvent(true); - cp5.tab(TAB_NAME_TRACE).setId(4); + cp5.getTab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE); + cp5.getTab(TAB_NAME_TRACE).activateEvent(true); + cp5.getTab(TAB_NAME_TRACE).setId(4); - cp5.tab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE); - cp5.tab(TAB_NAME_QUEUE).activateEvent(true); - cp5.tab(TAB_NAME_QUEUE).setId(5); + cp5.getTab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE); + cp5.getTab(TAB_NAME_QUEUE).activateEvent(true); + cp5.getTab(TAB_NAME_QUEUE).setId(5); } public Set buildPanelNames()