/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.tableeditor.settings.popup; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.robotframework.ide.eclipse.main.plugin.RedImages; import org.robotframework.ide.eclipse.main.plugin.model.RobotSetting; import org.robotframework.ide.eclipse.main.plugin.model.RobotSetting.SettingsGroup; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotEditorCommandsStack; import org.robotframework.red.jface.dialogs.InputLoadingFormComposite; public class ImportSettingsComposite extends InputLoadingFormComposite { private final RobotEditorCommandsStack commandsStack; private final RobotSuiteFile fileModel; private RobotSetting initialSetting; private ImportLibraryComposite importLibrariesComposite; private ImportResourcesComposite importResourcesComposite; private ImportVariablesComposite importVariablesComposite; private Composite librariesComposite; private Composite resourcesComposite; private Composite variablesComposite; private Button variablesSwitcher; private Button resourcesSwitcher; private Button librariesSwitcher; public ImportSettingsComposite(final Composite parent, final RobotEditorCommandsStack commandsStack, final RobotSuiteFile fileModel, final RobotSetting initialSetting) { super(parent, SWT.NONE, "Import"); this.commandsStack = commandsStack; this.fileModel = fileModel; this.initialSetting = initialSetting; createComposite(); } @Override protected Control createHeadClient(final Composite head) { final Composite importChooseComposite = getToolkit().createComposite(head); GridLayoutFactory.fillDefaults().numColumns(3).margins(3, 3).applyTo(importChooseComposite); importChooseComposite.setBackground(null); createLibrariesSwitcher(importChooseComposite); createResourcesSwitcher(importChooseComposite); createVariablesSwitcher(importChooseComposite); return importChooseComposite; } private void createVariablesSwitcher(final Composite importChooseComposite) { variablesSwitcher = getToolkit().createButton(importChooseComposite, "Variables", SWT.RADIO); variablesSwitcher.setBackground(null); variablesSwitcher.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { final Composite parent = librariesComposite.getParent(); ((StackLayout) parent.getLayout()).topControl = variablesComposite; parent.layout(); } }); } private void createResourcesSwitcher(final Composite importChooseComposite) { resourcesSwitcher = getToolkit().createButton(importChooseComposite, "Resources", SWT.RADIO); resourcesSwitcher.setBackground(null); resourcesSwitcher.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { final Composite parent = librariesComposite.getParent(); ((StackLayout) parent.getLayout()).topControl = resourcesComposite; parent.layout(); } }); } private void createLibrariesSwitcher(final Composite importChooseComposite) { librariesSwitcher = getToolkit().createButton(importChooseComposite, "Libraries", SWT.RADIO); librariesSwitcher.setBackground(null); librariesSwitcher.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { final Composite parent = librariesComposite.getParent(); ((StackLayout) parent.getLayout()).topControl = librariesComposite; parent.layout(); } }); } @Override protected Composite createControl(final Composite parent) { setFormImage(RedImages.getLibraryImage()); final Composite mainComposite = getToolkit().createComposite(parent); final StackLayout stackLayout = new StackLayout(); mainComposite.setLayout(stackLayout); librariesComposite = createLibrariesComposite(mainComposite); resourcesComposite = createResourcesComposite(mainComposite); variablesComposite = createVariablesComposite(mainComposite); setTopControl(stackLayout); createDisposeListener(); return mainComposite; } private Composite createLibrariesComposite(final Composite parent) { importLibrariesComposite = new ImportLibraryComposite(commandsStack, fileModel, getToolkit(), getShell()); return importLibrariesComposite.createImportResourcesComposite(parent); } private Composite createResourcesComposite(final Composite parent) { importResourcesComposite = new ImportResourcesComposite(commandsStack, fileModel, getToolkit(), getShell()); return importResourcesComposite.createImportResourcesComposite(parent); } private Composite createVariablesComposite(final Composite parent) { importVariablesComposite = new ImportVariablesComposite(commandsStack, fileModel, getToolkit(), getShell()); return importVariablesComposite.createImportVariablesComposite(parent); } private void setTopControl(StackLayout stackLayout) { if (initialSetting == null) { stackLayout.topControl = librariesComposite; librariesSwitcher.setSelection(true); } else { if (initialSetting.getGroup() == SettingsGroup.RESOURCES) { stackLayout.topControl = resourcesComposite; resourcesSwitcher.setSelection(true); } else if (initialSetting.getGroup() == SettingsGroup.VARIABLES) { stackLayout.topControl = variablesComposite; variablesSwitcher.setSelection(true); } else { stackLayout.topControl = librariesComposite; librariesSwitcher.setSelection(true); } } } private void createDisposeListener() { addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(final DisposeEvent e) { importLibrariesComposite.getLeftViewer().removeSelectionChangedListener( importLibrariesComposite.getLeftViewerSelectionChangedListener()); importLibrariesComposite.getRightViewer().removeSelectionChangedListener( importLibrariesComposite.getRightViewerSelectionChangedListener()); importResourcesComposite.getResourcesViewer().removeSelectionChangedListener( importResourcesComposite.getSelectionChangedListener()); importVariablesComposite.getVariablesViewer().removeSelectionChangedListener( importVariablesComposite.getSelectionChangedListener()); } }); } @Override protected InputLoadingFormComposite.InputJob provideInputCollectingJob() { return new InputJob("Gathering resources for import") { @Override protected Object createInput(final IProgressMonitor monitor) { setStatus(Status.OK_STATUS); return Settings.create(fileModel); } }; } @Override protected void fillControl(final Object jobResult) { final Settings libs = (Settings) jobResult; importLibrariesComposite.getLeftViewer().setInput(libs); importLibrariesComposite.getRightViewer().setInput(libs); importResourcesComposite.getResourcesViewer().setInput(libs); importVariablesComposite.getVariablesViewer().setInput(libs); setInitialSelection(); } private void setInitialSelection() { if (initialSetting != null) { if (initialSetting.getGroup() == SettingsGroup.RESOURCES) { importResourcesComposite.setInitialSelection(initialSetting); } else if (initialSetting.getGroup() == SettingsGroup.VARIABLES) { importVariablesComposite.setInitialSelection(initialSetting); } else { importLibrariesComposite.setInitialSelection(initialSetting); } } } }