package org.rubypeople.rdt.internal.ui; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.ui.IWorkbenchPropertyPage; import org.eclipse.ui.dialogs.PropertyPage; import org.rubypeople.rdt.core.RubyCore; import org.rubypeople.rdt.internal.core.RubyProject; import org.rubypeople.rdt.internal.ui.util.ExceptionHandler; public class RubyProjectPropertyPage extends PropertyPage implements IWorkbenchPropertyPage { protected RubyProjectLibraryPage projectsPage; protected RubyProject workingProject; public RubyProjectPropertyPage() { } protected Control createContents(Composite parent) { noDefaultAndApplyButton(); workingProject = getRubyProject(); if (workingProject == null || !workingProject.getProject().isOpen()) return createClosedProjectPageContents(parent); return createProjectPageContents(parent); } protected RubyProject getRubyProject() { IAdaptable selectedElement = getElement(); if (selectedElement == null) return null; if (selectedElement instanceof RubyProject) return (RubyProject) selectedElement; if (selectedElement instanceof IProject) { IProject simpleProject = (IProject) selectedElement; try { if (simpleProject.hasNature(RubyCore.NATURE_ID)) { RubyProject theRubyProject = new RubyProject(); theRubyProject.setProject(simpleProject); return theRubyProject; } } catch(CoreException e) { RubyPlugin.log(e); } } return null; } protected Control createClosedProjectPageContents(Composite parent) { Label label = new Label(parent, SWT.NONE); label.setText(RubyUIMessages.RubyProjectPropertyPage_rubyProjectClosed); return label; } protected Control createProjectPageContents(Composite parent) { TabFolder tabFolder = new TabFolder(parent, SWT.NONE); tabFolder.setLayout(new GridLayout()); tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); tabFolder.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { //tabChanged(e.item); } }); projectsPage = new RubyProjectLibraryPage(workingProject); TabItem tabItem = new TabItem(tabFolder, SWT.NONE); tabItem.setText(RubyUIMessages.RubyProjectLibraryPage_tabName); // tabItem.setData(projectsPage); tabItem.setControl(projectsPage.getControl(tabFolder)); return tabFolder; } public boolean performOk() { try { projectsPage.getWorkingProject().save(null, true); } catch (CoreException e) { ExceptionHandler.handle(e, RubyUIMessages.RubyProjectPropertyPage_performOkException, RubyUIMessages.RubyProjectPropertyPage_performOkExceptionDialogMessage); } return super.performOk(); } }