]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/imports/internal/ManageImportsDialog.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / imports / internal / ManageImportsDialog.java
index 522042adbde6020f1a30c4239777d89545f54c8c..082a1511448abe7e2f3d849ae2dd738c0026f7a7 100644 (file)
-package org.simantics.scl.ui.imports.internal;\r
-\r
-import gnu.trove.set.hash.THashSet;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
-\r
-import org.eclipse.jface.dialogs.IDialogSettings;\r
-import org.eclipse.jface.dialogs.TrayDialog;\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.GridLayoutFactory;\r
-import org.eclipse.jface.resource.FontDescriptor;\r
-import org.eclipse.jface.viewers.ArrayContentProvider;\r
-import org.eclipse.jface.viewers.CellEditor;\r
-import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.EditingSupport;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.jface.viewers.TableViewerColumn;\r
-import org.eclipse.jface.viewers.TextCellEditor;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.DisposeEvent;\r
-import org.eclipse.swt.events.DisposeListener;\r
-import org.eclipse.swt.events.MenuAdapter;\r
-import org.eclipse.swt.events.MenuEvent;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.graphics.Font;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.TableItem;\r
-import org.osgi.framework.BundleContext;\r
-import org.osgi.framework.InvalidSyntaxException;\r
-import org.osgi.framework.ServiceReference;\r
-import org.simantics.scl.compiler.commands.CommandSessionImportEntry;\r
-import org.simantics.scl.ui.Activator;\r
-import org.simantics.scl.ui.imports.ImportModulesAction;\r
-\r
-public class ManageImportsDialog extends TrayDialog {\r
-\r
-    private static final String DIALOG = "ManageImportsDialog"; //$NON-NLS-1$\r
-\r
-    TableViewer tableViewer;\r
-    ArrayList<CommandSessionImportEntry> imports;\r
-    IDialogSettings dialogBoundsSettings;\r
-\r
-    public ManageImportsDialog(Shell shell, ArrayList<CommandSessionImportEntry> imports) {\r
-        super(shell);\r
-        this.imports = imports;\r
-\r
-        IDialogSettings settings = Activator.getInstance().getDialogSettings();\r
-        dialogBoundsSettings = settings.getSection(DIALOG);\r
-        if (dialogBoundsSettings == null)\r
-            dialogBoundsSettings = settings.addNewSection(DIALOG);\r
-    }\r
-\r
-    @Override\r
-    protected IDialogSettings getDialogBoundsSettings() {\r
-        return dialogBoundsSettings;\r
-    }\r
-\r
-    @Override\r
-    protected void configureShell(Shell newShell) {\r
-        super.configureShell(newShell);\r
-        newShell.setText("Manage Imports");\r
-        newShell.setMinimumSize(800, 600);\r
-    }\r
-\r
-    @Override\r
-    protected Control createDialogArea(Composite parent) {\r
-        final Composite composite = (Composite) super.createDialogArea(parent);\r
-        GridLayoutFactory.fillDefaults().margins(10,10).numColumns(2).applyTo(composite);\r
-        GridDataFactory.fillDefaults().grab(true,true).applyTo(composite);\r
-        \r
-        tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);\r
-        GridDataFactory.fillDefaults().grab(true, true).applyTo(tableViewer.getControl());\r
-\r
-        // Colors\r
-        Display display = getShell().getDisplay(); \r
-        final Color black = display.getSystemColor(SWT.COLOR_BLACK);\r
-        final Color gray = display.getSystemColor(SWT.COLOR_GRAY);\r
-        final Color red = display.getSystemColor(SWT.COLOR_RED);\r
-        \r
-        // Fonts\r
-        final Font systemFont = display.getSystemFont();\r
-        final Font bold = FontDescriptor.createFrom(systemFont).setStyle(SWT.BOLD).createFont(display);\r
-        tableViewer.getTable().addDisposeListener(new DisposeListener() {\r
-            @Override\r
-            public void widgetDisposed(DisposeEvent e) {\r
-                bold.dispose();\r
-            }\r
-        });\r
-        \r
-        // Column 1: module name\r
-        TableViewerColumn column1 = new TableViewerColumn(tableViewer, SWT.NONE);\r
-        column1.getColumn().setWidth(300);\r
-        column1.getColumn().setText("Module");\r
-        column1.setLabelProvider(new ColumnLabelProvider() {\r
-            @Override\r
-            public String getText(Object element) {\r
-                return ((CommandSessionImportEntry)element).moduleName;\r
-            }\r
-            public Color getForeground(Object element) {\r
-                CommandSessionImportEntry entry = (CommandSessionImportEntry)element;\r
-                if(entry.disabled)\r
-                    return gray;\r
-                else if(entry.hasError)\r
-                    return red;\r
-                else\r
-                    return black;\r
-            }\r
-            public Font getFont(Object element) {\r
-                CommandSessionImportEntry entry = (CommandSessionImportEntry)element;\r
-                if(entry.persistent)\r
-                    return bold;\r
-                else\r
-                    return systemFont;\r
-            }\r
-        });\r
-        column1.setEditingSupport(new EditingSupport(tableViewer) {\r
-            CellEditor editor = new TextCellEditor(tableViewer.getTable());\r
-            @Override\r
-            protected CellEditor getCellEditor(Object element) {\r
-                return editor;\r
-            }\r
-            @Override\r
-            protected boolean canEdit(Object element) {\r
-                return true;\r
-            }\r
-            @Override\r
-            protected Object getValue(Object element) {\r
-                return ((CommandSessionImportEntry)element).moduleName;\r
-            }\r
-            @Override\r
-            protected void setValue(Object element, Object value) {\r
-                ((CommandSessionImportEntry)element).moduleName = (String)value;\r
-                getViewer().update(element, null);\r
-            }\r
-        });\r
-        \r
-        // Column 2: local name\r
-        TableViewerColumn column2 = new TableViewerColumn(tableViewer, SWT.NONE);\r
-        column2.getColumn().setWidth(100);\r
-        column2.getColumn().setText("Local name");\r
-        column2.setLabelProvider(new ColumnLabelProvider() {\r
-            @Override\r
-            public String getText(Object element) {\r
-                return ((CommandSessionImportEntry)element).localName;\r
-            }\r
-        });\r
-        column2.setEditingSupport(new EditingSupport(tableViewer) {\r
-            CellEditor editor = new TextCellEditor(tableViewer.getTable());\r
-            @Override\r
-            protected CellEditor getCellEditor(Object element) {\r
-                return editor;\r
-            }\r
-            @Override\r
-            protected boolean canEdit(Object element) {\r
-                return true;\r
-            }\r
-            @Override\r
-            protected Object getValue(Object element) {\r
-                return ((CommandSessionImportEntry)element).localName;\r
-            }\r
-            @Override\r
-            protected void setValue(Object element, Object value) {\r
-                ((CommandSessionImportEntry)element).localName = (String)value;\r
-                getViewer().update(element, null);\r
-            }\r
-        });\r
-        \r
-        // Column 3: status\r
-        TableViewerColumn column3 = new TableViewerColumn(tableViewer, SWT.NONE);\r
-        column3.getColumn().setWidth(200);\r
-        column3.getColumn().setText("Status");\r
-        column3.setLabelProvider(new ColumnLabelProvider() {\r
-            @Override\r
-            public String getText(Object element) {\r
-                return ((CommandSessionImportEntry)element).getStatusString();\r
-            }\r
-        });\r
-        \r
-        // Decorations\r
-        tableViewer.getTable().setHeaderVisible(true);\r
-        tableViewer.getTable().setLinesVisible(true);\r
-        \r
-        // Selection\r
-        final Menu menu = new Menu(tableViewer.getTable());\r
-        tableViewer.getTable().setMenu(menu);\r
-        menu.addMenuListener(new MenuAdapter() {\r
-            @Override\r
-            public void menuShown(MenuEvent e) {\r
-                MenuItem[] items = menu.getItems();\r
-                for(int i=0;i < items.length;++i)\r
-                    items[i].dispose();\r
-                TableItem[] tableItems = tableViewer.getTable().getSelection();\r
-                final CommandSessionImportEntry[] entries = new CommandSessionImportEntry[tableItems.length];\r
-                for(int i=0;i<tableItems.length;++i)\r
-                    entries[i] = (CommandSessionImportEntry)tableItems[i].getData();\r
-                \r
-                boolean hasPersistent = false;\r
-                boolean hasTransient = false;\r
-                boolean hasEnabled = false;\r
-                boolean hasDisabled = false;\r
-                \r
-                for(CommandSessionImportEntry entry : entries) {\r
-                    if(entry.persistent)\r
-                        hasPersistent = true;\r
-                    else\r
-                        hasTransient = true;\r
-                    if(entry.disabled)\r
-                        hasDisabled = true;\r
-                    else\r
-                        hasEnabled = true;\r
-                }\r
-                \r
-                {\r
-                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
-                    menuItem.setText("Delete");\r
-                    menuItem.addSelectionListener(new SelectionAdapter() {\r
-                        public void widgetSelected(SelectionEvent e) {\r
-                            THashSet<CommandSessionImportEntry> removedEntries =\r
-                                    new THashSet<CommandSessionImportEntry>(Arrays.asList(entries)); \r
-                            ArrayList<CommandSessionImportEntry> newImports = new ArrayList<CommandSessionImportEntry>(imports.size());\r
-                            for(CommandSessionImportEntry entry : imports)\r
-                                if(!removedEntries.contains(entry))\r
-                                    newImports.add(entry);\r
-                            imports = newImports;\r
-                            setInput();\r
-                        }\r
-                    });\r
-                }\r
-                if(hasTransient) {\r
-                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
-                    menuItem.setText("Make persistent");\r
-                    menuItem.addSelectionListener(new SelectionAdapter() {\r
-                        public void widgetSelected(SelectionEvent e) {\r
-                            for(CommandSessionImportEntry entry : entries)\r
-                                entry.persistent = true;\r
-                            setInput();\r
-                        }\r
-                    });\r
-                }\r
-                if(hasPersistent) {\r
-                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
-                    menuItem.setText("Make transient");\r
-                    menuItem.addSelectionListener(new SelectionAdapter() {\r
-                        public void widgetSelected(SelectionEvent e) {\r
-                            for(CommandSessionImportEntry entry : entries)\r
-                                entry.persistent = false;\r
-                            setInput();\r
-                        }\r
-                    });\r
-                }\r
-                if(hasDisabled) {\r
-                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
-                    menuItem.setText("Enable");\r
-                    menuItem.addSelectionListener(new SelectionAdapter() {\r
-                        public void widgetSelected(SelectionEvent e) {\r
-                            for(CommandSessionImportEntry entry : entries)\r
-                                entry.disabled = false;\r
-                            setInput();\r
-                        }\r
-                    });\r
-                }\r
-                if(hasEnabled) {\r
-                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
-                    menuItem.setText("Disable");\r
-                    menuItem.addSelectionListener(new SelectionAdapter() {\r
-                        public void widgetSelected(SelectionEvent e) {\r
-                            for(CommandSessionImportEntry entry : entries)\r
-                                entry.disabled = true;\r
-                            setInput();\r
-                        }\r
-                    });\r
-                }\r
-            }\r
-        });\r
-        \r
-        // Table content\r
-        tableViewer.setContentProvider(ArrayContentProvider.getInstance());\r
-        setInput();\r
-        \r
-        // Buttons\r
-        Composite buttonComposite = new Composite(composite, SWT.NONE);\r
-        GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.BEGINNING).applyTo(buttonComposite);\r
-        GridLayoutFactory.fillDefaults().applyTo(buttonComposite);\r
-        \r
-        BundleContext context = Activator.getInstance().getBundle().getBundleContext();\r
-        ArrayList<ImportModulesAction> actions = new ArrayList<ImportModulesAction>();\r
-        try {\r
-            for(ServiceReference<ImportModulesAction> ref : \r
-                context.getServiceReferences(ImportModulesAction.class, null)) {\r
-                ImportModulesAction action = context.getService(ref);\r
-                actions.add(action);\r
-            }\r
-        } catch (InvalidSyntaxException e1) {\r
-            e1.printStackTrace();\r
-        }\r
-        \r
-        Collections.sort(actions);\r
-        \r
-        for(final ImportModulesAction action : actions) {\r
-            Button button = new Button(buttonComposite, SWT.NONE);\r
-            GridDataFactory.fillDefaults().applyTo(button);\r
-            button.setText(action.name);\r
-            button.addSelectionListener(new SelectionAdapter() {\r
-                @Override\r
-                public void widgetSelected(SelectionEvent e) {\r
-                    if(action.editImports(getShell(), imports))\r
-                        setInput();\r
-                }\r
-            });\r
-        }\r
-        return composite;\r
-    }\r
-    \r
-    private void setInput() {\r
-        CommandSessionImportEntry[] array = imports.toArray(new CommandSessionImportEntry[imports.size()]);\r
-        Arrays.sort(array);\r
-        tableViewer.setInput(array);\r
-    }\r
-\r
-    public ArrayList<CommandSessionImportEntry> getImports() {\r
-        return imports;\r
-    }\r
-    \r
-    @Override\r
-    protected boolean isResizable() {\r
-        return true;\r
-    }\r
-}\r
+package org.simantics.scl.ui.imports.internal;
+
+import gnu.trove.set.hash.THashSet;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.resource.FontDescriptor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.simantics.scl.compiler.commands.CommandSessionImportEntry;
+import org.simantics.scl.ui.Activator;
+import org.simantics.scl.ui.imports.ImportModulesAction;
+
+public class ManageImportsDialog extends TrayDialog {
+
+    private static final String DIALOG = "ManageImportsDialog"; //$NON-NLS-1$
+
+    TableViewer tableViewer;
+    ArrayList<CommandSessionImportEntry> imports;
+    IDialogSettings dialogBoundsSettings;
+
+    public ManageImportsDialog(Shell shell, ArrayList<CommandSessionImportEntry> imports) {
+        super(shell);
+        this.imports = imports;
+
+        IDialogSettings settings = Activator.getInstance().getDialogSettings();
+        dialogBoundsSettings = settings.getSection(DIALOG);
+        if (dialogBoundsSettings == null)
+            dialogBoundsSettings = settings.addNewSection(DIALOG);
+    }
+
+    @Override
+    protected IDialogSettings getDialogBoundsSettings() {
+        return dialogBoundsSettings;
+    }
+
+    @Override
+    protected void configureShell(Shell newShell) {
+        super.configureShell(newShell);
+        newShell.setText("Manage Imports");
+        newShell.setMinimumSize(800, 600);
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+        final Composite composite = (Composite) super.createDialogArea(parent);
+        GridLayoutFactory.fillDefaults().margins(10,10).numColumns(2).applyTo(composite);
+        GridDataFactory.fillDefaults().grab(true,true).applyTo(composite);
+        
+        tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
+        GridDataFactory.fillDefaults().grab(true, true).applyTo(tableViewer.getControl());
+
+        // Colors
+        Display display = getShell().getDisplay(); 
+        final Color black = display.getSystemColor(SWT.COLOR_BLACK);
+        final Color gray = display.getSystemColor(SWT.COLOR_GRAY);
+        final Color red = display.getSystemColor(SWT.COLOR_RED);
+        
+        // Fonts
+        final Font systemFont = display.getSystemFont();
+        final Font bold = FontDescriptor.createFrom(systemFont).setStyle(SWT.BOLD).createFont(display);
+        tableViewer.getTable().addDisposeListener(new DisposeListener() {
+            @Override
+            public void widgetDisposed(DisposeEvent e) {
+                bold.dispose();
+            }
+        });
+        
+        // Column 1: module name
+        TableViewerColumn column1 = new TableViewerColumn(tableViewer, SWT.NONE);
+        column1.getColumn().setWidth(300);
+        column1.getColumn().setText("Module");
+        column1.setLabelProvider(new ColumnLabelProvider() {
+            @Override
+            public String getText(Object element) {
+                return ((CommandSessionImportEntry)element).moduleName;
+            }
+            public Color getForeground(Object element) {
+                CommandSessionImportEntry entry = (CommandSessionImportEntry)element;
+                if(entry.disabled)
+                    return gray;
+                else if(entry.hasError)
+                    return red;
+                else
+                    return black;
+            }
+            public Font getFont(Object element) {
+                CommandSessionImportEntry entry = (CommandSessionImportEntry)element;
+                if(entry.persistent)
+                    return bold;
+                else
+                    return systemFont;
+            }
+        });
+        column1.setEditingSupport(new EditingSupport(tableViewer) {
+            CellEditor editor = new TextCellEditor(tableViewer.getTable());
+            @Override
+            protected CellEditor getCellEditor(Object element) {
+                return editor;
+            }
+            @Override
+            protected boolean canEdit(Object element) {
+                return true;
+            }
+            @Override
+            protected Object getValue(Object element) {
+                return ((CommandSessionImportEntry)element).moduleName;
+            }
+            @Override
+            protected void setValue(Object element, Object value) {
+                ((CommandSessionImportEntry)element).moduleName = (String)value;
+                getViewer().update(element, null);
+            }
+        });
+        
+        // Column 2: local name
+        TableViewerColumn column2 = new TableViewerColumn(tableViewer, SWT.NONE);
+        column2.getColumn().setWidth(100);
+        column2.getColumn().setText("Local name");
+        column2.setLabelProvider(new ColumnLabelProvider() {
+            @Override
+            public String getText(Object element) {
+                return ((CommandSessionImportEntry)element).localName;
+            }
+        });
+        column2.setEditingSupport(new EditingSupport(tableViewer) {
+            CellEditor editor = new TextCellEditor(tableViewer.getTable());
+            @Override
+            protected CellEditor getCellEditor(Object element) {
+                return editor;
+            }
+            @Override
+            protected boolean canEdit(Object element) {
+                return true;
+            }
+            @Override
+            protected Object getValue(Object element) {
+                return ((CommandSessionImportEntry)element).localName;
+            }
+            @Override
+            protected void setValue(Object element, Object value) {
+                ((CommandSessionImportEntry)element).localName = (String)value;
+                getViewer().update(element, null);
+            }
+        });
+        
+        // Column 3: status
+        TableViewerColumn column3 = new TableViewerColumn(tableViewer, SWT.NONE);
+        column3.getColumn().setWidth(200);
+        column3.getColumn().setText("Status");
+        column3.setLabelProvider(new ColumnLabelProvider() {
+            @Override
+            public String getText(Object element) {
+                return ((CommandSessionImportEntry)element).getStatusString();
+            }
+        });
+        
+        // Decorations
+        tableViewer.getTable().setHeaderVisible(true);
+        tableViewer.getTable().setLinesVisible(true);
+        
+        // Selection
+        final Menu menu = new Menu(tableViewer.getTable());
+        tableViewer.getTable().setMenu(menu);
+        menu.addMenuListener(new MenuAdapter() {
+            @Override
+            public void menuShown(MenuEvent e) {
+                MenuItem[] items = menu.getItems();
+                for(int i=0;i < items.length;++i)
+                    items[i].dispose();
+                TableItem[] tableItems = tableViewer.getTable().getSelection();
+                final CommandSessionImportEntry[] entries = new CommandSessionImportEntry[tableItems.length];
+                for(int i=0;i<tableItems.length;++i)
+                    entries[i] = (CommandSessionImportEntry)tableItems[i].getData();
+                
+                boolean hasPersistent = false;
+                boolean hasTransient = false;
+                boolean hasEnabled = false;
+                boolean hasDisabled = false;
+                
+                for(CommandSessionImportEntry entry : entries) {
+                    if(entry.persistent)
+                        hasPersistent = true;
+                    else
+                        hasTransient = true;
+                    if(entry.disabled)
+                        hasDisabled = true;
+                    else
+                        hasEnabled = true;
+                }
+                
+                {
+                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+                    menuItem.setText("Delete");
+                    menuItem.addSelectionListener(new SelectionAdapter() {
+                        public void widgetSelected(SelectionEvent e) {
+                            THashSet<CommandSessionImportEntry> removedEntries =
+                                    new THashSet<CommandSessionImportEntry>(Arrays.asList(entries)); 
+                            ArrayList<CommandSessionImportEntry> newImports = new ArrayList<CommandSessionImportEntry>(imports.size());
+                            for(CommandSessionImportEntry entry : imports)
+                                if(!removedEntries.contains(entry))
+                                    newImports.add(entry);
+                            imports = newImports;
+                            setInput();
+                        }
+                    });
+                }
+                if(hasTransient) {
+                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+                    menuItem.setText("Make persistent");
+                    menuItem.addSelectionListener(new SelectionAdapter() {
+                        public void widgetSelected(SelectionEvent e) {
+                            for(CommandSessionImportEntry entry : entries)
+                                entry.persistent = true;
+                            setInput();
+                        }
+                    });
+                }
+                if(hasPersistent) {
+                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+                    menuItem.setText("Make transient");
+                    menuItem.addSelectionListener(new SelectionAdapter() {
+                        public void widgetSelected(SelectionEvent e) {
+                            for(CommandSessionImportEntry entry : entries)
+                                entry.persistent = false;
+                            setInput();
+                        }
+                    });
+                }
+                if(hasDisabled) {
+                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+                    menuItem.setText("Enable");
+                    menuItem.addSelectionListener(new SelectionAdapter() {
+                        public void widgetSelected(SelectionEvent e) {
+                            for(CommandSessionImportEntry entry : entries)
+                                entry.disabled = false;
+                            setInput();
+                        }
+                    });
+                }
+                if(hasEnabled) {
+                    MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+                    menuItem.setText("Disable");
+                    menuItem.addSelectionListener(new SelectionAdapter() {
+                        public void widgetSelected(SelectionEvent e) {
+                            for(CommandSessionImportEntry entry : entries)
+                                entry.disabled = true;
+                            setInput();
+                        }
+                    });
+                }
+            }
+        });
+        
+        // Table content
+        tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+        setInput();
+        
+        // Buttons
+        Composite buttonComposite = new Composite(composite, SWT.NONE);
+        GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.BEGINNING).applyTo(buttonComposite);
+        GridLayoutFactory.fillDefaults().applyTo(buttonComposite);
+        
+        BundleContext context = Activator.getInstance().getBundle().getBundleContext();
+        ArrayList<ImportModulesAction> actions = new ArrayList<ImportModulesAction>();
+        try {
+            for(ServiceReference<ImportModulesAction> ref : 
+                context.getServiceReferences(ImportModulesAction.class, null)) {
+                ImportModulesAction action = context.getService(ref);
+                actions.add(action);
+            }
+        } catch (InvalidSyntaxException e1) {
+            e1.printStackTrace();
+        }
+        
+        Collections.sort(actions);
+        
+        for(final ImportModulesAction action : actions) {
+            Button button = new Button(buttonComposite, SWT.NONE);
+            GridDataFactory.fillDefaults().applyTo(button);
+            button.setText(action.name);
+            button.addSelectionListener(new SelectionAdapter() {
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    if(action.editImports(getShell(), imports))
+                        setInput();
+                }
+            });
+        }
+        return composite;
+    }
+    
+    private void setInput() {
+        CommandSessionImportEntry[] array = imports.toArray(new CommandSessionImportEntry[imports.size()]);
+        Arrays.sort(array);
+        tableViewer.setInput(array);
+    }
+
+    public ArrayList<CommandSessionImportEntry> getImports() {
+        return imports;
+    }
+    
+    @Override
+    protected boolean isResizable() {
+        return true;
+    }
+}