Merge branch 'development' of
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / EditorGUI.java
1 package net.mograsim.logic.model.editor;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.layout.GridData;
5 import org.eclipse.swt.layout.GridLayout;
6 import org.eclipse.swt.widgets.Display;
7 import org.eclipse.swt.widgets.List;
8 import org.eclipse.swt.widgets.Shell;
9
10 import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;
11 import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
12 import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
13
14 public class EditorGUI
15 {
16         final Display display;
17         final Shell shell;
18         public final EditorCanvas logicCanvas;
19         private final List addList;
20
21         public EditorGUI(Editor editor)
22         {
23                 display = Display.getDefault();
24                 shell = new Shell(display);
25                 
26                 //Layout
27                 GridLayout layout = new GridLayout();
28                 shell.setLayout(layout);
29                 layout.numColumns = 2;
30                 
31                 GridData d = new GridData();
32                 d.grabExcessVerticalSpace = true;
33                 d.verticalAlignment = SWT.FILL;
34                 addList = new List(shell, SWT.FILL);
35                 addList.setLayoutData(d);
36                 refreshAddList();
37                 
38                 d = new GridData();
39                 d.grabExcessHorizontalSpace = true;
40                 d.horizontalAlignment = SWT.FILL;
41                 d.grabExcessVerticalSpace = true;
42                 d.verticalAlignment = SWT.FILL;
43                 
44                 logicCanvas = new EditorCanvas(shell, SWT.TRAIL, editor);
45                 logicCanvas.setLayoutData(d);
46                 
47                 
48                 new EditorUserInput(editor, this);
49                 ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(logicCanvas);
50                 userInput.buttonDrag = 3;
51                 userInput.buttonZoom = 2;
52                 userInput.enableUserInput();
53                 new ZoomableCanvasOverlay(logicCanvas, null).enableScale();
54         }
55         
56         public void refreshAddList()
57         {
58                 addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().toArray(String[]::new));
59                 addList.select(0);
60         }
61         
62         public String getAddListSelected()
63         {
64                 String[] selection = addList.getSelection();
65                 if(selection.length == 0)
66                         throw new IllegalStateException("Selection in the Add Component List may never be empty!");
67                 return selection[0];
68         }
69
70         public void open()
71         {
72                 shell.open();
73                 while (!shell.isDisposed())
74                         if (!display.readAndDispatch())
75                                 display.sleep();
76         }
77
78 }