1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 290499 - Generating Getter, Setter and Implementing Methods should by available through the Outline context menus

Patch by  Marc-Andre Laperle
This commit is contained in:
Anton Leherbauer 2009-11-18 14:28:03 +00:00
parent a50078bfdf
commit 897e40ab49
3 changed files with 73 additions and 7 deletions

View file

@ -253,6 +253,7 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
private ActionGroup fMemberFilterActionGroup; private ActionGroup fMemberFilterActionGroup;
private ActionGroup fSelectionSearchGroup; private ActionGroup fSelectionSearchGroup;
private ActionGroup fRefactoringActionGroup; private ActionGroup fRefactoringActionGroup;
private ActionGroup fSourceActionGroup;
private ActionGroup fOpenViewActionGroup; private ActionGroup fOpenViewActionGroup;
/** /**
* Custom filter action group. * Custom filter action group.
@ -404,6 +405,10 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
} }
if (fSourceActionGroup != null) {
fSourceActionGroup.fillContextMenu(menu);
}
if (fRefactoringActionGroup != null) { if (fRefactoringActionGroup != null) {
fRefactoringActionGroup.fillContextMenu(menu); fRefactoringActionGroup.fillContextMenu(menu);
} }
@ -464,6 +469,7 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
fSelectionSearchGroup = createSearchActionGroup(); fSelectionSearchGroup = createSearchActionGroup();
fOpenViewActionGroup = createOpenViewActionGroup(); fOpenViewActionGroup = createOpenViewActionGroup();
fSourceActionGroup = createSourceActionGroup();
fRefactoringActionGroup= createRefactoringActionGroup(); fRefactoringActionGroup= createRefactoringActionGroup();
// Custom filter group // Custom filter group
fCustomFiltersActionGroup= createCustomFiltersActionGroup(); fCustomFiltersActionGroup= createCustomFiltersActionGroup();
@ -588,6 +594,15 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
return null; return null;
} }
/**
* @return an ActionGroup contributing source actions or
* <code>null</code> if source actions are not supported
*/
protected ActionGroup createSourceActionGroup() {
// default: no source actions
return null;
}
/** /**
* @return an ActionGroup instance to provide custom filters or * @return an ActionGroup instance to provide custom filters or
* <code>null</code> if this action group is not wanted * <code>null</code> if this action group is not wanted
@ -628,6 +643,11 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
fRefactoringActionGroup.setContext(new ActionContext(selection)); fRefactoringActionGroup.setContext(new ActionContext(selection));
fRefactoringActionGroup.updateActionBars(); fRefactoringActionGroup.updateActionBars();
} }
if (fSourceActionGroup != null) {
fSourceActionGroup.setContext(new ActionContext(selection));
fSourceActionGroup.updateActionBars();
}
} }
@Override @Override

View file

@ -27,6 +27,7 @@ import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.ui.PreferenceConstants; import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.cdt.ui.actions.CustomFiltersActionGroup; import org.eclipse.cdt.ui.actions.CustomFiltersActionGroup;
import org.eclipse.cdt.ui.actions.GenerateActionGroup;
import org.eclipse.cdt.ui.actions.MemberFilterActionGroup; import org.eclipse.cdt.ui.actions.MemberFilterActionGroup;
import org.eclipse.cdt.ui.actions.OpenViewActionGroup; import org.eclipse.cdt.ui.actions.OpenViewActionGroup;
import org.eclipse.cdt.ui.refactoring.actions.CRefactoringActionGroup; import org.eclipse.cdt.ui.refactoring.actions.CRefactoringActionGroup;
@ -135,6 +136,12 @@ public class CContentOutlinePage extends AbstractCModelOutlinePage {
return new CRefactoringActionGroup(this); return new CRefactoringActionGroup(this);
} }
@Override
protected ActionGroup createSourceActionGroup() {
return new GenerateActionGroup(this);
}
@Override @Override
protected ActionGroup createCustomFiltersActionGroup() { protected ActionGroup createCustomFiltersActionGroup() {
return new CustomFiltersActionGroup("org.eclipse.cdt.ui.COutlinePage", getTreeViewer()); //$NON-NLS-1$ return new CustomFiltersActionGroup("org.eclipse.cdt.ui.COutlinePage", getTreeViewer()); //$NON-NLS-1$

View file

@ -25,6 +25,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.ui.IActionBars; import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.IWorkbenchCommandConstants;
@ -38,8 +39,12 @@ import org.eclipse.ui.ide.IDEActionFactory;
import org.eclipse.ui.part.Page; import org.eclipse.ui.part.Page;
import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.IUpdate; import org.eclipse.ui.texteditor.IUpdate;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.ui.refactoring.actions.GettersAndSettersAction; import org.eclipse.cdt.ui.refactoring.actions.GettersAndSettersAction;
import org.eclipse.cdt.ui.refactoring.actions.ImplementMethodAction; import org.eclipse.cdt.ui.refactoring.actions.ImplementMethodAction;
import org.eclipse.cdt.ui.refactoring.actions.RefactoringAction;
import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.IContextMenuConstants;
import org.eclipse.cdt.internal.ui.actions.ActionMessages; import org.eclipse.cdt.internal.ui.actions.ActionMessages;
@ -59,7 +64,7 @@ import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds;
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* @since 4.0 * @since 4.0
*/ */
public class GenerateActionGroup extends ActionGroup { public class GenerateActionGroup extends ActionGroup implements ISelectionChangedListener {
/** /**
* Pop-up menu: id of the source sub menu (value <code>org.eclipse.cdt.ui.source.menu</code>). * Pop-up menu: id of the source sub menu (value <code>org.eclipse.cdt.ui.source.menu</code>).
@ -106,6 +111,7 @@ public class GenerateActionGroup extends ActionGroup {
private IWorkbenchSite fSite; private IWorkbenchSite fSite;
private String fGroupName= IContextMenuConstants.GROUP_REORGANIZE; private String fGroupName= IContextMenuConstants.GROUP_REORGANIZE;
private List<ISelectionChangedListener> fRegisteredSelectionListeners; private List<ISelectionChangedListener> fRegisteredSelectionListeners;
private List<RefactoringAction> fRefactorActions= new ArrayList<RefactoringAction>();
private AddIncludeOnSelectionAction fAddInclude; private AddIncludeOnSelectionAction fAddInclude;
// private OverrideMethodsAction fOverrideMethods; // private OverrideMethodsAction fOverrideMethods;
@ -234,9 +240,16 @@ public class GenerateActionGroup extends ActionGroup {
// fOverrideMethods= new OverrideMethodsAction(site); // fOverrideMethods= new OverrideMethodsAction(site);
// fOverrideMethods.setActionDefinitionId(ICEditorActionDefinitionIds.OVERRIDE_METHODS); // fOverrideMethods.setActionDefinitionId(ICEditorActionDefinitionIds.OVERRIDE_METHODS);
// //
// fAddGetterSetter= new AddGetterSetterAction(site); fAddGetterSetter = new GettersAndSettersAction();
// fAddGetterSetter.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_GETTER_SETTER); fAddGetterSetter.setActionDefinitionId(ICEditorActionDefinitionIds.GETTERS_AND_SETTERS);
// fAddGetterSetter.setSite(fSite);
fRefactorActions.add(fAddGetterSetter);
fImplementMethod = new ImplementMethodAction();
fImplementMethod.setActionDefinitionId(ICEditorActionDefinitionIds.IMPLEMENT_METHOD);
fImplementMethod.setSite(fSite);
fRefactorActions.add(fImplementMethod);
// fAddDelegateMethods= new AddDelegateMethodsAction(site); // fAddDelegateMethods= new AddDelegateMethodsAction(site);
// fAddDelegateMethods.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_DELEGATE_METHODS); // fAddDelegateMethods.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_DELEGATE_METHODS);
// //
@ -275,7 +288,6 @@ public class GenerateActionGroup extends ActionGroup {
// fOverrideMethods.update(selection); // fOverrideMethods.update(selection);
// fAddGetterSetter.update(selection);
// fAddDelegateMethods.update(selection); // fAddDelegateMethods.update(selection);
// fAddUnimplementedConstructors.update(selection); // fAddUnimplementedConstructors.update(selection);
// fGenerateConstructorUsingFields.update(selection); // fGenerateConstructorUsingFields.update(selection);
@ -297,7 +309,6 @@ public class GenerateActionGroup extends ActionGroup {
} }
// registerSelectionListener(provider, fOverrideMethods); // registerSelectionListener(provider, fOverrideMethods);
// registerSelectionListener(provider, fAddGetterSetter);
// registerSelectionListener(provider, fAddDelegateMethods); // registerSelectionListener(provider, fAddDelegateMethods);
// registerSelectionListener(provider, fAddUnimplementedConstructors); // registerSelectionListener(provider, fAddUnimplementedConstructors);
// registerSelectionListener(provider, fGenerateConstructorUsingFields); // registerSelectionListener(provider, fGenerateConstructorUsingFields);
@ -312,6 +323,9 @@ public class GenerateActionGroup extends ActionGroup {
registerSelectionListener(provider, fAddTaskAction); registerSelectionListener(provider, fAddTaskAction);
// registerSelectionListener(provider, fCleanUp); // registerSelectionListener(provider, fCleanUp);
selectionChanged(new SelectionChangedEvent(provider, selection));
registerSelectionListener(provider, this);
installQuickAccessAction(); installQuickAccessAction();
} }
@ -510,4 +524,29 @@ public class GenerateActionGroup extends ActionGroup {
private boolean isEditorOwner() { private boolean isEditorOwner() {
return fEditor != null; return fEditor != null;
} }
private ICElement getCElement(ISelection selection) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection ss = (IStructuredSelection) selection;
if (ss.size() == 1) {
Object o = ss.getFirstElement();
if (o instanceof ICElement && o instanceof ISourceReference) {
return (ICElement) o;
}
}
}
return null;
}
/**
* {@inheritDoc}
* @since 5.2
* @noreference This method is not intended to be referenced by clients.
*/
public void selectionChanged(SelectionChangedEvent event) {
ICElement celem = getCElement(event.getSelection());
for (RefactoringAction action : fRefactorActions) {
action.updateSelection(celem);
}
}
} }