Skip to content
This repository has been archived by the owner on Apr 3, 2018. It is now read-only.

Commit

Permalink
LANG: refactoring, and skeleton for ToggleComment, GoToBracket actions.
Browse files Browse the repository at this point in the history
  • Loading branch information
bruno-medeiros committed Mar 23, 2015
1 parent 5d93c1f commit d3742dd
Show file tree
Hide file tree
Showing 14 changed files with 199 additions and 64 deletions.
7 changes: 7 additions & 0 deletions plugin_ide.ui/plugin.properties
Expand Up @@ -29,6 +29,13 @@ CommandsCategory.description=LANGUAGE commands
OpenDefinitionAction.name=Open Definition
OpenDefinitionAction.tooltip=Open the definition of the selected element in a new editor

ToggleCommentAction.name=Toggle Comment
ToggleCommentAction.description=Toggle Comment

GoToMatchingBracketAction.name=Go to Matching Bracket
GoToMatchingBracketAction.description=Moves the cursor to the matching bracket


### Preference pages -------------------------------------------

LangRootPreferencePage.name = LANGUAGE
Expand Down
44 changes: 37 additions & 7 deletions plugin_ide.ui/plugin.xml
Expand Up @@ -85,17 +85,29 @@

<extension point="org.eclipse.ui.commands">
<category
id="LANG_PROJECT_ID.ide.ui.commands.Category"
name="%CommandsCategory.name"
description="%CommandsCategory.description"
id="LANG_PROJECT_ID.ide.ui.commands.Category">
</category>
/>

<command
categoryId="LANG_PROJECT_ID.ide.ui.commands.Category"
description="%OpenDefinitionAction.tooltip"
<command categoryId="LANG_PROJECT_ID.ide.ui.commands.Category"
id="LANG_PROJECT_ID.ide.ui.commands.openDefinition"
name="%OpenDefinitionAction.name">
</command>
name="%OpenDefinitionAction.name"
description="%OpenDefinitionAction.tooltip"
/>

<command categoryId="LANG_PROJECT_ID.ide.ui.commands.Category"
id="LANG_PROJECT_ID.ide.ui.commands.GoToMatchingBracket"
name="%GoToMatchingBracketAction.name"
description="%GoToMatchingBracketAction.description"
/>

<command categoryId="LANG_PROJECT_ID.ide.ui.commands.Category"
id="LANG_PROJECT_ID.ide.ui.commands.ToggleComment"
name="%ToggleCommentAction.name"
description="%ToggleCommentAction.description"
/>

</extension>

<extension point="org.eclipse.ui.bindings">
Expand All @@ -105,6 +117,24 @@
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="F3">
</key>
<key
commandId="LANG_PROJECT_ID.ide.ui.commands.GoToMatchingBracket"
contextId="LANG_PROJECT_ID.ide.ui.Contexts.Editor"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+M2+P">
</key>
<key
commandId="LANG_PROJECT_ID.ide.ui.commands.ToggleComment"
contextId="LANG_PROJECT_ID.ide.ui.Contexts.Editor"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+M2+C">
</key>
<key
commandId="LANG_PROJECT_ID.ide.ui.commands.ToggleComment"
contextId="LANG_PROJECT_ID.ide.ui.Contexts.Editor"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+/">
</key>
</extension>

<!-- ________ Menu/UI contributions ________ -->
Expand Down
Expand Up @@ -10,6 +10,7 @@
*******************************************************************************/
package melnorme.lang.ide.ui.actions;

import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue;

