Added the possibility for having machine descriptions
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / nature / properties / MograsimNaturePropertyPage.java
index 202abe9..c51aa01 100644 (file)
@@ -6,26 +6,29 @@ import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.dialogs.PropertyPage;
 
+import net.mograsim.machine.MachineDefinition;
 import net.mograsim.machine.MachineRegistry;
 import net.mograsim.plugin.nature.MachineContext;
+import net.mograsim.plugin.nature.MachineContextSwtTools;
+import net.mograsim.plugin.nature.MachineContextSwtTools.MachineCombo;
 import net.mograsim.plugin.nature.ProjectMachineContext;
 
 public class MograsimNaturePropertyPage extends PropertyPage
 {
-
+       // TODO i10n
        private static final String WARNING = "Changing the Mograsim machine can completely break your project. Be careful.";
-       private static final String MACHINE_LABEL = "Machine ID";
+       private static final String MACHINE_LABEL = "Machine definition";
        private static final String MACHINE_PROPERTY = "net.mograsim.projectMachineId";
-       private static final String DEFAULT_MACHINE = "Am2900Simple";
+       private static final String DEFAULT_MACHINE = "Am2900Simple";// TODO don't hardcode that here!
 
-       private Combo machineSelect;
-       private String defaultId;
+       private MachineCombo machineSelect;
+       private Label machineDescription;
+       private MachineDefinition defaultMachineDefinition;
 
        private MachineContext machineContext;
 
@@ -39,7 +42,7 @@ public class MograsimNaturePropertyPage extends PropertyPage
 
        private void addFirstSection(Composite parent)
        {
-               Composite composite = createDefaultComposite(parent);
+               Composite composite = createDefaultComposite(parent, false);
 
                // Label for path field
                Label pathLabel = new Label(composite, SWT.NONE);
@@ -57,32 +60,25 @@ public class MograsimNaturePropertyPage extends PropertyPage
 
        private void addSecondSection(Composite parent)
        {
-               Composite composite = createDefaultComposite(parent);
+               Composite composite = createDefaultComposite(parent, true);
 
                // Label for machine
                Label ownerLabel = new Label(composite, SWT.NONE);
                ownerLabel.setText(MACHINE_LABEL);
 
                // Machine choice
-               machineSelect = new Combo(parent, SWT.BORDER);
-               GridData gd = new GridData();
-               machineSelect.setLayoutData(gd);
-
-               Optional<String> currentId = machineContext.getMachineId();
+               machineSelect = MachineContextSwtTools.createMachineSelector(composite, SWT.NONE);
 
-               if (currentId.isPresent())
-                       machineSelect.add(currentId.get());
+               machineDescription = new Label(composite, SWT.NONE);
+               machineSelect.addListener(md -> machineDescription.setText(md.getDescription()));
+               machineDescription.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
 
-               for (String machineId : MachineRegistry.getInstalledMachines().keySet())
-               {
-                       if (currentId.isPresent() && currentId.get().equals(machineId))
-                               continue;
-                       machineSelect.add(machineId);
-               }
+               Optional<MachineDefinition> currentMachineDefinition = machineContext.getMachineDefinition();
 
-               defaultId = currentId.orElse(DEFAULT_MACHINE);
+               if (currentMachineDefinition.isPresent())
+                       machineSelect.setSelection(currentMachineDefinition.get());
 
-               machineSelect.select(machineSelect.indexOf(defaultId));
+               defaultMachineDefinition = currentMachineDefinition.orElseGet(() -> MachineRegistry.getMachine(DEFAULT_MACHINE));
        }
 
        /**
@@ -105,7 +101,7 @@ public class MograsimNaturePropertyPage extends PropertyPage
                return composite;
        }
 
-       private Composite createDefaultComposite(Composite parent)
+       private Composite createDefaultComposite(Composite parent, boolean grabExcessVerticalSpace)
        {
                Composite composite = new Composite(parent, SWT.NULL);
                GridLayout layout = new GridLayout();
@@ -115,6 +111,8 @@ public class MograsimNaturePropertyPage extends PropertyPage
                GridData data = new GridData();
                data.verticalAlignment = GridData.FILL;
                data.horizontalAlignment = GridData.FILL;
+               data.grabExcessHorizontalSpace = true;
+               data.grabExcessVerticalSpace = grabExcessVerticalSpace;
                composite.setLayoutData(data);
 
                return composite;
@@ -124,14 +122,12 @@ public class MograsimNaturePropertyPage extends PropertyPage
        {
                super.performDefaults();
                // Populate the owner text field with the default value
-               machineSelect.select(machineSelect.indexOf(DEFAULT_MACHINE));
+               machineSelect.setSelection(defaultMachineDefinition);
        }
 
        public boolean performOk()
        {
-               int selected = machineSelect.getSelectionIndex();
-               String newId = machineSelect.getItem(selected);
-               return machineContext.setMachineId(newId);
+               return machineContext.setMachineId(machineSelect.getSelection().getId());
        }
 
 }
\ No newline at end of file