import java.awt.*; import java.awt.event.*; import java.util.*; class AmMenu extends MenuBar{ String nupp0="File"; String nupp00= "Quit"; String nupp1= "Icon"; String nupp10 = "Toggle single"; String nupp11 = "Toggle level"; String nupp2 = "View"; String nupp20 = "Toggle"; String nupp3 = "Edit"; String nupp30 = "Undo"; String nupp31 = "Delete"; String nupp32 = "Copy"; String nupp33 = "Cut"; String nupp34 = "Paste"; String nupp4 = "Scroll"; String nupp40 = "Down"; String nupp41 = "Up"; String nupp42 = "Left"; String nupp43 = "Right"; String nupp5= "Insert"; String nupp50 = "Simple"; String nupp51 = "Loop"; String nupp52 = "Head"; Menu m0 = new Menu(nupp0); MenuItem m00 = new MenuItem(nupp00); Menu m1 = new Menu(nupp1, true); MenuItem m10 = new MenuItem(nupp10); MenuItem m11 = new MenuItem(nupp11); Menu m2 = new Menu(nupp2); MenuItem m20 = new MenuItem(nupp20); Menu m3 = new Menu(nupp3, true); MenuItem m30 = new MenuItem(nupp30); MenuItem m31 = new MenuItem(nupp31); MenuItem m32 = new MenuItem(nupp32); MenuItem m33 = new MenuItem(nupp33); MenuItem m34 = new MenuItem(nupp34); Menu m4 = new Menu(nupp4, true); MenuItem m40 = new MenuItem(nupp40); MenuItem m41 = new MenuItem(nupp41); MenuItem m42 = new MenuItem(nupp42); MenuItem m43 = new MenuItem(nupp43); Menu m5 = new Menu(nupp5, true); MenuItem m50 = new MenuItem(nupp50); MenuItem m51 = new MenuItem(nupp51); MenuItem m52 = new MenuItem(nupp52); AmMenu(){// konstruktor m00.addActionListener(new Item00Listener()); m0.add(m00); m10.addActionListener(new Item10Listener(Am.canvas)); m1.add(m10); m11.addActionListener(new Item11Listener(Am.canvas)); m1.add(m11); m20.addActionListener(new Item20Listener(Am.canvas)); m2.add(m20); m30.addActionListener(new Item30Listener(Am.canvas)); m3.add(m30); m31.addActionListener(new Item31Listener(Am.canvas)); m3.add(m31); m32.addActionListener(new Item32Listener(Am.canvas)); m3.add(m32); m33.addActionListener(new Item33Listener(Am.canvas)); m3.add(m33); m34.addActionListener(new Item34Listener(Am.canvas)); m3.add(m34); m40.addActionListener(new Item40Listener(Am.canvas)); m4.add(m40); m41.addActionListener(new Item41Listener(Am.canvas)); m4.add(m41); m42.addActionListener(new Item42Listener(Am.canvas)); m4.add(m42); m43.addActionListener(new Item43Listener(Am.canvas)); m4.add(m43); m50.addActionListener(new Item50Listener(Am.canvas)); m5.add(m50); m51.addActionListener(new Item51Listener(Am.canvas)); m5.add(m51); m52.addActionListener(new Item52Listener(Am.canvas)); m5.add(m52); System.out.println("AmMenu: m4="+m4.paramString()); add(m0); add(m1); add(m2); add(m3); add(m4); add(m5); }//konstruktor public static void setEnabled(MenuBar mb, String menuLabel, String itemLabel, boolean toggle){ // lylitab vastavat menyyliiget int i, n = mb.getMenuCount(); L: for (i = 0; i < n; i++){ if(mb.getMenu(i).paramString().indexOf(",label="+menuLabel) >= 0){ int j, m = mb.getMenu(i).getItemCount(); for(j = 0; j < m; j++){ if(mb.getMenu(i).getItem(j).getLabel().equals(itemLabel)){ mb.getMenu(i).getItem(j).setEnabled(toggle); break L; } }//for } }//for } public static void setEnabled(MenuBar mb, String menuLabel, boolean toggle){ // lylitab koik menyyliikmed int i, n = mb.getMenuCount(); for (i = 0; i < n; i++){ if(mb.getMenu(i).paramString().indexOf(",label="+menuLabel) >= 0){ int j, m = mb.getMenu(i).getItemCount(); for(j = 0; j < m; j++){ mb.getMenu(i).getItem(j).setEnabled(toggle); } }//for } }//for } class Item00Listener implements ActionListener{// quit public void actionPerformed(ActionEvent event){ System.out.println("Lopp"); System.exit(0); } }//AmMenu class Item10Listener implements ActionListener{// Icon AmCanvas c; Item10Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){// toggle single if(Am.selected != null){ Am.selected.icon = !Am.selected.icon; // planeerida ja joonistada uuesti: Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } } class Item11Listener implements ActionListener{// toggle level AmCanvas c; Item11Listener(AmCanvas cc){c = cc;}// konstruktor int selectedLevel, currentLevel; boolean ico; public void actionPerformed(ActionEvent event){ if(Am.selected != null){ // leida valitud skeemi tase (selectedLevel): selectedLevel = 0; AmSketch x = Am.selected; for(;x.parent!=null;selectedLevel++, x=x.parent); // muuta icon nendes skeemides, // mille tase (currentLevel) on selectedLevel: currentLevel = 0; ico = !Am.selected.icon; setIcons(Am.s); // planeerida ja joonistada uuesti: Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } private void setIcons(AmSketch s){ // muuta icon nendes (alam)skeemides, // mille tase (currentLevel) on selectedLevel if(currentLevel == selectedLevel) s.icon = ico; currentLevel++; for(Enumeration e = s.subs.elements(); e.hasMoreElements();){ setIcons((AmSketch)(e.nextElement())); }//for currentLevel--; } } class Item20Listener implements ActionListener{// View AmCanvas c; Item20Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){// toggle // louend tyhjaks: AmSketch x = Am.s; // sa"ilitada Am.s = null; c.repaint(); Am.s = x; // taastada // muuta vaade: Am.s.changeView(); // planeerida ja joonistada uuesti: Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } class Item30Listener implements ActionListener{//undo AmCanvas c; Item30Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ AmEdit.undo(); Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } class Item31Listener implements ActionListener{ // delete AmCanvas c; Item31Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ if(Am.selected != null){ AmEdit.deleteSketch(Am.selected); Am.cancelSelection(); if(Am.s != null) Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } } class Item32Listener implements ActionListener{ // copy AmCanvas c; Item32Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ if(Am.selected != null){ AmEdit.clipboard = Am.selected.makeCopy(); AmMenu.setEnabled(Am.mb, "Edit", "Paste", true); } } } class Item33Listener implements ActionListener{ // cut AmCanvas c; Item33Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ if(Am.selected != null){ AmEdit.clipboard = Am.selected.makeCopy(); AmEdit.deleteSketch(Am.selected); Am.cancelSelection(); if(Am.s != null) Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } } class Item34Listener implements ActionListener{ // paste AmCanvas c; Item34Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ // valitud skeemi ette if(Am.selected != null && AmEdit.clipboard != null){ AmEdit.insertSketch(Am.selected.parent, Am.selected.parent.subs.indexOf(Am.selected), AmEdit.clipboard.makeCopy()); if(Am.s != null) Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } } class Item40Listener implements ActionListener{// scroll down AmCanvas c; Item40Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ Am.starty -= 10; Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } class Item41Listener implements ActionListener{// scroll up AmCanvas c; Item41Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ Am.starty += 10; Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } class Item42Listener implements ActionListener{// scroll left AmCanvas c; Item42Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ Am.startx -= 10; Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } class Item43Listener implements ActionListener{// scroll right AmCanvas c; Item43Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ Am.startx += 10; Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint(); } } class Item50Listener implements ActionListener{// Insert Simple AmCanvas c; Item50Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ if(Am.caret.onSketchComment()){// on skeemikommentaaril // lisada lihtskeem esimeseks liikmeks AmSketch s = AmSketch.makeSketch(AmSketch.SIMPLE); // vaade skeemile: s.view = Am.caret.parent.newView(); // vaade harule: ((AmSketch)(s.subs.elementAt(0))).view = Am.caret.parent.newView(); // lisada selle skeemi esimese haru esimeseks liikmeks AmEdit.insertSketch (((AmSketch)Am.caret.parent.subs.elementAt(0)), 0, s); // planeerida ja joonistada uuesti: Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint();// p.o alates sellest kuni lopuni } } } class Item51Listener implements ActionListener{// Insert Loop AmCanvas c; Item51Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ if(Am.caret.onSketchComment()){// on skeemikommentaaril // lisada esimeseks liikmeks AmSketch s = AmSketch.makeSketch(AmSketch.LOOP); // sama, mis lihtskeemikorral: // vaade skeemile: s.view = Am.caret.parent.newView(); // vaade harule: ((AmSketch)(s.subs.elementAt(0))).view = Am.caret.parent.newView(); // lisada selle skeemi esimese haru esimeseks liikmeks: AmEdit.insertSketch (((AmSketch)Am.caret.parent.subs.elementAt(0)), 0, s); // planeerida ja joonistada uuesti: Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint();// p.o alates sellest kuni lopuni } } } class Item52Listener implements ActionListener{// Insert Head AmCanvas c; Item52Listener(AmCanvas cc){c = cc;}// konstruktor public void actionPerformed(ActionEvent event){ if(Am.caret.onSketchComment()){// on skeemikommentaaril byte headtype = 0; switch(Am.caret.parent.type){ case AmSketch.SIMPLE: headtype = AmHead.SIMPLE; break; case AmSketch.LOOP: headtype = AmHead.LOOP; break; case AmSketch.SWITCH: headtype = AmHead.SWITCH; break; } AmHead h = new AmHead(headtype); // lisada selle skeemi esimese haru esimeseks liikmeks: AmEdit.insertHead (Am.caret.parent, 0, h); // planeerida ja joonistada uuesti: Am.s.view.plan(Am.s, Am.startx, Am.starty); c.repaint();// p.o alates sellest kuni lopuni } } }