/******************************************************************************* * Copyright (c) 2012-present Jakub Kováč, Jozef Brandýs, Katarína Kotrlová, * Pavol Lukča, Ladislav Pápay, Viktor Tomkovič, Tatiana Tóthová * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package algvis.ds.intervaltree; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.Vector; import javax.swing.ButtonGroup; import javax.swing.JPanel; import algvis.core.Algorithm; import algvis.ds.dictionaries.bst.BSTNode; import algvis.ds.intervaltree.IntervalTrees.mimasuType; import algvis.internationalization.IButton; import algvis.internationalization.IRadioButton; import algvis.ui.Buttons; import algvis.ui.VisPanel; public class IntervalButtons extends Buttons { private static final long serialVersionUID = 6383200811481633404L; private IButton insertB; private IButton findsumB; private IButton changeKeyB; private IRadioButton minB; private IRadioButton maxB; private IRadioButton sumB; private ButtonGroup minMaxSumGroup; private mimasuType lastMinTree = ((IntervalTrees) D).minTree; public IntervalButtons(VisPanel M) { super(M); } @Override public void actionButtons(JPanel P) { insertB = new IButton("button-insert"); insertB.setMnemonic(KeyEvent.VK_I); insertB.addActionListener(this); /* * deleteB = new IButton("button-deletemax"); * deleteB.setMnemonic(KeyEvent.VK_D); deleteB.addActionListener(this); */ if (((IntervalTrees) D).minTree == mimasuType.MIN) { findsumB = new IButton("button-findmin"); } else if (((IntervalTrees) D).minTree == mimasuType.MAX) { findsumB = new IButton("button-findmax"); } else { findsumB = new IButton("button-findsum"); } findsumB.setMnemonic(KeyEvent.VK_I); findsumB.addActionListener(this); changeKeyB = new IButton("button-changekey"); changeKeyB.setMnemonic(KeyEvent.VK_K); changeKeyB.addActionListener(this); P.add(insertB); // P.add(deleteB); P.add(findsumB); P.add(changeKeyB); } @Override public void otherButtons(JPanel P) { minB = new IRadioButton("min"); minB.setSelected(false); minB.addActionListener(this); maxB = new IRadioButton("max"); maxB.setSelected(true); maxB.addActionListener(this); sumB = new IRadioButton("sum"); sumB.setSelected(false); sumB.addActionListener(this); minMaxSumGroup = new ButtonGroup(); minMaxSumGroup.add(minB); minMaxSumGroup.add(maxB); minMaxSumGroup.add(sumB); P.add(minB); P.add(maxB); P.add(sumB); } @Override public void actionPerformed(ActionEvent evt) { super.actionPerformed(evt); if (evt.getSource() == insertB) { final Vector<Integer> args = I.getNonEmptyVI(); panel.history.saveEditId(); for (final int x : args) { D.insert(x); } if (panel.pauses){ panel.history.rewind(); } } else if (evt.getSource() == findsumB) { final Vector<Integer> args = I.getVI(); panel.history.saveEditId(); if (args.size() > 1) { ((IntervalTrees) D).ofinterval(args.elementAt(0), args.elementAt(1)); } else { ((IntervalTrees) D).ofinterval(1, ((IntervalTree) D).numLeafs); } if (panel.pauses){ panel.history.rewind(); } } else if (evt.getSource() == changeKeyB) { final int delta = Math.abs(I.getInt(1)); final BSTNode w = ((BSTNode) ((IntervalTrees) D).chosen); panel.history.saveEditId(); ((IntervalTrees) D).changeKey(w, delta); if (panel.pauses && w != null){ panel.history.rewind(); } } else if (evt.getSource() == minB && ((IntervalTrees) D).minTree != mimasuType.MIN) { D.start(new Algorithm(panel) { @Override public void runAlgorithm() { D.clear(); ((IntervalTrees) D).minTree = mimasuType.MIN; } }); } else if (evt.getSource() == maxB && ((IntervalTrees) D).minTree != mimasuType.MAX) { D.start(new Algorithm(panel) { @Override public void runAlgorithm() { D.clear(); ((IntervalTrees) D).minTree = mimasuType.MAX; } }); } else if (evt.getSource() == sumB && ((IntervalTrees) D).minTree != mimasuType.SUM) { D.start(new Algorithm(panel) { @Override public void runAlgorithm() { D.clear(); ((IntervalTrees) D).minTree = mimasuType.SUM; } }); } } @Override public void setOtherEnabled(boolean enabled) { super.setOtherEnabled(enabled); insertB.setEnabled(enabled); findsumB.setEnabled(enabled); // deleteB.setEnabled(enabled); changeKeyB.setEnabled(enabled); } @Override public void refresh() { super.refresh(); if (lastMinTree != ((IntervalTrees) D).minTree) { lastMinTree = ((IntervalTrees) D).minTree; if (lastMinTree == mimasuType.MIN) { findsumB.setT("button-findmin"); } else if (lastMinTree == mimasuType.MAX) { findsumB.setT("button-findmax"); } else if (lastMinTree == mimasuType.SUM) { findsumB.setT("button-findsum"); } } } }