import java.lang.reflect.InvocationTargetException;
Expand Down Expand Up @@ -43,10 +44,14 @@ public abstract class AbstractUIOperation {
protected final String operationName;

public AbstractUIOperation(String operationName) {
this.operationName = operationName;
this.operationName = assertNotNull(operationName);
}

public void executeAndHandle() {
public final void executeAndHandleResult() {
executeAndHandle();
}

protected void executeAndHandle() {
assertTrue(Display.getCurrent() != null);

try {
Expand Down
Expand Up @@ -177,7 +177,7 @@ public static Location getLocationFromEditorInput(IEditorInput editorInput) thro

/* ----------------- Editor opening utils ----------------- */

public static enum OpenNewEditorMode { ALWAYS, TRY_REUSING_EXISTING_EDITORS, NEVER }
public static enum OpenNewEditorMode { ALWAYS, TRY_REUSING_EXISTING, NEVER }

public static IEditorPart openEditor(String editorId, IEditorInput newInput) throws CoreException {
IWorkbenchPage page = WorkbenchUtils.getActiveWorkbenchWindow().getActivePage();
Expand Down
Expand Up @@ -14,9 +14,10 @@
import melnorme.lang.ide.core.LangCore;
import melnorme.lang.ide.ui.EditorSettings_Actual;
import melnorme.lang.ide.ui.LangUIPlugin;
import melnorme.lang.ide.ui.actions.AbstractEditorOperation;
import melnorme.lang.ide.ui.actions.AbstractEditorOperationHandler;
import melnorme.lang.ide.ui.editor.EditorUtils.OpenNewEditorMode;
import melnorme.lang.ide.ui.editor.actions.AbstractEditorOperation;
import melnorme.lang.ide.ui.editor.actions.GoToMatchingBracketHandler;
import melnorme.lang.ide.ui.editor.actions.ToggleCommentHandler;
import melnorme.lang.tooling.ast.SourceRange;
import melnorme.utilbox.collections.ArrayList2;

Expand All @@ -39,17 +40,6 @@ public LangEditorActionContributor() {
super();
}

@Override
public void init(IActionBars bars) {
super.init(bars);

// Register some handlers active only when editor is active:

activateHandler(EditorSettings_Actual.EditorCommandIds.OpenDef_ID, getOpenDefinition_Handler());

registerOtherEditorHandlers();
}

protected void activateHandler(String string, AbstractHandler handler) {
IHandlerActivation handlerActivation = getHandlerService_2().activateHandler(string, handler);
handlerActivations.add(handlerActivation);
Expand All @@ -69,24 +59,49 @@ public final void dispose() {
protected void doDispose() {
}

protected AbstractHandler getOpenDefinition_Handler() {
return new AbstractEditorOperationHandler(getPage()) {

/* ----------------- Register handlers ----------------- */

@Override
public void init(IActionBars bars) {
super.init(bars);

// Register handlers active only when editor is active:

activateHandler(EditorSettings_Actual.EditorCommandIds.OpenDef_ID, getHandler_OpenDefinition());
activateHandler(EditorSettings_Actual.EditorCommandIds.GoToMatchingBracket, getHandler_GoToMatchingBracket());
activateHandler(EditorSettings_Actual.EditorCommandIds.ToggleComment, getHandler_ToggleComment());

registerOtherEditorHandlers();
}

protected AbstractHandler getHandler_OpenDefinition() {
return new AbstractEditorOperationHandler() {
@Override
public AbstractEditorOperation createOperation(ITextEditor editor) {
OpenNewEditorMode newEditorMode = OpenNewEditorMode.TRY_REUSING_EXISTING_EDITORS;
OpenNewEditorMode newEditorMode = OpenNewEditorMode.TRY_REUSING_EXISTING;
return createOpenDefinitionOperation(editor, EditorUtils.getSelectionSR(editor), newEditorMode);
}
};
}

protected void registerOtherEditorHandlers() {
}

protected abstract AbstractEditorOperation createOpenDefinitionOperation(ITextEditor editor, SourceRange range,
OpenNewEditorMode newEditorMode);


protected abstract void registerOtherEditorHandlers();


protected AbstractHandler getHandler_GoToMatchingBracket() {
return new GoToMatchingBracketHandler(getPage());
}

protected AbstractHandler getHandler_ToggleComment() {
return new ToggleCommentHandler(getPage());
}


/* ----------------- Menu / Toolbar contributions ----------------- */

@Override
public void contributeToMenu(IMenuManager menu) {
super.contributeToMenu(menu);
Expand All @@ -95,11 +110,15 @@ public void contributeToMenu(IMenuManager menu) {

prepareSourceMenu(menu);

prepareNavigateMenu(menu);

}

protected void prepareNavigateMenu(IMenuManager menu) {
IMenuManager navigateMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE);
if (navigateMenu != null) {

// TODO: go to matching bracket
}

}

protected void prepareEditMenu(IMenuManager menu) {
Expand Down
Expand Up @@ -12,6 +12,8 @@


import melnorme.lang.ide.ui.actions.CommandsHelper;
import melnorme.lang.ide.ui.editor.actions.AbstractEditorHandler;
import melnorme.lang.ide.ui.editor.actions.AbstractEditorOperation;
import melnorme.utilbox.collections.ArrayList2;

import org.eclipse.jface.action.IMenuManager;
Expand All @@ -20,6 +22,7 @@
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.services.IServiceLocator;
import org.eclipse.ui.texteditor.ITextEditor;

public class LangEditorActionContributorHelper extends TextEditorActionContributor {

Expand All @@ -42,21 +45,6 @@ protected IHandlerService getHandlerService_2() {
return (IHandlerService) getServiceLocator().getService(IHandlerService.class);
}

@Override
public void contributeToMenu(IMenuManager menu) {
super.contributeToMenu(menu);
}

protected CommandContributionItem pushItem(String commandId, String contribId) {
return CommandsHelper.pushItem(getServiceLocator(), commandId, contribId);
}

protected CommandContributionItem pushItem(String commandId) {
return CommandsHelper.pushItem(getServiceLocator(), commandId, commandId);
}

/* ----------------- ----------------- */

protected <T extends IActiveEditorListener> T registerActiveEditorListener(T activeEditorListener) {
activeEditorListeners.add(activeEditorListener);
return activeEditorListener;
Expand All @@ -71,4 +59,38 @@ public void setActiveEditor(IEditorPart part) {
}
}

/* ----------------- ----------------- */

public abstract class AbstractEditorHandlerExt extends AbstractEditorHandler {
public AbstractEditorHandlerExt() {
super(getPage());
}
}

public abstract class AbstractEditorOperationHandler extends AbstractEditorHandlerExt {

@Override
public void runWithEditor(ITextEditor editor) {
createOperation(editor).executeAndHandleResult();
}

public abstract AbstractEditorOperation createOperation(ITextEditor editor);

}

/* ----------------- ----------------- */

@Override
public void contributeToMenu(IMenuManager menu) {
super.contributeToMenu(menu);
}

protected CommandContributionItem pushItem(String commandId, String contribId) {
return CommandsHelper.pushItem(getServiceLocator(), commandId, contribId);
}

protected CommandContributionItem pushItem(String commandId) {
return CommandsHelper.pushItem(getServiceLocator(), commandId, commandId);
}

}
Expand Up @@ -13,8 +13,10 @@

import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import melnorme.lang.ide.ui.EditorSettings_Actual;
import melnorme.lang.ide.ui.EditorSettings_Actual.EditorCommandIds;
import melnorme.lang.ide.ui.LangImages;
import melnorme.lang.ide.ui.actions.CommandsHelper;
import melnorme.utilbox.core.DevelopmentCodeMarkers;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
Expand Down Expand Up @@ -48,7 +50,7 @@ protected CommandContributionItemParameter createOpenDefinitionContribParameters
return cip;
}

/* ----------------- header ----------------- */
/* ----------------- Source menu ----------------- */

public static final String SOURCE_MENU_GroupComment = "comment";
public static final String SOURCE_MENU_GroupFormat = "format";
Expand All @@ -75,12 +77,16 @@ protected void prepareSourceMenu(IMenuManager ctxMenu) {
}

protected void contributeSourceMenu(IMenuManager sourceMenu) {
// TODO: toggle comment action
if(DevelopmentCodeMarkers.UNIMPLEMENTED_FUNCTIONALITY) {
sourceMenu.appendToGroup(SOURCE_MENU_GroupComment,
pushItem(svcLocator, EditorCommandIds.ToggleComment));
}

sourceMenu.appendToGroup(SOURCE_MENU_GroupFormat,
pushItem(svcLocator, ITextEditorActionDefinitionIds.SHIFT_RIGHT));
sourceMenu.appendToGroup(SOURCE_MENU_GroupFormat,
pushItem(svcLocator, ITextEditorActionDefinitionIds.SHIFT_LEFT));

// TODO: ToggleComment action
}

}
Expand Up @@ -12,7 +12,7 @@

import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import static melnorme.utilbox.core.CoreUtil.array;
import melnorme.lang.ide.ui.actions.AbstractOpenElementOperation;
import melnorme.lang.ide.ui.editor.actions.AbstractOpenElementOperation;
import melnorme.lang.ide.ui.text.util.JavaWordFinder;
import melnorme.lang.tooling.ast.SourceRange;

Expand Down
Expand Up @@ -8,7 +8,7 @@
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.actions;
package melnorme.lang.ide.ui.editor.actions;


import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
Expand Down Expand Up @@ -41,11 +41,11 @@ public Object execute(ExecutionEvent event) throws ExecutionException {
if(editor == null) {
throw new ExecutionException(LangUIMessages.INTERNAL_ERROR_NoEditorForCommand);
}
runOperation(editor);
runWithEditor(editor);

return null;
}

public abstract void runOperation(ITextEditor editor);
public abstract void runWithEditor(ITextEditor editor);

}
Expand Up @@ -8,13 +8,15 @@
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.actions;
package melnorme.lang.ide.ui.editor.actions;

import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;

import java.nio.file.Path;

import melnorme.lang.ide.core.LangCore;
import melnorme.lang.ide.ui.actions.AbstractUIOperation;
import melnorme.lang.ide.ui.actions.UIUserInteractionsHelper;
import melnorme.lang.ide.ui.editor.EditorUtils;
import melnorme.utilbox.misc.Location;

Expand Down
Expand Up @@ -8,7 +8,7 @@
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.actions;
package melnorme.lang.ide.ui.editor.actions;


import static melnorme.utilbox.core.CoreUtil.areEqual;
Expand Down

0 comments on commit d3742dd

Please sign in to comment.