123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713 |
- package ui.view.main;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Cursor;
- import java.awt.Dimension;
- import java.awt.GraphicsDevice;
- import java.awt.GraphicsEnvironment;
- import java.awt.HeadlessException;
- import java.awt.Image;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.Toolkit;
- import java.awt.datatransfer.UnsupportedFlavorException;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.ComponentAdapter;
- import java.awt.event.ComponentEvent;
- import java.awt.event.ItemEvent;
- import java.awt.event.KeyAdapter;
- import java.awt.event.KeyEvent;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseMotionAdapter;
- import java.io.File;
- import java.io.IOException;
- import java.net.URI;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.ListIterator;
- import javax.swing.AbstractAction;
- import javax.swing.ActionMap;
- import javax.swing.Box;
- import javax.swing.BoxLayout;
- import javax.swing.GrayFilter;
- import javax.swing.ImageIcon;
- import javax.swing.InputMap;
- import javax.swing.JButton;
- import javax.swing.JCheckBoxMenuItem;
- import javax.swing.JComboBox;
- import javax.swing.JComponent;
- import javax.swing.JDialog;
- import javax.swing.JFileChooser;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JPopupMenu;
- import javax.swing.JScrollPane;
- import javax.swing.JSplitPane;
- import javax.swing.JTabbedPane;
- import javax.swing.JTextField;
- import javax.swing.JToolBar;
- import javax.swing.JTree;
- import javax.swing.KeyStroke;
- import javax.swing.SwingUtilities;
- import javax.swing.filechooser.FileNameExtensionFilter;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeModel;
- import javax.swing.tree.TreeCellRenderer;
- import org.apache.commons.compress.archivers.ArchiveException;
- import com.google.gson.JsonParseException;
- import classes.AbstractCanvasObject;
- import classes.Category;
- import classes.Edge;
- import classes.GroupNode;
- import classes.HolonObject;
- import classes.HolonSwitch;
- import classes.IdCounter;
- import classes.IdCounter.CounterType;
- import interfaces.GraphEditable;
- import ui.controller.Control;
- import ui.model.DecoratedState;
- import ui.model.Model;
- import ui.model.Model.FairnessModel;
- import ui.view.canvas.AbstractCanvas;
- import ui.view.canvas.Canvas;
- import ui.view.canvas.GroupNodeCanvas;
- import ui.view.component.ButtonTabComponent;
- import ui.view.dialog.AboutUsPopUp;
- import ui.view.dialog.AddObjectPopUp;
- import ui.view.dialog.BackgroundPopUp;
- import ui.view.dialog.CanvasResizePopUp;
- import ui.view.dialog.CreateNewDialog;
- import ui.view.dialog.CreateNewDialog.Option;
- import ui.view.inspector.Inspector;
- import ui.view.inspector.UnitGraph;
- import ui.view.dialog.EditEdgesPopUp;
- import ui.view.dialog.SearchPopUp;
- import ui.view.window.AddOnWindow;
- import ui.view.window.FlexWindow;
- import ui.view.window.Outliner;
- import utility.ImageImport;
- public class GUI {
- static final Color PALE_RED = new Color(255, 192, 192);
-
- private final JMenuBar menuBar = new JMenuBar();
- private final JMenu mnNewMenu = new JMenu("File");
- private final JMenu mnNewMenuEdit = new JMenu("Edit");
- private final JMenu mnNewMenuOptions = new JMenu("Options");
- private final JMenu mnNewMenuView = new JMenu("View");
- private final JMenu menuWindow = new JMenu("Window");
-
- private final JMenu mnHelp = new JMenu("Help");
-
- private final JMenuItem mntmIntroduction = new JMenuItem("Introduction");
-
- private final JMenuItem mntmUserManual = new JMenuItem("User Manual");
-
- private final JMenuItem mntmAlgorithmHelp = new JMenuItem("Algorithm Introduction");
-
- private final JMenuItem mntmCodeDoc = new JMenuItem("Code Documentation");
-
- private final JMenuItem mntmAboutUs = new JMenuItem("About Us");
-
- private final JCheckBoxMenuItem showSupplyBarsCheckBox = new JCheckBoxMenuItem("Show supply bars.");
-
- private final JMenu mnFairnessModel = new JMenu("Fairness Model");
-
- private final JMenuItem mntmFairMinFirst = new JMenuItem("Minimum demand first");
-
- private final JMenuItem mntmFairAlleEqual = new JMenuItem("Equal supply for everyone");
- private final JMenuItem mntmOpen = new JMenuItem("Open");
- private final JMenuItem mntmNew = new JMenuItem("New");
- private final JMenuItem mntmSave = new JMenuItem("Save");
- private final JMenuItem mntmCanvasSize = new JMenuItem("Set View Size");
- private final JMenuItem mntmBackground = new JMenuItem("Set Background Image");
- private final JSplitPane splitPane = new JSplitPane();
- private final JSplitPane splitPane1 = new JSplitPane();
-
-
- private final JPanel myPanel = new JPanel(new BorderLayout());
- private final JTabbedPane tabbedPaneInnerOriginal = new JTabbedPane(JTabbedPane.TOP);
-
- private final JScrollPane canvasSP = new JScrollPane();
- private final JScrollPane scrollPane1 = new JScrollPane();
-
-
-
- private final JTabbedPane tabbedPaneOriginal = new JTabbedPane(JTabbedPane.TOP);
- private final JPopupMenu popmenuEdit = new JPopupMenu();
- private final JMenuItem editItem = new JMenuItem("Edit Object");
- private final JLabel elementGraph = new JLabel("None ");
- private final JTree categoryTree = new JTree();
-
- private final Inspector inspector;
- private final JSplitPane splitHolonElPro = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- private final JSplitPane splitGraphHolonEl = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- private final int distanceBetweenElementsAndGraph = 350;
-
- private final JScrollPane scrollProperties = new JScrollPane();
-
- private final Model model;
- private final Control controller;
-
-
- private final JPanel panel = new JPanel();
- private final JPanel panelHolonEl = new JPanel();
-
- private final JButton btnAdd = new JButton();
- private final JPopupMenu btnAddPopUp = new JPopupMenu("Newacac");
- private final JMenuItem mItemNew = new JMenuItem("New..");
- private final JMenuItem mItemCategory = new JMenuItem("Category");
- private final JMenuItem mItemObject = new JMenuItem("Object");
- private final JMenuItem mItemSwitch = new JMenuItem("Switch");
- private final JButton btnDel = new JButton();
- private final JToolBar toolBar = new JToolBar();
- private final JToolBar toolBarHolonEl = new JToolBar();
-
- private final Canvas canvas;
- private final UnitGraph unitGraph;
-
- private final JTextField unitGraphLocalPeriod = new JTextField(6);
- private final JMenuItem mntmUndo = new JMenuItem("Undo");
- private final JMenuItem mntmRedo = new JMenuItem("Redo");
- private final JMenuItem mntmEditEdges = new JMenuItem("Edge Properties");
- private final JMenuItem mntmFindReplace = new JMenuItem("Find/ Replace");
- private final JMenuItem mntmAlignAll = new JMenuItem("Align All");
- private final JMenuItem mntmResetCategory = new JMenuItem("Reset Categories");
-
- private JFrame holegJFrame;
-
- private JTabbedPane tabTemp;
- private String catOfObjToBeEdited;
- private GroupNodeCanvas unc;
- private JPanel contentPane;
-
- private AddObjectPopUp addObjectPopUP;
- private AboutUsPopUp aboutUsPopUp;
-
- private boolean dragging = false;
- private String actualObjectClicked;
- private Image img = null;
- private AbstractCanvasObject tempCps = null;
-
- private TimePanel timePanel;
- public TimePanel getTimePanel() {
- return timePanel;
- }
- private AbstractCanvasObject temp = null;
- private String warningText = "Warning";
- private String saveBeforeNew = "Do you want to save your current data?";
- private String eraseCategory = "Do you really want to delete the Category ";
- private String selectObjBeforeErase = "Please select a Category or an Object in the left library in order to delete something.";
- private List<Outliner> outlinerList = new ArrayList<Outliner>();
- private List<FlexWindow> flexList = new ArrayList<FlexWindow>();
- private JMenuItem removeItem = new JMenuItem("Remove");
-
- GUI(Control control) {
- this.controller = control;
- this.model = control.getModel();
- inspector = new Inspector(control);
- control.setGui(this);
- control.calculateStateAndVisualForCurrentTimeStep();
- this.unitGraph = new UnitGraph(control);
- this.canvas = new Canvas(model, control, unitGraph);
- initialize();
- updateCategories(model.getCategories());
- control.OnCategoryChanged.addListener(() -> this.updateCategoryUI(model.getCategories()));
- }
-
- private void initialize() {
- holegJFrame = new JFrame();
- holegJFrame.setTitle("HOLEG Simulator");
-
- ArrayList<Integer> savedWindowDim = controller.loadSavedWindowDimensionsIfExistent();
- if (savedWindowDim.size() == 4) {
- holegJFrame.setBounds(savedWindowDim.get(0), savedWindowDim.get(1), savedWindowDim.get(2),
- savedWindowDim.get(3));
- }
-
-
-
- if (savedWindowDim.size() != 4 || !isUpperPanelInsideBounds()) {
- holegJFrame.setBounds(100, 100, 1000, 800);
- holegJFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
- }
- holegJFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
- holegJFrame.addWindowListener(new java.awt.event.WindowAdapter() {
- @Override
- public void windowClosing(java.awt.event.WindowEvent windowEvent) {
- if (JOptionPane.showConfirmDialog(holegJFrame, "Are you sure you want to exit?", "HOLEG",
- JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
- controller
- .deleteDirectory(new File(System.getProperty("user.home") + "/.config/HolonGUI/Autosave"));
-
-
-
- try {
- controller.savePosAndSizeOfWindow(holegJFrame.getX(), holegJFrame.getY(),
- holegJFrame.getWidth(), holegJFrame.getHeight());
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.exit(1);
- }
- System.exit(0);
- }
- });
- contentPane = (JPanel) holegJFrame.getContentPane();
- int condition = JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT;
- InputMap inputMap = contentPane.getInputMap(condition);
- ActionMap actionMap = contentPane.getActionMap();
- String cntrlZDown = "controlZ";
- inputMap.put(KeyStroke.getKeyStroke("control Z"), cntrlZDown);
- actionMap.put(cntrlZDown, new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- controller.loadAutoSave(controller.getUndoSave());
- closeInvalidUpperNodeTabs();
- controller.calculateStateAndVisualForCurrentTimeStep();
- canvas.repaint();
- updateUpperNodes();
- } catch (IOException eex) {
- eex.printStackTrace();
- }
- }
- });
- String cntrlYDown = "controlY";
- inputMap.put(KeyStroke.getKeyStroke("control Y"), cntrlYDown);
- actionMap.put(cntrlYDown, new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- controller.loadAutoSave(controller.getRedoSave());
- closeInvalidUpperNodeTabs();
- controller.calculateStateAndVisualForCurrentTimeStep();
- canvas.repaint();
- updateUpperNodes();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- });
- String cntrlADown = "controlA";
- inputMap.put(KeyStroke.getKeyStroke("control A"), cntrlADown);
- AbstractAction controlA = new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- chooseTabTemp();
- model.getSelectedObjects().clear();
-
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
- if (canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- GroupNodeCanvas uNC = (GroupNodeCanvas) canvasOrUpperNodeCanvas;
- controller.addSelectedObjects(uNC.getGroupNode().getNodes());
- uNC.repaint();
-
- } else if (canvasOrUpperNodeCanvas instanceof Canvas) {
- controller.addSelectedObjects(model.getObjectsOnCanvas());
- canvas.repaint();
- }
- controller.getObjectsInDepth();
- }
- };
- actionMap.put(cntrlADown, controlA);
- String delDown = "delete";
- inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0, false), delDown);
- actionMap.put(delDown, new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- chooseTabTemp();
-
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
-
-
- boolean wasProducerDeleted = true;
- if (canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- GroupNodeCanvas uNC = (GroupNodeCanvas) canvasOrUpperNodeCanvas;
- for (AbstractCanvasObject cps : model.getSelectedObjects()) {
- if (uNC.getGroupNode().getNodes().contains(cps)) {
- controller.delObjUpperNode(cps, uNC.getGroupNode());
- unc.setToolTip(false);
-
- removeUpperNodeTab(cps);
- }
- }
- uNC.repaint();
- controller.clearSelection();
-
- } else if (canvasOrUpperNodeCanvas instanceof Canvas) {
-
- Edge edgeHighlight = model.getSelectedEdge();
- if (edgeHighlight != null) {
- controller.removeEdgesOnCanvas(edgeHighlight);
- ((Canvas) canvasOrUpperNodeCanvas).edgeHighlight = null;
- }
- canvas.setToolTip(false);
- for (AbstractCanvasObject cps : model.getSelectedObjects()) {
- controller.delCanvasObject(cps, false);
-
- removeUpperNodeTab(cps);
- }
- controller.clearSelection();
- controller.tryAutoSave();
- canvas.repaint();
- }
-
- if (wasProducerDeleted) {
- controller.resetSimulation();
- controller.calculateStateAndVisualForCurrentTimeStep();
- }
- model.getSelectedObjects().clear();
- }
- });
- String cntrlFDown = "controlF";
- inputMap.put(KeyStroke.getKeyStroke("control F"), cntrlFDown);
- actionMap.put(cntrlFDown, new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- SearchPopUp dialog = new SearchPopUp(controller, canvas, holegJFrame);
- dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
- dialog.setVisible(true);
- }
- });
- String cntrlCDown = "controlC";
- inputMap.put(KeyStroke.getKeyStroke("control C"), cntrlCDown);
- AbstractAction controlC = new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- chooseTabTemp();
- System.out.println("heiCopy - control C");
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- if (!model.getSelectedObjects().isEmpty()) {
- if (scrollPane.getViewport().getComponent(0) instanceof GroupNodeCanvas)
- controller.copy(((GroupNodeCanvas) scrollPane.getViewport().getComponent(0)).getGroupNode());
- else
- controller.copy(null);
- if (!model.getClipboradObjects().isEmpty()) {
- canvas.itemPaste.setEnabled(true);
- }
- }
- }
- };
- actionMap.put(cntrlCDown, controlC);
- String cntrlVDown = "controlV";
- inputMap.put(KeyStroke.getKeyStroke("control V"), cntrlVDown);
- AbstractAction controlV = new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- tabTemp = null;
- if (tabbedPaneOriginal.getMousePosition() != null) {
- tabTemp = tabbedPaneOriginal;
- } else {
- }
- if (tabTemp == null)
- return;
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
- if (tabTemp != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- controller.paste(((GroupNodeCanvas) canvasOrUpperNodeCanvas).getGroupNode(),
- canvasOrUpperNodeCanvas.getMousePosition());
- controller.calculateStateAndVisualForCurrentTimeStep();
- scrollPane.getViewport().getComponent(0).repaint();
- } else {
- controller.paste(null, canvas.getMousePosition());
- controller.calculateStateAndVisualForCurrentTimeStep();
- canvas.repaint();
- }
- } catch (HeadlessException | JsonParseException | UnsupportedFlavorException | IOException e1) {
- JLabel message = new JLabel("The Clipboard information cannot be pasted into Application.");
- JOptionPane.showMessageDialog(holegJFrame, message, "", JOptionPane.ERROR_MESSAGE);
- }
- }
- };
- actionMap.put(cntrlVDown, controlV);
- String cntrlXDown = "controlX";
- inputMap.put(KeyStroke.getKeyStroke("control X"), cntrlXDown);
- AbstractAction controlX = new AbstractAction() {
- private static final long serialVersionUID = 1L;
- @Override
- public void actionPerformed(ActionEvent e) {
- chooseTabTemp();
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- if (!model.getSelectedObjects().isEmpty()) {
- if (scrollPane.getViewport().getComponent(0) instanceof GroupNodeCanvas) {
- controller.cut(((GroupNodeCanvas) scrollPane.getViewport().getComponent(0)).getGroupNode());
- controller.calculateStateAndVisualForCurrentTimeStep();
- scrollPane.getViewport().getComponent(0).repaint();
- } else {
- controller.cut(null);
- controller.calculateStateAndVisualForCurrentTimeStep();
- canvas.repaint();
- }
- if (!model.getClipboradObjects().isEmpty()) {
- canvas.itemPaste.setEnabled(true);
- }
- }
- }
- };
- actionMap.put(cntrlXDown, controlX);
- holegJFrame.setJMenuBar(menuBar);
- holegJFrame.setIconImage(ImageImport.loadImage("/Images/Holeg.png", 30, 30));
- menuBar.add(mnNewMenu);
- mnNewMenu.add(mntmNew);
- mnNewMenu.add(mntmOpen);
- mnNewMenu.add(mntmSave);
- menuBar.add(mnNewMenuEdit);
- mnNewMenuEdit.add(mntmUndo);
- mnNewMenuEdit.add(mntmRedo);
- mntmFindReplace.addActionListener(actionEvent -> {
- try {
- SearchPopUp dialog = new SearchPopUp(controller, canvas, holegJFrame);
- dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
- dialog.setVisible(true);
- controller.getObjectsInDepth();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- });
- mnNewMenuEdit.add(mntmFindReplace);
- mnNewMenuEdit.add(mntmEditEdges);
- mntmEditEdges.addActionListener(actionEvent -> {
- EditEdgesPopUp edgePopUp = new EditEdgesPopUp(holegJFrame);
- edgePopUp.setCanvas(canvas);
- edgePopUp.setController(controller);
- edgePopUp.setVisible(true);
- });
-
- mnNewMenuEdit.add(mntmAlignAll);
- mntmAlignAll.addActionListener(actionEvent -> {
-
-
- AbstractCanvas activeCanvas = ((AbstractCanvas) getScrollPaneFromTabbedPane().getViewport()
- .getComponent(0));
- if (activeCanvas != null) {
- activeCanvas.tryToAlignObjects();
- activeCanvas.repaint();
- }
- });
- menuBar.add(mnNewMenuOptions);
- mnNewMenuOptions.add(mntmResetCategory);
- mntmResetCategory.addActionListener(actionEvent -> {
- ArrayList<Category> cat = model.getCategories();
- try {
- while (!cat.isEmpty()) {
- controller.deleteCategory(cat.get(0).getName());
- }
- controller.resetCategorys();
- } catch (Exception e2) {
- System.out.println(e2.getMessage());
- }
- categoryTree.revalidate();
- categoryTree.repaint();
- });
-
- mnNewMenuOptions.add(mnFairnessModel);
- mnFairnessModel.add(mntmFairMinFirst);
- mntmFairMinFirst.setForeground(Color.BLUE);
- mntmFairMinFirst
- .setToolTipText("HolonObjects with the smallest mininum Demand will be partially supplied first.\n"
- + "After that as many HolonObjects as possible will get fully supplied.");
- mntmFairMinFirst.addActionListener(arg0 -> {
- controller.setFairnessModel(FairnessModel.MininumDemandFirst);
- mntmFairMinFirst.setForeground(Color.BLUE);
- mntmFairAlleEqual.setForeground(mnFairnessModel.getForeground());
- controller.calculateStateAndVisualForCurrentTimeStep();
-
- Component canvasOrUpperNodeCanvas = getScrollPaneFromTabbedPane().getViewport().getComponent(0);
- if (canvasOrUpperNodeCanvas != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- ((GroupNodeCanvas) canvasOrUpperNodeCanvas).repaint();
- }
- });
- mnFairnessModel.add(mntmFairAlleEqual);
- mntmFairAlleEqual.setToolTipText("HolonObjects will all get the same amount of energy.");
- mntmFairAlleEqual.addActionListener(arg0 -> {
- controller.setFairnessModel(FairnessModel.AllEqual);
- mntmFairAlleEqual.setForeground(Color.BLUE);
- mntmFairMinFirst.setForeground(mnFairnessModel.getForeground());
- controller.calculateStateAndVisualForCurrentTimeStep();
-
- Component canvasOrUpperNodeCanvas = getScrollPaneFromTabbedPane().getViewport().getComponent(0);
- if (canvasOrUpperNodeCanvas != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- ((GroupNodeCanvas) canvasOrUpperNodeCanvas).repaint();
- }
- });
- menuBar.add(mnNewMenuView);
- mnNewMenuView.add(mntmCanvasSize);
- mntmCanvasSize.addActionListener(actionEvent -> {
- CanvasResizePopUp popUp = new CanvasResizePopUp(model, controller, canvas, this.tabbedPaneInnerOriginal,
- holegJFrame);
- popUp.setVisible(true);
- });
- tabbedPaneInnerOriginal.addChangeListener(change -> {
- controller.clearSelection();
- });
- mnNewMenuView.add(mntmCanvasSize);
-
- mnNewMenuView.add(showSupplyBarsCheckBox);
- showSupplyBarsCheckBox.setSelected(true);
- showSupplyBarsCheckBox.addActionListener(arg0 -> {
- controller.setShowSupplyBars(showSupplyBarsCheckBox.isSelected());
- canvas.repaint();
-
- JScrollPane spane = getScrollPaneFromTabbedPane();
- if (spane != null) {
- Component canvasOrUpperNodeCanvas = spane.getViewport().getComponent(0);
- if (canvasOrUpperNodeCanvas != null && canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- ((GroupNodeCanvas) canvasOrUpperNodeCanvas).repaint();
- }
- }
- });
- initWindowMenu();
- mnNewMenuView.add(mntmBackground);
- mntmBackground.addActionListener(actionEvent -> {
- tabTemp = tabbedPaneOriginal;
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- if (scrollPane.getViewport().getComponent(0) instanceof Canvas) {
- BackgroundPopUp backgroundDialog = new BackgroundPopUp(model, controller, canvas, null, holegJFrame);
- backgroundDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
- backgroundDialog.setVisible(true);
- } else if (scrollPane.getViewport().getComponent(0) instanceof GroupNodeCanvas) {
- GroupNodeCanvas uNodeCanvas = (GroupNodeCanvas) (scrollPane.getViewport().getComponent(0));
- BackgroundPopUp backgroundDialog = new BackgroundPopUp(model, controller, null,
- uNodeCanvas.getGroupNode(), holegJFrame);
- backgroundDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
- backgroundDialog.setVisible(true);
- uNodeCanvas.repaint();
- }
- });
-
- menuBar.add(mnHelp);
- mnHelp.add(mntmIntroduction);
- mnHelp.add(mntmUserManual);
- mnHelp.add(mntmAlgorithmHelp);
- mnHelp.add(mntmCodeDoc);
- mnHelp.add(mntmAboutUs);
- canvas.setBackground(Color.WHITE);
- canvas.setPreferredSize(new Dimension(model.getCanvasX(), model.getCanvasY()));
-
- panelHolonEl.setLayout(new BoxLayout(panelHolonEl, BoxLayout.X_AXIS));
- toolBarHolonEl.setFloatable(false);
- panelHolonEl.add(toolBarHolonEl);
-
-
-
-
- unitGraphLocalPeriod.addKeyListener(new KeyAdapter() {
- @Override
- public void keyReleased(KeyEvent e) {
- try {
- int localLength = Integer.parseInt(unitGraphLocalPeriod.getText());
- unitGraphLocalPeriod.setBackground(Color.WHITE);
-
- if (e.getKeyCode() == KeyEvent.VK_ENTER)
- unitGraph.setLocalPeriod(localLength);
- } catch (NumberFormatException ex) {
- unitGraphLocalPeriod.setBackground(PALE_RED);
- }
- }
- });
-
- holegJFrame.getContentPane().setLayout(new BorderLayout(0, 0));
-
-
- inputMap = categoryTree.getInputMap();
- inputMap.put(KeyStroke.getKeyStroke("control C"), cntrlCDown);
- inputMap.put(KeyStroke.getKeyStroke("control V"), cntrlVDown);
- inputMap.put(KeyStroke.getKeyStroke("control X"), cntrlXDown);
- inputMap.put(KeyStroke.getKeyStroke("control A"), cntrlADown);
- TreeCellRenderer customRenderer = new TreeCellRenderer() {
- @Override
- public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
- boolean leaf, int row, boolean hasFocus) {
- JLabel label = new JLabel();
- Image imgR;
- if (leaf) {
- for (Category cat : model.getCategories()) {
- for (AbstractCanvasObject cps : cat.getObjects()) {
- if (value.toString().compareTo(cps.getName()) == 0) {
- imgR = ImageImport.loadImage(cps.getImage(), 50, 50);
- if (imgR != null) {
- label.setIcon(new ImageIcon(imgR));
- }
- label.setText(cps.getName());
- }
- }
- }
- }
- tree.setRowHeight(50);
- if (hasFocus) {
- label.setForeground(new Color(0, 0, 255));
- label.setOpaque(true);
- }
- if (label.getText().length() == 0) {
- label.setText(value.toString());
- if (value.toString().compareTo("Categories") != 0) {
- label.setIcon(new ImageIcon(ImageImport.loadImage("/Images/folder.png")));
- }
- }
- return label;
- }
- };
- categoryTree.setCellRenderer(customRenderer);
- categoryTree.addMouseMotionListener(new MouseMotionAdapter() {
- public void mouseDragged(MouseEvent e) {
- checkForDragAndDrop(e);
- }
-
- private void checkForDragAndDrop(MouseEvent e) {
- try {
-
- if (!dragging)
- return;
-
- chooseTabTemp();
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- if (scrollPane == null)
- return;
- Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
-
- if (canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- GroupNodeCanvas unc = (GroupNodeCanvas) canvasOrUpperNodeCanvas;
- if (unc.getMousePosition() == null)
- return;
- int x = (int) unc.getMousePosition().getX() + 16;
- int y = (int) unc.getMousePosition().getY() + 16;
-
- unc.checkForReplacement(x, y);
-
- unc.invalidate();
- unc.repaint();
- } else {
- if (canvas.getMousePosition() == null)
- return;
- int x = (int) canvas.getMousePosition().getX() + 16;
- int y = (int) canvas.getMousePosition().getY() + 16;
-
- canvas.checkForReplacement(x, y);
-
- canvas.invalidate();
- canvas.repaint();
- }
- contentPane.updateUI();
- } catch (Exception eex) {
- eex.printStackTrace();
- }
- }
- });
- categoryTree.addMouseListener(new MouseAdapter() {
- public void mouseReleased(MouseEvent e) {
- try {
- if (dragging) {
- chooseTabTemp();
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- Component canvasOrUpperNodeCanvas = scrollPane.getViewport().getComponent(0);
- if (canvasOrUpperNodeCanvas instanceof GroupNodeCanvas) {
- GroupNodeCanvas unc = (GroupNodeCanvas) canvasOrUpperNodeCanvas;
- int x = (int) unc.getMousePosition().getX() + 16;
- int y = (int) unc.getMousePosition().getY() + 16;
- AbstractCanvasObject h = null;
- if (tempCps instanceof HolonObject) {
- h = new HolonObject((HolonObject) tempCps);
- }
- if (tempCps instanceof HolonSwitch) {
- h = new HolonSwitch(tempCps);
- }
- h.setPosition(x, y);
-
- if (unc.mayBeReplaced != null && unc.mayBeReplaced instanceof GroupNode) {
- unc.closeUpperNodeTab(unc.mayBeReplaced.getId());
- }
- controller.addObjUpperNode(h, unc.getGroupNode());
-
- unc.mayBeReplaced = null;
- unc.invalidate();
- controller.calculateStateAndVisualForCurrentTimeStep();
- unc.repaint();
- unc.setXY((int) canvas.getMousePosition().getX(), (int) canvas.getMousePosition().getY());
- } else {
- int x = (int) canvas.getMousePosition().getX() + 16;
- int y = (int) canvas.getMousePosition().getY() + 16;
- AbstractCanvasObject h = null;
- if (tempCps instanceof HolonObject) {
- h = new HolonObject((HolonObject) tempCps);
- }
- if (tempCps instanceof HolonSwitch) {
- h = new HolonSwitch(tempCps);
- }
- h.setPosition(x, y);
-
- if (canvas.mayBeReplaced != null && canvas.mayBeReplaced instanceof GroupNode) {
- canvas.closeUpperNodeTab(canvas.mayBeReplaced.getId());
- }
- controller.addObjectCanvas(h);
-
- canvas.mayBeReplaced = null;
- canvas.invalidate();
- canvas.setXY((int) canvas.getMousePosition().getX(),
- (int) canvas.getMousePosition().getY());
- canvas.repaint();
- }
- controller.calculateStateAndVisualForCurrentTimeStep();
- contentPane.updateUI();
- dragging = false;
- }
- } catch (Exception eex) {
- }
- holegJFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
- }
- });
- popmenuEdit.add(editItem);
- popmenuEdit.add(removeItem);
- editItem.setEnabled(false);
- editItem.addActionListener(actionEvent -> {
- });
- categoryTree.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e) {
- try {
- actualObjectClicked = categoryTree.getPathForLocation(e.getX(), e.getY()).getLastPathComponent()
- .toString();
-
-
- DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) categoryTree
- .getPathForLocation(e.getX(), e.getY()).getLastPathComponent();
- if (selectedNode.getLevel() == 2) {
- controller.searchCategoryObject(selectedNode.getParent().toString(), selectedNode.toString());
-
-
-
-
-
-
- }
- if (SwingUtilities.isRightMouseButton(e)) {
- for (Category cat : model.getCategories()) {
- for (AbstractCanvasObject cps : cat.getObjects()) {
- if (actualObjectClicked.compareTo(cps.getName()) == 0
- && !(cps instanceof HolonSwitch)) {
- editItem.setEnabled(true);
- popmenuEdit.show(e.getComponent(), e.getX(), e.getY());
- catOfObjToBeEdited = selectedNode.getParent().toString();
- tempCps = cps;
- }
- }
- }
- } else {
- for (Category cat : model.getCategories()) {
- for (AbstractCanvasObject cps : cat.getObjects()) {
- if (actualObjectClicked.compareTo(cps.getName()) == 0) {
- File checkPath = new File(cps.getImage());
- if (checkPath.exists()) {
- img = new ImageIcon(cps.getImage()).getImage().getScaledInstance(32, 32,
- java.awt.Image.SCALE_SMOOTH);
- } else {
- img = ImageImport.loadImage(cps.getImage(), 32, 32);
- }
- tempCps = cps;
- dragging = true;
- Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0, 0),
- "Image");
- holegJFrame.setCursor(cursor);
- }
- }
- }
- }
- } catch (Exception eex) {
- }
- }
- });
- editItem.addActionListener(actionEvent -> {
-
-
-
- System.out.println("Edit");
- addObjectPopUP = new AddObjectPopUp(true, tempCps, catOfObjToBeEdited, holegJFrame);
- addObjectPopUP.setCategory(catOfObjToBeEdited);
- addObjectPopUP.setController(controller);
- addObjectPopUP.setVisible(true);
- });
- removeItem.addActionListener(actionEvent -> {
-
- try {
- System.out.println("catOfObjToBeEdited:" + catOfObjToBeEdited + ", tempCps:" + tempCps);
- controller.delObjectCategory(catOfObjToBeEdited, tempCps.getName());
- } catch (IOException e) {
- System.err.println("IOException");
- e.printStackTrace();
- }
- });
- scrollPane1.setViewportView(categoryTree);
- scrollPane1.setColumnHeaderView(panel);
- panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
- toolBar.setAlignmentX(Component.LEFT_ALIGNMENT);
- toolBar.setFloatable(false);
- panel.add(toolBar);
- btnAddPopUp.add(mItemNew);
- mItemNew.addActionListener(actionEvent -> {
- new CreateNewDialog(controller, holegJFrame);
- });
- btnAddPopUp.addSeparator();
- btnAddPopUp.add(mItemCategory);
- mItemCategory.addActionListener(actionEvent -> {
- new CreateNewDialog(controller, Option.Category, holegJFrame);
- });
- btnAddPopUp.add(mItemObject);
- mItemObject.addActionListener(actionEvent -> {
- new CreateNewDialog(controller, Option.Object, holegJFrame);
- });
- btnAddPopUp.add(mItemSwitch);
- mItemSwitch.addActionListener(actionEvent -> {
- new CreateNewDialog(controller, Option.Switch, holegJFrame);
- });
- btnAdd.addActionListener(actionEvent -> btnAddPopUp.show(btnAdd, -1, +20));
- btnAdd.setIcon(new ImageIcon(ImageImport.loadImage("Images/plus.png", 16, 16)));
- btnAdd.setToolTipText("<html><b>New</b><br>Add a new Category or Item to the library.</html>");
- toolBar.add(btnAdd);
-
-
- String tkWikiWebpage = "https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons/wiki/";
-
- mntmIntroduction.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- openWebpage(tkWikiWebpage + "Introduction+V2.1");
- }
- });
-
- mntmUserManual.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- openWebpage(tkWikiWebpage + "User+Manual+V2.1");
- }
- });
-
- mntmAlgorithmHelp.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- openWebpage(tkWikiWebpage + "Algorithms+V2.1");
- }
- });
-
- mntmCodeDoc.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- openWebpage(tkWikiWebpage + "Code+documentation+V2.1");
- }
- });
-
- mntmAboutUs.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- aboutUsPopUp = new AboutUsPopUp(holegJFrame);
- aboutUsPopUp.setVisible(true);
- }
- });
-
- btnDel.addActionListener(actionEvent -> {
- Object nodeInfo = categoryTree.getLastSelectedPathComponent();
- if (nodeInfo != null) {
- DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) nodeInfo;
- String nodeName = selectedNode.getUserObject().toString();
- int depthOfNode = selectedNode.getLevel();
- try {
- switch (depthOfNode) {
- case 1:
- int dialogResult = JOptionPane.showConfirmDialog(holegJFrame, eraseCategory + nodeName + "?",
- warningText, JOptionPane.YES_NO_OPTION);
- if (dialogResult == JOptionPane.YES_OPTION) {
- controller.deleteCategory(nodeName);
- }
- break;
- case 2:
- DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();
- controller.delObjectCategory(parent.getUserObject().toString(), nodeName);
- break;
- default:
- JOptionPane.showMessageDialog(holegJFrame, selectObjBeforeErase);
- }
- } catch (Exception e2) {
- }
- } else {
- JOptionPane.showMessageDialog(holegJFrame, selectObjBeforeErase);
- }
- categoryTree.repaint();
- });
- btnDel.setIcon(new ImageIcon(ImageImport.loadImage("Images/minus.png", 16, 16)));
- btnDel.setToolTipText("<html><b>Delete</b><br>Removes a Category or a Category Item.</html>");
- toolBar.add(btnDel);
- holegJFrame.getContentPane().add(splitPane);
- mntmNew.addActionListener(actionEvent -> {
- if (model.getObjectsOnCanvas().size() != 0) {
- int newWarning = JOptionPane.YES_NO_OPTION;
- int dialogForNewWarning = JOptionPane.showConfirmDialog(holegJFrame, saveBeforeNew, warningText,
- newWarning);
- if (dialogForNewWarning == JOptionPane.YES_OPTION) {
- mntmSave.doClick();
- }
- }
-
- while (tabbedPaneInnerOriginal.getTabCount() > 1) {
- tabbedPaneInnerOriginal.remove(1);
- }
- controller.clearSelection();
- model.getEdgesOnCanvas().clear();
- model.getObjectsOnCanvas().clear();
- controller.OnSelectionChanged.broadcast();
- controller.setSelectedObjectID(0);
- controller.setSelecteEdge(null);
- controller.setCurIteration(0);
- elementGraph.setText("None");
- canvas.tempCps = null;
- canvas.repaint();
- IdCounter.resetObjectCounter(CounterType.Object);
- IdCounter.resetObjectCounter(CounterType.Element);
- controller.calculateStateAndVisualForCurrentTimeStep();
- });
- mntmOpen.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent evt) {
- menuFileExitActionPerformed();
- }
- private void menuFileExitActionPerformed() {
- JFileChooser fileChooser = new JFileChooser();
- fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir") + "/exampleNetworks/"));
- FileNameExtensionFilter holonFilter = new FileNameExtensionFilter("Holon Save File(*.holon)", "holon");
- fileChooser.setFileFilter(holonFilter);
- if (fileChooser.showOpenDialog(holegJFrame) == JFileChooser.APPROVE_OPTION) {
- File file = fileChooser.getSelectedFile();
- try {
- while (tabbedPaneInnerOriginal.getTabCount() > 1) {
- tabbedPaneInnerOriginal.remove(1);
- }
- model.getSelectedObjects().clear();
- controller.loadFile(file.getAbsolutePath());
- canvas.repaint();
- categoryTree.repaint();
- controller.calculateStateAndVisualForCurrentTimeStep();
- } catch (IOException | ArchiveException e) {
- e.printStackTrace();
- JLabel message = new JLabel("The savefile is corrupt and cannot be opened.");
- JOptionPane.showMessageDialog(holegJFrame, message, "", JOptionPane.ERROR_MESSAGE);
- }
- }
- }
- });
- mntmSave.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent evt) {
- menuSaveActionPerformed();
- }
- private void menuSaveActionPerformed() {
- JFileChooser fileChooser = new JFileChooser();
- FileNameExtensionFilter holonFilter = new FileNameExtensionFilter("Holon Save File(*.holon)", "holon");
- fileChooser.setFileFilter(holonFilter);
- if (fileChooser.showSaveDialog(holegJFrame) == JFileChooser.APPROVE_OPTION) {
- File selectedFile = fileChooser.getSelectedFile();
- String fileName = selectedFile.getName();
- String fullPath = fileChooser.getSelectedFile().getPath();
- if (fileChooser.getFileFilter().equals(holonFilter)) {
- if (!fileName.contains("."))
- fullPath += ".holon";
- }
- if (!fullPath.endsWith(".holon")) {
- String suffix = fullPath.substring(fullPath.lastIndexOf("."), fullPath.length());
- String[] options = new String[] { "keep .holon", "use " + suffix };
- JLabel message = new JLabel(
- "Are you sure to use the extension \"" + suffix + "\" instead of \".holon\"?");
- int response = JOptionPane.showOptionDialog(holegJFrame, message, "",
- JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
- if (response == 0)
- fullPath = fullPath.replace(suffix, ".holon");
- }
- try {
- controller.saveFile(new File(fullPath).getAbsolutePath());
- } catch (IOException | ArchiveException e) {
- e.printStackTrace();
- }
- }
- }
- });
- mntmUndo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent evt) {
- menuUndoActionPerformed();
- }
- private void menuUndoActionPerformed() {
- try {
- controller.loadAutoSave(controller.getUndoSave());
- closeInvalidUpperNodeTabs();
- controller.calculateStateAndVisualForCurrentTimeStep();
- canvas.repaint();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- });
- mntmRedo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent evt) {
- menuRedoActionPerformed();
- }
- private void menuRedoActionPerformed() {
- try {
- controller.loadAutoSave(controller.getRedoSave());
- closeInvalidUpperNodeTabs();
- controller.calculateStateAndVisualForCurrentTimeStep();
- canvas.repaint();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- });
- timePanel = new TimePanel(controller);
- timePanel.setBorder(null);
- timePanel.getTimeSlider().addChangeListener(changeEvent -> {
-
- controller.calculateStateAndVisualForTimeStep(timePanel.getTimeSlider().getValue());
- unitGraph.repaint();
- contentPane.updateUI();
- });
- splitPane1.setMinimumSize(new Dimension(0, 25));
- splitPane.setRightComponent(splitPane1);
- splitPane.setDividerLocation(200);
- splitPane1.setDividerLocation(500);
- splitPane.setLeftComponent(scrollPane1);
- tabbedPaneOriginal.addTab("View", tabbedPaneInnerOriginal);
- myPanel.add(canvasSP, BorderLayout.CENTER);
- tabbedPaneInnerOriginal.addTab("Main Grid", myPanel);
- splitPane1.setLeftComponent(tabbedPaneOriginal);
- splitPane1.setRightComponent(splitHolonElPro);
- splitPane1.setResizeWeight(0.9);
- splitHolonElPro.setDividerLocation(700);
-
- splitHolonElPro.setTopComponent(splitGraphHolonEl);
-
- splitHolonElPro.setBottomComponent(scrollProperties);
- splitGraphHolonEl.setTopComponent(inspector);
- splitGraphHolonEl.setDividerLocation(distanceBetweenElementsAndGraph);
- canvasSP.setViewportView(canvas);
- tabbedPaneOriginal.setBorder(null);
- scrollProperties.setBorder(null);
- splitPane.setBorder(null);
- splitPane1.setBorder(null);
- splitHolonElPro.setBorder(null);
- splitGraphHolonEl.setBorder(null);
- panelHolonEl.setBorder(null);
- canvasSP.setBorder(null);
- holegJFrame.getContentPane().add(timePanel, BorderLayout.SOUTH);
- try {
- controller.loadAutoSave(System.getProperty("user.home") + "/.config/HolonGUI/Category/Category.json");
- } catch (IOException e1) {
- }
- String autoPath = System.getProperty("user.home") + "/.config/HolonGUI/Autosave/";
- File dest = new File(autoPath);
- ArrayList<File> oldAutoSaves = controller.filterOldAutoSaveFiles();
- int nrOfOldSaves = oldAutoSaves.size();
- if (nrOfOldSaves > 0) {
- int dialogButton = JOptionPane.YES_NO_OPTION;
- int dialogResult = JOptionPane.showConfirmDialog(holegJFrame,
- "Old autosave file was found, should it be loaded?", warningText, dialogButton);
- if (dialogResult == JOptionPane.YES_OPTION) {
- if (dest.exists()) {
- model.setAutoSaveNr(nrOfOldSaves - 1);
- mntmRedo.doClick();
- } else {
- JOptionPane.showMessageDialog(holegJFrame, "Autosave could not be loaded.");
- setUpAutoSave(dest);
- }
- } else {
- setUpAutoSave(dest);
- }
-
-
- controller.deleteObsoleteAutoSaveFiles();
- }
- canvasSP.addComponentListener(new ComponentAdapter() {
- @Override
- public void componentResized(ComponentEvent e) {
- controller.setCanvasX(Math.max(model.getCanvasX(), canvasSP.getViewport().getWidth()));
- controller.setCanvasY(Math.max(model.getCanvasY(), canvasSP.getViewport().getHeight()));
- canvas.repaint();
- }
- });
- }
- private void initWindowMenu() {
- menuBar.add(menuWindow);
-
- JMenuItem openMenu = new JMenuItem("Open Algorithm Panel", new ImageIcon(ImageImport
- .loadImage("/Button_Images/iconAlgo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
- openMenu.addActionListener(actionEvent -> {
- new AddOnWindow(holegJFrame, controller);
- });
- openMenu.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
- menuWindow.add(openMenu);
-
- JMenuItem openOutliner = new JMenuItem("Open Outliner", new ImageIcon(ImageImport
- .loadImage("/Button_Images/iconOutliner.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
- openOutliner.addActionListener(actionEvent -> {
- outlinerList.add(new Outliner(holegJFrame, model, controller));
- });
- openOutliner
- .setAccelerator(KeyStroke.getKeyStroke('O', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
- menuWindow.add(openOutliner);
-
- JMenuItem openFlexMenuItem = new JMenuItem("Open Flexibility Panel", new ImageIcon(ImageImport
- .loadImage("/Button_Images/iconAlgo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
- openFlexMenuItem.addActionListener(actionEvent -> {
- flexList.add(new FlexWindow(holegJFrame, controller));
- });
- openFlexMenuItem
- .setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
- menuWindow.add(openFlexMenuItem);
- }
- public void updateOutliners(DecoratedState state) {
-
- ListIterator<Outliner> iter = outlinerList.listIterator();
- while (iter.hasNext()) {
- if (iter.next().isClosed)
- iter.remove();
- }
-
- for (Outliner out : outlinerList) {
- out.repaintWithDecoratedState(state);
- }
- }
- public void updateFlexWindows() {
-
- ListIterator<FlexWindow> iter = flexList.listIterator();
- while (iter.hasNext()) {
- if (iter.next().isClosed)
- iter.remove();
- }
-
- for (FlexWindow out : flexList) {
- out.update();
- }
- }
- private boolean isUpperPanelInsideBounds() {
- int x = holegJFrame.getX();
- int y = holegJFrame.getY();
- int width = holegJFrame.getWidth();
-
- GraphicsDevice[] screenDevices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
- boolean isUpperPanelVisible = false;
-
-
- for (GraphicsDevice device : screenDevices) {
- Rectangle bounds = device.getDefaultConfiguration().getBounds();
- if (bounds.contains(x, y) || bounds.contains(x + width, y)) {
- isUpperPanelVisible = true;
- break;
- }
- }
- return isUpperPanelVisible;
- }
-
- private void setUpAutoSave(File dest) {
- dest.mkdirs();
- try {
- controller.autoSave();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
-
- private void updateCategories(final ArrayList<Category> categories) {
- DefaultTreeModel treemodel = new DefaultTreeModel(new DefaultMutableTreeNode("Categories") {
- private static final long serialVersionUID = 1L;
- {
- DefaultMutableTreeNode node1;
- for (Category c : categories) {
- node1 = new DefaultMutableTreeNode(c.getName());
- for (AbstractCanvasObject obj : c.getObjects()) {
- node1.add(new DefaultMutableTreeNode(obj.getName()));
- }
- add(node1);
- }
- }
- });
- categoryTree.setModel(treemodel);
- }
-
- public void updateCategoryUI(ArrayList<Category> categories) {
- DefaultTreeModel model = (DefaultTreeModel) categoryTree.getModel();
- updateCategories(categories);
- model.reload();
- }
- void setVisible(boolean value) {
- holegJFrame.setVisible(value);
- }
-
- public void openNewUpperNodeTab(GroupNode node) {
- chooseTabTemp();
- JScrollPane scrollPane = getScrollPaneFromTabbedPane();
- if (scrollPane.getViewport().getComponent(0) instanceof Canvas) {
- unc = new GroupNodeCanvas(model, controller, unitGraph, node, "",
- scrollPane.getViewport().getComponent(0));
- } else {
- unc = new GroupNodeCanvas(model, controller, unitGraph, node,
- ((GroupNodeCanvas) scrollPane.getViewport().getComponent(0)).getParentPath() + " -> ",
- scrollPane.getViewport().getComponent(0));
- }
-
- boolean dupl = false;
- for (int i = 1; i < tabbedPaneInnerOriginal.getTabCount(); i++) {
- JScrollPane paneOriginal = (JScrollPane) tabbedPaneInnerOriginal.getComponentAt(i);
- if (paneOriginal != null && ((GroupNodeCanvas) paneOriginal.getViewport().getComponent(0)).getGroupNode()
- .getId() == node.getId()) {
- dupl = true;
-
- tabbedPaneOriginal.setSelectedComponent(tabbedPaneInnerOriginal);
-
- tabbedPaneInnerOriginal.setSelectedComponent(tabbedPaneInnerOriginal.getComponentAt(i));
- }
-
- if (dupl) {
- break;
- }
- }
- if (!dupl) {
- JScrollPane sp = new JScrollPane(unc);
- sp.setBorder(null);
-
- if (tabTemp == tabbedPaneOriginal) {
- this.tabbedPaneInnerOriginal.add(node.getName(), sp);
- this.tabbedPaneInnerOriginal.setSelectedComponent(sp);
- this.tabbedPaneInnerOriginal.setTabComponentAt(this.tabbedPaneInnerOriginal.getTabCount() - 1,
- new ButtonTabComponent(this.tabbedPaneInnerOriginal));
- }
- }
- }
-
- private void updateUpperNodes() {
- for (Component c : tabbedPaneInnerOriginal.getComponents()) {
- if (!(c instanceof JScrollPane)) {
- continue;
- }
- Component pane = ((JScrollPane) c).getViewport().getComponent(0);
- if (pane instanceof GroupNodeCanvas) {
- temp = model.getHashcodeMap().get(((GroupNodeCanvas) pane).hashCode());
- ((GroupNodeCanvas) pane).setGroupNode((GroupNode) temp);
- }
- }
- }
-
- private void removeUpperNodeTab(AbstractCanvasObject cps) {
- if (cps instanceof GroupNode) {
- for (int i = 1; i < tabbedPaneInnerOriginal.getTabCount(); i++) {
- JScrollPane scrollPaneOriginal = (JScrollPane) tabbedPaneInnerOriginal.getComponentAt(i);
- if (scrollPaneOriginal == null) {
- } else if (((GroupNodeCanvas) scrollPaneOriginal.getViewport().getComponent(0)).getGroupNode()
- .getId() == cps.getId()) {
- ((ButtonTabComponent) tabbedPaneInnerOriginal.getTabComponentAt(i)).removeTabs();
- break;
- }
- }
- }
- }
-
- private void chooseTabTemp() {
-
- tabTemp = tabbedPaneOriginal;
- }
- private JScrollPane getScrollPaneFromTabbedPane() {
- return getScrollPaneFromTabbedPane(-1);
- }
- private JScrollPane getScrollPaneFromTabbedPane(int index) {
- Component upperLevelSelectedComponent;
- if (tabTemp == null) {
- return null;
- }
- if (index == -1) {
- upperLevelSelectedComponent = tabTemp.getSelectedComponent();
- } else {
- upperLevelSelectedComponent = tabTemp.getComponentAt(index);
- }
- if (upperLevelSelectedComponent instanceof JTabbedPane) {
- Component nextLevel = ((JTabbedPane) upperLevelSelectedComponent).getSelectedComponent();
- if (nextLevel instanceof JPanel)
- return (JScrollPane) ((JPanel) nextLevel).getComponent(0);
- else
- return (JScrollPane) nextLevel;
- } else if (upperLevelSelectedComponent instanceof JScrollPane) {
- return (JScrollPane) upperLevelSelectedComponent;
- } else {
- return null;
- }
- }
-
- private void openWebpage(String URL) {
- try {
- java.awt.Desktop.getDesktop().browse(new URI(URL));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private void closeInvalidUpperNodeTabs() {
-
- for (int i = 1; i < tabbedPaneInnerOriginal.getTabCount(); i++) {
- JScrollPane scrollPaneOriginal = (JScrollPane) tabbedPaneInnerOriginal.getComponentAt(i);
- if (((GroupNodeCanvas) scrollPaneOriginal.getViewport().getComponent(0)).getGroupNode() == null) {
- ((ButtonTabComponent) tabbedPaneInnerOriginal.getTabComponentAt(i)).removeTabs();
- break;
- }
- }
- }
- public void repaintCanvas() {
- tabbedPaneInnerOriginal.revalidate();
- tabbedPaneInnerOriginal.repaint();
- for (int i = 1; i < tabbedPaneInnerOriginal.getTabCount(); i++) {
- JScrollPane scrollPaneOriginal = (JScrollPane) tabbedPaneInnerOriginal.getComponentAt(i);
- scrollPaneOriginal.revalidate();
- }
- }
-
- public void guiDisable(boolean state) {
- canvas.disabled = state;
- for (int i = 1; i < tabbedPaneInnerOriginal.getTabCount(); i++) {
- JScrollPane scrollPaneOriginal = (JScrollPane) tabbedPaneInnerOriginal.getComponentAt(i);
- if (((GroupNodeCanvas) scrollPaneOriginal.getViewport().getComponent(0)).getGroupNode() != null) {
- ((GroupNodeCanvas) scrollPaneOriginal.getViewport().getComponent(0)).disabled = state;
- }
- }
- }
- }
|