From: khartlage Date: Tue, 3 Dec 2002 21:05:22 +0000 (+0000) Subject: PHP perspective and new Project Wizard X-Git-Url: http://secure.phpeclipse.com PHP perspective and new Project Wizard --- diff --git a/net.sourceforge.phpeclipse/.classpath b/net.sourceforge.phpeclipse/.classpath index ae79f9d..bee2fe3 100644 --- a/net.sourceforge.phpeclipse/.classpath +++ b/net.sourceforge.phpeclipse/.classpath @@ -13,6 +13,10 @@ + + + diff --git a/net.sourceforge.phpeclipse/.project b/net.sourceforge.phpeclipse/.project index a74b8f8..8acc1f7 100644 --- a/net.sourceforge.phpeclipse/.project +++ b/net.sourceforge.phpeclipse/.project @@ -3,6 +3,7 @@ net.sourceforge.phpeclipse + org.rubypeople.rdt.core diff --git a/net.sourceforge.phpeclipse/build.xml b/net.sourceforge.phpeclipse/build.xml index 75914da..56c4566 100644 --- a/net.sourceforge.phpeclipse/build.xml +++ b/net.sourceforge.phpeclipse/build.xml @@ -8,7 +8,7 @@ - + @@ -40,7 +40,7 @@ - + diff --git a/net.sourceforge.phpeclipse/plugin.properties b/net.sourceforge.phpeclipse/plugin.properties index 1d7f7bd..8ef16ae 100644 --- a/net.sourceforge.phpeclipse/plugin.properties +++ b/net.sourceforge.phpeclipse/plugin.properties @@ -2,7 +2,17 @@ # ######################################### pluginName=PHP Plugin -providerName = EclipseProject.de +providerName=EclipseProject.de +naturePHP.name=PHP Project + +perspectivePHP.name=PHP +viewPHPResources.name=PHP Resources + +newWizardCategory.name=PHP +newWizardPHPProject.name=PHP Project +newWizardPHPFile.name=PHP File + +propertyPagePHPProject.name=PHP Project Properties # # Extension point names @@ -12,3 +22,12 @@ phpConsoleView=PHP Console phpFileExtension=php php3FileExtension=php3 php4FileExtension=php4 + +# +# Action sets +# + +php.menu.label=&PHP +phpActionSet.label=PHP Actions +phpUncommentAction.label=&Uncomment@Ctrl+\\ +phpCommentAction.label=&Comment@Ctrl+/ \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/plugin.xml b/net.sourceforge.phpeclipse/plugin.xml index 369460f..a54447b 100644 --- a/net.sourceforge.phpeclipse/plugin.xml +++ b/net.sourceforge.phpeclipse/plugin.xml @@ -14,8 +14,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create a new PHP project. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - @@ -214,9 +388,9 @@ + id="net.sourceforge.phpeclipse.preference.PHPSyntaxPreferencePage"> - - - - - - "); + + return buffer.toString(); + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPCore.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPCore.java new file mode 100644 index 0000000..81943ac --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPCore.java @@ -0,0 +1,93 @@ +package net.sourceforge.phpeclipse; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; + +import net.sourceforge.phpeclipse.resourcesview.*; +import net.sourceforge.phpeclipse.resourcesview.PHPFile; +import net.sourceforge.phpeclipse.resourcesview.PHPProject; + +public class PHPCore { + + public static IProject[] getPHPProjects() { + List phpProjectsList = new ArrayList(); + IProject[] workspaceProjects = PHPeclipsePlugin.getDefault().getWorkspace().getRoot().getProjects(); + + for (int i = 0; i < workspaceProjects.length; i++) { + IProject iProject = workspaceProjects[i]; + if (isPHPProject(iProject)) + phpProjectsList.add(iProject); + } + + IProject[] phpProjects = new IProject[phpProjectsList.size()]; + return (IProject[]) phpProjectsList.toArray(phpProjects); + } + + public static PHPProject getPHPProject(String name) { + IProject aProject = PHPeclipsePlugin.getDefault().getWorkspace().getRoot().getProject(name); + if (isPHPProject(aProject)) { + PHPProject thePHPProject = new PHPProject(); + thePHPProject.setProject(aProject); + return thePHPProject; + } + return null; + } + + public static boolean isPHPProject(IProject aProject) { + try { + return aProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID); + } catch (CoreException e) { + } + + return false; + } + + public static PHPFile create(IFile aFile) { + if (PHPFile.EXTENSION.equalsIgnoreCase(aFile.getFileExtension())) + return new PHPFile(aFile); + if (PHPFile.EXTENSION1.equalsIgnoreCase(aFile.getFileExtension())) + return new PHPFile(aFile); + if (PHPFile.EXTENSION2.equalsIgnoreCase(aFile.getFileExtension())) + return new PHPFile(aFile); + if (PHPFile.EXTENSION3.equalsIgnoreCase(aFile.getFileExtension())) + return new PHPFile(aFile); + if (PHPFile.EXTENSION4.equalsIgnoreCase(aFile.getFileExtension())) + return new PHPFile(aFile); + if (PHPFile.EXTENSION5.equalsIgnoreCase(aFile.getFileExtension())) + return new PHPFile(aFile); + + return null; + } + + public static PHPProject create(IProject aProject) { + try { + if (aProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) { + PHPProject project = new PHPProject(); + project.setProject(aProject); + return project; + } + } catch (CoreException e) { + System.err.println("Exception occurred in PHPCore#create(IProject): " + e.toString()); + } + + return null; + } + + public static void addPHPNature(IProject project, IProgressMonitor monitor) throws CoreException { + if (!project.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) { + IProjectDescription description = project.getDescription(); + String[] prevNatures = description.getNatureIds(); + String[] newNatures = new String[prevNatures.length + 1]; + System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); + newNatures[prevNatures.length] = PHPeclipsePlugin.PHP_NATURE_ID; + description.setNatureIds(newNatures); + project.setDescription(description, monitor); + } + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java new file mode 100644 index 0000000..059485c --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java @@ -0,0 +1,44 @@ + +package net.sourceforge.phpeclipse; + +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class PHPPerspectiveFactory implements IPerspectiveFactory { + + public PHPPerspectiveFactory() { + super(); + } + + public void createInitialLayout(IPageLayout layout) { + String editorArea = layout.getEditorArea(); + + IFolderLayout phpResourcesArea = layout.createFolder("phpresourcesarea", IPageLayout.LEFT, (float)0.25, editorArea); + phpResourcesArea.addView(PHPeclipsePlugin.PHP_RESOURCES_VIEW_ID); + + IFolderLayout consoleArea = layout.createFolder("consoleArea", IPageLayout.BOTTOM, (float)0.75, editorArea); + + consoleArea.addView(IPageLayout.ID_TASK_LIST); + consoleArea.addView(IDebugUIConstants.ID_CONSOLE_VIEW); + consoleArea.addPlaceholder(IPageLayout.ID_BOOKMARKS); + + layout.addView(IPageLayout.ID_OUTLINE, IPageLayout.RIGHT, (float)0.75, editorArea); + + layout.addActionSet(IDebugUIConstants.LAUNCH_ACTION_SET); + + layout.addShowViewShortcut(IDebugUIConstants.ID_CONSOLE_VIEW); + + layout.addShowViewShortcut(PHPeclipsePlugin.PHP_RESOURCES_VIEW_ID); + + // views - standard workbench + layout.addShowViewShortcut(IPageLayout.ID_OUTLINE); + layout.addShowViewShortcut(IPageLayout.ID_TASK_LIST); + + // new actions - PHP project creation wizards + layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder");//$NON-NLS-1$ + layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file");//$NON-NLS-1$ + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java index 9fce1a0..7c46c83 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java @@ -16,12 +16,19 @@ import java.util.ResourceBundle; import net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider; import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider; +import net.sourceforge.phpeclipse.resourcesview.*; + +import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdapterManager; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPluginDescriptor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.swt.widgets.Shell; @@ -47,8 +54,10 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon /** * The id of the PHP plugin (value "net.sourceforge.phpeclipse"). */ - public static final String ID_PLUGIN = "net.sourceforge.phpeclipse"; //$NON-NLS-1$ - + public static final String PLUGIN_ID = "net.sourceforge.phpeclipse"; //$NON-NLS-1$ + public final static String PHP_NATURE_ID = PLUGIN_ID + ".phpnature"; + public static final String PHP_RESOURCES_VIEW_ID = PLUGIN_ID + ".resourcesview.ViewPHPResources"; //$NON-NLS-1$ + //The shared instance. private static PHPeclipsePlugin plugin; //Resource bundle. @@ -188,7 +197,10 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon // public static void log(Throwable e) { // log(new Status(IStatus.ERROR, getPluginId(), JavaStatusConstants.INTERNAL_ERROR, JavaUIMessages.getString("JavaPlugin.internal_error"), e)); //$NON-NLS-1$ // } - + + public static void log(Throwable e) { + log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "PHPeclipsePlugin.internalErrorOccurred", e)); //$NON-NLS-1$ + } public static boolean isDebug() { return getDefault().isDebugging(); } @@ -262,4 +274,11 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon PreferenceConverter.setDefault(store, PHP_DEFAULT, PHPColorProvider.DEFAULT); } + + public void startup() throws CoreException { + super.startup(); + IAdapterManager manager= Platform.getAdapterManager(); + manager.registerAdapters(new PHPElementAdapterFactory(), PHPElement.class); + manager.registerAdapters(new ResourceAdapterFactory(), IResource.class); + } } \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java index 54a3038..6f35ce5 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java @@ -30,6 +30,9 @@ import org.eclipse.ui.texteditor.TextEditorAction; */ public class PHPActionContributor extends TextEditorActionContributor { + public static final String COMMENT = "net.sourceforge.phpeclipse.phpeditor.comment"; + public static final String UNCOMMENT = "net.sourceforge.phpeclipse.phpeditor.uncomment"; + protected RetargetTextEditorAction fContentAssistProposal; protected RetargetTextEditorAction fContentAssistTip; protected TextEditorAction fTogglePresentation; @@ -77,6 +80,10 @@ public class PHPActionContributor extends TextEditorActionContributor { fContentAssistProposal.setAction(getAction(editor, "ContentAssistProposal")); //$NON-NLS-1$ fContentAssistTip.setAction(getAction(editor, "ContentAssistTip")); //$NON-NLS-1$ + IActionBars bars= getActionBars(); + bars.setGlobalActionHandler(COMMENT, getAction(editor, "Comment")); + bars.setGlobalActionHandler(UNCOMMENT, getAction(editor, "Uncomment")); + fTogglePresentation.setEditor(editor); fTogglePresentation.update(); diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionGroup.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionGroup.java new file mode 100644 index 0000000..cc4f0c3 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionGroup.java @@ -0,0 +1,21 @@ +package net.sourceforge.phpeclipse.phpeditor; + +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.ui.actions.ActionGroup; + +public class PHPActionGroup extends ActionGroup { + protected PHPEditor editor; + protected String menuGroupId; + + public PHPActionGroup(PHPEditor editor, String menuGroupId) { + this.editor = editor; + this.menuGroupId = menuGroupId; + } + + public void fillContextMenu(IMenuManager menu) { + super.fillContextMenu(menu); + + menu.add(editor.getAction("Comment")); + menu.add(editor.getAction("Uncomment")); + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java index 2c19dd5..71ff3fb 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java @@ -18,11 +18,13 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.help.IHelp; import org.eclipse.help.IHelpResource; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.util.IPropertyChangeListener; @@ -32,6 +34,7 @@ import org.eclipse.ui.IEditorInput; import org.eclipse.ui.editors.text.TextEditor; import org.eclipse.ui.help.WorkbenchHelp; import org.eclipse.ui.texteditor.DefaultRangeIndicator; +import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.texteditor.TextOperationAction; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; /** @@ -39,6 +42,7 @@ import org.eclipse.ui.views.contentoutline.IContentOutlinePage; */ public class PHPEditor extends TextEditor { + protected PHPActionGroup actionGroup; /** The outline page */ private PHPContentOutlinePage fOutlinePage; @@ -69,6 +73,17 @@ public class PHPEditor extends TextEditor { "ContentAssistTip.", this, ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION)); + + Action action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Comment.", this, ITextOperationTarget.PREFIX); + action.setActionDefinitionId(PHPEditorActionDefinitionIds.COMMENT); + setAction("Comment", action); + + action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Uncomment.", this, ITextOperationTarget.STRIP_PREFIX); + action.setActionDefinitionId(PHPEditorActionDefinitionIds.UNCOMMENT); + setAction("Uncomment", action); + + actionGroup = new PHPActionGroup(this, ITextEditorActionConstants.GROUP_EDIT); + } /** The JavaEditor implementation of this @@ -135,8 +150,9 @@ public class PHPEditor extends TextEditor { */ public void editorContextMenuAboutToShow(MenuManager menu) { super.editorContextMenuAboutToShow(menu); - addAction(menu, "ContentAssistProposal"); //$NON-NLS-1$ - addAction(menu, "ContentAssistTip"); //$NON-NLS-1$ + // addAction(menu, "ContentAssistProposal"); //$NON-NLS-1$ + // addAction(menu, "ContentAssistTip"); //$NON-NLS-1$ + actionGroup.fillContextMenu(menu); } /** The JavaEditor implementation of this diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorActionDefinitionIds.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorActionDefinitionIds.java new file mode 100644 index 0000000..3239f9d --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorActionDefinitionIds.java @@ -0,0 +1,12 @@ +package net.sourceforge.phpeclipse.phpeditor; + +public interface PHPEditorActionDefinitionIds { + /** + * Value: net.sourceforge.phpeclipse.phpeditor.comment */ + public static final String COMMENT= "net.sourceforge.phpeclipse.phpeditor.comment"; + + /** + * Value: net.sourceforge.phpeclipse.phpeditor.uncomment + */ + public static final String UNCOMMENT = "net.sourceforge.phpeclipse.phpeditor.uncomment"; +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorMessages.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorMessages.properties index 05b94a6..87fb2bb 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorMessages.properties +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorMessages.properties @@ -17,6 +17,12 @@ ContentAssistTip.tooltip=Content Tip ContentAssistTip.image= ContentAssistTip.description=Content Tip +Comment.label=Comment@Ctrl+/ +Comment.tooltip=Comment selected lines + +Uncomment.label=Uncomment@Ctrl+\ +Uncomment.tooltip=Uncomment selected lines + TogglePresentation.label=Change Presentation TogglePresentation.tooltip=Enable/Disable Segmented Source Viewer TogglePresentation.image=togglepresentation.gif diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.java new file mode 100644 index 0000000..dfda1e6 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.java @@ -0,0 +1,36 @@ +package net.sourceforge.phpeclipse.preferences; + +import java.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class PHPPreferencesMessages { + + + private static final String RESOURCE_BUNDLE= "net.sourceforge.phpeclipse.preferences.PHPPreferencesMessages";//$NON-NLS-1$ + + private static ResourceBundle resourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); + + private PHPPreferencesMessages() { + } + + public static String getString(String key) { + try { + return resourceBundle.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + public static String getFormattedString(String key, String arg) { + return getFormattedString(key, new String[] { arg }); + } + + public static String getFormattedString(String key, String[] args) { + return MessageFormat.format(getString(key), args); + } + + public static ResourceBundle getResourceBundle() { + return resourceBundle; + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.properties new file mode 100644 index 0000000..2b558f0 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPPreferencesMessages.properties @@ -0,0 +1,18 @@ +######################################### +# PHPProjectLibraryPage +######################################### + +PHPProjectLibraryPage.elementNotIProject=ERROR: Element not IProject +PHPProjectLibraryPage.project=Project +PHPProjectLibraryPage.tabName=Projects + + +######################################### +# Property Pages +######################################### + +PHPProjectPropertyPage.phpProjectClosed=The project selected is a PHP project, but is closed. +PHPProjectPropertyPage.performOkExceptionDialogTitle=Unable to save +PHPProjectPropertyPage.performOkExceptionDialogMessage=ERROR: Unable to save project properties. + + diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectLibraryPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectLibraryPage.java new file mode 100644 index 0000000..98d1cff --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectLibraryPage.java @@ -0,0 +1,147 @@ +package net.sourceforge.phpeclipse.preferences; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.ICheckStateListener; +import org.eclipse.jface.viewers.IContentProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.IWorkbench; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.resourcesview.PHPProject; + +public class PHPProjectLibraryPage { + protected PHPProject workingProject; + + protected PHPProjectLibraryPage(PHPProject theWorkingProject) { + super(); + workingProject = theWorkingProject; + } + + protected Control getControl(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); + composite.setLayout(new FillLayout()); + + Table projectsTable = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); + projectsTable.setHeaderVisible(false); + projectsTable.setLinesVisible(false); + projectsTable.computeSize(SWT.DEFAULT, SWT.DEFAULT); + + TableColumn tableColumn = new TableColumn(projectsTable, SWT.NONE); + tableColumn.setWidth(200); + tableColumn.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.project")); //$NON-NLS-1$ + + CheckboxTableViewer projectsTableViewer = new CheckboxTableViewer(projectsTable); + projectsTableViewer.addCheckStateListener(new ICheckStateListener() { + public void checkStateChanged(CheckStateChangedEvent event) { + projectCheckedUnchecked(event); + } + }); + + projectsTableViewer.setContentProvider(getContentProvider()); + projectsTableViewer.setLabelProvider(getLabelProvider()); + + projectsTableViewer.setInput(getWorkspaceProjects()); + projectsTableViewer.setCheckedElements(workingProject.getReferencedProjects().toArray()); + + return composite; + } + + protected void projectCheckedUnchecked(CheckStateChangedEvent event) { + IProject checkEventProject = (IProject) event.getElement(); + if (event.getChecked()) + getWorkingProject().addLoadPathEntry(checkEventProject); + else + getWorkingProject().removeLoadPathEntry(checkEventProject); + } + + protected PHPProject getWorkingProject() { + return workingProject; + } + + protected List getWorkspaceProjects() { + IWorkspaceRoot root = PHPeclipsePlugin.getWorkspace().getRoot(); + return Arrays.asList(root.getProjects()); + } + + protected ITableLabelProvider getLabelProvider() { + ITableLabelProvider labelProvider = new ITableLabelProvider() { + public Image getColumnImage(Object element, int columnIndex) { + IWorkbench workbench= PHPeclipsePlugin.getDefault().getWorkbench(); + return workbench.getSharedImages().getImage(ISharedImages.IMG_OBJ_PROJECT); + } + + public String getColumnText(Object element, int columnIndex) { + if (element instanceof IProject) + return ((IProject) element).getName(); + + return PHPPreferencesMessages.getString("PHPProjectLibraryPage.elementNotIProject"); //$NON-NLS-1$ + } + + public void addListener(ILabelProviderListener listener) {} + + public void dispose() {} + + public boolean isLabelProperty(Object element, String property) { + return false; + } + + public void removeListener(ILabelProviderListener listener) {} + }; + + return labelProvider; + } + + protected IContentProvider getContentProvider() { + IStructuredContentProvider contentProvider = new IStructuredContentProvider() { + protected List phpProjects; + + public Object[] getElements(Object inputElement) { + return phpProjects.toArray(); + } + + public void dispose() {} + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + phpProjects = new ArrayList(); + + if (!(newInput instanceof List)) + return; + + Iterator workspaceProjectsIterator = ((List) newInput).iterator(); + while (workspaceProjectsIterator.hasNext()) { + Object anObject = workspaceProjectsIterator.next(); + if (anObject instanceof IProject) { + IProject project = (IProject) anObject; + if (project.getName() != workingProject.getProject().getName()) { + try { + if (project.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) + phpProjects.add(project); + } catch (CoreException e) {} + } + } + } + } + }; + + return contentProvider; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectPropertyPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectPropertyPage.java new file mode 100644 index 0000000..fa07e17 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectPropertyPage.java @@ -0,0 +1,97 @@ +package net.sourceforge.phpeclipse.preferences; + +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.resourcesview.PHPProject; + +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; + +public class PHPProjectPropertyPage extends PropertyPage implements IWorkbenchPropertyPage { + protected PHPProjectLibraryPage projectsPage; + protected PHPProject workingProject; + + public PHPProjectPropertyPage() { + } + + protected Control createContents(Composite parent) { + noDefaultAndApplyButton(); + + workingProject = getPHPProject(); + if (workingProject == null || !workingProject.getProject().isOpen()) + return createClosedProjectPageContents(parent); + + return createProjectPageContents(parent); + } + + protected PHPProject getPHPProject() { + IAdaptable selectedElement = getElement(); + if (selectedElement == null) + return null; + + if (selectedElement instanceof PHPProject) + return (PHPProject) selectedElement; + + if (selectedElement instanceof IProject) { + IProject simpleProject = (IProject) selectedElement; + try { + if (simpleProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) { + PHPProject phpProject = new PHPProject(); + phpProject.setProject(simpleProject); + return phpProject; + } + } catch(CoreException e) { + PHPeclipsePlugin.log(e); + } + } + + return null; + } + + protected Control createClosedProjectPageContents(Composite parent) { + Label label = new Label(parent, SWT.NONE); + label.setText(PHPPreferencesMessages.getString("PHPProjectPropertyPage.phpProjectClosed")); //$NON-NLS-1$ + + 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 PHPProjectLibraryPage(workingProject); + TabItem tabItem = new TabItem(tabFolder, SWT.NONE); + tabItem.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.tabName")); //$NON-NLS-1$ +// tabItem.setData(projectsPage); + tabItem.setControl(projectsPage.getControl(tabFolder)); + + return tabFolder; + } + public boolean performOk() { + try { + projectsPage.getWorkingProject().save(); + } catch (CoreException e) { + PHPeclipsePlugin.log(e); + } + return super.performOk(); + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/MainActionGroup.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/MainActionGroup.java new file mode 100644 index 0000000..3ad7a7b --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/MainActionGroup.java @@ -0,0 +1,150 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.IPropertyListener; +import org.eclipse.ui.IViewSite; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.IWorkbenchPartSite; +import org.eclipse.ui.IWorkingSet; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.actions.ActionContext; +import org.eclipse.ui.actions.ActionGroup; +import org.eclipse.ui.actions.RefreshAction; +import org.eclipse.ui.dialogs.PropertyDialogAction; +import org.eclipse.ui.views.framelist.FrameList; +import org.eclipse.ui.views.navigator.IResourceNavigator; +import org.eclipse.ui.views.navigator.OpenActionGroup; +import org.eclipse.ui.views.navigator.RefactorActionGroup; +import org.eclipse.ui.views.navigator.ResourcePatternFilter; +import org.eclipse.ui.views.navigator.ResourceSorter; + +public class MainActionGroup extends ActionGroup { + + private OpenActionGroup openActionGroup; + private RefactorActionGroup refactorActionGroup; + private PropertyDialogAction propertyDialogAction ; + private RefreshAction refreshAction ; + + public MainActionGroup(PHPResourcesView phpResourcesView) { + ResourceNavigatorAdapter adapter = new ResourceNavigatorAdapter(phpResourcesView) ; + this.openActionGroup = new OpenActionGroup(adapter); + this.refactorActionGroup = new RefactorActionGroup(adapter); + Shell shell = phpResourcesView.getSite().getShell(); + propertyDialogAction = new PropertyDialogAction(shell, phpResourcesView.getViewer()); + refreshAction = new RefreshAction(shell) ; + } + + public void fillContextMenu(IMenuManager menu) { + this.openActionGroup.fillContextMenu(menu); + menu.add(new Separator()); + this.refactorActionGroup.fillContextMenu(menu); + menu.add(new Separator()); + menu.add(refreshAction) ; + menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS + "-end")); //$NON-NLS-1$ + menu.add(propertyDialogAction) ; + + } + + public void setContext(ActionContext actionContext) { + this.openActionGroup.setContext(actionContext); + this.refactorActionGroup.setContext(actionContext); + } + + public void runDefaultAction(IStructuredSelection selection) { + this.openActionGroup.runDefaultAction(selection); + } + + class ResourceNavigatorAdapter implements IResourceNavigator { + PHPResourcesView phpResourcesView; + ResourceNavigatorAdapter(PHPResourcesView phpResourcesView) { + this.phpResourcesView = phpResourcesView; + } + + public FrameList getFrameList() { + return null; + } + + public ResourcePatternFilter getPatternFilter() { + return null; + } + + public ResourceSorter getSorter() { + return null; + } + + public TreeViewer getViewer() { + return phpResourcesView.getViewer(); + } + + public IWorkingSet getWorkingSet() { + return null; + } + + public void setFiltersPreference(String[] patterns) { + } + + public void setSorter(ResourceSorter sorter) { + } + + public void setWorkingSet(IWorkingSet workingSet) { + } + + public IViewSite getViewSite() { + return phpResourcesView.getViewSite(); + } + + public void init(IViewSite arg0, IMemento arg1) throws PartInitException { + } + + public void init(IViewSite arg0) throws PartInitException { + } + + public void saveState(IMemento arg0) { + } + + public void addPropertyListener(IPropertyListener arg0) { + } + + public void createPartControl(Composite arg0) { + } + + public void dispose() { + } + + public IWorkbenchPartSite getSite() { + return phpResourcesView.getSite(); + } + + public String getTitle() { + return phpResourcesView.getTitle(); + } + + public Image getTitleImage() { + return phpResourcesView.getTitleImage(); + } + + public String getTitleToolTip() { + return phpResourcesView.getTitleToolTip(); + } + + public void removePropertyListener(IPropertyListener arg0) { + } + + public void setFocus() { + } + + public Object getAdapter(Class arg0) { + return phpResourcesView.getAdapter(arg0); + } + + } + +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPElement.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPElement.java new file mode 100644 index 0000000..d04eca9 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPElement.java @@ -0,0 +1,7 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import org.eclipse.core.resources.IResource; + +public interface PHPElement { + public IResource getUnderlyingResource(); +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPElementAdapterFactory.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPElementAdapterFactory.java new file mode 100644 index 0000000..e921f2c --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPElementAdapterFactory.java @@ -0,0 +1,32 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdapterFactory; + +public class PHPElementAdapterFactory implements IAdapterFactory { + + protected static Class[] ADAPTERS_I_CREATE = new Class[] { + IResource.class + }; + + public PHPElementAdapterFactory() { + super(); + } + + public Object getAdapter(Object adaptableObject, Class adapterType) { + PHPElement phpElement = (PHPElement) adaptableObject; + + if (IResource.class.equals(adapterType)) + return getResource(phpElement); + + return null; + } + + public Class[] getAdapterList() { + return ADAPTERS_I_CREATE; + } + + protected IResource getResource(PHPElement phpElement) { + return phpElement.getUnderlyingResource(); + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPFile.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPFile.java new file mode 100644 index 0000000..fb36859 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPFile.java @@ -0,0 +1,28 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; + +/** + * Represents an entire PHP (.php source file). + */ +public class PHPFile implements PHPElement { + public static final String EXTENSION = "php"; + public static final String EXTENSION1 = "php3"; + public static final String EXTENSION2 = "php4"; + public static final String EXTENSION3 = "inc"; + public static final String EXTENSION4 = "html"; + public static final String EXTENSION5 = "htm"; + + protected IFile underlyingFile; + + public PHPFile(IFile theUnderlyingFile) { + super(); + underlyingFile = theUnderlyingFile; + } + + public IResource getUnderlyingResource() { + return underlyingFile; + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java new file mode 100644 index 0000000..859733a --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java @@ -0,0 +1,176 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.xml.parsers.SAXParserFactory; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectNature; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Status; +import net.sourceforge.phpeclipse.LoadPathEntry; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +public class PHPProject implements IProjectNature, PHPElement { + protected IProject project; + protected List loadPathEntries; + protected boolean scratched; + + public PHPProject() {} + + public void configure() throws CoreException {} + + public void deconfigure() throws CoreException {} + + public IProject getProject() { + return project; + } + + protected IProject getProject(String name) { + return PHPeclipsePlugin.getWorkspace().getRoot().getProject(name); + } + + public void setProject(IProject aProject) { + project = aProject; + } + + public void addLoadPathEntry(IProject anotherPHPProject) { + scratched = true; + + LoadPathEntry newEntry = new LoadPathEntry(anotherPHPProject); + getLoadPathEntries().add(newEntry); + } + + public void removeLoadPathEntry(IProject anotherPHPProject) { + Iterator entries = getLoadPathEntries().iterator(); + while (entries.hasNext()) { + LoadPathEntry entry = (LoadPathEntry) entries.next(); + if (entry.getType() == LoadPathEntry.TYPE_PROJECT && entry.getProject().getName().equals(anotherPHPProject.getName())) { + getLoadPathEntries().remove(entry); + scratched = true; + break; + } + } + } + + public List getLoadPathEntries() { + if (loadPathEntries == null) { + loadLoadPathEntries(); + } + + return loadPathEntries; + } + + public List getReferencedProjects() { + List referencedProjects = new ArrayList(); + + Iterator iterator = getLoadPathEntries().iterator(); + while (iterator.hasNext()) { + LoadPathEntry pathEntry = (LoadPathEntry) iterator.next(); + if (pathEntry.getType() == LoadPathEntry.TYPE_PROJECT) + referencedProjects.add(pathEntry.getProject()); + } + + return referencedProjects; + } + + protected void loadLoadPathEntries() { + loadPathEntries = new ArrayList(); + + IFile loadPathsFile = getLoadPathEntriesFile(); + + XMLReader reader = null; + try { + reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); + reader.setContentHandler(getLoadPathEntriesContentHandler()); + reader.parse(new InputSource(loadPathsFile.getContents())); + } catch (Exception e) { + //the file is nonextant or unreadable + } + } + + protected ContentHandler getLoadPathEntriesContentHandler() { + return new ContentHandler() { + public void characters(char[] arg0, int arg1, int arg2) throws SAXException {} + + public void endDocument() throws SAXException {} + + public void endElement(String arg0, String arg1, String arg2) throws SAXException {} + + public void endPrefixMapping(String arg0) throws SAXException {} + + public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws SAXException {} + + public void processingInstruction(String arg0, String arg1) throws SAXException {} + + public void setDocumentLocator(Locator arg0) {} + + public void skippedEntity(String arg0) throws SAXException {} + + public void startDocument() throws SAXException {} + + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { + if ("pathentry".equals(qName)) + if ("project".equals(atts.getValue("type"))) { + IPath referencedProjectPath = new Path(atts.getValue("path")); + IProject referencedProject = getProject(referencedProjectPath.lastSegment()); + loadPathEntries.add(new LoadPathEntry(referencedProject)); + } + } + + public void startPrefixMapping(String arg0, String arg1) throws SAXException {} + }; + } + + protected IFile getLoadPathEntriesFile() { + return project.getFile(".loadpath"); + } + + public void save() throws CoreException { + if (scratched) { + InputStream xmlPath = new ByteArrayInputStream(getLoadPathXML().getBytes()); + IFile loadPathsFile = getLoadPathEntriesFile(); + if (!loadPathsFile.exists()) + loadPathsFile.create(xmlPath, true, null); + else + loadPathsFile.setContents(xmlPath, true, false, null); + + scratched = false; + } + } + + protected String getLoadPathXML() { + StringBuffer buffer = new StringBuffer(); + buffer.append(""); + + Iterator pathEntriesIterator = loadPathEntries.iterator(); + + while (pathEntriesIterator.hasNext()) { + LoadPathEntry entry = (LoadPathEntry) pathEntriesIterator.next(); + buffer.append(entry.toXML()); + } + + buffer.append(""); + return buffer.toString(); + } + public IResource getUnderlyingResource() { + return project; + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPResourcesView.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPResourcesView.java new file mode 100644 index 0000000..1e95b5a --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPResourcesView.java @@ -0,0 +1,116 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.viewers.IOpenListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IWorkbenchPartSite; +import org.eclipse.ui.actions.ActionContext; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.ui.part.ISetSelectionTarget; +import org.eclipse.ui.part.ViewPart; + +public class PHPResourcesView extends ViewPart implements ISetSelectionTarget, IMenuListener { + protected TreeViewer viewer; + protected MainActionGroup mainActionGroup; + + public PHPResourcesView() { + + } + + public void createPartControl(Composite parent) { + this.setViewer(new TreeViewer(parent)); + + this.getViewer().addFilter(new PHPViewerFilter()); + this.getViewer().setContentProvider(new WorkbenchContentProvider()); + this.getViewer().setLabelProvider(new WorkbenchLabelProvider()); + this.getViewer().setInput(getInitialInput()); + + this.getViewer().addOpenListener(new IOpenListener() { + public void open(OpenEvent event) { + getMainActionGroup().runDefaultAction((IStructuredSelection) event.getSelection()); + } + }); + + MenuManager menuMgr = new MenuManager("net.sourceforge.phpeclipse.PHPPopupMenu"); //$NON-NLS-1$ + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(this); + + Menu fContextMenu = menuMgr.createContextMenu(this.getViewer().getTree()); + this.getViewer().getTree().setMenu(fContextMenu); + + // Register viewer with site. This must be done before making the actions. + IWorkbenchPartSite site = getSite(); + site.registerContextMenu(menuMgr, viewer); + } + + public void selectReveal(ISelection selection) { + viewer.setSelection(selection, true); + } + + protected IContainer getInitialInput() { + IAdaptable input = getSite().getPage().getInput(); + IResource resource = null; + if (input instanceof IResource) { + resource = (IResource) input; + } else { + resource = (IResource) input.getAdapter(IResource.class); + } + if (resource != null) { + switch (resource.getType()) { + case IResource.FILE : + return resource.getParent(); + case IResource.FOLDER : + case IResource.PROJECT : + case IResource.ROOT : + return (IContainer) resource; + default : + break; + } + } + return PHPeclipsePlugin.getWorkspace().getRoot(); + } + + public void setFocus() { + this.getViewer().getControl().setFocus(); + } + + public void menuAboutToShow(IMenuManager manager) { + IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); + this.getMainActionGroup().setContext(new ActionContext(selection)); + this.getMainActionGroup().fillContextMenu(manager); + this.getMainActionGroup().setContext(null); + } + + public MainActionGroup getMainActionGroup() { + if (mainActionGroup == null) { + // lazy initialization, because this.getSite() delivers null in constructor + mainActionGroup = new MainActionGroup(this); + } + return mainActionGroup; + } + + public void setMainActionGroup(MainActionGroup mainActionGroup) { + this.mainActionGroup = mainActionGroup; + } + + public TreeViewer getViewer() { + return viewer; + } + + protected void setViewer(TreeViewer viewer) { + this.viewer = viewer; + } + +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPViewerFilter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPViewerFilter.java new file mode 100644 index 0000000..c8c9759 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPViewerFilter.java @@ -0,0 +1,25 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; + +public class PHPViewerFilter extends ViewerFilter { + + public PHPViewerFilter() { + super(); + } + + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (element instanceof IFolder) + return true; + + IAdaptable adaptable = (IAdaptable) element; + PHPElement phpElement = (PHPElement) adaptable.getAdapter(PHPElement.class); + if (phpElement != null) + return true; + + return false; + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/ResourceAdapterFactory.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/ResourceAdapterFactory.java new file mode 100644 index 0000000..1cc64d2 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/ResourceAdapterFactory.java @@ -0,0 +1,42 @@ +package net.sourceforge.phpeclipse.resourcesview; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.IAdapterFactory; + +import net.sourceforge.phpeclipse.PHPCore; +import net.sourceforge.phpeclipse.resourcesview.PHPElement; +import net.sourceforge.phpeclipse.resourcesview.PHPFile; +import net.sourceforge.phpeclipse.resourcesview.PHPProject; + +public class ResourceAdapterFactory implements IAdapterFactory { + + protected static Class[] ADAPTERS_I_CREATE = new Class[] { PHPElement.class, PHPFile.class, PHPProject.class }; + + public ResourceAdapterFactory() { + super(); + } + + public Object getAdapter(Object adaptableObject, Class adapterType) { + if (PHPFile.class.equals(adapterType)) + return PHPCore.create((IFile) adaptableObject); + + if (PHPProject.class.equals(adapterType)) + return PHPCore.create((IProject) adaptableObject); + + if (PHPElement.class.equals(adapterType)) { + if (adaptableObject instanceof IFile) + return PHPCore.create((IFile) adaptableObject); + + if (adaptableObject instanceof IProject) + return PHPCore.create((IProject) adaptableObject); + } + + return null; + } + + public Class[] getAdapterList() { + return ADAPTERS_I_CREATE; + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/NewProjectCreationWizard.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/NewProjectCreationWizard.java new file mode 100644 index 0000000..d5ee680 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/NewProjectCreationWizard.java @@ -0,0 +1,99 @@ +package net.sourceforge.phpeclipse.wizards; + +import java.lang.reflect.InvocationTargetException; + +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.PHPCore; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExecutableExtension; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; +import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; +import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard; +import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard; + +public class NewProjectCreationWizard extends BasicNewResourceWizard implements INewWizard, IExecutableExtension { + protected WizardNewProjectCreationPage projectPage; + protected IConfigurationElement configurationElement; + protected IProject newProject; + + public NewProjectCreationWizard() { + setWindowTitle(PHPWizardMessages.getString("NewProjectCreationWizard.windowTitle")); + } + + public boolean performFinish() { + IRunnableWithProgress projectCreationOperation = new WorkspaceModifyDelegatingOperation(getProjectCreationRunnable()); + + try { + getContainer().run(false, true, projectCreationOperation); + } catch (Exception e) { + PHPeclipsePlugin.log(e); + return false; + } + + BasicNewProjectResourceWizard.updatePerspective(configurationElement); + selectAndReveal(newProject); + + return true; + } + + protected IRunnableWithProgress getProjectCreationRunnable() { + return new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + int remainingWorkUnits = 10; + monitor.beginTask(PHPWizardMessages.getString("NewProjectCreationWizard.projectCreationMessage"), remainingWorkUnits); + + IWorkspace workspace = PHPeclipsePlugin.getWorkspace(); + newProject = projectPage.getProjectHandle(); + + IProjectDescription description = workspace.newProjectDescription(newProject.getName()); + IPath path = Platform.getLocation(); + IPath customPath = projectPage.getLocationPath(); + if (!path.equals(customPath)) { + path = customPath; + description.setLocation(path); + } + + try { + if (!newProject.exists()) { + newProject.create(description, new SubProgressMonitor(monitor, 1)); + remainingWorkUnits--; + } + if (!newProject.isOpen()) { + newProject.open(new SubProgressMonitor(monitor, 1)); + remainingWorkUnits--; + } + PHPCore.addPHPNature(newProject, new SubProgressMonitor(monitor, remainingWorkUnits)); + } catch (CoreException e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); + } + } + }; + } + + public void addPages() { + super.addPages(); + + projectPage = new WizardNewProjectCreationPage(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageName")); + projectPage.setTitle(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageTitle")); + projectPage.setDescription(PHPWizardMessages.getString("WizardNewProjectCreationPage.pageDescription")); + + addPage(projectPage); + } + + public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { + configurationElement = config; + } + +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPWizardMessages.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPWizardMessages.properties index 23c9370..33e0dda 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPWizardMessages.properties +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPWizardMessages.properties @@ -18,4 +18,11 @@ WizardPage.selectNewFileContainer=Select new file container. Wizard.error=An error occured Wizard.Monitor.creating=Creating Wizard.Monitor.openingFile=Opening file for editing... -Wizard.Monitor.containerDoesNotExistException=The given container does not exist. \ No newline at end of file +Wizard.Monitor.containerDoesNotExistException=The given container does not exist. + +NewProjectCreationWizard.windowTitle=New +NewProjectCreationWizard.projectCreationMessage=Creating new PHP Project + +WizardNewProjectCreationPage.pageName=Create PHP Project +WizardNewProjectCreationPage.pageTitle=PHP Project +WizardNewProjectCreationPage.pageDescription=Create a new PHP Project \ No newline at end of file