package io.sloeber.ui; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.IWizardContainer; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IImportWizard; import org.eclipse.ui.IWorkbench; import io.sloeber.core.api.Sketch; import io.sloeber.ui.listeners.ProjectExplorerListener; /** * Import_Arduino_Library class is linked to the GUI related to the Arduino * source folder import. It creates one page. All important action is in the * performFinish * * @author Jan Baeyens * @see performFinish * */ public class Import_Source_Folder implements IImportWizard { private Import_Source_Folder_Page mFolderSelectionPage; private IWizardPage[] mPages; private IWizardContainer mWizardContainer = null; private static String mPageName = Messages.ui_select; private static String mPageTitle = Messages.ui_select_folder; @Override public void init(IWorkbench workbench, IStructuredSelection selection) { // Entry point is here when right-click project and import -- as opposed // to AddSourceFolderAction.execute() when done via Arduino menu } @Override public void addPages() { // Always create the pages like this at the last minute IProject theProject = null; IProject SelectedProjects[] = ProjectExplorerListener.getSelectedProjects(); if (SelectedProjects.length > 0) { theProject = SelectedProjects[0]; this.mFolderSelectionPage = new Import_Source_Folder_Page(theProject, mPageName, StructuredSelection.EMPTY); this.mFolderSelectionPage.setWizard(this); this.mPages = new IWizardPage[1]; this.mPages[0] = this.mFolderSelectionPage; this.mFolderSelectionPage.setImportProject(SelectedProjects[0]); } else { Activator.log(new Status(IStatus.ERROR, Activator.getId(), Messages.Handler_No_project_found)); } } @Override public boolean canFinish() { return this.mFolderSelectionPage.canFinish(); } @Override public void createPageControls(Composite pageContainer) {// no code needed } @Override public void dispose() {// no code needed } @Override public IWizardContainer getContainer() { return this.mWizardContainer; } @Override public Image getDefaultPageImage() { return null; } @Override public IDialogSettings getDialogSettings() { return null; } @Override public IWizardPage getNextPage(IWizardPage page) { return null; } @Override public IWizardPage getPage(String pageName) { if (this.mFolderSelectionPage.getName().equals(pageName)) return this.mFolderSelectionPage; return null; } @Override public int getPageCount() { return this.mPages.length; } @Override public IWizardPage[] getPages() { return this.mPages; } @Override public IWizardPage getPreviousPage(IWizardPage page) { return null; } @Override public IWizardPage getStartingPage() { return this.mPages[0]; } @Override public RGB getTitleBarColor() { return null; } @Override public String getWindowTitle() { return mPageTitle; } @Override public boolean isHelpAvailable() { return false; } @Override public boolean needsPreviousAndNextButtons() { return false; } @Override public boolean needsProgressMonitor() { return false; } @Override public boolean performCancel() { return true; } /** * performFinish creates the library and set the environment so that it can * be compiled. * * @author Jan Baeyens */ @Override public boolean performFinish() { IProject project = this.mFolderSelectionPage.getProject(); try { return Sketch.addCodeFolder(project, new Path(this.mFolderSelectionPage.GetLibraryFolder())); } catch (CoreException e) { e.printStackTrace(); IStatus status = new Status(IStatus.ERROR, Activator.getId(), Messages.error_failed_to_import_library_in_project, e); Activator.log(status); } return false; } @Override public void setContainer(IWizardContainer wizardContainer) { this.mWizardContainer = wizardContainer; } }