/******************************************************************************* * Copyright (c) 2016 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.cdt.cmake.ui.internal; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Map; import org.eclipse.cdt.cmake.core.ICMakeToolChainFile; import org.eclipse.cdt.cmake.core.ICMakeToolChainManager; import org.eclipse.cdt.core.build.IToolChain; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class NewCMakeToolChainFilePage extends WizardPage { private final Map<Path, ICMakeToolChainFile> existing; private Text pathText; private Text osText; private Text archText; public NewCMakeToolChainFilePage(Map<Path, ICMakeToolChainFile> existing) { super("NewCMakeToolChainFilePage", "New CMake ToolChain File", null); //$NON-NLS-1$ this.existing = existing; } @Override public void createControl(Composite parent) { Composite comp = new Composite(parent, SWT.NONE); comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); comp.setLayout(new GridLayout(2, false)); Label pathLabel = new Label(comp, SWT.NONE); pathLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); pathLabel.setText("Path:"); Composite pathComp = new Composite(comp, SWT.NONE); pathComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); GridLayout layout = new GridLayout(2, false); layout.marginHeight = layout.marginWidth = 0; pathComp.setLayout(layout); pathText = new Text(pathComp, SWT.BORDER); pathText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); pathText.addModifyListener(e -> validate()); Button pathButton = new Button(pathComp, SWT.PUSH); pathButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); pathButton.setText("Browse..."); pathButton.addListener(SWT.Selection, e -> { FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); dialog.setText("Select location for CMake toolchain file"); String path = dialog.open(); if (path != null) { pathText.setText(path); } }); Label osLabel = new Label(comp, SWT.NONE); osLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); osLabel.setText("Target OS:"); osText = new Text(comp, SWT.BORDER); osText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); osText.addModifyListener(e -> validate()); Label archLabel = new Label(comp, SWT.NONE); archLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); archLabel.setText("Target CPU:"); archText = new Text(comp, SWT.BORDER); archText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); archText.addModifyListener(e -> validate()); setControl(comp); validate(); } private void validate() { setPageComplete(false); String path = pathText.getText(); if (path.isEmpty()) { setErrorMessage("Please set the path to the CMake toolchain file."); return; } if (existing.containsKey(Paths.get(path))) { setErrorMessage("CMake toolchain file entry already exists."); return; } if (osText.getText().isEmpty()) { setErrorMessage("Please set the target operating system."); return; } if (archText.getText().isEmpty()) { setErrorMessage("Please set the target CPU architecture."); return; } setPageComplete(true); setErrorMessage(null); } public ICMakeToolChainFile getNewFile() { ICMakeToolChainManager manager = Activator.getService(ICMakeToolChainManager.class); ICMakeToolChainFile file = manager.newToolChainFile(Paths.get(pathText.getText())); String os = osText.getText(); if (!os.isEmpty()) { file.setProperty(IToolChain.ATTR_OS, os); } String arch = archText.getText(); if (!arch.isEmpty()) { file.setProperty(IToolChain.ATTR_ARCH, arch); } return file; } }