From 0ad49da0017d9c678cf81229061072103aaab2da Mon Sep 17 00:00:00 2001 From: 61616 Date: Wed, 18 May 2022 17:08:14 -0400 Subject: [PATCH] 0.2.1.0 - base changes and clock stuff --- B12NumbersV3/B12Base.pde | 54 +++---- B12NumbersV3/B12NumbersV3.pde | 25 ++-- B12NumbersV3/B12TimeAll.pde | 64 -------- B12NumbersV3/{guiButton.pde => Button.pde} | 1 + .../{guiB12Expression.pde => Calculator.pde} | 140 +++++++++++++++++- B12NumbersV3/Clock.pde | 78 ++++++++++ B12NumbersV3/ClockApp.pde | 97 ++++++++++++ B12NumbersV3/TimeDisplay.pde | 84 +++++++++++ B12NumbersV3/guiCalculator.pde | 18 --- B12NumbersV3/guiMathDisplay.pde | 24 --- B12NumbersV3/guiMathPad.pde | 92 ------------ B12NumbersV3/zchangelog.pde | 6 +- 12 files changed, 449 insertions(+), 234 deletions(-) rename B12NumbersV3/{guiButton.pde => Button.pde} (97%) rename B12NumbersV3/{guiB12Expression.pde => Calculator.pde} (51%) create mode 100644 B12NumbersV3/Clock.pde create mode 100644 B12NumbersV3/ClockApp.pde create mode 100644 B12NumbersV3/TimeDisplay.pde delete mode 100644 B12NumbersV3/guiCalculator.pde delete mode 100644 B12NumbersV3/guiMathDisplay.pde delete mode 100644 B12NumbersV3/guiMathPad.pde diff --git a/B12NumbersV3/B12Base.pde b/B12NumbersV3/B12Base.pde index c72ce68..dce5a25 100644 --- a/B12NumbersV3/B12Base.pde +++ b/B12NumbersV3/B12Base.pde @@ -24,8 +24,8 @@ class B12Digit implements Number{ } // SETTERS - B12Digit setRefPos(PVector _refPos){ refPos = _refPos; return this;} - B12Digit setRefPos(float _x, float _y){ refPos = new PVector(_x,_y); return this;} + B12Digit setPos(PVector _refPos){ refPos = _refPos; return this;} + B12Digit setPos(float _x, float _y){ refPos = new PVector(_x,_y); return this;} B12Digit setValue(int _value){ value = byte(_value); return this;} // GETTERS @@ -123,7 +123,7 @@ class B12Digit implements Number{ class B12Int implements Number { - private ArrayList digits; + private B12Digit[] digits; private int value; private PVector pos; private boolean arrayLoaded; @@ -144,6 +144,11 @@ class B12Int implements Number { int getValue(){ return value; } PVector getPos(){ return pos; } B12Float toFloat(){return new B12Float(float(value)); } + B12Digit[] getDigits(){ + loadArray(); //<>// + B12Digit[] out = digits; + return out; + } // SETTERS // B12Int setValue(int _value){ value = _value; arrayLoaded = false; return this;} @@ -161,21 +166,21 @@ class B12Int implements Number { if(!inPosition){ positionDigits(); } pushMatrix(); translate(pos.x,pos.y); - for(int i = 0; i < digits.size(); i++){ - digits.get(i).display(); + for(int i = 0; i < digits.length; i++){ + digits[i].display(); } popMatrix(); } private void positionDigits(){ if(mode == LEFT || mode == DECIMAL){ - for(int i = 0; i < digits.size(); i++){ - digits.get(i).setRefPos((-12 * (i+1)), 0); + for(int i = 0; i < digits.length; i++){ + digits[i].setPos((-12 * (i+1)), 0); } }else if(mode == RIGHT){ int count = 0; - for(int i = digits.size() - 1; i >= 0; i--){ - digits.get(count).setRefPos((12 * i) + 3, 0); + for(int i = digits.length - 1; i >= 0; i--){ + digits[count].setPos((12 * i) + 3, 0); count++; } } @@ -183,23 +188,23 @@ class B12Int implements Number { } private void loadArray(){ - digits = new ArrayList(); + digits = new B12Digit[0]; int mval = abs(value); - if(mval == 0){ digits.add(new B12Digit(0)); } + if(mval == 0){ digits = (B12Digit[])append(digits, new B12Digit(0)); } while(mval != 0){ if(mval < 12){ - digits.add(new B12Digit(mval)); + digits = (B12Digit[])append(digits, new B12Digit(mval)); mval = 0; }else{ - digits.add(new B12Digit(mval % 12)); + digits = (B12Digit[])append(digits, new B12Digit(mval % 12)); mval /= 12; } } - if(digits.size() < minLen){ - digits.add(new B12Digit(0)); + if(digits.length < minLen){ + digits = (B12Digit[])append(digits, new B12Digit(0)); } if(value < 0){ - digits.add(new B12Digit('-')); + digits = (B12Digit[])append(digits, new B12Digit('-')); } arrayLoaded = true; @@ -210,7 +215,6 @@ class B12Int implements Number { class B12Float implements Number{ - //private ArrayList digits; private B12Digit[] digits; private float value; private PVector pos; @@ -282,38 +286,38 @@ class B12Float implements Number{ if(mode == LEFT){ for(int i = 0; i < pointPlace; i++){ curPos += -12; - digits[i].setRefPos(curPos, 0); + digits[i].setPos(curPos, 0); count++; } curPos += -8; - digits[count].setRefPos(curPos, 0); + digits[count].setPos(curPos, 0); count++; curPos += -6; - digits[count].setRefPos(curPos, 0); + digits[count].setPos(curPos, 0); count++; for(int i = count; i < digits.length; i++){ curPos += -12; - digits[i].setRefPos(curPos, 0); + digits[i].setPos(curPos, 0); } }else if(mode == DECIMAL){ curPos = -5; - digits[pointPlace].setRefPos(curPos,0); + digits[pointPlace].setPos(curPos,0); curPos += -2; for(int i = pointPlace - 1; i >= 0; i--){ curPos += 12; - digits[i].setRefPos(curPos,0); + digits[i].setPos(curPos,0); } curPos = -2; for(int i = pointPlace + 1; i < digits.length; i++){ curPos += -12; - digits[i].setRefPos(curPos,0); + digits[i].setPos(curPos,0); } }else if(mode == RIGHT){ for(int i = digits.length - 1; i >= 0; i--){ - digits[count].setRefPos((12 * i) + 3, 0); + digits[count].setPos((12 * i) + 3, 0); count++; } } diff --git a/B12NumbersV3/B12NumbersV3.pde b/B12NumbersV3/B12NumbersV3.pde index 131aa36..71353b0 100644 --- a/B12NumbersV3/B12NumbersV3.pde +++ b/B12NumbersV3/B12NumbersV3.pde @@ -9,7 +9,10 @@ MouseHandler mh; // Mouse event handler B12Expression ex; Calculator calc; + +//ClockApp ca; Clock clock; + Button mode; Button changeTime; STime48 time; @@ -17,12 +20,14 @@ STime48 time; void setup(){ - size(800,800); + size(800,800); //<>// offset = new PVector(width/2, height/2); time = new STime48(); mh = new MouseHandler(new MouseData(offset, scale)); ex = new B12Expression(); + //ca = new ClockApp(mh, time).setPos(-43,0); + clock = new Clock(mh, time); calc = new Calculator(mh, ex); mode = new Button(mh).setPos(new PVector(-20,-100), new PVector(40,20)).setRadius(2).setColor(#8B687F).autoHighlight().setText("Mode").setFunction(new MethodRelay(this, "changeMode")); @@ -36,14 +41,16 @@ void draw(){ mh.frameUpdate(offset, scale); stroke(0); strokeWeight(1); - //crossMark(); + crossMark(); translate(offset.x,offset.y); scale(scale); - if(calc != null) calc.display(); - if(clock != null) clock.display(); - if(changeTime != null) changeTime.display(); - mode.display(); + //if(calc != null) calc.display(); + //if(clock != null) clock.display(); + //if(changeTime != null) changeTime.display(); + //mode.display(); + + clock.display(); } @@ -63,14 +70,14 @@ void call(String _call){ void changeMode(){ if(calc == null){ - clock = null; + //clock = null; changeTime = null; calc = new Calculator(mh, ex); return; } calc = null; - clock = new Clock(time).setPos(new PVector(30,0)); - changeTime = new Button(mh).setPos(new PVector(-40,-60), new PVector(80,20)).setRadius(2).setColor(#B096A7).autoHighlight().setText("Change Time").setFunction(new MethodRelay(clock, "setTime", Time48.class)); + //clock = new Clock(time).setPos(new PVector(30,0)); + //changeTime = new Button(mh).setPos(new PVector(-40,-60), new PVector(80,20)).setRadius(2).setColor(#B096A7).autoHighlight().setText("Change Time").setFunction(new MethodRelay(clock, "setTime", Time48.class)); changeTime.setData(new Time48(12,0,0)); Runtime.getRuntime().gc(); } diff --git a/B12NumbersV3/B12TimeAll.pde b/B12NumbersV3/B12TimeAll.pde index 2e19db2..1b65a07 100644 --- a/B12NumbersV3/B12TimeAll.pde +++ b/B12NumbersV3/B12TimeAll.pde @@ -146,67 +146,3 @@ class STime48 extends Time48{ } } } - - - - -class Clock { - PVector pos; - STime48 t48; - B12Int hours; - B12Int minutes; - B12Int seconds; - B12Digit sep; // TODO Just deprecated B12Char. Refactor to single array of B12Digits? - int tmillis; - - Clock(STime48 _t48) { - pos = new PVector(0, 0); - t48 = _t48; - hours = new B12Int(t48.hours()); - minutes = new B12Int(t48.mins()); - seconds = new B12Int(t48.secs()); - sep = new B12Digit(':'); // Seperation character between time columns - - hours.setMinLen(2); - minutes.setMinLen(2); // Format all the ints to show a 0 in the 12s column if they are less than 12 - seconds.setMinLen(2); - } - - // GETTERS and SETTERS // - PVector getPos() { return pos; } - Clock setPos(PVector _pos) { pos = _pos.copy(); return this;} - Clock setPos(float _x, float _y) { pos = new PVector(_x, _y);return this;} - - Clock setTime(Time48 _time) { t48.setTime(_time); return this;} - Clock resetTime() { t48.setTime(new Time48(0)); return this;} - - void display() { - if (t48.synced()) { - // Time - hours.setValue(t48.hours()); - minutes.setValue(t48.mins()); - seconds.setValue(t48.secs()); - - // Position - hours.setPos(-64, 0); - minutes.setPos(-32, 0); - seconds.setPos(0, 0); - B12Digit c1 = new B12Digit(':'); - B12Digit c2 = new B12Digit(':'); - c1.setRefPos(-34, 0); - c2.setRefPos(-66, 0); - - // Display - pushMatrix(); - translate(pos.x, pos.y); - hours.display(); - c2.display(); - minutes.display(); - c1.display(); - seconds.display(); - popMatrix(); - } else { - text("fetching current time", pos.x, pos.y); - } - } -} diff --git a/B12NumbersV3/guiButton.pde b/B12NumbersV3/Button.pde similarity index 97% rename from B12NumbersV3/guiButton.pde rename to B12NumbersV3/Button.pde index eedea93..243a48f 100644 --- a/B12NumbersV3/guiButton.pde +++ b/B12NumbersV3/Button.pde @@ -96,6 +96,7 @@ class Button{ if(mouseOver && mouseButton == LEFT){ //println("clicked" + this); function.execute(data); + mouseOver = false; // Very important. Without this a button retains its mouseOver status forever if it stops being displayed } } diff --git a/B12NumbersV3/guiB12Expression.pde b/B12NumbersV3/Calculator.pde similarity index 51% rename from B12NumbersV3/guiB12Expression.pde rename to B12NumbersV3/Calculator.pde index 522f84e..3c540b9 100644 --- a/B12NumbersV3/guiB12Expression.pde +++ b/B12NumbersV3/Calculator.pde @@ -1,3 +1,22 @@ +class Calculator{ + B12Expression ex; + MathPad m; + MathDisplay d; + + Calculator(MouseHandler _mh, B12Expression _ex){ + ex = _ex; + m = new MathPad(_mh, ex).setPos(new PVector(-40,0)); + d = new MathDisplay(ex); + } + + void display(){ + rect(85,-22,1,14); + d.setPos(new PVector(83,-10)); + m.display(); + d.display(); + } +} + class B12Expression { private B12Digit[] expression; @@ -35,7 +54,7 @@ class B12Expression { } void evaluate(){ - String evalString = parseDigits(); //<>// + String evalString = parseDigits(); Expression exp = new ExpressionBuilder(evalString).build(); expression = new B12Float((float)exp.evaluate()).setPlaces(12).getDigits(); println(exp.evaluate()); @@ -152,3 +171,122 @@ class B12Expression { } } } + +class MathDisplay { + PVector pos; + B12Expression ex; + + MathDisplay(B12Expression _ex){ + ex = _ex; + pos = new PVector(0,0); + } + + PVector getPos(){ return pos; } + MathDisplay setPos(PVector _pos){ pos = _pos; return this;} + + void display(){ + pushMatrix(); + translate(pos.x,pos.y); + int count = 0; + for(int i = ex.length() - 1; i >= 0 ; i--){ + ex.getDigit(i).setPos((-12 * (count+1)), 0); + ex.getDigit(i).display(); + count++; + } + popMatrix(); + } +} + + + +class MathPad{ + private B12Expression ex; + private MouseHandler mh; + private Button[] buttons; + private PVector pos; + + MathPad(MouseHandler _mh, B12Expression _ex){ + ex = _ex; + mh = _mh; + pos = new PVector(0,0); + buttons = new Button[0]; + initialize(); + } + + // GETTERS AND SETTERS // + PVector getPos(){return pos;} + MathPad setPos(PVector _pos){ + pos = _pos.copy(); + initialize(); + return this; + } + + + void initialize(){ + buttons = new Button[0]; + // Create numpad buttons + for(int i = 0; i < 12; i++){ + /* Button position must contain it's absolute position relative to sketch 0,0 for mouseOver to work. + This means we cannot translate and traw buttons, we mumst factor the parents position into the + absolute position of the button */ + // x = pos.x + (width + gap) * (i%cols) + // y = pos.y + (height + gap) * b2rows - (height + gap) * row + PVector bPos = new PVector(pos.x + 22 * int(i%4),pos.y + 22 * 3 - 22 * floor(i/4)); + buttons = (Button[])append(buttons, new B12Button(mh ,new B12Digit(i)).setPos(bPos).setDim(new PVector(20,20)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + } + // Create other buttons + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('(')).setPos(new PVector(pos.x,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit(')')).setPos(new PVector(pos.x + 22,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('+')).setPos(new PVector(pos.x + 22*2,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('-')).setPos(new PVector(pos.x + 22*3,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('*')).setPos(new PVector(pos.x + 22*4,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('/')).setPos(new PVector(pos.x + 22*4,pos.y + 22)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('.')).setPos(new PVector(pos.x + 22*4,pos.y + 22*2)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + buttons = (Button[])append(buttons, new Button(mh).setText("Enter").setPos(new PVector(pos.x + 22*4,pos.y + 22*3)).setDim(new PVector(42,20)).setFunction(new MethodRelay(this.ex, "evaluate")).setColor(220,150)); + buttons = (Button[])append(buttons, new Button(mh).setText("Cl").setPos(new PVector(pos.x + 22*5,pos.y + 22)).setDim(new PVector(20,42)).setFunction(new MethodRelay(this.ex, "clear")).setColor(220,150)); + buttons = (Button[])append(buttons, new Button(mh).setText("Del").setPos(new PVector(pos.x + 22*5,pos.y)).setDim(new PVector(20,20)).setFunction(new MethodRelay(this.ex, "delete")).setColor(220,150)); + } + + void addChar(B12Digit _digit){ + ex.addChar(_digit); + } + + void display(){ + for(int i = 0; i < buttons.length; i++){ + buttons[i].display(); + } + } +} + + + +class B12Button extends Button{ + B12Digit digit; + + B12Button(MouseHandler _mh, B12Digit _digit){ + super(_mh); + digit = _digit; + setData(_digit); + } + + // GETTERS AND SETTERS // + B12Digit getDigit(){ return digit; } + B12Button setDigit(B12Digit _digit){ digit = _digit; return this; } + + // Add drawing the B12Digit to the display method + @Override + void display(){ + super.display(); + + pushMatrix(); + + translate(super.pos.x,super.pos.y); + switch(super.mode){ + case CORNER: digit.setPos(super.dim.x/2 - 4, super.dim.y - 2); + } + + digit.display(); + + popMatrix(); + } +} diff --git a/B12NumbersV3/Clock.pde b/B12NumbersV3/Clock.pde new file mode 100644 index 0000000..b3d9d0e --- /dev/null +++ b/B12NumbersV3/Clock.pde @@ -0,0 +1,78 @@ +class Clock{ + PVector pos; + MouseHandler mh; + Button[] buttons; + Button setTimeButton; + boolean setTime; + int cursorPos; + STime48 time; + TimeDisplay td; + + Clock(MouseHandler _mh, STime48 _time){ + pos = new PVector(0,0); + mh = _mh; + time = _time; + td = new TimeDisplay(time); + setTime = false; + cursorPos = 0; + initialize(); + } + + PVector getPos(){return pos;} + + Clock setPos(PVector _pos){pos = _pos.copy(); return this;} + Clock setPos(float x, float y){pos = new PVector(x,y); initialize(); return this;} + + void initialize(){ + buttons = new Button[0]; + td.setPos(pos.x,pos.y); + // Create numpad buttons + for(int i = 0; i < 12; i++){ + /* Button position must contain it's absolute position relative to sketch 0,0 for mouseOver to work. + This means we cannot translate and traw buttons, we mumst factor the parents position into the + absolute position of the button */ + // x = pos.x + (width + gap) * (i%cols) + // y = pos.y + (height + gap) * b2rows - (height + gap) * row + PVector bPos = new PVector(pos.x + 22 * int(i%4),pos.y + 22 * 2 - 22 * floor(i/4)); + buttons = (Button[])append(buttons, new B12Button(mh ,new B12Digit(i)).setPos(bPos).setDim(new PVector(20,20)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + } + // Create other buttons + buttons = (Button[])append(buttons, new Button(mh).setText("Set").setPos(new PVector(pos.x,pos.y + 22*3)).setDim(new PVector(42,20)).setFunction(new MethodRelay(this, "lockTime")).setColor(220,150)); + buttons = (Button[])append(buttons, new Button(mh).setText("Clear").setPos(new PVector(pos.x + 22*2,pos.y + 22*3)).setDim(new PVector(42,20)).setFunction(new MethodRelay(this, "clearTime")).setColor(220,150)); + + setTimeButton = new Button(mh).setText("Set Time").setPos(new PVector(pos.x+21,pos.y)).setDim(new PVector(42,13)).setFunction(new MethodRelay(this, "triggerSetTime")).setColor(220,150); + + } + /* + void addChar(B12Digit digit){ + switch(cursorPos){ + } + cursorPos + }*/ + + void clearTime(){ + td.setTime(new Time48(0)); + } + + void lockTime(){ + time.setTime(td.getTime()); + td.setTime(time); + setTime = false; + } + + void triggerSetTime(){ + clearTime(); + setTime = true; + } + + void display(){ + if(setTime){ + for(int i = 0; i < buttons.length; i++){ + buttons[i].display(); + } + }else{ + setTimeButton.display(); + } + td.display(); + } +} diff --git a/B12NumbersV3/ClockApp.pde b/B12NumbersV3/ClockApp.pde new file mode 100644 index 0000000..1916fcf --- /dev/null +++ b/B12NumbersV3/ClockApp.pde @@ -0,0 +1,97 @@ +class ClockApp{ + PVector pos; + MouseHandler mh; + Button[] buttons; + Button modeButton; + Button setTimeButton; + int mode; + boolean setTime; + Time48 time; + TimeDisplay td; + + ClockApp(MouseHandler _mh, Time48 _time){ + pos = new PVector(0,0); + mh = _mh; + time = _time; + td = new TimeDisplay(time); + mode = 0; + initialize(); + } + + PVector getPos(){return pos;} + + ClockApp setPos(PVector _pos){pos = _pos.copy(); return this;} + ClockApp setPos(float x, float y){pos = new PVector(x,y); initialize(); return this;} + ClockApp setMode(int _mode){ + if(_mode == -1){setTime = true; return this;} + mode = _mode; + initialize(); + return this; + } + + void initialize(){ + buttons = new Button[0]; + td.setPos(43,-4); + + if(mode == 0){ + setTimeButton = new Button(mh).setText("Set Time").setPos(new PVector(pos.x+21,pos.y)).setDim(new PVector(42,13)).setFunction(new MethodRelay(this, "setMode", int.class)).setData(-1).setColor(220,150); + + // Create numpad buttons + for(int i = 0; i < 12; i++){ + /* Button position must contain it's absolute position relative to sketch 0,0 for mouseOver to work. + This means we cannot translate and traw buttons, we mumst factor the parents position into the + absolute position of the button */ + // x = pos.x + (width + gap) * (i%cols) + // y = pos.y + (height + gap) * b2rows - (height + gap) * row + PVector bPos = new PVector(pos.x + 22 * int(i%4),pos.y + 22 * 2 - 22 * floor(i/4)); + buttons = (Button[])append(buttons, new B12Button(mh ,new B12Digit(i)).setPos(bPos).setDim(new PVector(20,20)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); + } + // Create other buttons + buttons = (Button[])append(buttons, new Button(mh).setText("Set").setPos(new PVector(pos.x,pos.y + 22*3)).setDim(new PVector(42,20)).setFunction(new MethodRelay(this, "evaluate")).setColor(220,150)); + buttons = (Button[])append(buttons, new Button(mh).setText("Clear").setPos(new PVector(pos.x + 22*2,pos.y + 22*3)).setDim(new PVector(42,20)).setFunction(new MethodRelay(this, "clear")).setColor(220,150)); + } + else if(mode == 1){ + } + + } + + + void display(){ + switch(mode){ + case 0: + clock(); break; + case 1: + stopwatch(); break; + case 2: + timer(); break; + case 3: + setTime(); break; + } + } + + private void setTime(){ + for(int i = 0; i < buttons.length; i++){ + buttons[i].display(); + } + td.display(); + } + + private void clock(){ + td.display(); + if(!setTime){ + setTimeButton.display(); + return; + } + + for(int i = 0; i < buttons.length; i++){ + buttons[i].display(); + } + } + + private void timer(){ + } + + private void stopwatch(){ + + } +} diff --git a/B12NumbersV3/TimeDisplay.pde b/B12NumbersV3/TimeDisplay.pde new file mode 100644 index 0000000..685c0f7 --- /dev/null +++ b/B12NumbersV3/TimeDisplay.pde @@ -0,0 +1,84 @@ +class TimeDisplay { + PVector pos; + Time48 t48; + B12Int hours; + B12Int minutes; + B12Int seconds; + B12Digit[] digits; + int tmillis; + + TimeDisplay(Time48 _t48) { + pos = new PVector(0, 0); + t48 = _t48; + hours = new B12Int(t48.hours()); + minutes = new B12Int(t48.mins()); + seconds = new B12Int(t48.secs()); + //sep = new B12Digit(':'); // Seperation character between time columns + + hours.setMinLen(2); + minutes.setMinLen(2); // Format all the ints to show a 0 in the 12s column if they are less than 12 + seconds.setMinLen(2); + } + + // GETTERS and SETTERS // + PVector getPos() { return pos; } + Time48 getTime(){return t48;} + TimeDisplay setPos(PVector _pos) { pos = _pos.copy(); return this;} + TimeDisplay setPos(float _x, float _y) { pos = new PVector(_x, _y);return this;} + + TimeDisplay setTime(Time48 _time) { + if(_time.getClass() == STime48.class){ + t48 = _time; + return this; + } + t48 = _time.copy(); + return this; + } + + TimeDisplay resetTime(){ // TODO test this. does it work? + if(t48.getClass() != STime48.class){ println("Cannot reset a static time"); return this;} + t48 = ((STime48)t48).setTime(new Time48(0)); + return this; + } + + void display() { + digits = new B12Digit[0]; + if(t48.getClass() == STime48.class){ + while(!((STime48)t48).synced()){text("fetching current time", pos.x, pos.y);} + } + // Time + hours.setValue(t48.hours()); + minutes.setValue(t48.mins()); + seconds.setValue(t48.secs()); + + digits = (B12Digit[])concat(digits,seconds.getDigits()); + digits = (B12Digit[])append(digits,new B12Digit(':')); + digits = (B12Digit[])concat(digits,minutes.getDigits()); + digits = (B12Digit[])append(digits,new B12Digit(':')); + digits = (B12Digit[])concat(digits,hours.getDigits()); + + for(int i = 0; i < digits.length; i++){ + digits[i].setPos(i*-13 + pos.x,pos.y).display(); + } + + // Position + /* + hours.setPos(-64, 0); + minutes.setPos(-32, 0); + seconds.setPos(0, 0); + B12Digit c1 = new B12Digit(':'); + B12Digit c2 = new B12Digit(':'); + c1.setPos(-34, 0); + c2.setPos(-66, 0); + + // Display + pushMatrix(); + translate(pos.x, pos.y); + hours.display(); + c2.display(); + minutes.display(); + c1.display(); + seconds.display(); + popMatrix();*/ + } +} diff --git a/B12NumbersV3/guiCalculator.pde b/B12NumbersV3/guiCalculator.pde deleted file mode 100644 index a70c384..0000000 --- a/B12NumbersV3/guiCalculator.pde +++ /dev/null @@ -1,18 +0,0 @@ -class Calculator{ - B12Expression ex; - MathPad m; - MathDisplay d; - - Calculator(MouseHandler _mh, B12Expression _ex){ - ex = _ex; - m = new MathPad(_mh, ex).setPos(new PVector(-40,0)); - d = new MathDisplay(ex); - } - - void display(){ - rect(85,-22,1,14); - d.setPos(new PVector(83,-10)); - m.display(); - d.display(); - } -} diff --git a/B12NumbersV3/guiMathDisplay.pde b/B12NumbersV3/guiMathDisplay.pde deleted file mode 100644 index ab8256f..0000000 --- a/B12NumbersV3/guiMathDisplay.pde +++ /dev/null @@ -1,24 +0,0 @@ -class MathDisplay { - PVector pos; - B12Expression ex; - - MathDisplay(B12Expression _ex){ - ex = _ex; - pos = new PVector(0,0); - } - - PVector getPos(){ return pos; } - MathDisplay setPos(PVector _pos){ pos = _pos; return this;} - - void display(){ - pushMatrix(); - translate(pos.x,pos.y); - int count = 0; - for(int i = ex.length() - 1; i >= 0 ; i--){ - ex.getDigit(i).setRefPos((-12 * (count+1)), 0); - ex.getDigit(i).display(); - count++; - } - popMatrix(); - } -} diff --git a/B12NumbersV3/guiMathPad.pde b/B12NumbersV3/guiMathPad.pde deleted file mode 100644 index 99b98f4..0000000 --- a/B12NumbersV3/guiMathPad.pde +++ /dev/null @@ -1,92 +0,0 @@ - -class MathPad{ - private B12Expression ex; - private MouseHandler mh; - private Button[] buttons; - private PVector pos; - - MathPad(MouseHandler _mh, B12Expression _ex){ - ex = _ex; - mh = _mh; - pos = new PVector(0,0); - buttons = new Button[0]; - initialize(); - } - - // GETTERS AND SETTERS // - PVector getPos(){return pos;} - MathPad setPos(PVector _pos){ - pos = _pos.copy(); - initialize(); - return this; - } - - - void initialize(){ - buttons = new Button[0]; - // Create numpad buttons - for(int i = 0; i < 12; i++){ - /* Button position must contain it's absolute position relative to sketch 0,0 for mouseOver to work. - This means we cannot translate and traw buttons, we mumst factor the parents position into the - absolute position of the button */ - // x = pos.x + (width + gap) * (i%cols) - // y = pos.y + (height + gap) * b2rows - (height + gap) * row - PVector bPos = new PVector(pos.x + 22 * int(i%4),pos.y + 22 * 3 - 22 * floor(i/4)); - buttons = (Button[])append(buttons, new B12Button(mh ,new B12Digit(i)).setPos(bPos).setDim(new PVector(20,20)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - } - // Create other buttons - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('(')).setPos(new PVector(pos.x,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit(')')).setPos(new PVector(pos.x + 22,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('+')).setPos(new PVector(pos.x + 22*2,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('-')).setPos(new PVector(pos.x + 22*3,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('*')).setPos(new PVector(pos.x + 22*4,pos.y)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('/')).setPos(new PVector(pos.x + 22*4,pos.y + 22)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new B12Button(mh, new B12Digit('.')).setPos(new PVector(pos.x + 22*4,pos.y + 22*2)).setFunction(new MethodRelay(this, "addChar", B12Digit.class)).setColor(220,150)); - buttons = (Button[])append(buttons, new Button(mh).setText("Enter").setPos(new PVector(pos.x + 22*4,pos.y + 22*3)).setDim(new PVector(42,20)).setFunction(new MethodRelay(this.ex, "evaluate")).setColor(220,150)); - buttons = (Button[])append(buttons, new Button(mh).setText("Cl").setPos(new PVector(pos.x + 22*5,pos.y + 22)).setDim(new PVector(20,42)).setFunction(new MethodRelay(this.ex, "clear")).setColor(220,150)); - buttons = (Button[])append(buttons, new Button(mh).setText("Del").setPos(new PVector(pos.x + 22*5,pos.y)).setDim(new PVector(20,20)).setFunction(new MethodRelay(this.ex, "delete")).setColor(220,150)); - } - - void addChar(B12Digit _digit){ - ex.addChar(_digit); - } - - void display(){ - for(int i = 0; i < buttons.length; i++){ - buttons[i].display(); - } - } -} - - - -class B12Button extends Button{ - B12Digit digit; - - B12Button(MouseHandler _mh, B12Digit _digit){ - super(_mh); - digit = _digit; - setData(_digit); - } - - // GETTERS AND SETTERS // - B12Digit getDigit(){ return digit; } - B12Button setDigit(B12Digit _digit){ digit = _digit; return this; } - - // Add drawing the B12Digit to the display method - @Override - void display(){ - super.display(); - - pushMatrix(); - - translate(super.pos.x,super.pos.y); - switch(super.mode){ - case CORNER: digit.setRefPos(super.dim.x/2 - 4, super.dim.y - 2); - } - - digit.display(); - - popMatrix(); - } -} diff --git a/B12NumbersV3/zchangelog.pde b/B12NumbersV3/zchangelog.pde index e2153de..cf3e0ef 100644 --- a/B12NumbersV3/zchangelog.pde +++ b/B12NumbersV3/zchangelog.pde @@ -3,7 +3,7 @@ Beta version of a clock in base 12. by Nayan Sawyer started Mar 2022 - version 0.2.0.0 April 30 2022 + version 0.2.1.0 May 18 2022 Characters are a variation of Kaktovik Inupiaq numerals reversed and in base 12 instead of 20. I take no credit @@ -17,6 +17,10 @@ // MAYBE start clock widget structure // MAYBE add additional operations like power, log, and trig functions + changelog 0.2.1.0 + - Changes to the base code and the beginning of the clock + applications. File condensing (will be reversed) + changelog 0.2.0.0 - Evaluating expressions has been fully implemented using exp4j. Various things have been added to the base classes