diff --git a/bin/Control/Control.class b/bin/Control/Control.class deleted file mode 100644 index dc8fbca..0000000 Binary files a/bin/Control/Control.class and /dev/null differ diff --git a/bin/Control/IActions.class b/bin/Control/IActions.class deleted file mode 100644 index 366e3b7..0000000 Binary files a/bin/Control/IActions.class and /dev/null differ diff --git a/bin/Control/MyControlModel.class b/bin/Control/MyControlModel.class new file mode 100644 index 0000000..8aafdbe Binary files /dev/null and b/bin/Control/MyControlModel.class differ diff --git a/bin/Control/MyControlView.class b/bin/Control/MyControlView.class new file mode 100644 index 0000000..e547e2d Binary files /dev/null and b/bin/Control/MyControlView.class differ diff --git a/bin/Model/Backend/Microcontroller/RAM.class b/bin/Model/Backend/Microcontroller/RAM.class index 311c978..6f25dff 100644 Binary files a/bin/Model/Backend/Microcontroller/RAM.class and b/bin/Model/Backend/Microcontroller/RAM.class differ diff --git a/bin/Model/Backend/MyModel.class b/bin/Model/Backend/MyModel.class index 07c747f..639bf7f 100644 Binary files a/bin/Model/Backend/MyModel.class and b/bin/Model/Backend/MyModel.class differ diff --git a/bin/View/GUIMainFrame.class b/bin/View/GUIMainFrame.class index 70c3fea..b9bbc3e 100644 Binary files a/bin/View/GUIMainFrame.class and b/bin/View/GUIMainFrame.class differ diff --git a/bin/View/GUIMenuBar.class b/bin/View/GUIMenuBar.class index 2953cd3..514865d 100644 Binary files a/bin/View/GUIMenuBar.class and b/bin/View/GUIMenuBar.class differ diff --git a/bin/View/GUIPorts.class b/bin/View/GUIPorts.class index 5f0649a..d9a9b19 100644 Binary files a/bin/View/GUIPorts.class and b/bin/View/GUIPorts.class differ diff --git a/bin/View/GUITestFileTable.class b/bin/View/GUITestFileTable.class index 6d59def..15257ba 100644 Binary files a/bin/View/GUITestFileTable.class and b/bin/View/GUITestFileTable.class differ diff --git a/bin/View/MyView.class b/bin/View/MyView.class index df1e688..d4d2793 100644 Binary files a/bin/View/MyView.class and b/bin/View/MyView.class differ diff --git a/src/Control/Control.java b/src/Control/Control.java deleted file mode 100644 index c1d19da..0000000 --- a/src/Control/Control.java +++ /dev/null @@ -1,118 +0,0 @@ -package Control; - -import java.util.ArrayList; - -import Model.Backend.MyModel; -import View.MyView; - -public class Control implements IActions { - - MyModel oModel; - MyView oView; - //put Objects to manipulate here - - public Control(MyModel model, MyView view) { - oModel = model; - oView = view; - } - - public void getWRegister(int iValue) { - - } - - public void getPCintern(int iValue) { - - } - - public void getPCLATH(int iValue) { - - } - - public void getPCL(int iValue) { - - } - - public void getFSR(int iValue) { - - } - - public void getStatus(int iValue) { - - } - - public void getOption(int iValue) { - - } - - public void getPrescaler(int iValue) { - - } - - public void getTMR0(int iValue) { - - } - - - - public void setPortAPinXToY(int iPort, boolean bEnabled) { - - } - - public void setPortBPinXToY(int iPort, boolean bEnabled) { - - } - - public void setPortATrisXToY(int iPort, boolean bEnabled) { - - } - - public void setPortBTrisXToY(int iPort, boolean bEnabled) { - - } - - public void getRam(int[][] aiiRam) { - - } - - - public void startProgram() { - - } - - public void stepProgram() { - - } - - public void pauseProgram() { - - } - - public void resetProgram() { - - } - - public void controlWDT(boolean bEnabled) { - - } - - public void setQuarz(int iElement) { - - } - - - public void loadFileToEEPROM(ArrayList oData) { - - } - - public void saveSimulatorState() { - - } - - public void loadSimulatorState() { - - } - - public void exitSimulator() { - - } -} diff --git a/src/Control/IActions.java b/src/Control/IActions.java deleted file mode 100644 index 8fdbbc3..0000000 --- a/src/Control/IActions.java +++ /dev/null @@ -1,58 +0,0 @@ -package Control; - -import java.util.ArrayList; - -public interface IActions { - - public void getWRegister(int iValue); - - public void getPCintern(int iValue); - - public void getPCLATH(int iValue); - - public void getPCL(int iValue); - - public void getFSR(int iValue); - - public void getStatus(int iValue); - - public void getOption(int iValue); - - public void getPrescaler(int iValue); - - public void getTMR0(int iValue); - - - - public void setPortAPinXToY(int iPort, boolean bEnabled); - - public void setPortBPinXToY(int iPort, boolean bEnabled); - - public void setPortATrisXToY(int iPort, boolean bEnabled); - - public void setPortBTrisXToY(int iPort, boolean bEnabled); - - public void getRam(int[][] aiiRam); - - - public void startProgram(); - - public void stepProgram(); - - public void pauseProgram(); - - public void resetProgram(); - - public void controlWDT(boolean bEnabled); - - public void setQuarz(int iElement); - - - public void loadFileToEEPROM(ArrayList oData); - - public void saveSimulatorState(); - - public void loadSimulatorState(); - - public void exitSimulator(); -} diff --git a/src/Control/MyControlModel.java b/src/Control/MyControlModel.java new file mode 100644 index 0000000..49bc542 --- /dev/null +++ b/src/Control/MyControlModel.java @@ -0,0 +1,119 @@ +package Control; + +import java.util.ArrayList; + +import Model.Backend.MyModel; +import View.MyView; + +public class MyControlModel { + + MyModel oModel; + MyView oView; + //put Objects to manipulate here + + public MyControlModel(MyModel model, MyView view) { + oModel = model; + oView = view; + } + + public void setWRegisterModel(int iValue) { + + } + + public void setPCinternModel(int iValue) { + + } + + public void setPCLATHModel(int iValue) { + + } + + public void setPCLModel(int iValue) { + + } + + public void setFSRModel(int iValue) { + + } + + public void setStatusModel(int iValue) { + + } + + public void setOptionModel(int iValue) { + + } + + public void setPrescalerModel(int iValue) { + + } + + public void setTMR0Model(int iValue) { + + } + + + + public void setPortAPinXToYModel(int iPort, boolean bEnabled) { + + } + + public void setPortBPinXToYModel(int iPort, boolean bEnabled) { + + } + + public void setPortATrisXToYModel(int iPort, boolean bEnabled) { + + } + + public void setPortBTrisXToYModel(int iPort, boolean bEnabled) { + + } + + public void setRamModel(int[][] aiiRam) { + + } + + + + public void startProgramModel() { + + } + + public void stepProgramModel() { + + } + + public void pauseProgramModel() { + + } + + public void resetProgramModel() { + + } + + public void controlWDTModel(boolean bEnabled) { + + } + + public void setQuarzModel(int iElement) { + + } + + + public void loadFileToEEPROMModel(ArrayList oData) { + + } + + public void saveSimulatorStateModel() { + + } + + public void loadSimulatorStateModel() { + + } + + public void exitSimulatorModel() { + + } +} diff --git a/src/Control/MyControlView.java b/src/Control/MyControlView.java new file mode 100644 index 0000000..b65a43d --- /dev/null +++ b/src/Control/MyControlView.java @@ -0,0 +1,162 @@ +package Control; + +import java.util.ArrayList; + +import Model.Backend.MyModel; +import View.MyView; + +public class MyControlView { + + MyView oMyView; + MyModel oMyModel; + + public MyControlView(MyView view, MyModel model) { + oMyView = view; + oMyModel = model; + } + + public void updateView() { + setRegistersView(); + setPortAView(); + setPortBView(); + setRamView(); + } + + /** + * Sets registers at gui to values from PIC. + */ + private void setRegistersView() { + + //Get values from pic + int[] aiValues = new int[9]; + aiValues[0] = oMyModel.getPIC().getRam().get_TMR0(); + aiValues[1] = oMyModel.getPIC().getRam().get_Programcounter(); + aiValues[2] = oMyModel.getPIC().getRam().get_STATUS(); + aiValues[3] = oMyModel.getPIC().getRam().get_PCLATH(); + aiValues[4] = oMyModel.getPIC().getRam().get_FSR(); + aiValues[5] = oMyModel.getPIC().getRam().get_PCL(); + aiValues[6] = oMyModel.getPIC().getRam().get_OPTION(); + if (oMyModel.getPIC().getRam().get_PSA()) { + aiValues[7] = oMyModel.getPIC().getRam().get_WDT_PrescalerRate(); + } else { + aiValues[7] = oMyModel.getPIC().getRam().get_TMR0_PrescalerRate(); + } + aiValues[8] = oMyModel.getPIC().get_WRegister(); + + //Fill gui element with gathered values + oMyView.getGUIRegister().setRegisters(aiValues); + } + + /** + * Sets detailed register-table values to values from PIC. + */ + public void setRegistersDetailed() { + + } + + /** + * + */ + public void setPortAView() { + + boolean[] abEnabled = new boolean[10]; + + abEnabled[0] = oMyModel.getPIC().getRam().get_TRISA0(); + abEnabled[1] = oMyModel.getPIC().getRam().get_TRISA1(); + abEnabled[2] = oMyModel.getPIC().getRam().get_TRISA2(); + abEnabled[3] = oMyModel.getPIC().getRam().get_TRISA3(); + abEnabled[4] = oMyModel.getPIC().getRam().get_TRISA4(); + + abEnabled[5] = true; + abEnabled[6] = true; + abEnabled[7] = true; + abEnabled[8] = true; + abEnabled[9] = true; + + oMyView.getGUIPorts().enableCheckboxesA(abEnabled); + } + + public void setPortBView() { + + boolean[] abEnabled = new boolean[10]; + + abEnabled[0] = oMyModel.getPIC().getRam().get_TRISB0(); + abEnabled[1] = oMyModel.getPIC().getRam().get_TRISB1(); + abEnabled[2] = oMyModel.getPIC().getRam().get_TRISB2(); + abEnabled[3] = oMyModel.getPIC().getRam().get_TRISB3(); + abEnabled[4] = oMyModel.getPIC().getRam().get_TRISB4(); + abEnabled[5] = oMyModel.getPIC().getRam().get_TRISB5(); + abEnabled[6] = oMyModel.getPIC().getRam().get_TRISB6(); + abEnabled[7] = oMyModel.getPIC().getRam().get_TRISB7(); + + abEnabled[8] = true; + abEnabled[9] = true; + abEnabled[10] = true; + abEnabled[11] = true; + abEnabled[12] = true; + abEnabled[13] = true; + abEnabled[14] = true; + abEnabled[15] = true; + + oMyView.getGUIPorts().enableCheckboxesA(abEnabled); + } + + public void setRamView() { + int[] aiData; + int[] aiBank0 = oMyModel.getPIC().getRam().get_Bank0(); + int[] aiBank1 = oMyModel.getPIC().getRam().get_Bank1(); + int iLenB0 = aiBank0.length; + int iLenB1 = aiBank1.length; + aiData = new int[iLenB0 + iLenB1]; + for (int i = 0; i < iLenB0; i++) { + aiData[i] = aiBank0[i]; + } + for (int i = iLenB0; i < (iLenB0 + iLenB1); i++) { + aiData[i] = aiBank1[i]; + } + oMyView.getGUIRamTable().setGUIRam(aiData); + } + + + + public void startProgramView() { + + } + + public void stepProgramView() { + + } + + public void pauseProgramView() { + + } + + public void resetProgramView() { + + } + + public void controlWDTView(boolean bEnabled) { + + } + + public void setQuarzView(int iElement) { + + } + + + public void loadFileToEEPROMView(ArrayList oData) { + + } + + public void saveSimulatorStateView() { + + } + + public void loadSimulatorStateView() { + + } + + public void exitSimulatorView() { + + } +} \ No newline at end of file diff --git a/src/Model/Backend/Microcontroller/RAM.java b/src/Model/Backend/Microcontroller/RAM.java index 47a595c..8f911e0 100755 --- a/src/Model/Backend/Microcontroller/RAM.java +++ b/src/Model/Backend/Microcontroller/RAM.java @@ -23,6 +23,9 @@ public class RAM { //Last programmcounter for function getLastLine in main. private int lastProgramcounter; + // + private int iPrescaledTMR0; + /** * Constructor of RAM * Initializes two banks as two int arrays of size 128. @@ -202,22 +205,36 @@ public class RAM { */ public synchronized void increment_TMR0() { int iValTMR0 = get_TMR0(); - int iValIncr; + int iValPrescaler; + + boolean bPSA = get_PSA(); //PreScalerAssignment //Check assignment of prescaler (PSA == 0) => TMR0; (PSA == 1) => WDT - if (get_PSA()) { - iValIncr = 1; + //Prescaler assigned to WDT, icrement TMR0 by 1. + if (bPSA) { + //Increment TMR0 by 1, set T0IF at overflow. + if ((iValTMR0 + 1) > 255) { + set_T0IF(true); + set_TMR0((iValTMR0 + 1) & 255); + } else { + set_T0IF(false); + set_TMR0(iValTMR0 + 1); + } + //Prescaler assigned to TMR0, increment TMR0 if prescaled TMR0 equals TMR0 prescaler-rate. } else { - iValIncr = get_TMR0_PrescalerRate(); - } - - //Check for overflow and set bit and timer - if ((iValTMR0 + iValIncr) > 255) { - set_T0IF(true); - set_TMR0((iValTMR0 + iValIncr) & 255); //TODO 0 or &255 (Question to Prof) - } else { - set_T0IF(false); - set_TMR0(iValTMR0 + iValIncr); + iValPrescaler = get_TMR0_PrescalerRate(); + iPrescaledTMR0++; + if (iPrescaledTMR0 == iValPrescaler) { + iPrescaledTMR0 = 0; //Reset prescaled TMR0 + //Increment TMR0 by 1, set T0IF at overflow. + if ((iValTMR0 + 1) > 255) { + set_T0IF(true); + set_TMR0((iValTMR0 + 1) & 255); + } else { + set_T0IF(false); + set_TMR0(iValTMR0 + 1); + } + } } } @@ -1554,4 +1571,44 @@ public class RAM { public synchronized boolean get_TRISA4() { return (get_TRISA() & 0b00010000) == 16; } + + public synchronized boolean get_TRISB0() { + return (get_TRISB() & 0b00000001) == 1; + } + + public synchronized boolean get_TRISB1() { + return (get_TRISB() & 0b00000010) == 2; + } + + public synchronized boolean get_TRISB2() { + return (get_TRISB() & 0b00000100) == 4; + } + + public synchronized boolean get_TRISB3() { + return (get_TRISB() & 0b00001000) == 8; + } + + public synchronized boolean get_TRISB4() { + return (get_TRISB() & 0b00010000) == 16; + } + + public synchronized boolean get_TRISB5() { + return (get_TRISB() & 0b00100000) == 32; + } + + public synchronized boolean get_TRISB6() { + return (get_TRISB() & 0b01000000) == 64; + } + + public synchronized boolean get_TRISB7() { + return (get_TRISB() & 0b10000000) == 128; + } + + public synchronized int[] get_Bank0() { + return bank0; + } + + public synchronized int[] get_Bank1() { + return bank1; + } } \ No newline at end of file diff --git a/src/Model/Backend/MyModel.java b/src/Model/Backend/MyModel.java index ff9ef86..17dc6a3 100644 --- a/src/Model/Backend/MyModel.java +++ b/src/Model/Backend/MyModel.java @@ -1,15 +1,22 @@ package Model.Backend; import Model.Backend.Microcontroller.PIC; +import Model.Backend.Runtime.Environment; public class MyModel { PIC oPIC; + Environment oEnvironment; - public MyModel(PIC pic) { + public MyModel(PIC pic, Environment env) { oPIC = pic; + oEnvironment = env; } public PIC getPIC() { return this.oPIC; } + + public Environment getEnvironment() { + return this.oEnvironment; + } } diff --git a/src/Model/Backend/Runtime/Environment.java b/src/Model/Backend/Runtime/Environment.java index f5a9000..0d9cabb 100755 --- a/src/Model/Backend/Runtime/Environment.java +++ b/src/Model/Backend/Runtime/Environment.java @@ -37,7 +37,7 @@ public class Environment { watchdog = new WATCHDOG(); - + diff --git a/src/View/GUIMainFrame.java b/src/View/GUIMainFrame.java index bce45c9..907299d 100755 --- a/src/View/GUIMainFrame.java +++ b/src/View/GUIMainFrame.java @@ -6,11 +6,11 @@ import java.util.ArrayList; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; -import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; +import Model.Backend.MyModel; import Model.Backend.Runtime.Environment; public class GUIMainFrame extends JFrame { @@ -33,6 +33,7 @@ public class GUIMainFrame extends JFrame { Color[] aoDarkTheme = {new Color(255, 253, 250), new Color(76, 78, 82), new Color(47, 47, 47), new Color(0, 213, 255), new Color(255, 170, 0), new Color(255, 85, 0)}; Color[] aoLightTheme = {new Color(76, 78, 82), new Color(255, 253, 250), new Color(173, 216, 230), new Color(0, 213, 255), new Color(255, 170, 0), new Color(255, 85, 0)}; + //Components of gui-main-frame GUITestFileTable oGUITestFileTable = new GUITestFileTable(); GUIMenuBar oGUIMenuBar; GUIRegister oGUIRegister = new GUIRegister(); @@ -43,25 +44,52 @@ public class GUIMainFrame extends JFrame { GUIMCMenu oGUIMCMenu = new GUIMCMenu(); GUITime oGUITime = new GUITime(); + //Panels of gui-main-frame JPanel oMainPanel = new JPanel(); JPanel oPanel0 = new JPanel(); JPanel oPanel1 = new JPanel(); JPanel oPanel2 = new JPanel(); JPanel oPanel3 = new JPanel(); - MyView oMyView = new MyView(this, oGUIMCMenu, oGUIMenuBar, oGUIPorts, oGUIRamTable, oGUIRegister, oGUIRegistersDetailed, oGUIStack, oGUITestFileTable, oGUITime, oMainPanel); + /** + * Object for storing all components, will be overhanded to menubar, to set theme. + * + */ + MyView oMyView; + + MyModel oMyModel; ArrayList oPanels = new ArrayList(); + /** * Constructor */ - public GUIMainFrame(Environment env) { + public GUIMainFrame(Environment oEnvironment) { this.setTitle("PIC-Simulator GUI"); // sets title of frame this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // if x is pressed, exit application (HIDE_ON_CLOSE-hides application, DO_NOTHING_ON_CLOSE-prevents user from closing application) this.setResizable(false); // prevent frame from beeing resized this.setSize(1400, 800); //sets x and y dimension of frame + //Set Icon + ImageIcon guiLogo = new ImageIcon("./pictures/gui_logo.png"); // create an ImageIcon + this.setIconImage(guiLogo.getImage()); // change icon of frame + //Adds components to frame, sets layouts,... + buildGUIMainFrame(); + + //Init view object with components of main frame. + oMyView = new MyView(this, oGUIMCMenu, oGUIPorts, oGUIRamTable, oGUIRegister, oGUIRegistersDetailed, oGUIStack, oGUITestFileTable, oGUITime, oMainPanel, oEnvironment); + + //Set menubar + oGUIMenuBar = new GUIMenuBar(oMyModel, oMyView); + this.setJMenuBar(oGUIMenuBar); + + setTheme(0); + updateWindow(); + this.setVisible(true); //make frame visible + } + + private void buildGUIMainFrame() { //Set layouts of panels oMainPanel.setLayout(new GridBagLayout()); oPanel0.setLayout(new GridBagLayout()); @@ -134,19 +162,8 @@ public class GUIMainFrame extends JFrame { oPanels.add(oPanel3); oPanels.add(oMainPanel); - //Set Icon - ImageIcon guiLogo = new ImageIcon("./pictures/gui_logo.png"); // create an ImageIcon - this.setIconImage(guiLogo.getImage()); // change icon of frame - - //Set menubar - oGUIMenuBar = new GUIMenuBar(oMyView, env, this, oGUITestFileTable, oGUIRegister, oGUIRegistersDetailed); - this.setJMenuBar(oGUIMenuBar); - //Build this frame this.add(oMainPanel); - setTheme(0); - updateWindow(); - this.setVisible(true); //make frame visible } public void updateWindow() { diff --git a/src/View/GUIMenuBar.java b/src/View/GUIMenuBar.java index 674c81a..a70bde7 100644 --- a/src/View/GUIMenuBar.java +++ b/src/View/GUIMenuBar.java @@ -15,18 +15,33 @@ import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; +import Control.MyControlModel; +import Model.Backend.MyModel; import Model.Backend.EepromLoader.ReadEepromFile; -import Model.Backend.Runtime.Environment; public class GUIMenuBar extends JMenuBar implements ActionListener { - Environment oEnv; - GUIMainFrame oGUIMainFrame; - GUITestFileTable oGUITestFileTable; - GUIRegister oGUIRegister; - GUIRegistersDetailed oGUIRegistersDetailed; + /** + * Color oWhite = new Color(255, 253, 250); + * Color oDarkGray = new Color(76, 78, 82); + * Color oDarkGrayB = new Color(47, 47, 47); + * Color oLightBlue = new Color(173, 216, 230); + * Color oOrangeDM = new Color(255, 170, 0); + * Color oLightBlueDM = new Color(0, 213, 255); + * Color oOrangeDMB = new Color(255, 85, 0); + * First Color == TextColor + * Second Color == BackgroundColor + * Third Color == BorderColor + * Fourth Color == TextColor Marked + * Fifth Color == BackgroundColor Marked + * Sixth Color == BorderColor Marked + */ + Color[] aoDarkTheme = {new Color(255, 253, 250), new Color(76, 78, 82), new Color(47, 47, 47), new Color(0, 213, 255), new Color(255, 170, 0), new Color(255, 85, 0)}; + Color[] aoLightTheme = {new Color(76, 78, 82), new Color(255, 253, 250), new Color(173, 216, 230), new Color(0, 213, 255), new Color(255, 170, 0), new Color(255, 85, 0)}; MyView oMyView; + MyControlModel oMyControl; + ArrayList oBreakpoints; ReadEepromFile oRef; boolean[] bBreakpointSet; @@ -82,15 +97,6 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { "Microcontroller", "Start program", "Pause program", "Reset program", "Step by Step", "Workinterval", "Instant", "1 second", "2 seconds", "Help", "Language", "German", "English", "Manual", "About"}; - /** - * Color oWhite = new Color(255, 253, 250); - * Color oDarkGray = new Color(76, 78, 82); - * First Color == TextColor - * Second Color == BackgroundColor - */ - Color[] aoDarkTheme = {new Color(255, 253, 250), new Color(76, 78, 82)}; - Color[] aoLightTheme = {new Color(76, 78, 82), new Color(255, 253, 250)}; - //Color for separators is always the same. Color oColorSeparators = new Color(47, 47, 47); @@ -98,7 +104,7 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { * Constructor initializes menubar. * @param frame */ - public GUIMenuBar(MyView view, Environment env, GUIMainFrame mainframe, GUITestFileTable guitft, GUIRegister guiregs, GUIRegistersDetailed guiregsdet) { //TODO maybe single components, with methods, of frame to set theme + public GUIMenuBar(MyModel model, MyView view) { //TODO maybe single components, with methods, of frame to set theme //Custom Separators since default is not able to change background. oSeparator0 = new JMenuItem(); @@ -116,11 +122,8 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { //Referrence to change different parts of gui for theme. oMyView = view; - oEnv = env; - oGUIMainFrame = mainframe; - oGUITestFileTable = guitft; - oGUIRegister = guiregs; - oGUIRegistersDetailed = guiregsdet; + + oMyControl = new MyControlModel(model, view); //File oFileMenu = new JMenu(sGermanLang[0]); @@ -157,7 +160,7 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { setActionListeners(); setGerMnemonics(); buildMenubar(); - setTheme(aoLightTheme[0], aoLightTheme[1]); + setTheme(0); } /** @@ -370,13 +373,13 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { //Change to dark theme if (e.getSource() == oDarkTheme) { System.out.println("It's gettin dark brooo"); //TODO - setTheme(aoDarkTheme[0], aoDarkTheme[1]); + setTheme(1); oMyView.setTheme(1); } //Change to light theme if (e.getSource() == oLightTheme) { System.out.println("Death to all vampires!"); //TODO - setTheme(aoLightTheme[0], aoLightTheme[1]); + setTheme(0); oMyView.setTheme(0); } @@ -391,7 +394,7 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { System.out.println("oResetProg"); //TODO } if (e.getSource() == oStepProg) { - oEnv.step(); + oMyView.getEnvironment().step(); } if (e.getSource() == oIntervalASAP) { System.out.println("oIntervalASAP"); //TODO @@ -427,108 +430,205 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { controlBreakpoints(e); } - /** - * Changes Color of text and background of menubar. - * @param oText = Color of text - * @param oBackground = Color of background - */ - private void setTheme(Color oText, Color oBackground) { - this.setBackground(oBackground); - this.setBorder(BorderFactory.createLineBorder(oBackground, 2)); - this.setOpaque(true); + public void setTheme(int iThemeNr) { + switch (iThemeNr) { + case 0: { + this.setBackground(aoLightTheme[1]); + this.setBorder(BorderFactory.createLineBorder(aoLightTheme[1], 2)); + this.setOpaque(true); - //File - oFileMenu.setForeground(oText); - oLoadTestFile.setForeground(oText); - oLoadProgStateItem.setForeground(oText); - oSaveProgStateItem.setForeground(oText); - oExitItem.setForeground(oText); + //File + oFileMenu.setForeground(aoLightTheme[0]); + oLoadTestFile.setForeground(aoLightTheme[0]); + oLoadProgStateItem.setForeground(aoLightTheme[0]); + oSaveProgStateItem.setForeground(aoLightTheme[0]); + oExitItem.setForeground(aoLightTheme[0]); - //View - oViewMenu.setForeground(oText); - oChangeColors.setForeground(oText); - oDarkTheme.setForeground(oText); - oLightTheme.setForeground(oText); + //View + oViewMenu.setForeground(aoLightTheme[0]); + oChangeColors.setForeground(aoLightTheme[0]); + oDarkTheme.setForeground(aoLightTheme[0]); + oLightTheme.setForeground(aoLightTheme[0]); - //Microcontroller - oMicrocontroller.setForeground(oText); - oStartProg.setForeground(oText); - oPauseProg.setForeground(oText); - oResetProg.setForeground(oText); - oStepProg.setForeground(oText); - oChangeWorkInterval.setForeground(oText); - oIntervalASAP.setForeground(oText); - oInterval1Sec.setForeground(oText); - oInterval2Sec.setForeground(oText); + //Microcontroller + oMicrocontroller.setForeground(aoLightTheme[0]); + oStartProg.setForeground(aoLightTheme[0]); + oPauseProg.setForeground(aoLightTheme[0]); + oResetProg.setForeground(aoLightTheme[0]); + oStepProg.setForeground(aoLightTheme[0]); + oChangeWorkInterval.setForeground(aoLightTheme[0]); + oIntervalASAP.setForeground(aoLightTheme[0]); + oInterval1Sec.setForeground(aoLightTheme[0]); + oInterval2Sec.setForeground(aoLightTheme[0]); - //Help - oHelpMenu.setForeground(oText); - oChangeLanguageMenu.setForeground(oText); - oGerLangItem.setForeground(oText); - oEngLangItem.setForeground(oText); - oManual.setForeground(oText); - oAbout.setForeground(oText); + //Help + oHelpMenu.setForeground(aoLightTheme[0]); + oChangeLanguageMenu.setForeground(aoLightTheme[0]); + oGerLangItem.setForeground(aoLightTheme[0]); + oEngLangItem.setForeground(aoLightTheme[0]); + oManual.setForeground(aoLightTheme[0]); + oAbout.setForeground(aoLightTheme[0]); - //File - oFileMenu.setBackground(oBackground); - oLoadTestFile.setBackground(oBackground); - oLoadProgStateItem.setBackground(oBackground); - oSaveProgStateItem.setBackground(oBackground); - oExitItem.setBackground(oBackground); + //File + oFileMenu.setBackground(aoLightTheme[1]); + oLoadTestFile.setBackground(aoLightTheme[1]); + oLoadProgStateItem.setBackground(aoLightTheme[1]); + oSaveProgStateItem.setBackground(aoLightTheme[1]); + oExitItem.setBackground(aoLightTheme[1]); - //View - oViewMenu.setBackground(oBackground); - oChangeColors.setBackground(oBackground); - oDarkTheme.setBackground(oBackground); - oLightTheme.setBackground(oBackground); + //View + oViewMenu.setBackground(aoLightTheme[1]); + oChangeColors.setBackground(aoLightTheme[1]); + oDarkTheme.setBackground(aoLightTheme[1]); + oLightTheme.setBackground(aoLightTheme[1]); - //Microcontroller - oMicrocontroller.setBackground(oBackground); - oStartProg.setBackground(oBackground); - oPauseProg.setBackground(oBackground); - oResetProg.setBackground(oBackground); - oStepProg.setBackground(oBackground); - oChangeWorkInterval.setBackground(oBackground); - oIntervalASAP.setBackground(oBackground); - oInterval1Sec.setBackground(oBackground); - oInterval2Sec.setBackground(oBackground); + //Microcontroller + oMicrocontroller.setBackground(aoLightTheme[1]); + oStartProg.setBackground(aoLightTheme[1]); + oPauseProg.setBackground(aoLightTheme[1]); + oResetProg.setBackground(aoLightTheme[1]); + oStepProg.setBackground(aoLightTheme[1]); + oChangeWorkInterval.setBackground(aoLightTheme[1]); + oIntervalASAP.setBackground(aoLightTheme[1]); + oInterval1Sec.setBackground(aoLightTheme[1]); + oInterval2Sec.setBackground(aoLightTheme[1]); - //Help - oHelpMenu.setBackground(oBackground); - oChangeLanguageMenu.setBackground(oBackground); - oGerLangItem.setBackground(oBackground); - oEngLangItem.setBackground(oBackground); - oManual.setBackground(oBackground); - oAbout.setBackground(oBackground); + //Help + oHelpMenu.setBackground(aoLightTheme[1]); + oChangeLanguageMenu.setBackground(aoLightTheme[1]); + oGerLangItem.setBackground(aoLightTheme[1]); + oEngLangItem.setBackground(aoLightTheme[1]); + oManual.setBackground(aoLightTheme[1]); + oAbout.setBackground(aoLightTheme[1]); - //File - oFileMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); //TODO white lines at menus - oFileMenu.getPopupMenu().setOpaque(true); + //File + oFileMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oFileMenu.getPopupMenu().setOpaque(true); - //View - oViewMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); - oChangeColors.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); - oChangeColors.setOpaque(true); + //View + oViewMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oChangeColors.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oChangeColors.setOpaque(true); - //Microcontroller - oMicrocontroller.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); - oChangeWorkInterval.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); - oChangeWorkInterval.setOpaque(true); + //Microcontroller + oMicrocontroller.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oChangeWorkInterval.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oChangeWorkInterval.setOpaque(true); - //Help - oHelpMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); - oChangeLanguageMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(oBackground)); - oChangeLanguageMenu.setOpaque(true); + //Help + oHelpMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oChangeLanguageMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoLightTheme[1])); + oChangeLanguageMenu.setOpaque(true); - //Separators - oSeparator0.setBackground(oColorSeparators); - oSeparator0.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); - oSeparator1.setBackground(oColorSeparators); - oSeparator1.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); - oSeparator2.setBackground(oColorSeparators); - oSeparator2.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); - oSeparator3.setBackground(oColorSeparators); - oSeparator3.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + //Separators + oSeparator0.setBackground(oColorSeparators); + oSeparator0.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + oSeparator1.setBackground(oColorSeparators); + oSeparator1.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + oSeparator2.setBackground(oColorSeparators); + oSeparator2.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + oSeparator3.setBackground(oColorSeparators); + oSeparator3.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + }break; + case 1: { + this.setBackground(aoDarkTheme[1]); + this.setBorder(BorderFactory.createLineBorder(aoDarkTheme[1], 2)); + this.setOpaque(true); + + //File + oFileMenu.setForeground(aoDarkTheme[0]); + oLoadTestFile.setForeground(aoDarkTheme[0]); + oLoadProgStateItem.setForeground(aoDarkTheme[0]); + oSaveProgStateItem.setForeground(aoDarkTheme[0]); + oExitItem.setForeground(aoDarkTheme[0]); + + //View + oViewMenu.setForeground(aoDarkTheme[0]); + oChangeColors.setForeground(aoDarkTheme[0]); + oDarkTheme.setForeground(aoDarkTheme[0]); + oLightTheme.setForeground(aoDarkTheme[0]); + + //Microcontroller + oMicrocontroller.setForeground(aoDarkTheme[0]); + oStartProg.setForeground(aoDarkTheme[0]); + oPauseProg.setForeground(aoDarkTheme[0]); + oResetProg.setForeground(aoDarkTheme[0]); + oStepProg.setForeground(aoDarkTheme[0]); + oChangeWorkInterval.setForeground(aoDarkTheme[0]); + oIntervalASAP.setForeground(aoDarkTheme[0]); + oInterval1Sec.setForeground(aoDarkTheme[0]); + oInterval2Sec.setForeground(aoDarkTheme[0]); + + //Help + oHelpMenu.setForeground(aoDarkTheme[0]); + oChangeLanguageMenu.setForeground(aoDarkTheme[0]); + oGerLangItem.setForeground(aoDarkTheme[0]); + oEngLangItem.setForeground(aoDarkTheme[0]); + oManual.setForeground(aoDarkTheme[0]); + oAbout.setForeground(aoDarkTheme[0]); + + //File + oFileMenu.setBackground(aoDarkTheme[1]); + oLoadTestFile.setBackground(aoDarkTheme[1]); + oLoadProgStateItem.setBackground(aoDarkTheme[1]); + oSaveProgStateItem.setBackground(aoDarkTheme[1]); + oExitItem.setBackground(aoDarkTheme[1]); + + //View + oViewMenu.setBackground(aoDarkTheme[1]); + oChangeColors.setBackground(aoDarkTheme[1]); + oDarkTheme.setBackground(aoDarkTheme[1]); + oLightTheme.setBackground(aoDarkTheme[1]); + + //Microcontroller + oMicrocontroller.setBackground(aoDarkTheme[1]); + oStartProg.setBackground(aoDarkTheme[1]); + oPauseProg.setBackground(aoDarkTheme[1]); + oResetProg.setBackground(aoDarkTheme[1]); + oStepProg.setBackground(aoDarkTheme[1]); + oChangeWorkInterval.setBackground(aoDarkTheme[1]); + oIntervalASAP.setBackground(aoDarkTheme[1]); + oInterval1Sec.setBackground(aoDarkTheme[1]); + oInterval2Sec.setBackground(aoDarkTheme[1]); + + //Help + oHelpMenu.setBackground(aoDarkTheme[1]); + oChangeLanguageMenu.setBackground(aoDarkTheme[1]); + oGerLangItem.setBackground(aoDarkTheme[1]); + oEngLangItem.setBackground(aoDarkTheme[1]); + oManual.setBackground(aoDarkTheme[1]); + oAbout.setBackground(aoDarkTheme[1]); + + //File + oFileMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oFileMenu.getPopupMenu().setOpaque(true); + + //View + oViewMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oChangeColors.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oChangeColors.setOpaque(true); + + //Microcontroller + oMicrocontroller.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oChangeWorkInterval.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oChangeWorkInterval.setOpaque(true); + + //Help + oHelpMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oChangeLanguageMenu.getPopupMenu().setBorder(BorderFactory.createLineBorder(aoDarkTheme[1])); + oChangeLanguageMenu.setOpaque(true); + + //Separators + oSeparator0.setBackground(oColorSeparators); + oSeparator0.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + oSeparator1.setBackground(oColorSeparators); + oSeparator1.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + oSeparator2.setBackground(oColorSeparators); + oSeparator2.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + oSeparator3.setBackground(oColorSeparators); + oSeparator3.setBorder(BorderFactory.createLineBorder(oColorSeparators, 2)); + }break; + } } private void loadTestFile() { @@ -542,30 +642,34 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { oRef = new ReadEepromFile(); oRef.setData(oFile); oRef.setOPCode(oRef.getData()); - oGUITestFileTable.setData(oRef.getData()); + oMyView.getGUITestFileTable().setData(oRef.getData()); + ArrayList data = oRef.getData(); int iDataSize = data.size(); ArrayList opcode = oRef.getOPCode(); + int iOPCodeSize = opcode.size(); + //If testfile was loaded before, reset all checkboxes if (iTestFileLoaded > 0) { - oBreakpoints = oGUITestFileTable.getCheckboxes(); + oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); for (int i = 0; i < iDataSize; i++) { oBreakpoints.get(i).setEnabled(false); } } + //Enable only checkboxes which belong to real code for (int i = 0; i < iDataSize; i++) { for (int j = 0; j < iOPCodeSize; j++) { if (data.get(i).equals(opcode.get(j))) { - oBreakpoints = oGUITestFileTable.getCheckboxes(); + oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); oBreakpoints.get(i).setEnabled(true); oBreakpoints.get(i).addActionListener(this); } } } bBreakpointSet = new boolean[iOPCodeSize]; - oRef.readFileAndWriteToEEPROM(oEnv.getPIC()); - oGUIMainFrame.updateWindow(); + oRef.readFileAndWriteToEEPROM(oMyView.getEnvironment().getPIC()); + oMyView.getGUIMainFrame().updateWindow(); iTestFileLoaded = 1; } } diff --git a/src/View/GUIPorts.java b/src/View/GUIPorts.java index 7a0ab60..6faa670 100644 --- a/src/View/GUIPorts.java +++ b/src/View/GUIPorts.java @@ -215,6 +215,18 @@ public class GUIPorts extends JPanel { return null; } + public void enableCheckboxesA(boolean[] abEnabled) { + for (int i = 0; i < 10; i++) { + oCheckboxes.get(i).setEnabled(abEnabled[i]); + } + } + + public void enableCheckboxesB(boolean[] abEnabled) { + for (int i = 10; i < 26; i++) { + oCheckboxes.get(i).setEnabled(abEnabled[i]); + } + } + public void setTheme(int iThemeNr) { switch (iThemeNr) { case 0: { diff --git a/src/View/GUITestFileTable.java b/src/View/GUITestFileTable.java index cdabc00..96786e9 100644 --- a/src/View/GUITestFileTable.java +++ b/src/View/GUITestFileTable.java @@ -137,6 +137,14 @@ public class GUITestFileTable extends JScrollPane { return oCheckboxes; } + //Sets checkbox at position i to boolean at position i at overhanded list. + public void setCheckboxes(ArrayList bEnabled) { + int iCheckboxesSize = oCheckboxes.size(); + for (int i = 0; i < iCheckboxesSize; i++) { + oCheckboxes.get(i).setEnabled(bEnabled.get(i)); + } + } + /** * @param data ArrayList to check. * @returns length of longest string at ArrayList. diff --git a/src/View/MyView.java b/src/View/MyView.java index ef5cd17..2ddfaa4 100644 --- a/src/View/MyView.java +++ b/src/View/MyView.java @@ -2,11 +2,12 @@ package View; import javax.swing.JPanel; +import Model.Backend.Runtime.Environment; + public class MyView implements IMyView { GUIMainFrame oGUIMainFrame; GUIMCMenu oGUIMCMenu; - GUIMenuBar oGUIMenuBar; GUIPorts oGUIPorts; GUIRamTable oGUIRamTable; GUIRegister oGUIRegister; @@ -17,10 +18,11 @@ public class MyView implements IMyView { JPanel oGUIMainPanel; - public MyView(GUIMainFrame oGUIMainFrame, GUIMCMenu oGUIMCMenu, GUIMenuBar oGUIMenuBar, GUIPorts oGUIPorts, GUIRamTable oGUIRamTable, GUIRegister oGUIRegister, GUIRegistersDetailed oGUIRegistersDetailed, GUIStack oGUIStack, GUITestFileTable oGUITestFileTable, GUITime oGUITime, JPanel oGUIMainPanel) { + Environment oEnvironment; + + public MyView(GUIMainFrame oGUIMainFrame, GUIMCMenu oGUIMCMenu, GUIPorts oGUIPorts, GUIRamTable oGUIRamTable, GUIRegister oGUIRegister, GUIRegistersDetailed oGUIRegistersDetailed, GUIStack oGUIStack, GUITestFileTable oGUITestFileTable, GUITime oGUITime, JPanel oGUIMainPanel, Environment oEnvironment) { this.oGUIMainFrame = oGUIMainFrame; this.oGUIMCMenu = oGUIMCMenu; - this.oGUIMenuBar = oGUIMenuBar; this.oGUIPorts = oGUIPorts; this.oGUIRamTable = oGUIRamTable; this.oGUIRegister = oGUIRegister; @@ -29,6 +31,7 @@ public class MyView implements IMyView { this.oGUITestFileTable = oGUITestFileTable; this.oGUITime = oGUITime; this.oGUIMainPanel = oGUIMainPanel; + this.oEnvironment = oEnvironment; } public void setTheme(int iThemeNr) { @@ -42,4 +45,44 @@ public class MyView implements IMyView { oGUITestFileTable.setTheme(iThemeNr); oGUITime.setTheme(iThemeNr); } -} + + public GUIMainFrame getGUIMainFrame() { + return this.oGUIMainFrame; + } + + public GUIMCMenu getGUIMCMenu() { + return this.oGUIMCMenu; + } + + public GUIPorts getGUIPorts() { + return this.oGUIPorts; + } + + public GUIRamTable getGUIRamTable() { + return this.oGUIRamTable; + } + + public GUIRegister getGUIRegister() { + return this.oGUIRegister; + } + + public GUIRegistersDetailed getGUIRegistersDetailed() { + return this.oGUIRegistersDetailed; + } + + public GUIStack getGUIStack() { + return this.oGUIStack; + } + + public GUITestFileTable getGUITestFileTable() { + return this.oGUITestFileTable; + } + + public JPanel getGUIMainPanel() { + return this.oGUIMainPanel; + } + + public Environment getEnvironment() { + return this.oEnvironment; + } +} \ No newline at end of file